UNPKG

e-lado

Version:

[![CircleCI](https://circleci.com/gh/sharetribe/sharetribe/tree/master.svg?style=svg)](https://circleci.com/gh/sharetribe/sharetribe/tree/master) [![Dependency Status](https://gemnasium.com/sharetribe/sharetribe.png)](https://gemnasium.com/sharetribe/shar

155 lines (128 loc) 3.99 kB
window.ST = window.ST || {}; /** Add click handlers for the select/clear all links. */ window.ST.initializeCustomFieldsSelectionClickHandlers = function() { $(".select-all").click(function() { $(".custom-field-category-checkbox").prop("checked", true); }); $(".deselect-all").click(function() { $(".custom-field-category-checkbox").prop("checked", false); }); }; /** Custom field order manager. Makes a POST request when order changes. */ window.ST.createCustomFieldOrder = function(rowSelector) { /** Fetch all custom field rows and save them to a variable */ var fieldMap = $(rowSelector).map(function(id, row) { return { id: $(row).data("field-id"), element: $(row), up: $(".custom-fields-action-up", row), down: $(".custom-fields-action-down", row) }; }).get(); var orderManager = window.ST.orderManager(fieldMap); var ajaxRequest = orderManager.order.changes().debounce(800).map(".order") .skipDuplicates(_.isEqual) .map(function(order) { return { type: "POST", url: ST.utils.relativeUrl("order"), data: { order: order } }; }); var ajaxResponse = ajaxRequest.ajax(); var ajaxStatus = window.ST.ajaxStatusIndicator(ajaxRequest, ajaxResponse); ajaxStatus.loading.onValue(function() { $("#custom-field-ajax-saving").show(); $("#custom-field-ajax-error").hide(); $("#custom-field-ajax-success").hide(); }); ajaxStatus.success.onValue(function() { $("#custom-field-ajax-saving").hide(); $("#custom-field-ajax-success").show(); }); ajaxStatus.error.onValue(function() { $("#custom-field-ajax-saving").hide(); $("#custom-field-ajax-error").show(); }); ajaxStatus.idle.onValue(function() { $("#custom-field-ajax-success").fadeOut(); }); }; /** Custom field option order manager. Changes `sort_priority` hidden field when order changes. */ window.ST.createCustomFieldOptionOrder = function(rowSelector) { /** Fetch all custom field rows and save them to a variable */ var fieldMap = $(rowSelector).map(function(id, row) { return { id: $(row).data("field-id"), element: $(row), sortPriority: Number($(row).find(".custom-field-hidden-sort-priority").val()), up: $(".custom-fields-action-up", row), down: $(".custom-fields-action-down", row) }; }).get(); function highestSortPriority(fieldMap) { return _(fieldMap) .map("sortPriority") .max() .value(); } var nextSortPriority = (function(startValue) { var i = startValue; return function() { i += 1; return i; }; })(highestSortPriority(fieldMap)); var nextId = (function() { var i = 0; return function() { i += 1; return i; }; })(); var orderManager = window.ST.orderManager(fieldMap); orderManager.order.changes().onValue(function(changedFields) { var up = changedFields.up; var down = changedFields.down; var upHidden = up.element.find(".custom-field-hidden-sort-priority"); var downHidden = down.element.find(".custom-field-hidden-sort-priority"); var newUpValue = downHidden.val(); var newDownValue = upHidden.val(); upHidden.val(newUpValue); downHidden.val(newDownValue); }); var newOptionTmpl = _.template($("#new-option-tmpl").html()); var $customFieldOptions = $("#options"); $("#custom-fields-add-option").click(function(e) { e.preventDefault(); var id = "jsnew-" + nextId(); var row = $(newOptionTmpl({id: id, sortPriority: nextSortPriority()})); $customFieldOptions.append(row); var newField = { id: id, element: row, up: $(".custom-fields-action-up", row), down: $(".custom-fields-action-down", row) }; ST.newOptionAdded(); ST.customFieldOptionOrder.add(newField); // Focus the new one row.find("input").first().focus(); }); return { remove: orderManager.remove, add: orderManager.add }; };