diff --git a/assets/css/wpclubmanager.css b/assets/css/wpclubmanager.css index d9576e3..757eea0 100644 --- a/assets/css/wpclubmanager.css +++ b/assets/css/wpclubmanager.css @@ -61,7 +61,7 @@ table { table thead tr td, table tfoot tr th, table tfoot tr td { - padding: 0.5rem 0.625 0.625rem; + padding: 0.5rem 0.625rem; font-weight: bold; text-align: left; } @@ -77,9 +77,9 @@ table { display: table-cell; line-height: 1.125rem; } - .entry-content td { + /* .entry-content td { padding-left: 0.625rem !important; - } + } */ .wpcm-fixtures-shortcode tbody tr:hover { cursor: pointer; } diff --git a/assets/js/admin/meta-boxes.js b/assets/js/admin/meta-boxes.js index 7ed6605..cd78f79 100644 --- a/assets/js/admin/meta-boxes.js +++ b/assets/js/admin/meta-boxes.js @@ -223,18 +223,16 @@ jQuery( function($){ type: 'POST', async: true, cache: false, - dataType: 'json', data:{ action: 'item_sort', // Tell WordPress how to handle this ajax request order: itemList.sortable('toArray').toString() // Passes ID's of list items in 1,3,2 format - }, + }, + dataType: 'JSON', success: function(response) { jQuery('#loading-animation').hide(); // Hide the loading animation return; }, error: function(xhr,textStatus,e) { // This can be expanded to provide more information - alert(e); - alert('There was an error saving the updates'); jQuery('#loading-animation').hide(); // Hide the loading animation return; } diff --git a/assets/js/admin/meta-boxes.min.js b/assets/js/admin/meta-boxes.min.js index 2c890c7..9f9e161 100644 --- a/assets/js/admin/meta-boxes.min.js +++ b/assets/js/admin/meta-boxes.min.js @@ -1 +1 @@ -jQuery(function(e){var t;jQuery("select.chosen_select").chosen({disable_search_threshold:10,width:"220px"}),jQuery("select.chosen_select_outcome").chosen({disable_search_threshold:10,width:"auto",placeholder_text_single:" "}),jQuery("select.chosen_select_dob").chosen({disable_search_threshold:32}),jQuery("select.chosen_select_nostd").chosen({allow_single_deselect:"true"}),jQuery("select.wpcm-chosen-multiple").chosen({width:"100%"}),jQuery("#input-order").length&&(jQuery("select.wpcm-chosen-multiple").on("change",function(e){var t=jQuery(this).get(0);setTimeout(function(){var e=ChosenOrder.getSelectionOrder(t);jQuery("#input-order").val(e).toString().split(",")})}),t=jQuery("select.wpcm-chosen-multiple").get(0),ChosenOrder.setSelectionOrder(t,jQuery("#input-order").val().split(","),!0)),jQuery(".wpcm_stats-tabs a").click(function(){var e=jQuery(this).attr("href");return jQuery(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),jQuery(this).parent().parent().parent().find(".tabs-panel").hide(),jQuery(e).show(),!1}),jQuery(".type_box").appendTo("#wpclubmanager-player-stats .hndle"),jQuery(function(){jQuery("#wpclubmanager-player-stats").find(".hndle").unbind("click.postboxes"),jQuery("#wpclubmanager-player-stats").on("click",".hndle",function(e){jQuery(e.target).filter("input, option, label, select, .chosen-drop").length||jQuery("#wpclubmanager-player-stats").toggleClass("closed")})}),jQuery(document).on("change",".wpcm-player-season-select",function(){var e=jQuery(this).data("target"),t=jQuery("option:selected",this).data("show");jQuery(e).children().addClass("hidden"),jQuery(t).removeClass("hidden")}),jQuery(".wpcm-player-season-select").trigger("change"),jQuery("#wpclubmanager-match-result").on("change","#wpcm_played",function(){played=jQuery(this).prop("checked"),played?(jQuery("#wpclubmanager-match-report").show("fast"),jQuery("#wpclubmanager-match-result #results-table").show("fast")):(jQuery("#wpclubmanager-match-result #results-table").hide("fast"),jQuery("#wpclubmanager-match-report").hide("fast"))}),jQuery("#wpclubmanager-match-result #wpcm_played").change(),jQuery("#wpclubmanager-match-result").on("change","#wpcm_shootout",function(){shootout=jQuery(this).prop("checked"),shootout?jQuery("#wpclubmanager-match-result .wpcm-results-shootout").show("fast"):jQuery("#wpclubmanager-match-result .wpcm-results-shootout").hide("fast")}),jQuery("#wpclubmanager-match-result #wpcm_shootout").change(),jQuery("#wpclubmanager-match-result").on("change","#_wpcm_postponed",function(){postponed_result=jQuery("#_wpcm_postponed").prop("checked"),postponed_result?(jQuery(".wpcm-postponed-result").show("fast"),jQuery("#wpclubmanager-match-result #results-table").hide("fast")):jQuery(".wpcm-postponed-result").hide("fast")}),jQuery("#wpclubmanager-match-result #_wpcm_postponed").change(),jQuery('#wpcm_players table .names input[type="checkbox"]').on("change",function(){player_id=jQuery(this).attr("data-player"),jQuery(this).closest("tr").find('input[type="number"]').prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find('input[data-card="yellow"], input[data-card="red"]').prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find("select").prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find('input[type="radio"]').prop("disabled",!jQuery(this).prop("checked"))}),jQuery('#wpcm_players table td.mvp input[type="radio"]').click(function(){jQuery('td.mvp input[type="radio"]').prop("checked",!1),jQuery(this).prop("checked",!0)}),jQuery('#wpcm_players table td.captain input[type="radio"]').click(function(){jQuery('td.captain input[type="radio"]').prop("checked",!1),jQuery(this).prop("checked",!0)}),updateCounter=function(){var e=jQuery("#wpcm_lineup input.player-select:checked").length,t=jQuery("#wpcm_subs input.player-select:checked").length;0'+t+'';jQuery("#wpcm-table-stats table tbody").append(r),jQuery("#wpcm-table-stats table tr.count-row").each(function(e){jQuery("td",this).eq(1).html(e+1)})}),jQuery(".wpcm-table-delete-row").click(function(){jQuery("#wpcm-table-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&(jQuery(this).parents("tr").prev("tr").remove(),jQuery(this).parents("tr").next("tr").remove(),jQuery(this).parents("tr").remove())})}),jQuery("#wpcm-table-stats input").change(function(){index=jQuery(this).attr("data-index"),club=jQuery(this).closest("tr").attr("data-club"),value=0,jQuery(this).closest("table").find("tbody").each(function(){total=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="'+index+'"]').val()),auto=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-auto input[data-index="'+index+'"]').val()),value=total-auto}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-manual input[data-index="'+index+'"]').val(value)}),jQuery('#wpcm-table-stats input[data-index="f"],#wpcm-table-stats input[data-index="a"]').change(function(){club=jQuery(this).closest("tr").attr("data-club"),value=0,jQuery(this).closest("table").find("tbody").each(function(){f=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="f"]').val()),a=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="a"]').val()),value=jQuery("body").hasClass("footy")?f/a*100:f-a}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="gd"]').val(value),jQuery(this).closest("table").find("tbody").each(function(){total=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="gd"]').val()),auto=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-auto input[data-index="gd"]').val()),manual=total-auto}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-manual input[data-index="gd"]').val(manual)});var r=jQuery(".wpcm-sortable");r.sortable({cursor:"move",update:function(e,t){jQuery("#loading-animation").show(),opts={url:ajaxurl,type:"POST",async:!0,cache:!1,dataType:"json",data:{action:"item_sort",order:r.sortable("toArray").toString()},success:function(e){jQuery("#loading-animation").hide()},error:function(e,t,r){alert(r),alert("There was an error saving the updates"),jQuery("#loading-animation").hide()}},jQuery.ajax(opts)}}),jQuery(".wpcm-player-roster-add-row").click(function(){var e=jQuery(".player-id option:selected").text(),t=''+e+"";jQuery("#wpcm-player-roster-stats table tbody").append(t),jQuery(".wpcm-player-roster-delete-row").removeClass("hidden-button")}),jQuery(".wpcm-player-roster-delete-row").click(function(){jQuery("#wpcm-player-roster-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&jQuery(this).parents("tr").remove()})}),jQuery(".wpcm-staff-roster-add-row").click(function(){var e=jQuery(".staff-id option:selected").text(),t=''+e+"";jQuery("#wpcm-staff-roster-stats table tbody").append(t),jQuery(".wpcm-staff-roster-delete-row").removeClass("hidden-button")}),jQuery(".wpcm-staff-roster-delete-row").click(function(){jQuery("#wpcm-staff-roster-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&jQuery(this).parents("tr").remove()})}),jQuery(".colorpick").iris({change:function(e,t){jQuery(this).parent().find(".colorpickpreview").css({backgroundColor:t.color.toString()})},hide:!0,border:!0}).click(function(){jQuery(".iris-picker").hide(),jQuery(this).closest("p").find(".iris-picker").show()}),jQuery("body").click(function(){jQuery(".iris-picker").hide()}),jQuery(".colorpick").click(function(e){e.stopPropagation()}),jQuery(".wpcm-add-video").click(function(){return jQuery(this).closest("fieldset").hide().siblings(".wpcm-video-field").show(),!1}),jQuery(".wpcm-remove-video").click(function(){return jQuery(this).closest("fieldset").hide().siblings(".wpcm-video-adder").show().siblings(".wpcm-video-field").find("input").val(null),!1}),e(document.body).on("wpcm-init-datepickers",function(){e(".wpcm-date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),e(".wpcm-birth-date-picker").datepicker({dateFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0,yearRange:"-90:+0"})}).trigger("wpcm-init-datepickers"),e(".wpcm-time-picker").jquery_timepicker({timeFormat:"H:i",step:"15"}),e(document).ready(function(){e(".combify-input").combify()})}); \ No newline at end of file +jQuery(function(e){var t;jQuery("select.chosen_select").chosen({disable_search_threshold:10,width:"220px"}),jQuery("select.chosen_select_outcome").chosen({disable_search_threshold:10,width:"auto",placeholder_text_single:" "}),jQuery("select.chosen_select_dob").chosen({disable_search_threshold:32}),jQuery("select.chosen_select_nostd").chosen({allow_single_deselect:"true"}),jQuery("select.wpcm-chosen-multiple").chosen({width:"100%"}),jQuery("#input-order").length&&(jQuery("select.wpcm-chosen-multiple").on("change",function(e){var t=jQuery(this).get(0);setTimeout(function(){var e=ChosenOrder.getSelectionOrder(t);jQuery("#input-order").val(e).toString().split(",")})}),t=jQuery("select.wpcm-chosen-multiple").get(0),ChosenOrder.setSelectionOrder(t,jQuery("#input-order").val().split(","),!0)),jQuery(".wpcm_stats-tabs a").click(function(){var e=jQuery(this).attr("href");return jQuery(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),jQuery(this).parent().parent().parent().find(".tabs-panel").hide(),jQuery(e).show(),!1}),jQuery(".type_box").appendTo("#wpclubmanager-player-stats .hndle"),jQuery(function(){jQuery("#wpclubmanager-player-stats").find(".hndle").unbind("click.postboxes"),jQuery("#wpclubmanager-player-stats").on("click",".hndle",function(e){jQuery(e.target).filter("input, option, label, select, .chosen-drop").length||jQuery("#wpclubmanager-player-stats").toggleClass("closed")})}),jQuery(document).on("change",".wpcm-player-season-select",function(){var e=jQuery(this).data("target"),t=jQuery("option:selected",this).data("show");jQuery(e).children().addClass("hidden"),jQuery(t).removeClass("hidden")}),jQuery(".wpcm-player-season-select").trigger("change"),jQuery("#wpclubmanager-match-result").on("change","#wpcm_played",function(){played=jQuery(this).prop("checked"),played?(jQuery("#wpclubmanager-match-report").show("fast"),jQuery("#wpclubmanager-match-result #results-table").show("fast")):(jQuery("#wpclubmanager-match-result #results-table").hide("fast"),jQuery("#wpclubmanager-match-report").hide("fast"))}),jQuery("#wpclubmanager-match-result #wpcm_played").change(),jQuery("#wpclubmanager-match-result").on("change","#wpcm_shootout",function(){shootout=jQuery(this).prop("checked"),shootout?jQuery("#wpclubmanager-match-result .wpcm-results-shootout").show("fast"):jQuery("#wpclubmanager-match-result .wpcm-results-shootout").hide("fast")}),jQuery("#wpclubmanager-match-result #wpcm_shootout").change(),jQuery("#wpclubmanager-match-result").on("change","#_wpcm_postponed",function(){postponed_result=jQuery("#_wpcm_postponed").prop("checked"),postponed_result?(jQuery(".wpcm-postponed-result").show("fast"),jQuery("#wpclubmanager-match-result #results-table").hide("fast")):jQuery(".wpcm-postponed-result").hide("fast")}),jQuery("#wpclubmanager-match-result #_wpcm_postponed").change(),jQuery('#wpcm_players table .names input[type="checkbox"]').on("change",function(){player_id=jQuery(this).attr("data-player"),jQuery(this).closest("tr").find('input[type="number"]').prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find('input[data-card="yellow"], input[data-card="red"]').prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find("select").prop("disabled",!jQuery(this).prop("checked")),jQuery(this).closest("tr").find('input[type="radio"]').prop("disabled",!jQuery(this).prop("checked"))}),jQuery('#wpcm_players table td.mvp input[type="radio"]').click(function(){jQuery('td.mvp input[type="radio"]').prop("checked",!1),jQuery(this).prop("checked",!0)}),jQuery('#wpcm_players table td.captain input[type="radio"]').click(function(){jQuery('td.captain input[type="radio"]').prop("checked",!1),jQuery(this).prop("checked",!0)}),updateCounter=function(){var e=jQuery("#wpcm_lineup input.player-select:checked").length,t=jQuery("#wpcm_subs input.player-select:checked").length;0'+t+'';jQuery("#wpcm-table-stats table tbody").append(r),jQuery("#wpcm-table-stats table tr.count-row").each(function(e){jQuery("td",this).eq(1).html(e+1)})}),jQuery(".wpcm-table-delete-row").click(function(){jQuery("#wpcm-table-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&(jQuery(this).parents("tr").prev("tr").remove(),jQuery(this).parents("tr").next("tr").remove(),jQuery(this).parents("tr").remove())})}),jQuery("#wpcm-table-stats input").change(function(){index=jQuery(this).attr("data-index"),club=jQuery(this).closest("tr").attr("data-club"),value=0,jQuery(this).closest("table").find("tbody").each(function(){total=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="'+index+'"]').val()),auto=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-auto input[data-index="'+index+'"]').val()),value=total-auto}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-manual input[data-index="'+index+'"]').val(value)}),jQuery('#wpcm-table-stats input[data-index="f"],#wpcm-table-stats input[data-index="a"]').change(function(){club=jQuery(this).closest("tr").attr("data-club"),value=0,jQuery(this).closest("table").find("tbody").each(function(){f=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="f"]').val()),a=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="a"]').val()),value=jQuery("body").hasClass("footy")?f/a*100:f-a}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="gd"]').val(value),jQuery(this).closest("table").find("tbody").each(function(){total=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-total input[data-index="gd"]').val()),auto=parseInt(jQuery(this).find('tr[data-club="'+club+'"] td.wpcm-table-stats-auto input[data-index="gd"]').val()),manual=total-auto}),jQuery(this).closest("table").find('tr[data-club="'+club+'"] td.wpcm-table-stats-manual input[data-index="gd"]').val(manual)});var r=jQuery(".wpcm-sortable");r.sortable({cursor:"move",update:function(e,t){jQuery("#loading-animation").show(),opts={url:ajaxurl,type:"POST",async:!0,cache:!1,data:{action:"item_sort",order:r.sortable("toArray").toString()},dataType:"JSON",success:function(e){jQuery("#loading-animation").hide()},error:function(e,t,r){jQuery("#loading-animation").hide()}},jQuery.ajax(opts)}}),jQuery(".wpcm-player-roster-add-row").click(function(){var e=jQuery(".player-id option:selected").text(),t=''+e+"";jQuery("#wpcm-player-roster-stats table tbody").append(t),jQuery(".wpcm-player-roster-delete-row").removeClass("hidden-button")}),jQuery(".wpcm-player-roster-delete-row").click(function(){jQuery("#wpcm-player-roster-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&jQuery(this).parents("tr").remove()})}),jQuery(".wpcm-staff-roster-add-row").click(function(){var e=jQuery(".staff-id option:selected").text(),t=''+e+"";jQuery("#wpcm-staff-roster-stats table tbody").append(t),jQuery(".wpcm-staff-roster-delete-row").removeClass("hidden-button")}),jQuery(".wpcm-staff-roster-delete-row").click(function(){jQuery("#wpcm-staff-roster-stats table tbody").find('input[name="record"]').each(function(){jQuery(this).is(":checked")&&jQuery(this).parents("tr").remove()})}),jQuery(".colorpick").iris({change:function(e,t){jQuery(this).parent().find(".colorpickpreview").css({backgroundColor:t.color.toString()})},hide:!0,border:!0}).click(function(){jQuery(".iris-picker").hide(),jQuery(this).closest("p").find(".iris-picker").show()}),jQuery("body").click(function(){jQuery(".iris-picker").hide()}),jQuery(".colorpick").click(function(e){e.stopPropagation()}),jQuery(".wpcm-add-video").click(function(){return jQuery(this).closest("fieldset").hide().siblings(".wpcm-video-field").show(),!1}),jQuery(".wpcm-remove-video").click(function(){return jQuery(this).closest("fieldset").hide().siblings(".wpcm-video-adder").show().siblings(".wpcm-video-field").find("input").val(null),!1}),e(document.body).on("wpcm-init-datepickers",function(){e(".wpcm-date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),e(".wpcm-birth-date-picker").datepicker({dateFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0,yearRange:"-90:+0"})}).trigger("wpcm-init-datepickers"),e(".wpcm-time-picker").jquery_timepicker({timeFormat:"H:i",step:"15"}),e(document).ready(function(){e(".combify-input").combify()})}); \ No newline at end of file diff --git a/assets/js/jquery-chosen/chosen.order.jquery.js b/assets/js/jquery-chosen/chosen.order.jquery.js new file mode 100644 index 0000000..86050ae --- /dev/null +++ b/assets/js/jquery-chosen/chosen.order.jquery.js @@ -0,0 +1,223 @@ +// Chosen Order v1.2.1 +// This plugin allows you to handle the order of the selection for Chosen multiple element.", + ordering_unselected_option: "ChosenOrder::{{function}}: ignoring option '{{option}}' which is not selected. Set optional parameter \"force\" to 'true' to get the ordered selection forced first." + }; + + AbstractChosenOrder.insertAt = function(node, index, parentNode) { + return parentNode.insertBefore(node, parentNode.children[index].nextSibling); + }; + + AbstractChosenOrder.getFlattenedOptionsAndGroups = function(select) { + var flattened_options, opt, options, sub_opt, sub_options, _i, _j, _len, _len1; + options = Array.prototype.filter.call(select.childNodes, function(o) { + var _ref; + return (_ref = o.nodeName.toUpperCase()) === 'OPTION' || _ref === 'OPTGROUP'; + }); + flattened_options = []; + for (_i = 0, _len = options.length; _i < _len; _i++) { + opt = options[_i]; + flattened_options.push(opt); + if (opt.nodeName.toUpperCase() === 'OPTGROUP') { + sub_options = Array.prototype.filter.call(opt.childNodes, function(o) { + return o.nodeName.toUpperCase() === 'OPTION'; + }); + for (_j = 0, _len1 = sub_options.length; _j < _len1; _j++) { + sub_opt = sub_options[_j]; + flattened_options.push(sub_opt); + } + } + } + return flattened_options; + }; + + AbstractChosenOrder.isValidMultipleSelectElement = function(element) { + return element !== null && typeof element !== "undefined" && element.nodeName === "SELECT" && element.multiple; + }; + + AbstractChosenOrder.getChosenUIContainer = function(select) { + if (select.id !== "") { + return document.getElementById(select.id.replace(/-/g, "_") + "_chosen"); + } else { + return this.searchChosenUIContainer(select); + } + }; + + AbstractChosenOrder.isChosenified = function(select) { + return this.getChosenUIContainer(select) != null; + }; + + AbstractChosenOrder.forceSelection = function(select, selection) { + var i, opt, options, _ref; + options = this.getFlattenedOptionsAndGroups(select); + i = 0; + while (i < options.length) { + opt = options[i]; + if (_ref = opt.getAttribute("value"), __indexOf.call(selection, _ref) >= 0) { + opt.selected = true; + opt.setAttribute("selected", ""); + } else { + opt.selected = false; + opt.removeAttribute("selected"); + } + i++; + } + return this.triggerEvent(select, "chosen:updated"); + }; + + AbstractChosenOrder.getSelectionOrder = function(select) { + var chosen_options, chosen_ui, close_btn, opt, option, options, order, rel, _i, _len; + if (this.getDOMElement != null) { + select = this.getDOMElement(select); + } + order = []; + if (!this.isValidMultipleSelectElement(select)) { + console.error(ERRORS.invalid_select_element.replace('{{function}}', 'getSelectionOrder')); + return order; + } + chosen_ui = this.getChosenUIContainer(select); + if (chosen_ui == null) { + console.error(ERRORS.unreachable_chosen_container.replace('{{function}}', 'getSelectionOrder')); + return order; + } + chosen_options = chosen_ui.querySelectorAll('.search-choice'); + options = this.getFlattenedOptionsAndGroups(select); + for (_i = 0, _len = chosen_options.length; _i < _len; _i++) { + opt = chosen_options[_i]; + close_btn = opt.querySelectorAll('.search-choice-close')[0]; + if (close_btn != null) { + rel = close_btn.getAttribute(this.relAttributeName); + } + option = options[rel]; + order.push(option.value); + } + return order; + }; + + AbstractChosenOrder.setSelectionOrder = function(select, order, force) { + var chosen_choices, chosen_options, chosen_ui, i, j, opt, opt_val, option, options, rel, relAttributeName, _i, _j, _len, _len1, _results; + if (this.getDOMElement != null) { + select = this.getDOMElement(select); + } + if (!this.isValidMultipleSelectElement(select)) { + console.error(ERRORS.invalid_select_element.replace('{{function}}', 'setSelectionOrder')); + return; + } + chosen_ui = this.getChosenUIContainer(select); + if (chosen_ui == null) { + console.error(ERRORS.unreachable_chosen_container.replace('{{function}}', 'setSelectionOrder')); + return; + } + if (order instanceof Array) { + order = order.map(Function.prototype.call, String.prototype.trim); + options = this.getFlattenedOptionsAndGroups(select); + if ((force != null) && force === true) { + this.forceSelection(select, order); + } + _results = []; + for (i = _i = 0, _len = order.length; _i < _len; i = ++_i) { + opt_val = order[i]; + rel = null; + for (j = _j = 0, _len1 = options.length; _j < _len1; j = ++_j) { + opt = options[j]; + if (opt.value === opt_val) { + rel = j; + } + } + chosen_options = chosen_ui.querySelectorAll('.search-choice'); + relAttributeName = this.relAttributeName; + option = Array.prototype.filter.call(chosen_options, function(o) { + return o.querySelector("a.search-choice-close[" + relAttributeName + "=\"" + rel + "\"]") != null; + })[0]; + if (option == null) { + console.warn(ERRORS.ordering_unselected_option.replace('{{function}}', 'setSelectionOrder').replace('{{option}}', opt_val)); + continue; + } + chosen_choices = chosen_ui.querySelector("ul.chosen-choices"); + _results.push(this.insertAt(option, i, chosen_ui.querySelector('ul.chosen-choices'))); + } + return _results; + } else { + return console.error(ERRORS.invalid_selection_array.replace('{{function}}', 'setSelectionOrder')); + } + }; + + return AbstractChosenOrder; + + })(); + + $ = jQuery; + + $.fn.extend({ + getSelectionOrder: function() { + return ChosenOrder.getSelectionOrder(this); + }, + setSelectionOrder: function(order, force) { + return ChosenOrder.setSelectionOrder(this, order, force); + } + }); + + this.ChosenOrder = (function(_super) { + __extends(ChosenOrder, _super); + + function ChosenOrder() { + _ref = ChosenOrder.__super__.constructor.apply(this, arguments); + return _ref; + } + + ChosenOrder.relAttributeName = 'data-option-array-index'; + + ChosenOrder.isjQueryObject = function(obj) { + return (typeof jQuery !== "undefined" && jQuery !== null) && obj instanceof jQuery; + }; + + ChosenOrder.getDOMElement = function(element) { + if (this.isjQueryObject(element)) { + return element.get(0); + } else { + return element; + } + }; + + ChosenOrder.searchChosenUIContainer = function(element) { + if ($(element).data("chosen") != null) { + return $(element).data("chosen").container[0]; + } else { + return $(element).next(".chosen-container.chosen-container-multi").get(0); + } + }; + + ChosenOrder.triggerEvent = function(target, event_name) { + return $(target).trigger(event_name); + }; + + return ChosenOrder; + + })(AbstractChosenOrder); + + }).call(this); + \ No newline at end of file diff --git a/assets/js/jquery.timepicker.js b/assets/js/jquery.timepicker.js new file mode 100644 index 0000000..5926852 --- /dev/null +++ b/assets/js/jquery.timepicker.js @@ -0,0 +1,1384 @@ +/*! + * jquery-timepicker v1.13.4 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation. + * Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/jquery-timepicker/ + * License: MIT + */ + +(function(factory) { + if ( + typeof exports === "object" && + exports && + typeof module === "object" && + module && + module.exports === exports + ) { + // Browserify. Attach to jQuery module. + factory(require("jquery")); + } else if (typeof define === "function" && define.amd) { + // AMD. Register as an anonymous module. + define(["jquery"], factory); + } else { + // Browser globals + factory(jQuery); + } + })(function($) { + var _ONE_DAY = 86400; + var _lang = { + am: "am", + pm: "pm", + AM: "AM", + PM: "PM", + decimal: ".", + mins: "mins", + hr: "hr", + hrs: "hrs" + }; + + var methods = { + init: function(options) { + return this.each(function() { + var self = $(this); + + // pick up settings from data attributes + var attributeOptions = []; + for (var key in $.fn.jquery_timepicker.defaults) { + if (self.data(key)) { + attributeOptions[key] = self.data(key); + } + } + + var settings = $.extend({}, $.fn.jquery_timepicker.defaults, options, attributeOptions); + + if (settings.lang) { + _lang = $.extend(_lang, settings.lang); + } + + settings = _parseSettings(settings); + self.data("timepicker-settings", settings); + self.addClass("ui-timepicker-input"); + + if (settings.useSelect) { + _render(self); + } else { + self.prop("autocomplete", "off"); + if (settings.showOn) { + for (var i in settings.showOn) { + self.on(settings.showOn[i] + ".timepicker", methods.show); + } + } + self.on("change.timepicker", _formatValue); + self.on("keydown.timepicker", _keydownhandler); + self.on("keyup.timepicker", _keyuphandler); + if (settings.disableTextInput) { + self.on("keydown.timepicker", _disableTextInputHandler); + } + self.on("cut.timepicker", _keyuphandler); + self.on("paste.timepicker", _keyuphandler); + + _formatValue.call(self.get(0), null, "initial"); + } + }); + }, + + show: function(e) { + var self = $(this); + var settings = self.data("timepicker-settings"); + + if (e) { + e.preventDefault(); + } + + if (settings.useSelect) { + self.data("timepicker-list").focus(); + return; + } + + if (_hideKeyboard(self)) { + // block the keyboard on mobile devices + self.blur(); + } + + var list = self.data("timepicker-list"); + + // check if input is readonly + if (self.prop("readonly")) { + return; + } + + // check if list needs to be rendered + if ( + !list || + list.length === 0 || + typeof settings.durationTime === "function" + ) { + _render(self); + list = self.data("timepicker-list"); + } + + if (_isVisible(list)) { + return; + } + + self.data("ui-timepicker-value", self.val()); + _setSelected(self, list); + + // make sure other pickers are hidden + methods.hide(); + + if (typeof settings.listWidth == 'number') { + console.log(settings.listWidth) + list.width(self.outerWidth() * settings.listWidth); + } + + // position the dropdown relative to the input + list.show(); + var listOffset = {}; + + if (settings.orientation.match(/r/)) { + // right-align the dropdown + listOffset.left = + self.offset().left + + self.outerWidth() - + list.outerWidth() + + parseInt(list.css("marginLeft").replace("px", ""), 10); + } else if (settings.orientation.match(/l/)) { + // left-align the dropdown + listOffset.left = + self.offset().left + + parseInt(list.css("marginLeft").replace("px", ""), 10); + } else if (settings.orientation.match(/c/)) { + // center-align the dropdown + listOffset.left = + self.offset().left + + ((self.outerWidth() - list.outerWidth()) / 2) + + parseInt(list.css("marginLeft").replace("px", ""), 10); + } + + var verticalOrientation; + if (settings.orientation.match(/t/)) { + verticalOrientation = "t"; + } else if (settings.orientation.match(/b/)) { + verticalOrientation = "b"; + } else if ( + self.offset().top + self.outerHeight(true) + list.outerHeight() > + $(window).height() + $(window).scrollTop() + ) { + verticalOrientation = "t"; + } else { + verticalOrientation = "b"; + } + + if (verticalOrientation == "t") { + // position the dropdown on top + list.addClass("ui-timepicker-positioned-top"); + listOffset.top = + self.offset().top - + list.outerHeight() + + parseInt(list.css("marginTop").replace("px", ""), 10); + } else { + // put it under the input + list.removeClass("ui-timepicker-positioned-top"); + listOffset.top = + self.offset().top + + self.outerHeight() + + parseInt(list.css("marginTop").replace("px", ""), 10); + } + + list.offset(listOffset); + + // position scrolling + var selected = list.find(".ui-timepicker-selected"); + + if (!selected.length) { + var timeInt = _time2int(_getTimeValue(self)); + if (timeInt !== null) { + selected = _findRow(self, list, timeInt); + } else if (settings.scrollDefault) { + selected = _findRow(self, list, settings.scrollDefault()); + } + } + + // if not found or disabled, intelligently find first selectable element + if (!selected.length || selected.hasClass("ui-timepicker-disabled")) { + selected = list.find("li:not(.ui-timepicker-disabled):first"); + } + + if (selected && selected.length) { + var topOffset = + list.scrollTop() + selected.position().top - selected.outerHeight(); + list.scrollTop(topOffset); + } else { + list.scrollTop(0); + } + + // prevent scroll propagation + if (settings.stopScrollPropagation) { + $( + document + ).on("wheel.ui-timepicker", ".ui-timepicker-wrapper", function(e) { + e.preventDefault(); + var currentScroll = $(this).scrollTop(); + $(this).scrollTop(currentScroll + e.originalEvent.deltaY); + }); + } + + // attach close handlers + $(document).on( + "touchstart.ui-timepicker mousedown.ui-timepicker", + _closeHandler + ); + $(window).on("resize.ui-timepicker", _closeHandler); + if (settings.closeOnWindowScroll) { + $(document).on("scroll.ui-timepicker", _closeHandler); + } + + self.trigger("showTimepicker"); + + return this; + }, + + hide: function(e) { + var self = $(this); + var settings = self.data("timepicker-settings"); + + if (settings && settings.useSelect) { + self.blur(); + } + + $(".ui-timepicker-wrapper").each(function() { + var list = $(this); + if (!_isVisible(list)) { + return; + } + + var self = list.data("timepicker-input"); + var settings = self.data("timepicker-settings"); + + if (settings && settings.selectOnBlur) { + _selectValue(self); + } + + list.hide(); + self.trigger("hideTimepicker"); + }); + + return this; + }, + + option: function(key, value) { + if (typeof key == "string" && typeof value == "undefined") { + return $(this).data("timepicker-settings")[key]; + } + + return this.each(function() { + var self = $(this); + var settings = self.data("timepicker-settings"); + var list = self.data("timepicker-list"); + + if (typeof key == "object") { + settings = $.extend(settings, key); + } else if (typeof key == "string") { + settings[key] = value; + } + + settings = _parseSettings(settings); + + self.data("timepicker-settings", settings); + + _formatValue.call(self.get(0), { type: "change" }, "initial"); + + if (list) { + list.remove(); + self.data("timepicker-list", false); + } + + if (settings.useSelect) { + _render(self); + } + }); + }, + + getSecondsFromMidnight: function() { + return _time2int(_getTimeValue(this)); + }, + + getTime: function(relative_date) { + var self = this; + + var time_string = _getTimeValue(self); + if (!time_string) { + return null; + } + + var offset = _time2int(time_string); + if (offset === null) { + return null; + } + + if (!relative_date) { + relative_date = new Date(); + } + + // construct a Date from relative date, and offset's time + var time = new Date(relative_date); + time.setHours(offset / 3600); + time.setMinutes((offset % 3600) / 60); + time.setSeconds(offset % 60); + time.setMilliseconds(0); + + return time; + }, + + isVisible: function() { + var self = this; + var list = self.data("timepicker-list"); + return !!(list && _isVisible(list)); + }, + + setTime: function(value) { + var self = this; + var settings = self.data("timepicker-settings"); + + if (settings.forceRoundTime) { + var prettyTime = _roundAndFormatTime(_time2int(value), settings); + } else { + var prettyTime = _int2time(_time2int(value), settings); + } + + if (value && prettyTime === null && settings.noneOption) { + prettyTime = value; + } + + _setTimeValue(self, prettyTime, "initial"); + _formatValue.call(self.get(0), { type: "change" }, "initial"); + + if (self.data("timepicker-list")) { + _setSelected(self, self.data("timepicker-list")); + } + + return this; + }, + + remove: function() { + var self = this; + + // check if this element is a timepicker + if (!self.hasClass("ui-timepicker-input")) { + return; + } + + var settings = self.data("timepicker-settings"); + self.removeAttr("autocomplete", "off"); + self.removeClass("ui-timepicker-input"); + self.removeData("timepicker-settings"); + self.off(".timepicker"); + + // timepicker-list won't be present unless the user has interacted with this timepicker + if (self.data("timepicker-list")) { + self.data("timepicker-list").remove(); + } + + if (settings.useSelect) { + self.show(); + } + + self.removeData("timepicker-list"); + + return this; + } + }; + + // private methods + + function _isVisible(elem) { + var el = elem[0]; + return el.offsetWidth > 0 && el.offsetHeight > 0; + } + + function _parseSettings(settings) { + if (settings.minTime) { + settings.minTime = _time2int(settings.minTime); + } + + if (settings.maxTime) { + settings.maxTime = _time2int(settings.maxTime); + } + + if (settings.durationTime && typeof settings.durationTime !== "function") { + settings.durationTime = _time2int(settings.durationTime); + } + + if (settings.scrollDefault == "now") { + settings.scrollDefault = function() { + return settings.roundingFunction(_time2int(new Date()), settings); + }; + } else if ( + settings.scrollDefault && + typeof settings.scrollDefault != "function" + ) { + var val = settings.scrollDefault; + settings.scrollDefault = function() { + return settings.roundingFunction(_time2int(val), settings); + }; + } else if (settings.minTime) { + settings.scrollDefault = function() { + return settings.roundingFunction(settings.minTime, settings); + }; + } + + if ( + $.type(settings.timeFormat) === "string" && + settings.timeFormat.match(/[gh]/) + ) { + settings._twelveHourTime = true; + } + + if ( + settings.showOnFocus === false && + settings.showOn.indexOf("focus") != -1 + ) { + settings.showOn.splice(settings.showOn.indexOf("focus"), 1); + } + + if (settings.disableTimeRanges.length > 0) { + // convert string times to integers + for (var i in settings.disableTimeRanges) { + settings.disableTimeRanges[i] = [ + _time2int(settings.disableTimeRanges[i][0]), + _time2int(settings.disableTimeRanges[i][1]) + ]; + } + + // sort by starting time + settings.disableTimeRanges = settings.disableTimeRanges.sort(function( + a, + b + ) { + return a[0] - b[0]; + }); + + // merge any overlapping ranges + for (var i = settings.disableTimeRanges.length - 1; i > 0; i--) { + if ( + settings.disableTimeRanges[i][0] <= + settings.disableTimeRanges[i - 1][1] + ) { + settings.disableTimeRanges[i - 1] = [ + Math.min( + settings.disableTimeRanges[i][0], + settings.disableTimeRanges[i - 1][0] + ), + Math.max( + settings.disableTimeRanges[i][1], + settings.disableTimeRanges[i - 1][1] + ) + ]; + settings.disableTimeRanges.splice(i, 1); + } + } + } + + return settings; + } + + function _render(self) { + var settings = self.data("timepicker-settings"); + var list = self.data("timepicker-list"); + + if (list && list.length) { + list.remove(); + self.data("timepicker-list", false); + } + + if (settings.useSelect) { + list = $("