From 080372788ebc8efc50c37ef71cf5b5d67bdc519a Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Thu, 27 Oct 2016 18:49:31 +0300 Subject: [PATCH 01/28] Update filtering UI. --- app/controllers/audit_logs.js | 40 +++++++++++++-- app/models/log_audit.js | 7 +++ app/views/admin/layout.swig | 1 + app/views/admin/partials/search-buttons.swig | 28 +++++++++++ app/views/admin/partials/search.swig | 2 +- resources/javascripts/custom.js | 51 +++++++++++++------- 6 files changed, 105 insertions(+), 24 deletions(-) create mode 100644 app/views/admin/partials/search-buttons.swig diff --git a/app/controllers/audit_logs.js b/app/controllers/audit_logs.js index bb0c991..7a72c4c 100644 --- a/app/controllers/audit_logs.js +++ b/app/controllers/audit_logs.js @@ -5,6 +5,11 @@ */ var AdminBaseCrudController = require('./basecrud.js'); +/** + * Async library + */ +const async = require('async'); + /** * AdminLogSystem controller */ @@ -43,13 +48,38 @@ class AdminLogAudit extends AdminBaseCrudController { } load(readyCallback) { - super.load(function (err) { - if (err) return readyCallback(err); - // TODO: Load filters - readyCallback(); + async.series([callback => { + + super.load(callback); + + }, callback => { + + this.loadFiltersData(callback); + + }], readyCallback); + } + + loadFiltersData(callback) { + + async.series([callback => { + + this.loadResources(callback); + + }], callback); + } + + loadResources(callback) { + + this.model.model.distinct('resource', (err, resources) => { + if (err) return callback(err); + + this.data.filtersData = this.data.filtersData ? this.data.filtersData : {}; + + this.data.filtersData.resources = resources; - }.bind(this)); + callback(); + }); } } diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 551a6e5..7d6d675 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -21,6 +21,13 @@ class LogAuditModel extends BaseModel { constructor (listName) { // We must call super() in child class to have access to 'this' in a constructor super(listName); + + /** + * Response fields + * + * @type {string[]} + */ + this.responseFields = ['resource', 'resourceId', 'action', 'userId']; } /** diff --git a/app/views/admin/layout.swig b/app/views/admin/layout.swig index 3e4d412..5ad91f3 100644 --- a/app/views/admin/layout.swig +++ b/app/views/admin/layout.swig @@ -31,6 +31,7 @@ {% include "./partials/sorting_column.swig" %} {% include "./partials/sorting.swig" %} {% include "./partials/search.swig" %} + {% include "./partials/search-buttons.swig" %} {% include "./partials/resource-action-buttons.swig" %} {% include "./partials/bulk-actions.swig" %} {% include "./partials/quickfilter.swig" %} diff --git a/app/views/admin/partials/search-buttons.swig b/app/views/admin/partials/search-buttons.swig new file mode 100644 index 0000000..e374a95 --- /dev/null +++ b/app/views/admin/partials/search-buttons.swig @@ -0,0 +1,28 @@ + +{% macro search_buttons() %} + + {% if filters.search.searchValue %} + {% set showResetButton = true %} + {% else %} + {% for entry in filters.inField %} + {% if entry.filterName.indexOf('inField') == 0 and not entry.fieldValue | isEmpty %} + {% set showResetButton = true %} + {% endif %} + {% endfor %} + {% endif %} + +
+ + {% if showResetButton %} + + {% endif %} + + + +
+ +{% endmacro %} \ No newline at end of file diff --git a/app/views/admin/partials/search.swig b/app/views/admin/partials/search.swig index 35c1bcc..c8aa441 100644 --- a/app/views/admin/partials/search.swig +++ b/app/views/admin/partials/search.swig @@ -4,7 +4,7 @@ + value="{{ filters.search.searchValue }}" data-filter="search"> + {% if filters.search.searchValue %} + + {% endif %} + + +{% endmacro %} diff --git a/resources/javascripts/custom.js b/resources/javascripts/custom.js index ae84787..6bb771b 100644 --- a/resources/javascripts/custom.js +++ b/resources/javascripts/custom.js @@ -64,10 +64,10 @@ jQuery(document).ready(function () { $('.bs-data-picker').datepicker({}); // Filters box binding - if ($('.filters').length > 0) { + if ($('.search-filters').length > 0) { - $('#searchValue').keydown(function (e) { - var basePath = $('.search-box #basePath').val(); + $('.search-box-2 #searchValue').keydown(function (e) { + var basePath = $('.search-box-2 #basePath').val(); if (e.which === 13) { var searchValue = $(this).val(); @@ -78,7 +78,7 @@ jQuery(document).ready(function () { } }); - $('.filters .search').click(function (e) { + $('.search-filters .search').click(function (e) { var queryString = window.location.search; @@ -93,10 +93,10 @@ jQuery(document).ready(function () { } }); - window.location = $('.search-box #basePath').val() + queryString; + window.location = $('.search-box-2 #basePath').val() + queryString; }); - $('.filters .reset').click(function () { + $('.search-filters .reset').click(function () { var queryString = window.location.search; @@ -106,7 +106,7 @@ jQuery(document).ready(function () { queryString = queryStringHelper.getUpdatedQueryString(queryString, 'filter[' + name + ']', ''); }); - window.location = $('.search-box #basePath').val() + queryString; + window.location = $('.search-box-2 #basePath').val() + queryString; }); } @@ -300,20 +300,20 @@ jQuery(document).ready(function () { var container = null; if (container_id) { container = $(container_id); - } - + } + $.ajax({ url: $(this).data("base_url") + "/" + $(this).data("permission_id") + "/delete-ajax", method: "GET" }).done(function(a) { if (container) { container.html('').removeClass().html('').addClass('label label-sm label-success').show().fadeOut(500); - } + } }).fail(function(a, b) { if (container) { container.html('').removeClass().html('').addClass('label label-sm label-danger').show().fadeOut(500); } - + }) } }); @@ -520,4 +520,4 @@ $(document).ready(function () { minimumInputLength: 1 }); }); -}); \ No newline at end of file +}); From 6937a5b8d6677d1f874ee91002864189e7172fed Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 14:31:18 +0300 Subject: [PATCH 05/28] Update. --- app/views/admin/layout.swig | 141 ++++++++++++++-------------- app/views/admin/log_audit/list.swig | 2 +- 2 files changed, 72 insertions(+), 71 deletions(-) diff --git a/app/views/admin/layout.swig b/app/views/admin/layout.swig index 5ad91f3..8cd69a7 100644 --- a/app/views/admin/layout.swig +++ b/app/views/admin/layout.swig @@ -1,70 +1,71 @@ - - - - - - - - {% if pageTitle %}{{ pageTitle }}{% else %}{% endif %} {% if globalConfig && globalConfig.project && globalConfig.project.name %} | {{ globalConfig.project.name }}{% endif %} - - - - - - - -{% block header %} -
-
- {% include "./partials/header-left.swig" %} - {% include "./partials/header-right.swig" %} -
-
-{% endblock %} -
- {# Reusable components (macro) #} - {% include "./partials/pagination-pages.swig" %} - {% include "./partials/pagination-rows.swig" %} - {% include "./partials/pagination-summary.swig" %} - {% include "./partials/sorting_column.swig" %} - {% include "./partials/sorting.swig" %} - {% include "./partials/search.swig" %} - {% include "./partials/search-buttons.swig" %} - {% include "./partials/resource-action-buttons.swig" %} - {% include "./partials/bulk-actions.swig" %} - {% include "./partials/quickfilter.swig" %} - {% include "./partials/pageheader.swig" %} - {% include "./partials/item-select-checkbox.swig" %} - {% include "./partials/audit-logs.swig" %} - - {% block content %} -
-
- {% include "./partials/profile-left.swig" %} -
Navigation
- {% include "./partials/left-menu-items.swig" %} -
- -
- {% block mainpanel %} - {% block pageheader %}{% include "./partials/pageheader.swig" %}{% endblock %} -
- {% include "./partials/messages.swig" %} - {% block pagecontent %}{% endblock %} -
- {% endblock %} -
-
- {% endblock %} - -
- - - - - -{% block page_js %}{% endblock %} - - + + + + + + + + {% if pageTitle %}{{ pageTitle }}{% else %}{% endif %} {% if globalConfig && globalConfig.project && globalConfig.project.name %} | {{ globalConfig.project.name }}{% endif %} + + + + + + + +{% block header %} +
+
+ {% include "./partials/header-left.swig" %} + {% include "./partials/header-right.swig" %} +
+
+{% endblock %} +
+ {# Reusable components (macro) #} + {% include "./partials/pagination-pages.swig" %} + {% include "./partials/pagination-rows.swig" %} + {% include "./partials/pagination-summary.swig" %} + {% include "./partials/sorting_column.swig" %} + {% include "./partials/sorting.swig" %} + {% include "./partials/search.swig" %} + {% include "./partials/search2.swig" %} + {% include "./partials/search-buttons.swig" %} + {% include "./partials/resource-action-buttons.swig" %} + {% include "./partials/bulk-actions.swig" %} + {% include "./partials/quickfilter.swig" %} + {% include "./partials/pageheader.swig" %} + {% include "./partials/item-select-checkbox.swig" %} + {% include "./partials/audit-logs.swig" %} + + {% block content %} +
+
+ {% include "./partials/profile-left.swig" %} +
Navigation
+ {% include "./partials/left-menu-items.swig" %} +
+ +
+ {% block mainpanel %} + {% block pageheader %}{% include "./partials/pageheader.swig" %}{% endblock %} +
+ {% include "./partials/messages.swig" %} + {% block pagecontent %}{% endblock %} +
+ {% endblock %} +
+
+ {% endblock %} + +
+ + + + + +{% block page_js %}{% endblock %} + + diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 634a6b6..4db032a 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -11,7 +11,7 @@
- {{ search() }} + {{ search2() }}
{% include './partials/search-by-resource.swig' %} From 88249e63b90f5ecb26d1d406f1405ac9a90cc034 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 14:32:32 +0300 Subject: [PATCH 06/28] Update. --- app/views/admin/partials/{search-2.swig => search2.swig} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/views/admin/partials/{search-2.swig => search2.swig} (100%) diff --git a/app/views/admin/partials/search-2.swig b/app/views/admin/partials/search2.swig similarity index 100% rename from app/views/admin/partials/search-2.swig rename to app/views/admin/partials/search2.swig From 8f8a90431d4e7ca219055c7a362aeb927cd17fd5 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 14:40:01 +0300 Subject: [PATCH 07/28] Update. --- app/models/log_audit.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 7d6d675..5f3a70f 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -28,6 +28,15 @@ class LogAuditModel extends BaseModel { * @type {string[]} */ this.responseFields = ['resource', 'resourceId', 'action', 'userId']; + + /** + * + * @type {*[]} + */ + this.inFieldFilterFields = [{ + name: 'inFieldResource', + field: 'resource' + }]; } /** From b2fb444a50f585f6d06af5bb2cbab05ece6ba417 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 18:07:17 +0300 Subject: [PATCH 08/28] Added backward compatibility --- app/assets/javascripts/build.min.js | 2 +- resources/javascripts/custom.js | 35 ++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/build.min.js b/app/assets/javascripts/build.min.js index 1cfb053..3afa3c6 100644 --- a/app/assets/javascripts/build.min.js +++ b/app/assets/javascripts/build.min.js @@ -878,4 +878,4 @@ _initParser:function(){this.observe("paste:composer",function(){var a=this;a.com }(window.jQuery, window.wysihtml5); -;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
'),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
  • '+k.join("
  • ")+"
"+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
No fields are checked to be edited
'):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file +;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
'),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
  • '+k.join("
  • ")+"
"+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
No fields are checked to be edited
'):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file diff --git a/resources/javascripts/custom.js b/resources/javascripts/custom.js index 6bb771b..ff2e270 100644 --- a/resources/javascripts/custom.js +++ b/resources/javascripts/custom.js @@ -63,7 +63,40 @@ jQuery(document).ready(function () { $('.bs-data-picker').datepicker({}); - // Filters box binding + // Search box binding (deprecated) + if ($('.search-box').length > 0) { + $('.search-box #searchValue').keydown(function (e) { + var oldValue = $('.search-box #oldValue').val(); + var basePath = $('.search-box #basePath').val(); + + if (e.which === 13) { + var searchValue = $(this).val(); + if (searchValue) { + var queryString = queryStringHelper.getUpdatedQueryString(window.location.search, 'filter[search]', searchValue); + window.location = basePath + queryString; + } + return false; + } + }); + + $('.search-box .search').click(function (e) { + var basePath = $('.search-box #basePath').val(); + var searchValue = $('.search-box #searchValue').val(); + + if (searchValue) { + var queryString = queryStringHelper.getUpdatedQueryString(window.location.search, 'filter[search]', searchValue); + window.location = basePath + queryString; + } + }); + + $('.search-box .reset').click(function (e) { + var basePath = $('.search-box #basePath').val(); + var queryString = queryStringHelper.getUpdatedQueryString(window.location.search, 'filter[search]', ''); + window.location = basePath + queryString; + }); + } + + // Search filters binding if ($('.search-filters').length > 0) { $('.search-box-2 #searchValue').keydown(function (e) { From a6d552db393df0b7755f9f2fe2867a3b69243ef9 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 18:13:30 +0300 Subject: [PATCH 09/28] Added action search filter. --- app/controllers/audit_logs.js | 32 +++++++++++++++++++ app/models/log_audit.js | 3 ++ app/views/admin/log_audit/list.swig | 10 +++--- .../log_audit/partials/search-by-action.swig | 20 ++++++++++++ .../partials/search-by-resource.swig | 3 -- 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 app/views/admin/log_audit/partials/search-by-action.swig diff --git a/app/controllers/audit_logs.js b/app/controllers/audit_logs.js index 7a72c4c..b4109f2 100644 --- a/app/controllers/audit_logs.js +++ b/app/controllers/audit_logs.js @@ -60,15 +60,29 @@ class AdminLogAudit extends AdminBaseCrudController { }], readyCallback); } + /** + * Load left search filters data + * + * @param callback + */ loadFiltersData(callback) { async.series([callback => { this.loadResources(callback); + }, callback => { + + this.loadActions(callback); + }], callback); } + /** + * Load resources types + * + * @param callback + */ loadResources(callback) { this.model.model.distinct('resource', (err, resources) => { @@ -81,6 +95,24 @@ class AdminLogAudit extends AdminBaseCrudController { callback(); }); } + + /** + * Load actions + * + * @param callback + */ + loadActions(callback) { + + this.model.model.distinct('action', (err, actions) => { + if (err) return callback(err); + + this.data.filtersData = this.data.filtersData ? this.data.filtersData : {}; + + this.data.filtersData.actions = actions; + + callback(); + }); + } } /** diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 5f3a70f..bcb63c1 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -36,6 +36,9 @@ class LogAuditModel extends BaseModel { this.inFieldFilterFields = [{ name: 'inFieldResource', field: 'resource' + }, { + name: 'inFieldAction', + field: 'action' }]; } diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 4db032a..c051388 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -17,13 +17,13 @@ {% include './partials/search-by-resource.swig' %} {{ auditLoggingSearchByResource() }} - {{ filtersData | json(2) }} - - {##} + {% include './partials/search-by-action.swig' %} + {{ auditLoggingSearchByAction() }} {{ search_buttons() }} + +
{{ filters | json(2) }}
+
{{ filterData | json(2) }}
diff --git a/app/views/admin/log_audit/partials/search-by-action.swig b/app/views/admin/log_audit/partials/search-by-action.swig new file mode 100644 index 0000000..8fdd752 --- /dev/null +++ b/app/views/admin/log_audit/partials/search-by-action.swig @@ -0,0 +1,20 @@ +{% macro auditLoggingSearchByAction() %} + + {% set filterName = 'inFieldAction' %} + +
+ + +
+{% endmacro %} diff --git a/app/views/admin/log_audit/partials/search-by-resource.swig b/app/views/admin/log_audit/partials/search-by-resource.swig index cbe33e1..c228073 100644 --- a/app/views/admin/log_audit/partials/search-by-resource.swig +++ b/app/views/admin/log_audit/partials/search-by-resource.swig @@ -17,7 +17,4 @@ {% endfor %}
- -
{{ filters | json(2) }}
-
{{ filterData | json(2) }}
{% endmacro %} From 9f4a8223e3f3fb1b8852bfea2dab9764cce8b250 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 20:22:36 +0300 Subject: [PATCH 10/28] Added user ID search filter. --- app/models/log_audit.js | 3 +++ app/views/admin/log_audit/list.swig | 4 ++++ .../admin/log_audit/partials/search-by-user-id.swig | 13 +++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 app/views/admin/log_audit/partials/search-by-user-id.swig diff --git a/app/models/log_audit.js b/app/models/log_audit.js index bcb63c1..143919b 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -39,6 +39,9 @@ class LogAuditModel extends BaseModel { }, { name: 'inFieldAction', field: 'action' + }, { + name: 'inFieldUserId', + field: 'userId' }]; } diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index c051388..95ac4f0 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -20,8 +20,12 @@ {% include './partials/search-by-action.swig' %} {{ auditLoggingSearchByAction() }} + {% include './partials/search-by-user-id.swig' %} + {{ auditLoggingSearchByUserId() }} + {{ search_buttons() }} +
{{ filters | json(2) }}
{{ filterData | json(2) }}
diff --git a/app/views/admin/log_audit/partials/search-by-user-id.swig b/app/views/admin/log_audit/partials/search-by-user-id.swig new file mode 100644 index 0000000..f028e02 --- /dev/null +++ b/app/views/admin/log_audit/partials/search-by-user-id.swig @@ -0,0 +1,13 @@ +{% macro auditLoggingSearchByUserId() %} + + {% set filterName = 'inFieldUserId' %} + +
+ + {% set filterData = filters.inField | find({filterName: filterName}) %} + + +
+{% endmacro %} From 9c5f719b3018577947967867cc6249bae3596b68 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 20:28:05 +0300 Subject: [PATCH 11/28] Added resource ID search filter. --- app/models/log_audit.js | 5 ++++- .../admin/log_audit/partials/search-by-action.swig | 2 +- .../log_audit/partials/search-by-resource-id.swig | 13 +++++++++++++ .../log_audit/partials/search-by-resource.swig | 2 +- .../admin/log_audit/partials/search-by-user-id.swig | 4 ++-- 5 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 app/views/admin/log_audit/partials/search-by-resource-id.swig diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 143919b..5861616 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -30,7 +30,7 @@ class LogAuditModel extends BaseModel { this.responseFields = ['resource', 'resourceId', 'action', 'userId']; /** - * + * * @type {*[]} */ this.inFieldFilterFields = [{ @@ -42,6 +42,9 @@ class LogAuditModel extends BaseModel { }, { name: 'inFieldUserId', field: 'userId' + }, { + name: 'inFieldResourceId', + field: 'resourceId' }]; } diff --git a/app/views/admin/log_audit/partials/search-by-action.swig b/app/views/admin/log_audit/partials/search-by-action.swig index 8fdd752..2e0509d 100644 --- a/app/views/admin/log_audit/partials/search-by-action.swig +++ b/app/views/admin/log_audit/partials/search-by-action.swig @@ -5,7 +5,7 @@
+
+{% endmacro %} diff --git a/app/views/admin/log_audit/partials/search-by-resource.swig b/app/views/admin/log_audit/partials/search-by-resource.swig index c228073..7fa5dc6 100644 --- a/app/views/admin/log_audit/partials/search-by-resource.swig +++ b/app/views/admin/log_audit/partials/search-by-resource.swig @@ -5,7 +5,7 @@
+ placeholder="Filter by user ID">
{% endmacro %} From 7b4f29d2e8374b7ca9d23e1a27b08fda4c372394 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 20:51:46 +0300 Subject: [PATCH 12/28] Custom filters intro. --- app/models/log_audit.js | 24 ++++++++++++++++++++++++ app/views/admin/log_audit/list.swig | 3 +++ 2 files changed, 27 insertions(+) diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 5861616..b8e02cd 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -46,6 +46,12 @@ class LogAuditModel extends BaseModel { name: 'inFieldResourceId', field: 'resourceId' }]; + + /** + * + * @type {Array} + */ + this.customFilters = ['dataRange']; } /** @@ -176,6 +182,24 @@ class LogAuditModel extends BaseModel { return callback(); } } + + /** + * Build and add a conditions based on custom filters + * + * @param mongoFilters {{}} + * @param customFilters {[{}]} + * + * @return {{}} + */ + addCustomFilters(mongoFilters, customFilters) { + + console.log('---'); + console.log(mongoFilters); + console.log(customFilters); + console.log('---'); + + return mongoFilters; + } } /** diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 95ac4f0..904dae1 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -23,6 +23,9 @@ {% include './partials/search-by-user-id.swig' %} {{ auditLoggingSearchByUserId() }} + {% include './partials/search-by-resource-id.swig' %} + {{ auditLoggingSearchByResourceId() }} + {{ search_buttons() }}
From 04de5c61e189035f34e368469d6dd0bb95bfbbbb Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:06:41 +0300 Subject: [PATCH 13/28] Date range filter. --- Gruntfile.js | 2 + app/assets/javascripts/build.min.js | 1620 ++++++++++++++++- app/assets/stylesheets/build.min.css | 2 +- app/models/log_audit.js | 5 +- app/views/admin/log_audit/list.swig | 3 + .../partials/search-by-date-range.swig | 13 + resources/bower.json | 3 +- resources/javascripts/custom.js | 1 + 8 files changed, 1645 insertions(+), 4 deletions(-) create mode 100644 app/views/admin/log_audit/partials/search-by-date-range.swig diff --git a/Gruntfile.js b/Gruntfile.js index a83dd80..a52f590 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -33,6 +33,7 @@ module.exports = function (grunt) { './resources/javascripts/chain/bootstrap-timepicker.min.js', './resources/javascripts/chain/wysihtml5-0.3.0.min.js', './resources/javascripts/chain/bootstrap-wysihtml5.js', + './resources/bower_components/bootstrap-daterangepicker/daterangepicker.js', './app/assets/javascripts/build.min.js' ], dest: './app/assets/javascripts/build.min.js' @@ -59,6 +60,7 @@ module.exports = function (grunt) { './resources/stylesheets/chain/bootstrap-timepicker.min.css', './resources/stylesheets/chain/select2.min.css', './resources/stylesheets/chain/select2-bootstrap.css', + './resources/bower_components/bootstrap-daterangepicker/daterangepicker.css', './resources/stylesheets/custom.css' ] } diff --git a/app/assets/javascripts/build.min.js b/app/assets/javascripts/build.min.js index 3afa3c6..886b57f 100644 --- a/app/assets/javascripts/build.min.js +++ b/app/assets/javascripts/build.min.js @@ -878,4 +878,1622 @@ _initParser:function(){this.observe("paste:composer",function(){var a=this;a.com }(window.jQuery, window.wysihtml5); -;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
'),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
  • '+k.join("
  • ")+"
"+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
No fields are checked to be edited
'):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file +;/** +* @version: 2.1.24 +* @author: Dan Grossman http://www.dangrossman.info/ +* @copyright: Copyright (c) 2012-2016 Dan Grossman. All rights reserved. +* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php +* @website: https://www.improvely.com/ +*/ +// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Make globaly available as well + define(['moment', 'jquery'], function (moment, jquery) { + return (root.daterangepicker = factory(moment, jquery)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node / Browserify + //isomorphic issue + var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined; + if (!jQuery) { + jQuery = require('jquery'); + if (!jQuery.fn) jQuery.fn = {}; + } + module.exports = factory(require('moment'), jQuery); + } else { + // Browser globals + root.daterangepicker = factory(root.moment, root.jQuery); + } +}(this, function(moment, $) { + var DateRangePicker = function(element, options, cb) { + + //default settings for options + this.parentEl = 'body'; + this.element = $(element); + this.startDate = moment().startOf('day'); + this.endDate = moment().endOf('day'); + this.minDate = false; + this.maxDate = false; + this.dateLimit = false; + this.autoApply = false; + this.singleDatePicker = false; + this.showDropdowns = false; + this.showWeekNumbers = false; + this.showISOWeekNumbers = false; + this.showCustomRangeLabel = true; + this.timePicker = false; + this.timePicker24Hour = false; + this.timePickerIncrement = 1; + this.timePickerSeconds = false; + this.linkedCalendars = true; + this.autoUpdateInput = true; + this.alwaysShowCalendars = false; + this.ranges = {}; + + this.opens = 'right'; + if (this.element.hasClass('pull-right')) + this.opens = 'left'; + + this.drops = 'down'; + if (this.element.hasClass('dropup')) + this.drops = 'up'; + + this.buttonClasses = 'btn btn-sm'; + this.applyClass = 'btn-success'; + this.cancelClass = 'btn-default'; + + this.locale = { + direction: 'ltr', + format: 'MM/DD/YYYY', + separator: ' - ', + applyLabel: 'Apply', + cancelLabel: 'Cancel', + weekLabel: 'W', + customRangeLabel: 'Custom Range', + daysOfWeek: moment.weekdaysMin(), + monthNames: moment.monthsShort(), + firstDay: moment.localeData().firstDayOfWeek() + }; + + this.callback = function() { }; + + //some state information + this.isShowing = false; + this.leftCalendar = {}; + this.rightCalendar = {}; + + //custom options from user + if (typeof options !== 'object' || options === null) + options = {}; + + //allow setting options with data attributes + //data-api options will be overwritten with custom javascript options + options = $.extend(this.element.data(), options); + + //html template for the picker UI + if (typeof options.template !== 'string' && !(options.template instanceof $)) + options.template = ''; + + this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl); + this.container = $(options.template).appendTo(this.parentEl); + + // + // handle all the possible options overriding defaults + // + + if (typeof options.locale === 'object') { + + if (typeof options.locale.direction === 'string') + this.locale.direction = options.locale.direction; + + if (typeof options.locale.format === 'string') + this.locale.format = options.locale.format; + + if (typeof options.locale.separator === 'string') + this.locale.separator = options.locale.separator; + + if (typeof options.locale.daysOfWeek === 'object') + this.locale.daysOfWeek = options.locale.daysOfWeek.slice(); + + if (typeof options.locale.monthNames === 'object') + this.locale.monthNames = options.locale.monthNames.slice(); + + if (typeof options.locale.firstDay === 'number') + this.locale.firstDay = options.locale.firstDay; + + if (typeof options.locale.applyLabel === 'string') + this.locale.applyLabel = options.locale.applyLabel; + + if (typeof options.locale.cancelLabel === 'string') + this.locale.cancelLabel = options.locale.cancelLabel; + + if (typeof options.locale.weekLabel === 'string') + this.locale.weekLabel = options.locale.weekLabel; + + if (typeof options.locale.customRangeLabel === 'string') + this.locale.customRangeLabel = options.locale.customRangeLabel; + + } + this.container.addClass(this.locale.direction); + + if (typeof options.startDate === 'string') + this.startDate = moment(options.startDate, this.locale.format); + + if (typeof options.endDate === 'string') + this.endDate = moment(options.endDate, this.locale.format); + + if (typeof options.minDate === 'string') + this.minDate = moment(options.minDate, this.locale.format); + + if (typeof options.maxDate === 'string') + this.maxDate = moment(options.maxDate, this.locale.format); + + if (typeof options.startDate === 'object') + this.startDate = moment(options.startDate); + + if (typeof options.endDate === 'object') + this.endDate = moment(options.endDate); + + if (typeof options.minDate === 'object') + this.minDate = moment(options.minDate); + + if (typeof options.maxDate === 'object') + this.maxDate = moment(options.maxDate); + + // sanity check for bad options + if (this.minDate && this.startDate.isBefore(this.minDate)) + this.startDate = this.minDate.clone(); + + // sanity check for bad options + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate.clone(); + + if (typeof options.applyClass === 'string') + this.applyClass = options.applyClass; + + if (typeof options.cancelClass === 'string') + this.cancelClass = options.cancelClass; + + if (typeof options.dateLimit === 'object') + this.dateLimit = options.dateLimit; + + if (typeof options.opens === 'string') + this.opens = options.opens; + + if (typeof options.drops === 'string') + this.drops = options.drops; + + if (typeof options.showWeekNumbers === 'boolean') + this.showWeekNumbers = options.showWeekNumbers; + + if (typeof options.showISOWeekNumbers === 'boolean') + this.showISOWeekNumbers = options.showISOWeekNumbers; + + if (typeof options.buttonClasses === 'string') + this.buttonClasses = options.buttonClasses; + + if (typeof options.buttonClasses === 'object') + this.buttonClasses = options.buttonClasses.join(' '); + + if (typeof options.showDropdowns === 'boolean') + this.showDropdowns = options.showDropdowns; + + if (typeof options.showCustomRangeLabel === 'boolean') + this.showCustomRangeLabel = options.showCustomRangeLabel; + + if (typeof options.singleDatePicker === 'boolean') { + this.singleDatePicker = options.singleDatePicker; + if (this.singleDatePicker) + this.endDate = this.startDate.clone(); + } + + if (typeof options.timePicker === 'boolean') + this.timePicker = options.timePicker; + + if (typeof options.timePickerSeconds === 'boolean') + this.timePickerSeconds = options.timePickerSeconds; + + if (typeof options.timePickerIncrement === 'number') + this.timePickerIncrement = options.timePickerIncrement; + + if (typeof options.timePicker24Hour === 'boolean') + this.timePicker24Hour = options.timePicker24Hour; + + if (typeof options.autoApply === 'boolean') + this.autoApply = options.autoApply; + + if (typeof options.autoUpdateInput === 'boolean') + this.autoUpdateInput = options.autoUpdateInput; + + if (typeof options.linkedCalendars === 'boolean') + this.linkedCalendars = options.linkedCalendars; + + if (typeof options.isInvalidDate === 'function') + this.isInvalidDate = options.isInvalidDate; + + if (typeof options.isCustomDate === 'function') + this.isCustomDate = options.isCustomDate; + + if (typeof options.alwaysShowCalendars === 'boolean') + this.alwaysShowCalendars = options.alwaysShowCalendars; + + // update day names order to firstDay + if (this.locale.firstDay != 0) { + var iterator = this.locale.firstDay; + while (iterator > 0) { + this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()); + iterator--; + } + } + + var start, end, range; + + //if no start/end dates set, check if an input element contains initial values + if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') { + if ($(this.element).is('input[type=text]')) { + var val = $(this.element).val(), + split = val.split(this.locale.separator); + + start = end = null; + + if (split.length == 2) { + start = moment(split[0], this.locale.format); + end = moment(split[1], this.locale.format); + } else if (this.singleDatePicker && val !== "") { + start = moment(val, this.locale.format); + end = moment(val, this.locale.format); + } + if (start !== null && end !== null) { + this.setStartDate(start); + this.setEndDate(end); + } + } + } + + if (typeof options.ranges === 'object') { + for (range in options.ranges) { + + if (typeof options.ranges[range][0] === 'string') + start = moment(options.ranges[range][0], this.locale.format); + else + start = moment(options.ranges[range][0]); + + if (typeof options.ranges[range][1] === 'string') + end = moment(options.ranges[range][1], this.locale.format); + else + end = moment(options.ranges[range][1]); + + // If the start or end date exceed those allowed by the minDate or dateLimit + // options, shorten the range to the allowable period. + if (this.minDate && start.isBefore(this.minDate)) + start = this.minDate.clone(); + + var maxDate = this.maxDate; + if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate)) + maxDate = start.clone().add(this.dateLimit); + if (maxDate && end.isAfter(maxDate)) + end = maxDate.clone(); + + // If the end of the range is before the minimum or the start of the range is + // after the maximum, don't display this range option at all. + if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) + || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day'))) + continue; + + //Support unicode chars in the range names. + var elem = document.createElement('textarea'); + elem.innerHTML = range; + var rangeHtml = elem.value; + + this.ranges[rangeHtml] = [start, end]; + } + + var list = '
    '; + for (range in this.ranges) { + list += '
  • ' + range + '
  • '; + } + if (this.showCustomRangeLabel) { + list += '
  • ' + this.locale.customRangeLabel + '
  • '; + } + list += '
'; + this.container.find('.ranges').prepend(list); + } + + if (typeof cb === 'function') { + this.callback = cb; + } + + if (!this.timePicker) { + this.startDate = this.startDate.startOf('day'); + this.endDate = this.endDate.endOf('day'); + this.container.find('.calendar-time').hide(); + } + + //can't be used together for now + if (this.timePicker && this.autoApply) + this.autoApply = false; + + if (this.autoApply && typeof options.ranges !== 'object') { + this.container.find('.ranges').hide(); + } else if (this.autoApply) { + this.container.find('.applyBtn, .cancelBtn').addClass('hide'); + } + + if (this.singleDatePicker) { + this.container.addClass('single'); + this.container.find('.calendar.left').addClass('single'); + this.container.find('.calendar.left').show(); + this.container.find('.calendar.right').hide(); + this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide(); + if (this.timePicker) { + this.container.find('.ranges ul').hide(); + } else { + this.container.find('.ranges').hide(); + } + } + + if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) { + this.container.addClass('show-calendar'); + } + + this.container.addClass('opens' + this.opens); + + //swap the position of the predefined ranges if opens right + if (typeof options.ranges !== 'undefined' && this.opens == 'right') { + this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() ); + } + + //apply CSS classes and labels to buttons + this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses); + if (this.applyClass.length) + this.container.find('.applyBtn').addClass(this.applyClass); + if (this.cancelClass.length) + this.container.find('.cancelBtn').addClass(this.cancelClass); + this.container.find('.applyBtn').html(this.locale.applyLabel); + this.container.find('.cancelBtn').html(this.locale.cancelLabel); + + // + // event listeners + // + + this.container.find('.calendar') + .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this)) + .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this)) + .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this)) + .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this)) + .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this)) + .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this)) + .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this)) + .on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this)) + .on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this)) + .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this)); + + this.container.find('.ranges') + .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this)) + .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this)) + .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this)) + .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this)) + .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this)); + + if (this.element.is('input') || this.element.is('button')) { + this.element.on({ + 'click.daterangepicker': $.proxy(this.show, this), + 'focus.daterangepicker': $.proxy(this.show, this), + 'keyup.daterangepicker': $.proxy(this.elementChanged, this), + 'keydown.daterangepicker': $.proxy(this.keydown, this) + }); + } else { + this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); + } + + // + // if attached to a text input, set the initial value + // + + if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + this.element.trigger('change'); + } else if (this.element.is('input') && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format)); + this.element.trigger('change'); + } + + }; + + DateRangePicker.prototype = { + + constructor: DateRangePicker, + + setStartDate: function(startDate) { + if (typeof startDate === 'string') + this.startDate = moment(startDate, this.locale.format); + + if (typeof startDate === 'object') + this.startDate = moment(startDate); + + if (!this.timePicker) + this.startDate = this.startDate.startOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.minDate && this.startDate.isBefore(this.minDate)) { + this.startDate = this.minDate; + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + } + + if (this.maxDate && this.startDate.isAfter(this.maxDate)) { + this.startDate = this.maxDate; + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + } + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + setEndDate: function(endDate) { + if (typeof endDate === 'string') + this.endDate = moment(endDate, this.locale.format); + + if (typeof endDate === 'object') + this.endDate = moment(endDate); + + if (!this.timePicker) + this.endDate = this.endDate.endOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.endDate.isBefore(this.startDate)) + this.endDate = this.startDate.clone(); + + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate; + + if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate)) + this.endDate = this.startDate.clone().add(this.dateLimit); + + this.previousRightTime = this.endDate.clone(); + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + isInvalidDate: function() { + return false; + }, + + isCustomDate: function() { + return false; + }, + + updateView: function() { + if (this.timePicker) { + this.renderTimePicker('left'); + this.renderTimePicker('right'); + if (!this.endDate) { + this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled'); + } else { + this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled'); + } + } + if (this.endDate) { + this.container.find('input[name="daterangepicker_end"]').removeClass('active'); + this.container.find('input[name="daterangepicker_start"]').addClass('active'); + } else { + this.container.find('input[name="daterangepicker_end"]').addClass('active'); + this.container.find('input[name="daterangepicker_start"]').removeClass('active'); + } + this.updateMonthsInView(); + this.updateCalendars(); + this.updateFormInputs(); + }, + + updateMonthsInView: function() { + if (this.endDate) { + + //if both dates are visible already, do nothing + if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && + (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + && + (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + ) { + return; + } + + this.leftCalendar.month = this.startDate.clone().date(2); + if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) { + this.rightCalendar.month = this.endDate.clone().date(2); + } else { + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + + } else { + if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) { + this.leftCalendar.month = this.startDate.clone().date(2); + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + } + if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) { + this.rightCalendar.month = this.maxDate.clone().date(2); + this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month'); + } + }, + + updateCalendars: function() { + + if (this.timePicker) { + var hour, minute, second; + if (this.endDate) { + hour = parseInt(this.container.find('.left .hourselect').val(), 10); + minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } else { + hour = parseInt(this.container.find('.right .hourselect').val(), 10); + minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } + this.leftCalendar.month.hour(hour).minute(minute).second(second); + this.rightCalendar.month.hour(hour).minute(minute).second(second); + } + + this.renderCalendar('left'); + this.renderCalendar('right'); + + //highlight any predefined range matching the current start and end dates + this.container.find('.ranges li').removeClass('active'); + if (this.endDate == null) return; + + this.calculateChosenLabel(); + }, + + renderCalendar: function(side) { + + // + // Build the matrix of dates that will populate the calendar + // + + var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar; + var month = calendar.month.month(); + var year = calendar.month.year(); + var hour = calendar.month.hour(); + var minute = calendar.month.minute(); + var second = calendar.month.second(); + var daysInMonth = moment([year, month]).daysInMonth(); + var firstDay = moment([year, month, 1]); + var lastDay = moment([year, month, daysInMonth]); + var lastMonth = moment(firstDay).subtract(1, 'month').month(); + var lastYear = moment(firstDay).subtract(1, 'month').year(); + var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth(); + var dayOfWeek = firstDay.day(); + + //initialize a 6 rows x 7 columns array for the calendar + var calendar = []; + calendar.firstDay = firstDay; + calendar.lastDay = lastDay; + + for (var i = 0; i < 6; i++) { + calendar[i] = []; + } + + //populate the calendar with date objects + var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1; + if (startDay > daysInLastMonth) + startDay -= 7; + + if (dayOfWeek == this.locale.firstDay) + startDay = daysInLastMonth - 6; + + var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]); + + var col, row; + for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) { + if (i > 0 && col % 7 === 0) { + col = 0; + row++; + } + calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second); + curDate.hour(12); + + if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') { + calendar[row][col] = this.minDate.clone(); + } + + if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') { + calendar[row][col] = this.maxDate.clone(); + } + + } + + //make the calendar object available to hoverDate/clickDate + if (side == 'left') { + this.leftCalendar.calendar = calendar; + } else { + this.rightCalendar.calendar = calendar; + } + + // + // Display the calendar + // + + var minDate = side == 'left' ? this.minDate : this.startDate; + var maxDate = this.maxDate; + var selected = side == 'left' ? this.startDate : this.endDate; + var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'}; + + var html = ''; + html += ''; + html += ''; + + // add empty cell for week number + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) { + html += ''; + } else { + html += ''; + } + + var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); + + if (this.showDropdowns) { + var currentMonth = calendar[1][1].month(); + var currentYear = calendar[1][1].year(); + var maxYear = (maxDate && maxDate.year()) || (currentYear + 5); + var minYear = (minDate && minDate.year()) || (currentYear - 50); + var inMinYear = currentYear == minYear; + var inMaxYear = currentYear == maxYear; + + var monthHtml = '"; + + var yearHtml = ''; + + dateHtml = monthHtml + yearHtml; + } + + html += ''; + if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) { + html += ''; + } else { + html += ''; + } + + html += ''; + html += ''; + + // add week number label + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + $.each(this.locale.daysOfWeek, function(index, dayOfWeek) { + html += ''; + }); + + html += ''; + html += ''; + html += ''; + + //adjust maxDate to reflect the dateLimit setting in order to + //grey out end dates beyond the dateLimit + if (this.endDate == null && this.dateLimit) { + var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day'); + if (!maxDate || maxLimit.isBefore(maxDate)) { + maxDate = maxLimit; + } + } + + for (var row = 0; row < 6; row++) { + html += ''; + + // add week number + if (this.showWeekNumbers) + html += ''; + else if (this.showISOWeekNumbers) + html += ''; + + for (var col = 0; col < 7; col++) { + + var classes = []; + + //highlight today's date + if (calendar[row][col].isSame(new Date(), "day")) + classes.push('today'); + + //highlight weekends + if (calendar[row][col].isoWeekday() > 5) + classes.push('weekend'); + + //grey out the dates in other months displayed at beginning and end of this calendar + if (calendar[row][col].month() != calendar[1][1].month()) + classes.push('off'); + + //don't allow selection of dates before the minimum date + if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of dates after the maximum date + if (maxDate && calendar[row][col].isAfter(maxDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of date if a custom function decides it's invalid + if (this.isInvalidDate(calendar[row][col])) + classes.push('off', 'disabled'); + + //highlight the currently selected start date + if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) + classes.push('active', 'start-date'); + + //highlight the currently selected end date + if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) + classes.push('active', 'end-date'); + + //highlight dates in-between the selected dates + if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate) + classes.push('in-range'); + + //apply custom classes for this date + var isCustom = this.isCustomDate(calendar[row][col]); + if (isCustom !== false) { + if (typeof isCustom === 'string') + classes.push(isCustom); + else + Array.prototype.push.apply(classes, isCustom); + } + + var cname = '', disabled = false; + for (var i = 0; i < classes.length; i++) { + cname += classes[i] + ' '; + if (classes[i] == 'disabled') + disabled = true; + } + if (!disabled) + cname += 'available'; + + html += ''; + + } + html += ''; + } + + html += ''; + html += '
' + dateHtml + '
' + this.locale.weekLabel + '' + dayOfWeek + '
' + calendar[row][0].week() + '' + calendar[row][0].isoWeek() + '' + calendar[row][col].date() + '
'; + + this.container.find('.calendar.' + side + ' .calendar-table').html(html); + + }, + + renderTimePicker: function(side) { + + // Don't bother updating the time picker if it's currently disabled + // because an end date hasn't been clicked yet + if (side == 'right' && !this.endDate) return; + + var html, selected, minDate, maxDate = this.maxDate; + + if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate))) + maxDate = this.startDate.clone().add(this.dateLimit); + + if (side == 'left') { + selected = this.startDate.clone(); + minDate = this.minDate; + } else if (side == 'right') { + selected = this.endDate.clone(); + minDate = this.startDate; + + //Preserve the time already selected + var timeSelector = this.container.find('.calendar.right .calendar-time div'); + if (!this.endDate && timeSelector.html() != '') { + + selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour()); + selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute()); + selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second()); + + if (!this.timePicker24Hour) { + var ampm = timeSelector.find('.ampmselect option:selected').val(); + if (ampm === 'PM' && selected.hour() < 12) + selected.hour(selected.hour() + 12); + if (ampm === 'AM' && selected.hour() === 12) + selected.hour(0); + } + + } + + if (selected.isBefore(this.startDate)) + selected = this.startDate.clone(); + + if (maxDate && selected.isAfter(maxDate)) + selected = maxDate.clone(); + + } + + // + // hours + // + + html = ' '; + + // + // minutes + // + + html += ': '; + + // + // seconds + // + + if (this.timePickerSeconds) { + html += ': '; + } + + // + // AM/PM + // + + if (!this.timePicker24Hour) { + html += ''; + } + + this.container.find('.calendar.' + side + ' .calendar-time div').html(html); + + }, + + updateFormInputs: function() { + + //ignore mouse movements while an above-calendar text input has focus + if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + return; + + this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format)); + if (this.endDate) + this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format)); + + if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) { + this.container.find('button.applyBtn').removeAttr('disabled'); + } else { + this.container.find('button.applyBtn').attr('disabled', 'disabled'); + } + + }, + + move: function() { + var parentOffset = { top: 0, left: 0 }, + containerTop; + var parentRightEdge = $(window).width(); + if (!this.parentEl.is('body')) { + parentOffset = { + top: this.parentEl.offset().top - this.parentEl.scrollTop(), + left: this.parentEl.offset().left - this.parentEl.scrollLeft() + }; + parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left; + } + + if (this.drops == 'up') + containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; + else + containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; + this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup'); + + if (this.opens == 'left') { + this.container.css({ + top: containerTop, + right: parentRightEdge - this.element.offset().left - this.element.outerWidth(), + left: 'auto' + }); + if (this.container.offset().left < 0) { + this.container.css({ + right: 'auto', + left: 9 + }); + } + } else if (this.opens == 'center') { + this.container.css({ + top: containerTop, + left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 + - this.container.outerWidth() / 2, + right: 'auto' + }); + if (this.container.offset().left < 0) { + this.container.css({ + right: 'auto', + left: 9 + }); + } + } else { + this.container.css({ + top: containerTop, + left: this.element.offset().left - parentOffset.left, + right: 'auto' + }); + if (this.container.offset().left + this.container.outerWidth() > $(window).width()) { + this.container.css({ + left: 'auto', + right: 0 + }); + } + } + }, + + show: function(e) { + if (this.isShowing) return; + + // Create a click proxy that is private to this instance of datepicker, for unbinding + this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this); + + // Bind global datepicker mousedown for hiding and + $(document) + .on('mousedown.daterangepicker', this._outsideClickProxy) + // also support mobile devices + .on('touchend.daterangepicker', this._outsideClickProxy) + // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them + .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy) + // and also close when focus changes to outside the picker (eg. tabbing between controls) + .on('focusin.daterangepicker', this._outsideClickProxy); + + // Reposition the picker if the window is resized while it's open + $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this)); + + this.oldStartDate = this.startDate.clone(); + this.oldEndDate = this.endDate.clone(); + this.previousRightTime = this.endDate.clone(); + + this.updateView(); + this.container.show(); + this.move(); + this.element.trigger('show.daterangepicker', this); + this.isShowing = true; + }, + + hide: function(e) { + if (!this.isShowing) return; + + //incomplete date selection, revert to last values + if (!this.endDate) { + this.startDate = this.oldStartDate.clone(); + this.endDate = this.oldEndDate.clone(); + } + + //if a new date range was selected, invoke the user callback function + if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate)) + this.callback(this.startDate, this.endDate, this.chosenLabel); + + //if picker is attached to a text input, update it + this.updateElement(); + + $(document).off('.daterangepicker'); + $(window).off('.daterangepicker'); + this.container.hide(); + this.element.trigger('hide.daterangepicker', this); + this.isShowing = false; + }, + + toggle: function(e) { + if (this.isShowing) { + this.hide(); + } else { + this.show(); + } + }, + + outsideClick: function(e) { + var target = $(e.target); + // if the page is clicked anywhere except within the daterangerpicker/button + // itself then call this.hide() + if ( + // ie modal dialog fix + e.type == "focusin" || + target.closest(this.element).length || + target.closest(this.container).length || + target.closest('.calendar-table').length + ) return; + this.hide(); + this.element.trigger('outsideClick.daterangepicker', this); + }, + + showCalendars: function() { + this.container.addClass('show-calendar'); + this.move(); + this.element.trigger('showCalendar.daterangepicker', this); + }, + + hideCalendars: function() { + this.container.removeClass('show-calendar'); + this.element.trigger('hideCalendar.daterangepicker', this); + }, + + hoverRange: function(e) { + + //ignore mouse movements while an above-calendar text input has focus + if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + return; + + var label = e.target.getAttribute('data-range-key'); + + if (label == this.locale.customRangeLabel) { + this.updateView(); + } else { + var dates = this.ranges[label]; + this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format)); + this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format)); + } + + }, + + clickRange: function(e) { + var label = e.target.getAttribute('data-range-key'); + this.chosenLabel = label; + if (label == this.locale.customRangeLabel) { + this.showCalendars(); + } else { + var dates = this.ranges[label]; + this.startDate = dates[0]; + this.endDate = dates[1]; + + if (!this.timePicker) { + this.startDate.startOf('day'); + this.endDate.endOf('day'); + } + + if (!this.alwaysShowCalendars) + this.hideCalendars(); + this.clickApply(); + } + }, + + clickPrev: function(e) { + var cal = $(e.target).parents('.calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.subtract(1, 'month'); + if (this.linkedCalendars) + this.rightCalendar.month.subtract(1, 'month'); + } else { + this.rightCalendar.month.subtract(1, 'month'); + } + this.updateCalendars(); + }, + + clickNext: function(e) { + var cal = $(e.target).parents('.calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.add(1, 'month'); + } else { + this.rightCalendar.month.add(1, 'month'); + if (this.linkedCalendars) + this.leftCalendar.month.add(1, 'month'); + } + this.updateCalendars(); + }, + + hoverDate: function(e) { + + //ignore mouse movements while an above-calendar text input has focus + //if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) + // return; + + //ignore dates that can't be selected + if (!$(e.target).hasClass('available')) return; + + //have the text inputs above calendars reflect the date being hovered over + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(":focus")) { + this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format)); + } else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(":focus")) { + this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format)); + } + + //highlight the dates between the start date and the date being hovered as a potential end date + var leftCalendar = this.leftCalendar; + var rightCalendar = this.rightCalendar; + var startDate = this.startDate; + if (!this.endDate) { + this.container.find('.calendar td').each(function(index, el) { + + //skip week numbers, only look at dates + if ($(el).hasClass('week')) return; + + var title = $(el).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(el).parents('.calendar'); + var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col]; + + if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) { + $(el).addClass('in-range'); + } else { + $(el).removeClass('in-range'); + } + + }); + } + + }, + + clickDate: function(e) { + + if (!$(e.target).hasClass('available')) return; + + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + // + // this function needs to do a few things: + // * alternate between selecting a start and end date for the range, + // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date + // * if autoapply is enabled, and an end date was chosen, apply the selection + // * if single date picker mode, and time picker isn't enabled, apply the selection immediately + // * if one of the inputs above the calendars was focused, cancel that manual input + // + + if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start + if (this.timePicker) { + var hour = parseInt(this.container.find('.left .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.endDate = null; + this.setStartDate(date.clone()); + } else if (!this.endDate && date.isBefore(this.startDate)) { + //special case: clicking the same date for start/end, + //but the time of the end date is before the start date + this.setEndDate(this.startDate.clone()); + } else { // picking end + if (this.timePicker) { + var hour = parseInt(this.container.find('.right .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.setEndDate(date.clone()); + if (this.autoApply) { + this.calculateChosenLabel(); + this.clickApply(); + } + } + + if (this.singleDatePicker) { + this.setEndDate(this.startDate); + if (!this.timePicker) + this.clickApply(); + } + + this.updateView(); + + //This is to cancel the blur event handler if the mouse was in one of the inputs + e.stopPropagation(); + + }, + + calculateChosenLabel: function() { + var customRange = true; + var i = 0; + for (var range in this.ranges) { + if (this.timePicker) { + if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); + break; + } + } else { + //ignore times when comparing dates if time picker is not enabled + if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); + break; + } + } + i++; + } + if (customRange && this.showCustomRangeLabel) { + this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html(); + this.showCalendars(); + } + }, + + clickApply: function(e) { + this.hide(); + this.element.trigger('apply.daterangepicker', this); + }, + + clickCancel: function(e) { + this.startDate = this.oldStartDate; + this.endDate = this.oldEndDate; + this.hide(); + this.element.trigger('cancel.daterangepicker', this); + }, + + monthOrYearChanged: function(e) { + var isLeft = $(e.target).closest('.calendar').hasClass('left'), + leftOrRight = isLeft ? 'left' : 'right', + cal = this.container.find('.calendar.'+leftOrRight); + + // Month must be Number for new moment versions + var month = parseInt(cal.find('.monthselect').val(), 10); + var year = cal.find('.yearselect').val(); + + if (!isLeft) { + if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) { + month = this.startDate.month(); + year = this.startDate.year(); + } + } + + if (this.minDate) { + if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) { + month = this.minDate.month(); + year = this.minDate.year(); + } + } + + if (this.maxDate) { + if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) { + month = this.maxDate.month(); + year = this.maxDate.year(); + } + } + + if (isLeft) { + this.leftCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month'); + } else { + this.rightCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month'); + } + this.updateCalendars(); + }, + + timeChanged: function(e) { + + var cal = $(e.target).closest('.calendar'), + isLeft = cal.hasClass('left'); + + var hour = parseInt(cal.find('.hourselect').val(), 10); + var minute = parseInt(cal.find('.minuteselect').val(), 10); + var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0; + + if (!this.timePicker24Hour) { + var ampm = cal.find('.ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + + if (isLeft) { + var start = this.startDate.clone(); + start.hour(hour); + start.minute(minute); + start.second(second); + this.setStartDate(start); + if (this.singleDatePicker) { + this.endDate = this.startDate.clone(); + } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) { + this.setEndDate(start.clone()); + } + } else if (this.endDate) { + var end = this.endDate.clone(); + end.hour(hour); + end.minute(minute); + end.second(second); + this.setEndDate(end); + } + + //update the calendars so all clickable dates reflect the new time component + this.updateCalendars(); + + //update the form inputs above the calendars with the new time + this.updateFormInputs(); + + //re-render the time pickers because changing one selection can affect what's enabled in another + this.renderTimePicker('left'); + this.renderTimePicker('right'); + + }, + + formInputsChanged: function(e) { + var isRight = $(e.target).closest('.calendar').hasClass('right'); + var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format); + var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format); + + if (start.isValid() && end.isValid()) { + + if (isRight && end.isBefore(start)) + start = end.clone(); + + this.setStartDate(start); + this.setEndDate(end); + + if (isRight) { + this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format)); + } else { + this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format)); + } + + } + + this.updateView(); + }, + + formInputsFocused: function(e) { + + // Highlight the focused input + this.container.find('input[name="daterangepicker_start"], input[name="daterangepicker_end"]').removeClass('active'); + $(e.target).addClass('active'); + + // Set the state such that if the user goes back to using a mouse, + // the calendars are aware we're selecting the end of the range, not + // the start. This allows someone to edit the end of a date range without + // re-selecting the beginning, by clicking on the end date input then + // using the calendar. + var isRight = $(e.target).closest('.calendar').hasClass('right'); + if (isRight) { + this.endDate = null; + this.setStartDate(this.startDate.clone()); + this.updateView(); + } + + }, + + formInputsBlurred: function(e) { + + // this function has one purpose right now: if you tab from the first + // text input to the second in the UI, the endDate is nulled so that + // you can click another, but if you tab out without clicking anything + // or changing the input value, the old endDate should be retained + + if (!this.endDate) { + var val = this.container.find('input[name="daterangepicker_end"]').val(); + var end = moment(val, this.locale.format); + if (end.isValid()) { + this.setEndDate(end); + this.updateView(); + } + } + + }, + + elementChanged: function() { + if (!this.element.is('input')) return; + if (!this.element.val().length) return; + if (this.element.val().length < this.locale.format.length) return; + + var dateString = this.element.val().split(this.locale.separator), + start = null, + end = null; + + if (dateString.length === 2) { + start = moment(dateString[0], this.locale.format); + end = moment(dateString[1], this.locale.format); + } + + if (this.singleDatePicker || start === null || end === null) { + start = moment(this.element.val(), this.locale.format); + end = start; + } + + if (!start.isValid() || !end.isValid()) return; + + this.setStartDate(start); + this.setEndDate(end); + this.updateView(); + }, + + keydown: function(e) { + //hide on tab or enter + if ((e.keyCode === 9) || (e.keyCode === 13)) { + this.hide(); + } + }, + + updateElement: function() { + if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + this.element.trigger('change'); + } else if (this.element.is('input') && this.autoUpdateInput) { + this.element.val(this.startDate.format(this.locale.format)); + this.element.trigger('change'); + } + }, + + remove: function() { + this.container.remove(); + this.element.off('.daterangepicker'); + this.element.removeData(); + } + + }; + + $.fn.daterangepicker = function(options, callback) { + this.each(function() { + var el = $(this); + if (el.data('daterangepicker')) + el.data('daterangepicker').remove(); + el.data('daterangepicker', new DateRangePicker(el, options, callback)); + }); + return this; + }; + + return DateRangePicker; + +})); +;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
'),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
  • '+k.join("
  • ")+"
"+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
No fields are checked to be edited
'):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".date-range-picker").daterangepicker(),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file diff --git a/app/assets/stylesheets/build.min.css b/app/assets/stylesheets/build.min.css index d9ea704..4734964 100644 --- a/app/assets/stylesheets/build.min.css +++ b/app/assets/stylesheets/build.min.css @@ -39,4 +39,4 @@ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. - */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px solid transparent;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker,.bootstrap-timepicker .dropdown-menu{width:100%}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--classic .select2-results>.select2-results__options,.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */.select2-container.form-control{background:0 0;box-shadow:none;border:none;display:block;margin:0;padding:0}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input,.select2-search input{border-color:#ccc;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input{background:0 0;padding:0;background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-search input{background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}.select2-container .select2-choice{height:34px;line-height:1.42857}.select2-container.select2-container-multi.form-control{height:auto}.input-group-sm .select2-container .select2-choice,.select2-container.input-sm .select2-choice{height:30px;line-height:1.5;border-radius:3px}.input-group-lg .select2-container .select2-choice,.select2-container.input-lg .select2-choice{height:46px;line-height:1.33333;border-radius:6px}.select2-container-multi .select2-choices .select2-search-field input{height:32px;margin:0}.input-group-sm .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-sm .select2-choices .select2-search-field input{height:28px}.input-group-lg .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-lg .select2-choices .select2-search-field input{height:44px}.select2-choice>span:first-child,.select2-chosen,.select2-container .select2-choices .select2-search-field input{padding:6px 12px}.input-group-sm .select2-choice>span:first-child,.input-group-sm .select2-choices .select2-search-field input,.input-group-sm .select2-chosen,.input-sm .select2-choice>span:first-child,.input-sm .select2-choices .select2-search-field input,.input-sm .select2-chosen{padding:5px 10px}.input-group-lg .select2-choice>span:first-child,.input-group-lg .select2-choices .select2-search-field input,.input-group-lg .select2-chosen,.input-lg .select2-choice>span:first-child,.input-lg .select2-choices .select2-search-field input,.input-lg .select2-chosen{padding:10px 16px}.select2-container-multi .select2-choices .select2-search-choice{margin-top:5px;margin-bottom:3px}.input-group-sm .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-sm .select2-choices .select2-search-choice{margin-top:3px;margin-bottom:2px}.input-group-lg .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-lg .select2-choices .select2-search-choice{line-height:24px}.select2-container .select2-choice .select2-arrow,.select2-container .select2-choice div{border-left:none;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-dropdown-open .select2-choice .select2-arrow,.select2-dropdown-open .select2-choice div{border-left-color:transparent;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice div b{background-position:0 3px}.select2-dropdown-open .select2-choice .select2-arrow b,.select2-dropdown-open .select2-choice div b{background-position:-18px 3px}.input-group-sm .select2-container .select2-choice .select2-arrow b,.input-group-sm .select2-container .select2-choice div b,.select2-container.input-sm .select2-choice .select2-arrow b,.select2-container.input-sm .select2-choice div b{background-position:0 1px}.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-sm .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,.select2-dropdown-open.input-sm .select2-choice div b{background-position:-18px 1px}.input-group-lg .select2-container .select2-choice .select2-arrow b,.input-group-lg .select2-container .select2-choice div b,.select2-container.input-lg .select2-choice .select2-arrow b,.select2-container.input-lg .select2-choice div b{background-position:0 9px}.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-lg .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,.select2-dropdown-open.input-lg .select2-choice div b{background-position:-18px 9px}.has-warning .select2-choice,.has-warning .select2-choices{border-color:#8a6d3b}.has-warning .select2-container-active .select2-choice,.has-warning .select2-container-multi.select2-container-active .select2-choices{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-choice,.has-error .select2-choices{border-color:#a94442}.has-error .select2-container-active .select2-choice,.has-error .select2-container-multi.select2-container-active .select2-choices{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-choice,.has-success .select2-choices{border-color:#3c763d}.has-success .select2-container-active .select2-choice,.has-success .select2-container-multi.select2-container-active .select2-choices{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.select2-container-active .select2-choice,.select2-container-multi.select2-container-active .select2-choices{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.select2-drop-active{border-color:#66afe9}.select2-drop-auto-width,.select2-drop.select2-drop-above.select2-drop-active{border-top-color:#66afe9}.input-group.select2-bootstrap-prepend [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.select2-dropdown-open [class^=select2-choice]{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-top-right-radius:0!important;border-top-left-radius:0!important;border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;background:#fff;filter:none}.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:6px!important}.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:6px!important}.select2-results .select2-highlighted{color:#fff;background-color:#337ab7}.select2-bootstrap-append .input-group-btn,.select2-bootstrap-append .input-group-btn .btn,.select2-bootstrap-append .select2-container-multiple,.select2-bootstrap-prepend .input-group-btn,.select2-bootstrap-prepend .input-group-btn .btn,.select2-bootstrap-prepend .select2-container-multiple{vertical-align:top}.select2-container-multi .select2-choices .select2-search-choice{color:#555;background:#fff;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:none;box-shadow:none}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#ebebeb;border-color:#adadad;color:#333;-webkit-box-shadow:none;box-shadow:none}.select2-search-choice-close{margin-top:-7px;top:50%}.select2-container .select2-choice abbr{top:50%}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background-color:#fcf8e3;color:#8a6d3b}.select2-container.select2-container-disabled .select2-choice,.select2-container.select2-container-disabled .select2-choices{cursor:not-allowed;background-color:#eee;border-color:#ccc}.select2-container.select2-container-disabled .select2-choice .select2-arrow,.select2-container.select2-container-disabled .select2-choice div,.select2-container.select2-container-disabled .select2-choices .select2-arrow,.select2-container.select2-container-disabled .select2-choices div{background-color:transparent;border-left:1px solid transparent}.select2-container-multi .select2-choices .select2-search-field input.select2-active,.select2-more-results.select2-active,.select2-search input.select2-active{background-position:99%;background-position:right 4px center}.select2-offscreen,.select2-offscreen:focus{width:1px!important;height:1px!important;position:absolute!important}.resource_action_checkbox{cursor:pointer}.pagination{margin:0}th.sorting{background:url(/images/sort_both.png) center right no-repeat}th.sorting.asc{background:url(/images/sort_asc.png) center right no-repeat}th.sorting.desc{background:url(/images/sort_desc.png) center right no-repeat}.media-body{padding-left:5px}.validation-text{font-weight:400;font-size:11px} \ No newline at end of file + */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px solid transparent;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker,.bootstrap-timepicker .dropdown-menu{width:100%}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--classic .select2-results>.select2-results__options,.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.daterangepicker.single .calendar,.daterangepicker.single .ranges,.ranges{float:none}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */.select2-container.form-control{background:0 0;box-shadow:none;border:none;display:block;margin:0;padding:0}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input,.select2-search input{border-color:#ccc;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input{background:0 0;padding:0;background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-search input{background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}.select2-container .select2-choice{height:34px;line-height:1.42857}.select2-container.select2-container-multi.form-control{height:auto}.input-group-sm .select2-container .select2-choice,.select2-container.input-sm .select2-choice{height:30px;line-height:1.5;border-radius:3px}.input-group-lg .select2-container .select2-choice,.select2-container.input-lg .select2-choice{height:46px;line-height:1.33333;border-radius:6px}.select2-container-multi .select2-choices .select2-search-field input{height:32px;margin:0}.input-group-sm .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-sm .select2-choices .select2-search-field input{height:28px}.input-group-lg .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-lg .select2-choices .select2-search-field input{height:44px}.select2-choice>span:first-child,.select2-chosen,.select2-container .select2-choices .select2-search-field input{padding:6px 12px}.input-group-sm .select2-choice>span:first-child,.input-group-sm .select2-choices .select2-search-field input,.input-group-sm .select2-chosen,.input-sm .select2-choice>span:first-child,.input-sm .select2-choices .select2-search-field input,.input-sm .select2-chosen{padding:5px 10px}.input-group-lg .select2-choice>span:first-child,.input-group-lg .select2-choices .select2-search-field input,.input-group-lg .select2-chosen,.input-lg .select2-choice>span:first-child,.input-lg .select2-choices .select2-search-field input,.input-lg .select2-chosen{padding:10px 16px}.select2-container-multi .select2-choices .select2-search-choice{margin-top:5px;margin-bottom:3px}.input-group-sm .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-sm .select2-choices .select2-search-choice{margin-top:3px;margin-bottom:2px}.input-group-lg .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-lg .select2-choices .select2-search-choice{line-height:24px}.select2-container .select2-choice .select2-arrow,.select2-container .select2-choice div{border-left:none;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-dropdown-open .select2-choice .select2-arrow,.select2-dropdown-open .select2-choice div{border-left-color:transparent;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice div b{background-position:0 3px}.select2-dropdown-open .select2-choice .select2-arrow b,.select2-dropdown-open .select2-choice div b{background-position:-18px 3px}.input-group-sm .select2-container .select2-choice .select2-arrow b,.input-group-sm .select2-container .select2-choice div b,.select2-container.input-sm .select2-choice .select2-arrow b,.select2-container.input-sm .select2-choice div b{background-position:0 1px}.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-sm .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,.select2-dropdown-open.input-sm .select2-choice div b{background-position:-18px 1px}.input-group-lg .select2-container .select2-choice .select2-arrow b,.input-group-lg .select2-container .select2-choice div b,.select2-container.input-lg .select2-choice .select2-arrow b,.select2-container.input-lg .select2-choice div b{background-position:0 9px}.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-lg .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,.select2-dropdown-open.input-lg .select2-choice div b{background-position:-18px 9px}.has-warning .select2-choice,.has-warning .select2-choices{border-color:#8a6d3b}.has-warning .select2-container-active .select2-choice,.has-warning .select2-container-multi.select2-container-active .select2-choices{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-choice,.has-error .select2-choices{border-color:#a94442}.has-error .select2-container-active .select2-choice,.has-error .select2-container-multi.select2-container-active .select2-choices{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-choice,.has-success .select2-choices{border-color:#3c763d}.has-success .select2-container-active .select2-choice,.has-success .select2-container-multi.select2-container-active .select2-choices{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.select2-container-active .select2-choice,.select2-container-multi.select2-container-active .select2-choices{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.select2-drop-active{border-color:#66afe9}.select2-drop-auto-width,.select2-drop.select2-drop-above.select2-drop-active{border-top-color:#66afe9}.input-group.select2-bootstrap-prepend [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.select2-dropdown-open [class^=select2-choice]{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-top-right-radius:0!important;border-top-left-radius:0!important;border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;background:#fff;filter:none}.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:6px!important}.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:6px!important}.select2-results .select2-highlighted{color:#fff;background-color:#337ab7}.select2-bootstrap-append .input-group-btn,.select2-bootstrap-append .input-group-btn .btn,.select2-bootstrap-append .select2-container-multiple,.select2-bootstrap-prepend .input-group-btn,.select2-bootstrap-prepend .input-group-btn .btn,.select2-bootstrap-prepend .select2-container-multiple{vertical-align:top}.select2-container-multi .select2-choices .select2-search-choice{color:#555;background:#fff;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:none;box-shadow:none}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#ebebeb;border-color:#adadad;color:#333;-webkit-box-shadow:none;box-shadow:none}.select2-search-choice-close{margin-top:-7px;top:50%}.select2-container .select2-choice abbr{top:50%}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background-color:#fcf8e3;color:#8a6d3b}.select2-container.select2-container-disabled .select2-choice,.select2-container.select2-container-disabled .select2-choices{cursor:not-allowed;background-color:#eee;border-color:#ccc}.select2-container.select2-container-disabled .select2-choice .select2-arrow,.select2-container.select2-container-disabled .select2-choice div,.select2-container.select2-container-disabled .select2-choices .select2-arrow,.select2-container.select2-container-disabled .select2-choices div{background-color:transparent;border-left:1px solid transparent}.select2-container-multi .select2-choices .select2-search-field input.select2-active,.select2-more-results.select2-active,.select2-search input.select2-active{background-position:99%;background-position:right 4px center}.select2-offscreen,.select2-offscreen:focus{width:1px!important;height:1px!important;position:absolute!important}.daterangepicker{position:absolute;color:inherit;background:#fff;border-radius:4px;width:278px;padding:4px;margin-top:1px;top:100px;left:20px}.daterangepicker:after,.daterangepicker:before{position:absolute;display:inline-block;content:''}.daterangepicker:before{top:-7px;border-right:7px solid transparent;border-left:7px solid transparent;border-bottom:7px solid #ccc}.daterangepicker:after{top:-6px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.daterangepicker.opensleft:before{right:9px}.daterangepicker.opensleft:after{right:10px}.daterangepicker.openscenter:after,.daterangepicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.daterangepicker.opensright:before{left:9px}.daterangepicker.opensright:after{left:10px}.daterangepicker.dropup{margin-top:-5px}.daterangepicker.dropup:before{top:initial;bottom:-7px;border-bottom:initial;border-top:7px solid #ccc}.daterangepicker.dropup:after{top:initial;bottom:-6px;border-bottom:initial;border-top:6px solid #fff}.daterangepicker.dropdown-menu{max-width:none;z-index:3001}.daterangepicker.show-calendar .calendar{display:block}.daterangepicker .calendar{display:none;max-width:270px;margin:4px}.daterangepicker .calendar.single .calendar-table{border:none}.daterangepicker .calendar td,.daterangepicker .calendar th{white-space:nowrap;text-align:center;min-width:32px}.daterangepicker .calendar-table{border:1px solid #fff;padding:4px;border-radius:4px;background:#fff}.daterangepicker table{width:100%;margin:0}.daterangepicker td,.daterangepicker th{text-align:center;width:20px;height:20px;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer}.daterangepicker td.available:hover,.daterangepicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit}.daterangepicker td.week,.daterangepicker th.week{font-size:80%;color:#ccc}.daterangepicker td.off,.daterangepicker td.off.end-date,.daterangepicker td.off.in-range,.daterangepicker td.off.start-date{background-color:#fff;border-color:transparent;color:#999}.daterangepicker td.in-range{background-color:#ebf4f8;border-color:transparent;color:#000;border-radius:0}.daterangepicker td.start-date{border-radius:4px 0 0 4px}.daterangepicker td.end-date{border-radius:0 4px 4px 0}.daterangepicker td.start-date.end-date{border-radius:4px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#357ebd;border-color:transparent;color:#fff}.daterangepicker th.month{width:auto}.daterangepicker option.disabled,.daterangepicker td.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.daterangepicker select.monthselect,.daterangepicker select.yearselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default}.daterangepicker select.monthselect{margin-right:2%;width:56%}.daterangepicker select.yearselect{width:40%}.daterangepicker select.ampmselect,.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect{width:50px;margin-bottom:0}.daterangepicker .input-mini{border:1px solid #ccc;border-radius:4px;color:#555;height:30px;line-height:30px;display:block;vertical-align:middle;margin:0 0 5px;padding:0 6px 0 28px;width:100%}.daterangepicker .input-mini.active{border:1px solid #08c;border-radius:4px}.daterangepicker .daterangepicker_input{position:relative}.daterangepicker .daterangepicker_input i{position:absolute;left:8px;top:8px}.daterangepicker.rtl .input-mini{padding-right:28px;padding-left:6px}.daterangepicker.rtl .daterangepicker_input i{left:auto;right:8px}.daterangepicker .calendar-time{text-align:center;margin:5px auto;line-height:30px;position:relative;padding-left:28px}.daterangepicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.ranges li,.resource_action_checkbox{cursor:pointer}.ranges{font-size:11px;margin:4px;text-align:left}.ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.ranges li{font-size:13px;background:#f5f5f5;border:1px solid #f5f5f5;border-radius:4px;color:#08c;padding:3px 12px;margin-bottom:8px}.ranges li.active,.ranges li:hover{background:#08c;border:1px solid #08c;color:#fff}@media (min-width:564px){.daterangepicker.ltr .calendar.right .calendar-table,.daterangepicker.rtl .calendar.left .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.rtl .calendar.right .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.daterangepicker{width:auto}.daterangepicker .ranges ul{width:160px}.daterangepicker.single .ranges ul{width:100%}.daterangepicker.single .calendar.left{clear:none}.daterangepicker.single.ltr .calendar,.daterangepicker.single.ltr .ranges{float:left}.daterangepicker.single.rtl .calendar,.daterangepicker.single.rtl .ranges{float:right}.daterangepicker.ltr{direction:ltr;text-align:left}.daterangepicker.ltr .calendar.left{clear:left;margin-right:0}.daterangepicker.ltr .calendar.right{margin-left:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.ltr .left .daterangepicker_input{padding-right:12px}.daterangepicker.ltr .calendar,.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl{direction:rtl;text-align:right}.daterangepicker.rtl .calendar.left{clear:right;margin-left:0}.daterangepicker.rtl .calendar.right{margin-right:0}.daterangepicker.rtl .calendar.left .calendar-table,.daterangepicker.rtl .left .daterangepicker_input{padding-left:12px}.daterangepicker.rtl .calendar,.daterangepicker.rtl .ranges{text-align:right;float:right}}@media (min-width:730px){.daterangepicker .ranges{width:auto}.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl .ranges{float:right}.daterangepicker .calendar.left{clear:none!important}}.pagination{margin:0}th.sorting{background:url(/images/sort_both.png) center right no-repeat}th.sorting.asc{background:url(/images/sort_asc.png) center right no-repeat}th.sorting.desc{background:url(/images/sort_desc.png) center right no-repeat}.media-body{padding-left:5px}.validation-text{font-weight:400;font-size:11px} \ No newline at end of file diff --git a/app/models/log_audit.js b/app/models/log_audit.js index b8e02cd..abfcf8a 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -51,7 +51,7 @@ class LogAuditModel extends BaseModel { * * @type {Array} */ - this.customFilters = ['dataRange']; + this.customFilters = ['dateRange']; } /** @@ -198,6 +198,9 @@ class LogAuditModel extends BaseModel { console.log(customFilters); console.log('---'); + // [ { filterName: 'dateRange', filterValue: '123123-1231' } ] + + return mongoFilters; } } diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 904dae1..f9f8ad1 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -26,6 +26,9 @@ {% include './partials/search-by-resource-id.swig' %} {{ auditLoggingSearchByResourceId() }} + {% include './partials/search-by-date-range.swig' %} + {{ auditLoggingSearchByDateRange() }} + {{ search_buttons() }}
diff --git a/app/views/admin/log_audit/partials/search-by-date-range.swig b/app/views/admin/log_audit/partials/search-by-date-range.swig new file mode 100644 index 0000000..047330a --- /dev/null +++ b/app/views/admin/log_audit/partials/search-by-date-range.swig @@ -0,0 +1,13 @@ +{% macro auditLoggingSearchByDateRange() %} + + {% set filterName = 'dateRange' %} + +
+ + {% set filterData = filters.customFilters | find({filterName: filterName}) %} + + +
+{% endmacro %} diff --git a/resources/bower.json b/resources/bower.json index 01c8988..0f34130 100644 --- a/resources/bower.json +++ b/resources/bower.json @@ -26,6 +26,7 @@ "jquery": "~2.1.4", "bootstrap-datepicker": "~1.4.1", "jquery-ui": "~1.11.4", - "ckeditor": "~4.5.4" + "ckeditor": "~4.5.4", + "bootstrap-daterangepicker": "2.1.24" } } diff --git a/resources/javascripts/custom.js b/resources/javascripts/custom.js index ff2e270..1c3096e 100644 --- a/resources/javascripts/custom.js +++ b/resources/javascripts/custom.js @@ -531,6 +531,7 @@ $(document).ready(function () { $(document).ready(function () { $('.user-roles-select').select2(); $('.select2').select2(); + $('.date-range-picker').daterangepicker(); $('.admin-ui-select2-autocomplete').each(function () { From 2ea50679f1745278d5c2a945a978fbc9d9b8eadf Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:09:09 +0300 Subject: [PATCH 14/28] Added momentJS --- Gruntfile.js | 1 + app/assets/javascripts/build.min.js | 4235 ++++++++++++++++++++++++++- resources/bower.json | 3 +- 3 files changed, 4237 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index a52f590..21df9e2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,6 +27,7 @@ module.exports = function (grunt) { './resources/javascripts/chain/bootstrap.min.js', './resources/javascripts/chain/modernizr.min.js', './resources/javascripts/chain/pace.min.js', + './resources/bower_components/moment/moment.js', './resources/javascripts/chain/retina.min.js', './resources/javascripts/chain/select2.full.min.js', './resources/javascripts/chain/jquery.cookies.js', diff --git a/app/assets/javascripts/build.min.js b/app/assets/javascripts/build.min.js index 886b57f..8f3e914 100644 --- a/app/assets/javascripts/build.min.js +++ b/app/assets/javascripts/build.min.js @@ -18,7 +18,4240 @@ if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires j * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexboxlegacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load */ ;window.Modernizr=function(a,b,c){function C(a){j.cssText=a}function D(a,b){return C(n.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a){var e=a[d];if(!F(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),H(e,b,c))}function J(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return I("flexWrap")},s.flexboxlegacy=function(){return I("boxDirection")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!I("indexedDB",a)},s.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return C("background-color:rgba(150,255,150,.5)"),F(j.backgroundColor,"rgba")},s.hsla=function(){return C("background-color:hsla(120,40%,100%,.5)"),F(j.backgroundColor,"rgba")||F(j.backgroundColor,"hsla")},s.multiplebgs=function(){return C("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return I("backgroundSize")},s.borderimage=function(){return I("borderImage")},s.borderradius=function(){return I("borderRadius")},s.boxshadow=function(){return I("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return D("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return I("animationName")},s.csscolumns=function(){return I("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return C((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),F(j.backgroundImage,"gradient")},s.cssreflections=function(){return I("boxReflect")},s.csstransforms=function(){return!!I("transform")},s.csstransforms3d=function(){var a=!!I("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return I("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var K in s)B(s,K)&&(x=K.toLowerCase(),e[x]=s[K](),v.push((e[x]?"":"no-")+x));return e.input||J(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)B(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},C(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=z,e.testProp=function(a){return G([a])},e.testAllProps=I,e.testStyles=y,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;fb;b++)if(b in this&&this[b]===a)return b;return-1};for(t={catchupTime:500,initialRate:.03,minTime:500,ghostTime:500,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},B=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},D=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,s=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==D&&(D=function(a){return setTimeout(a,50)},s=function(a){return clearTimeout(a)}),F=function(a){var b,c;return b=B(),(c=function(){var d;return d=B()-b,d>=33?(b=B(),a(d,function(){return D(c)})):setTimeout(c,33-d)})()},E=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?W.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},u=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?W.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)X.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?u(b[a],e):b[a]=e);return b},p=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},w=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cP;P++)J=T[P],C[J]===!0&&(C[J]=t[J]);i=function(a){function b(){return U=b.__super__.constructor.apply(this,arguments)}return Y(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(C.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
\n
\n
\n
',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(C.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),O=window.XMLHttpRequest,N=window.XDomainRequest,M=window.WebSocket,v=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],f.push(null==a[d]&&"function"!=typeof e?a[d]=e:void 0)}catch(g){c=g}return f},z=[],Pace.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("ignore"),c=b.apply(null,a),z.shift(),c},Pace.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("track"),c=b.apply(null,a),z.shift(),c},I=function(a){var b;if(null==a&&(a="GET"),"track"===z[0])return"force";if(!z.length&&C.ajax){if("socket"===a&&C.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),Z.call(C.ajax.trackMethods,b)>=0)return!0}return!1},j=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return I(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new O(b),a(c),c},v(window.XMLHttpRequest,O),null!=N&&(window.XDomainRequest=function(){var b;return b=new N,a(b),b},v(window.XDomainRequest,N)),null!=M&&C.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=null!=b?new M(a,b):new M(a),I("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},v(window.WebSocket,M))}return Y(b,a),b}(h),Q=null,x=function(){return null==Q&&(Q=new j),Q},H=function(a){var b,c,d,e;for(e=C.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},x().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,H(g)?void 0:Pace.running||C.restartOnRequestAfter===!1&&"force"!==I(f)?void 0:(d=arguments,c=C.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,j;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(Pace.restart(),i=Pace.sources,j=[],c=0,g=i.length;g>c;c++){if(J=i[c],J instanceof a){J.watch.apply(J,d);break}j.push(void 0)}return j}},c))}),a=function(){function a(){var a=this;this.elements=[],x().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,H(e)?void 0:(c="socket"===d?new m(b):new n(b),this.elements.push(c))},a}(),n=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),m=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},C.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=B(),b=setInterval(function(){var g;return g=B()-c-50,c=B(),e.push(g),e.length>C.eventLag.sampleCount&&e.shift(),a=p(e),++d>=C.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/C.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,C.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+C.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),K=null,G=null,q=null,L=null,o=null,r=null,Pace.running=!1,y=function(){return C.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(S=window.history.pushState,window.history.pushState=function(){return y(),S.apply(window.history,arguments)}),null!=window.history.replaceState&&(V=window.history.replaceState,window.history.replaceState=function(){return y(),V.apply(window.history,arguments)}),k={ajax:a,elements:d,document:c,eventLag:f},(A=function(){var a,c,d,e,f,g,h,i;for(Pace.sources=K=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],C[a]!==!1&&K.push(new k[a](C[a]));for(i=null!=(h=C.extraSources)?h:[],d=0,f=i.length;f>d;d++)J=i[d],K.push(new J(C));return Pace.bar=q=new b,G=[],L=new l})(),Pace.stop=function(){return Pace.trigger("stop"),Pace.running=!1,q.destroy(),r=!0,null!=o&&("function"==typeof s&&s(o),o=null),A()},Pace.restart=function(){return Pace.trigger("restart"),Pace.stop(),Pace.start()},Pace.go=function(){var a;return Pace.running=!0,q.render(),a=B(),r=!1,o=F(function(b,c){var d,e,f,g,h,i,j,k,m,n,o,p,s,t,u,v;for(k=100-q.progress,e=o=0,f=!0,i=p=0,t=K.length;t>p;i=++p)for(J=K[i],n=null!=G[i]?G[i]:G[i]=[],h=null!=(v=J.elements)?v:[J],j=s=0,u=h.length;u>s;j=++s)g=h[j],m=null!=n[j]?n[j]:n[j]=new l(g),f&=m.done,m.done||(e++,o+=m.tick(b));return d=o/e,q.update(L.tick(b,d)),q.done()||f||r?(q.update(100),Pace.trigger("done"),setTimeout(function(){return q.finish(),Pace.running=!1,Pace.trigger("hide")},Math.max(C.ghostTime,Math.max(C.minTime-(B()-a),0)))):c()})},Pace.start=function(a){u(C,a),Pace.running=!0;try{q.render()}catch(b){i=b}return document.querySelector(".pace")?(Pace.trigger("start"),Pace.go()):setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:C.startOnPageLoad&&Pace.start()}).call(this);;(function(){function n(){}function r(e,t){this.path=e;if(typeof t!=="undefined"&&t!==null){this.at_2x_path=t;this.perform_check=false}else{this.at_2x_path=e.replace(/\.\w+$/,function(e){return"@2x"+e});this.perform_check=true}}function i(e){this.el=e;this.path=new r(this.el.getAttribute("src"),this.el.getAttribute("data-at2x"));var t=this;this.path.check_2x_variant(function(e){if(e)t.swap()})}var e=typeof exports=="undefined"?window:exports;var t={check_mime_type:true};e.Retina=n;n.configure=function(e){if(e==null)e={};for(var n in e)t[n]=e[n]};n.init=function(t){if(t==null)t=e;var n=t.onload||new Function;t.onload=function(){var e=document.getElementsByTagName("img"),t=[],r,s;for(r=0;r1)return true;if(e.matchMedia&&e.matchMedia(t).matches)return true;return false};e.RetinaImagePath=r;r.confirmed_paths=[];r.prototype.is_external=function(){return!!(this.path.match(/^https?\:/i)&&!this.path.match("//"+document.domain))};r.prototype.check_2x_variant=function(e){var n,i=this;if(this.is_external()){return e(false)}else if(!this.perform_check&&typeof this.at_2x_path!=="undefined"&&this.at_2x_path!==null){return e(true)}else if(this.at_2x_path in r.confirmed_paths){return e(true)}else{n=new XMLHttpRequest;n.open("HEAD",this.at_2x_path);n.onreadystatechange=function(){if(n.readyState!=4){return e(false)}if(n.status>=200&&n.status<=399){if(t.check_mime_type){var s=n.getResponseHeader("Content-Type");if(s==null||!s.match(/^image/i)){return e(false)}}r.confirmed_paths.push(i.at_2x_path);return e(true)}else{return e(false)}};n.send()}};e.RetinaImage=i;i.prototype.swap=function(e){function n(){if(!t.el.complete){setTimeout(n,5)}else{t.el.setAttribute("width",t.el.offsetWidth);t.el.setAttribute("height",t.el.offsetHeight);t.el.setAttribute("src",e)}}if(typeof e=="undefined")e=this.path.at_2x_path;var t=this;n()};if(n.isRetina()){n.init(e)}})();/*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
    ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
  • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-d.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
      '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
    • ×
    • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}}),this.$selection.on("input.searchcheck",".select2-search--inline",function(a){var b=document.documentMode;return b&&11>=b?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open",{}),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;fb;b++)if(b in this&&this[b]===a)return b;return-1};for(t={catchupTime:500,initialRate:.03,minTime:500,ghostTime:500,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},B=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},D=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,s=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==D&&(D=function(a){return setTimeout(a,50)},s=function(a){return clearTimeout(a)}),F=function(a){var b,c;return b=B(),(c=function(){var d;return d=B()-b,d>=33?(b=B(),a(d,function(){return D(c)})):setTimeout(c,33-d)})()},E=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?W.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},u=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?W.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)X.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?u(b[a],e):b[a]=e);return b},p=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},w=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cP;P++)J=T[P],C[J]===!0&&(C[J]=t[J]);i=function(a){function b(){return U=b.__super__.constructor.apply(this,arguments)}return Y(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(C.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
      \n
      \n
      \n
      ',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(C.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),O=window.XMLHttpRequest,N=window.XDomainRequest,M=window.WebSocket,v=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],f.push(null==a[d]&&"function"!=typeof e?a[d]=e:void 0)}catch(g){c=g}return f},z=[],Pace.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("ignore"),c=b.apply(null,a),z.shift(),c},Pace.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("track"),c=b.apply(null,a),z.shift(),c},I=function(a){var b;if(null==a&&(a="GET"),"track"===z[0])return"force";if(!z.length&&C.ajax){if("socket"===a&&C.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),Z.call(C.ajax.trackMethods,b)>=0)return!0}return!1},j=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return I(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new O(b),a(c),c},v(window.XMLHttpRequest,O),null!=N&&(window.XDomainRequest=function(){var b;return b=new N,a(b),b},v(window.XDomainRequest,N)),null!=M&&C.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=null!=b?new M(a,b):new M(a),I("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},v(window.WebSocket,M))}return Y(b,a),b}(h),Q=null,x=function(){return null==Q&&(Q=new j),Q},H=function(a){var b,c,d,e;for(e=C.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},x().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,H(g)?void 0:Pace.running||C.restartOnRequestAfter===!1&&"force"!==I(f)?void 0:(d=arguments,c=C.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,j;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(Pace.restart(),i=Pace.sources,j=[],c=0,g=i.length;g>c;c++){if(J=i[c],J instanceof a){J.watch.apply(J,d);break}j.push(void 0)}return j}},c))}),a=function(){function a(){var a=this;this.elements=[],x().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,H(e)?void 0:(c="socket"===d?new m(b):new n(b),this.elements.push(c))},a}(),n=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),m=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},C.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=B(),b=setInterval(function(){var g;return g=B()-c-50,c=B(),e.push(g),e.length>C.eventLag.sampleCount&&e.shift(),a=p(e),++d>=C.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/C.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,C.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+C.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),K=null,G=null,q=null,L=null,o=null,r=null,Pace.running=!1,y=function(){return C.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(S=window.history.pushState,window.history.pushState=function(){return y(),S.apply(window.history,arguments)}),null!=window.history.replaceState&&(V=window.history.replaceState,window.history.replaceState=function(){return y(),V.apply(window.history,arguments)}),k={ajax:a,elements:d,document:c,eventLag:f},(A=function(){var a,c,d,e,f,g,h,i;for(Pace.sources=K=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],C[a]!==!1&&K.push(new k[a](C[a]));for(i=null!=(h=C.extraSources)?h:[],d=0,f=i.length;f>d;d++)J=i[d],K.push(new J(C));return Pace.bar=q=new b,G=[],L=new l})(),Pace.stop=function(){return Pace.trigger("stop"),Pace.running=!1,q.destroy(),r=!0,null!=o&&("function"==typeof s&&s(o),o=null),A()},Pace.restart=function(){return Pace.trigger("restart"),Pace.stop(),Pace.start()},Pace.go=function(){var a;return Pace.running=!0,q.render(),a=B(),r=!1,o=F(function(b,c){var d,e,f,g,h,i,j,k,m,n,o,p,s,t,u,v;for(k=100-q.progress,e=o=0,f=!0,i=p=0,t=K.length;t>p;i=++p)for(J=K[i],n=null!=G[i]?G[i]:G[i]=[],h=null!=(v=J.elements)?v:[J],j=s=0,u=h.length;u>s;j=++s)g=h[j],m=null!=n[j]?n[j]:n[j]=new l(g),f&=m.done,m.done||(e++,o+=m.tick(b));return d=o/e,q.update(L.tick(b,d)),q.done()||f||r?(q.update(100),Pace.trigger("done"),setTimeout(function(){return q.finish(),Pace.running=!1,Pace.trigger("hide")},Math.max(C.ghostTime,Math.max(C.minTime-(B()-a),0)))):c()})},Pace.start=function(a){u(C,a),Pace.running=!0;try{q.render()}catch(b){i=b}return document.querySelector(".pace")?(Pace.trigger("start"),Pace.go()):setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:C.startOnPageLoad&&Pace.start()}).call(this);;//! moment.js +//! version : 2.15.2 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, function () { 'use strict'; + + var hookCallback; + + function utils_hooks__hooks () { + return hookCallback.apply(null, arguments); + } + + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback (callback) { + hookCallback = callback; + } + + function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; + } + + function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; + } + + function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; + } + + function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; + } + + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function create_utc__createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } + + var some; + if (Array.prototype.some) { + some = Array.prototype.some; + } else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function valid__isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; + } + + function valid__createInvalid (flags) { + var m = create_utc__createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + function isUndefined(input) { + return input === void 0; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = utils_hooks__hooks.momentProperties = []; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + var updateInProgress = false; + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + utils_hooks__hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); + } + + function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function warn(msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (utils_hooks__hooks.deprecationHandler != null) { + utils_hooks__hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (utils_hooks__hooks.deprecationHandler != null) { + utils_hooks__hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + utils_hooks__hooks.suppressDeprecationWarnings = false; + utils_hooks__hooks.deprecationHandler = null; + + function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; + } + + function locale_set__set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }; + + function locale_calendar__calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }; + + function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate () { + return this._invalidDate; + } + + var defaultOrdinal = '%d'; + var defaultOrdinalParse = /\d{1,2}/; + + function ordinal (number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }; + + function relative__relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + } + + function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + get_set__set(this, unit, value); + utils_hooks__hooks.updateOffset(this, keepTime); + return this; + } else { + return get_set__get(this, unit); + } + }; + } + + function get_set__get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; + } + + function get_set__set (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + + // MOMENTS + + function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + + function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + + var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + + var formatFunctions = {}; + + var formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var match1 = /\d/; // 0 - 9 + var match2 = /\d\d/; // 00 - 99 + var match3 = /\d{3}/; // 000 - 999 + var match4 = /\d{4}/; // 0000 - 9999 + var match6 = /[+-]?\d{6}/; // -999999 - 999999 + var match1to2 = /\d\d?/; // 0 - 99 + var match3to4 = /\d\d\d\d?/; // 999 - 9999 + var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 + var match1to3 = /\d{1,3}/; // 0 - 999 + var match1to4 = /\d{1,4}/; // 0 - 9999 + var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + + var matchUnsigned = /\d+/; // 0 - inf + var matchSigned = /[+-]?\d+/; // -inf - inf + + var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z + var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + + var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + + var regexes = {}; + + function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; + } + + function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (typeof callback === 'number') { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0; + var MONTH = 1; + var DATE = 2; + var HOUR = 3; + var MINUTE = 4; + var SECOND = 5; + var MILLISECOND = 6; + var WEEK = 7; + var WEEKDAY = 8; + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); + function localeMonths (m, format) { + if (!m) { + return this._months; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; + } + + var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); + function localeMonthsShort (m, format) { + if (!m) { + return this._monthsShort; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; + } + + function units_month__handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = create_utc__createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return units_month__handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + utils_hooks__hooks.updateOffset(this, true); + return this; + } else { + return get_set__get(this, 'Month'); + } + } + + function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); + } + + var defaultMonthsShortRegex = matchWord; + function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } + } + + var defaultMonthsRegex = matchWord; + function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } + } + + function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + // HOOKS + + utils_hooks__hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear () { + return isLeapYear(this.year()); + } + + function createDate (y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; + } + + function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + //the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }; + + function localeFirstDayOfWeek () { + return this._week.dow; + } + + function localeFirstDayOfYear () { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); + function localeWeekdays (m, format) { + if (!m) { + return this._weekdays; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; + } + + var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); + function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; + } + + var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); + function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; + } + + function day_of_week__handleStrictParse(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = create_utc__createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return day_of_week__handleStrictParse.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = create_utc__createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + var defaultWeekdaysRegex = matchWord; + function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } + } + + var defaultWeekdaysShortRegex = matchWord; + function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } + } + + var defaultWeekdaysMinRegex = matchWord; + function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } + } + + + function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); + }); + + function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; + function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + + // MOMENTS + + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + var getSetHour = makeGetSet('Hours', true); + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + ordinalParse: defaultOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse + }; + + // internal storage for locale config files + var locales = {}; + var globalLocale; + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + locale_locales__getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function locale_locales__getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = locale_locales__getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; + } + + function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + // treat as if there is no base config + deprecateSimple('parentLocaleUndefined', + 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/'); + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function locale_locales__getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function locale_locales__listLocales() { + return keys(locales); + } + + function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; + var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; + + var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + + var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] + ]; + + // iso time formats and regexes + var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] + ]; + + var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + + // date from iso format + function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + utils_hooks__hooks.createFromInputFallback(config); + } + } + + utils_hooks__hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(utils_hooks__hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); + week = defaults(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + utils_hooks__hooks.ISO_8601 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === utils_hooks__hooks.ISO_8601) { + configFromISO(config); + return; + } + + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); + } + + + function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!valid__isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); + } + + function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || locale_locales__getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return valid__createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (isDate(input)) { + config._d = input; + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!valid__isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(utils_hooks__hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof(input) === 'object') { + configFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + utils_hooks__hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function local__createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = local__createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return valid__createInvalid(); + } + } + ); + + var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = local__createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return valid__createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return local__createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +(new Date()); + }; + + function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = locale_locales__getLocale(); + + this._bubble(); + } + + function isDuration (obj) { + return obj instanceof Duration; + } + + function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // FORMATTING + + function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = ((string || '').match(matcher) || []); + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + utils_hooks__hooks.updateOffset(res, false); + return res; + } else { + return local__createLocal(input).local(); + } + } + + function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + utils_hooks__hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + } else if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + utils_hooks__hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset () { + if (this._tzm) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + + if (tZone === 0) { + this.utcOffset(0, true); + } else { + this.utcOffset(offsetFromString(matchOffset, this._i)); + } + } + return this; + } + + function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? local__createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal () { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset () { + return this.isValid() ? this._isUTC : false; + } + + function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + + function create__createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; + } + + create__createDuration.fn = Duration.prototype; + + function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = create__createDuration(val, period); + add_subtract__addSubtract(this, dur, direction); + return this; + }; + } + + function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + utils_hooks__hooks.updateOffset(mom, days || months); + } + } + + var add_subtract__add = createAdder(1, 'add'); + var add_subtract__subtract = createAdder(-1, 'subtract'); + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + } + + function moment_calendar__calendar (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || local__createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); + } + + function clone () { + return new Moment(this); + } + + function isAfter (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); + } + + function isSame (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } + } + + function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); + } + + function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); + } + + function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); + } + + function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function moment_format__toISOString () { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } + + function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + local__createLocal(time).isValid())) { + return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow (withoutSuffix) { + return this.from(local__createLocal(), withoutSuffix); + } + + function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + local__createLocal(time).isValid())) { + return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow (withoutSuffix) { + return this.to(local__createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = locale_locales__getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData () { + return this._locale; + } + + function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + } + + function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + } + + function to_type__valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); + } + + function unix () { + return Math.floor(this.valueOf() / 1000); + } + + function toDate () { + return new Date(this.valueOf()); + } + + function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; + } + + function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; + } + + function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function moment_valid__isValid () { + return valid__isValid(this); + } + + function parsingFlags () { + return extend({}, getParsingFlags(this)); + } + + function invalidAt () { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); + } + + function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); + } + + function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); + } + + function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIOROITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + // MOMENTS + + var getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var momentPrototype__proto = Moment.prototype; + + momentPrototype__proto.add = add_subtract__add; + momentPrototype__proto.calendar = moment_calendar__calendar; + momentPrototype__proto.clone = clone; + momentPrototype__proto.diff = diff; + momentPrototype__proto.endOf = endOf; + momentPrototype__proto.format = format; + momentPrototype__proto.from = from; + momentPrototype__proto.fromNow = fromNow; + momentPrototype__proto.to = to; + momentPrototype__proto.toNow = toNow; + momentPrototype__proto.get = stringGet; + momentPrototype__proto.invalidAt = invalidAt; + momentPrototype__proto.isAfter = isAfter; + momentPrototype__proto.isBefore = isBefore; + momentPrototype__proto.isBetween = isBetween; + momentPrototype__proto.isSame = isSame; + momentPrototype__proto.isSameOrAfter = isSameOrAfter; + momentPrototype__proto.isSameOrBefore = isSameOrBefore; + momentPrototype__proto.isValid = moment_valid__isValid; + momentPrototype__proto.lang = lang; + momentPrototype__proto.locale = locale; + momentPrototype__proto.localeData = localeData; + momentPrototype__proto.max = prototypeMax; + momentPrototype__proto.min = prototypeMin; + momentPrototype__proto.parsingFlags = parsingFlags; + momentPrototype__proto.set = stringSet; + momentPrototype__proto.startOf = startOf; + momentPrototype__proto.subtract = add_subtract__subtract; + momentPrototype__proto.toArray = toArray; + momentPrototype__proto.toObject = toObject; + momentPrototype__proto.toDate = toDate; + momentPrototype__proto.toISOString = moment_format__toISOString; + momentPrototype__proto.toJSON = toJSON; + momentPrototype__proto.toString = toString; + momentPrototype__proto.unix = unix; + momentPrototype__proto.valueOf = to_type__valueOf; + momentPrototype__proto.creationData = creationData; + + // Year + momentPrototype__proto.year = getSetYear; + momentPrototype__proto.isLeapYear = getIsLeapYear; + + // Week Year + momentPrototype__proto.weekYear = getSetWeekYear; + momentPrototype__proto.isoWeekYear = getSetISOWeekYear; + + // Quarter + momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; + + // Month + momentPrototype__proto.month = getSetMonth; + momentPrototype__proto.daysInMonth = getDaysInMonth; + + // Week + momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; + momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; + momentPrototype__proto.weeksInYear = getWeeksInYear; + momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; + + // Day + momentPrototype__proto.date = getSetDayOfMonth; + momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; + momentPrototype__proto.weekday = getSetLocaleDayOfWeek; + momentPrototype__proto.isoWeekday = getSetISODayOfWeek; + momentPrototype__proto.dayOfYear = getSetDayOfYear; + + // Hour + momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; + + // Minute + momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; + + // Second + momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; + + // Millisecond + momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; + + // Offset + momentPrototype__proto.utcOffset = getSetOffset; + momentPrototype__proto.utc = setOffsetToUTC; + momentPrototype__proto.local = setOffsetToLocal; + momentPrototype__proto.parseZone = setOffsetToParsedOffset; + momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; + momentPrototype__proto.isDST = isDaylightSavingTime; + momentPrototype__proto.isLocal = isLocal; + momentPrototype__proto.isUtcOffset = isUtcOffset; + momentPrototype__proto.isUtc = isUtc; + momentPrototype__proto.isUTC = isUtc; + + // Timezone + momentPrototype__proto.zoneAbbr = getZoneAbbr; + momentPrototype__proto.zoneName = getZoneName; + + // Deprecations + momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); + momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); + momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); + momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); + momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + + var momentPrototype = momentPrototype__proto; + + function moment__createUnix (input) { + return local__createLocal(input * 1000); + } + + function moment__createInZone () { + return local__createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat (string) { + return string; + } + + var prototype__proto = Locale.prototype; + + prototype__proto.calendar = locale_calendar__calendar; + prototype__proto.longDateFormat = longDateFormat; + prototype__proto.invalidDate = invalidDate; + prototype__proto.ordinal = ordinal; + prototype__proto.preparse = preParsePostFormat; + prototype__proto.postformat = preParsePostFormat; + prototype__proto.relativeTime = relative__relativeTime; + prototype__proto.pastFuture = pastFuture; + prototype__proto.set = locale_set__set; + + // Month + prototype__proto.months = localeMonths; + prototype__proto.monthsShort = localeMonthsShort; + prototype__proto.monthsParse = localeMonthsParse; + prototype__proto.monthsRegex = monthsRegex; + prototype__proto.monthsShortRegex = monthsShortRegex; + + // Week + prototype__proto.week = localeWeek; + prototype__proto.firstDayOfYear = localeFirstDayOfYear; + prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; + + // Day of Week + prototype__proto.weekdays = localeWeekdays; + prototype__proto.weekdaysMin = localeWeekdaysMin; + prototype__proto.weekdaysShort = localeWeekdaysShort; + prototype__proto.weekdaysParse = localeWeekdaysParse; + + prototype__proto.weekdaysRegex = weekdaysRegex; + prototype__proto.weekdaysShortRegex = weekdaysShortRegex; + prototype__proto.weekdaysMinRegex = weekdaysMinRegex; + + // Hours + prototype__proto.isPM = localeIsPM; + prototype__proto.meridiem = localeMeridiem; + + function lists__get (format, index, field, setter) { + var locale = locale_locales__getLocale(); + var utc = create_utc__createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl (format, index, field) { + if (typeof format === 'number') { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return lists__get(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = lists__get(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (typeof format === 'number') { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = locale_locales__getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return lists__get(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = lists__get(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function lists__listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function lists__listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function lists__listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function lists__listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function lists__listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + locale_locales__getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + // Side effect imports + utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); + utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); + + var mathAbs = Math.abs; + + function duration_abs__abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function duration_add_subtract__addSubtract (duration, input, value, direction) { + var other = create__createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function duration_add_subtract__add (input, value) { + return duration_add_subtract__addSubtract(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function duration_add_subtract__subtract (input, value) { + return duration_add_subtract__addSubtract(this, input, value, -1); + } + + function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; + } + + function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; + } + + function as (units) { + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function duration_as__valueOf () { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs (alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'); + var asSeconds = makeAs('s'); + var asMinutes = makeAs('m'); + var asHours = makeAs('h'); + var asDays = makeAs('d'); + var asWeeks = makeAs('w'); + var asMonths = makeAs('M'); + var asYears = makeAs('y'); + + function duration_get__get (units) { + units = normalizeUnits(units); + return this[units + 's'](); + } + + function makeGetter(name) { + return function () { + return this._data[name]; + }; + } + + var milliseconds = makeGetter('milliseconds'); + var seconds = makeGetter('seconds'); + var minutes = makeGetter('minutes'); + var hours = makeGetter('hours'); + var days = makeGetter('days'); + var months = makeGetter('months'); + var years = makeGetter('years'); + + function weeks () { + return absFloor(this.days() / 7); + } + + var round = Math.round; + var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { + var duration = create__createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function duration_humanize__getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + return true; + } + + function humanize (withSuffix) { + var locale = this.localeData(); + var output = duration_humanize__relativeTime(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var iso_string__abs = Math.abs; + + function iso_string__toISOString() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = iso_string__abs(this._milliseconds) / 1000; + var days = iso_string__abs(this._days); + var months = iso_string__abs(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); + } + + var duration_prototype__proto = Duration.prototype; + + duration_prototype__proto.abs = duration_abs__abs; + duration_prototype__proto.add = duration_add_subtract__add; + duration_prototype__proto.subtract = duration_add_subtract__subtract; + duration_prototype__proto.as = as; + duration_prototype__proto.asMilliseconds = asMilliseconds; + duration_prototype__proto.asSeconds = asSeconds; + duration_prototype__proto.asMinutes = asMinutes; + duration_prototype__proto.asHours = asHours; + duration_prototype__proto.asDays = asDays; + duration_prototype__proto.asWeeks = asWeeks; + duration_prototype__proto.asMonths = asMonths; + duration_prototype__proto.asYears = asYears; + duration_prototype__proto.valueOf = duration_as__valueOf; + duration_prototype__proto._bubble = bubble; + duration_prototype__proto.get = duration_get__get; + duration_prototype__proto.milliseconds = milliseconds; + duration_prototype__proto.seconds = seconds; + duration_prototype__proto.minutes = minutes; + duration_prototype__proto.hours = hours; + duration_prototype__proto.days = days; + duration_prototype__proto.weeks = weeks; + duration_prototype__proto.months = months; + duration_prototype__proto.years = years; + duration_prototype__proto.humanize = humanize; + duration_prototype__proto.toISOString = iso_string__toISOString; + duration_prototype__proto.toString = iso_string__toISOString; + duration_prototype__proto.toJSON = iso_string__toISOString; + duration_prototype__proto.locale = locale; + duration_prototype__proto.localeData = localeData; + + // Deprecations + duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); + duration_prototype__proto.lang = lang; + + // Side effect imports + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + // Side effect imports + + + utils_hooks__hooks.version = '2.15.2'; + + setHookCallback(local__createLocal); + + utils_hooks__hooks.fn = momentPrototype; + utils_hooks__hooks.min = min; + utils_hooks__hooks.max = max; + utils_hooks__hooks.now = now; + utils_hooks__hooks.utc = create_utc__createUTC; + utils_hooks__hooks.unix = moment__createUnix; + utils_hooks__hooks.months = lists__listMonths; + utils_hooks__hooks.isDate = isDate; + utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; + utils_hooks__hooks.invalid = valid__createInvalid; + utils_hooks__hooks.duration = create__createDuration; + utils_hooks__hooks.isMoment = isMoment; + utils_hooks__hooks.weekdays = lists__listWeekdays; + utils_hooks__hooks.parseZone = moment__createInZone; + utils_hooks__hooks.localeData = locale_locales__getLocale; + utils_hooks__hooks.isDuration = isDuration; + utils_hooks__hooks.monthsShort = lists__listMonthsShort; + utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; + utils_hooks__hooks.defineLocale = defineLocale; + utils_hooks__hooks.updateLocale = updateLocale; + utils_hooks__hooks.locales = locale_locales__listLocales; + utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; + utils_hooks__hooks.normalizeUnits = normalizeUnits; + utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding; + utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; + utils_hooks__hooks.calendarFormat = getCalendarFormat; + utils_hooks__hooks.prototype = momentPrototype; + + var _moment = utils_hooks__hooks; + + return _moment; + +}));;(function(){function n(){}function r(e,t){this.path=e;if(typeof t!=="undefined"&&t!==null){this.at_2x_path=t;this.perform_check=false}else{this.at_2x_path=e.replace(/\.\w+$/,function(e){return"@2x"+e});this.perform_check=true}}function i(e){this.el=e;this.path=new r(this.el.getAttribute("src"),this.el.getAttribute("data-at2x"));var t=this;this.path.check_2x_variant(function(e){if(e)t.swap()})}var e=typeof exports=="undefined"?window:exports;var t={check_mime_type:true};e.Retina=n;n.configure=function(e){if(e==null)e={};for(var n in e)t[n]=e[n]};n.init=function(t){if(t==null)t=e;var n=t.onload||new Function;t.onload=function(){var e=document.getElementsByTagName("img"),t=[],r,s;for(r=0;r1)return true;if(e.matchMedia&&e.matchMedia(t).matches)return true;return false};e.RetinaImagePath=r;r.confirmed_paths=[];r.prototype.is_external=function(){return!!(this.path.match(/^https?\:/i)&&!this.path.match("//"+document.domain))};r.prototype.check_2x_variant=function(e){var n,i=this;if(this.is_external()){return e(false)}else if(!this.perform_check&&typeof this.at_2x_path!=="undefined"&&this.at_2x_path!==null){return e(true)}else if(this.at_2x_path in r.confirmed_paths){return e(true)}else{n=new XMLHttpRequest;n.open("HEAD",this.at_2x_path);n.onreadystatechange=function(){if(n.readyState!=4){return e(false)}if(n.status>=200&&n.status<=399){if(t.check_mime_type){var s=n.getResponseHeader("Content-Type");if(s==null||!s.match(/^image/i)){return e(false)}}r.confirmed_paths.push(i.at_2x_path);return e(true)}else{return e(false)}};n.send()}};e.RetinaImage=i;i.prototype.swap=function(e){function n(){if(!t.el.complete){setTimeout(n,5)}else{t.el.setAttribute("width",t.el.offsetWidth);t.el.setAttribute("height",t.el.offsetHeight);t.el.setAttribute("src",e)}}if(typeof e=="undefined")e=this.path.at_2x_path;var t=this;n()};if(n.isRetina()){n.init(e)}})();/*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
        ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
      • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-d.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
          '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
        • ×
        • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}}),this.$selection.on("input.searchcheck",".select2-search--inline",function(a){var b=document.documentMode;return b&&11>=b?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open",{}),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},l,j),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return{q:a.term}},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url(a)),"function"==typeof f.data&&(f.data=f.data(a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
        • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c){var d=this,e="scroll.select2."+c.id,f="resize.select2."+c.id,g="orientationchange.select2."+c.id,h=this.$container.parents().filter(b.hasScroll);h.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),h.on(e,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(e+" "+f+" "+g,function(a){d._positionDropdown(),d._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c){var d="scroll.select2."+c.id,e="resize.select2."+c.id,f="orientationchange.select2."+c.id,g=this.$container.parents().filter(b.hasScroll);g.off(d),a(window).off(d+" "+e+" "+f)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){ function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a ` {% endmacro %} diff --git a/app/views/admin/partials/search-buttons.swig b/app/views/admin/partials/search-buttons.swig index e374a95..a8dd053 100644 --- a/app/views/admin/partials/search-buttons.swig +++ b/app/views/admin/partials/search-buttons.swig @@ -9,6 +9,11 @@ {% set showResetButton = true %} {% endif %} {% endfor %} + {% for entry in filters.customFilters %} + {% if entry.filterName.indexOf('custom') == 0 and not entry.filterValue | isEmpty %} + {% set showResetButton = true %} + {% endif %} + {% endfor %} {% endif %}
          @@ -25,4 +30,4 @@
          -{% endmacro %} \ No newline at end of file +{% endmacro %} diff --git a/resources/javascripts/custom.js b/resources/javascripts/custom.js index 1c3096e..4669d63 100644 --- a/resources/javascripts/custom.js +++ b/resources/javascripts/custom.js @@ -531,7 +531,12 @@ $(document).ready(function () { $(document).ready(function () { $('.user-roles-select').select2(); $('.select2').select2(); - $('.date-range-picker').daterangepicker(); + $('.date-range-picker').daterangepicker({ + autoUpdateInput: false, + locale: { + cancelLabel: 'Clear' + } + }); $('.admin-ui-select2-autocomplete').each(function () { From 3557e6a74373a79e4d23a29a43af78179195f81f Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:17:33 +0300 Subject: [PATCH 16/28] Rebuild JS. --- app/assets/javascripts/build.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/build.min.js b/app/assets/javascripts/build.min.js index 8f3e914..026123b 100644 --- a/app/assets/javascripts/build.min.js +++ b/app/assets/javascripts/build.min.js @@ -6729,4 +6729,4 @@ _initParser:function(){this.observe("paste:composer",function(){var a=this;a.com return DateRangePicker; })); -;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
          '),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
          • '+k.join("
          • ")+"
          "+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
          ')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
          No fields are checked to be edited
          '):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".date-range-picker").daterangepicker(),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file +;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
          '),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
          • '+k.join("
          • ")+"
          "+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
          ')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
          No fields are checked to be edited
          '):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".date-range-picker").daterangepicker({autoUpdateInput:!1,locale:{cancelLabel:"Clear"}}),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file From 356b45359f89e1966d56e66a521816278d857b69 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:21:02 +0300 Subject: [PATCH 17/28] Handle custom events for date range picker. --- app/assets/javascripts/build.min.js | 2 +- resources/javascripts/custom.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/build.min.js b/app/assets/javascripts/build.min.js index 026123b..1108aba 100644 --- a/app/assets/javascripts/build.min.js +++ b/app/assets/javascripts/build.min.js @@ -6729,4 +6729,4 @@ _initParser:function(){this.observe("paste:composer",function(){var a=this;a.com return DateRangePicker; })); -;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
          '),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
          • '+k.join("
          • ")+"
          "+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
          ')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
          No fields are checked to be edited
          '):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".date-range-picker").daterangepicker({autoUpdateInput:!1,locale:{cancelLabel:"Clear"}}),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file +;!function(a){function b(a){return new RegExp("^"+a+"$")}function c(a,b){for(var c=Array.prototype.slice.call(arguments,2),d=a.split("."),e=d.pop(),f=0;f0});h.trigger("submit.validation"),f.trigger("validationLostFocus.validation"),g.each(function(b,d){var f=a(d);(f.hasClass(c.options.classNames.warning)||f.hasClass(c.options.classNames.error))&&(f.removeClass(c.options.classNames.warning).addClass(c.options.classNames.error),e++)}),e?(c.options.preventSubmit&&(b.preventDefault(),b.stopImmediatePropagation()),d.addClass(c.options.classNames.error),a.isFunction(c.options.submitError)&&c.options.submitError(d,b,h.jqBootstrapValidation("collectErrors",!0))):(d.removeClass(c.options.classNames.error),a.isFunction(c.options.submitSuccess)&&c.options.submitSuccess(d,b))}),this.each(function(){var b=a(this),e=b.parents(c.options.classNames.group).first(),f=e.find(".help-block").first(),i=b.parents("form").first(),j=[];if(!f.length&&c.options.autoAdd&&c.options.autoAdd.helpBlocks&&(f=a('
          '),e.find(".controls").append(f),d.push(f[0])),c.options.sniffHtml){var k;if(b.data("validationPatternPattern")&&b.attr("pattern",b.data("validationPatternPattern")),void 0!==b.attr("pattern")&&(k="Not in the expected format",b.data("validationPatternMessage")&&(k=b.data("validationPatternMessage")),b.data("validationPatternMessage",k),b.data("validationPatternRegex",b.attr("pattern"))),void 0!==b.attr("max")||void 0!==b.attr("aria-valuemax")){var l=void 0!==b.attr("max")?b.attr("max"):b.attr("aria-valuemax");k="Too high: Maximum of '"+l+"'",b.data("validationMaxMessage")&&(k=b.data("validationMaxMessage")),b.data("validationMaxMessage",k),b.data("validationMaxMax",l)}if(void 0!==b.attr("min")||void 0!==b.attr("aria-valuemin")){var m=void 0!==b.attr("min")?b.attr("min"):b.attr("aria-valuemin");k="Too low: Minimum of '"+m+"'",b.data("validationMinMessage")&&(k=b.data("validationMinMessage")),b.data("validationMinMessage",k),b.data("validationMinMin",m)}if(void 0!==b.attr("maxlength")&&(k="Too long: Maximum of '"+b.attr("maxlength")+"' characters",b.data("validationMaxlengthMessage")&&(k=b.data("validationMaxlengthMessage")),b.data("validationMaxlengthMessage",k),b.data("validationMaxlengthMaxlength",b.attr("maxlength"))),void 0!==b.attr("minlength")&&(k="Too short: Minimum of '"+b.attr("minlength")+"' characters",b.data("validationMinlengthMessage")&&(k=b.data("validationMinlengthMessage")),b.data("validationMinlengthMessage",k),b.data("validationMinlengthMinlength",b.attr("minlength"))),(void 0!==b.attr("required")||void 0!==b.attr("aria-required"))&&(k=c.builtInValidators.required.message,b.data("validationRequiredMessage")&&(k=b.data("validationRequiredMessage")),b.data("validationRequiredMessage",k)),void 0!==b.attr("type")&&"number"===b.attr("type").toLowerCase()){k=c.validatorTypes.number.message,b.data("validationNumberMessage")&&(k=b.data("validationNumberMessage")),b.data("validationNumberMessage",k);var n=c.validatorTypes.number.step;b.data("validationNumberStep")&&(n=b.data("validationNumberStep")),b.data("validationNumberStep",n);var o=c.validatorTypes.number.decimal;b.data("validationNumberDecimal")&&(o=b.data("validationNumberDecimal")),b.data("validationNumberDecimal",o)}void 0!==b.attr("type")&&"email"===b.attr("type").toLowerCase()&&(k="Not a valid email address",b.data("validationEmailMessage")&&(k=b.data("validationEmailMessage")),b.data("validationEmailMessage",k)),void 0!==b.attr("minchecked")&&(k="Not enough options checked; Minimum of '"+b.attr("minchecked")+"' required",b.data("validationMincheckedMessage")&&(k=b.data("validationMincheckedMessage")),b.data("validationMincheckedMessage",k),b.data("validationMincheckedMinchecked",b.attr("minchecked"))),void 0!==b.attr("maxchecked")&&(k="Too many options checked; Maximum of '"+b.attr("maxchecked")+"' required",b.data("validationMaxcheckedMessage")&&(k=b.data("validationMaxcheckedMessage")),b.data("validationMaxcheckedMessage",k),b.data("validationMaxcheckedMaxchecked",b.attr("maxchecked")))}void 0!==b.data("validation")&&(j=b.data("validation").split(",")),a.each(b.data(),function(a,b){var c=a.replace(/([A-Z])/g,",$1").split(",");"validation"===c[0]&&c[1]&&j.push(c[1])});var p=j,q=[],r=function(a,b){j[a]=g(b)},s=function(d,e){if(void 0!==b.data("validation"+e+"Shortcut"))a.each(b.data("validation"+e+"Shortcut").split(","),function(a,b){q.push(b)});else if(c.builtInValidators[e.toLowerCase()]){var f=c.builtInValidators[e.toLowerCase()];"shortcut"===f.type.toLowerCase()&&a.each(f.shortcut.split(","),function(a,b){b=g(b),q.push(b),j.push(b)})}};do a.each(j,r),j=a.unique(j),q=[],a.each(p,s),p=q;while(p.length>0);var t={};a.each(j,function(d,e){var f=b.data("validation"+e+"Message"),h=!!f,i=!1;if(f||(f="'"+e+"' validation failed "),a.each(c.validatorTypes,function(c,d){if(void 0===t[c]&&(t[c]=[]),!i&&void 0!==b.data("validation"+e+g(d.name))){var j=d.init(b,e);h&&(j.message=f),t[c].push(a.extend(!0,{name:g(d.name),message:f},j)),i=!0}}),!i&&c.builtInValidators[e.toLowerCase()]){var j=a.extend(!0,{},c.builtInValidators[e.toLowerCase()]);h&&(j.message=f);var k=j.type.toLowerCase();"shortcut"===k?i=!0:a.each(c.validatorTypes,function(c,d){void 0===t[c]&&(t[c]=[]),i||k!==c.toLowerCase()||(b.data("validation"+e+g(d.name),j[d.name.toLowerCase()]),t[k].push(a.extend(j,d.init(b,e))),i=!0)})}i||a.error("Cannot find validation info for '"+e+"'")}),f.data("original-contents",f.data("original-contents")?f.data("original-contents"):f.html()),f.data("original-role",f.data("original-role")?f.data("original-role"):f.attr("role")),e.data("original-classes",e.data("original-clases")?e.data("original-classes"):e.attr("class")),b.data("original-aria-invalid",b.data("original-aria-invalid")?b.data("original-aria-invalid"):b.attr("aria-invalid")),b.bind("validation.validation",function(d,e){var f=h(b),g=[];return a.each(t,function(d,h){(f||f.length||e&&e.includeEmpty||c.validatorTypes[d].includeEmpty||c.validatorTypes[d].blockSubmit&&e&&e.submitting)&&a.each(h,function(a,e){c.validatorTypes[d].validate(b,f,e)&&g.push(e.message)})}),g}),b.bind("getValidators.validation",function(){return t});var u=0;a.each(t,function(a,b){u+=b.length}),b.bind("getValidatorCount.validation",function(){return u}),b.bind("submit.validation",function(){return b.triggerHandler("change.validation",{submitting:!0})}),b.bind((c.options.bindEvents.length>0?c.options.bindEvents:["keyup","focus","blur","click","keydown","keypress","change"]).concat(["revalidate"]).join(".validation ")+".validation",function(d,g){var j=h(b),k=[];g&&g.submitting?e.data("jqbvIsSubmitting",!0):"revalidate"!==d.type&&e.data("jqbvIsSubmitting",!1);var l=!!e.data("jqbvIsSubmitting");e.find("input,textarea,select").not("[type=submit]").each(function(c,d){var e=k.length;if(a.each(a(d).triggerHandler("validation.validation",g)||[],function(a,b){k.push(b)}),k.length>e)a(d).attr("aria-invalid","true");else{var f=b.data("original-aria-invalid");a(d).attr("aria-invalid",void 0!==f?f:!1)}}),i.find("input,select,textarea").not(b).not('[name="'+b.attr("name")+'"]').trigger("validationLostFocus.validation"),k=a.unique(k.sort()),k.length?(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning).addClass(l?c.options.classNames.error:c.options.classNames.warning),c.options.semanticallyStrict&&1===k.length?f.html(k[0]+(c.options.prependExistingHelpBlock?f.data("original-contents"):"")):f.html('
          • '+k.join("
          • ")+"
          "+(c.options.prependExistingHelpBlock?f.data("original-contents"):""))):(e.removeClass(c.options.classNames.success+" "+c.options.classNames.error+" "+c.options.classNames.warning),j.length>0&&e.addClass(c.options.classNames.success),f.html(f.data("original-contents"))),"blur"===d.type&&e.removeClass(c.options.classNames.success)}),b.bind("validationLostFocus.validation",function(){e.removeClass(c.options.classNames.success)})})},destroy:function(){return this.each(function(){var b=a(this),c=b.parents(f.options.classNames.group).first(),e=c.find(".help-block").first(),g=b.parents("form").first();b.unbind(".validation"),g.unbind(".validationSubmit"),e.html(e.data("original-contents")),c.attr("class",c.data("original-classes")),b.attr("aria-invalid",b.data("original-aria-invalid")),e.attr("role",b.data("original-role")),a.inArray(e[0],d)>-1&&e.remove()})},collectErrors:function(b){var c={};return this.each(function(b,d){var e=a(d),f=e.attr("name"),g=e.triggerHandler("validation.validation",{includeEmpty:!0});c[f]=a.extend(!0,g,c[f])}),a.each(c,function(a,b){0===b.length&&delete c[a]}),c},hasErrors:function(){var b=[];return this.find("input,select,textarea").add(this).each(function(c,d){b=b.concat(a(d).triggerHandler("getValidators.validation")?a(d).triggerHandler("validation.validation",{submitting:!0}):[])}),b.length>0},override:function(b){f=a.extend(!0,f,b)}},validatorTypes:{callback:{name:"callback",init:function(a,b){var c={validatorName:b,callback:a.data("validation"+b+"Callback"),lastValue:a.val(),lastValid:!0,lastFinished:!0},d="Not valid";return a.data("validation"+b+"Message")&&(d=a.data("validation"+b+"Message")),c.message=d,c},validate:function(a,b,d){if(d.lastValue===b&&d.lastFinished)return!d.lastValid;if(d.lastFinished===!0){d.lastValue=b,d.lastValid=!0,d.lastFinished=!1;var e=d,f=a;c(d.callback,window,a,b,function(b){e.lastValue===b.value&&(e.lastValid=b.valid,b.message&&(e.message=b.message),e.lastFinished=!0,f.data("validation"+e.validatorName+"Message",e.message),setTimeout(function(){!a.is(":focus")&&a.parents("form").first().data("jqbvIsSubmitting")?f.trigger("blur.validation"):f.trigger("revalidate.validation")},1))})}return!1}},ajax:{name:"ajax",init:function(a,b){return{validatorName:b,url:a.data("validation"+b+"Ajax"),lastValue:a.val(),lastValid:!0,lastFinished:!0}},validate:function(b,c,d){return""+d.lastValue==""+c&&d.lastFinished===!0?d.lastValid===!1:(d.lastFinished===!0&&(d.lastValue=c,d.lastValid=!0,d.lastFinished=!1,a.ajax({url:d.url,data:"value="+encodeURIComponent(c)+"&field="+b.attr("name"),dataType:"json",success:function(a){""+d.lastValue==""+a.value&&(d.lastValid=!!a.valid,a.message&&(d.message=a.message),d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1))},failure:function(){d.lastValid=!0,d.message="ajax call failed",d.lastFinished=!0,b.data("validation"+d.validatorName+"Message",d.message),setTimeout(function(){b.trigger("revalidate.validation")},1)}})),!1)}},regex:{name:"regex",init:function(c,d){var e={},f=c.data("validation"+d+"Regex");e.regex=b(f),void 0===f&&a.error("Can't find regex for '"+d+"' validator on '"+c.attr("name")+"'");var g="Not in the expected format";return c.data("validation"+d+"Message")&&(g=c.data("validation"+d+"Message")),e.message=g,e.originalName=d,e},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},email:{name:"email",init:function(a,c){var d={};d.regex=b("[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");var e="Not a valid email address";return a.data("validation"+c+"Message")&&(e=a.data("validation"+c+"Message")),d.message=e,d.originalName=c,d},validate:function(a,b,c){return!c.regex.test(b)&&!c.negative||c.regex.test(b)&&c.negative}},required:{name:"required",init:function(a,b){var c="This is required";return a.data("validation"+b+"Message")&&(c=a.data("validation"+b+"Message")),{message:c,includeEmpty:!0}},validate:function(a,b,c){return!!(0===b.length&&!c.negative||b.length>0&&c.negative)},blockSubmit:!0},match:{name:"match",init:function(b,c){var d=b.data("validation"+c+"Match"),e=b.parents("form").first(),g=e.find('[name="'+d+'"]').first();g.bind("validation.validation",function(){b.trigger("revalidate.validation",{submitting:!0})});var h={};h.element=g,0===g.length&&a.error("Can't find field '"+d+"' to match '"+b.attr("name")+"' against in '"+c+"' validator");var i="Must match",j=null;return(j=e.find('label[for="'+d+'"]')).length?i+=" '"+j.text()+"'":(j=g.parents(f.options.classNames.group).first().find("label")).length&&(i+=" '"+j.first().text()+"'"),b.data("validation"+c+"Message")&&(i=b.data("validation"+c+"Message")),h.message=i,h},validate:function(a,b,c){return b!==c.element.val()&&!c.negative||b===c.element.val()&&c.negative},blockSubmit:!0,includeEmpty:!0},max:{name:"max",init:function(a,b){var c={};return c.max=a.data("validation"+b+"Max"),c.message="Too high: Maximum of '"+c.max+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b,10)>parseFloat(c.max,10)&&!c.negative||parseFloat(b,10)<=parseFloat(c.max,10)&&c.negative}},min:{name:"min",init:function(a,b){var c={};return c.min=a.data("validation"+b+"Min"),c.message="Too low: Minimum of '"+c.min+"'",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return parseFloat(b)=parseFloat(c.min)&&c.negative}},maxlength:{name:"maxlength",init:function(a,b){var c={};return c.maxlength=a.data("validation"+b+"Maxlength"),c.message="Too long: Maximum of '"+c.maxlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length>c.maxlength&&!c.negative||b.length<=c.maxlength&&c.negative}},minlength:{name:"minlength",init:function(a,b){var c={};return c.minlength=a.data("validation"+b+"Minlength"),c.message="Too short: Minimum of '"+c.minlength+"' characters",a.data("validation"+b+"Message")&&(c.message=a.data("validation"+b+"Message")),c},validate:function(a,b,c){return b.length=c.minlength&&c.negative}},maxchecked:{name:"maxchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.maxchecked=a.data("validation"+b+"Maxchecked");var e="Too many: Max '"+c.maxchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length>c.maxchecked&&!c.negative||c.elements.filter(":checked").length<=c.maxchecked&&c.negative},blockSubmit:!0},minchecked:{name:"minchecked",init:function(a,b){var c={},d=a.parents("form").first().find('[name="'+a.attr("name")+'"]');d.bind("change.validation click.validation",function(){a.trigger("revalidate.validation",{includeEmpty:!0})}),c.elements=d,c.minchecked=a.data("validation"+b+"Minchecked");var e="Too few: Min '"+c.minchecked+"' checked";return a.data("validation"+b+"Message")&&(e=a.data("validation"+b+"Message")),c.message=e,c},validate:function(a,b,c){return c.elements.filter(":checked").length=c.minchecked&&c.negative},blockSubmit:!0,includeEmpty:!0},number:{name:"number",init:function(a,c){var d={};d.step=1,a.attr("step")&&(d.step=a.attr("step")),a.data("validation"+c+"Step")&&(d.step=a.data("validation"+c+"Step")),d.decimal=".",a.data("validation"+c+"Decimal")&&(d.decimal=a.data("validation"+c+"Decimal")),d.thousands="",a.data("validation"+c+"Thousands")&&(d.thousands=a.data("validation"+c+"Thousands")),d.regex=b("([+-]?\\d+(\\"+d.decimal+"\\d+)?)?"),d.message="Must be a number";var e=a.data("validation"+c+"Message");return e&&(d.message=e),d},validate:function(a,b,c){for(var d=b.replace(c.decimal,".").replace(c.thousands,""),e=parseFloat(d),f=parseFloat(c.step);f%1!==0;)f=10*parseFloat(f.toPrecision(12)),e=10*parseFloat(e.toPrecision(12));var g=c.regex.test(b),h=parseFloat(e)%parseFloat(f)===0,i=!isNaN(parseFloat(d))&&isFinite(d),j=!(g&&h&&i);return j},message:"Must be a number"}},builtInValidators:{email:{name:"Email",type:"email"},passwordagain:{name:"Passwordagain",type:"match",match:"password",message:"Does not match the given password"},positive:{name:"Positive",type:"shortcut",shortcut:"number,positivenumber"},negative:{name:"Negative",type:"shortcut",shortcut:"number,negativenumber"},integer:{name:"Integer",type:"regex",regex:"[+-]?\\d+",message:"No decimal places allowed"},positivenumber:{name:"Positivenumber",type:"min",min:0,message:"Must be a positive number"},negativenumber:{name:"Negativenumber",type:"max",max:0,message:"Must be a negative number"},required:{name:"Required",type:"required",message:"This is required"},checkone:{name:"Checkone",type:"minchecked",minchecked:1,message:"Check at least one option"},number:{name:"Number",type:"number",decimal:".",step:"1"},pattern:{name:"Pattern",type:"regex",message:"Not in expected format"}}},g=function(a){return a.toLowerCase().replace(/(^|\s)([a-z])/g,function(a,b,c){return b+c.toUpperCase()})},h=function(b){var c=null,d=b.attr("type");if("checkbox"===d){c=b.is(":checked")?c:"";var e=b.parents("form").first()||b.parents(f.options.classNames.group).first();e&&(c=e.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else if("radio"===d){c=a('input[name="'+b.attr("name")+'"]:checked').length>0?b.val():"";var g=b.parents("form").first()||b.parents(f.options.classNames.group).first();g&&(c=g.find("input[name='"+b.attr("name")+"']:checked").map(function(b,c){return a(c).val()}).toArray().join(","))}else c="number"===d?b[0].validity.valid?b.val():b[0].validity.badInput||b[0].validity.stepMismatch?"NaN":"":b.val();return c};a.fn.jqBootstrapValidation=function(b){return f.methods[b]?f.methods[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.jqBootstrapValidation"),null):f.methods.init.apply(this,arguments)},a.jqBootstrapValidation=function(b){a(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments)}}(jQuery),jQuery(document).ready(function(){"use strict";function a(){var a=$(".bulk_delete"),b=$("[id^='checkbox_']:checkbox:checked");0===b.length?a.prop("disabled",!0):a.prop("disabled",!1)}function b(){"relative"==$(".header-right").css("position")?($("body").addClass("hidden-left"),$(".headerwrapper, .mainwrapper").removeClass("collapsed")):$("body").removeClass("hidden-left"),$(window).width()<=360?0==$(".leftpanel .form-search").length&&$(".form-search").insertAfter($(".profile-left")):0==$(".header-right .form-search").length&&$(".form-search").insertBefore($(".btn-group-notification"))}function c(){"relative"==$(".logo").css("position")?$(".headerwrapper, .mainwrapper").addClass("collapsed"):$(".headerwrapper, .mainwrapper").removeClass("collapsed")}function d(a){var b=$('#signUpForm .form-group input[type="email"]');if(0!=b.length)return $.ajax({url:"/signup/checkUniquenessOfEmail",data:{email:b.val()},method:"POST",async:!1,headers:{accept:"application/json; charset=utf-8"},success:function(c){if(1==c.isEmailUnique||c.responseJSON&&1==c.responseJSON.isEmailUnique);else{a.preventDefault();var d=b.parents(".form-group");d.addClass("has-error"),d.find(".help-block").html("Specified email already in use")}},error:function(c){var d={message:"Some error has occurred, please try again"};a.preventDefault(),c.statusText?d.message=c.statusText:c.responseText&&(d.message=c.responseText);var e=b.parents(".form-group");e.addClass("has-error"),e.find(".help-block").html(d.message)}}),!1}$(".bulk-actions").length&&($(".bulk-actions .check-all").click(function(){var b=$(".bulk-actions .check-all").data("checked")===!0;$(".bulk-actions .check-all").data("checked",!b),$("[id^='checkbox_']:checkbox").prop("checked",!b),a()}),$(".bulk-actions .bulk_delete").click(function(){var a=$(".bulk-delete-form"),b=$("[id^='checkbox_']:checkbox:checked");return a.find("hidden").remove(),0===b.length?(alert("No items selected for deletion"),!1):confirm("Are you sure you want to delete the selected elements?")?(b.each(function(b,c){a.append('')}),!0):!1}),$(document).on("change","[id^='checkbox_']:checkbox",function(){a()}),a()),$(".bs-data-picker").datepicker({}),$(".search-box").length>0&&($(".search-box #searchValue").keydown(function(a){var b=($(".search-box #oldValue").val(),$(".search-box #basePath").val());if(13===a.which){var c=$(this).val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}return!1}}),$(".search-box .search").click(function(a){var b=$(".search-box #basePath").val(),c=$(".search-box #searchValue").val();if(c){var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);window.location=b+d}}),$(".search-box .reset").click(function(a){var b=$(".search-box #basePath").val(),c=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]","");window.location=b+c})),$(".search-filters").length>0&&($(".search-box-2 #searchValue").keydown(function(a){var b=$(".search-box-2 #basePath").val();if(13===a.which){var c=$(this).val();c||(c="");var d=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[search]",c);return window.location=b+d,!1}}),$(".search-filters .search").click(function(a){var b=window.location.search;$("[data-filter]").each(function(){var a=$(this).val(),c=$(this).data("filter");b=a?queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]",a):queryStringHelper.getUpdatedQueryString(b,"filter["+c+"]","")}),window.location=$(".search-box-2 #basePath").val()+b}),$(".search-filters .reset").click(function(){var a=window.location.search;$("[data-filter]").each(function(){var b=$(this).data("filter");a=queryStringHelper.getUpdatedQueryString(a,"filter["+b+"]","")}),window.location=$(".search-box-2 #basePath").val()+a})),jQuery(".tooltips").tooltip({container:"body"}),jQuery(".popovers").popover(),jQuery("[data-toggle=popover]").popover(),jQuery(".panel-heading").hover(function(){jQuery(this).find(".panel-btns").fadeIn("fast")},function(){jQuery(this).find(".panel-btns").fadeOut("fast")}),jQuery(".panel .panel-close").click(function(){return jQuery(this).closest(".panel").fadeOut(200),!1}),jQuery(".panel .panel-minimize").click(function(){var a=jQuery(this),b=a.closest(".panel");return jQuery(this).hasClass("maximize")?(b.find(".panel-body, .panel-footer").slideDown(200),a.removeClass("maximize"),a.find("i").removeClass("fa-plus").addClass("fa-minus"),jQuery(this).attr("data-original-title","Minimize Panel").tooltip()):(b.find(".panel-body, .panel-footer").slideUp(200),a.addClass("maximize"),a.find("i").removeClass("fa-minus").addClass("fa-plus"),jQuery(this).attr("data-original-title","Maximize Panel").tooltip()),!1}),jQuery(".leftpanel .nav .parent > a").click(function(){var a=jQuery(this).parents(".collapsed").length;if(!a){jQuery(".leftpanel .nav .parent-focus").each(function(){jQuery(this).find(".children").slideUp("fast"),jQuery(this).removeClass("parent-focus")});var b=jQuery(this).parent().find(".children");b.is(":visible")?(b.slideUp("fast"),b.parent().removeClass("parent-focus")):(b.slideDown("fast"),b.parent().hasClass("active")||b.parent().addClass("parent-focus"))}return!1}),jQuery(".menu-collapse").click(function(){return $("body").hasClass("hidden-left")?$("body").hasClass("show-left")?$("body").removeClass("show-left"):$("body").addClass("show-left"):$(".headerwrapper").hasClass("collapsed")?$(".headerwrapper, .mainwrapper").removeClass("collapsed"):($(".headerwrapper, .mainwrapper").addClass("collapsed"),$(".children").hide()),!1}),jQuery(".leftpanel .nav li").hover(function(){$(this).addClass("nav-hover")},function(){$(this).removeClass("nav-hover")}),jQuery(window).resize(function(){b()}),b(),c(),$(".add_doctor_document").click(function(a){a.preventDefault(),$("#doctor-documents").append('
          ')}),$("#doctor-documents").on("click",".remove_doctor_document",function(a){a.preventDefault(),$(this).parent("div").parent("div").remove()}),$(".resource_action_checkbox").on("click",function(){if($(this).attr("checked")){var a={aclRole:$(this).data("role"),aclResource:$(this).data("resource"),actionName:$(this).data("action")},b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("create_url"),method:"POST",dataType:"json",data:a}).done(function(a){a&&a.item&&b.attr("data-permission_id",a.item._id),d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}else{var b=$(this),c=$(this).data("message_container"),d=null;c&&(d=$(c)),$.ajax({url:$(this).data("base_url")+"/"+$(this).data("permission_id")+"/delete-ajax",method:"GET"}).done(function(a){d&&d.html("").removeClass().html('').addClass("label label-sm label-success").show().fadeOut(500)}).fail(function(a,b){d&&d.html("").removeClass().html('').addClass("label label-sm label-danger").show().fadeOut(500)})}});var e=$(".pagination");e.length>0&&e.find("a").each(function(){$(this).attr("href",$(this).attr("href")+window.location.search)});var f=$('a[class="bulk-edit"]');f.length>0&&f.attr("href",f.attr("href")+window.location.search);var g=$(".bulk-edit-form");g.length>0&&g.attr("action",g.attr("action")+window.location.search);var h=$("#pageSizeSelector");h.length>0&&h.on("change",function(){var a=queryStringHelper.getUpdatedQueryString(window.location.search,"filter[pageSize]",$(this).val());window.location=$(this).attr("basePath")+a});var i=$(".panel-signup, .panel-signin");i.length>0&&$(function(){$("input,select,textarea").not("[type=submit]").jqBootstrapValidation({preventSubmit:!0,autoAdd:{helpBlocks:!0},classNames:{group:".form-group",warning:"has-warning",error:"has-error",success:"has-success"},submitError:function(a,b,c){},submitSuccess:function(a,b){d(b)},filter:function(){return $(this).is(":visible")}})})}),function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40361841-3","auto"),ga("send","pageview");var queryStringHelper=function(){function a(a,d,e){var f="";if(0==a.length)f="?"+d+"="+e;else{var g=b(a);g[d]=e,f=c(g)}return f}function b(a){var b,c,d=/\+/g,e=/([^&=]+)=?([^&]*)/g,f=function(a){return decodeURIComponent(a.replace(d," "))};for("?"===a.substring(0,1)&&(a=a.substring(1)),c={};b=e.exec(a);)c[b[1]]=f(b[2]);return c}function c(a){var b="?";return $.each(Object.keys(a),function(c,d){b+=d+"="+encodeURIComponent(a[d])+"&"}),b.substring(0,b.length-1)}return{getUpdatedQueryString:a}}();$(document).ready(function(){$("#bulk-edit-form .edit-field > textarea,input").focus(function(){var a=$("input[name='"+$(this).attr("name")+"_checkbox']");a.length&&a.prop("checked",!0)}),$("#bulk-edit-form .next").click(function(){return 0===$('#bulk-edit-form input[type="checkbox"]:checked').length?$("#flash-messages-bulk-edit").html('
          No fields are checked to be edited
          '):void $("#bulk-edit-form form").submit()})}),$(document).ready(function(){$(".user-roles-select").select2(),$(".select2").select2(),$(".date-range-picker").daterangepicker({autoUpdateInput:!1,locale:{cancelLabel:"Clear"}}),$(".date-range-picker").on("apply.daterangepicker",function(a,b){$(this).val(b.startDate.format("MM/DD/YYYY")+" - "+b.endDate.format("MM/DD/YYYY"))}),$(".date-range-picker").on("cancel.daterangepicker",function(a,b){$(this).val("")}),$(".admin-ui-select2-autocomplete").each(function(){$(this).select2({ajax:{url:"/"+$(this).data("resource")+"/autocomplete",dataType:"json",delay:250,data:function(a){return{"filter[search]":a.term}},processResults:function(a){return{results:a.items}}},minimumInputLength:1})})}); \ No newline at end of file diff --git a/resources/javascripts/custom.js b/resources/javascripts/custom.js index 4669d63..56d060f 100644 --- a/resources/javascripts/custom.js +++ b/resources/javascripts/custom.js @@ -537,6 +537,13 @@ $(document).ready(function () { cancelLabel: 'Clear' } }); + $('.date-range-picker').on('apply.daterangepicker', function (ev, picker) { + $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY')); + }); + + $('.date-range-picker').on('cancel.daterangepicker', function (ev, picker) { + $(this).val(''); + }); $('.admin-ui-select2-autocomplete').each(function () { From 9b7230ca9665e8e2e68f417307085509e9c54f5b Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:26:40 +0300 Subject: [PATCH 18/28] Update custom date range picker. --- app/models/log_audit.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 83e00e1..268995c 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -11,6 +11,11 @@ var BaseModel = require('./base'); */ var merge = require('merge'); +/** + * Lodash helper + */ +const _ = require('lodash'); + /** * Resources model */ @@ -193,14 +198,23 @@ class LogAuditModel extends BaseModel { */ addCustomFilters(mongoFilters, customFilters) { + // [ { filterName: 'customDateRange', filterValue: '10/15/2016 - 10/29/2016' } ] + + let customDateRange = _.find(customFilters, {filterName: 'customDateRange'}); + if (customDateRange) { + + let from = customDateRange.filterValue.split(' - ')[0]; + let to = customDateRange.filterValue.split(' - ')[1]; + + mongoFilters.$and.push({createdAt: {$gte: from}}); + mongoFilters.$and.push({createdAt: {$lte: to}}); + } + console.log('---'); console.log(mongoFilters); console.log(customFilters); console.log('---'); - // [ { filterName: 'dateRange', filterValue: '123123-1231' } ] - - return mongoFilters; } } From f1481b4f1c7ead44ef516be4e22ce07e82b46f7b Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:34:57 +0300 Subject: [PATCH 19/28] Added diff string search filter. --- app/models/log_audit.js | 22 +++++++++++++------ app/views/admin/log_audit/list.swig | 3 +++ .../partials/search-by-diff-string.swig | 13 +++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 app/views/admin/log_audit/partials/search-by-diff-string.swig diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 268995c..caa71d5 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -23,7 +23,7 @@ class LogAuditModel extends BaseModel { /** * Model constructor */ - constructor (listName) { + constructor(listName) { // We must call super() in child class to have access to 'this' in a constructor super(listName); @@ -56,7 +56,7 @@ class LogAuditModel extends BaseModel { * * @type {Array} */ - this.customFilters = ['customDateRange']; + this.customFilters = ['customDateRange', 'customDiffString']; } /** @@ -64,7 +64,7 @@ class LogAuditModel extends BaseModel { * * @override */ - defineSchema () { + defineSchema() { var Types = this.mongoose.Schema.Types; @@ -100,7 +100,7 @@ class LogAuditModel extends BaseModel { * @param {string} rawData.message - Text message. * @param {Object} rawData.userId - User ID who made the change. */ - writeRaw (rawData) { + writeRaw(rawData) { this.insert(rawData); } @@ -116,7 +116,7 @@ class LogAuditModel extends BaseModel { * @param {Object} [logData.resourceModel] - Affected resource model. * @param {function} [callback] - Callback function. */ - traceModelChange (logData, callback) { + traceModelChange(logData, callback) { if (typeof callback === 'undefined') callback = function () { }; @@ -199,9 +199,8 @@ class LogAuditModel extends BaseModel { addCustomFilters(mongoFilters, customFilters) { // [ { filterName: 'customDateRange', filterValue: '10/15/2016 - 10/29/2016' } ] - let customDateRange = _.find(customFilters, {filterName: 'customDateRange'}); - if (customDateRange) { + if (customDateRange && customDateRange.filterValue) { let from = customDateRange.filterValue.split(' - ')[0]; let to = customDateRange.filterValue.split(' - ')[1]; @@ -210,6 +209,15 @@ class LogAuditModel extends BaseModel { mongoFilters.$and.push({createdAt: {$lte: to}}); } + // [ { filterName: 'customDiffString', filterValue: 'needle' } ] + let customDiffString = _.find(customFilters, {filterName: 'customDiffString'}); + if (customDiffString && customDiffString.filterValue) { + + let regExp = new RegExp(`.*${customDiffString.filterValue}.*`, 'gi'); + + mongoFilters.$and.push({diff: {$regex: regExp}}); + } + console.log('---'); console.log(mongoFilters); console.log(customFilters); diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index f9f8ad1..e32bc1c 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -29,6 +29,9 @@ {% include './partials/search-by-date-range.swig' %} {{ auditLoggingSearchByDateRange() }} + {% include './partials/search-by-diff-string.swig' %} + {{ auditLoggingSearchByDiffString() }} + {{ search_buttons() }}
          diff --git a/app/views/admin/log_audit/partials/search-by-diff-string.swig b/app/views/admin/log_audit/partials/search-by-diff-string.swig new file mode 100644 index 0000000..b3d7dd5 --- /dev/null +++ b/app/views/admin/log_audit/partials/search-by-diff-string.swig @@ -0,0 +1,13 @@ +{% macro auditLoggingSearchByDiffString() %} + + {% set filterName = 'customDiffString' %} + +
          + + {% set filterData = filters.customFilters | find({filterName: filterName}) %} + + +
          +{% endmacro %} From 75cb187f5b912bfb2872f08fe1139836c3b7992d Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 21:47:17 +0300 Subject: [PATCH 20/28] Update audit log list layout. --- app/models/log_audit.js | 8 +- app/views/admin/log_audit/list.swig | 166 ++++++++++++++++------------ 2 files changed, 101 insertions(+), 73 deletions(-) diff --git a/app/models/log_audit.js b/app/models/log_audit.js index caa71d5..602da12 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -218,10 +218,10 @@ class LogAuditModel extends BaseModel { mongoFilters.$and.push({diff: {$regex: regExp}}); } - console.log('---'); - console.log(mongoFilters); - console.log(customFilters); - console.log('---'); + // console.log('---'); + // console.log(mongoFilters); + // console.log(customFilters); + // console.log('---'); return mongoFilters; } diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index e32bc1c..586c2b5 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -8,108 +8,136 @@ {% block pagecontent %} -
          -
          -
          - {{ search2() }} -
          +
          +
          +
          + {{ search2() }} +
          - {% include './partials/search-by-resource.swig' %} - {{ auditLoggingSearchByResource() }} + {% include './partials/search-by-resource.swig' %} + {{ auditLoggingSearchByResource() }} - {% include './partials/search-by-action.swig' %} - {{ auditLoggingSearchByAction() }} + {% include './partials/search-by-action.swig' %} + {{ auditLoggingSearchByAction() }} - {% include './partials/search-by-user-id.swig' %} - {{ auditLoggingSearchByUserId() }} + {% include './partials/search-by-user-id.swig' %} + {{ auditLoggingSearchByUserId() }} - {% include './partials/search-by-resource-id.swig' %} - {{ auditLoggingSearchByResourceId() }} + {% include './partials/search-by-resource-id.swig' %} + {{ auditLoggingSearchByResourceId() }} - {% include './partials/search-by-date-range.swig' %} - {{ auditLoggingSearchByDateRange() }} + {% include './partials/search-by-date-range.swig' %} + {{ auditLoggingSearchByDateRange() }} - {% include './partials/search-by-diff-string.swig' %} - {{ auditLoggingSearchByDiffString() }} + {% include './partials/search-by-diff-string.swig' %} + {{ auditLoggingSearchByDiffString() }} - {{ search_buttons() }} + {{ search_buttons() }} +
          +
          {{ filters | json(2) }}
          +
          {{ filtersData | json(2) }}
          +
          -
          -
          {{ filters | json(2) }}
          -
          {{ filterData | json(2) }}
          +
          +
          +
          +
          {{ pagination_summary() }}
          + {{ pagination_pages() }}
          -
          -
          -
          -
          {{ pagination_summary() }}
          - {{ pagination_pages() }} +
          +
          +
          + Sort by: + {{ sorting_column({title: 'Timestamp', field: 'createdAt'}) }}
          -
          -
          -
          - Sort by: - {{ sorting_column({title: 'Timestamp', field: 'createdAt'}) }} -
          -
          - - {% for item in items %} - {% set viewActionUrl = baseUrl + '/' + item.id %} - {% set deleteActionUrl = baseUrl + '/' + item.id + '/delete' %} + {% for item in items %} + {% set viewActionUrl = baseUrl + '/' + item.id %} + {% set deleteActionUrl = baseUrl + '/' + item.id + '/delete' %} - +
          + {% endblock %} From fd56a19cacfad8ae55c0cdfb010ba931f07a3768 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:02:19 +0300 Subject: [PATCH 21/28] Update audit log list layout. --- app/controllers/audit_logs.js | 8 ++ app/views/admin/log_audit/list.swig | 210 ++++++++++++++-------------- 2 files changed, 113 insertions(+), 105 deletions(-) diff --git a/app/controllers/audit_logs.js b/app/controllers/audit_logs.js index b4109f2..59f6301 100644 --- a/app/controllers/audit_logs.js +++ b/app/controllers/audit_logs.js @@ -45,6 +45,14 @@ class AdminLogAudit extends AdminBaseCrudController { * @private */ this._viewsPath = 'log_audit'; + + /** + * Population fields + * + * @type {string} + * @private + */ + this._modelPopulateFields = 'userId'; } load(readyCallback) { diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 586c2b5..29e12ed 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -8,136 +8,136 @@ {% block pagecontent %} -
          -
          -
          - {{ search2() }} -
          +
          +
          +
          + {{ search2() }} +
          - {% include './partials/search-by-resource.swig' %} - {{ auditLoggingSearchByResource() }} + {% include './partials/search-by-resource.swig' %} + {{ auditLoggingSearchByResource() }} - {% include './partials/search-by-action.swig' %} - {{ auditLoggingSearchByAction() }} + {% include './partials/search-by-action.swig' %} + {{ auditLoggingSearchByAction() }} - {% include './partials/search-by-user-id.swig' %} - {{ auditLoggingSearchByUserId() }} + {% include './partials/search-by-user-id.swig' %} + {{ auditLoggingSearchByUserId() }} - {% include './partials/search-by-resource-id.swig' %} - {{ auditLoggingSearchByResourceId() }} + {% include './partials/search-by-resource-id.swig' %} + {{ auditLoggingSearchByResourceId() }} - {% include './partials/search-by-date-range.swig' %} - {{ auditLoggingSearchByDateRange() }} + {% include './partials/search-by-date-range.swig' %} + {{ auditLoggingSearchByDateRange() }} - {% include './partials/search-by-diff-string.swig' %} - {{ auditLoggingSearchByDiffString() }} + {% include './partials/search-by-diff-string.swig' %} + {{ auditLoggingSearchByDiffString() }} - {{ search_buttons() }} -
          -
          {{ filters | json(2) }}
          -
          {{ filtersData | json(2) }}
          -
          - -
          -
          -
          -
          {{ pagination_summary() }}
          - {{ pagination_pages() }} + {{ search_buttons() }}
          + {#
          {{ filters | json(2) }}
          #} + {#
          {{ filtersData | json(2) }}
          #}
          -
          -
          -
          - Sort by: - {{ sorting_column({title: 'Timestamp', field: 'createdAt'}) }} +
          +
          +
          +
          {{ pagination_summary() }}
          + {{ pagination_pages() }}
          - {% for item in items %} - {% set viewActionUrl = baseUrl + '/' + item.id %} - {% set deleteActionUrl = baseUrl + '/' + item.id + '/delete' %} - - -
          -
          - {% endblock %} From fa054dfe6b7287751e424c2b16244a98b0e3c8a7 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:09:10 +0300 Subject: [PATCH 22/28] Enable audit log for configuration and users. --- app/models/configuration.js | 10 ++- app/models/user.js | 124 +++++++++++++++++++----------------- 2 files changed, 75 insertions(+), 59 deletions(-) diff --git a/app/models/configuration.js b/app/models/configuration.js index d5f7abe..6cce424 100644 --- a/app/models/configuration.js +++ b/app/models/configuration.js @@ -23,6 +23,13 @@ class ConfigurationModel extends BaseModel { * @private */ this._configuration = null; + + /** + * To Enable Audit traces. + * 1. Call enableAudit() + * 2. Do not forget to add `last_modified_by` field to this schema. + */ + this.enableAudit(); } /** @@ -64,7 +71,8 @@ class ConfigurationModel extends BaseModel { searchBase: {type: String}, searchFilter: {type: String} } - } + }, + last_modified_by: {type: Types.ObjectId, ref: 'user'} }; // Creating DBO Schema diff --git a/app/models/user.js b/app/models/user.js index af151c1..83e1415 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -51,6 +51,13 @@ class UserModel extends BaseModel { * @private */ this._afterLDAPSignUp = null; + + /** + * To Enable Audit traces. + * 1. Call enableAudit() + * 2. Do not forget to add `last_modified_by` field to this schema. + */ + this.enableAudit(); } set afterLDAPSignUp(callback) { @@ -84,7 +91,8 @@ class UserModel extends BaseModel { "first": String }, "roles": [String], - notifications: [] + notifications: [], + last_modified_by: {type: Types.ObjectId, ref: 'user'} }; /** @@ -277,7 +285,7 @@ class UserModel extends BaseModel { }], done); })); } - + // Local strategy enabled by default but can be disabled in Configuration if (!authentication || !authentication.local || authentication.local.enabled !== false) { /** @@ -302,29 +310,29 @@ class UserModel extends BaseModel { }); })); } - + if (authentication && authentication.safemode && authentication.safemode.enabled === true && authentication.safemode.username && authentication.safemode.password) { - + /** * Local: Sign in using Safemode Email and Password */ passport.use("safemode", new LocalStrategy({usernameField: 'email'}, function (email, password, done) { email = email.toLowerCase(); - + //console.log('Trying to safemode authenticate user %s', email); - + if (email == authentication.safemode.username && password == authentication.safemode.password) { - + userModel.model.findOne({ email: authentication.safemode.username }).exec(function(err, dbUser){ if (err) { return done(err); } - + if (dbUser) { - return done(null, dbUser); + return done(null, dbUser); } - + var options = { "email": authentication.safemode.username, "password": authentication.safemode.password, @@ -335,40 +343,40 @@ class UserModel extends BaseModel { "first": "Safemode" } }; - var user = userModel.model(options); + var user = userModel.model(options); user.save(function(err, i){ if (err) { return done(err); } - + return done(null, user); }); }); - + } else { return done(); } })); - + } - + if (authentication && authentication.elvismode && authentication.elvismode.enabled === true && authentication.elvismode.password) { - + /** * Local: Sign in using Elvis Password, - * which allows you to impersonate another user + * which allows you to impersonate another user */ passport.use("elvismode", new LocalStrategy({usernameField: 'email'}, function (email, password, done) { email = email.toLowerCase(); - + //console.log('Trying to elvismode authenticate user %s', email); - + if (password != authentication.elvismode.password) { return done(); } - + userModel.findOne({email: email}, function (err, user) { if (err) { return done(); @@ -376,32 +384,32 @@ class UserModel extends BaseModel { if (!user) { return done(); } - + //console.log('Elvis is in the building'); - + return done(null, user); - }); + }); })); - + } - + } authenticate(request, callback) { var userModel = this; var authentication = DioscouriCore.ApplicationFacade.instance.config.env.authentication; - + var loggedUser = null; async.series([ function(asCb) { if (authentication && authentication.ldap && authentication.ldap.enabled === true) { - + userModel.passport.authenticate('ldapauth', function (err, user, info) { - + if (err) { userModel._logger.warn(err.dn); userModel._logger.warn(err.code); @@ -410,31 +418,31 @@ class UserModel extends BaseModel { console.error(err); return asCb(); } - + if (user) { loggedUser = user; } - + asCb(); - + })(request); - + } else { - + asCb(); } - }, + }, function (asCb) { if (loggedUser) { return asCb(); } - + if (authentication && authentication.safemode && authentication.safemode.enabled === true && authentication.safemode.username && authentication.safemode.password) { - + userModel.passport.authenticate('safemode', function (err, user, info) { - + if (err) { console.error(err); return asCb() @@ -443,13 +451,13 @@ class UserModel extends BaseModel { if (user) { loggedUser = user; } - + asCb(); - + })(request); - + } else { - + asCb(); } @@ -459,11 +467,11 @@ class UserModel extends BaseModel { if (loggedUser) { return asCb(); } - + if (authentication && authentication.elvismode && authentication.elvismode.enabled === true && authentication.elvismode.password) { - + userModel.passport.authenticate('elvismode', function (err, user, info) { - + if (err) { console.error(err); return asCb() @@ -472,52 +480,52 @@ class UserModel extends BaseModel { if (user) { loggedUser = user; } - + asCb(); - + })(request); - + } else { - + asCb(); } - }, + }, function (asCb) { if (loggedUser) { return asCb(); } - + if (!authentication || !authentication.local || authentication.local.enabled !== false) { - + userModel.passport.authenticate('local', function (err, user, info) { - + if (err) { console.error(err); return asCb(); } - + if (user) { loggedUser = user; } - + asCb(); - + })(request); - + } else { asCb(); } - } + } ], function(err){ if (err) { console.error(err); return callback(err, null, {message: 'Error authenticating'}); } - + if (!loggedUser) { return callback(null, null, {message: 'Unable to authenticate'}); } From 89fafa78e3de0c0a826869f1545095c94cbf7826 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:11:32 +0300 Subject: [PATCH 23/28] Update --- app/models/configuration.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/configuration.js b/app/models/configuration.js index 6cce424..e0a68ab 100644 --- a/app/models/configuration.js +++ b/app/models/configuration.js @@ -39,6 +39,8 @@ class ConfigurationModel extends BaseModel { */ defineSchema() { + var Types = this.mongoose.Schema.Types; + var schemaObject = { project: { name: {type: String} From a45adf9b76d8cc2163f8a9cc73487b79d3f4d8c9 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:31:21 +0300 Subject: [PATCH 24/28] Update --- app/models/log_audit.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/log_audit.js b/app/models/log_audit.js index 602da12..d88f680 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -75,7 +75,7 @@ class LogAuditModel extends BaseModel { fieldsChanged: [{type: String, index: true}], diff: {type: Types.Mixed}, // a JSON-stringified array of objects, stringified so it is searchable message: {type: String}, - userId: {type: Types.ObjectId, index: true}, + userId: {type: Types.ObjectId, ref: 'user', index: true}, createdAt: {type: Date, 'default': Date.now, index: true} }; @@ -131,7 +131,7 @@ class LogAuditModel extends BaseModel { this.writeRaw(merge(rawData, { action: 'created', - message: logData.item.name ? logData.item.name + ' was created.' : logData.resource + ' was created.' + message: typeof logData.item.name === 'string' ? logData.item.name + ' was created.' : logData.resource + ' was created.' })); return callback(); @@ -169,7 +169,7 @@ class LogAuditModel extends BaseModel { this.writeRaw(merge(rawData, { action: 'modified', - message: logData.oldItem.name ? logData.oldItem.name + ' was modified.' : logData.resource + ' was modified.', + message: typeof logData.oldItem.name === 'string' ? logData.oldItem.name + ' was modified.' : logData.resource + ' was modified.', fieldsChanged: diff.map(diffEntry => diffEntry.name), diff: JSON.stringify(diff) })); @@ -181,7 +181,7 @@ class LogAuditModel extends BaseModel { this.writeRaw(merge(rawData, { action: 'removed', - message: logData.item.name ? logData.item.name + ' was removed.' : logData.resource + ' was removed.' + message: typeof logData.item.name === 'string' ? logData.item.name + ' was removed.' : logData.resource + ' was removed.' })); return callback(); From 6db85359e4df2236172d0cfc705f727473ff5d57 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:33:41 +0300 Subject: [PATCH 25/28] Small update. --- app/views/admin/log_audit/list.swig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 29e12ed..1182bce 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -74,7 +74,7 @@ was {{ item.action }} - By: {{ item.userId.fullName }}, resourceId: {{ item.resourceId }} + By: {{ item.userId.fullName }}, resourceId: {{ item.resourceId.toString() }} {% if item.diff.length > 0 %} From 25e3ad2a72251c242375d968f880d64902fccceb Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Fri, 28 Oct 2016 22:35:41 +0300 Subject: [PATCH 26/28] Update --- app/controllers/audit_logs.js | 8 ++++++++ app/models/log_audit.js | 16 +--------------- app/views/admin/log_audit/list.swig | 3 --- .../partials/search-by-diff-string.swig | 13 ------------- 4 files changed, 9 insertions(+), 31 deletions(-) delete mode 100644 app/views/admin/log_audit/partials/search-by-diff-string.swig diff --git a/app/controllers/audit_logs.js b/app/controllers/audit_logs.js index 59f6301..6278b56 100644 --- a/app/controllers/audit_logs.js +++ b/app/controllers/audit_logs.js @@ -46,6 +46,14 @@ class AdminLogAudit extends AdminBaseCrudController { */ this._viewsPath = 'log_audit'; + /** + * Mongoose Searchable fields + * + * @type {string[]} + * @private + */ + this._modelSearchableFields = ['diff']; + /** * Population fields * diff --git a/app/models/log_audit.js b/app/models/log_audit.js index d88f680..498cadc 100644 --- a/app/models/log_audit.js +++ b/app/models/log_audit.js @@ -56,7 +56,7 @@ class LogAuditModel extends BaseModel { * * @type {Array} */ - this.customFilters = ['customDateRange', 'customDiffString']; + this.customFilters = ['customDateRange']; } /** @@ -209,20 +209,6 @@ class LogAuditModel extends BaseModel { mongoFilters.$and.push({createdAt: {$lte: to}}); } - // [ { filterName: 'customDiffString', filterValue: 'needle' } ] - let customDiffString = _.find(customFilters, {filterName: 'customDiffString'}); - if (customDiffString && customDiffString.filterValue) { - - let regExp = new RegExp(`.*${customDiffString.filterValue}.*`, 'gi'); - - mongoFilters.$and.push({diff: {$regex: regExp}}); - } - - // console.log('---'); - // console.log(mongoFilters); - // console.log(customFilters); - // console.log('---'); - return mongoFilters; } } diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 1182bce..3058131 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -29,9 +29,6 @@ {% include './partials/search-by-date-range.swig' %} {{ auditLoggingSearchByDateRange() }} - {% include './partials/search-by-diff-string.swig' %} - {{ auditLoggingSearchByDiffString() }} - {{ search_buttons() }}
          {#
          {{ filters | json(2) }}
          #} diff --git a/app/views/admin/log_audit/partials/search-by-diff-string.swig b/app/views/admin/log_audit/partials/search-by-diff-string.swig deleted file mode 100644 index b3d7dd5..0000000 --- a/app/views/admin/log_audit/partials/search-by-diff-string.swig +++ /dev/null @@ -1,13 +0,0 @@ -{% macro auditLoggingSearchByDiffString() %} - - {% set filterName = 'customDiffString' %} - -
          - - {% set filterData = filters.customFilters | find({filterName: filterName}) %} - - -
          -{% endmacro %} From 52e84ca882fe9c3ece2240dc57bb633d5c5c01e7 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Mon, 31 Oct 2016 13:48:08 +0300 Subject: [PATCH 27/28] Update --- app/views/admin/log_audit/list.swig | 14 ++++++++++++-- resources/bower.json | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 3058131..42e4ae2 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -6,6 +6,16 @@ {{ pageheader({title: 'Audit logs'}) }} {% endblock %} +{% macro diffValue(val) %} +
          + {% if val|isObject %} +
          {{ val|json(1) }}
          + {% else %} + {{ val }} + {% endif %} +
          +{% endmacro %} + {% block pagecontent %}
          @@ -93,12 +103,12 @@ {{ d.name }}
          -
          {{ d.from | json(2) }}
          +
          {{ diffValue(d.from) }}
          -
          {{ d.to | json(2) }}
          +
          {{ diffValue(d.to) }}
          diff --git a/resources/bower.json b/resources/bower.json index 0a02d93..483fcbd 100644 --- a/resources/bower.json +++ b/resources/bower.json @@ -28,6 +28,6 @@ "jquery-ui": "~1.11.4", "ckeditor": "~4.5.4", "bootstrap-daterangepicker": "2.1.24", - "moment": "^2.15.2" + "moment": "2.15.2" } } From 6ed6d926240a71dbdc2cc988816ce8a246a98233 Mon Sep 17 00:00:00 2001 From: Bushev Yuriy Date: Mon, 31 Oct 2016 13:57:20 +0300 Subject: [PATCH 28/28] Update --- app/assets/stylesheets/build.min.css | 2 +- app/views/admin/log_audit/list.swig | 4 ++-- resources/stylesheets/custom.css | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/build.min.css b/app/assets/stylesheets/build.min.css index 4734964..001b189 100644 --- a/app/assets/stylesheets/build.min.css +++ b/app/assets/stylesheets/build.min.css @@ -39,4 +39,4 @@ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. - */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px solid transparent;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker,.bootstrap-timepicker .dropdown-menu{width:100%}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--classic .select2-results>.select2-results__options,.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.daterangepicker.single .calendar,.daterangepicker.single .ranges,.ranges{float:none}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */.select2-container.form-control{background:0 0;box-shadow:none;border:none;display:block;margin:0;padding:0}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input,.select2-search input{border-color:#ccc;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input{background:0 0;padding:0;background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-search input{background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}.select2-container .select2-choice{height:34px;line-height:1.42857}.select2-container.select2-container-multi.form-control{height:auto}.input-group-sm .select2-container .select2-choice,.select2-container.input-sm .select2-choice{height:30px;line-height:1.5;border-radius:3px}.input-group-lg .select2-container .select2-choice,.select2-container.input-lg .select2-choice{height:46px;line-height:1.33333;border-radius:6px}.select2-container-multi .select2-choices .select2-search-field input{height:32px;margin:0}.input-group-sm .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-sm .select2-choices .select2-search-field input{height:28px}.input-group-lg .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-lg .select2-choices .select2-search-field input{height:44px}.select2-choice>span:first-child,.select2-chosen,.select2-container .select2-choices .select2-search-field input{padding:6px 12px}.input-group-sm .select2-choice>span:first-child,.input-group-sm .select2-choices .select2-search-field input,.input-group-sm .select2-chosen,.input-sm .select2-choice>span:first-child,.input-sm .select2-choices .select2-search-field input,.input-sm .select2-chosen{padding:5px 10px}.input-group-lg .select2-choice>span:first-child,.input-group-lg .select2-choices .select2-search-field input,.input-group-lg .select2-chosen,.input-lg .select2-choice>span:first-child,.input-lg .select2-choices .select2-search-field input,.input-lg .select2-chosen{padding:10px 16px}.select2-container-multi .select2-choices .select2-search-choice{margin-top:5px;margin-bottom:3px}.input-group-sm .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-sm .select2-choices .select2-search-choice{margin-top:3px;margin-bottom:2px}.input-group-lg .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-lg .select2-choices .select2-search-choice{line-height:24px}.select2-container .select2-choice .select2-arrow,.select2-container .select2-choice div{border-left:none;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-dropdown-open .select2-choice .select2-arrow,.select2-dropdown-open .select2-choice div{border-left-color:transparent;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice div b{background-position:0 3px}.select2-dropdown-open .select2-choice .select2-arrow b,.select2-dropdown-open .select2-choice div b{background-position:-18px 3px}.input-group-sm .select2-container .select2-choice .select2-arrow b,.input-group-sm .select2-container .select2-choice div b,.select2-container.input-sm .select2-choice .select2-arrow b,.select2-container.input-sm .select2-choice div b{background-position:0 1px}.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-sm .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,.select2-dropdown-open.input-sm .select2-choice div b{background-position:-18px 1px}.input-group-lg .select2-container .select2-choice .select2-arrow b,.input-group-lg .select2-container .select2-choice div b,.select2-container.input-lg .select2-choice .select2-arrow b,.select2-container.input-lg .select2-choice div b{background-position:0 9px}.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-lg .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,.select2-dropdown-open.input-lg .select2-choice div b{background-position:-18px 9px}.has-warning .select2-choice,.has-warning .select2-choices{border-color:#8a6d3b}.has-warning .select2-container-active .select2-choice,.has-warning .select2-container-multi.select2-container-active .select2-choices{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-choice,.has-error .select2-choices{border-color:#a94442}.has-error .select2-container-active .select2-choice,.has-error .select2-container-multi.select2-container-active .select2-choices{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-choice,.has-success .select2-choices{border-color:#3c763d}.has-success .select2-container-active .select2-choice,.has-success .select2-container-multi.select2-container-active .select2-choices{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.select2-container-active .select2-choice,.select2-container-multi.select2-container-active .select2-choices{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.select2-drop-active{border-color:#66afe9}.select2-drop-auto-width,.select2-drop.select2-drop-above.select2-drop-active{border-top-color:#66afe9}.input-group.select2-bootstrap-prepend [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.select2-dropdown-open [class^=select2-choice]{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-top-right-radius:0!important;border-top-left-radius:0!important;border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;background:#fff;filter:none}.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:6px!important}.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:6px!important}.select2-results .select2-highlighted{color:#fff;background-color:#337ab7}.select2-bootstrap-append .input-group-btn,.select2-bootstrap-append .input-group-btn .btn,.select2-bootstrap-append .select2-container-multiple,.select2-bootstrap-prepend .input-group-btn,.select2-bootstrap-prepend .input-group-btn .btn,.select2-bootstrap-prepend .select2-container-multiple{vertical-align:top}.select2-container-multi .select2-choices .select2-search-choice{color:#555;background:#fff;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:none;box-shadow:none}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#ebebeb;border-color:#adadad;color:#333;-webkit-box-shadow:none;box-shadow:none}.select2-search-choice-close{margin-top:-7px;top:50%}.select2-container .select2-choice abbr{top:50%}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background-color:#fcf8e3;color:#8a6d3b}.select2-container.select2-container-disabled .select2-choice,.select2-container.select2-container-disabled .select2-choices{cursor:not-allowed;background-color:#eee;border-color:#ccc}.select2-container.select2-container-disabled .select2-choice .select2-arrow,.select2-container.select2-container-disabled .select2-choice div,.select2-container.select2-container-disabled .select2-choices .select2-arrow,.select2-container.select2-container-disabled .select2-choices div{background-color:transparent;border-left:1px solid transparent}.select2-container-multi .select2-choices .select2-search-field input.select2-active,.select2-more-results.select2-active,.select2-search input.select2-active{background-position:99%;background-position:right 4px center}.select2-offscreen,.select2-offscreen:focus{width:1px!important;height:1px!important;position:absolute!important}.daterangepicker{position:absolute;color:inherit;background:#fff;border-radius:4px;width:278px;padding:4px;margin-top:1px;top:100px;left:20px}.daterangepicker:after,.daterangepicker:before{position:absolute;display:inline-block;content:''}.daterangepicker:before{top:-7px;border-right:7px solid transparent;border-left:7px solid transparent;border-bottom:7px solid #ccc}.daterangepicker:after{top:-6px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.daterangepicker.opensleft:before{right:9px}.daterangepicker.opensleft:after{right:10px}.daterangepicker.openscenter:after,.daterangepicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.daterangepicker.opensright:before{left:9px}.daterangepicker.opensright:after{left:10px}.daterangepicker.dropup{margin-top:-5px}.daterangepicker.dropup:before{top:initial;bottom:-7px;border-bottom:initial;border-top:7px solid #ccc}.daterangepicker.dropup:after{top:initial;bottom:-6px;border-bottom:initial;border-top:6px solid #fff}.daterangepicker.dropdown-menu{max-width:none;z-index:3001}.daterangepicker.show-calendar .calendar{display:block}.daterangepicker .calendar{display:none;max-width:270px;margin:4px}.daterangepicker .calendar.single .calendar-table{border:none}.daterangepicker .calendar td,.daterangepicker .calendar th{white-space:nowrap;text-align:center;min-width:32px}.daterangepicker .calendar-table{border:1px solid #fff;padding:4px;border-radius:4px;background:#fff}.daterangepicker table{width:100%;margin:0}.daterangepicker td,.daterangepicker th{text-align:center;width:20px;height:20px;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer}.daterangepicker td.available:hover,.daterangepicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit}.daterangepicker td.week,.daterangepicker th.week{font-size:80%;color:#ccc}.daterangepicker td.off,.daterangepicker td.off.end-date,.daterangepicker td.off.in-range,.daterangepicker td.off.start-date{background-color:#fff;border-color:transparent;color:#999}.daterangepicker td.in-range{background-color:#ebf4f8;border-color:transparent;color:#000;border-radius:0}.daterangepicker td.start-date{border-radius:4px 0 0 4px}.daterangepicker td.end-date{border-radius:0 4px 4px 0}.daterangepicker td.start-date.end-date{border-radius:4px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#357ebd;border-color:transparent;color:#fff}.daterangepicker th.month{width:auto}.daterangepicker option.disabled,.daterangepicker td.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.daterangepicker select.monthselect,.daterangepicker select.yearselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default}.daterangepicker select.monthselect{margin-right:2%;width:56%}.daterangepicker select.yearselect{width:40%}.daterangepicker select.ampmselect,.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect{width:50px;margin-bottom:0}.daterangepicker .input-mini{border:1px solid #ccc;border-radius:4px;color:#555;height:30px;line-height:30px;display:block;vertical-align:middle;margin:0 0 5px;padding:0 6px 0 28px;width:100%}.daterangepicker .input-mini.active{border:1px solid #08c;border-radius:4px}.daterangepicker .daterangepicker_input{position:relative}.daterangepicker .daterangepicker_input i{position:absolute;left:8px;top:8px}.daterangepicker.rtl .input-mini{padding-right:28px;padding-left:6px}.daterangepicker.rtl .daterangepicker_input i{left:auto;right:8px}.daterangepicker .calendar-time{text-align:center;margin:5px auto;line-height:30px;position:relative;padding-left:28px}.daterangepicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.ranges li,.resource_action_checkbox{cursor:pointer}.ranges{font-size:11px;margin:4px;text-align:left}.ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.ranges li{font-size:13px;background:#f5f5f5;border:1px solid #f5f5f5;border-radius:4px;color:#08c;padding:3px 12px;margin-bottom:8px}.ranges li.active,.ranges li:hover{background:#08c;border:1px solid #08c;color:#fff}@media (min-width:564px){.daterangepicker.ltr .calendar.right .calendar-table,.daterangepicker.rtl .calendar.left .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.rtl .calendar.right .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.daterangepicker{width:auto}.daterangepicker .ranges ul{width:160px}.daterangepicker.single .ranges ul{width:100%}.daterangepicker.single .calendar.left{clear:none}.daterangepicker.single.ltr .calendar,.daterangepicker.single.ltr .ranges{float:left}.daterangepicker.single.rtl .calendar,.daterangepicker.single.rtl .ranges{float:right}.daterangepicker.ltr{direction:ltr;text-align:left}.daterangepicker.ltr .calendar.left{clear:left;margin-right:0}.daterangepicker.ltr .calendar.right{margin-left:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.ltr .left .daterangepicker_input{padding-right:12px}.daterangepicker.ltr .calendar,.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl{direction:rtl;text-align:right}.daterangepicker.rtl .calendar.left{clear:right;margin-left:0}.daterangepicker.rtl .calendar.right{margin-right:0}.daterangepicker.rtl .calendar.left .calendar-table,.daterangepicker.rtl .left .daterangepicker_input{padding-left:12px}.daterangepicker.rtl .calendar,.daterangepicker.rtl .ranges{text-align:right;float:right}}@media (min-width:730px){.daterangepicker .ranges{width:auto}.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl .ranges{float:right}.daterangepicker .calendar.left{clear:none!important}}.pagination{margin:0}th.sorting{background:url(/images/sort_both.png) center right no-repeat}th.sorting.asc{background:url(/images/sort_asc.png) center right no-repeat}th.sorting.desc{background:url(/images/sort_desc.png) center right no-repeat}.media-body{padding-left:5px}.validation-text{font-weight:400;font-size:11px} \ No newline at end of file + */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px solid transparent;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker,.bootstrap-timepicker .dropdown-menu{width:100%}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--classic .select2-results>.select2-results__options,.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.daterangepicker.single .calendar,.daterangepicker.single .ranges,.ranges{float:none}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */.select2-container.form-control{background:0 0;box-shadow:none;border:none;display:block;margin:0;padding:0}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input,.select2-search input{border-color:#ccc;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice,.select2-container .select2-choices,.select2-container .select2-choices .select2-search-field input{background:0 0;padding:0;background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-search input{background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}.select2-container .select2-choice{height:34px;line-height:1.42857}.select2-container.select2-container-multi.form-control{height:auto}.input-group-sm .select2-container .select2-choice,.select2-container.input-sm .select2-choice{height:30px;line-height:1.5;border-radius:3px}.input-group-lg .select2-container .select2-choice,.select2-container.input-lg .select2-choice{height:46px;line-height:1.33333;border-radius:6px}.select2-container-multi .select2-choices .select2-search-field input{height:32px;margin:0}.input-group-sm .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-sm .select2-choices .select2-search-field input{height:28px}.input-group-lg .select2-container-multi .select2-choices .select2-search-field input,.select2-container-multi.input-lg .select2-choices .select2-search-field input{height:44px}.select2-choice>span:first-child,.select2-chosen,.select2-container .select2-choices .select2-search-field input{padding:6px 12px}.input-group-sm .select2-choice>span:first-child,.input-group-sm .select2-choices .select2-search-field input,.input-group-sm .select2-chosen,.input-sm .select2-choice>span:first-child,.input-sm .select2-choices .select2-search-field input,.input-sm .select2-chosen{padding:5px 10px}.input-group-lg .select2-choice>span:first-child,.input-group-lg .select2-choices .select2-search-field input,.input-group-lg .select2-chosen,.input-lg .select2-choice>span:first-child,.input-lg .select2-choices .select2-search-field input,.input-lg .select2-chosen{padding:10px 16px}.select2-container-multi .select2-choices .select2-search-choice{margin-top:5px;margin-bottom:3px}.input-group-sm .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-sm .select2-choices .select2-search-choice{margin-top:3px;margin-bottom:2px}.input-group-lg .select2-container-multi .select2-choices .select2-search-choice,.select2-container-multi.input-lg .select2-choices .select2-search-choice{line-height:24px}.select2-container .select2-choice .select2-arrow,.select2-container .select2-choice div{border-left:none;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-dropdown-open .select2-choice .select2-arrow,.select2-dropdown-open .select2-choice div{border-left-color:transparent;background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice div b{background-position:0 3px}.select2-dropdown-open .select2-choice .select2-arrow b,.select2-dropdown-open .select2-choice div b{background-position:-18px 3px}.input-group-sm .select2-container .select2-choice .select2-arrow b,.input-group-sm .select2-container .select2-choice div b,.select2-container.input-sm .select2-choice .select2-arrow b,.select2-container.input-sm .select2-choice div b{background-position:0 1px}.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-sm .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,.select2-dropdown-open.input-sm .select2-choice div b{background-position:-18px 1px}.input-group-lg .select2-container .select2-choice .select2-arrow b,.input-group-lg .select2-container .select2-choice div b,.select2-container.input-lg .select2-choice .select2-arrow b,.select2-container.input-lg .select2-choice div b{background-position:0 9px}.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,.input-group-lg .select2-dropdown-open .select2-choice div b,.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,.select2-dropdown-open.input-lg .select2-choice div b{background-position:-18px 9px}.has-warning .select2-choice,.has-warning .select2-choices{border-color:#8a6d3b}.has-warning .select2-container-active .select2-choice,.has-warning .select2-container-multi.select2-container-active .select2-choices{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-choice,.has-error .select2-choices{border-color:#a94442}.has-error .select2-container-active .select2-choice,.has-error .select2-container-multi.select2-container-active .select2-choices{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-choice,.has-success .select2-choices{border-color:#3c763d}.has-success .select2-container-active .select2-choice,.has-success .select2-container-multi.select2-container-active .select2-choices{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.select2-container-active .select2-choice,.select2-container-multi.select2-container-active .select2-choices{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.select2-drop-active{border-color:#66afe9}.select2-drop-auto-width,.select2-drop.select2-drop-above.select2-drop-active{border-top-color:#66afe9}.input-group.select2-bootstrap-prepend [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.select2-dropdown-open [class^=select2-choice]{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-top-right-radius:0!important;border-top-left-radius:0!important;border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;background:#fff;filter:none}.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-right-radius:6px!important}.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:3px!important}.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=select2-choice]{border-bottom-left-radius:6px!important}.select2-results .select2-highlighted{color:#fff;background-color:#337ab7}.select2-bootstrap-append .input-group-btn,.select2-bootstrap-append .input-group-btn .btn,.select2-bootstrap-append .select2-container-multiple,.select2-bootstrap-prepend .input-group-btn,.select2-bootstrap-prepend .input-group-btn .btn,.select2-bootstrap-prepend .select2-container-multiple{vertical-align:top}.select2-container-multi .select2-choices .select2-search-choice{color:#555;background:#fff;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:none;box-shadow:none}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#ebebeb;border-color:#adadad;color:#333;-webkit-box-shadow:none;box-shadow:none}.select2-search-choice-close{margin-top:-7px;top:50%}.select2-container .select2-choice abbr{top:50%}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background-color:#fcf8e3;color:#8a6d3b}.select2-container.select2-container-disabled .select2-choice,.select2-container.select2-container-disabled .select2-choices{cursor:not-allowed;background-color:#eee;border-color:#ccc}.select2-container.select2-container-disabled .select2-choice .select2-arrow,.select2-container.select2-container-disabled .select2-choice div,.select2-container.select2-container-disabled .select2-choices .select2-arrow,.select2-container.select2-container-disabled .select2-choices div{background-color:transparent;border-left:1px solid transparent}.select2-container-multi .select2-choices .select2-search-field input.select2-active,.select2-more-results.select2-active,.select2-search input.select2-active{background-position:99%;background-position:right 4px center}.select2-offscreen,.select2-offscreen:focus{width:1px!important;height:1px!important;position:absolute!important}.daterangepicker{position:absolute;color:inherit;background:#fff;border-radius:4px;width:278px;padding:4px;margin-top:1px;top:100px;left:20px}.daterangepicker:after,.daterangepicker:before{position:absolute;display:inline-block;content:''}.daterangepicker:before{top:-7px;border-right:7px solid transparent;border-left:7px solid transparent;border-bottom:7px solid #ccc}.daterangepicker:after{top:-6px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.daterangepicker.opensleft:before{right:9px}.daterangepicker.opensleft:after{right:10px}.daterangepicker.openscenter:after,.daterangepicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.daterangepicker.opensright:before{left:9px}.daterangepicker.opensright:after{left:10px}.daterangepicker.dropup{margin-top:-5px}.daterangepicker.dropup:before{top:initial;bottom:-7px;border-bottom:initial;border-top:7px solid #ccc}.daterangepicker.dropup:after{top:initial;bottom:-6px;border-bottom:initial;border-top:6px solid #fff}.daterangepicker.dropdown-menu{max-width:none;z-index:3001}.daterangepicker.show-calendar .calendar{display:block}.daterangepicker .calendar{display:none;max-width:270px;margin:4px}.daterangepicker .calendar.single .calendar-table{border:none}.daterangepicker .calendar td,.daterangepicker .calendar th{white-space:nowrap;text-align:center;min-width:32px}.daterangepicker .calendar-table{border:1px solid #fff;padding:4px;border-radius:4px;background:#fff}.daterangepicker table{width:100%;margin:0}.daterangepicker td,.daterangepicker th{text-align:center;width:20px;height:20px;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer}.daterangepicker td.available:hover,.daterangepicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit}.daterangepicker td.week,.daterangepicker th.week{font-size:80%;color:#ccc}.daterangepicker td.off,.daterangepicker td.off.end-date,.daterangepicker td.off.in-range,.daterangepicker td.off.start-date{background-color:#fff;border-color:transparent;color:#999}.daterangepicker td.in-range{background-color:#ebf4f8;border-color:transparent;color:#000;border-radius:0}.daterangepicker td.start-date{border-radius:4px 0 0 4px}.daterangepicker td.end-date{border-radius:0 4px 4px 0}.daterangepicker td.start-date.end-date{border-radius:4px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#357ebd;border-color:transparent;color:#fff}.daterangepicker th.month{width:auto}.daterangepicker option.disabled,.daterangepicker td.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.daterangepicker select.monthselect,.daterangepicker select.yearselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default}.daterangepicker select.monthselect{margin-right:2%;width:56%}.daterangepicker select.yearselect{width:40%}.daterangepicker select.ampmselect,.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect{width:50px;margin-bottom:0}.daterangepicker .input-mini{border:1px solid #ccc;border-radius:4px;color:#555;height:30px;line-height:30px;display:block;vertical-align:middle;margin:0 0 5px;padding:0 6px 0 28px;width:100%}.daterangepicker .input-mini.active{border:1px solid #08c;border-radius:4px}.daterangepicker .daterangepicker_input{position:relative}.daterangepicker .daterangepicker_input i{position:absolute;left:8px;top:8px}.daterangepicker.rtl .input-mini{padding-right:28px;padding-left:6px}.daterangepicker.rtl .daterangepicker_input i{left:auto;right:8px}.daterangepicker .calendar-time{text-align:center;margin:5px auto;line-height:30px;position:relative;padding-left:28px}.daterangepicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.ranges li,.resource_action_checkbox{cursor:pointer}.ranges{font-size:11px;margin:4px;text-align:left}.ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.ranges li{font-size:13px;background:#f5f5f5;border:1px solid #f5f5f5;border-radius:4px;color:#08c;padding:3px 12px;margin-bottom:8px}.ranges li.active,.ranges li:hover{background:#08c;border:1px solid #08c;color:#fff}@media (min-width:564px){.daterangepicker.ltr .calendar.right .calendar-table,.daterangepicker.rtl .calendar.left .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.rtl .calendar.right .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.daterangepicker{width:auto}.daterangepicker .ranges ul{width:160px}.daterangepicker.single .ranges ul{width:100%}.daterangepicker.single .calendar.left{clear:none}.daterangepicker.single.ltr .calendar,.daterangepicker.single.ltr .ranges{float:left}.daterangepicker.single.rtl .calendar,.daterangepicker.single.rtl .ranges{float:right}.daterangepicker.ltr{direction:ltr;text-align:left}.daterangepicker.ltr .calendar.left{clear:left;margin-right:0}.daterangepicker.ltr .calendar.right{margin-left:0}.daterangepicker.ltr .calendar.left .calendar-table,.daterangepicker.ltr .left .daterangepicker_input{padding-right:12px}.daterangepicker.ltr .calendar,.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl{direction:rtl;text-align:right}.daterangepicker.rtl .calendar.left{clear:right;margin-left:0}.daterangepicker.rtl .calendar.right{margin-right:0}.daterangepicker.rtl .calendar.left .calendar-table,.daterangepicker.rtl .left .daterangepicker_input{padding-left:12px}.daterangepicker.rtl .calendar,.daterangepicker.rtl .ranges{text-align:right;float:right}}@media (min-width:730px){.daterangepicker .ranges{width:auto}.daterangepicker.ltr .ranges{float:left}.daterangepicker.rtl .ranges{float:right}.daterangepicker .calendar.left{clear:none!important}}.pagination{margin:0}th.sorting{background:url(/images/sort_both.png) center right no-repeat}th.sorting.asc{background:url(/images/sort_asc.png) center right no-repeat}th.sorting.desc{background:url(/images/sort_desc.png) center right no-repeat}.media-body{padding-left:5px}.validation-text{font-weight:400;font-size:11px}.table-responsive{overflow-x:auto;min-height:.01%} \ No newline at end of file diff --git a/app/views/admin/log_audit/list.swig b/app/views/admin/log_audit/list.swig index 42e4ae2..4cf30e7 100644 --- a/app/views/admin/log_audit/list.swig +++ b/app/views/admin/log_audit/list.swig @@ -103,12 +103,12 @@ {{ d.name }}
          -
          {{ diffValue(d.from) }}
          + {{ diffValue(d.from) }}
          -
          {{ diffValue(d.to) }}
          + {{ diffValue(d.to) }}
          diff --git a/resources/stylesheets/custom.css b/resources/stylesheets/custom.css index 4bdcdb1..0fb2e4e 100644 --- a/resources/stylesheets/custom.css +++ b/resources/stylesheets/custom.css @@ -25,4 +25,9 @@ th.sorting.desc { .validation-text { font-weight: normal; font-size: 11px; +} + +.table-responsive { + overflow-x: auto; + min-height: 0.01%; } \ No newline at end of file