From 4c9c9ad5229498abd715529127dc43049eba91c5 Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Tue, 31 Jan 2023 16:02:53 +0800 Subject: [PATCH] WIP switch Moment to Luxon --- modules/backend/assets/js/winter-min.js | 39 +- modules/backend/assets/js/winter.datetime.js | 175 - modules/backend/assets/js/winter.js | 1 - modules/backend/assets/ui/js/build/backend.js | 911 +- .../backend/assets/ui/js/build/manifest.js | 181 +- modules/backend/assets/ui/js/build/vendor.js | 26114 +++++++++++++++- modules/backend/assets/ui/js/index.js | 6 + .../assets/ui/js/ui/DateTimeControl.js | 198 + .../colorpicker/assets/js/dist/colorpicker.js | 723 +- .../iconpicker/assets/js/dist/iconpicker.js | 494 +- .../sensitive/assets/js/dist/sensitive.js | 354 +- modules/backend/helpers/Backend.php | 4 +- modules/backend/package.json | 1 + modules/backend/winter.mix.js | 1 + modules/system/assets/js/lang/lang.ar.js | 126 +- modules/system/assets/js/lang/lang.be.js | 135 +- modules/system/assets/js/lang/lang.bg.js | 93 +- modules/system/assets/js/lang/lang.ca.js | 91 +- modules/system/assets/js/lang/lang.cs.js | 182 +- modules/system/assets/js/lang/lang.da.js | 63 +- modules/system/assets/js/lang/lang.de.js | 81 +- modules/system/assets/js/lang/lang.el.js | 103 +- modules/system/assets/js/lang/lang.en-au.js | 70 +- modules/system/assets/js/lang/lang.en-ca.js | 66 +- modules/system/assets/js/lang/lang.en-gb.js | 70 +- modules/system/assets/js/lang/lang.es.js | 95 +- modules/system/assets/js/lang/lang.et.js | 81 +- modules/system/assets/js/lang/lang.fa.js | 109 +- modules/system/assets/js/lang/lang.fi.js | 112 +- modules/system/assets/js/lang/lang.fr-ca.js | 77 +- modules/system/assets/js/lang/lang.fr.js | 86 +- modules/system/assets/js/lang/lang.hu.js | 113 +- modules/system/assets/js/lang/lang.id.js | 85 +- modules/system/assets/js/lang/lang.it.js | 72 +- modules/system/assets/js/lang/lang.ja.js | 95 +- modules/system/assets/js/lang/lang.lt.js | 121 +- modules/system/assets/js/lang/lang.lv.js | 100 +- modules/system/assets/js/lang/lang.nl.js | 90 +- modules/system/assets/js/lang/lang.pl.js | 129 +- modules/system/assets/js/lang/lang.pt-br.js | 64 +- modules/system/assets/js/lang/lang.ro.js | 78 +- modules/system/assets/js/lang/lang.ru.js | 185 +- modules/system/assets/js/lang/lang.sk.js | 159 +- modules/system/assets/js/lang/lang.sl.js | 176 +- modules/system/assets/js/lang/lang.sv.js | 72 +- modules/system/assets/js/lang/lang.th.js | 70 +- modules/system/assets/js/lang/lang.tr.js | 98 +- modules/system/assets/js/lang/lang.uk.js | 154 +- modules/system/assets/js/lang/lang.zh-cn.js | 113 +- modules/system/assets/js/lang/lang.zh-tw.js | 106 +- modules/system/console/WinterUtil.php | 8 - 51 files changed, 29016 insertions(+), 3914 deletions(-) delete mode 100644 modules/backend/assets/js/winter.datetime.js create mode 100644 modules/backend/assets/ui/js/ui/DateTimeControl.js diff --git a/modules/backend/assets/js/winter-min.js b/modules/backend/assets/js/winter-min.js index 41225f0d1..1756960b3 100644 --- a/modules/backend/assets/js/winter-min.js +++ b/modules/backend/assets/js/winter-min.js @@ -714,44 +714,7 @@ data[option].apply(data,methodArgs)}})} $.fn.sidenavTree.Constructor=SidenavTree $.fn.sidenavTree.noConflict=function(){$.fn.sidenavTree=old return this} -$(document).ready(function(){$('[data-control=sidenav-tree]').sidenavTree()})}(window.jQuery);+function($){"use strict";var Base=$.wn.foundation.base,BaseProto=Base.prototype -var DateTimeConverter=function(element,options){this.$el=$(element) -this.options=options||{} -$.wn.foundation.controlUtils.markDisposable(element) -Base.call(this) -this.init()} -DateTimeConverter.prototype=Object.create(BaseProto) -DateTimeConverter.prototype.constructor=DateTimeConverter -DateTimeConverter.prototype.init=function(){this.initDefaults() -this.$el.text(this.getDateTimeValue()) -this.$el.one('dispose-control',this.proxy(this.dispose))} -DateTimeConverter.prototype.initDefaults=function(){if(!this.options.timezone){this.options.timezone=$('meta[name="backend-timezone"]').attr('content')}if(!this.options.locale){this.options.locale=$('meta[name="backend-locale"]').attr('content')}if(!this.options.format){this.options.format='llll'}if(this.options.formatAlias){this.options.format=this.getFormatFromAlias(this.options.formatAlias)}this.appTimezone=$('meta[name="app-timezone"]').attr('content') -if(!this.appTimezone){this.appTimezone='UTC'}} -DateTimeConverter.prototype.getDateTimeValue=function(){this.datetime=this.$el.attr('datetime') -if(this.$el.get(0).hasAttribute('data-ignore-timezone')){this.appTimezone='UTC' -this.options.timezone='UTC'}var momentObj=moment.tz(this.datetime,this.appTimezone),result -if(this.options.locale){momentObj=momentObj.locale(this.options.locale)}if(this.options.timezone){momentObj=momentObj.tz(this.options.timezone)}if(this.options.timeSince){result=momentObj.fromNow()}else if(this.options.timeTense){result=momentObj.calendar()}else{result=momentObj.format(this.options.format)}return result} -DateTimeConverter.prototype.getFormatFromAlias=function(alias){var map={time:'LT',timeLong:'LTS',date:'L',dateMin:'l',dateLong:'LL',dateLongMin:'ll',dateTime:'LLL',dateTimeMin:'lll',dateTimeLong:'LLLL',dateTimeLongMin:'llll'} -return map[alias]?map[alias]:'llll'} -DateTimeConverter.prototype.dispose=function(){this.$el.off('dispose-control',this.proxy(this.dispose)) -this.$el.removeData('oc.dateTimeConverter') -this.$el=null -this.options=null -BaseProto.dispose.call(this)} -DateTimeConverter.DEFAULTS={format:null,formatAlias:null,timezone:null,locale:null,timeTense:false,timeSince:false} -var old=$.fn.dateTimeConverter -$.fn.dateTimeConverter=function(option){var args=Array.prototype.slice.call(arguments,1),items,result -items=this.each(function(){var $this=$(this) -var data=$this.data('oc.dateTimeConverter') -var options=$.extend({},DateTimeConverter.DEFAULTS,$this.data(),typeof option=='object'&&option) -if(!data)$this.data('oc.dateTimeConverter',(data=new DateTimeConverter(this,options))) -if(typeof option=='string')result=data[option].apply(data,args) -if(typeof result!='undefined')return false}) -return result?result:items} -$.fn.dateTimeConverter.Constructor=DateTimeConverter -$.fn.dateTimeConverter.noConflict=function(){$.fn.dateTimeConverter=old -return this} -$(document).render(function(){$('time[data-datetime-control]').dateTimeConverter()})}(window.jQuery);if($.wn===undefined)$.wn={} +$(document).ready(function(){$('[data-control=sidenav-tree]').sidenavTree()})}(window.jQuery);if($.wn===undefined)$.wn={} if($.oc===undefined)$.oc=$.wn $.wn.backendUrl=function(url){var backendBasePath=$('meta[name="backend-base-path"]').attr('content') if(!backendBasePath)return url diff --git a/modules/backend/assets/js/winter.datetime.js b/modules/backend/assets/js/winter.datetime.js deleted file mode 100644 index 8bab57a33..000000000 --- a/modules/backend/assets/js/winter.datetime.js +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Date time converter. - * See moment.js for format options. - * http://momentjs.com/docs/#/displaying/format/ - * - * Usage: - * - * - * - * Alias options: - * - * time -> 6:28 AM - * timeLong -> 6:28:01 AM - * date -> 04/23/2016 - * dateMin -> 4/23/2016 - * dateLong -> April 23, 2016 - * dateLongMin -> Apr 23, 2016 - * dateTime -> April 23, 2016 6:28 AM - * dateTimeMin -> Apr 23, 2016 6:28 AM - * dateTimeLong -> Saturday, April 23, 2016 6:28 AM - * dateTimeLongMin -> Sat, Apr 23, 2016 6:29 AM - * - */ -+function ($) { "use strict"; - var Base = $.wn.foundation.base, - BaseProto = Base.prototype - - var DateTimeConverter = function (element, options) { - this.$el = $(element) - this.options = options || {} - - $.wn.foundation.controlUtils.markDisposable(element) - Base.call(this) - this.init() - } - - DateTimeConverter.prototype = Object.create(BaseProto) - DateTimeConverter.prototype.constructor = DateTimeConverter - - DateTimeConverter.prototype.init = function() { - this.initDefaults() - - this.$el.text(this.getDateTimeValue()) - - this.$el.one('dispose-control', this.proxy(this.dispose)) - } - - DateTimeConverter.prototype.initDefaults = function() { - if (!this.options.timezone) { - this.options.timezone = $('meta[name="backend-timezone"]').attr('content') - } - - if (!this.options.locale) { - this.options.locale = $('meta[name="backend-locale"]').attr('content') - } - - if (!this.options.format) { - this.options.format = 'llll' - } - - if (this.options.formatAlias) { - this.options.format = this.getFormatFromAlias(this.options.formatAlias) - } - - this.appTimezone = $('meta[name="app-timezone"]').attr('content') - if (!this.appTimezone) { - this.appTimezone = 'UTC' - } - } - - DateTimeConverter.prototype.getDateTimeValue = function() { - this.datetime = this.$el.attr('datetime') - - if (this.$el.get(0).hasAttribute('data-ignore-timezone')) { - this.appTimezone = 'UTC' - this.options.timezone = 'UTC' - } - - var momentObj = moment.tz(this.datetime, this.appTimezone), - result - - if (this.options.locale) { - momentObj = momentObj.locale(this.options.locale) - } - - if (this.options.timezone) { - momentObj = momentObj.tz(this.options.timezone) - } - - if (this.options.timeSince) { - result = momentObj.fromNow() - } - else if (this.options.timeTense) { - result = momentObj.calendar() - } - else { - result = momentObj.format(this.options.format) - } - - return result - } - - DateTimeConverter.prototype.getFormatFromAlias = function(alias) { - var map = { - time: 'LT', - timeLong: 'LTS', - date: 'L', - dateMin: 'l', - dateLong: 'LL', - dateLongMin: 'll', - dateTime: 'LLL', - dateTimeMin: 'lll', - dateTimeLong: 'LLLL', - dateTimeLongMin: 'llll' - } - - return map[alias] ? map[alias] : 'llll' - } - - DateTimeConverter.prototype.dispose = function() { - this.$el.off('dispose-control', this.proxy(this.dispose)) - this.$el.removeData('oc.dateTimeConverter') - - this.$el = null - this.options = null - - BaseProto.dispose.call(this) - } - - DateTimeConverter.DEFAULTS = { - format: null, - formatAlias: null, - timezone: null, - locale: null, - timeTense: false, - timeSince: false - } - - // PLUGIN DEFINITION - // ============================ - - var old = $.fn.dateTimeConverter - - $.fn.dateTimeConverter = function (option) { - var args = Array.prototype.slice.call(arguments, 1), items, result - - items = this.each(function () { - var $this = $(this) - var data = $this.data('oc.dateTimeConverter') - var options = $.extend({}, DateTimeConverter.DEFAULTS, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('oc.dateTimeConverter', (data = new DateTimeConverter(this, options))) - if (typeof option == 'string') result = data[option].apply(data, args) - if (typeof result != 'undefined') return false - }) - - return result ? result : items - } - - $.fn.dateTimeConverter.Constructor = DateTimeConverter - - $.fn.dateTimeConverter.noConflict = function () { - $.fn.dateTimeConverter = old - return this - } - - $(document).render(function (){ - $('time[data-datetime-control]').dateTimeConverter() - }) - -}(window.jQuery); diff --git a/modules/backend/assets/js/winter.js b/modules/backend/assets/js/winter.js index f05a4bced..60344efab 100644 --- a/modules/backend/assets/js/winter.js +++ b/modules/backend/assets/js/winter.js @@ -29,7 +29,6 @@ =require winter.simplelist.js =require winter.treelist.js =require winter.sidenav-tree.js -=require winter.datetime.js =require backend.js */ diff --git a/modules/backend/assets/ui/js/build/backend.js b/modules/backend/assets/ui/js/build/backend.js index 133d5e72d..8047124c2 100644 --- a/modules/backend/assets/ui/js/build/backend.js +++ b/modules/backend/assets/ui/js/build/backend.js @@ -1 +1,910 @@ -"use strict";(self.webpackChunk_wintercms_wn_backend_module=self.webpackChunk_wintercms_wn_backend_module||[]).push([[147],{613:function(e,t,n){var i=n(471),r=n(341);class s extends Snowboard.Singleton{listens(){return{ready:"ready",ajaxFetchOptions:"ajaxFetchOptions",ajaxUpdateComplete:"ajaxUpdateComplete"}}ready(){window.jQuery&&((0,r.c)("render"),document.addEventListener("$render",(()=>{this.snowboard.globalEvent("render")})),window.jQuery(document).trigger("render"))}addPrefilter(){window.jQuery&&window.jQuery.ajaxPrefilter((e=>{this.hasToken()&&(e.headers||(e.headers={}),e.headers["X-CSRF-TOKEN"]=this.getToken())}))}ajaxFetchOptions(e){this.hasToken()&&(e.headers["X-CSRF-TOKEN"]=this.getToken())}ajaxUpdateComplete(){window.jQuery&&window.jQuery(document).trigger("render")}hasToken(){const e=document.querySelector('meta[name="csrf-token"]');return!!e&&!!e.hasAttribute("content")}getToken(){return document.querySelector('meta[name="csrf-token"]').getAttribute("content")}}class a extends Snowboard.PluginBase{construct(e,t){if(e instanceof Snowboard.PluginBase==!1)throw new Error("Event handling can only be applied to Snowboard classes.");if(!t)throw new Error("Event prefix is required.");this.instance=e,this.eventPrefix=t,this.events=[]}on(e,t){this.events.push({event:e,callback:t})}off(e,t){this.events=this.events.filter((n=>n.event!==e||n.callback!==t))}once(e,t){var n=this;const i=this.events.push({event:e,callback:function(){t(...arguments),n.events.splice(i-1,1)}})}fire(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;it.event===e));let s=!1;r.forEach((e=>{s||!1===e.callback(...n)&&(s=!0)})),s||this.snowboard.globalEvent(`${this.eventPrefix}.${e}`,...n)}firePromise(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;it.event===e)),s=r.filter((e=>null!==e),r.map((e=>e.callback(...n))));Promise.all(s).then((()=>{this.snowboard.globalPromiseEvent(`${this.eventPrefix}.${e}`,...n)}))}}class o extends Snowboard.Singleton{construct(){this.registeredWidgets=[],this.elements=[],this.events={mutate:e=>this.onMutation(e)},this.observer=null}listens(){return{ready:"onReady",render:"onRender",ajaxUpdate:"onAjaxUpdate"}}register(e,t,n){this.registeredWidgets.push({control:e,widget:t,callback:n})}unregister(e){this.registeredWidgets=this.registeredWidgets.filter((t=>t.control!==e))}onReady(){this.initializeWidgets(document.body),this.observer||(this.observer=new MutationObserver(this.events.mutate),this.observer.observe(document.body,{childList:!0,subtree:!0}))}onRender(){this.initializeWidgets(document.body)}onAjaxUpdate(e){this.initializeWidgets(e)}initializeWidgets(e){this.registeredWidgets.forEach((t=>{const n=e.querySelectorAll(`[data-control="${t.control}"]:not([data-widget-initialized])`);n.length&&n.forEach((e=>{if(e.dataset.widgetInitialized)return;const n=this.snowboard[t.widget](e);this.elements.push({element:e,instance:n}),e.dataset.widgetInitialized=!0,this.snowboard.globalEvent("backend.widget.initialized",e,n),"function"==typeof t.callback&&t.callback(n,e)}))}))}getWidget(e){const t=this.elements.find((t=>t.element===e));return t?t.instance:null}onMutation(e){const t=e.filter((e=>e.removedNodes.length)).map((e=>Array.from(e.removedNodes))).flat();t.length&&t.forEach((e=>{const t=this.elements.filter((t=>e.contains(t.element)));t.length&&t.forEach((e=>{e.instance.destruct(),this.elements=this.elements.filter((t=>t!==e))}))}))}}if(void 0===window.Snowboard)throw new Error("Snowboard must be loaded in order to use the Backend UI.");(e=>{e.addPlugin("backend.ajax.handler",s),e.addPlugin("backend.ui.eventHandler",a),e.addPlugin("backend.ui.widgetHandler",o),e["backend.ajax.handler"]().addPrefilter(),window.AssetManager={load:(t,n)=>{e.assetLoader().load(t).then((()=>{n&&"function"==typeof n&&n()}))}},window.assetManager=window.AssetManager})(window.Snowboard),window.Vue=i}},function(e){e.O(0,[101],(function(){return t=613,e(e.s=t);var t}));e.O()}]); \ No newline at end of file +"use strict"; +(self["webpackChunk_wintercms_wn_backend_module"] = self["webpackChunk_wintercms_wn_backend_module"] || []).push([["/assets/ui/js/build/backend"],{ + +/***/ "./assets/ui/js/ajax/Handler.js": +/*!**************************************!*\ + !*** ./assets/ui/js/ajax/Handler.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Handler) +/* harmony export */ }); +/* harmony import */ var jquery_events_to_dom_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery-events-to-dom-events */ "../../node_modules/jquery-events-to-dom-events/dist/index.m.js"); +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + +/** + * Backend AJAX handler. + * + * This is a utility script that resolves some backwards-compatibility issues with the functionality + * that relies on the old framework, and ensures that Snowboard works well within the Backend + * environment. + * + * Functions: + * - Adds the "render" jQuery event to Snowboard requests that widgets use to initialise. + * - Ensures the CSRF token is included in requests. + * + * @copyright 2021 Winter. + * @author Ben Thomson + */ +var Handler = /*#__PURE__*/function (_Snowboard$Singleton) { + _inherits(Handler, _Snowboard$Singleton); + var _super = _createSuper(Handler); + function Handler() { + _classCallCheck(this, Handler); + return _super.apply(this, arguments); + } + _createClass(Handler, [{ + key: "listens", + value: + /** + * Event listeners. + * + * @returns {Object} + */ + function listens() { + return { + ready: 'ready', + ajaxFetchOptions: 'ajaxFetchOptions', + ajaxUpdateComplete: 'ajaxUpdateComplete' + }; + } + + /** + * Ready handler. + * + * Fires off a "render" event. + */ + }, { + key: "ready", + value: function ready() { + var _this = this; + if (!window.jQuery) { + return; + } + + // Add global event for rendering in Snowboard + (0,jquery_events_to_dom_events__WEBPACK_IMPORTED_MODULE_0__.delegate)('render'); + document.addEventListener('$render', function () { + _this.snowboard.globalEvent('render'); + }); + + // Add "render" event for backwards compatibility + window.jQuery(document).trigger('render'); + } + + /** + * Adds the jQuery AJAX prefilter that the old framework uses to inject the CSRF token in AJAX + * calls. + */ + }, { + key: "addPrefilter", + value: function addPrefilter() { + var _this2 = this; + if (!window.jQuery) { + return; + } + window.jQuery.ajaxPrefilter(function (options) { + if (_this2.hasToken()) { + if (!options.headers) { + options.headers = {}; + } + options.headers['X-CSRF-TOKEN'] = _this2.getToken(); + } + }); + } + + /** + * Fetch options handler. + * + * Ensures that the CSRF token is included in Snowboard requests. + * + * @param {Object} options + */ + }, { + key: "ajaxFetchOptions", + value: function ajaxFetchOptions(options) { + if (this.hasToken()) { + options.headers['X-CSRF-TOKEN'] = this.getToken(); + } + } + + /** + * Update complete handler. + * + * Fires off a "render" event when partials are updated so that any widgets included in + * responses are correctly initialised. + */ + }, { + key: "ajaxUpdateComplete", + value: function ajaxUpdateComplete() { + if (!window.jQuery) { + return; + } + + // Add "render" event for backwards compatibility + window.jQuery(document).trigger('render'); + } + + /** + * Determines if a CSRF token is available. + * + * @returns {Boolean} + */ + }, { + key: "hasToken", + value: function hasToken() { + var tokenElement = document.querySelector('meta[name="csrf-token"]'); + if (!tokenElement) { + return false; + } + if (!tokenElement.hasAttribute('content')) { + return false; + } + return true; + } + + /** + * Gets the CSRF token. + * + * @returns {String} + */ + }, { + key: "getToken", + value: function getToken() { + return document.querySelector('meta[name="csrf-token"]').getAttribute('content'); + } + }]); + return Handler; +}(Snowboard.Singleton); + + +/***/ }), + +/***/ "./assets/ui/js/index.js": +/*!*******************************!*\ + !*** ./assets/ui/js/index.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "../../node_modules/vue/dist/vue.esm-bundler.js"); +/* harmony import */ var _ajax_Handler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ajax/Handler */ "./assets/ui/js/ajax/Handler.js"); +/* harmony import */ var _ui_DateTimeControl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ui/DateTimeControl */ "./assets/ui/js/ui/DateTimeControl.js"); +/* harmony import */ var _ui_EventHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/EventHandler */ "./assets/ui/js/ui/EventHandler.js"); +/* harmony import */ var _ui_WidgetHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/WidgetHandler */ "./assets/ui/js/ui/WidgetHandler.js"); + + + + + +if (window.Snowboard === undefined) { + throw new Error('Snowboard must be loaded in order to use the Backend UI.'); +} +(function (Snowboard) { + // Add necessary plugins + Snowboard.addPlugin('backend.ajax.handler', _ajax_Handler__WEBPACK_IMPORTED_MODULE_1__["default"]); + Snowboard.addPlugin('backend.ui.eventHandler', _ui_EventHandler__WEBPACK_IMPORTED_MODULE_3__["default"]); + Snowboard.addPlugin('backend.ui.widgetHandler', _ui_WidgetHandler__WEBPACK_IMPORTED_MODULE_4__["default"]); + + // Add the pre-filter immediately + Snowboard['backend.ajax.handler']().addPrefilter(); + + // Global controls + Snowboard.addPlugin('backend.ui.dateTimeControl', _ui_DateTimeControl__WEBPACK_IMPORTED_MODULE_2__["default"]); + Snowboard['backend.ui.widgetHandler']().register('datetime', 'backend.ui.dateTimeControl'); + + // Add polyfill for AssetManager + window.AssetManager = { + load: function load(assets, callback) { + Snowboard.assetLoader().load(assets).then(function () { + if (callback && typeof callback === 'function') { + callback(); + } + }); + } + }; + window.assetManager = window.AssetManager; +})(window.Snowboard); + +// Add Vue to global scope +window.Vue = vue__WEBPACK_IMPORTED_MODULE_0__; + +/***/ }), + +/***/ "./assets/ui/js/ui/DateTimeControl.js": +/*!********************************************!*\ + !*** ./assets/ui/js/ui/DateTimeControl.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ DateTimeControl) +/* harmony export */ }); +/* harmony import */ var luxon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! luxon */ "../../node_modules/luxon/src/luxon.js"); +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + +/** + * DateTime control. + * + * This control uses the Luxon time library to display time and date values. It will be attached to + * `