1
0
Fork 0
forked from OpenNeo/impress

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

View file

@ -45,10 +45,8 @@ class OutfitsController < ApplicationController
end
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
@species = Species.alphabetical
end
newest_items = Item.newest.select([:id, :updated_at, :thumbnail_url, :rarity_index]).
includes(:translations).limit(18)

View file

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

View file

@ -50,14 +50,6 @@ module OutfitsHelper
content_tag(:dd, search_query_description(base, filter_key))
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)
key_prefix = 'outfits.new.newest_items.unmodeled.content'
@ -115,17 +107,6 @@ module OutfitsHelper
text_field_tag 'name', nil, options
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)
content_key_base = Color.pranks_funny? ? 'funny' : 'unfunny'
if artist_url

View file

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

View file

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

View file

@ -663,20 +663,8 @@ en:
submit:
primary: Plan my outfit!
secondary: Go
neopia_online:
load_pet: Enter your pet's name
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:
tagline: Track and trade!
description: Make lists of the items you own and want,
@ -718,16 +706,6 @@ en:
last_word_connector: ", or "
modeled:
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:
notice_html: Thanks for showing us <strong>%{pet_name}</strong>.
Keep up the good work!
@ -797,7 +775,6 @@ en:
pet_download_error:
We couldn't connect to Neopets to look up the pet. Maybe they're down.
Please try again later!
neopia_error: 'We couldn''t load that pet: "%{message}". Try again later?'
swf_assets:
links:

View file

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

View file

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