Run Prettier on some of our JS assets
The motivation is that I'm about to change one of them to remove a reference to an old placeholder library, so I want that change to be clear!
This commit is contained in:
parent
0d23412fba
commit
95ff69ee9a
6 changed files with 443 additions and 340 deletions
|
@ -1,20 +1,20 @@
|
||||||
(function () {
|
(function () {
|
||||||
var CSRFProtection;
|
var CSRFProtection;
|
||||||
var token = $('meta[name="csrf-token"]').attr('content');
|
var token = $('meta[name="csrf-token"]').attr("content");
|
||||||
if (token) {
|
if (token) {
|
||||||
CSRFProtection = function(xhr, settings) {
|
CSRFProtection = function (xhr, settings) {
|
||||||
var sendToken = (
|
var sendToken =
|
||||||
(typeof settings.useCSRFProtection === 'undefined') // default to true
|
typeof settings.useCSRFProtection === "undefined" || // default to true
|
||||||
|| settings.useCSRFProtection);
|
settings.useCSRFProtection;
|
||||||
if (sendToken) {
|
if (sendToken) {
|
||||||
xhr.setRequestHeader('X-CSRF-Token', token);
|
xhr.setRequestHeader("X-CSRF-Token", token);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
} else {
|
} else {
|
||||||
CSRFProtection = $.noop;
|
CSRFProtection = $.noop;
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
beforeSend: CSRFProtection
|
beforeSend: CSRFProtection,
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
document.getElementById('locale').addEventListener('change', function() {
|
document.getElementById("locale").addEventListener("change", function () {
|
||||||
document.getElementById('locale-form').submit();
|
document.getElementById("locale-form").submit();
|
||||||
});
|
});
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function hangersInit() {
|
function hangersInit() {
|
||||||
for(var i = 0; i < hangersInitCallbacks.length; i++) {
|
for (var i = 0; i < hangersInitCallbacks.length; i++) {
|
||||||
hangersInitCallbacks[i]();
|
hangersInitCallbacks[i]();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,33 +19,33 @@
|
||||||
|
|
||||||
var hangerGroups = [];
|
var hangerGroups = [];
|
||||||
|
|
||||||
$('div.closet-hangers-group').each(function () {
|
$("div.closet-hangers-group").each(function () {
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
var lists = [];
|
var lists = [];
|
||||||
|
|
||||||
el.find('div.closet-list').each(function () {
|
el.find("div.closet-list").each(function () {
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
var id = el.attr('data-id');
|
var id = el.attr("data-id");
|
||||||
if(id) {
|
if (id) {
|
||||||
lists[lists.length] = {
|
lists[lists.length] = {
|
||||||
id: parseInt(id, 10),
|
id: parseInt(id, 10),
|
||||||
label: el.find('h4').text()
|
label: el.find("h4").text(),
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
hangerGroups[hangerGroups.length] = {
|
hangerGroups[hangerGroups.length] = {
|
||||||
label: el.find('h3').text(),
|
label: el.find("h3").text(),
|
||||||
lists: lists,
|
lists: lists,
|
||||||
owned: (el.attr('data-owned') == 'true')
|
owned: el.attr("data-owned") == "true",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
$('div.closet-hangers-group span.toggle').live('click', function () {
|
$("div.closet-hangers-group span.toggle").live("click", function () {
|
||||||
$(this).closest('.closet-hangers-group').toggleClass('hidden');
|
$(this).closest(".closet-hangers-group").toggleClass("hidden");
|
||||||
});
|
});
|
||||||
|
|
||||||
var hangersElQuery = '#closet-hangers';
|
var hangersElQuery = "#closet-hangers";
|
||||||
var hangersEl = $(hangersElQuery);
|
var hangersEl = $(hangersElQuery);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -54,8 +54,8 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$('#toggle-compare').click(function () {
|
$("#toggle-compare").click(function () {
|
||||||
hangersEl.toggleClass('comparing');
|
hangersEl.toggleClass("comparing");
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var body = $(document.body).addClass("js");
|
var body = $(document.body).addClass("js");
|
||||||
if(!body.hasClass("current-user")) return false;
|
if (!body.hasClass("current-user")) return false;
|
||||||
|
|
||||||
// When we get hangers HTML, add the controls. We do this in JS rather than
|
// When we get hangers HTML, add the controls. We do this in JS rather than
|
||||||
// in the HTML for caching, since otherwise the requests can take forever.
|
// in the HTML for caching, since otherwise the requests can take forever.
|
||||||
|
@ -81,11 +81,11 @@
|
||||||
$("#closet-hangers div.closet-hangers-group").each(function () {
|
$("#closet-hangers div.closet-hangers-group").each(function () {
|
||||||
var groupEl = $(this);
|
var groupEl = $(this);
|
||||||
var owned = groupEl.data("owned");
|
var owned = groupEl.data("owned");
|
||||||
|
|
||||||
groupEl.find("div.closet-list").each(function () {
|
groupEl.find("div.closet-list").each(function () {
|
||||||
var listEl = $(this);
|
var listEl = $(this);
|
||||||
var listId = listEl.data("id");
|
var listId = listEl.data("id");
|
||||||
|
|
||||||
listEl.find("div.object").each(function () {
|
listEl.find("div.object").each(function () {
|
||||||
var hangerEl = $(this);
|
var hangerEl = $(this);
|
||||||
var hangerId = hangerEl.data("id");
|
var hangerId = hangerEl.data("id");
|
||||||
|
@ -94,32 +94,32 @@
|
||||||
|
|
||||||
// Ooh, this part is weird. We only want the name to be linked, so
|
// Ooh, this part is weird. We only want the name to be linked, so
|
||||||
// lift everything else out.
|
// lift everything else out.
|
||||||
var checkboxId = 'hanger-selected-' + hangerId;
|
var checkboxId = "hanger-selected-" + hangerId;
|
||||||
var label = $('<label />', {'for': checkboxId});
|
var label = $("<label />", { for: checkboxId });
|
||||||
var link = hangerEl.children('a');
|
var link = hangerEl.children("a");
|
||||||
link.children(':not(.name)').detach().appendTo(label);
|
link.children(":not(.name)").detach().appendTo(label);
|
||||||
link.detach().appendTo(label);
|
link.detach().appendTo(label);
|
||||||
var checkbox = $('<input />', {
|
var checkbox = $("<input />", {
|
||||||
type: 'checkbox',
|
type: "checkbox",
|
||||||
id: checkboxId
|
id: checkboxId,
|
||||||
}).appendTo(hangerEl);
|
}).appendTo(hangerEl);
|
||||||
label.appendTo(hangerEl);
|
label.appendTo(hangerEl);
|
||||||
|
|
||||||
// I don't usually like to _blank things, but it's too easy to click
|
// I don't usually like to _blank things, but it's too easy to click
|
||||||
// the text when you didn't mean to and lose your selection work.
|
// the text when you didn't mean to and lose your selection work.
|
||||||
link.attr('target', '_blank');
|
link.attr("target", "_blank");
|
||||||
|
|
||||||
$.tmpl("updateFormTmpl", {
|
$.tmpl("updateFormTmpl", {
|
||||||
user_id: currentUserId,
|
user_id: currentUserId,
|
||||||
closet_hanger_id: hangerId,
|
closet_hanger_id: hangerId,
|
||||||
quantity: quantity,
|
quantity: quantity,
|
||||||
list_id: listId,
|
list_id: listId,
|
||||||
owned: owned
|
owned: owned,
|
||||||
}).appendTo(quantityEl);
|
}).appendTo(quantityEl);
|
||||||
|
|
||||||
$.tmpl("destroyFormTmpl", {
|
$.tmpl("destroyFormTmpl", {
|
||||||
user_id: currentUserId,
|
user_id: currentUserId,
|
||||||
closet_hanger_id: hangerId
|
closet_hanger_id: hangerId,
|
||||||
}).appendTo(hangerEl);
|
}).appendTo(hangerEl);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
$.fn.liveDraggable = function (opts) {
|
$.fn.liveDraggable = function (opts) {
|
||||||
this.live("mouseover", function() {
|
this.live("mouseover", function () {
|
||||||
if (!$(this).data("init")) {
|
if (!$(this).data("init")) {
|
||||||
$(this).data("init", true).draggable(opts);
|
$(this).data("init", true).draggable(opts);
|
||||||
}
|
}
|
||||||
|
@ -135,52 +135,59 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
$.fn.disableForms = function () {
|
$.fn.disableForms = function () {
|
||||||
return this.data("formsDisabled", true).find("input").attr("disabled", "disabled").end();
|
return this.data("formsDisabled", true)
|
||||||
}
|
.find("input")
|
||||||
|
.attr("disabled", "disabled")
|
||||||
|
.end();
|
||||||
|
};
|
||||||
|
|
||||||
$.fn.enableForms = function () {
|
$.fn.enableForms = function () {
|
||||||
return this.data("formsDisabled", false).find("input").removeAttr("disabled").end();
|
return this.data("formsDisabled", false)
|
||||||
}
|
.find("input")
|
||||||
|
.removeAttr("disabled")
|
||||||
|
.end();
|
||||||
|
};
|
||||||
|
|
||||||
$.fn.hasChanged = function () {
|
$.fn.hasChanged = function () {
|
||||||
return this.attr('data-previous-value') != this.val();
|
return this.attr("data-previous-value") != this.val();
|
||||||
}
|
};
|
||||||
|
|
||||||
$.fn.revertValue = function () {
|
$.fn.revertValue = function () {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
el.val(el.attr('data-previous-value'));
|
el.val(el.attr("data-previous-value"));
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$.fn.storeValue = function () {
|
$.fn.storeValue = function () {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
el.attr('data-previous-value', el.val());
|
el.attr("data-previous-value", el.val());
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$.fn.insertIntoSortedList = function (list, compare) {
|
$.fn.insertIntoSortedList = function (list, compare) {
|
||||||
var newChild = this, inserted = false;
|
var newChild = this,
|
||||||
|
inserted = false;
|
||||||
list.children().each(function () {
|
list.children().each(function () {
|
||||||
if(compare(newChild, $(this)) < 1) {
|
if (compare(newChild, $(this)) < 1) {
|
||||||
newChild.insertBefore(this);
|
newChild.insertBefore(this);
|
||||||
inserted = true;
|
inserted = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(!inserted) newChild.appendTo(list);
|
if (!inserted) newChild.appendTo(list);
|
||||||
return this;
|
return this;
|
||||||
}
|
};
|
||||||
|
|
||||||
function handleSaveError(xhr, action) {
|
function handleSaveError(xhr, action) {
|
||||||
try {
|
try {
|
||||||
var data = $.parseJSON(xhr.responseText);
|
var data = $.parseJSON(xhr.responseText);
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
var data = {};
|
var data = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof data.errors != 'undefined') {
|
if (typeof data.errors != "undefined") {
|
||||||
$.jGrowl("Error " + action + ": " + data.errors.join(", "));
|
$.jGrowl("Error " + action + ": " + data.errors.join(", "));
|
||||||
} else {
|
} else {
|
||||||
$.jGrowl("We had trouble " + action + " just now. Try again?");
|
$.jGrowl("We had trouble " + action + " just now. Try again?");
|
||||||
|
@ -188,88 +195,98 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function objectRemoved(objectWrapper) {
|
function objectRemoved(objectWrapper) {
|
||||||
objectWrapper.hide(250, function() {
|
objectWrapper.hide(250, function () {
|
||||||
objectWrapper.remove();
|
objectWrapper.remove();
|
||||||
updateBulkActions();
|
updateBulkActions();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareItemsByName(a, b) {
|
function compareItemsByName(a, b) {
|
||||||
return a.find('span.name').text().localeCompare(b.find('span.name').text());
|
return a.find("span.name").text().localeCompare(b.find("span.name").text());
|
||||||
}
|
}
|
||||||
|
|
||||||
function findList(owned, id, item) {
|
function findList(owned, id, item) {
|
||||||
if(id) {
|
if (id) {
|
||||||
return $('#closet-list-' + id);
|
return $("#closet-list-" + id);
|
||||||
} else {
|
} else {
|
||||||
return $("div.closet-hangers-group[data-owned=" + owned + "] div.closet-list.unlisted");
|
return $(
|
||||||
|
"div.closet-hangers-group[data-owned=" +
|
||||||
|
owned +
|
||||||
|
"] div.closet-list.unlisted",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateListHangersCount(el) {
|
function updateListHangersCount(el) {
|
||||||
el.attr('data-hangers-count', el.find('div.object').length);
|
el.attr("data-hangers-count", el.find("div.object").length);
|
||||||
}
|
}
|
||||||
|
|
||||||
function moveItemToList(item, owned, listId) {
|
function moveItemToList(item, owned, listId) {
|
||||||
var newList = findList(owned, listId, item);
|
var newList = findList(owned, listId, item);
|
||||||
var oldList = item.closest('div.closet-list');
|
var oldList = item.closest("div.closet-list");
|
||||||
var hangersWrapper = newList.find('div.closet-list-hangers');
|
var hangersWrapper = newList.find("div.closet-list-hangers");
|
||||||
item.insertIntoSortedList(hangersWrapper, compareItemsByName);
|
item.insertIntoSortedList(hangersWrapper, compareItemsByName);
|
||||||
updateListHangersCount(oldList);
|
updateListHangersCount(oldList);
|
||||||
updateListHangersCount(newList);
|
updateListHangersCount(newList);
|
||||||
}
|
}
|
||||||
|
|
||||||
function submitUpdateForm(form) {
|
function submitUpdateForm(form) {
|
||||||
if(form.data('loading')) return false;
|
if (form.data("loading")) return false;
|
||||||
var quantityEl = form.children("input[name=closet_hanger\[quantity\]]");
|
var quantityEl = form.children("input[name=closet_hanger[quantity]]");
|
||||||
var ownedEl = form.children("input[name=closet_hanger\[owned\]]");
|
var ownedEl = form.children("input[name=closet_hanger[owned]]");
|
||||||
var listEl = form.children("input[name=closet_hanger\[list_id\]]");
|
var listEl = form.children("input[name=closet_hanger[list_id]]");
|
||||||
var listChanged = ownedEl.hasChanged() || listEl.hasChanged();
|
var listChanged = ownedEl.hasChanged() || listEl.hasChanged();
|
||||||
if(listChanged || quantityEl.hasChanged()) {
|
if (listChanged || quantityEl.hasChanged()) {
|
||||||
var objectWrapper = form.closest(".object").addClass("loading");
|
var objectWrapper = form.closest(".object").addClass("loading");
|
||||||
var newQuantity = quantityEl.val();
|
var newQuantity = quantityEl.val();
|
||||||
var quantitySpan = objectWrapper.find(".quantity span").text(newQuantity);
|
var quantitySpan = objectWrapper.find(".quantity span").text(newQuantity);
|
||||||
objectWrapper.attr('data-quantity', newQuantity);
|
objectWrapper.attr("data-quantity", newQuantity);
|
||||||
var data = form.serialize(); // get data before disabling inputs
|
var data = form.serialize(); // get data before disabling inputs
|
||||||
objectWrapper.disableForms();
|
objectWrapper.disableForms();
|
||||||
form.data('loading', true);
|
form.data("loading", true);
|
||||||
if(listChanged) moveItemToList(objectWrapper, ownedEl.val(), listEl.val());
|
if (listChanged)
|
||||||
|
moveItemToList(objectWrapper, ownedEl.val(), listEl.val());
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: form.attr("action") + ".json",
|
url: form.attr("action") + ".json",
|
||||||
type: "post",
|
type: "post",
|
||||||
data: data,
|
data: data,
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
complete: function (data) {
|
complete: function (data) {
|
||||||
if(quantityEl.val() == 0) {
|
if (quantityEl.val() == 0) {
|
||||||
objectRemoved(objectWrapper);
|
objectRemoved(objectWrapper);
|
||||||
} else {
|
} else {
|
||||||
objectWrapper.removeClass("loading").enableForms();
|
objectWrapper.removeClass("loading").enableForms();
|
||||||
}
|
}
|
||||||
form.data('loading', false);
|
form.data("loading", false);
|
||||||
},
|
},
|
||||||
success: function () {
|
success: function () {
|
||||||
// Now that the move was successful, let's merge it with any
|
// Now that the move was successful, let's merge it with any
|
||||||
// conflicting hangers
|
// conflicting hangers
|
||||||
var id = objectWrapper.attr("data-item-id");
|
var id = objectWrapper.attr("data-item-id");
|
||||||
var conflictingHanger = findList(ownedEl.val(), listEl.val(), objectWrapper).
|
var conflictingHanger = findList(
|
||||||
find("div[data-item-id=" + id + "]").not(objectWrapper);
|
ownedEl.val(),
|
||||||
if(conflictingHanger.length) {
|
listEl.val(),
|
||||||
|
objectWrapper,
|
||||||
|
)
|
||||||
|
.find("div[data-item-id=" + id + "]")
|
||||||
|
.not(objectWrapper);
|
||||||
|
if (conflictingHanger.length) {
|
||||||
var conflictingQuantity = parseInt(
|
var conflictingQuantity = parseInt(
|
||||||
conflictingHanger.attr('data-quantity'),
|
conflictingHanger.attr("data-quantity"),
|
||||||
10
|
10,
|
||||||
);
|
);
|
||||||
|
|
||||||
var currentQuantity = parseInt(newQuantity, 10);
|
var currentQuantity = parseInt(newQuantity, 10);
|
||||||
|
|
||||||
var mergedQuantity = conflictingQuantity + currentQuantity;
|
var mergedQuantity = conflictingQuantity + currentQuantity;
|
||||||
|
|
||||||
quantitySpan.text(mergedQuantity);
|
quantitySpan.text(mergedQuantity);
|
||||||
quantityEl.val(mergedQuantity);
|
quantityEl.val(mergedQuantity);
|
||||||
objectWrapper.attr('data-quantity', mergedQuantity);
|
objectWrapper.attr("data-quantity", mergedQuantity);
|
||||||
|
|
||||||
conflictingHanger.remove();
|
conflictingHanger.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
quantityEl.storeValue();
|
quantityEl.storeValue();
|
||||||
ownedEl.storeValue();
|
ownedEl.storeValue();
|
||||||
listEl.storeValue();
|
listEl.storeValue();
|
||||||
|
@ -280,84 +297,94 @@
|
||||||
quantityEl.revertValue();
|
quantityEl.revertValue();
|
||||||
ownedEl.revertValue();
|
ownedEl.revertValue();
|
||||||
listEl.revertValue();
|
listEl.revertValue();
|
||||||
if(listChanged) moveItemToList(objectWrapper, ownedEl.val(), listEl.val());
|
if (listChanged)
|
||||||
|
moveItemToList(objectWrapper, ownedEl.val(), listEl.val());
|
||||||
quantitySpan.text(quantityEl.val());
|
quantitySpan.text(quantityEl.val());
|
||||||
|
|
||||||
handleSaveError(xhr, "updating the quantity");
|
handleSaveError(xhr, "updating the quantity");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(hangersElQuery + ' form.closet-hanger-update').live('submit', function (e) {
|
$(hangersElQuery + " form.closet-hanger-update").live("submit", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
submitUpdateForm($(this));
|
submitUpdateForm($(this));
|
||||||
});
|
});
|
||||||
|
|
||||||
function editableInputs() {
|
function editableInputs() {
|
||||||
return $(hangersElQuery).find(
|
return $(hangersElQuery).find(
|
||||||
'input[name=closet_hanger\[quantity\]], ' +
|
"input[name=closet_hanger[quantity]], " +
|
||||||
'input[name=closet_hanger\[owned\]], ' +
|
"input[name=closet_hanger[owned]], " +
|
||||||
'input[name=closet_hanger\[list_id\]]'
|
"input[name=closet_hanger[list_id]]",
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(hangersElQuery + 'input[name=closet_hanger\[quantity\]]').live('change', function () {
|
$(hangersElQuery + "input[name=closet_hanger[quantity]]")
|
||||||
submitUpdateForm($(this).parent());
|
.live("change", function () {
|
||||||
}).storeValue();
|
submitUpdateForm($(this).parent());
|
||||||
|
})
|
||||||
|
.storeValue();
|
||||||
|
|
||||||
onHangersInit(function () {
|
onHangersInit(function () {
|
||||||
editableInputs().storeValue();
|
editableInputs().storeValue();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(hangersElQuery + ' div.object').live('mouseleave', function () {
|
$(hangersElQuery + " div.object")
|
||||||
submitUpdateForm($(this).find('form.closet-hanger-update'));
|
.live("mouseleave", function () {
|
||||||
}).liveDraggable({
|
submitUpdateForm($(this).find("form.closet-hanger-update"));
|
||||||
appendTo: '#closet-hangers',
|
})
|
||||||
distance: 20,
|
.liveDraggable({
|
||||||
helper: "clone",
|
appendTo: "#closet-hangers",
|
||||||
revert: "invalid"
|
distance: 20,
|
||||||
});
|
helper: "clone",
|
||||||
|
revert: "invalid",
|
||||||
$(hangersElQuery + " form.closet-hanger-destroy").live("submit", function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var form = $(this);
|
|
||||||
var button = form.children("input[type=submit]").val("Removing…");
|
|
||||||
var objectWrapper = form.closest(".object").addClass("loading");
|
|
||||||
var data = form.serialize(); // get data before disabling inputs
|
|
||||||
objectWrapper.addClass("loading").disableForms();
|
|
||||||
$.ajax({
|
|
||||||
url: form.attr("action") + ".json",
|
|
||||||
type: "post",
|
|
||||||
data: data,
|
|
||||||
dataType: "json",
|
|
||||||
complete: function () {
|
|
||||||
button.val("Remove");
|
|
||||||
},
|
|
||||||
success: function () {
|
|
||||||
objectRemoved(objectWrapper);
|
|
||||||
},
|
|
||||||
error: function () {
|
|
||||||
objectWrapper.removeClass("loading").enableForms();
|
|
||||||
$.jGrowl("Error removing item. Try again?");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
$(hangersElQuery + " .select-all").live("click", function(e) {
|
$(hangersElQuery + " form.closet-hanger-destroy").live(
|
||||||
var checkboxes = $(this).closest(".closet-list").find(".object input[type=checkbox]");
|
"submit",
|
||||||
|
function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var form = $(this);
|
||||||
|
var button = form.children("input[type=submit]").val("Removing…");
|
||||||
|
var objectWrapper = form.closest(".object").addClass("loading");
|
||||||
|
var data = form.serialize(); // get data before disabling inputs
|
||||||
|
objectWrapper.addClass("loading").disableForms();
|
||||||
|
$.ajax({
|
||||||
|
url: form.attr("action") + ".json",
|
||||||
|
type: "post",
|
||||||
|
data: data,
|
||||||
|
dataType: "json",
|
||||||
|
complete: function () {
|
||||||
|
button.val("Remove");
|
||||||
|
},
|
||||||
|
success: function () {
|
||||||
|
objectRemoved(objectWrapper);
|
||||||
|
},
|
||||||
|
error: function () {
|
||||||
|
objectWrapper.removeClass("loading").enableForms();
|
||||||
|
$.jGrowl("Error removing item. Try again?");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
$(hangersElQuery + " .select-all").live("click", function (e) {
|
||||||
|
var checkboxes = $(this)
|
||||||
|
.closest(".closet-list")
|
||||||
|
.find(".object input[type=checkbox]");
|
||||||
|
|
||||||
var allChecked = true;
|
var allChecked = true;
|
||||||
checkboxes.each(function() {
|
checkboxes.each(function () {
|
||||||
if (!this.checked) {
|
if (!this.checked) {
|
||||||
allChecked = false;
|
allChecked = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
checkboxes.attr('checked', !allChecked);
|
checkboxes.attr("checked", !allChecked);
|
||||||
|
|
||||||
updateBulkActions(); // setting the checked prop doesn't fire change events
|
updateBulkActions(); // setting the checked prop doesn't fire change events
|
||||||
});
|
});
|
||||||
|
|
||||||
function getCheckboxes() {
|
function getCheckboxes() {
|
||||||
|
@ -366,30 +393,38 @@
|
||||||
|
|
||||||
function getCheckedIds() {
|
function getCheckedIds() {
|
||||||
var checkedIds = [];
|
var checkedIds = [];
|
||||||
getCheckboxes().filter(':checked').each(function() {
|
getCheckboxes()
|
||||||
if (this.checked) checkedIds.push(this.id);
|
.filter(":checked")
|
||||||
});
|
.each(function () {
|
||||||
|
if (this.checked) checkedIds.push(this.id);
|
||||||
|
});
|
||||||
return checkedIds;
|
return checkedIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
getCheckboxes().live("change", updateBulkActions);
|
getCheckboxes().live("change", updateBulkActions);
|
||||||
|
|
||||||
function updateBulkActions() {
|
function updateBulkActions() {
|
||||||
var checkedCount = getCheckboxes().filter(':checked').length;
|
var checkedCount = getCheckboxes().filter(":checked").length;
|
||||||
$('.bulk-actions').attr('data-target-count', checkedCount);
|
$(".bulk-actions").attr("data-target-count", checkedCount);
|
||||||
$('.bulk-actions-target-count').text(checkedCount);
|
$(".bulk-actions-target-count").text(checkedCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(".bulk-actions-move-all").bind("submit", function(e) {
|
$(".bulk-actions-move-all").bind("submit", function (e) {
|
||||||
// TODO: DRY
|
// TODO: DRY
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var form = $(this);
|
var form = $(this);
|
||||||
var data = form.serializeArray();
|
var data = form.serializeArray();
|
||||||
data.push({name: "return_to", value: window.location.pathname + window.location.search});
|
data.push({
|
||||||
|
name: "return_to",
|
||||||
|
value: window.location.pathname + window.location.search,
|
||||||
|
});
|
||||||
|
|
||||||
var checkedBoxes = getCheckboxes().filter(':checked');
|
var checkedBoxes = getCheckboxes().filter(":checked");
|
||||||
checkedBoxes.each(function() {
|
checkedBoxes.each(function () {
|
||||||
data.push({name: "ids[]", value: $(this).closest('.object').attr('data-id')});
|
data.push({
|
||||||
|
name: "ids[]",
|
||||||
|
value: $(this).closest(".object").attr("data-id"),
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -398,32 +433,38 @@
|
||||||
data: data,
|
data: data,
|
||||||
success: function (html) {
|
success: function (html) {
|
||||||
var doc = $(html);
|
var doc = $(html);
|
||||||
hangersEl.html( doc.find('#closet-hangers').html() );
|
hangersEl.html(doc.find("#closet-hangers").html());
|
||||||
hangersInit();
|
hangersInit();
|
||||||
updateBulkActions(); // don't want to maintain checked; deselect em all
|
updateBulkActions(); // don't want to maintain checked; deselect em all
|
||||||
doc.find('.flash').hide().insertBefore(hangersEl).show(500).delay(5000).hide(250);
|
doc
|
||||||
|
.find(".flash")
|
||||||
|
.hide()
|
||||||
|
.insertBefore(hangersEl)
|
||||||
|
.show(500)
|
||||||
|
.delay(5000)
|
||||||
|
.hide(250);
|
||||||
itemsSearchField.val("");
|
itemsSearchField.val("");
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
handleSaveError(xhr, "moving these items");
|
handleSaveError(xhr, "moving these items");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".bulk-actions-remove-all").bind("submit", function(e) {
|
$(".bulk-actions-remove-all").bind("submit", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var form = $(this);
|
var form = $(this);
|
||||||
var hangerIds = [];
|
var hangerIds = [];
|
||||||
var checkedBoxes = getCheckboxes().filter(':checked');
|
var checkedBoxes = getCheckboxes().filter(":checked");
|
||||||
var hangerEls = $();
|
var hangerEls = $();
|
||||||
checkedBoxes.each(function() {
|
checkedBoxes.each(function () {
|
||||||
hangerEls = hangerEls.add($(this).closest('.object'));
|
hangerEls = hangerEls.add($(this).closest(".object"));
|
||||||
});
|
});
|
||||||
hangerEls.each(function() {
|
hangerEls.each(function () {
|
||||||
hangerIds.push($(this).attr('data-id'));
|
hangerIds.push($(this).attr("data-id"));
|
||||||
});
|
});
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: form.attr("action") + ".json?" + $.param({ids: hangerIds}),
|
url: form.attr("action") + ".json?" + $.param({ ids: hangerIds }),
|
||||||
type: "delete",
|
type: "delete",
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function () {
|
success: function () {
|
||||||
|
@ -431,20 +472,20 @@
|
||||||
},
|
},
|
||||||
error: function () {
|
error: function () {
|
||||||
$.jGrowl("Error removing items. Try again?");
|
$.jGrowl("Error removing items. Try again?");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".bulk-actions-deselect-all").bind("click", function(e) {
|
$(".bulk-actions-deselect-all").bind("click", function (e) {
|
||||||
getCheckboxes().filter(':checked').attr('checked', false);
|
getCheckboxes().filter(":checked").attr("checked", false);
|
||||||
updateBulkActions();
|
updateBulkActions();
|
||||||
});
|
});
|
||||||
|
|
||||||
// hahaha, nasty hacks to make stickUp use our old jQuery
|
// hahaha, nasty hacks to make stickUp use our old jQuery
|
||||||
$.fn.on = $.fn.bind;
|
$.fn.on = $.fn.bind;
|
||||||
|
|
||||||
$(function() {
|
$(function () {
|
||||||
$('.bulk-actions').stickUp();
|
$(".bulk-actions").stickUp();
|
||||||
});
|
});
|
||||||
|
|
||||||
function maintainCheckboxes(fn) {
|
function maintainCheckboxes(fn) {
|
||||||
|
@ -452,7 +493,7 @@
|
||||||
|
|
||||||
fn();
|
fn();
|
||||||
|
|
||||||
checkedIds.forEach(function(id) {
|
checkedIds.forEach(function (id) {
|
||||||
document.getElementById(id).checked = true;
|
document.getElementById(id).checked = true;
|
||||||
});
|
});
|
||||||
updateBulkActions();
|
updateBulkActions();
|
||||||
|
@ -464,14 +505,14 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$('input, textarea').placeholder();
|
$("input, textarea").placeholder();
|
||||||
|
|
||||||
var itemsSearchForm = $("#closet-hangers-items-search[data-current-user-id]");
|
var itemsSearchForm = $("#closet-hangers-items-search[data-current-user-id]");
|
||||||
var itemsSearchField = itemsSearchForm.children("input[name=q]");
|
var itemsSearchField = itemsSearchForm.children("input[name=q]");
|
||||||
|
|
||||||
itemsSearchField.autocomplete({
|
itemsSearchField.autocomplete({
|
||||||
select: function (e, ui) {
|
select: function (e, ui) {
|
||||||
if(ui.item.is_item) {
|
if (ui.item.is_item) {
|
||||||
// Let the autocompleter finish up this search before starting a new one
|
// Let the autocompleter finish up this search before starting a new one
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
itemsSearchField.autocomplete("search", ui.item);
|
itemsSearchField.autocomplete("search", ui.item);
|
||||||
|
@ -484,107 +525,141 @@
|
||||||
|
|
||||||
var closetHanger = {
|
var closetHanger = {
|
||||||
owned: group.owned,
|
owned: group.owned,
|
||||||
list_id: ui.item.list ? ui.item.list.id : ''
|
list_id: ui.item.list ? ui.item.list.id : "",
|
||||||
};
|
};
|
||||||
|
|
||||||
if(!item.hasHanger) closetHanger.quantity = 1;
|
if (!item.hasHanger) closetHanger.quantity = 1;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/user/" + itemsSearchForm.data("current-user-id") + "/items/" + item.id + "/closet_hangers",
|
url:
|
||||||
|
"/user/" +
|
||||||
|
itemsSearchForm.data("current-user-id") +
|
||||||
|
"/items/" +
|
||||||
|
item.id +
|
||||||
|
"/closet_hangers",
|
||||||
type: "post",
|
type: "post",
|
||||||
data: {closet_hanger: closetHanger, return_to: window.location.pathname + window.location.search},
|
data: {
|
||||||
|
closet_hanger: closetHanger,
|
||||||
|
return_to: window.location.pathname + window.location.search,
|
||||||
|
},
|
||||||
complete: function () {
|
complete: function () {
|
||||||
itemsSearchField.removeClass("loading");
|
itemsSearchField.removeClass("loading");
|
||||||
},
|
},
|
||||||
success: function (html) {
|
success: function (html) {
|
||||||
var doc = $(html);
|
var doc = $(html);
|
||||||
maintainCheckboxes(function() {
|
maintainCheckboxes(function () {
|
||||||
hangersEl.html( doc.find('#closet-hangers').html() );
|
hangersEl.html(doc.find("#closet-hangers").html());
|
||||||
hangersInit();
|
hangersInit();
|
||||||
});
|
});
|
||||||
doc.find('.flash').hide().insertBefore(hangersEl).show(500).delay(5000).hide(250);
|
doc
|
||||||
|
.find(".flash")
|
||||||
|
.hide()
|
||||||
|
.insertBefore(hangersEl)
|
||||||
|
.show(500)
|
||||||
|
.delay(5000)
|
||||||
|
.hide(250);
|
||||||
itemsSearchField.val("");
|
itemsSearchField.val("");
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
handleSaveError(xhr, "adding the item");
|
handleSaveError(xhr, "adding the item");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
source: function (input, callback) {
|
source: function (input, callback) {
|
||||||
if(typeof input.term == 'string') { // user-typed query
|
if (typeof input.term == "string") {
|
||||||
|
// user-typed query
|
||||||
$.getJSON("/items.json?q=" + input.term, function (data) {
|
$.getJSON("/items.json?q=" + input.term, function (data) {
|
||||||
var output = [];
|
var output = [];
|
||||||
var items = data.items;
|
var items = data.items;
|
||||||
for(var i in items) {
|
for (var i in items) {
|
||||||
items[i].label = items[i].name;
|
items[i].label = items[i].name;
|
||||||
items[i].is_item = true;
|
items[i].is_item = true;
|
||||||
output[output.length] = items[i];
|
output[output.length] = items[i];
|
||||||
}
|
}
|
||||||
callback(output);
|
callback(output);
|
||||||
});
|
});
|
||||||
} else { // item was chosen, now choose a group to insert
|
} else {
|
||||||
var groupInserts = [], group;
|
// item was chosen, now choose a group to insert
|
||||||
var item = input.term, itemEl, occupiedGroups, hasHanger;
|
var groupInserts = [],
|
||||||
for(var i in hangerGroups) {
|
group;
|
||||||
|
var item = input.term,
|
||||||
|
itemEl,
|
||||||
|
occupiedGroups,
|
||||||
|
hasHanger;
|
||||||
|
for (var i in hangerGroups) {
|
||||||
group = hangerGroups[i];
|
group = hangerGroups[i];
|
||||||
itemEl = $('div.closet-hangers-group[data-owned=' + group.owned + '] div.object[data-item-id=' + item.id + ']');
|
itemEl = $(
|
||||||
occupiedGroups = itemEl.closest('.closet-list');
|
"div.closet-hangers-group[data-owned=" +
|
||||||
hasHanger = occupiedGroups.filter('.unlisted').length > 0;
|
group.owned +
|
||||||
|
"] div.object[data-item-id=" +
|
||||||
|
item.id +
|
||||||
|
"]",
|
||||||
|
);
|
||||||
|
occupiedGroups = itemEl.closest(".closet-list");
|
||||||
|
hasHanger = occupiedGroups.filter(".unlisted").length > 0;
|
||||||
|
|
||||||
groupInserts[groupInserts.length] = {
|
groupInserts[groupInserts.length] = {
|
||||||
group: group,
|
group: group,
|
||||||
item: item,
|
item: item,
|
||||||
label: item.label,
|
label: item.label,
|
||||||
hasHanger: hasHanger
|
hasHanger: hasHanger,
|
||||||
}
|
};
|
||||||
|
|
||||||
for(var i = 0; i < group.lists.length; i++) {
|
for (var i = 0; i < group.lists.length; i++) {
|
||||||
hasHanger = occupiedGroups.
|
hasHanger =
|
||||||
filter("[data-id=" + group.lists[i].id + "]").length > 0;
|
occupiedGroups.filter("[data-id=" + group.lists[i].id + "]")
|
||||||
|
.length > 0;
|
||||||
groupInserts[groupInserts.length] = {
|
groupInserts[groupInserts.length] = {
|
||||||
group: group,
|
group: group,
|
||||||
item: item,
|
item: item,
|
||||||
label: item.label,
|
label: item.label,
|
||||||
list: group.lists[i],
|
list: group.lists[i],
|
||||||
hasHanger: hasHanger
|
hasHanger: hasHanger,
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback(groupInserts);
|
callback(groupInserts);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var autocompleter = itemsSearchField.data("autocomplete");
|
var autocompleter = itemsSearchField.data("autocomplete");
|
||||||
|
|
||||||
autocompleter._renderItem = function( ul, item ) {
|
autocompleter._renderItem = function (ul, item) {
|
||||||
var li = $("<li></li>").data("item.autocomplete", item);
|
var li = $("<li></li>").data("item.autocomplete", item);
|
||||||
if(item.is_item) { // these are items from the server
|
if (item.is_item) {
|
||||||
$('#autocomplete-item-tmpl').tmpl({item_name: item.label}).appendTo(li);
|
// these are items from the server
|
||||||
} else if(item.list) { // these are list inserts
|
$("#autocomplete-item-tmpl").tmpl({ item_name: item.label }).appendTo(li);
|
||||||
|
} else if (item.list) {
|
||||||
|
// these are list inserts
|
||||||
var listName = item.list.label;
|
var listName = item.list.label;
|
||||||
if(item.hasHanger) {
|
if (item.hasHanger) {
|
||||||
$('#autocomplete-already-in-collection-tmpl').
|
$("#autocomplete-already-in-collection-tmpl")
|
||||||
tmpl({collection_name: listName}).appendTo(li);
|
.tmpl({ collection_name: listName })
|
||||||
|
.appendTo(li);
|
||||||
} else {
|
} else {
|
||||||
$('#autocomplete-add-to-list-tmpl').tmpl({list_name: listName}).
|
$("#autocomplete-add-to-list-tmpl")
|
||||||
appendTo(li);
|
.tmpl({ list_name: listName })
|
||||||
|
.appendTo(li);
|
||||||
}
|
}
|
||||||
li.addClass("closet-list-autocomplete-item");
|
li.addClass("closet-list-autocomplete-item");
|
||||||
} else { // these are group inserts
|
} else {
|
||||||
|
// these are group inserts
|
||||||
var groupName = item.group.label;
|
var groupName = item.group.label;
|
||||||
if(!item.hasHanger) {
|
if (!item.hasHanger) {
|
||||||
$('#autocomplete-add-to-group-tmpl').
|
$("#autocomplete-add-to-group-tmpl")
|
||||||
tmpl({group_name: groupName.replace(/\s+$/, '')}).appendTo(li);
|
.tmpl({ group_name: groupName.replace(/\s+$/, "") })
|
||||||
|
.appendTo(li);
|
||||||
} else {
|
} else {
|
||||||
$('#autocomplete-already-in-collection-tmpl').
|
$("#autocomplete-already-in-collection-tmpl")
|
||||||
tmpl({collection_name: groupName}).appendTo(li);
|
.tmpl({ collection_name: groupName })
|
||||||
|
.appendTo(li);
|
||||||
}
|
}
|
||||||
li.addClass('closet-hangers-group-autocomplete-item');
|
li.addClass("closet-hangers-group-autocomplete-item");
|
||||||
}
|
}
|
||||||
return li.appendTo(ul);
|
return li.appendTo(ul);
|
||||||
}
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
@ -592,48 +667,54 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var contactEl = $('#closet-hangers-contact');
|
var contactEl = $("#closet-hangers-contact");
|
||||||
var contactForm = contactEl.children('form');
|
var contactForm = contactEl.children("form");
|
||||||
var contactField = contactForm.children('select');
|
var contactField = contactForm.children("select");
|
||||||
|
|
||||||
var contactAddOption = $('<option/>',
|
var contactAddOption = $("<option/>", {
|
||||||
{text: contactField.attr('data-new-text'), value: -1});
|
text: contactField.attr("data-new-text"),
|
||||||
|
value: -1,
|
||||||
|
});
|
||||||
contactAddOption.appendTo(contactField);
|
contactAddOption.appendTo(contactField);
|
||||||
var currentUserId = $('meta[name=current-user-id]').attr('content');
|
var currentUserId = $("meta[name=current-user-id]").attr("content");
|
||||||
|
|
||||||
function submitContactForm() {
|
function submitContactForm() {
|
||||||
var data = contactForm.serialize();
|
var data = contactForm.serialize();
|
||||||
contactForm.disableForms();
|
contactForm.disableForms();
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: contactForm.attr('action') + '.json',
|
url: contactForm.attr("action") + ".json",
|
||||||
type: 'post',
|
type: "post",
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'json',
|
dataType: "json",
|
||||||
complete: function () {
|
complete: function () {
|
||||||
contactForm.enableForms();
|
contactForm.enableForms();
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
handleSaveError(xhr, 'saving Neopets username');
|
handleSaveError(xhr, "saving Neopets username");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
contactField.change(function(e) {
|
contactField.change(function (e) {
|
||||||
if (contactField.val() < 0) {
|
if (contactField.val() < 0) {
|
||||||
var newUsername = $.trim(prompt(contactField.attr('data-new-prompt'), ''));
|
var newUsername = $.trim(
|
||||||
|
prompt(contactField.attr("data-new-prompt"), ""),
|
||||||
|
);
|
||||||
if (newUsername) {
|
if (newUsername) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/user/' + currentUserId + '/neopets-connections',
|
url: "/user/" + currentUserId + "/neopets-connections",
|
||||||
type: 'POST',
|
type: "POST",
|
||||||
data: {neopets_connection: {neopets_username: newUsername}},
|
data: { neopets_connection: { neopets_username: newUsername } },
|
||||||
dataType: 'json',
|
dataType: "json",
|
||||||
success: function(connection) {
|
success: function (connection) {
|
||||||
var newOption = $('<option/>', {text: newUsername,
|
var newOption = $("<option/>", {
|
||||||
value: connection.id})
|
text: newUsername,
|
||||||
|
value: connection.id,
|
||||||
|
});
|
||||||
newOption.insertBefore(contactAddOption);
|
newOption.insertBefore(contactAddOption);
|
||||||
contactField.val(connection.id);
|
contactField.val(connection.id);
|
||||||
submitContactForm();
|
submitContactForm();
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -647,8 +728,8 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$('input[type=submit][data-confirm]').live('click', function (e) {
|
$("input[type=submit][data-confirm]").live("click", function (e) {
|
||||||
if(!confirm(this.getAttribute('data-confirm'))) e.preventDefault();
|
if (!confirm(this.getAttribute("data-confirm"))) e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -658,23 +739,30 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
onHangersInit(function () {
|
onHangersInit(function () {
|
||||||
$('div.closet-list').droppable({
|
$("div.closet-list").droppable({
|
||||||
accept: 'div.object',
|
accept: "div.object",
|
||||||
activate: function () {
|
activate: function () {
|
||||||
$(this).find('.closet-list-content').animate({opacity: 0, height: 100}, 250);
|
$(this)
|
||||||
|
.find(".closet-list-content")
|
||||||
|
.animate({ opacity: 0, height: 100 }, 250);
|
||||||
},
|
},
|
||||||
activeClass: 'droppable-active',
|
activeClass: "droppable-active",
|
||||||
deactivate: function () {
|
deactivate: function () {
|
||||||
$(this).find('.closet-list-content').css('height', 'auto').animate({opacity: 1}, 250);
|
$(this)
|
||||||
|
.find(".closet-list-content")
|
||||||
|
.css("height", "auto")
|
||||||
|
.animate({ opacity: 1 }, 250);
|
||||||
},
|
},
|
||||||
drop: function (e, ui) {
|
drop: function (e, ui) {
|
||||||
var form = ui.draggable.find('form.closet-hanger-update');
|
var form = ui.draggable.find("form.closet-hanger-update");
|
||||||
form.find('input[name=closet_hanger\[list_id\]]').
|
form
|
||||||
val(this.getAttribute('data-id'));
|
.find("input[name=closet_hanger[list_id]]")
|
||||||
form.find('input[name=closet_hanger\[owned\]]').
|
.val(this.getAttribute("data-id"));
|
||||||
val($(this).closest('.closet-hangers-group').attr('data-owned'));
|
form
|
||||||
|
.find("input[name=closet_hanger[owned]]")
|
||||||
|
.val($(this).closest(".closet-hangers-group").attr("data-owned"));
|
||||||
submitUpdateForm(form);
|
submitUpdateForm(form);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -685,16 +773,21 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function updateVisibilityDescription() {
|
function updateVisibilityDescription() {
|
||||||
var descriptions = $(this).closest('.visibility-form').
|
var descriptions = $(this)
|
||||||
find('ul.visibility-descriptions');
|
.closest(".visibility-form")
|
||||||
|
.find("ul.visibility-descriptions");
|
||||||
|
|
||||||
descriptions.children('li.current').removeClass('current');
|
descriptions.children("li.current").removeClass("current");
|
||||||
descriptions.children('li[data-id=' + $(this).val() + ']').addClass('current');
|
descriptions
|
||||||
|
.children("li[data-id=" + $(this).val() + "]")
|
||||||
|
.addClass("current");
|
||||||
}
|
}
|
||||||
|
|
||||||
function visibilitySelects() { return $('form.visibility-form select') }
|
function visibilitySelects() {
|
||||||
|
return $("form.visibility-form select");
|
||||||
|
}
|
||||||
|
|
||||||
visibilitySelects().live('change', updateVisibilityDescription);
|
visibilitySelects().live("change", updateVisibilityDescription);
|
||||||
|
|
||||||
onHangersInit(function () {
|
onHangersInit(function () {
|
||||||
visibilitySelects().each(updateVisibilityDescription);
|
visibilitySelects().each(updateVisibilityDescription);
|
||||||
|
@ -706,8 +799,8 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$('#toggle-help').click(function () {
|
$("#toggle-help").click(function () {
|
||||||
$('#closet-hangers-help').toggleClass('hidden');
|
$("#closet-hangers-help").toggleClass("hidden");
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -716,11 +809,13 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$('#closet-hangers-share-box').mouseover(function () {
|
$("#closet-hangers-share-box")
|
||||||
$(this).focus();
|
.mouseover(function () {
|
||||||
}).mouseout(function () {
|
$(this).focus();
|
||||||
$(this).blur();
|
})
|
||||||
});
|
.mouseout(function () {
|
||||||
|
$(this).blur();
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
@ -730,4 +825,3 @@
|
||||||
|
|
||||||
hangersInit();
|
hangersInit();
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
(function () {
|
(function () {
|
||||||
function setChecked() {
|
function setChecked() {
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
el.closest('li').toggleClass('checked', el.is(':checked'));
|
el.closest("li").toggleClass("checked", el.is(":checked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#petpage-closet-lists input').click(setChecked).each(setChecked);
|
$("#petpage-closet-lists input").click(setChecked).each(setChecked);
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
$('form.button_to input[type=submit]').click(function (e) {
|
$("form.button_to input[type=submit]").click(function (e) {
|
||||||
if(!confirm(this.getAttribute('data-confirm'))) e.preventDefault();
|
if (!confirm(this.getAttribute("data-confirm"))) e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,102 +1,105 @@
|
||||||
var DEBUG = (document.location.search.substr(0, 6) == '?debug');
|
var DEBUG = document.location.search.substr(0, 6) == "?debug";
|
||||||
|
|
||||||
/* Needed items form */
|
/* Needed items form */
|
||||||
(function () {
|
(function () {
|
||||||
var UI = {};
|
var UI = {};
|
||||||
UI.form = $('#needed-items-form');
|
UI.form = $("#needed-items-form");
|
||||||
UI.alert = $('#needed-items-alert');
|
UI.alert = $("#needed-items-alert");
|
||||||
UI.pet_name_field = $('#needed-items-pet-name-field');
|
UI.pet_name_field = $("#needed-items-pet-name-field");
|
||||||
UI.pet_thumbnail = $('#needed-items-pet-thumbnail');
|
UI.pet_thumbnail = $("#needed-items-pet-thumbnail");
|
||||||
UI.pet_header = $('#needed-items-pet-header');
|
UI.pet_header = $("#needed-items-pet-header");
|
||||||
UI.reload = $('#needed-items-reload');
|
UI.reload = $("#needed-items-reload");
|
||||||
UI.pet_items = $('#needed-items-pet-items');
|
UI.pet_items = $("#needed-items-pet-items");
|
||||||
UI.item_template = $('#item-template');
|
UI.item_template = $("#item-template");
|
||||||
|
|
||||||
var current_request = { abort: function () {} };
|
var current_request = { abort: function () {} };
|
||||||
function sendRequest(options) {
|
function sendRequest(options) {
|
||||||
current_request = $.ajax(options);
|
current_request = $.ajax(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
function cancelRequest() {
|
function cancelRequest() {
|
||||||
if(DEBUG) console.log("Canceling request", current_request);
|
if (DEBUG) console.log("Canceling request", current_request);
|
||||||
current_request.abort();
|
current_request.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pet */
|
/* Pet */
|
||||||
|
|
||||||
var last_successful_pet_name = null;
|
var last_successful_pet_name = null;
|
||||||
|
|
||||||
function loadPet(pet_name) {
|
function loadPet(pet_name) {
|
||||||
// If there is a request in progress, kill it. Our new pet request takes
|
// If there is a request in progress, kill it. Our new pet request takes
|
||||||
// priority, and, if I submit a name while the previous name is loading, I
|
// priority, and, if I submit a name while the previous name is loading, I
|
||||||
// don't want to process both responses.
|
// don't want to process both responses.
|
||||||
cancelRequest();
|
cancelRequest();
|
||||||
|
|
||||||
sendRequest({
|
sendRequest({
|
||||||
url: UI.form.attr('action') + '.json',
|
url: UI.form.attr("action") + ".json",
|
||||||
dataType: 'json',
|
dataType: "json",
|
||||||
data: {name: pet_name},
|
data: { name: pet_name },
|
||||||
error: petError,
|
error: petError,
|
||||||
success: function (data) { petSuccess(data, pet_name) },
|
success: function (data) {
|
||||||
complete: petComplete
|
petSuccess(data, pet_name);
|
||||||
|
},
|
||||||
|
complete: petComplete,
|
||||||
});
|
});
|
||||||
|
|
||||||
UI.form.removeClass('failed').addClass('loading-pet');
|
UI.form.removeClass("failed").addClass("loading-pet");
|
||||||
}
|
}
|
||||||
|
|
||||||
function petComplete() {
|
function petComplete() {
|
||||||
UI.form.removeClass('loading-pet');
|
UI.form.removeClass("loading-pet");
|
||||||
}
|
}
|
||||||
|
|
||||||
function petError(xhr) {
|
function petError(xhr) {
|
||||||
UI.alert.text(xhr.responseText);
|
UI.alert.text(xhr.responseText);
|
||||||
UI.form.addClass('failed');
|
UI.form.addClass("failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
function petSuccess(data, pet_name) {
|
function petSuccess(data, pet_name) {
|
||||||
last_successful_pet_name = pet_name;
|
last_successful_pet_name = pet_name;
|
||||||
UI.pet_thumbnail.attr('src', petThumbnailUrl(pet_name));
|
UI.pet_thumbnail.attr("src", petThumbnailUrl(pet_name));
|
||||||
UI.pet_header.empty();
|
UI.pet_header.empty();
|
||||||
$('#needed-items-pet-header-template').tmpl({pet_name: pet_name}).
|
$("#needed-items-pet-header-template")
|
||||||
appendTo(UI.pet_header);
|
.tmpl({ pet_name: pet_name })
|
||||||
|
.appendTo(UI.pet_header);
|
||||||
loadItems(data.query);
|
loadItems(data.query);
|
||||||
}
|
}
|
||||||
|
|
||||||
function petThumbnailUrl(pet_name) {
|
function petThumbnailUrl(pet_name) {
|
||||||
return 'https://pets.neopets.com/cpn/' + pet_name + '/1/1.png';
|
return "https://pets.neopets.com/cpn/" + pet_name + "/1/1.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Items */
|
/* Items */
|
||||||
|
|
||||||
function loadItems(query) {
|
function loadItems(query) {
|
||||||
UI.form.addClass('loading-items');
|
UI.form.addClass("loading-items");
|
||||||
sendRequest({
|
sendRequest({
|
||||||
url: '/items/needed.json',
|
url: "/items/needed.json",
|
||||||
dataType: 'json',
|
dataType: "json",
|
||||||
data: query,
|
data: query,
|
||||||
success: itemsSuccess
|
success: itemsSuccess,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function itemsSuccess(items) {
|
function itemsSuccess(items) {
|
||||||
if(DEBUG) {
|
if (DEBUG) {
|
||||||
// The dev server is missing lots of data, so sends me 2000+ needed
|
// The dev server is missing lots of data, so sends me 2000+ needed
|
||||||
// items. We don't need that many for styling, so limit it to 100 to make
|
// items. We don't need that many for styling, so limit it to 100 to make
|
||||||
// my browser happier.
|
// my browser happier.
|
||||||
items = items.slice(0, 100);
|
items = items.slice(0, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.pet_items.empty();
|
UI.pet_items.empty();
|
||||||
UI.item_template.tmpl(items).appendTo(UI.pet_items);
|
UI.item_template.tmpl(items).appendTo(UI.pet_items);
|
||||||
|
|
||||||
UI.form.removeClass('loading-items').addClass('loaded');
|
UI.form.removeClass("loading-items").addClass("loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.form.submit(function (e) {
|
UI.form.submit(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
loadPet(UI.pet_name_field.val());
|
loadPet(UI.pet_name_field.val());
|
||||||
});
|
});
|
||||||
|
|
||||||
UI.reload.click(function (e) {
|
UI.reload.click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
loadPet(last_successful_pet_name);
|
loadPet(last_successful_pet_name);
|
||||||
|
@ -105,28 +108,31 @@ var DEBUG = (document.location.search.substr(0, 6) == '?debug');
|
||||||
|
|
||||||
/* Bulk pets form */
|
/* Bulk pets form */
|
||||||
(function () {
|
(function () {
|
||||||
var form = $('#bulk-pets-form'),
|
var form = $("#bulk-pets-form"),
|
||||||
queue_el = form.find('ul'),
|
queue_el = form.find("ul"),
|
||||||
names_el = form.find('textarea'),
|
names_el = form.find("textarea"),
|
||||||
add_el = $('#bulk-pets-form-add'),
|
add_el = $("#bulk-pets-form-add"),
|
||||||
clear_el = $('#bulk-pets-form-clear'),
|
clear_el = $("#bulk-pets-form-clear"),
|
||||||
bulk_load_queue;
|
bulk_load_queue;
|
||||||
|
|
||||||
$(document.body).addClass('js');
|
$(document.body).addClass("js");
|
||||||
|
|
||||||
bulk_load_queue = new (function BulkLoadQueue() {
|
bulk_load_queue = new (function BulkLoadQueue() {
|
||||||
var RECENTLY_SENT_INTERVAL_IN_SECONDS = 30;
|
var RECENTLY_SENT_INTERVAL_IN_SECONDS = 30;
|
||||||
var RECENTLY_SENT_MAX = 3;
|
var RECENTLY_SENT_MAX = 3;
|
||||||
var pets = [], url = form.attr('action') + '.json',
|
var pets = [],
|
||||||
recently_sent_count = 0, loading = false;
|
url = form.attr("action") + ".json",
|
||||||
|
recently_sent_count = 0,
|
||||||
|
loading = false;
|
||||||
|
|
||||||
function Pet(name) {
|
function Pet(name) {
|
||||||
var el = $('#bulk-pets-submission-template').tmpl({pet_name: name}).
|
var el = $("#bulk-pets-submission-template")
|
||||||
appendTo(queue_el);
|
.tmpl({ pet_name: name })
|
||||||
|
.appendTo(queue_el);
|
||||||
|
|
||||||
this.load = function () {
|
this.load = function () {
|
||||||
el.removeClass('waiting').addClass('loading');
|
el.removeClass("waiting").addClass("loading");
|
||||||
var response_el = el.find('span.response');
|
var response_el = el.find("span.response");
|
||||||
pets.shift();
|
pets.shift();
|
||||||
loading = true;
|
loading = true;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -134,20 +140,21 @@ var DEBUG = (document.location.search.substr(0, 6) == '?debug');
|
||||||
loading = false;
|
loading = false;
|
||||||
loadNextIfReady();
|
loadNextIfReady();
|
||||||
},
|
},
|
||||||
data: {name: name},
|
data: { name: name },
|
||||||
dataType: 'json',
|
dataType: "json",
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
el.removeClass('loading').addClass('failed');
|
el.removeClass("loading").addClass("failed");
|
||||||
response_el.text(xhr.responseText);
|
response_el.text(xhr.responseText);
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
var points = data.points;
|
var points = data.points;
|
||||||
el.removeClass('loading').addClass('loaded');
|
el.removeClass("loading").addClass("loaded");
|
||||||
$('#bulk-pets-submission-success-template').tmpl({points: points}).
|
$("#bulk-pets-submission-success-template")
|
||||||
appendTo(response_el);
|
.tmpl({ points: points })
|
||||||
|
.appendTo(response_el);
|
||||||
},
|
},
|
||||||
type: 'post',
|
type: "post",
|
||||||
url: url
|
url: url,
|
||||||
});
|
});
|
||||||
|
|
||||||
recently_sent_count++;
|
recently_sent_count++;
|
||||||
|
@ -155,39 +162,42 @@ var DEBUG = (document.location.search.substr(0, 6) == '?debug');
|
||||||
recently_sent_count--;
|
recently_sent_count--;
|
||||||
loadNextIfReady();
|
loadNextIfReady();
|
||||||
}, RECENTLY_SENT_INTERVAL_IN_SECONDS * 1000);
|
}, RECENTLY_SENT_INTERVAL_IN_SECONDS * 1000);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
|
||||||
this.add = function (name) {
|
|
||||||
name = name.replace(/^\s+|\s+$/g, '');
|
|
||||||
if(name.length) {
|
|
||||||
var pet = new Pet(name);
|
|
||||||
pets.push(pet);
|
|
||||||
if(pets.length == 1) loadNextIfReady();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.add = function (name) {
|
||||||
|
name = name.replace(/^\s+|\s+$/g, "");
|
||||||
|
if (name.length) {
|
||||||
|
var pet = new Pet(name);
|
||||||
|
pets.push(pet);
|
||||||
|
if (pets.length == 1) loadNextIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
function loadNextIfReady() {
|
function loadNextIfReady() {
|
||||||
if(!loading && recently_sent_count < RECENTLY_SENT_MAX && pets.length) {
|
if (!loading && recently_sent_count < RECENTLY_SENT_MAX && pets.length) {
|
||||||
pets[0].load();
|
pets[0].load();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
names_el.keyup(function () {
|
names_el.keyup(function () {
|
||||||
var names = this.value.split('\n'), x = names.length - 1, i, name;
|
var names = this.value.split("\n"),
|
||||||
for(i = 0; i < x; i++) {
|
x = names.length - 1,
|
||||||
|
i,
|
||||||
|
name;
|
||||||
|
for (i = 0; i < x; i++) {
|
||||||
bulk_load_queue.add(names[i]);
|
bulk_load_queue.add(names[i]);
|
||||||
}
|
}
|
||||||
this.value = (x >= 0) ? names[x] : '';
|
this.value = x >= 0 ? names[x] : "";
|
||||||
});
|
});
|
||||||
|
|
||||||
add_el.click(function () {
|
add_el.click(function () {
|
||||||
bulk_load_queue.add(names_el.val());
|
bulk_load_queue.add(names_el.val());
|
||||||
names_el.val('');
|
names_el.val("");
|
||||||
});
|
});
|
||||||
|
|
||||||
clear_el.click(function () {
|
clear_el.click(function () {
|
||||||
queue_el.children('li.loaded, li.failed').remove();
|
queue_el.children("li.loaded, li.failed").remove();
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue