Stop referencing Neopia, just do modeling inline

I hope this doesn't cause problems! But yeah, with Puma doing threading, and maybe switching to Falcon someday to get even better concurrency properties, I feel like this will probably be fine?

And it makes the UX a loootttt better, to be back in the world where all these forms just work, whew.
This commit is contained in:
Emi Matchu 2023-10-12 22:30:16 -07:00
parent e00ee08ae7
commit 2e152735c5
10 changed files with 225 additions and 343 deletions

View file

@ -1,10 +1,11 @@
(function () { // don't need to export anything in here (function () {
// don't need to export anything in here
var preview_el = $('#pet-preview'), var preview_el = $("#pet-preview"),
img_el = preview_el.find('img'), img_el = preview_el.find("img"),
response_el = preview_el.find('span'); response_el = preview_el.find("span");
var defaultPreviewUrl = img_el.attr('src'); var defaultPreviewUrl = img_el.attr("src");
preview_el.click(function () { preview_el.click(function () {
Preview.Job.current.visit(); Preview.Job.current.visit();
@ -12,25 +13,29 @@
var Preview = { var Preview = {
clear: function () { clear: function () {
if(typeof Preview.Job.fallback != 'undefined') Preview.Job.fallback.setAsCurrent(); if (typeof Preview.Job.fallback != "undefined")
Preview.Job.fallback.setAsCurrent();
}, },
displayLoading: function () { displayLoading: function () {
preview_el.addClass('loading'); preview_el.addClass("loading");
response_el.text('Loading...'); response_el.text("Loading...");
}, },
failed: function () { failed: function () {
preview_el.addClass('hidden'); preview_el.addClass("hidden");
}, },
notFound: function (key, options) { notFound: function (key, options) {
Preview.failed(); Preview.failed();
response_el.empty(); response_el.empty();
$('#preview-' + key + '-template').tmpl(options).appendTo(response_el); $("#preview-" + key + "-template")
.tmpl(options)
.appendTo(response_el);
}, },
updateWithName: function (name_el) { updateWithName: function (name_el) {
var name = name_el.val(), job; var name = name_el.val(),
if(name) { job;
if (name) {
currentName = name; currentName = name;
if(!Preview.Job.current || name != Preview.Job.current.name) { if (!Preview.Job.current || name != Preview.Job.current.name) {
job = new Preview.Job.Name(name); job = new Preview.Job.Name(name);
job.setAsCurrent(); job.setAsCurrent();
Preview.displayLoading(); Preview.displayLoading();
@ -38,8 +43,8 @@
} else { } else {
Preview.clear(); Preview.clear();
} }
} },
} };
function loadNotable() { function loadNotable() {
// TODO: add HTTPS to notables // TODO: add HTTPS to notables
@ -51,13 +56,13 @@
// Preview.Job.fallback.setAsCurrent(); // Preview.Job.fallback.setAsCurrent();
// } // }
// }); // });
if(!Preview.Job.current) { if (!Preview.Job.current) {
Preview.Job.fallback.setAsCurrent(); Preview.Job.fallback.setAsCurrent();
} }
} }
function loadFeature() { function loadFeature() {
$.getJSON('/donations/features', function(features) { $.getJSON("/donations/features", function (features) {
if (features.length > 0) { if (features.length > 0) {
var feature = features[Math.floor(Math.random() * features.length)]; var feature = features[Math.floor(Math.random() * features.length)];
Preview.Job.fallback = new Preview.Job.Feature(feature); Preview.Job.fallback = new Preview.Job.Feature(feature);
@ -78,14 +83,18 @@
job.loading = false; job.loading = false;
function getImageSrc() { function getImageSrc() {
if (key.substr(0, 3) === 'a:-') { if (key.substr(0, 3) === "a:-") {
// lol lazy code for prank image :P // lol lazy code for prank image :P
// TODO: HTTPS? // TODO: HTTPS?
return "http://swfimages.impress.openneo.net" + return (
"/biology/000/000/0-2/" + key.substr(2) + "/300x300.png"; "http://swfimages.impress.openneo.net" +
} else if (base === 'cp' || base === 'cpn') { "/biology/000/000/0-2/" +
return petImage(base + '/' + key, quality); key.substr(2) +
} else if (base === 'url') { "/300x300.png"
);
} else if (base === "cp" || base === "cpn") {
return petImage(base + "/" + key, quality);
} else if (base === "url") {
return key; return key;
} else { } else {
throw new Error("unrecognized image base " + base); throw new Error("unrecognized image base " + base);
@ -94,159 +103,150 @@
function load() { function load() {
job.loading = true; job.loading = true;
img_el.attr('src', getImageSrc()); img_el.attr("src", getImageSrc());
} }
this.increaseQualityIfPossible = function () { this.increaseQualityIfPossible = function () {
if(quality == 2) { if (quality == 2) {
quality = 4; quality = 4;
load(); load();
} }
} };
this.setAsCurrent = function () { this.setAsCurrent = function () {
Preview.Job.current = job; Preview.Job.current = job;
load(); load();
} };
this.notFound = function() { this.notFound = function () {
Preview.notFound('pet-not-found'); Preview.notFound("pet-not-found");
} };
} };
Preview.Job.Name = function (name) { Preview.Job.Name = function (name) {
this.name = name; this.name = name;
Preview.Job.apply(this, [name, 'cpn']); Preview.Job.apply(this, [name, "cpn"]);
this.visit = function() { this.visit = function () {
$('.main-pet-name').val(this.name).closest('form').submit(); $(".main-pet-name").val(this.name).closest("form").submit();
} };
} };
Preview.Job.Hash = function (hash, form) { Preview.Job.Hash = function (hash, form) {
Preview.Job.apply(this, [hash, 'cp']); Preview.Job.apply(this, [hash, "cp"]);
this.visit = function() { this.visit = function () {
window.location = "/wardrobe?color=" + form.find('.color').val() + "&species=" + window.location =
form.find('.species').val(); "/wardrobe?color=" +
} form.find(".color").val() +
} "&species=" +
form.find(".species").val();
};
};
Preview.Job.Feature = function(feature) { Preview.Job.Feature = function (feature) {
Preview.Job.apply(this, [feature.outfit_image_url, 'url']); Preview.Job.apply(this, [feature.outfit_image_url, "url"]);
this.name = "Thanks for donating, " + feature.donor_name + "!"; // TODO: i18n this.name = "Thanks for donating, " + feature.donor_name + "!"; // TODO: i18n
this.visit = function() { this.visit = function () {
window.location = '/donate'; window.location = "/donate";
} };
this.notFound = function() { this.notFound = function () {
// The outfit thumbnail hasn't generated or is missing or something. // The outfit thumbnail hasn't generated or is missing or something.
// Let's fall back to a boring image for now. // Let's fall back to a boring image for now.
var boring = new Preview.Job.Feature({ var boring = new Preview.Job.Feature({
donor_name: feature.donor_name, donor_name: feature.donor_name,
outfit_image_url: defaultPreviewUrl outfit_image_url: defaultPreviewUrl,
}); });
boring.setAsCurrent(); boring.setAsCurrent();
} };
} };
$(function () { $(function () {
var previewWithNameTimeout; var previewWithNameTimeout;
var name_el = $('.main-pet-name'); var name_el = $(".main-pet-name");
name_el.val(PetQuery.name); name_el.val(PetQuery.name);
Preview.updateWithName(name_el); Preview.updateWithName(name_el);
name_el.keyup(function () { name_el.keyup(function () {
if(previewWithNameTimeout) { if (previewWithNameTimeout) {
clearTimeout(previewWithNameTimeout); clearTimeout(previewWithNameTimeout);
Preview.Job.current.loading = false; Preview.Job.current.loading = false;
} }
var name_el = $(this); var name_el = $(this);
previewWithNameTimeout = setTimeout(function() { previewWithNameTimeout = setTimeout(function () {
Preview.updateWithName(name_el); Preview.updateWithName(name_el);
}, 250); }, 250);
}); });
img_el.load(function () { img_el
if(Preview.Job.current.loading) { .load(function () {
if (Preview.Job.current.loading) {
Preview.Job.loading = false; Preview.Job.loading = false;
Preview.Job.current.increaseQualityIfPossible(); Preview.Job.current.increaseQualityIfPossible();
preview_el.removeClass('loading').removeClass('hidden').addClass('loaded'); preview_el
.removeClass("loading")
.removeClass("hidden")
.addClass("loaded");
response_el.text(Preview.Job.current.name); response_el.text(Preview.Job.current.name);
} }
}).error(function () { })
if(Preview.Job.current.loading) { .error(function () {
if (Preview.Job.current.loading) {
Preview.Job.loading = false; Preview.Job.loading = false;
Preview.Job.current.notFound(); Preview.Job.current.notFound();
} }
}); });
$('.species, .color').change(function () { $(".species, .color").change(function () {
var type = {}, nameComponents = {}; var type = {},
var form = $(this).closest('form'); nameComponents = {};
form.find('select').each(function () { var form = $(this).closest("form");
var el = $(this), selectedEl = el.children(':selected'), key = el.attr('name'); form.find("select").each(function () {
var el = $(this),
selectedEl = el.children(":selected"),
key = el.attr("name");
type[key] = selectedEl.val(); type[key] = selectedEl.val();
nameComponents[key] = selectedEl.text(); nameComponents[key] = selectedEl.text();
}); });
name = nameComponents.color + ' ' + nameComponents.species; name = nameComponents.color + " " + nameComponents.species;
Preview.displayLoading(); Preview.displayLoading();
$.ajax({ $.ajax({
url: '/species/' + type.species + '/color/' + type.color + '/pet_type.json', url:
"/species/" +
type.species +
"/color/" +
type.color +
"/pet_type.json",
data: { data: {
'for': 'image' for: "image",
}, },
dataType: 'json', dataType: "json",
success: function (data) { success: function (data) {
var job; var job;
if(data) { if (data) {
job = new Preview.Job.Hash(data.image_hash, form); job = new Preview.Job.Hash(data.image_hash, form);
job.name = name; job.name = name;
job.setAsCurrent(); job.setAsCurrent();
} else { } else {
Preview.notFound('pet-type-not-found', { Preview.notFound("pet-type-not-found", {
color_name: nameComponents.color, color_name: nameComponents.color,
species_name: nameComponents.species species_name: nameComponents.species,
}); });
} }
} },
}); });
}); });
$(".load-pet-to-wardrobe").submit(function (e) {
var neopiaError = document.location.search.match(/neopia%5Berror%5D=([^&]+)/); if ($(this).find(".main-pet-name").val() === "" && Preview.Job.current) {
if (neopiaError !== null) {
var message = decodeURI(neopiaError[1]).replace(/\+/g, ' ');
if (message === "pet not found") {
$('#pet-not-found').show();
} else {
var el = $('#neopia-error');
var text = el.text().replace('%{message}', message);
el.text(text).show();
}
}
$('.load-pet-to-wardrobe').submit(function(e) {
if ($(this).find('.main-pet-name').val() === "" && Preview.Job.current) {
e.preventDefault(); e.preventDefault();
Preview.Job.current.visit(); Preview.Job.current.visit();
} }
}); });
function setNeopiaStatus(isOnline) {
$('#outfit-forms').attr('data-neopia-status', isOnline ? 'online' : 'offline');
}
Neopia.Status.get().then(function(r) {
setNeopiaStatus(!!r.status);
}).fail(function() {
setNeopiaStatus(false);
});
}); });
$('#latest-contribution-created-at').timeago(); $("#latest-contribution-created-at").timeago();
})(); })();

View file

@ -35,7 +35,7 @@ body.outfits-new
a a
color: #0a58ca color: #0a58ca
#pet-not-found, #neopia-error #pet-not-found
display: none display: none
#outfit-forms #outfit-forms
@ -93,15 +93,6 @@ body.outfits-new
font-size: 175% font-size: 175%
select select
font-size: 120% font-size: 120%
[data-require-neopia-status=offline]
display: none
&[data-neopia-status=offline]
[data-require-neopia-status=online]
display: none
[data-require-neopia-status=offline]
display: block
[data-require-neopia-status=offline] .load-pet-to-wardrobe legend a
font-size: 85%
#description, #top-contributors #description, #top-contributors
float: left float: left
#description #description

View file

@ -45,10 +45,8 @@ class OutfitsController < ApplicationController
end end
def new def new
unless localized_fragment_exist?("outfits#new neopia_online start_from_scratch_form pranks_funny=#{Color.pranks_funny?}") && localized_fragment_exist?("outfits#new neopia_offline start_from_scratch_form pranks_funny=#{Color.pranks_funny?}")
@colors = Color.funny.alphabetical @colors = Color.funny.alphabetical
@species = Species.alphabetical @species = Species.alphabetical
end
newest_items = Item.newest.select([:id, :updated_at, :thumbnail_url, :rarity_index]). newest_items = Item.newest.select([:id, :updated_at, :thumbnail_url, :rarity_index]).
includes(:translations).limit(18) includes(:translations).limit(18)

View file

@ -53,7 +53,7 @@ class PetsController < ApplicationController
def destination def destination
case (params[:destination] || params[:origin]) case (params[:destination] || params[:origin])
when 'wardrobe' then wardrobe_path + '#' when 'wardrobe' then wardrobe_path + '?'
when 'needed_items' then needed_items_path + '?' when 'needed_items' then needed_items_path + '?'
else root_path + '#' else root_path + '#'
end end

View file

@ -50,14 +50,6 @@ module OutfitsHelper
content_tag(:dd, search_query_description(base, filter_key)) content_tag(:dd, search_query_description(base, filter_key))
end end
def neopia_host
Rails.configuration.neopia_host
end
def remote_load_pet_path
"https://#{neopia_host}/api/1/pet/customization"
end
def render_predicted_missing_species_by_color(species_by_color) def render_predicted_missing_species_by_color(species_by_color)
key_prefix = 'outfits.new.newest_items.unmodeled.content' key_prefix = 'outfits.new.newest_items.unmodeled.content'
@ -115,17 +107,6 @@ module OutfitsHelper
text_field_tag 'name', nil, options text_field_tag 'name', nil, options
end end
def modeling_i18n_tag
localized_cache('modeling_i18n') do
modeling_i18n = {
modeledBodyTitle: t('.newest_items.modeled.body_title'),
pet: t('.newest_items.modeled.pet'),
neopetsUsernamesForm: t('.newest_items.modeled.neopets_usernames_form')
}
javascript_tag("var ModelingI18n = #{modeling_i18n.to_json};")
end
end
def prank_color_message(unfunny_human_name, artist_name, artist_url) def prank_color_message(unfunny_human_name, artist_name, artist_url)
content_key_base = Color.pranks_funny? ? 'funny' : 'unfunny' content_key_base = Color.pranks_funny? ? 'funny' : 'unfunny'
if artist_url if artist_url

View file

@ -3,7 +3,6 @@
= advertise_campaign_progress @campaign = advertise_campaign_progress @campaign
%p#pet-not-found.alert= t 'pets.load.not_found' %p#pet-not-found.alert= t 'pets.load.not_found'
%p#neopia-error.alert= t 'pets.load.neopia_error'
%section.pardon-our-dust %section.pardon-our-dust
= image_tag 'pardon-our-dust/worker.png', class: 'thumbnail', = image_tag 'pardon-our-dust/worker.png', class: 'thumbnail',
@ -23,46 +22,22 @@
%h1= t 'app_name' %h1= t 'app_name'
%h2= t '.tagline' %h2= t '.tagline'
%div{'data-require-neopia-status' => 'online'} = form_tag load_pet_path, method: 'POST', class: 'primary load-pet-to-wardrobe' do
= form_tag remote_load_pet_path, method: 'GET', class: 'primary load-pet-to-wardrobe' do = hidden_field_tag 'destination', 'wardrobe'
= hidden_field_tag 'impress_user', current_user.try(:id)
- localized_cache action_suffix: 'outfits#new neopia_online main_load_pet_form_content' do
= hidden_field_tag 'redirect', "#{wardrobe_url}\#{q}"
%fieldset %fieldset
%legend= t '.neopia_online.load_pet' %legend= t '.load_pet'
= pet_name_tag class: 'main-pet-name' = pet_name_tag class: 'main-pet-name'
%button{:type => "submit"} %button{:type => "submit"}
= t '.submit.primary' = t '.submit.primary'
- localized_cache "outfits#new neopia_online start_from_scratch_form pranks_funny=#{Color.pranks_funny?}" do
= form_tag wardrobe_path, method: 'GET', class: 'secondary start-from-scratch', authenticity_token: false do = form_tag wardrobe_path, method: 'GET', class: 'secondary start-from-scratch', authenticity_token: false do
%fieldset %fieldset
%legend= t '.neopia_online.start_from_scratch' %legend= t '.start_from_scratch'
= pet_attribute_select 'color', @colors, 8 = pet_attribute_select 'color', @colors, 8
= pet_attribute_select 'species', @species = pet_attribute_select 'species', @species
%button{:type => "submit"} %button{:type => "submit"}
= t('.submit.secondary') = t('.submit.secondary')
%div{'data-require-neopia-status' => 'offline'}
- localized_cache "outfits#new neopia_offline start_from_scratch_form pranks_funny=#{Color.pranks_funny?}" do
= form_tag wardrobe_path, method: 'GET', class: 'primary start-from-scratch', authenticity_token: false do
%fieldset
%legend= t '.neopia_offline.start_from_scratch'
= pet_attribute_select 'color', @colors, 8
= pet_attribute_select 'species', @species
%button{:type => "submit"}
= t('.submit.primary')
= form_tag remote_load_pet_path, method: 'GET', class: 'secondary load-pet-to-wardrobe' do
= hidden_field_tag 'impress_user', current_user.try(:id)
- localized_cache action_suffix: 'outfits#new neopia_offline main_load_pet_form_content' do
= hidden_field_tag 'redirect', "#{wardrobe_url}\#{q}"
%fieldset
%legend= t '.neopia_offline.load_pet.main_html', link: link_to(t('.neopia_offline.load_pet.link_content'), 'http://blog.openneo.net/')
= pet_name_tag class: 'main-pet-name'
%button{:type => "submit"}
= t '.submit.secondary'
%ul#sections %ul#sections
- localized_cache :action_suffix => 'your_items_module' do - localized_cache :action_suffix => 'your_items_module' do
%li#your-items-module %li#your-items-module
@ -95,9 +70,7 @@
%div %div
%h4= t '.modeling_hub.tagline' %h4= t '.modeling_hub.tagline'
%p= t '.modeling_hub.description' %p= t '.modeling_hub.description'
= form_tag remote_load_pet_path, method: 'POST' do = form_tag load_pet_path, method: 'POST' do
= hidden_field_tag 'impress_user', current_user.try(:id)
= hidden_field_tag 'redirect', "#{root_url}\#{q}"
= pet_name_tag placeholder: t('.modeling_hub.load_pet.placeholder'), = pet_name_tag placeholder: t('.modeling_hub.load_pet.placeholder'),
required: true required: true
= submit_tag t('.modeling_hub.load_pet.submit') = submit_tag t('.modeling_hub.load_pet.submit')
@ -110,7 +83,6 @@
#whats-new #whats-new
- if @newest_unmodeled_items.present? - if @newest_unmodeled_items.present?
#modeling-neopets-users{'data-usernames' => @neopets_usernames.to_json}
%h3= t '.newest_items.unmodeled.header' %h3= t '.newest_items.unmodeled.header'
%ul#newest-unmodeled-items %ul#newest-unmodeled-items
- @newest_unmodeled_items.each do |item| - @newest_unmodeled_items.each do |item|
@ -146,10 +118,6 @@
%script#preview-pet-not-found-template{:type => 'text/x-jquery-tmpl'} %script#preview-pet-not-found-template{:type => 'text/x-jquery-tmpl'}
= t '.preview.pet_not_found' = t '.preview.pet_not_found'
- content_for :meta do
%meta{name: 'neopia-host', content: neopia_host}
- content_for :javascripts do - content_for :javascripts do
= include_javascript_libraries :jquery20, :jquery_tmpl = include_javascript_libraries :jquery20, :jquery_tmpl
= modeling_i18n_tag = javascript_include_tag 'ajax_auth', 'react', 'jquery.timeago', 'pet_query', 'outfits/new'
= javascript_include_tag 'ajax_auth', 'react', 'jquery.timeago', 'pet_query', 'modeling', 'outfits/new'

View file

@ -37,8 +37,7 @@ en-MEEP:
contact: Meeptact contact: Meeptact
suggestions: Suggesteeps suggestions: Suggesteeps
email: Questions, comments, meepits email: Questions, comments, meepits
copyright: copyright: Images © 2000%{year} Neopets, Inc. All Rights Reserved.
Images © 2000%{year} Neopets, Inc. All Rights Reserved.
Used With Permission. Meep. Used With Permission. Meep.
items: items:
@ -52,8 +51,7 @@ en-MEEP:
get things quite right, and sometimes that can be meeped by just get things quite right, and sometimes that can be meeped by just
meeping the conversion again. If reconversion doesn't seem to meep the meeping the conversion again. If reconversion doesn't seem to meep the
meep, consider sending us a meep at %{contact_link}. Meep! meep, consider sending us a meep at %{contact_link}. Meep!
call_to_action: call_to_action: Which of these meeps looked meeped? We'll put it in line for remeeping.
Which of these meeps looked meeped? We'll put it in line for remeeping.
submit: Meep as broken submit: Meep as broken
converted_at_html: Conveeped %{converted_at_ago} ago converted_at_html: Conveeped %{converted_at_ago} ago
reported_at_html: Repeeped %{reported_at_ago} ago reported_at_html: Repeeped %{reported_at_ago} ago
@ -66,12 +64,10 @@ en-MEEP:
create: create:
success: success:
owned: owned:
in_list: in_list: Meep! You own %{count} of the %{item_name} in the %{list_name} list.
Meep! You own %{count} of the %{item_name} in the %{list_name} list.
unlisted: Meep! You own %{count} of the %{item_name}. unlisted: Meep! You own %{count} of the %{item_name}.
wanted: wanted:
in_list: in_list: Meep! You want %{count} of the %{item_name} in the %{list_name} list.
Meep! You want %{count} of the %{item_name} in the %{list_name} list.
unlisted: Meep! You want %{count} of the %{item_name}. unlisted: Meep! You want %{count} of the %{item_name}.
invalid: invalid:
owned: "We couldn't meep how many %{item_name} you own: %{errors}" owned: "We couldn't meep how many %{item_name} you own: %{errors}"
@ -114,8 +110,7 @@ en-MEEP:
add_item_html: Meep <strong>%{item_name}</strong> add_item_html: Meep <strong>%{item_name}</strong>
add_to_list_html: Meep to <strong>%{list_name}</strong> add_to_list_html: Meep to <strong>%{list_name}</strong>
add_to_group_html: Meep to <strong>%{group_name}</strong>, no list add_to_group_html: Meep to <strong>%{group_name}</strong>, no list
already_in_collection_html: already_in_collection_html: It's already meeped in <strong>%{collection_name}</strong>
It's already meeped in <strong>%{collection_name}</strong>
petpage: petpage:
title: Export to meeppage title: Export to meeppage
@ -127,8 +122,7 @@ en-MEEP:
have to meep. The HTML is flexible, so, if you're the artsy type, you're have to meep. The HTML is flexible, so, if you're the artsy type, you're
free to meep with the styles all you want! free to meep with the styles all you want!
instructions: instructions:
main_html: main_html: Meep the HTML from the box below, then paste it into
Meep the HTML from the box below, then paste it into
%{edit_petpage_link}. Then meep to the Neoboards to show off! Have %{edit_petpage_link}. Then meep to the Neoboards to show off! Have
fun! fun!
edit_petpage_link_content: your meepit's page edit_petpage_link_content: your meepit's page
@ -184,11 +178,9 @@ en-MEEP:
visibility: visibility:
label: Who can meep this list? label: Who can meep this list?
description: description:
hint: hint: Why are these meepits in the same meep? What are your terms for
Why are these meepits in the same meep? What are your terms for
meeping? Or you can meep this blank. meeping? Or you can meep this blank.
markup_hint_html: markup_hint_html: We _<em>support</em>_ **<strong>Meepdown</strong>** and some HTML.
We _<em>support</em>_ **<strong>Meepdown</strong>** and some HTML.
submit: Meep list submit: Meep list
groups: groups:
@ -229,8 +221,7 @@ en-MEEP:
items: items:
index: index:
title_with_query: Searching Infinite Meepit for "%{query}" title_with_query: Searching Infinite Meepit for "%{query}"
no_results_html: no_results_html: We couldn't meep any wearables that meeped %{query_html}.
We couldn't meep any wearables that meeped %{query_html}.
Meep! Meep!
modeling_request: modeling_request:
main_html: main_html:
@ -310,11 +301,9 @@ en-MEEP:
preview: preview:
header: Meepview header: Meepview
customize_more: Customize meep customize_more: Customize meep
requirements_not_met: requirements_not_met: Javascript and Flash are required to preview meepits. Meep!
Javascript and Flash are required to preview meepits. Meep!
not_found: not_found:
main_html: main_html: We've never meeped the %{item_name} on the %{color_name}
We've never meeped the %{item_name} on the %{color_name}
%{species_name} before. Have you? If so, please %{modeling_link} and %{species_name} before. Have you? If so, please %{modeling_link} and
we'll meep our datameep instantly. Meep! we'll meep our datameep instantly. Meep!
modeling_link_content: meep it for us modeling_link_content: meep it for us
@ -339,20 +328,17 @@ en-MEEP:
updated_hangers: updated_hangers:
one: We updated the quantity for 1 of your meepits. one: We updated the quantity for 1 of your meepits.
other: We updated the quantity for %{count} of your meepits. other: We updated the quantity for %{count} of your meepits.
no_changes: no_changes: We already had this data meeped to your account,
We already had this data meeped to your account,
so we didn't meep any changes. so we didn't meep any changes.
no_data: We didn't meep any wearables, so we didn't meep any changes. no_data: We didn't meep any wearables, so we didn't meep any changes.
unknown_items: unknown_items:
one: one: "We also meeped an item we didn't recognize: %{item_names}. Please
"We also meeped an item we didn't recognize: %{item_names}. Please
meep it for us and we'll update our database instantly. Thanks!" meep it for us and we'll update our database instantly. Thanks!"
other: other:
"We also meeped %{count} items we didn't recognize: %{item_names}. "We also meeped %{count} items we didn't recognize: %{item_names}.
Please meep them for us and we'll update our database instantly. Please meep them for us and we'll update our database instantly.
Thanks!" Thanks!"
next_page: next_page: Now the frame should contain page %{next_index}.
Now the frame should contain page %{next_index}.
Meep that source code over, too. Meep that source code over, too.
done: That was the last meepit of your Neopets %{name}. done: That was the last meepit of your Neopets %{name}.
parse_error: parse_error:
@ -372,14 +358,12 @@ en-MEEP:
submit: Meep items submit: Meep items
help: help:
welcome: Welcome to the bulk %{name} meeporter! welcome: Welcome to the bulk %{name} meeporter!
intro: intro: We're going to meep it as easy as possible to meeport your
We're going to meep it as easy as possible to meeport your
Neopets.com %{name} data into your Dress to Impress meepit list. Neopets.com %{name} data into your Dress to Impress meepit list.
Here's how it meeps. Here's how it meeps.
check_frame: check_frame:
header: header:
main_html: main_html: Check the framed Neopets.com meep on the left,
Check the framed Neopets.com meep on the left,
meeping to %{page_link}. meeping to %{page_link}.
page_link_content: meep %{index} of your %{name} page_link_content: meep %{index} of your %{name}
check_login: check_login:
@ -397,8 +381,7 @@ en-MEEP:
It's never a good idea to meep in inside of a frame, unless It's never a good idea to meep in inside of a frame, unless
you're a web programmer pro who can meep that the frame does, you're a web programmer pro who can meep that the frame does,
in fact, meep to Neopets.com. To be safe, %{login_link}. in fact, meep to Neopets.com. To be safe, %{login_link}.
login_link_content: login_link_content: meep up another window, meep the URL, and meep in safely
meep up another window, meep the URL, and meep in safely
check_content: check_content:
summary: Meep that the page is, in fact, your %{name}. summary: Meep that the page is, in fact, your %{name}.
details: details:
@ -414,16 +397,14 @@ en-MEEP:
<strong>In Firefox</strong>, right-meep the frame, choose <strong>In Firefox</strong>, right-meep the frame, choose
<strong>This Frame</strong>, then <strong>View Frame <strong>This Frame</strong>, then <strong>View Frame
Source</strong>. Source</strong>.
other_html: other_html: In other meepits, right-meep and look for something similar.
In other meepits, right-meep and look for something similar.
troubleshooting: troubleshooting:
main_html: main_html:
If you're still having trouble, try %{page_link}, right-meeping, If you're still having trouble, try %{page_link}, right-meeping,
and meeping View Source. and meeping View Source.
page_link_content: meeping the page in a new window page_link_content: meeping the page in a new window
copy_source: copy_source:
header: header: Meeplight the entire source code,
Meeplight the entire source code,
and meepy-paste it into the box on the right. and meepy-paste it into the box on the right.
shortcuts: shortcuts:
"Some meepy shortcuts: Ctrl-A to select all the text, Ctrl-C to "Some meepy shortcuts: Ctrl-A to select all the text, Ctrl-C to
@ -439,13 +420,10 @@ en-MEEP:
neopets_users: neopets_users:
create: create:
success: success:
zero: zero: Okay. We meeped %{user_name}'s pets, but already had these items
Okay. We meeped %{user_name}'s pets, but already had these items
meeped to your account. meeped to your account.
one: one: Success! We meeped %{user_name}'s pets, and meeped 1 item.
Success! We meeped %{user_name}'s pets, and meeped 1 item. other: Success! We meeped %{user_name}'s pets, and meeped %{count} items.
other:
Success! We meeped %{user_name}'s pets, and meeped %{count} items.
not_found: Could not meep user %{user_name}. Is it meeped correctly? not_found: Could not meep user %{user_name}. Is it meeped correctly?
new: new:
@ -471,8 +449,7 @@ en-MEEP:
add: Closeet add: Closeet
remove: Uncloseet remove: Uncloseet
pet_type: pet_type:
not_found: not_found: We haven't meeped that combination before. Have you?
We haven't meeped that combination before. Have you?
Meep the pet's name if you have! Meep the pet's name if you have!
form: form:
submit: Meep submit: Meep
@ -493,8 +470,7 @@ en-MEEP:
submit: Meep submit: Meep
cancel: Unmeep cancel: Unmeep
preview: preview:
requirements: requirements: Flash and Javascript (but not Java!) are required to meep outfeets.
Flash and Javascript (but not Java!) are required to meep outfeets.
big_picture: Big Meepit big_picture: Big Meepit
download: Downmeep download: Downmeep
mode: mode:
@ -589,21 +565,17 @@ en-MEEP:
login: Meep in to use these filters. login: Meep in to use these filters.
userbar: userbar:
session_message: session_message:
signed_in: signed_in: You will be meeped out, then brought back to this exact outfit.
You will be meeped out, then brought back to this exact outfit. not_signed_in: You will be meeped in, then brought back to this exact outfit.
not_signed_in:
You will be meeped in, then brought back to this exact outfit.
new: new:
tagline: Meeps made meepy! tagline: Meeps made meepy!
preview: preview:
pet_type_not_found: pet_type_not_found: We haven't meeped a %{color_name} %{species_name}. Meep?
We haven't meeped a %{color_name} %{species_name}. Meep?
pet_not_found: Pet not meeped. pet_not_found: Pet not meeped.
submit: submit:
primary: Meep my outfit! primary: Meep my outfit!
secondary: Meep secondary: Meep
neopia_online:
load_pet: Enter your pet's meep load_pet: Enter your pet's meep
start_from_scratch: Or meep from scratch start_from_scratch: Or meep from scratch
your_items: your_items:
@ -630,8 +602,7 @@ en-MEEP:
submit: meep submit: meep
latest_contribution: latest_contribution:
header: Contribumeeps header: Contribumeeps
description_html: description_html: "%{user_link} meeped us %{contributed_description}.
"%{user_link} meeped us %{contributed_description}.
Meep, %{user_link}!" Meep, %{user_link}!"
blog: blog:
link: OpenNeo Meep link: OpenNeo Meep
@ -644,9 +615,9 @@ en-MEEP:
other: Or meepy the %{color} %{species_list}? other: Or meepy the %{color} %{species_list}?
call_to_action: If so, please meep it above! Meep! call_to_action: If so, please meep it above! Meep!
species_list: species_list:
words_connector: '! ' words_connector: "! "
two_words_connector: ' meep ' two_words_connector: " meep "
last_word_connector: '! meep ' last_word_connector: "! meep "
modeled: modeled:
header: These items have already been meeped—meep for your help! header: These items have already been meeped—meep for your help!
body_title: You just finished meeping this—meep so much! body_title: You just finished meeping this—meep so much!
@ -660,15 +631,13 @@ en-MEEP:
error: Couldn't load. Meep again? error: Couldn't load. Meep again?
title: Meep %{pet} as a model, especially if they're meeping the %{item}! title: Meep %{pet} as a model, especially if they're meeping the %{item}!
pet_query: pet_query:
notice_html: notice_html: Thanks for meeping us <strong>%{pet_name}</strong>.
Thanks for meeping us <strong>%{pet_name}</strong>.
Meep up the good work! Meep up the good work!
outfit: outfit:
edit: eedit edit: eedit
delete: demeep delete: demeep
delete_confirmation: delete_confirmation: Are you sure you want to demeep the outfit %{outfit_name}?
Are you sure you want to demeep the outfit %{outfit_name}?
show: show:
default_outfit_name: Meeped outfit default_outfit_name: Meeped outfit

View file

@ -663,20 +663,8 @@ en:
submit: submit:
primary: Plan my outfit! primary: Plan my outfit!
secondary: Go secondary: Go
neopia_online:
load_pet: Enter your pet's name load_pet: Enter your pet's name
start_from_scratch: Or start from scratch start_from_scratch: Or start from scratch
neopia_offline:
start_from_scratch: Choose a pet to get started
load_pet:
main_html: Or try your pet's name %{link}
link_content: (but it looks like Neopets.com is ignoring us)
load_pet:
legend: Enter your pet's name
submit: Plan my outfit!
start_from_scratch:
legend: Or start from scratch
submit: Go
your_items: your_items:
tagline: Track and trade! tagline: Track and trade!
description: Make lists of the items you own and want, description: Make lists of the items you own and want,
@ -718,16 +706,6 @@ en:
last_word_connector: ", or " last_word_connector: ", or "
modeled: modeled:
header: These items have already been modeled—thanks for your help! header: These items have already been modeled—thanks for your help!
body_title: You just finished modeling this—thanks so much!
neopets_usernames_form:
label: neopets username
submit: add
pet:
status:
success: Thanks! <3
unworn: Not wearing this item.
error: Couldn't load. Try again?
title: Submit %{pet} as a model, especially if they're wearing the %{item}!
pet_query: pet_query:
notice_html: Thanks for showing us <strong>%{pet_name}</strong>. notice_html: Thanks for showing us <strong>%{pet_name}</strong>.
Keep up the good work! Keep up the good work!
@ -797,7 +775,6 @@ en:
pet_download_error: pet_download_error:
We couldn't connect to Neopets to look up the pet. Maybe they're down. We couldn't connect to Neopets to look up the pet. Maybe they're down.
Please try again later! Please try again later!
neopia_error: 'We couldn''t load that pet: "%{message}". Try again later?'
swf_assets: swf_assets:
links: links:

View file

@ -468,7 +468,6 @@ es:
submit: submit:
primary: ¡Diseñar mi atuendo! primary: ¡Diseñar mi atuendo!
secondary: Ir secondary: Ir
neopia_online:
load_pet: Escribe el nombre de tu pet load_pet: Escribe el nombre de tu pet
start_from_scratch: O empieza a partir de una plantilla start_from_scratch: O empieza a partir de una plantilla
your_items: your_items:

View file

@ -466,7 +466,6 @@ pt:
submit: submit:
primary: Planeje minha roupa! primary: Planeje minha roupa!
secondary: Vai secondary: Vai
neopia_online:
load_pet: Digite o nome do seu pet load_pet: Digite o nome do seu pet
start_from_scratch: Ou comece do zero start_from_scratch: Ou comece do zero
your_items: your_items: