From 13b33d4532ab5bd877ef09cea99cbb0c57235b9c Mon Sep 17 00:00:00 2001 From: Chauncey McAskill Date: Tue, 12 Mar 2024 14:11:21 -0400 Subject: [PATCH] feat(admin): Improve validation/requirements in Tabulator Input Changed: - When column is required, a red asterisk is appended to the column title. - Column title will be prepended to the row index in the validation feedback message. - Duplicate validation messages will be suppressed to minimize noise. --- .../assets/dist/scripts/charcoal.admin.js | 26 ++++++++++++++++--- .../assets/dist/scripts/charcoal.admin.min.js | 2 +- .../admin/property/input/tabulator.js | 26 ++++++++++++++++--- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/packages/admin/assets/dist/scripts/charcoal.admin.js b/packages/admin/assets/dist/scripts/charcoal.admin.js index cedbe1249..d91f13704 100644 --- a/packages/admin/assets/dist/scripts/charcoal.admin.js +++ b/packages/admin/assets/dist/scripts/charcoal.admin.js @@ -12523,6 +12523,13 @@ Charcoal.Admin.Property_Input_Selectize_Tags.prototype.init_clipboard = function }; } + if ( + column?.validator === 'required' || + (Array.isArray(column?.validator) && column.validator.includes('required')) + ) { + column.title += ' *'; + } + return column; }; @@ -12835,20 +12842,33 @@ Charcoal.Admin.Property_Input_Selectize_Tags.prototype.init_clipboard = function const propLabel = document.querySelector('label[for="' + this.input_id.replace(/_[a-z]{2}$/, '') + '"]').textContent; + const uniqueMessagesPerRow = {}; + validity.forEach((cellComponent) => { const rowComponent = cellComponent.getRow(); - const rowIndex = (rowComponent.getIndex() ?? (rowComponent.getPosition(true) + 1)); + const colComponent = cellComponent.getColumn(); - const fieldLabel = `${propLabel || this.tabulator_input.name} #${rowIndex}`; + const colTitle = colComponent.getElement().textContent.replace(/\s+\*$/, '').trim(); + const rowIndex = (rowComponent.getIndex() ?? (rowComponent.getPosition(true) + 1)); + + const fieldLabel = `${propLabel || this.tabulator_input.name} ${colTitle} #${rowIndex}`; const constraints = cellComponent._getSelf().modules.validate.invalid ?? []; + uniqueMessagesPerRow[rowIndex] ??= {}; + constraints.forEach((constraint) => { - let message = ( + const message = ( constraint.parameters?.validationMessage ?? resolveTabulatorValidatorMessage(constraint) ?? formWidgetL10n.validation.badInput ); + if (uniqueMessagesPerRow?.[rowIndex]?.[message]) { + return; + } + + uniqueMessagesPerRow[rowIndex][message] = true; + Charcoal.Admin.feedback([ { level: 'error', message: commonL10n.errorTemplate.replaceMap({ diff --git a/packages/admin/assets/dist/scripts/charcoal.admin.min.js b/packages/admin/assets/dist/scripts/charcoal.admin.min.js index b7b025be4..798ca7e9a 100644 --- a/packages/admin/assets/dist/scripts/charcoal.admin.min.js +++ b/packages/admin/assets/dist/scripts/charcoal.admin.min.js @@ -1,2 +1,2 @@ /*! @charcoal/admin */ -$.fn.enable=function(){return this.each(function(){$(this).removeAttr("disabled").prop("disabled",!1)}),this},$.fn.disable=function(){return this.each(function(){$(this).attr("disabled",!0).prop("disabled",!0)}),this},$.fn.exists=function(){return 0>>0,o=arguments[1],r=0;r'+o[t].join('

')+"

",level:t,type:e.type,buttons:i},s=this.getDisplay(),l=null;switch(s){case"dialog":case"toast":l=s;break;default:l=e.display}"toast"===l?(a.dismissible=0===i.length,new p(a)):BootstrapDialog.show(a)}this.empty()}return this},o.prototype.empty=function(){t(),this.display=null,this.actions=[],this.storage=[]},function(t,e){if(i.feedback(),this.validLevel(t))return this.setLevel(t),this.validMessage(e)&&this.setMessage(e),this;throw new TypeError("Feedback level required. Must be one of: "+r.join(", "))}),p=(l.createFromObject=function(t){var e=t.level||null,t=t.message||null;return e||t?new l(e,t):null},l.prototype={toString:function(){return this.message()},level:function(){return this._level||null},setLevel:function(t){var e=c.type(t);if("string"!==e)throw new TypeError("Feedback level must be a string, received "+e);return o.prototype.assertValidLevel(t),t in a&&(t=a[t]),this._level=t,this},validLevel:function(t){return o.prototype.isValidLevel(t)},message:function(){return this._message||null},setMessage:function(t){var e=c.type(t);if("string"!==e)throw new TypeError("Feedback message must be a string, received "+e);return this._message=t,this},validMessage:function(t){return o.prototype.validMessage(t)}},function(t){var e=c.type(t);if("object"!==e)throw new TypeError("Notification config must be an associative array, received "+e);return this.validMessage(t.message)&&this.setMessage(t.message),this.config=c.extend({},{id:BootstrapDialog.newGuid(),delay:s.delay},t),this.$elem=c(''),this.$elem.prop("id",this.config.id),this.$elem.addClass("alert-"+this.config.type.replace("type-","")),this.config.dismissible&&(this.$elem.addClass("alert-dismissible"),(e=c('')).append(''),this.$elem.append(e)),this.config.message&&((t=c('
')).html("").append(this.config.message),this.$elem.append(t)),this.$elem.appendTo(".c-notifications").addClass("show"),this.$elem.on("closed.bs.alert",{notification:this},function(t){t=t.data.notification;t.$elem.off(".charcoal.feedback"),t.closeTimer&&window.clearTimeout(t.closeTimer)}),"number"==typeof this.config.delay&&0{text}';return t.onshown=function(r){var t=Charcoal.Admin.admin_url()+"widget/load";r.xhr=$.ajax({method:"POST",url:t,data:e,dataType:"json"}),r.xhr.then(function(t,e,i){return t&&t.success?$.Deferred().resolve(t,e,i):t.feedbacks?$.Deferred().reject(i,e,t.feedbacks):$.Deferred().reject(i,e,widgetL10n.loadingFailed)}).done(function(t){r.setMessage(t.widget_html),"function"==typeof i&&i(t,r),$('[data-toggle="tooltip"]',r.getModalBody()).tooltip()}).fail(function(t,e,i){r.setType(BootstrapDialog.TYPE_DANGER),r.setMessage(widgetL10n.loadingFailed);var o="";"string"===$.type(i)&&t.responseJSON&&t.responseJSON.feedbacks&&(i=t.responseJSON.feedbacks),$.isArray(i)?$.each(i,function(t,e){e.message&&("error"===e.level&&(e.level="danger"),o+=c.replaceMap({"{type}":e.level,"{text}":e.message}))}):"string"===$.type(i)&&(o=c.replaceMap({"{type}":"danger","{text}":i})),o&&r.setMessage(o),$('[data-toggle="tooltip"]',r.getModalBody()).tooltip()}),Charcoal.Admin.manager().render()},t.message=function(t){var e=$(c.replaceMap({"{type}":"warning","{text}":widgetL10n.loading}));return a||t.getModalHeader().addClass("d-none"),s||t.getModalFooter().addClass("d-none"),t.getModalBody().on("click.charcoal.bs.dialog",'[data-dismiss="dialog"]',{dialog:t},function(t){t.data.dialog.close()}),e},new BootstrapDialog.show(t)},Charcoal.Admin.Widget.prototype.confirm=function(t,e,i){var o={type:BootstrapDialog.TYPE_DANGER,callback:function(t){t?"function"==typeof e&&e():"function"==typeof i&&i()}},o=$.extend(o,t);return BootstrapDialog.confirm(o)},{});Charcoal.Admin.Widget_Attachment=function(t){this.EVENT_NAMESPACE=Charcoal.Admin.Widget_Attachment.EVENT_NAMESPACE,Charcoal.Admin.Widget.call(this,t),this.busy=!1,this.dirty=!1,this.glyphs={embed:"glyphicon-blackboard",video:"glyphicon-film",image:"glyphicon-picture",file:"glyphicon-file",link:"glyphicon-link",text:"glyphicon-font",gallery:"glyphicon-duplicate",container:"glyphicon-list",accordion:"glyphicon-list"};var e=this;return $(document).on("beforelanguageswitch"+Charcoal.Admin.Widget_Form.EVENT_NAMESPACE,function(t){if(e.is_busy())return t.preventDefault(),void e.enqueue_is_busy_feedback().dispatch();e.perform_save()}).on("languageswitch"+Charcoal.Admin.Widget_Form.EVENT_NAMESPACE,function(){e.change_locale().try_reload()}),this},Charcoal.Admin.Widget_Attachment.EVENT_NAMESPACE=".charcoal.attachments",Charcoal.Admin.Widget_Attachment.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Attachment.prototype.constructor=Charcoal.Admin.Widget_Attachment,Charcoal.Admin.Widget_Attachment.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Attachment.prototype.init=function(){var t,e=this.element().find(".js-attachment-sortable > .js-grid-container");return e.length&&(this.element().on("hidden.bs.collapse",'[data-toggle="collapse"]',function(){e.sortable("refreshPositions")}),t=this,e.sortable({handle:'[draggable="true"]',placeholder:"card c-attachments_row -placeholder",start:function(t,e){e.item.children(".card-header").find('[data-toggle="collapse"]').hasClass("collapsed")||e.item.children(".collapse").collapse("hide")},update:function(){t.set_dirty_state(!0)}}).disableSelection()),this.listeners(),this},Charcoal.Admin.Widget_Attachment.prototype.is_busy=function(){return this.busy||this.is_reloading()},Charcoal.Admin.Widget_Attachment.prototype.set_busy_state=function(t){return this.busy=t,this},Charcoal.Admin.Widget_Attachment.prototype.is_dirty=function(){return this.dirty},Charcoal.Admin.Widget_Attachment.prototype.set_dirty_state=function(t){return this.dirty=t,this},Charcoal.Admin.Widget_Attachment.prototype.change_locale=function(t){var e=this.opts();return e.widget_options.lang=t||Charcoal.Admin.lang(),this.set_opts(e),this},Charcoal.Admin.Widget_Attachment.prototype.listeners=function(){var d=this,e=this.element().find(".c-attachments_container > .js-grid-container");this.element().off(this.EVENT_NAMESPACE).on("click"+this.EVENT_NAMESPACE,".js-attachments-collapse",function(){var t=e.children(".js-attachment");e.hasClass("js-attachment-preview-only")&&t.find(".card-header.sr-only").removeClass("sr-only").addClass("sr-only-off"),t.find(".collapse.show").collapse("hide")}).on("click"+this.EVENT_NAMESPACE,".js-attachments-expand",function(){var t=e.children(".js-attachment");e.hasClass("js-attachment-preview-only")&&t.find(".card-header.sr-only-off").removeClass("sr-only-off").addClass("sr-only"),t.find(".collapse:not(.show)").collapse("show")}).on("click"+this.EVENT_NAMESPACE,".js-add-attachment",function(t){t.preventDefault();var t=$(this),e=t.data("type");if(!e)return!1;var i=t.data("id");i?(d.add({id:i,type:e}),d.join(function(){d.reload()})):(i={title:t.data("title")||attachmentWidgetL10n.editObject,formIdent:t.data("form-ident"),skipForm:t.data("skip-form")},d.create_attachment(e,0,null,i,function(t){t.success&&(t.obj.id=t.obj_id,d.add(t.obj),d.join(function(){d.reload()}))}))}).on("click"+this.EVENT_NAMESPACE,".js-attachment-actions a",function(t){var e=$(this);if(e.data("action"))switch(t.preventDefault(),e.data("action")){case"edit":var i=e.data("type"),o=e.data("id");if(!i||!o)break;var r={title:e.data("title")||attachmentWidgetL10n.editObject,formIdent:e.data("form-ident")};d.create_attachment(i,o,null,r,function(t){t.success&&d.reload()});break;case"delete":if(!e.data("id"))break;d.confirm({title:attachmentWidgetL10n.confirmRemoval,message:commonL10n.confirmAction,btnOKLabel:commonL10n.removeObject,callback:function(t){t&&d.remove_join(e.data("id"),function(){d.reload()})}});break;case"add-object":var i=e.data("title"),o=e.data("attachment"),n=e.data("type"),a=e.data("id"),s=e.data("group"),l=e.data("form-ident"),c=e.data("skip-form"),p={id:a,type:n,group:s},r={title:i,formIdent:l,skipForm:c};d.create_attachment(o,0,p,r,function(t){t.success&&d.add_object_to_container({id:t.obj_id,type:t.obj.type},p)})}})},Charcoal.Admin.Widget_Attachment.prototype.select_attachment=function(t){if(!t.data("id")||!t.data("type"))return this},Charcoal.Admin.Widget_Attachment.prototype.create_attachment=function(t,e,i,o,r){return o&&o.skipForm?this.create_quick_attachment(t,e,i,o,r):this.create_dialog_attachment(t,e,i,o,r)},Charcoal.Admin.Widget_Attachment.prototype.create_quick_attachment=function(t,i,e,o,r){return i=i||0,e=e||this.get_parent_container(),this.xhr=$.ajax({type:"POST",url:"object/save",data:{obj_type:t,obj_id:i,pivot:e}}),Charcoal.Admin.resolveSimpleJsonXhr(this.xhr,function(t){t.feedbacks.length&&Charcoal.Admin.feedback(t.feedbacks),"function"==typeof r&&r(t)},function(t){var e;t.feedbacks.length?Charcoal.Admin.feedback(t.feedbacks):(t=i?formWidgetL10n.updateFailed:formWidgetL10n.createFailed,e=commonL10n.errorOccurred,Charcoal.Admin.feedback([{level:"error",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":t,"[[ errorThrown ]]":e})}]))},function(){Charcoal.Admin.feedback().dispatch(),Charcoal.Admin.manager().render()})},Charcoal.Admin.Widget_Attachment.prototype.create_dialog_attachment=function(t,i,e,o,r){i=i||0,o=o||{},e=e||this.get_parent_container();t={size:BootstrapDialog.SIZE_WIDE,cssClass:"-quick-form",widget_type:"charcoal/admin/widget/quick-form",with_data:!0,widget_options:{obj_type:t,obj_id:i,form_ident:o.formIdent||null,form_data:{pivot:e}}},e=$.extend({},t,o,{});return this.dialog(e,function(t,e){return!!t.success&&(!!t.widget_id&&(Charcoal.Admin.manager().add_widget({id:t.widget_id,type:"charcoal/admin/widget/quick-form",data:t.widget_data,obj_id:i,save_callback:function(t){"function"==typeof r&&r(t),this instanceof Charcoal.Admin.Component&&this.id()&&Charcoal.Admin.manager().destroy_component("widgets",this.id()),e.close()}}),void Charcoal.Admin.manager().render()))})},Charcoal.Admin.Widget_Attachment.prototype.get_parent_container=function(){var t=this.opts();return{obj_type:t.data.obj_type,obj_id:t.data.obj_id,group:t.data.group}},Charcoal.Admin.Widget_Attachment.prototype.add_object_to_container=function(t,e,i){if(this.is_busy())return null;this.set_busy_state(!0);var o=this,r={obj_type:e.type,obj_id:e.id,attachments:[{attachment_id:t.id,attachment_type:t.type,position:0}],group:i||e.group||""},t=(null!=globalXHR[r.group]&&globalXHR[r.group].abort&&globalXHR[r.group].abort(),$.post("add-join",r));return globalXHR[r.group]=Charcoal.Admin.resolveSimpleJsonXhr(t,function(){o.reload()},function(t){t.feedbacks.length?Charcoal.Admin.feedback(t.feedbacks):Charcoal.Admin.feedback([{level:"error",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":formWidgetL10n.saveFailed,"[[ errorThrown ]]":commonL10n.errorOccurred})}])},function(){delete globalXHR[r.group],o.set_busy_state(!1),Charcoal.Admin.feedback().dispatch()})},Charcoal.Admin.Widget_Attachment.prototype.add=function(t){if(!t)return!1;this.set_dirty_state(!0);var e=this.element().find(".js-attachment-template").clone();return e.find(".js-attachment").data("id",t.id).data("type",t.type),this.element().find(".c-attachments_container > .js-grid-container").append(e),this},Charcoal.Admin.Widget_Attachment.prototype.enqueue_is_busy_feedback=function(){var t=this.widget_options(),t=t&&t.title||attachmentWidgetL10n.widgetName;return Charcoal.Admin.feedback([{level:"warning",display:"toast",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":t,"[[ errorThrown ]]":widgetL10n.isBusy})}])},Charcoal.Admin.Widget_Attachment.prototype.validate=function(t){return!this.is_busy()||(t.attempts&&t.max_attempts&&t.attempts .js-sortable-item")).map(function(t){return t.classList.contains("draggable-mirror")||t.classList.contains("draggable--original")?"":t.getAttribute("data-id")}).filter(function(t){return""!==t}),$.ajax({method:"POST",url:Charcoal.Admin.admin_url()+"object/reorder",data:{obj_type:e.obj_type,obj_orders:t,starting_order:1},dataType:"json"}).done(function(t){console.debug(t),t.feedbacks&&Charcoal.Admin.feedback(t.feedbacks).dispatch()}))})),$(".js-jump-page-form",e.table_selector).on("submit",function(t){t.preventDefault();t=$(this),t=parseInt(t.find("input").val());t&&(e.pagination.page=t,e.reload(null,!0))}),$(".js-page-switch",e.table_selector).on("click",function(t){t.preventDefault();t=$(this).data("page-num");console.log(t),e.pagination.page=t,e.reload(null,!0)})},Charcoal.Admin.Widget_Card_Collection.prototype.widget_options=function(){return{obj_type:this.obj_type,template:this.template,collection_ident:this.collection_ident,card_template:this.card_template,num_columns:this.num_columns,collection_config:{properties:this.properties,properties_options:this.properties_options,search_query:this.get_search_query(),filters:this.get_filters(),orders:this.get_orders(),pagination:this.pagination,list_actions:this.list_actions,object_actions:this.object_actions}}},Charcoal.Admin.Widget_Form=function(t){this.EVENT_NAMESPACE=Charcoal.Admin.Widget_Form.EVENT_NAMESPACE,Charcoal.Admin.Widget.call(this,t),this.widget_id=null,this.obj_type=null,this.obj_id=null,this.save_action=t.save_action||"object/save",this.update_action=t.update_action||"object/update",this.extra_form_data=t.extra_form_data||{},this.form_selector=null,this.form_working=!1,this.attempts=0,this.max_attempts=5,this.submitted_via=null,this.is_new_object=!1,this.xhr=null,this.useDefaultAction=!1,this.confirmed=!1;t=$("[data-lang]:not(.d-none)").data("lang");t&&Charcoal.Admin.setLang(t),this._on_popstate_tab=this._on_popstate_tab.bind(this),this._on_shown_tab=this._on_shown_tab.bind(this)},Charcoal.Admin.Widget_Form.EVENT_NAMESPACE=".charcoal.form",Charcoal.Admin.Widget_Form.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Form.prototype.constructor=Charcoal.Admin.Widget_Form,Charcoal.Admin.Widget_Form.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Form.prototype.init=function(){this.set_properties(this.opts()),this.update_tab_ident(),this.bind_events(),this.parse_group_conditions()},Charcoal.Admin.Widget_Form.prototype.set_properties=function(t){return this.widget_id=t.id||this.widget_id,this.obj_type=t.data.obj_type||this.obj_type,this.obj_id=Charcoal.Admin.parseNumber(t.data.obj_id||this.obj_id),this.form_selector=t.data.form_selector||this.form_selector,this.isTab=t.data.tab,this.group_conditions=t.data.group_conditions,this.$form=$(this.form_selector),this.allow_reload=t.data.allow_reload,this.force_page_reload=t.data.force_page_reload,this.useDefaultAction=t.data.use_default_action,this},Charcoal.Admin.Widget_Form.prototype.widget_options=function(){var t=this.parent.widget_options.call(this);return $.extend({},t,this.opts("data"))},Charcoal.Admin.Widget_Form.prototype.bind_events=function(){var e=this,i=this.$form,t=(i.on("submit"+this.EVENT_NAMESPACE,function(t){t.preventDefault(),e.request_submit()}).find(":submit").on("click"+this.EVENT_NAMESPACE,function(){e.submitted_via=this}),$(".js-sidebar-widget",this.form_selector));t.on("click"+this.EVENT_NAMESPACE,".js-obj-delete",function(t){t.preventDefault(),e.delete_object(this)}),t.on("click"+this.EVENT_NAMESPACE,".js-reset-form",function(t){t.preventDefault(),i[0].reset()}),t.on("click"+this.EVENT_NAMESPACE,".js-obj-revision",function(t){t.preventDefault(),e.view_revision(this)}),t.on("click"+this.EVENT_NAMESPACE,".js-obj-list",function(t){t.preventDefault(),e.back_to_list(this)}),t.on("click"+this.EVENT_NAMESPACE,".js-lang-switch button",function(t){t.preventDefault();t=$(this).attr("data-lang-switch");e.switch_language(t)}),window.addEventListener("popstate",this._on_popstate_tab),this.isTab&&i.on("shown.bs.tab",".js-group-tabs",this._on_shown_tab)},Charcoal.Admin.Widget_Form.prototype._on_popstate_tab=function(){this.update_tab_ident()},Charcoal.Admin.Widget_Form.prototype._on_shown_tab=function(t){var t=$(t.target),e=[],i=Charcoal.Admin.queryParams();if(void 0===i.tab_ident||t.data("tab-ident")!==i.tab_ident){for(var o in i.tab_ident=t.data("tab-ident"),i)e.push(o+"="+i[o]);history.pushState("","",window.location.pathname+"?"+e.join("&"))}},Charcoal.Admin.Widget_Form.prototype.parse_group_conditions=function(){var o=this,r=this.$form;$.each(this.group_conditions,function(i,t){var e=o.validate_group_conditions(i);e||o.toggle_conditional_group(i,e,!1),$.each(t,function(t,e){r.on("change"+this.EVENT_NAMESPACE,"#"+e.input_id,{condition_target:i},function(t){var e=o.validate_group_conditions(t.data.condition_target);o.toggle_conditional_group(t.data.condition_target,e)})})})},Charcoal.Admin.Widget_Form.prototype.validate_group_conditions=function(t){var t=this.group_conditions[t],r=this,n=this.$form,a=!0;return $.each(t,function(t,e){var i=n.find("#"+e.input_id),o=r.get_input_value(i);switch(JSON.stringify(e.operator)){case'"!=="':case'"!="':case'"!"':case'"not"':if(o===e.value)return void(a=!1);break;default:case'"==="':case'"=="':case'"="':case'"is"':if(o!==e.value)return void(a=!1)}}),a},Charcoal.Admin.Widget_Form.prototype.toggle_conditional_group=function(t,e,i){function o(){r.each(function(){$(this).attr("disabled",!e)})}var t=this.$form.find("#"+t),r=t.find("select, input, textarea");i=void 0===i||i;e?i?t.slideDown({easing:"easeInOutQuad",start:o}):t.show(0,o):i?t.slideUp({easing:"easeInOutQuad",complete:o}):t.hide(0,o)},Charcoal.Admin.Widget_Form.prototype.get_input_value=function(t){if("disabled"===t.attr("disabled"))return null;var e;switch(t.attr("type")){case"select":e=t.find(":selected").val();break;case"checkbox":e=t.is(":checked");break;default:e=t.val()}return e},Charcoal.Admin.Widget_Form.prototype.update_tab_ident=function(){var t=Charcoal.Admin.queryParams();"tab_ident"in t&&$('.js-group-tabs[data-tab-ident="'+t.tab_ident+'"]').tab("show")},Charcoal.Admin.Widget_Form.prototype.get_form_data=function(){var t=this.$form.length?new FormData(this.$form[0]):new FormData;if(this.submitted_via&&this.submitted_via.name&&t.append(this.submitted_via.name,this.submitted_via.value||!0),this.confirmed&&t.append("confirmed",!0),this.extra_form_data)for(var e in this.extra_form_data)this.extra_form_data.hasOwnProperty(e)&&t.append(e,this.extra_form_data[e]);return t},Charcoal.Admin.Widget_Form.prototype.request_submit=function(){var t;return this.attempts++,this.form_working?(t=this.attempts>=this.max_attempts?commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":formWidgetL10n.isBlocked,"[[ errorThrown ]]":commonL10n.tryAgainLater}):commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":formWidgetL10n.isProcessing,"[[ errorThrown ]]":commonL10n.pleaseWait}),void Charcoal.Admin.feedback([{level:"warning",display:"toast",message:t}])):(this.form_working=!0,this.is_new_object=!this.obj_id,!0!==Charcoal.Admin.manager().prepare_submit(this)?(t=$.Event("failed"+this.EVENT_NAMESPACE,{subtype:"validation",component:this}),this.$form.trigger(t),void this.request_complete()):(this.disable_form(),void this.submit_form()))},Charcoal.Admin.Widget_Form.prototype.submit_form=function(){this.xhr=$.ajax({type:"POST",url:this.request_url(),data:this.get_form_data(),dataType:"json",processData:!1,contentType:!1}),this.xhr.then($.proxy(this.request_done,this)).done($.proxy(this.request_success,this)).fail($.proxy(this.request_failed,this)).always($.proxy(this.request_complete,this))},Charcoal.Admin.Widget_Form.prototype.request_done=function(t,e,i){return t&&t.success?$.Deferred().resolve(t,e,i):t.feedbacks?$.Deferred().reject(i,e,t.feedbacks):$.Deferred().reject(i,e,commonL10n.errorOccurred)},Charcoal.Admin.Widget_Form.prototype.request_success=function(t){this.attempts=0;var e=$.Event("success"+this.EVENT_NAMESPACE,{subtype:"submission",component:this,response:t});this.$form.trigger(e),e.isDefaultPrevented()||(this.confirmed=!1,t.feedbacks&&Charcoal.Admin.feedback(t.feedbacks),t.need_confirmation?this.add_actions_for_confirmation(t.confirmation_label):t.next_url?this.add_action_for_next_url(t.next_url,t.next_url_label):!this.useDefaultAction&&this.is_new_object?(this.suppress_feedback(!0),t.next_url?Charcoal.Admin.redirect_to_url(t.next_url):(e=new URLSearchParams(window.location.search),window.location.href=Charcoal.Admin.admin_url()+"object/edit?"+(e.has("main_menu")?"main_menu="+e.get("main_menu")+"&":"")+(e.has("secondary_menu")?"secondary_menu="+e.get("secondary_menu")+"&":"")+"obj_type="+this.obj_type+"&obj_id="+t.obj_id)):this.force_page_reload?window.location.reload():this.allow_reload&&(e=Charcoal.Admin.manager().get_widgets(),$.each(e,function(t,e){e.reload()}.bind(this))))},Charcoal.Admin.Widget_Form.prototype.request_failed=function(t,e,i){var o=$.Event("failed"+this.EVENT_NAMESPACE,{subtype:"submission",component:this,response:t.responseJSON||{}});this.$form.trigger(o),o.isDefaultPrevented()||(t.responseJSON&&t.responseJSON.feedbacks?Charcoal.Admin.feedback(t.responseJSON.feedbacks):(o=this.is_new_object?formWidgetL10n.createFailed:formWidgetL10n.updateFailed,t=i||commonL10n.errorOccurred,Charcoal.Admin.feedback([{level:"error",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":o,"[[ errorThrown ]]":t})}])))},Charcoal.Admin.Widget_Form.prototype.request_complete=function(){var t=$.Event("complete"+this.EVENT_NAMESPACE,{subtype:"submission",component:this});this.$form.trigger(t),t.isDefaultPrevented()||(this.suppress_feedback()||(this.attempts>=this.max_attempts&&Charcoal.Admin.feedback([{level:"error",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":formWidgetL10n.isBlocked,"[[ errorThrown ]]":commonL10n.tryAgainLater})}]),Charcoal.Admin.feedback().dispatch(),this.enable_form()),this.submitted_via=null,this.suppress_feedback(!1),this.form_working=this.is_new_object=!1)},Charcoal.Admin.Widget_Form.prototype.add_action_for_next_url=function(t,e){Charcoal.Admin.feedback().add_action({label:e||commonL10n.continue,callback:function(){Charcoal.Admin.redirect_to_url(t)}})},Charcoal.Admin.Widget_Form.prototype.add_actions_for_confirmation=function(t){Charcoal.Admin.feedback().add_action({label:commonL10n.cancel,cssClass:"btn-danger",callback:function(t){t.close()}}).add_action({label:t||commonL10n.continue,callback:function(t){t.close(),this.confirmed=!0,this.request_submit()}.bind(this)})},Charcoal.Admin.Widget_Form.prototype.disable_form=function(){var t=this.$form;return t.length&&(t.prop("disabled",!0),(t=t.find('[type="submit"]')).length&&t.prop("disabled",!0)),this.submitted_via&&this.disable_button($(this.submitted_via)),this},Charcoal.Admin.Widget_Form.prototype.enable_form=function(){var t=this.$form;return t.length&&(t.prop("disabled",!1),(t=t.find('[type="submit"]')).length&&t.prop("disabled",!1)),this.submitted_via&&this.enable_button($(this.submitted_via)),this},Charcoal.Admin.Widget_Form.prototype.disable_button=function(t){return t.prop("disabled",!0).children(".fa").removeClass("d-none").next(".btn-label").addClass("sr-only"),this},Charcoal.Admin.Widget_Form.prototype.enable_button=function(t){return t.prop("disabled",!1).children(".fa").addClass("d-none").next(".btn-label").removeClass("sr-only"),this},Charcoal.Admin.Widget_Form.prototype.request_url=function(){return this.useDefaultAction?this.$form.attr("action"):this.is_new_object?Charcoal.Admin.admin_url()+this.save_action:Charcoal.Admin.admin_url()+this.update_action},Charcoal.Admin.Widget_Form.prototype.view_revision=function(){var e=this.obj_type,i=this.obj_id,t={size:BootstrapDialog.SIZE_WIDE,title:formWidgetL10n.revisions,widget_type:"charcoal/admin/widget/object-revisions",widget_options:{obj_type:e,obj_id:i}},t=$.extend({},t);this.dialog(t,function(t){if(t.success){if(!t.widget_id)return!1;Charcoal.Admin.manager().add_widget({id:t.widget_id,type:"charcoal/admin/widget/object-revisions",obj_type:e,obj_id:i}),Charcoal.Admin.manager().render()}})},Charcoal.Admin.Widget_Form.prototype.back_to_list=function(){var t=new URLSearchParams(window.location.search);window.location.href="object/collection?"+(t.has("main_menu")?"main_menu="+t.get("main_menu")+"&":"")+(t.has("secondary_menu")?"secondary_menu="+t.get("secondary_menu")+"&":"")+"obj_type="+this.obj_type},Charcoal.Admin.Widget_Form.prototype.delete_object=function(){var i=this,t=new URLSearchParams(window.location.search),o=Charcoal.Admin.admin_url()+"object/collection?"+(t.has("main_menu")?"main_menu="+t.get("main_menu")+"&":"")+(t.has("secondary_menu")?"secondary_menu="+t.get("secondary_menu")+"&":"")+"obj_type="+this.obj_type;if(!i.obj_type||!i.obj_id)return t={level:"warning",message:commonL10n.errorTemplate.replaceMap({"[[ errorMessage ]]":formWidgetL10n.deleteFailed,"[[ errorThrown ]]":commonL10n.invalidObject})},void Charcoal.Admin.feedback([t]).dispatch();BootstrapDialog.confirm({title:formWidgetL10n.confirmDeletion,type:BootstrapDialog.TYPE_DANGER,message:$("

"+commonL10n.confirmAction+'

'+commonL10n.cantUndo+"

"),btnOKLabel:commonL10n.delete,callback:function(t){var e;t&&(t=Charcoal.Admin.admin_url()+"object/delete",e={obj_type:i.obj_type,obj_id:i.obj_id},t=$.ajax({method:"POST",url:t,data:e,dataType:"json"}),Charcoal.Admin.resolveSimpleJsonXhr(t,function(){window.location.href=o},function(t){t.feedbacks.length?Charcoal.Admin.feedback(t.feedbacks):Charcoal.Admin.feedback([{level:"error",message:formWidgetL10n.deleteFailed}])},function(){i.suppress_feedback()||Charcoal.Admin.feedback().dispatch()}))}})},Charcoal.Admin.Widget_Form.prototype.reload=function(i){return this.destroy(),Charcoal.Admin.Widget.prototype.reload.call(this,function(t,e){"function"==typeof i&&i.call(t,e),Charcoal.Admin.manager().render()},!0),this},Charcoal.Admin.Widget_Form.prototype.switch_language=function(t){var e,i=Charcoal.Admin.lang();i!==t&&(e=$.Event("beforelanguageswitch"+this.EVENT_NAMESPACE,{language:t,originalLanguage:i,relatedTarget:this.$form[0],relatedComponent:this}),$(document).triggerHandler(e),e.isDefaultPrevented()||(Charcoal.Admin.setLang(t),$("[data-lang][data-lang!="+t+"]").addClass("d-none"),$("[data-lang][data-lang="+t+"]").removeClass("d-none"),$("[data-lang-switch][data-lang-switch!="+t+"]").removeClass("btn-primary").addClass("btn-outline-primary"),$("[data-lang-switch][data-lang-switch="+t+"]").removeClass("btn-outline-primary").addClass("btn-primary"),$(document).triggerHandler({type:"switch_language.charcoal"}),e=$.Event("languageswitch"+this.EVENT_NAMESPACE,{language:t,originalLanguage:i,relatedTarget:this.$form[0],relatedComponent:this}),$(document).triggerHandler(e)))},Charcoal.Admin.Widget_Form.prototype.destroy=function(){$(this.form_selector).off(this.EVENT_NAMESPACE),$(".js-sidebar-widget",this.form_selector).off(this.EVENT_NAMESPACE),window.removeEventListener("popstate",this._on_popstate_tab),this.isTab&&$(this.form_selector).off("shown.bs.tab",".js-group-tabs",this._shown_tab_handler)},function(e,t,i){"use strict";function o(t){this.EVENT_NAMESPACE=o.EVENT_NAMESPACE,Charcoal.Admin.Widget.call(this,t),this.graph_options=t.graph_options||t.data.graph_options||{}}o.EVENT_NAMESPACE=".charcoal.widget.graph",((o.prototype=Object.create(Charcoal.Admin.Widget.prototype)).contructor=o).prototype.parent=Charcoal.Admin.Widget.prototype,o.prototype.init=function(){var t;echarts?(t=echarts.init(this.element()[0]),(this.chart=t).setOption(this.graph_options),e(i).on("resize"+this.EVENT_NAMESPACE,function(){t.resize()})):console.error("Could not initialize graph widget:","eCharts is missing")},o.prototype.destroy=function(){this.chart&&this.chart.dispose(),e(i).off("resize"+this.EVENT_NAMESPACE)},t.Widget_Graph=o}(jQuery,Charcoal.Admin,window),Charcoal.Admin.Widget_Map=function(t){return Charcoal.Admin.Widget.call(this,t),this._controller=void 0,this},Charcoal.Admin.Widget_Map.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Map.prototype.constructor=Charcoal.Admin.Widget_Map,Charcoal.Admin.Widget_Map.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Map.prototype.init=function(){var t=this;return"undefined"==typeof google?(window._tmp_google_onload_function=function(){t.activate_map()},$.getScript("https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=fr&callback=_tmp_google_onload_function",function(){})):t.activate_map(),this},Charcoal.Admin.Widget_Map.prototype.activate_map=function(){var t={default_styles:{strokeColor:"#000000",strokeOpacity:.8,strokeWeight:3,fillColor:"#ffffff",fillOpacity:.35,hover:{strokeColor:"#000000",strokeOpacity:1,strokeWeight:2,fillColor:"#ffffff",fillOpacity:.5},focused:{fillOpacity:.8}},use_clusterer:!1,map:{center:{x:this.opts("coords")[0],y:this.opts("coords")[1]},zoom:14,mapType:"roadmap",coordsType:"inpage",map_mode:"default"},places:{first:{type:"marker",coords:this.coords()}}};this._controller=new window.BB.gmap.controller(this.element().find(".js-map-maker-map").get(0),t),this.controller().set_styles([{featureType:"poi",elementType:"all",stylers:[{visibility:"off"}]}]),this.controller().remove_focus(),this.controller().init()},Charcoal.Admin.Widget_Map.prototype.controller=function(){return this._controller},Charcoal.Admin.Widget_Map.prototype.coords=function(){return this.opts("coords")},Charcoal.Admin.Widget_Object_Revisions=function(t){return Charcoal.Admin.Widget.call(this,t),this.extra_form_data=t.extra_form_data||{},this.xhr=null,this.obj_id=Charcoal.Admin.parseNumber(t.obj_id)||0,this.obj_type=t.obj_type,this},Charcoal.Admin.Widget_Object_Revisions.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Object_Revisions.prototype.constructor=Charcoal.Admin.Widget_Object_Revisions,Charcoal.Admin.Widget_Object_Revisions.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Object_Revisions.prototype.init=function(){this.bind_events()},Charcoal.Admin.Widget_Object_Revisions.prototype.bind_events=function(){var e=this;$("#"+this.id()).on("click.object.revisions",".js-obj-revert",this.revert.bind(this)),$("#"+this.id()).on("click.charcoal.bs.dialog",'[data-dismiss="dialog"]',function(t){$.isFunction(e.cancel_callback)&&e.cancel_callback(t)})},Charcoal.Admin.Widget_Object_Revisions.prototype.revert=function(t){t.preventDefault();var e=Charcoal.Admin.admin_url()+"object/revert-revision",i={obj_type:this.obj_type,obj_id:this.obj_id,rev_num:$(t.currentTarget).attr("data-rev-num")};BootstrapDialog.show({title:objectRevisionsWidgetL10n.title,message:objectRevisionsWidgetL10n.message,buttons:[{id:"ok-btn",label:objectRevisionsWidgetL10n.restore,action:function(t){t.close(),$.ajax({url:e,type:"POST",data:i,dataType:"json",success:function(t){t.success?window.location.reload():(Charcoal.Admin.feedback().push([{level:"error",message:objectRevisionsWidgetL10n.restoreError}]),Charcoal.Admin.feedback().dispatch())},error:function(){Charcoal.Admin.feedback().push([{level:"error",message:objectRevisionsWidgetL10n.restoreError}]),Charcoal.Admin.feedback().dispatch()}})}}]})},Charcoal.Admin.Widget_Object_Revisions.prototype.disable_form=Charcoal.Admin.Widget_Form.prototype.disable_form,Charcoal.Admin.Widget_Object_Revisions.prototype.enable_form=Charcoal.Admin.Widget_Form.prototype.enable_form,Charcoal.Admin.Widget_Object_Revisions.prototype.request_url=Charcoal.Admin.Widget_Form.prototype.request_url,Charcoal.Admin.Widget_Object_Revisions.prototype.request_done=Charcoal.Admin.Widget_Form.prototype.request_done,Charcoal.Admin.Widget_Object_Revisions.prototype.request_failed=Charcoal.Admin.Widget_Form.prototype.request_failed,Charcoal.Admin.Widget_Object_Revisions.prototype.request_complete=Charcoal.Admin.Widget_Form.prototype.request_complete,Charcoal.Admin.Widget_Object_Revisions.prototype.request_success=function(t,e,i){i.feedbacks&&!this.suppress_feedback()&&Charcoal.Admin.feedback(i.feedbacks),i.next_url&&Charcoal.Admin.feedback().add_action({label:commonL10n.continue,callback:function(){window.location.href=Charcoal.Admin.admin_url()+i.next_url}})},Charcoal.Admin.Widget_Quick_Form=function(t){this.EVENT_NAMESPACE=Charcoal.Admin.Widget_Quick_Form.EVENT_NAMESPACE,Charcoal.Admin.Widget.call(this,t),this.save_callback=t.save_callback||"",this.cancel_callback=t.cancel_callback||"",this.form_selector=t.data.form_selector,this.save_action=t.save_action||"object/save",this.update_action=t.update_action||"object/update",this.extra_form_data=t.extra_form_data||{},this.group_conditions=t.data.group_conditions,this.group_display_mode=t.data.group_display_mode||"",this.show_language_switch=t.data.show_language_switch||!1,this.form_working=!1,this.is_new_object=!1,this.xhr=null,this.obj_id=Charcoal.Admin.parseNumber(t.obj_id)||0},Charcoal.Admin.Widget_Quick_Form.EVENT_NAMESPACE=".charcoal.quickform",Charcoal.Admin.Widget_Quick_Form.prototype=Object.create(Charcoal.Admin.Widget_Form.prototype),Charcoal.Admin.Widget_Quick_Form.prototype.constructor=Charcoal.Admin.Widget_Quick_Form,Charcoal.Admin.Widget_Quick_Form.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Quick_Form.prototype.init=function(){this.set_properties(this.opts()),this.bind_events(),this.parse_group_conditions(),this.show_language_switch&&$('.nav-link.nav-lang[data-tab-ident="'+Charcoal.Admin.lang()+'"]').trigger("click")},Charcoal.Admin.Widget_Quick_Form.prototype.set_properties=function(){this.$form=$(this.form_selector)},Charcoal.Admin.Widget_Quick_Form.prototype.bind_events=function(){var e=this,t=this.$form;t.on("submit"+this.EVENT_NAMESPACE,function(t){t.preventDefault(),e.request_submit()}).on("click"+this.EVENT_NAMESPACE,'[data-dismiss="dialog"]',function(t){$.isFunction(e.cancel_callback)&&e.cancel_callback(t)}),this.show_language_switch&&t.on("click.nav-link.nav-lang","a.nav-link.nav-lang",function(t){t.preventDefault(),e.trigger_lang_tab($(this).attr("data-tab-ident"))})},Charcoal.Admin.Widget_Quick_Form.prototype.request_success=function(t){var e=$.Event("success"+this.EVENT_NAMESPACE,{subtype:"submission",component:this,response:t});this.$form.trigger(e),e.isDefaultPrevented()||(this.confirmed=!1,t.feedbacks&&!this.suppress_feedback()&&Charcoal.Admin.feedback(t.feedbacks),t.need_confirmation?this.add_actions_for_confirmation(t.confirmation_label):t.next_url?this.add_action_for_next_url(t.next_url,t.next_url_label):(this.enable_form(),this.form_working=!1,"function"==typeof this.save_callback&&this.save_callback(t)))},Charcoal.Admin.Widget_Quick_Form.prototype.trigger_lang_tab=function(e){$(".modal .form-field").each(function(){var t=$(this).attr("data-lang");t&&(e!==t?this.style.setProperty("display","none","important"):this.style.setProperty("display","block","important"))})},Charcoal.Admin.Widget_Relation=function(t){return Charcoal.Admin.Widget.call(this,t),this.dirty=!1,this},Charcoal.Admin.Widget_Relation.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Relation.prototype.constructor=Charcoal.Admin.Widget_Relation,Charcoal.Admin.Widget_Relation.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Relation.prototype.init=function(){var t=this.element().find(".js-relation-sortable .js-grid-container");return this.element().on("hidden.bs.collapse",'[data-toggle="collapse"]',function(){t.sortable("refreshPositions")}),t.sortable({handle:'[draggable="true"]',placeholder:"panel c-attachment_placeholder",start:function(t,e){e.item.children(".panel-heading").find('[data-toggle="collapse"]').hasClass("collapsed")||e.item.children(".panel-collapse").collapse("hide")}}).disableSelection(),this.listeners(),this},Charcoal.Admin.Widget_Relation.prototype.is_dirty=function(){return this.dirty},Charcoal.Admin.Widget_Relation.prototype.set_dirty_state=function(t){return this.dirty=t,this},Charcoal.Admin.Widget_Relation.prototype.listeners=function(){var r=this;this.element().off("click").on("click.charcoal.relation",".js-add-relation",function(t){t.preventDefault();t=$(this).data("type");if(!t)return!1;var e=$(this).data("id");e?(r.add({id:e,type:t}),r.create_relation(function(){r.reload()})):(e=$(this).data("title")||relationWidgetL10n.editObject,r.create_relation_dialog({title:e,widget_options:{form_data:{target_object_type:t,target_object_id:null}}},function(t){t.success&&(t.obj.id=t.obj_id,r.add(t.obj),r.create_relation(function(){r.reload()}))}))}).on("click.charcoal.relation",".js-relation-actions a",function(t){var e=$(this);if(e.data("action"))switch(t.preventDefault(),e.data("action")){case"edit":var i=e.data("type"),o=e.data("id");if(!i||!o)break;o=e.data("title")||relationWidgetL10n.editObject;r.create_relation_dialog({title:o,widget_options:{form_data:{target_object_type:i,target_object_id:null}}},function(t){t.success&&r.reload()});break;case"unlink":if(!e.data("id"))break;r.confirm({title:relationWidgetL10n.confirmRemoval,message:commonL10n.confirmAction,btnOKLabel:commonL10n.removeObject,callback:function(t){t&&r.remove_relation(e.data("id"),function(){r.reload()})}})}})},Charcoal.Admin.Widget_Relation.prototype.create_relation_dialog=function(t,e){t=t||{};var i=this.opts().data,i={size:BootstrapDialog.SIZE_WIDE,cssClass:"-quick-form",widget_type:"charcoal/admin/widget/quick-form",widget_options:{obj_type:"charcoal/relation/pivot",obj_id:0,form_data:{group:i.group,source_object_type:i.obj_type,source_object_id:i.obj_id,target_object_type:"",target_object_id:0}}},o=$.extend(!0,{},i,t,{}),r=this.dialog(o,function(t){if(t.success){if(!t.widget_id)return!1;Charcoal.Admin.manager().add_widget({id:t.widget_id,type:"charcoal/admin/widget/quick-form",data:{obj_type:o.widget_options.type},obj_id:o.widget_options.id,save_callback:function(t){e(t),this instanceof Charcoal.Admin.Component&&this.id()&&Charcoal.Admin.manager().destroy_component("widgets",this.id()),r.close()}}),Charcoal.Admin.manager().render()}})},Charcoal.Admin.Widget_Relation.prototype.add=function(t){if(!t)return!1;this.set_dirty_state(!0);var e=this.element().find(".js-relation-template").clone();return e.find(".js-relation").attr({"data-id":t.target_object_id,"data-type":t.target_object_type}),this.element().find(".js-relation-sortable").find(".js-grid-container").append(e),this},Charcoal.Admin.Widget_Relation.prototype.will_save=function(t){return t&&$.contains(t.element()[0],this.element()[0])},Charcoal.Admin.Widget_Relation.prototype.save=function(){return!this.is_dirty()&&(this.create_relation(),!0)},Charcoal.Admin.Widget_Relation.prototype.create_relation=function(t){var e=this,i=e.opts(),o={obj_type:i.data.obj_type,obj_id:i.data.obj_id,group:i.data.group,pivots:[]};this.element().find(".js-relation-container").find(".js-relation").each(function(t){var e=$(this),i=e.attr("data-id"),e=e.attr("data-type");o.pivots.push({target_object_id:i,target_object_type:e,position:t})}),$.post("relation/link",o,function(){"function"==typeof t&&t(),e.set_dirty_state(!1)},"json")},Charcoal.Admin.Widget_Relation.prototype.remove_relation=function(t,e){if(!t)return!1;var i=this;$.post("relation/unlink",{pivot_id:t},function(){"function"==typeof e&&e(),i.set_dirty_state(!1)},"json")},Charcoal.Admin.Widget_Relation.prototype.widget_options=function(){return this.opts("widget_options")},Charcoal.Admin.Widget_Search=function(t){return this.EVENT_NAMESPACE=Charcoal.Admin.Widget_Search.EVENT_NAMESPACE,Charcoal.Admin.Widget.call(this,t),this._elem=void 0,!!t&&(void 0!==t.id&&(this.set_element($("#"+t.id)),"object"==typeof t.data&&(this.data=t.data,this.$input=null,this._search_filters=!1,this._search_query=!1,this)))},Charcoal.Admin.Widget_Search.EVENT_NAMESPACE=".charcoal.widget.search",Charcoal.Admin.Widget_Search.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Search.prototype.constructor=Charcoal.Admin.Widget_Search,Charcoal.Admin.Widget_Search.prototype.parent=Charcoal.Admin.Widget.prototype,Charcoal.Admin.Widget_Search.prototype.widget_options=function(){return this.data},Charcoal.Admin.Widget_Search.prototype.set_remote_widget=function(){},Charcoal.Admin.Widget_Search.prototype.init=function(){var e=this,t=this.element();this.$input=t.find('[name="query"]'),t.on("submit"+this.EVENT_NAMESPACE,function(t){t.preventDefault(),e.submit()}),t.on("reset"+this.EVENT_NAMESPACE,function(t){t.preventDefault(),e.clear()})},Charcoal.Admin.Widget_Search.prototype.submit=function(){return this.set_search_query(this.$input.val()),Charcoal.Admin.manager().get_widgets().forEach(this.dispatch.bind(this)),this.set_search_query(null),this},Charcoal.Admin.Widget_Search.prototype.clear=function(){return this._search_search=!1,this._search_filters=!1,this.$input.val(""),this.submit(),this},Charcoal.Admin.Widget_Search.prototype.parse_search_query=function(t){return"string"!=typeof t||0===(t=t.trim()).length?null:t},Charcoal.Admin.Widget_Search.prototype.parse_search_filters=function(t){var e,o,r=[];return(t=this.parse_search_query(t))&&(t=t.split(/\s/),e=this.data.properties||[],$.each(t,function(t,i){o=[],i=i.replace(/'/g,"\\'"),$.each(e,function(t,e){o.push({property:e,operator:"LIKE",value:"%"+i+"%"})}),r.push({conjunction:"OR",filters:o})})),r.length?r:null},Charcoal.Admin.Widget_Search.prototype.set_search_query=function(t){this._search_search=this.parse_search_query(t),this._search_filters=!1},Charcoal.Admin.Widget_Search.prototype.search_query=function(){return!1===this._search_search?null:this._search_search},Charcoal.Admin.Widget_Search.prototype.search_filters=function(){return!1===this._search_filters&&(this._search_filters=this.parse_search_filters(this._search_search)),this._search_filters},Charcoal.Admin.Widget_Search.prototype.dispatch=function(t){if(t&&t!==this){var e="function"==typeof t.set_search_query,i="function"==typeof t.set_filter;if(!e&&!i)return this;e&&(e=this.search_query(),t.set_search_query(e)),i&&(e=this.search_filters(),t.set_filter("search",e)),void 0!==t.pagination&&(t.pagination.page=1),t.reload(null,!0)}},Charcoal.Admin.Widget_Search.prototype.destroy=function(){this.element().off(this.EVENT_NAMESPACE)},Charcoal.Admin.Widget_Table=function(t){Charcoal.Admin.Widget.call(this,t),this.obj_type=null,this.widget_id=null,this.table_selector=null,this.pagination={page:1,num_per_page:50},this.list_actions={},this.object_actions={},this.template=this.properties=this.properties_options=void 0,this.sortable=!1,this.sortable_handler=null},Charcoal.Admin.Widget_Table.prototype=Object.create(Charcoal.Admin.Widget.prototype),Charcoal.Admin.Widget_Table.prototype.constructor=Charcoal.Admin.Widget_Table,Charcoal.Admin.Widget_Table.prototype.parent=Charcoal.Admin.Widget.prototype,Object.assign(Charcoal.Admin.Widget_Table.prototype,Charcoal.Admin.Mixin_Model_Search),Object.assign(Charcoal.Admin.Widget_Table.prototype,Charcoal.Admin.Mixin_Model_Filters),Object.assign(Charcoal.Admin.Widget_Table.prototype,Charcoal.Admin.Mixin_Model_Orders),Charcoal.Admin.Widget_Table.prototype.init=function(){this.set_properties().bind_events()},Charcoal.Admin.Widget_Table.prototype.set_properties=function(){var t=this.opts();return this.obj_type=t.data.obj_type||this.obj_type,this.widget_id=t.id||this.widget_id,this.table_selector="#"+this.widget_id,this.sortable=t.data.sortable||this.sortable,this.template=t.data.template||this.template,this.collection_ident=t.data.collection_ident||"default","properties"in t.data&&Array.isArray(t.data.properties)&&(this.properties=t.data.properties),"properties_options"in t.data&&$.isPlainObject(t.data.properties_options)&&(this.properties_options=t.data.properties_options),"filters"in t.data&&this.set_filters(t.data.filters),"orders"in t.data&&this.set_orders(t.data.orders),"pagination"in t.data&&$.isPlainObject(t.data.pagination)&&(this.pagination=t.data.pagination),"list_actions"in t.data&&(Array.isArray(t.data.list_actions)?this.list_actions=Object.assign({},t.data.list_actions):$.isPlainObject(t.data.list_actions)&&(this.list_actions=t.data.list_actions)),"object_actions"in t.data&&(Array.isArray(t.data.object_actions)?this.object_actions=Object.assign({},t.data.object_actions):$.isPlainObject(t.data.object_actions)&&(this.object_actions=t.data.object_actions)),this},Charcoal.Admin.Widget_Table.prototype.bind_events=function(){null!==this.sortable_handler&&this.sortable_handler.destroy();var e=this,t=$("tbody.js-sortable",e.table_selector);0 td"),i=t.source.querySelectorAll(":scope > td");e.forEach(function(t,e){i[e].style.width=t.offsetWidth+"px"})}).on("sortable:stop",function(t){t.oldIndex!==t.newIndex&&(t=Array.from(t.newContainer.querySelectorAll(":scope > tr")).map(function(t){return t.classList.contains("draggable-mirror")||t.classList.contains("draggable--original")?"":t.getAttribute("data-id")}).filter(function(t){return""!==t}),$.ajax({method:"POST",url:Charcoal.Admin.admin_url()+"object/reorder",data:{obj_type:e.obj_type,obj_orders:t,starting_order:1},dataType:"json"}).done(function(t){console.debug(t),t.feedbacks&&Charcoal.Admin.feedback(t.feedbacks).dispatch()}))})),$(".js-jump-page-form",e.table_selector).on("submit",function(t){t.preventDefault();t=$(this),t=parseInt(t.find("input").val());t&&(e.pagination.page=t,e.reload(null,!0))}),$(".js-page-switch",e.table_selector).on("click",function(t){t.preventDefault();t=$(this).data("page-num");e.pagination.page=t,e.reload(null,!0)})},Charcoal.Admin.Widget_Table.prototype.widget_options=function(){return{obj_type:this.obj_type,template:this.template,sortable:this.sortable,collection_ident:this.collection_ident,collection_config:{properties:this.properties,properties_options:this.properties_options,search_query:this.get_search_query(),filters:this.get_filters(),orders:this.get_orders(),pagination:this.pagination,list_actions:this.list_actions,object_actions:this.object_actions}}},Charcoal.Admin.Property=function(t){return Charcoal.Admin.Component.call(this,t),this._ident,this._val,this._input_type,t&&("string"==typeof t.ident&&this.set_ident(t.ident),void 0!==t.val&&this.set_val(t.val),void 0!==t.input_type&&this.set_input_type(t.input_type)),this},Charcoal.Admin.Property.prototype=Object.create(Charcoal.Admin.Component.prototype),Charcoal.Admin.Property.prototype.constructor=Charcoal.Admin.Property,Charcoal.Admin.Property.prototype.parent=Charcoal.Admin.Component.prototype,Charcoal.Admin.Property.prototype.element=function(){if(!this._element){if(!this.id())return null;this.set_element("#"+this.id())}return this._element},Charcoal.Admin.Property.prototype.set_ident=function(t){return this._ident=t,this},Charcoal.Admin.Property.prototype.ident=function(){return this._ident},Charcoal.Admin.Property.prototype.set_input_type=function(t){return this._input_type=t,this},Charcoal.Admin.Property.prototype.input_type=function(){return this._input_type},Charcoal.Admin.Property.prototype.set_val=function(t){return this._val=t,this},Charcoal.Admin.Property.prototype.val=function(){return this._val},Charcoal.Admin.Property.prototype.error=function(t){window.console.error(t)},Charcoal.Admin.Property_Input_File=function(t){this.EVENT_NAMESPACE=Charcoal.Admin.Property_Input_File.EVENT_NAMESPACE,this.input_type="charcoal/admin/property/input/file",Charcoal.Admin.Property.call(this,t),this.data=t.data,this.dialog=null,this.set_input_id(t.id).init()},Charcoal.Admin.Property_Input_File.EVENT_NAMESPACE=".charcoal.property.file",Charcoal.Admin.Property_Input_File.prototype=Object.create(Charcoal.Admin.Property.prototype),Charcoal.Admin.Property_Input_File.prototype.constructor=Charcoal.Admin.Property_Input_File,Charcoal.Admin.Property_Input_File.prototype.parent=Charcoal.Admin.Property.prototype,Charcoal.Admin.Property_Input_File.prototype.init=function(){this.input_id&&(this.$input=$("#"+this.input_id),this.$file=$("#"+this.data.file_input_id).or('input[type="file"]',this.$input),this.$hidden=$("#"+this.data.hidden_input_id).or('input[type="hidden"]',this.$input),this.$previewFile=this.$input.find(".js-preview-file"),this.$previewText=this.$input.find(".js-preview-text"),window.elFinderCallback||(window.elFinderCallback={}),this.set_listeners())},Charcoal.Admin.Property_Input_File.prototype.set_listeners=function(){void 0!==this.$input&&(this.$input.on("click"+this.EVENT_NAMESPACE,".js-remove-file",this.remove_file.bind(this)).on("click"+this.EVENT_NAMESPACE,".js-elfinder",this.load_elfinder.bind(this)),this.$file.on("change"+this.EVENT_NAMESPACE,this.change_file.bind(this)),window.elFinderCallback[this.input_id]=this.elfinder_callback.bind(this))},Charcoal.Admin.Property_Input_File.prototype.remove_file=function(t){t.preventDefault(),this.$hidden.val(""),this.$file.val(""),this.$previewFile.empty(),this.$previewText.empty(),this.$input.find(".hide-if-no-file").addClass("d-none"),this.$input.find(".show-if-no-file").removeClass("d-none")},Charcoal.Admin.Property_Input_File.prototype.change_file=function(t){this.$input.find(".hide-if-no-file").addClass("d-none"),this.$input.find(".show-if-no-file").removeClass("d-none"),this.$previewFile.empty(),this.$previewText.empty(),t.target&&t.target.files&&t.target.files[0]&&(t=t.target.files[0],console.log("[Property_Input_File.change_file]",t),this.$input.find(".hide-if-no-file").removeClass("d-none"),this.$input.find(".show-if-no-file").addClass("d-none"),this.$previewText.html(t.name))},Charcoal.Admin.Property_Input_File.prototype.load_elfinder=function(t){t.preventDefault(),this.dialog=BootstrapDialog.show({title:this.data.dialog_title||"",size:BootstrapDialog.SIZE_WIDE,cssClass:"-elfinder",message:$('')})},Charcoal.Admin.Property_Input_File.prototype.elfinder_callback=function(t){var e;this.dialog&&this.dialog.close(),this.$input.find(".hide-if-no-file").addClass("d-none"),this.$input.find(".show-if-no-file").removeClass("d-none"),this.$previewFile.empty(),this.$previewText.empty(),t&&t.url&&(e=decodeURI(t.url).replace(Charcoal.Admin.base_url(),""),console.log("[Property_Input_File.elfinder_callback]",t),this.$hidden.val(e),this.$input.find(".hide-if-no-file").removeClass("d-none"),this.$input.find(".show-if-no-file").addClass("d-none"),this.$previewText.html(t.name))},Charcoal.Admin.Property_Input_File.prototype.set_input_id=function(t){return this.input_id=t,this},Charcoal.Admin.Property_Input_File.prototype.set_input_name=function(t){return this.input_name=t,this},Charcoal.Admin.Property_Input_File.prototype.set_input_val=function(t){return this.input_val=t,this},Charcoal.Admin.Property_Input_File.prototype.destroy=function(){this.$input.off(this.EVENT_NAMESPACE),this.$file.off(this.EVENT_NAMESPACE)},function(s,n,y){"use strict";var l="[Property_Input_Audio_Recorder]",e=".charcoal.property.audio.recorder",a={CLICK:"click"+e},i=0,r=1,c=2,o=3,p=4,d=5,u=6,h=7,_=8,m=9,f=10,g=11,b=12,A=".js-recording-record",C=".js-recording-playback",v=".js-recording-stop",w=".js-recording-reset",L=".js-recording-visualizer",O=".js-recording-time-elapsed",F=".js-recording-time-duration",E="round",P="#EBEDF0",j="#DEE2E6",k=5,N=2,t=null,$=null;function T(t){this.EVENT_NAMESPACE=e,this.PROPERTY_IDLE=i,this.PROPERTY_READY=r,this.PROPERTY_LIVE=c,this.MODE_IDLE=o,this.MODE_PLAYBACK=p,this.MODE_CAPTURE=d,this.MEDIA_IDLE=u,this.MEDIA_LOCKED=h,this.MEDIA_BUSY=_,this.MEDIA_PAUSED=m,this.VISUAL_NONE=f,this.VISUAL_WAVEFORM=g,this.VISUAL_FREQUENCY=b,n.Property.call(this,t),this.data=t.data,this.data.id=t.id,this.readyState=i,this.mediaMode=o,this.mediaState=u,this.mediaVisual=f,this.status=null,this.mediaPromise=null,this.mediaStream=null,this.audioRecorder=null,this.audioContext=null,this.analyserNode=null,this.canvasElement=null,this.canvasContext=null,this.isFirefox=-1