{ "version": 3, "sources": ["../../src/es6/lib/signals.js", "../../src/es6/DojoTemplates.js", "../../src/es6/AutoComplete.js", "../../src/es6/Eventify.js", "../../src/es6/ClassRecordEditor.js", "../../src/es6/ClassRecordTechniquesModel.js", "../../src/es6/classrecord_student_attendance/StudentAttendanceModel.js", "../../src/es6/classrecord_student_attendance/StudentAttendancePresentModel.js", "../../src/es6/classrecord_student_attendance/StudentAttendanceCard.js", "../../src/es6/classrecord_student_attendance/StudentAttendanceTable.js", "../../src/es6/ClassRecordTechniquesEditor.js", "../../src/es6/ClassRecordTechniqueComponent.js", "../../src/es6/ClassRecordDetailsEditor.js", "../../src/es6/ClassRecordNavigationButtons.js", "../../src/es6/DateToDayDisplay.js", "../../src/es6/Pager.js", "../../src/es6/ClassRecordSummaryTable.js", "../../src/es6/ClassRecordSummaryTableController.js", "../../src/es6/ClassRecordSummaryTableRow.js", "../../src/es6/FormsTabContainer.js", "../../src/es6/FormsTabPanel.js", "../../src/es6/formal/FormGenerator.js", "../../src/es6/formal/FormField.js", "../../src/es6/formal/FormModel.js", "../../src/es6/LoginForm.js", "../../src/es6/StudentListController.js", "../../src/es6/StudentListModel.js", "../../src/es6/StudentSelectModel.js", "../../src/es6/StudentListTable.js", "../../src/es6/StudentAttendanceSummaryCard.js", "../../src/es6/StudentInfoForm.js", "../../src/es6/StudentListTableRow.js", "../../src/es6/StudentAttendanceByDateBadges.js", "../../src/es6/MessageForm.js", "../../src/es6/TechniquesAutoComplete.js", "../../src/es6/DojoPopup.js", "../../src/es6/DataComponents.js", "../../src/es6/DojoMenu.js", "../../src/es6/DojoAPI.js", "../../src/es6/DojoAPIWs.js", "../../src/es6/DojoTabs.js", "../../src/es6/TopMenu.js", "../../src/es6/DojoDeshi.js", "../../src/es6/RPCClick.js"], "sourcesContent": ["/*jslint onevar:true, undef:true, newcap:true, regexp:true, bitwise:true, maxerr:50, indent:4, white:false, nomen:false, plusplus:false */\n/*global define:false, require:false, exports:false, module:false, signals:false */\n\n/** @license\n * JS Signals \n * Released under the MIT license\n * Author: Miller Medeiros\n * Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM)\n */\n\n(function(global){\n\n // SignalBinding -------------------------------------------------\n //================================================================\n\n /**\n * Object that represents a binding between a Signal and a listener function.\n *
- This is an internal constructor and shouldn't be called by regular users.\n *
- inspired by Joa Ebert AS3 SignalBinding and Robert Penner's Slot classes.\n * @author Miller Medeiros\n * @constructor\n * @internal\n * @name SignalBinding\n * @param {Signal} signal Reference to Signal object that listener is currently bound to.\n * @param {Function} listener Handler function bound to the signal.\n * @param {boolean} isOnce If binding should be executed just once.\n * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n * @param {Number} [priority] The priority level of the event listener. (default = 0).\n */\n function SignalBinding(signal, listener, isOnce, listenerContext, priority) {\n\n /**\n * Handler function bound to the signal.\n * @type Function\n * @private\n */\n this._listener = listener;\n\n /**\n * If binding should be executed just once.\n * @type boolean\n * @private\n */\n this._isOnce = isOnce;\n\n /**\n * Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n * @memberOf SignalBinding.prototype\n * @name context\n * @type Object|undefined|null\n */\n this.context = listenerContext;\n\n /**\n * Reference to Signal object that listener is currently bound to.\n * @type Signal\n * @private\n */\n this._signal = signal;\n\n /**\n * Listener priority\n * @type Number\n * @private\n */\n this._priority = priority || 0;\n }\n\n SignalBinding.prototype = {\n\n /**\n * If binding is active and should be executed.\n * @type boolean\n */\n active : true,\n\n /**\n * Default parameters passed to listener during `Signal.dispatch` and `SignalBinding.execute`. (curried parameters)\n * @type Array|null\n */\n params : null,\n\n /**\n * Call listener passing arbitrary parameters.\n *

If binding was added using `Signal.addOnce()` it will be automatically removed from signal dispatch queue, this method is used internally for the signal dispatch.

\n * @param {Array} [paramsArr] Array of parameters that should be passed to the listener\n * @return {*} Value returned by the listener.\n */\n execute : function (paramsArr) {\n var handlerReturn, params;\n if (this.active && !!this._listener) {\n params = this.params? this.params.concat(paramsArr) : paramsArr;\n handlerReturn = this._listener.apply(this.context, params);\n if (this._isOnce) {\n this.detach();\n }\n }\n return handlerReturn;\n },\n\n /**\n * Detach binding from signal.\n * - alias to: mySignal.remove(myBinding.getListener());\n * @return {Function|null} Handler function bound to the signal or `null` if binding was previously detached.\n */\n detach : function () {\n return this.isBound()? this._signal.remove(this._listener, this.context) : null;\n },\n\n /**\n * @return {Boolean} `true` if binding is still bound to the signal and have a listener.\n */\n isBound : function () {\n return (!!this._signal && !!this._listener);\n },\n\n /**\n * @return {boolean} If SignalBinding will only be executed once.\n */\n isOnce : function () {\n return this._isOnce;\n },\n\n /**\n * @return {Function} Handler function bound to the signal.\n */\n getListener : function () {\n return this._listener;\n },\n\n /**\n * @return {Signal} Signal that listener is currently bound to.\n */\n getSignal : function () {\n return this._signal;\n },\n\n /**\n * Delete instance properties\n * @private\n */\n _destroy : function () {\n delete this._signal;\n delete this._listener;\n delete this.context;\n },\n\n /**\n * @return {string} String representation of the object.\n */\n toString : function () {\n return '[SignalBinding isOnce:' + this._isOnce +', isBound:'+ this.isBound() +', active:' + this.active + ']';\n }\n\n };\n\n\n/*global SignalBinding:false*/\n\n // Signal --------------------------------------------------------\n //================================================================\n\n function validateListener(listener, fnName) {\n if (typeof listener !== 'function') {\n throw new Error( 'listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName) );\n }\n }\n\n /**\n * Custom event broadcaster\n *
- inspired by Robert Penner's AS3 Signals.\n * @name Signal\n * @author Miller Medeiros\n * @constructor\n */\n function Signal() {\n /**\n * @type Array.\n * @private\n */\n this._bindings = [];\n this._prevParams = null;\n\n // enforce dispatch to aways work on same context (#47)\n var self = this;\n this.dispatch = function(){\n Signal.prototype.dispatch.apply(self, arguments);\n };\n }\n\n Signal.prototype = {\n\n /**\n * Signals Version Number\n * @type String\n * @const\n */\n VERSION : '1.0.0',\n\n /**\n * If Signal should keep record of previously dispatched parameters and\n * automatically execute listener during `add()`/`addOnce()` if Signal was\n * already dispatched before.\n * @type boolean\n */\n memorize : false,\n\n /**\n * @type boolean\n * @private\n */\n _shouldPropagate : true,\n\n /**\n * If Signal is active and should broadcast events.\n *

IMPORTANT: Setting this property during a dispatch will only affect the next dispatch, if you want to stop the propagation of a signal use `halt()` instead.

\n * @type boolean\n */\n active : true,\n\n /**\n * @param {Function} listener\n * @param {boolean} isOnce\n * @param {Object} [listenerContext]\n * @param {Number} [priority]\n * @return {SignalBinding}\n * @private\n */\n _registerListener : function (listener, isOnce, listenerContext, priority) {\n\n var prevIndex = this._indexOfListener(listener, listenerContext),\n binding;\n\n if (prevIndex !== -1) {\n binding = this._bindings[prevIndex];\n if (binding.isOnce() !== isOnce) {\n throw new Error('You cannot add'+ (isOnce? '' : 'Once') +'() then add'+ (!isOnce? '' : 'Once') +'() the same listener without removing the relationship first.');\n }\n } else {\n binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);\n this._addBinding(binding);\n }\n\n if(this.memorize && this._prevParams){\n binding.execute(this._prevParams);\n }\n\n return binding;\n },\n\n /**\n * @param {SignalBinding} binding\n * @private\n */\n _addBinding : function (binding) {\n //simplified insertion sort\n var n = this._bindings.length;\n do { --n; } while (this._bindings[n] && binding._priority <= this._bindings[n]._priority);\n this._bindings.splice(n + 1, 0, binding);\n },\n\n /**\n * @param {Function} listener\n * @return {number}\n * @private\n */\n _indexOfListener : function (listener, context) {\n var n = this._bindings.length,\n cur;\n while (n--) {\n cur = this._bindings[n];\n if (cur._listener === listener && cur.context === context) {\n return n;\n }\n }\n return -1;\n },\n\n /**\n * Check if listener was attached to Signal.\n * @param {Function} listener\n * @param {Object} [context]\n * @return {boolean} if Signal has the specified listener.\n */\n has : function (listener, context) {\n return this._indexOfListener(listener, context) !== -1;\n },\n\n /**\n * Add a listener to the signal.\n * @param {Function} listener Signal handler function.\n * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n */\n add : function (listener, listenerContext, priority) {\n validateListener(listener, 'add');\n return this._registerListener(listener, false, listenerContext, priority);\n },\n\n /**\n * Add listener to the signal that should be removed after first execution (will be executed only once).\n * @param {Function} listener Signal handler function.\n * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n */\n addOnce : function (listener, listenerContext, priority) {\n validateListener(listener, 'addOnce');\n return this._registerListener(listener, true, listenerContext, priority);\n },\n\n /**\n * Remove a single listener from the dispatch queue.\n * @param {Function} listener Handler function that should be removed.\n * @param {Object} [context] Execution context (since you can add the same handler multiple times if executing in a different context).\n * @return {Function} Listener handler function.\n */\n remove : function (listener, context) {\n validateListener(listener, 'remove');\n\n var i = this._indexOfListener(listener, context);\n if (i !== -1) {\n this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn't attached to a signal\n this._bindings.splice(i, 1);\n }\n return listener;\n },\n\n /**\n * Remove all listeners from the Signal.\n */\n removeAll : function () {\n var n = this._bindings.length;\n while (n--) {\n this._bindings[n]._destroy();\n }\n this._bindings.length = 0;\n },\n\n /**\n * @return {number} Number of listeners attached to the Signal.\n */\n getNumListeners : function () {\n return this._bindings.length;\n },\n\n /**\n * Stop propagation of the event, blocking the dispatch to next listeners on the queue.\n *

IMPORTANT: should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.

\n * @see Signal.prototype.disable\n */\n halt : function () {\n this._shouldPropagate = false;\n },\n\n /**\n * Dispatch/Broadcast Signal to all listeners added to the queue.\n * @param {...*} [params] Parameters that should be passed to each handler.\n */\n dispatch : function (params) {\n if (! this.active) {\n return;\n }\n\n var paramsArr = Array.prototype.slice.call(arguments),\n n = this._bindings.length,\n bindings;\n\n if (this.memorize) {\n this._prevParams = paramsArr;\n }\n\n if (! n) {\n //should come after memorize\n return;\n }\n\n bindings = this._bindings.slice(); //clone array in case add/remove items during dispatch\n this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch.\n\n //execute all callbacks until end of the list or until a callback returns `false` or stops propagation\n //reverse loop since listeners with higher priority will be added at the end of the list\n do { n--; } while (bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false);\n },\n\n /**\n * Forget memorized arguments.\n * @see Signal.memorize\n */\n forget : function(){\n this._prevParams = null;\n },\n\n /**\n * Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).\n *

IMPORTANT: calling any method on the signal instance after calling dispose will throw errors.

\n */\n dispose : function () {\n this.removeAll();\n delete this._bindings;\n delete this._prevParams;\n },\n\n /**\n * @return {string} String representation of the object.\n */\n toString : function () {\n return '[Signal active:'+ this.active +' numListeners:'+ this.getNumListeners() +']';\n }\n\n };\n\n\n // Namespace -----------------------------------------------------\n //================================================================\n\n /**\n * Signals namespace\n * @namespace\n * @name signals\n */\n var signals = Signal;\n\n /**\n * Custom event broadcaster\n * @see Signal\n */\n // alias for backwards compatibility (see #gh-44)\n signals.Signal = Signal;\n\n\n\n //exports to multiple environments\n if(typeof define === 'function' && define.amd){ //AMD\n define(function () { return signals; });\n } else if (typeof module !== 'undefined' && module.exports){ //node\n module.exports = signals;\n } else { //browser\n //use string because of Google closure compiler ADVANCED_MODE\n /*jslint sub:true */\n global['signals'] = signals;\n }\n\n}(this));\n", "// dtemplate generated - do not edit\nexport const DojoTemplates= (function() {\t\n\tlet templates =\n\t\t{\"AbsentStudentComponent\":\"\\u003ctable\\u003e\\n\\u003ctr data-set=\\\"this\\\"\\u003e\\n\\u003ctd data-set=\\\"Surname\\\"/\\u003e\\n\\u003ctd data-set=\\\"Firstname\\\"/\\u003e\\n\\u003ctd\\u003e\\u003ca data-set=\\\"add\\\" data-event=\\\"click:clickAdd\\\" class=\\\"fa fa-plus\\\" href=\\\"#\\\"/\\u003e\\u003c/td\\u003e\\n\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"AbsentStudentList\":\"\\u003ctable\\u003e\\n\\u003cthead\\u003e\\u003ctr\\u003e\\u003cth\\u003eSurname\\u003c/th\\u003e\\u003cth\\u003eFirstname\\u003c/th\\u003e\\u003cth/\\u003e\\u003c/tr\\u003e\\u003c/thead\\u003e\\n\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\",\"AutoComplete\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: stretch; }\\n\\ninput {\\n font-size: 1.2em;\\n padding: 0.3em 0.6em; }\\n\\n#items {\\n display: flex;\\n flex-direction: row;\\n justify-content: flex-start;\\n align-items: baseline;\\n flex-wrap: wrap;\\n gap: 1em;\\n padding: 1em 0; }\\n #items \\u003e span {\\n padding: 0.4em 1em;\\n border: 1px solid var(--dd-background-color-selected);\\n border-radius: 50px; }\\n\\u003c/style\\u003e\\n\\t\\u003cinput type=\\\"text\\\" id=\\\"input\\\"/\\u003e\\n\\t\\u003cdiv id=\\\"items\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"ClassRecordStudentComponent\":\"\\u003ctr\\u003e\\n\\t\\u003ctd data-set=\\\"Firstname\\\"/\\u003e\\n\\t\\u003ctd data-set=\\\"Surname\\\"/\\u003e\\n\\t\\u003ctd\\u003eAttendance Type\\u003c/td\\u003e\\n\\t\\u003ctd\\u003e\\u003ca data-set=\\\"remove\\\" class=\\\"fa fa-trash\\\"/\\u003e\\u003c/td\\u003e\\n\\u003c/tr\\u003e\\n\",\"ClassRecordStudentListEditor\":\"\\u003cdiv class=\\\"row\\\"\\u003e\\n\\t\\u003cdiv class=\\\"small-6 columns\\\"\\u003e\\n\\t\\u003ch2\\u003eAbsent\\u003c/h2\\u003e\\n\\t\\u003cdiv data-set=\\\"absentList\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"small-6 columns\\\"\\u003e\\n\\t\\u003ch2\\u003ePresent\\u003c/h2\\u003e\\n\\t\\u003cdiv data-set=\\\"presentList\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"ClassRecordSummaryTable\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e.summary-table {\\n display: grid;\\n grid-template-columns: repeat(7, max-content);\\n column-gap: 0;\\n row-gap: 0.4em; }\\n .summary-table \\u003e div {\\n display: contents; }\\n .summary-table \\u003e div:first-child \\u003e div {\\n font-weight: bold;\\n background-color: #f8f8f8;\\n padding: 0.2em; }\\n .summary-table \\u003e div \\u003e div {\\n padding: 0.2em 0.4em;\\n transition: background-color var(--dd-fade-fast, 0.2s), color var(--dd-fade-fast, 0.2s); }\\n .summary-table \\u003e div:not(:first-child):hover \\u003e div {\\n background-color: var(--dd-background-color-hover, #def);\\n color: var(--dd-color-hover);\\n cursor: pointer; }\\n\\u003c/style\\u003e\\n\\t\\u003cdojo-pager data-event=\\\"pager-goto:gotoPage\\\" page=\\\"0\\\" page-count=\\\"1\\\" record-count=\\\"0\\\" id=\\\"pager\\\"\\u003e \\u003c/dojo-pager\\u003e\\n\\t\\u003cdiv class=\\\"summary-table\\\" id=\\\"summaryTable\\\"\\u003e\\n\\t\\t\\u003cdiv id=\\\"summaryHeader\\\"\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eDate\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eDay\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eStart\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eArt\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eClass Type\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eStudents\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv\\u003eTechniques\\u003c/div\\u003e\\n\\t\\t\\u003c/div\\u003e\\n\\t\\t\\n\\t\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"ClassRecordSummaryTable.Record\":\"\\u003cdiv dtemplate-child=\\\"Record\\\"\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"date\\\"\\u003eDate\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"day\\\"\\u003eDay\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"start\\\"\\u003eStart\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"art\\\"\\u003eArt\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"classType\\\"\\u003eClass Type\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"students\\\"\\u003eStudents\\u003c/div\\u003e\\n\\t\\t\\t\\u003cdiv id=\\\"techniques\\\"\\u003eTechniques\\u003c/div\\u003e\\n\\t\\t\\u003c/div\\u003e\",\"ClassRecordTechniqueComponent\":\"\\u003ctable\\u003e\\u003ctr data-set=\\\"this\\\"\\u003e\\n \\u003ctd data-set=\\\"Name\\\"/\\u003e\\n\\t\\u003ctd\\u003e\\u003ca data-set=\\\"remove\\\" class=\\\"fa fa-trash\\\"/\\u003e\\u003c/td\\u003e\\n\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"ClassRecordTechniquesEditor\":\"\\u003cdiv\\u003e\\n\\u003c!-- #dojo-techniques-auto-complete _IS ON THE MAIN PAGE, in this case `classrecord_students_waza_edit.html`, and is referenced here to do the auto-\\n\\tcompletion for techniques --\\u003e\\n\\u003cdojo-auto-complete id=\\\"techniqueEntry\\\" data-provider-id=\\\"dojo-techniques-auto-complete\\\"\\u003e\\n\\u003c/dojo-auto-complete\\u003e\\n\\t\\u003ctable class=\\\"table\\\"\\u003e\\n\\t\\t\\u003ctbody data-set=\\\"techniquesList\\\"/\\u003e\\n\\t\\u003c/table\\u003e\\n\\u003c/div\\u003e\\n\",\"DojoForm\":\"\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cdiv class=\\\"edit-form\\\"\\u003e\\n\\u003cdiv data-set=\\\"closeButton\\\" class=\\\"form-close fa fa-close\\\"\\u003e \\u003c/div\\u003e\\u0026nbsp;\\u003c/div\\u003e\\n\\u003cform\\u003e\\n\\u003clabel\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eDojo Name\\u003c/span\\u003e\\n\\u003cinput type=\\\"text\\\" data-set=\\\"Name\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003clabel\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eDojo Email\\u003c/span\\u003e\\n\\u003cinput type=\\\"text\\\" data-set=\\\"Email\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003clabel\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eTimezone Offset (minutes East of UTC)\\u003c/span\\u003e\\n\\u003cinput type=\\\"text\\\" data-set=\\\"Offset\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003cbutton data-set=\\\"save\\\" class=\\\"button\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eSave\\u003c/span\\u003e\\u003c/button\\u003e\\n\\u003c/form\\u003e\\n\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\",\"DojoFormsEditor\":\"\\u003cdiv class=\\\"dojo-forms-editor\\\"\\u003e\\n\\t\\u003cdiv data-set=\\\"list\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"editor\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"DojoList\":\"\\u003ctable\\u003e\\n\\t\\u003cthead\\u003e\\u003ctr\\u003e\\u003cth\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eName\\u003c/span\\u003e\\u003c/th\\u003e\\u003cth\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eForms\\u003c/span\\u003e\\u003c/th\\u003e\\u003c/tr\\u003e\\u003c/thead\\u003e\\n\\t\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\t\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\",\"DojoListItem\":\"\\u003ctable\\u003e\\n\\t\\u003ctr data-set=\\\"this\\\" class=\\\"hover-row\\\"\\u003e\\n\\t\\t\\u003ctd data-set=\\\"Name\\\" data-event=\\\"click:dojoClick\\\"\\u003e-\\u003c/td\\u003e\\n\\t\\t\\u003ctd data-event=\\\"click:dojoFormsClick\\\"\\u003e\\u003ca href=\\\"#\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eForms\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/td\\u003e\\n\\t\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"DojoMenu\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n filter: drop-shadow(3px 3px 6px rgba(0, 0, 0, 0.5)); }\\n\\nnav#menu {\\n --widget-width: 10em;\\n display: flex;\\n flex-direction: column;\\n justify-content: flex-start;\\n align-items: stretch;\\n position: fixed;\\n top: 0;\\n left: 0;\\n border: 1px solid #336;\\n border-top-width: 0;\\n border-left-width: 0;\\n background-color: #f8f8f8;\\n padding: 1em;\\n box-sizing: border-box;\\n width: var(--widget-width); }\\n nav#menu .closer {\\n position: fixed;\\n top: 0;\\n left: var(--widget-width);\\n background-color: white;\\n padding: 1em;\\n border-top-right-radius: 4px;\\n border-bottom-right-radius: 4px; }\\n nav#menu .closer \\u003e #menu-icon {\\n display: none; }\\n nav#menu .closer \\u003e #close-icon {\\n display: block; }\\n nav#menu .closer \\u003e svg {\\n width: 1.4em; }\\n nav#menu .closer \\u003e svg \\u003e g {\\n fill: none;\\n stroke-width: 1.5;\\n stroke: #333; }\\n nav#menu.hide {\\n left: calc(-1 * var(--widget-width));\\n display: flex; }\\n nav#menu.hide .closer {\\n left: 0; }\\n nav#menu.hide .closer \\u003e #menu-icon {\\n display: block; }\\n nav#menu.hide .closer \\u003e #close-icon {\\n display: none; }\\n nav#menu, nav#menu .closer {\\n transition: left 0.3s; }\\n\\u003c/style\\u003e\\n\\t\\u003cnav id=\\\"menu\\\"\\u003e\\n\\t\\u003ca href=\\\"/\\\"\\u003eDojoDeshi\\u003c/a\\u003e\\n\\t\\u003cslot\\u003e\\n\\t\\u003c/slot\\u003e\\n\\t\\u003cdiv class=\\\"closer\\\" data-event=\\\"click:toggleDisplay\\\"\\u003e\\n\\t\\t\\t\\u003csvg id=\\\"close-icon\\\" viewBox=\\\"0 0 10 10\\\"\\u003e\\n\\t\\t\\t\\t\\u003cg\\u003e\\u003cpath d=\\\"M6 2L3 5L6 8\\\"/\\u003e\\u003c/g\\u003e\\n\\t\\t\\t\\u003c/svg\\u003e\\n\\t\\t\\t\\u003csvg viewBox=\\\"0 0 10 10\\\" id=\\\"menu-icon\\\"\\u003e\\n\\t\\t\\t\\t\\u003cg\\u003e\\u003cpath d=\\\"M1 2L9 2M1 5L9 5M1 8L9 8\\\"/\\u003e\\u003c/g\\u003e\\n\\t\\t\\t\\u003c/svg\\u003e\\n\\t\\u003c/div\\u003e\\n\\t\\u003c/nav\\u003e\\n\\u003c/template\\u003e\\n\",\"DojoPopup\":\"\\u003ctemplate\\u003e\\n\\u003cstyle\\u003e#cover {\\n background-color: rgba(0, 0, 0, 0.5);\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n z-index: 900; }\\n\\n#popup {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: stretch;\\n z-index: 1000; }\\n\\nheader {\\n border-top-right-radius: 0.4em;\\n border-top-left-radius: 0.4em;\\n background-color: var(--dd-background-color);\\n color: white;\\n font-weight: bold;\\n padding: 1em 0;\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n align-items: baseline;\\n padding: 0.6em 1em; }\\n header svg {\\n width: 1.4em; }\\n\\nmain {\\n border-bottom-right-radius: 0.4em;\\n border-bottom-left-radius: 0.4em;\\n background-color: white;\\n color: #333;\\n padding: 1em; }\\n\\u003c/style\\u003e\\n\\u003cdiv id=\\\"cover\\\"\\u003e\\n\\t\\u003cdiv id=\\\"popup\\\"\\u003e\\n\\t\\u003cheader\\u003e\\n\\u003cslot name=\\\"title\\\"\\u003e \\u003c/slot\\u003e\\u003cdiv id=\\\"close\\\" data-event=\\\"click:closePopup\\\"\\u003e\\u003csvg viewBox=\\\"0 0 10 10\\\"\\u003e\\u003cg stroke=\\\"white\\\" stroke-width=\\\"2\\\"\\u003e\\u003cpath d=\\\"M2 2L8 8M2 8L8 2\\\"/\\u003e\\u003c/g\\u003e\\u003c/svg\\u003e\\u003c/div\\u003e\\n\\u003c/header\\u003e\\n\\u003cmain\\u003e\\n\\u003cslot\\u003e \\u003c/slot\\u003e\\n\\u003c/main\\u003e\\n\\u003c/div\\u003e\\n\\u003c/div\\u003e\\u003c/template\\u003e\\n\",\"DojoRow\":\"\\u003ctable\\u003e\\n\\t\\u003ctr data-set=\\\"this\\\"\\u003e\\n\\t\\t\\u003ctd data-set=\\\"name\\\"\\u003e-\\u003c/td\\u003e\\n\\t\\t\\u003ctd data-set=\\\"offset\\\"\\u003e-\\u003c/td\\u003e\\n\\t\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"DojoStudentList\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: block;\\n width: 100%;\\n background: white;\\n -webkit-box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4);\\n -moz-box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4);\\n box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4); }\\n\\n.component-dojo-student-list {\\n background-color: red; }\\n\\u003c/style\\u003e\\n\\t\\u003cdiv class=\\\"component-dojo-student-list\\\"\\u003e\\u003cdiv\\u003eMy dojo-student-list\\u003c/div\\u003e\\u003ccontent/\\u003e\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"DojoStudentRecord\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: block;\\n width: 100%;\\n background: white;\\n -webkit-box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4);\\n -moz-box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4);\\n box-shadow: 1px 1px 2px 2px rgba(0, 0, 0, 0.4); }\\n\\n.component-dojo-student-record {\\n background-color: red; }\\n\\u003c/style\\u003e\\n\\t\\u003cdiv class=\\\"component-dojo-student-record\\\"\\u003e\\u003cdiv\\u003eMy dojo-student-record\\u003c/div\\u003e\\u003ccontent/\\u003e\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"DojoTabs\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: flex;\\n flex-direction: column;\\n justify-content: flex-start;\\n align-items: stretch; }\\n\\nheader {\\n flex-grow: 0;\\n display: flex;\\n flex-direction: row;\\n column-gap: 0;\\n row-gap: 0;\\n flex-wrap: wrap; }\\n header \\u003e span {\\n cursor: pointer;\\n border: 1px solid var(--dd-background-color-selected);\\n border-left-width: 0px;\\n border-bottom-width: 0;\\n padding: 0.6em 1em; }\\n header \\u003e span:first-child {\\n border-left-width: 1px; }\\n header \\u003e span.selected {\\n background-color: var(--dd-background-color-selected);\\n color: white; }\\n\\n#main {\\n border: 1px solid var(--dd-background-color-selected);\\n flex-grow: 1;\\n padding: 1em; }\\n\\u003c/style\\u003e\\n\\t\\u003cheader id=\\\"header\\\"\\u003e\\n\\t\\u003c/header\\u003e\\n\\t\\u003cdiv id=\\\"main\\\"\\u003e\\n\\t\\u003cslot id=\\\"slot\\\"\\u003e\\n\\t\\u003c/slot\\u003e\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"DojosEditor\":\"\\u003cdiv\\u003e\\n\\t\\u003cbutton data-set=\\\"addDojo\\\" class=\\\"button\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eNew Dojo\\u003c/span\\u003e\\u003c/button\\u003e\\n\\t\\u003cdiv data-set=\\\"form\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"list\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"FormsTabContainer\":\"\\u003cdojo-tabs id=\\\"tabs\\\" data-id=\\\"FormsTabContainer.html tabs\\\"\\u003e\\n\\t\\u003cdiv tab-title=\\\"Student\\\"\\u003e\\n\\t\\tStudent tab defined in FormsTabContainer.html\\n\\t\\u003c/div\\u003e\\n\\u003c/dojo-tabs\\u003e\\n\",\"FormsTabPanel\":\"\\u003cdiv\\u003e\\n\\t\\u003cul\\u003e\\n\\t\\t\\u003cli class=\\\"tabs-title\\\" data-set=\\\"tab\\\"\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"a\\\"\\u003e-\\u003c/a\\u003e\\u003c/li\\u003e\\n\\t\\u003c/ul\\u003e\\n\\t\\u003cdiv data-set=\\\"panel\\\" class=\\\"tabs-panel\\\" id=\\\"defaultForm\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"LoginForm\":\"\\u003cdiv class=\\\"login-form-container\\\"\\u003e\\n\\u003ch1\\u003eDojo Deshi\\u003c/h1\\u003e\\n\\u003cdiv class=\\\"callout\\\" data-set=\\\"callout\\\"\\u003e\\n\\u003c/div\\u003e\\n\\u003cform method=\\\"post\\\" action=\\\"/login\\\" class=\\\"form\\\"\\u003e\\n\\u003clabel\\u003eEmail or Mobile\\n\\u003cinput type=\\\"text\\\" name=\\\"identity\\\" placeholder=\\\"Email address or mobile number in international format\\\" data-set=\\\"identity\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003cdiv data-set=\\\"passwordContainer\\\"\\u003e\\n\\u003clabel\\u003ePassword\\n\\u003cinput type=\\\"password\\\" name=\\\"password\\\" data-set=\\\"password\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003c/div\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-6 columns\\\"\\u003e\\n\\u003cbutton data-set=\\\"altAction1\\\" class=\\\"hollow button\\\"\\u003eRegister\\u003c/button\\u003e\\n\\u003cbutton class=\\\"hollow button\\\" data-set=\\\"altAction2\\\"\\u003eForgotten\\u003c/button\\u003e\\n\\u003c/div\\u003e\\n\\u003cdiv class=\\\"small-6 columns\\\"\\u003e\\u003cbutton class=\\\"button float-right\\\" data-set=\\\"actionButton\\\"\\u003eLogin\\u003c/button\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003c/form\\u003e\\n\\u003c/div\\u003e\\n\",\"MenuItem\":\"\\u003cdiv class=\\\"MenuItem\\\"\\u003e\\n\\t\\u003c!-- styling in TopMenu.scss --\\u003e\\n\\t\\u003cspan class=\\\"title\\\" data-set=\\\"title\\\" data-event=\\\"click\\\"\\u003etitle\\u003c/span\\u003e\\n\\t\\u003cdiv class=\\\"dropdown\\\" data-set=\\\"dropdown\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"MessageForm\":\"\\u003cdiv class=\\\"reveal\\\" data-reveal=\\\"\\\"\\u003e\\n \\u003cbutton type=\\\"button\\\" class=\\\"close-button\\\" data-close=\\\"\\\" aria-label=\\\"Close reveal\\\"\\u003e\\n \\u003cspan aria-hidden=\\\"true\\\"\\u003e\\u0026times;\\u003c/span\\u003e\\n \\u003c/button\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cform id=\\\"message-form\\\"\\u003e\\n\\u003clabel\\u003e\\u003cinput type=\\\"checkbox\\\" data-set=\\\"smsMessage\\\" data-event=\\\"click:smsOrEmailToggle\\\"/\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eSend as SMS\\u003c/span\\u003e\\u003c/label\\u003e\\n\\u003cdiv data-set=\\\"titleDiv\\\"\\u003e\\n\\u003clabel\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eTitle\\u003c/span\\u003e\\n\\u003cinput type=\\\"text\\\" data-set=\\\"msgTitle\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003c/div\\u003e\\n\\u003clabel\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eMessage\\u003c/span\\u003e\\n\\u003ctextarea rows=\\\"3\\\" cols=\\\"30\\\" data-set=\\\"msgText\\\" data-event=\\\"input:messageChange\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003cdiv class=\\\"characterCount\\\" data-set=\\\"characterCount\\\"\\u003e(0 chars)\\u003c/div\\u003e\\n\\u003cbutton class=\\\"button\\\" data-i18n=\\\"\\\" data-event=\\\"click:Send\\\"\\u003eSend\\u003c/button\\u003e\\n\\u003c/form\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"PagedTablePaginator\":\"\\u003cul role=\\\"navigation\\\" aria-label=\\\"Pagination\\\" class=\\\"pagination\\\"\\u003e\\n\\u003c/ul\\u003e\\n\",\"Pager\":\"\\u003ctemplate\\u003e\\n\\u003cstyle\\u003e:host {\\n display: grid;\\n grid-template-columns: repeat(2, 2.4em) 1fr repeat(2, 2.4em);\\n gap: 0.4em;\\n align-items: center;\\n margin-bottom: 0.4em; }\\n\\nsvg {\\n width: 1.4em; }\\n svg g {\\n stroke: var(--dd-border-color);\\n fill: var(--dd-border-color); }\\n\\ninput {\\n width: 4em;\\n padding: 0.2em 0.4em; }\\n\\nbutton {\\n border: 1px solid var(--dd-border-color);\\n padding: 0.4em;\\n background-color: transparent;\\n height: 2.4em;\\n width: 2.4em;\\n display: flex;\\n flex-direction: row;\\n justify-content: center;\\n align-items: center;\\n cursor: pointer; }\\n button:hover {\\n background-color: var(--dd-background-color-hover);\\n color: var(--dd-color-hover); }\\n\\nbutton:disabled svg \\u003e g {\\n stroke: #ccc;\\n fill: #ccc; }\\n\\u003c/style\\u003e\\n\\u003cbutton id=\\\"first\\\" data-event=\\\"click:first\\\"\\u003e\\u003csvg viewBox=\\\"0 0 10 10\\\"\\u003e\\u003cg\\u003e\\u003cpath d=\\\"M8 2L4 5L8 8M2 2L2 8\\\"/\\u003e\\u003c/g\\u003e\\u003c/svg\\u003e\\u003c/button\\u003e\\n\\u003cbutton id=\\\"previous\\\" data-event=\\\"click:previous\\\"\\u003e\\u003csvg viewBox=\\\"0 0 10 10\\\"\\u003e\\u003cg\\u003e\\u003cpath d=\\\"M7 2L3 5L7 8\\\"/\\u003e\\u003c/g\\u003e\\u003c/svg\\u003e\\u003c/button\\u003e\\n\\u003cspan class=\\\"page-count\\\"\\u003ePage \\u003cinput type=\\\"number\\\" id=\\\"page\\\" width=\\\"5\\\" min=\\\"1\\\" data-event=\\\"change:enterPageCallback\\\"/\\u003e of \\u003cspan id=\\\"pageCount\\\"\\u003e-\\u003c/span\\u003e (\\u003cspan id=\\\"recordCount\\\"\\u003e \\u003c/span\\u003e records.)\\u003c/span\\u003e\\n\\u003cbutton id=\\\"next\\\" data-event=\\\"click:next\\\"\\u003e\\u003csvg viewBox=\\\"0 0 10 10\\\"\\u003e\\u003cg\\u003e\\u003cpath d=\\\"M3 2L7 5L3 8\\\"/\\u003e\\u003c/g\\u003e\\u003c/svg\\u003e\\u003c/button\\u003e\\n\\u003cbutton data-event=\\\"click:last\\\" id=\\\"last\\\"\\u003e\\u003csvg viewBox=\\\"0 0 10 10\\\"\\u003e\\u003cg\\u003e\\u003cpath d=\\\"M2 2L6 5L2 8M8 2L8 8\\\"/\\u003e\\u003c/g\\u003e\\u003c/svg\\u003e\\u003c/button\\u003e\\n\\u003c/template\\u003e\\n\",\"PaginatorLink\":\"\\u003cul\\u003e\\n\\t\\u003cli data-set=\\\"this\\\"\\u003e\\n\\t\\t\\u003ca href=\\\"#\\\" data-set=\\\"active\\\"/\\u003e\\n\\t\\t\\u003cspan data-set=\\\"inactive\\\"/\\u003e\\n\\t\\u003c/li\\u003e\\n\\u003c/ul\\u003e\\n\",\"PresentStudentComponent\":\"\\u003ctable\\u003e\\n\\u003ctr data-set=\\\"this\\\"\\u003e\\n\\u003ctd data-set=\\\"Surname\\\"/\\u003e\\n\\u003ctd data-set=\\\"Firstname\\\"/\\u003e\\n\\u003ctd\\u003e\\u003cselect data-set=\\\"attendType\\\"/\\u003e\\u003c/td\\u003e\\n\\u003ctd\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"remove\\\" class=\\\"fa fa-minus\\\"/\\u003e\\u003c/td\\u003e\\n\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"PresentStudentList\":\"\\u003ctable\\u003e\\n\\u003cthead\\u003e\\u003ctr\\u003e\\u003cth\\u003eSurname\\u003c/th\\u003e\\u003cth\\u003eFirstname\\u003c/th\\u003e\\u003cth/\\u003e\\u003cth/\\u003e\\u003c/tr\\u003e\\u003c/thead\\u003e\\n\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\",\"StudentAttendanceSummaryCard\":\"\\u003cdiv class=\\\"student-attendance-summary-card\\\"\\u003e\\n\\t\\u003cdiv class=\\\"attendance-type\\\" data-set=\\\"attendanceType\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"attendanceCount\\\" class=\\\"attendance-count\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"StudentInfoForm\":\"\\u003cdojo-popup\\u003e\\n\\t\\u003cdiv slot=\\\"title\\\" data-set=\\\"title\\\"\\u003eTitle here\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"info-form\\\"\\u003e\\n\\t\\t\\u003cdiv\\u003e\\n\\t\\t\\t\\u003cspan\\u003eSurname\\u003c/span\\u003e\\u003cspan data-set=\\\"Surname\\\"/\\u003e\\n\\t\\t\\u003c/div\\u003e\\n\\t\\t\\u003cdiv\\u003e\\u003cspan\\u003eFirstname\\u003c/span\\u003e\\u003cspan data-set=\\\"Firstname\\\"\\u003e \\u003c/span\\u003e\\u003c/div\\u003e\\n\\t \\u003cdiv\\u003e\\u003cspan\\u003eMobile\\u003c/span\\u003e\\u003cspan\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Mobile\\\"\\u003e \\u003c/a\\u003e\\u003c/span\\u003e\\u003c/div\\u003e\\n\\t\\t\\u003cdiv\\u003e\\u003cspan\\u003eEmail\\u003c/span\\u003e\\u003cspan\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Email\\\"\\u003e \\u003c/a\\u003e\\u003c/span\\u003e\\u003c/div\\u003e\\n\\t\\t\\u003cdiv\\u003e\\u003cspan\\u003eLast Grading\\u003c/span\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"LastGrading\\\"\\u003e \\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\t\\u003cdiv\\u003e\\u003cspan\\u003eClasses since last Grading\\u003c/span\\u003e\\u003cspan data-set=\\\"ClassesSinceLastGrading\\\"/\\u003e\\u003c/div\\u003e\\n\\t\\u003c/div\\u003e\\n\\t\\u003cdiv\\u003eLast 30 days\\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"Attendance\\\" class=\\\"info-attendance-summary\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/dojo-popup\\u003e\\n\",\"StudentListController\":\"\\u003cdiv\\u003e\\n\\u003c!-- \\t\\u003cdiv class=\\\"float-right-toolbar\\\"\\u003e\\n\\t\\t\\u003cdiv\\u003e\\u003ca href=\\\"#\\\" data-event=\\\"click:messageClick\\\" class=\\\"fa fa-paper-plane-o\\\"\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\u003c/div\\u003e\\n --\\u003e\\t\\n \\t\\u003cdiv data-set=\\\"studentTable\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\t\\u003cdiv\\u003e\\n\\t\\t\\u003cbutton data-i18n=\\\"\\\" data-event=\\\"click:addStudent\\\" class=\\\"button\\\"\\u003eAdd Student\\u003c/button\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"StudentListTable\":\"\\u003ctable class=\\\"table\\\"\\u003e\\n\\u003cthead\\u003e\\n\\u003ctr\\u003e\\u003cth\\u003e\\u003ca data-open=\\\"messageForm\\\" class=\\\"fa fa-paper-plane-o\\\"/\\u003e\\u003c/th\\u003e\\u003cth\\u003eSurname\\u003c/th\\u003e\\u003cth\\u003eFirstname\\u003c/th\\u003e\\u003cth\\u003eEmail\\u003c/th\\u003e\\u003cth\\u003eMobile\\u003c/th\\u003e\\u003cth\\u003eStatus\\u003c/th\\u003e\\u003cth/\\u003e\\u003cth/\\u003e\\u003c/tr\\u003e\\n\\u003c/thead\\u003e\\n\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\",\"StudentListTable2\":\"\\u003cdiv class=\\\"student-list-table\\\"\\u003e\\n\\u003cdiv data-set=\\\"table\\\" class=\\\"student-table\\\"\\u003e\\n\\u003c/div\\u003e\\n\\u003cdiv class=\\\"student-info-form\\\" data-set=\\\"infoForm\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"StudentListTableRow\":\"\\u003ctable\\u003e\\n\\u003ctr data-set=\\\"this\\\" class=\\\"hover-row\\\"\\u003e\\n\\u003ctd\\u003e\\u003cinput type=\\\"checkbox\\\" value=\\\"{{.Id}}\\\" data-student-select=\\\"\\\" data-event=\\\"click:selectClick\\\" data-set=\\\"selectCheckbox\\\"/\\u003e\\u003c/td\\u003e\\n\\u003ctd data-set=\\\"Surname\\\"/\\u003e\\n\\u003ctd data-set=\\\"Firstname\\\"/\\u003e\\n\\u003ctd\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Email\\\"\\u003e#\\u003c/a\\u003e\\u003c/td\\u003e\\n\\u003ctd\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Mobile\\\"\\u003e#\\u003c/a\\u003e\\u003c/td\\u003e\\n\\u003ctd data-set=\\\"State\\\" data-event=\\\"click:stateClick\\\"/\\u003e\\n\\u003ctd data-set=\\\"Attendance\\\"/\\u003e\\n\\u003ctd data-event=\\\"click:editClick\\\"\\u003e\\u003ca href=\\\"#\\\"\\u003e\\u003ci class=\\\"fa fa-pencil\\\"/\\u003e\\u003c/a\\u003e\\u003c/td\\u003e\\n\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"StudentListTableRow2\":\"\\u003cdiv class=\\\"student-table-row hover-row\\\"\\u003e\\n\\t\\u003cdiv class=\\\"student-table-checkbox\\\"\\u003e\\u003cinput data-set=\\\"selectCheckbox\\\" type=\\\"checkbox\\\" value=\\\"{{.Id}}\\\" data-student-select=\\\"\\\" data-event=\\\"click:selectClick\\\"/\\u003e\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-surname\\\" data-set=\\\"Surname\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-firstname\\\" data-set=\\\"Firstname\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-email\\\"\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Email\\\"\\u003e#\\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-mobile\\\"\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"Mobile\\\"\\u003e#\\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"State\\\" data-event=\\\"click:stateClick\\\" class=\\\"student-table-state\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv data-set=\\\"Attendance\\\" class=\\\"student-attendance-map\\\"\\u003e \\u003c/div\\u003e\\n\\t\\u003cdiv data-event=\\\"click:editClick\\\" class=\\\"student-table-click\\\"\\u003e\\u003ca href=\\\"#\\\"\\u003eEDIT\\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-click\\\" data-event=\\\"click:infoClick\\\"\\u003e\\u003ca href=\\\"#\\\"\\u003eINFO\\u003c/a\\u003e\\u003c/div\\u003e\\n\\t\\u003cdiv class=\\\"student-table-click\\\" data-event=\\\"click:vcardClick\\\"\\u003e\\u003ca href=\\\"#\\\"\\u003eVCD\\u003c/a\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"TechniqueEditForm\":\"\\u003cdiv class=\\\"technique-edit\\\"\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cbutton class=\\\"button\\\" data-set=\\\"newButton\\\"\\u003eNew Technique\\u003c/button\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"technique-edit-form\\\" data-set=\\\"form\\\"\\u003e\\n\\u003cdiv data-set=\\\"closeButton\\\" class=\\\"form-close fa fa-close\\\"\\u003e \\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cform method=\\\"post\\\" class=\\\"form\\\"\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cul class=\\\"tabs\\\" data-tabs=\\\"\\\" id=\\\"techniques-tabs\\\"\\u003e\\n\\t\\u003cli class=\\\"tabs-title is-active\\\"\\u003e\\u003ca href=\\\"#tech-details\\\" aria-selected=\\\"true\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eTechnique\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/li\\u003e\\n\\t\\u003cli class=\\\"tabs-title\\\"\\u003e\\u003ca href=\\\"#tech-merge\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eMerge\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/li\\u003e\\n\\u003c/ul\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cdiv data-tabs-content=\\\"techniques-tabs\\\" class=\\\"tabs-content\\\"\\u003e\\n\\u003cdiv class=\\\"tabs-panel is-active\\\" id=\\\"tech-details\\\"\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003clabel\\u003eTechnique\\n\\u003cinput type=\\\"text\\\" name=\\\"name\\\" data-set=\\\"name\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003clabel\\u003eNotes\\u003ctextarea rows=\\\"3\\\" wordwrap=\\\"true\\\" data-set=\\\"notes\\\"/\\u003e\\n\\u003c/label\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cbutton class=\\\"button\\\" data-set=\\\"saveButton\\\"\\u003eSave\\u003c/button\\u003e\\n\\u003cbutton class=\\\"hollow button float-right fa fa-trash\\\" data-set=\\\"deleteButton\\\"/\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\u003cdiv class=\\\"tabs-panel\\\" id=\\\"tech-merge\\\"\\u003e\\n\\u003cp\\u003eYou can merge techniques, making all references to the other techniques references to this technique. Choose the techniques to merge from the list below.\\u003c/p\\u003e\\n\\u003cdiv class=\\\"mergelist\\\" data-set=\\\"MergeList\\\"\\u003e\\n\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\u003c/form\\u003e\\n\\u003c/div\\u003e\\n\\n\",\"TechniquePagedTable\":\"\\u003cdiv class=\\\"paged-table\\\"\\u003e\\n\\u003cdiv class=\\\"paged-table-pagination\\\" data-set=\\\"paginationHead\\\"\\u003e \\u003c/div\\u003e\\n\\u003ctable class=\\\"table\\\" style=\\\"width:100%;\\\"\\u003e\\n\\t\\u003cthead\\u003e\\n\\t\\t\\u003ctr\\u003e\\u003cth\\u003eTechnique\\u003c/th\\u003e\\u003c/tr\\u003e\\n\\t\\u003c/thead\\u003e\\n\\t\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\t\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\\u003cdiv class=\\\"paged-table-pagination\\\" data-set=\\\"paginationFoot\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\",\"TechniquePagedTableRow\":\"\\u003ctable\\u003e\\n\\t\\u003ctr data-set=\\\"this\\\" class=\\\"hover-row\\\"\\u003e\\n\\t\\t\\u003ctd\\u003e\\u003cdiv data-set=\\\"name\\\"\\u003e--\\u003c/div\\u003e\\u003c/td\\u003e\\n\\t\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"TechniquesFilter\":\"\\u003cdiv\\u003e\\n\\t\\u003cinput class=\\\"input\\\" data-set=\\\"input\\\" data-event=\\\"input:filter\\\" type=\\\"text\\\"/\\u003e\\n\\u003c/div\\u003e\\n\",\"TechniquesList\":\"\\u003cdiv class=\\\"techs-table\\\"\\u003e\\n\\u003ctable class=\\\"table\\\"\\u003e\\n\\t\\t\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\t\\t\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\\u003c/div\\u003e\\n\",\"TechniquesListRow\":\"\\u003ctable\\u003e\\n\\t\\u003ctbody\\u003e\\n\\t\\t\\u003ctr data-set=\\\"this\\\" class=\\\"hover-row\\\"\\u003e\\n\\t\\t\\t\\u003ctd data-set=\\\"name\\\"/\\u003e\\n\\t\\t\\u003c/tr\\u003e\\n\\t\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\",\"TopMenu\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n align-items: stretch;\\n gap: 1em;\\n position: relative;\\n background-color: #092235;\\n color: white;\\n --link-color: #092235; }\\n\\n:host \\u003e * {\\n padding: 1em; }\\n\\ndiv.left, div.right {\\n display: flex;\\n flex-direction: row;\\n justify-content: flex-start;\\n align-items: baseline;\\n gap: 1em; }\\n\\ndiv.right {\\n justify-content: flex-end; }\\n\\n.MenuItem {\\n position: relative;\\n z-index: 10; }\\n .MenuItem \\u003e .dropdown {\\n padding: 1em;\\n display: none;\\n flex-direction: column;\\n justify-content: stretch;\\n align-items: flex-start;\\n position: absolute;\\n top: 1.5em;\\n left: 1em;\\n background-color: rgba(255, 255, 255, 0.96);\\n border: 1px solid #eee;\\n filter: drop-shadow(3px 3px 3px rgba(0, 0, 0, 0.5)); }\\n .MenuItem \\u003e .dropdown a {\\n color: var(--link-color); }\\n .MenuItem:hover \\u003e .dropdown, .MenuItem.show \\u003e .dropdown {\\n display: flex; }\\n\\na {\\n text-decoration: none;\\n color: white; }\\n\\u003c/style\\u003e\\n\\u003c/template\\u003e\\n\",\"classrecord_student_attendance/StudentAttendanceCard\":\"\\u003cdiv data-event=\\\"click:\\\" data-set=\\\"StyleDiv\\\" class=\\\"card\\\"\\u003e\\n\\t\\t\\u003cdiv class=\\\"name\\\" data-set=\\\"Name\\\"\\u003e \\u003c/div\\u003e\\n\\t\\t\\u003ca href=\\\"#\\\" class=\\\"edit-link\\\" data-set=\\\"EditLink\\\"\\u003e\\u003csvg viewBox=\\\"0 0 4 10\\\"\\u003e\\n\\t\\t\\t\\u003cg stroke-width=\\\"2\\\" fill=\\\"transparent\\\" stroke=\\\"#777\\\" stroke-linecap=\\\"round\\\"\\u003e\\u003cpath d=\\\"M2 2L3 2M2 5L3 5M2 8L3 8\\\"/\\u003e\\u003c/g\\u003e\\n\\t\\t\\u003c/svg\\u003e\\u003c/a\\u003e\\n\\t\\t\\u003cdiv class=\\\"attendance\\\" data-set=\\\"Attendance\\\"\\u003e \\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"classrecord_student_attendance/StudentAttendanceTable\":\"\\u003ctemplate class=\\\"attendance-table\\\"\\u003e\\n\\t\\u003cstyle\\u003e:host {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: stretch; }\\n\\n#table {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(auto, 12em));\\n gap: 1em; }\\n @media screen and (max-width: 800px) {\\n #table {\\n font-size: 0.8em; } }\\n #table .card {\\n display: grid;\\n grid-template-columns: 1fr 2em;\\n border: 1px solid #999;\\n padding: 0.4em; }\\n #table .card .attendance {\\n grid-column: 1/3; }\\n #table .card \\u003e .attendance {\\n font-size: 0.8em;\\n text-align: right;\\n align-self: end; }\\n #table .card \\u003e .name {\\n font-size: 1.2em; }\\n #table .card \\u003e .edit-link {\\n justify-self: flex-end; }\\n #table .card \\u003e .edit-link svg {\\n height: 1.4em; }\\n\\u003c/style\\u003e\\n\\t\\u003cdiv id=\\\"table\\\"\\u003e\\n\\t\\u003c/div\\u003e\\n\\u003c/template\\u003e\\n\",\"dojo-list\":\"\\u003cdiv class=\\\"dojo-list\\\"\\u003e\\n\\u003cdiv\\u003eYou have {{ndojos}} dojos.\\u003c/div\\u003e\\n\\u003cdiv\\u003e\\u003ca data-set=\\\"addDojo\\\" href=\\\"#\\\"\\u003eAdd a Dojo\\u003c/a\\u003e\\u003c/div\\u003e\\n\\u003ctable class=\\\"table\\\"\\u003e\\n\\u003c/table\\u003e\\n\\u003c/div\\u003e\\n\",\"formal/FormEditor\":\"\\u003cdiv class=\\\"formal-form-editor edit-form\\\"\\u003e\\n\\u003cdiv data-event=\\\"click:close\\\" class=\\\"form-close fa fa-close\\\"\\u003e \\u003c/div\\u003e\\u0026nbsp;\\u003c/div\\u003e\\n\\n\",\"formal/FormGenerator\":\"\\u003cdiv class=\\\"formal-container\\\"\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cform data-set=\\\"form\\\"\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003c/form\\u003e\\n\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\u003cdiv class=\\\"row\\\"\\u003e\\n\\u003cdiv class=\\\"small-12 columns\\\"\\u003e\\n\\u003cbutton class=\\\"button\\\" data-set=\\\"saveButton\\\" data-event=\\\"click:save\\\"\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eSave\\u003c/span\\u003e\\u003c/button\\u003e\\n\\u003cbutton class=\\\"hollow button fa fa-trash\\\" data-set=\\\"deleteButton\\\" data-event=\\\"click:delete\\\"/\\u003e\\n\\u003cbutton class=\\\"hollow button float-right fa fa-refresh\\\" data-event=\\\"click:reset\\\" data-set=\\\"resetButton\\\"/\\u003e\\n\\u003c/div\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\",\"formal/FormsList\":\"\\u003cdiv class=\\\"forms-list\\\"\\u003e\\n\\u003ctable class=\\\"table\\\"\\u003e\\n\\t\\u003cthead\\u003e\\u003ctr\\u003e\\n\\t\\u003cth\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eName\\u003c/span\\u003e\\u003c/th\\u003e\\n\\t\\u003cth\\u003e\\u003cspan data-i18n=\\\"\\\"\\u003eRefers To\\u003c/span\\u003e\\u003c/th\\u003e\\n\\t\\u003c/tr\\u003e\\u003c/thead\\u003e\\n\\t\\u003ctbody data-set=\\\"tbody\\\"\\u003e\\n\\t\\u003c/tbody\\u003e\\n\\u003c/table\\u003e\\n\\u003cbutton data-event=\\\"click:newForm\\\" data-i18n=\\\"\\\" class=\\\"button\\\"\\u003eNew Form\\u003c/button\\u003e\\n\\u003c/div\\u003e\\n\",\"formal/FormsListItem\":\"\\u003ctable\\u003e\\n\\t\\u003ctr class=\\\"hover-row\\\" data-event=\\\"click:click\\\" data-set=\\\"this\\\"\\u003e\\n\\t\\t\\u003ctd data-set=\\\"Name\\\"/\\u003e\\n\\t\\t\\u003ctd data-set=\\\"RefType\\\"/\\u003e\\n\\t\\u003c/tr\\u003e\\n\\u003c/table\\u003e\\n\",\"persona-loggedin\":\"\\u003cli class=\\\"has-submenu\\\"\\u003e\\n\\t\\u003ca href=\\\"#\\\"\\u003e{{user.Email}}\\u003c/a\\u003e\\n\\t\\u003cul class=\\\"submenu menu vertical\\\" data-submenu=\\\"\\\"\\u003e\\n\\t\\t\\u003cli\\u003e\\u003ca href=\\\"#\\\" data-set=\\\"btn\\\"\\u003e{{logout}}\\u003c/a\\u003e\\u003c/li\\u003e\\n\\t\\u003c/ul\\u003e\\n\\u003c/li\\u003e\\n\\n\",\"persona-loggedout\":\"\\u003cli\\u003e\\u003cbutton id=\\\"loginout\\\" data-set=\\\"btn\\\"\\u003e{{login}}\\u003c/button\\u003e\\u003c/li\\u003e\\n\",\"test\":\"\\u003cdiv\\u003eTest\\u003c/div\\u003e\\n\"};\n\n\tlet mk = function(k, html) {\n\t\tlet el = document.createElement('div');\n\t\tel.innerHTML = html;\n\t\t//console.log(\"mk(\",k,\") html = \", html);\n\n\t\tlet c = el.firstElementChild;\n\t\twhile ((null!=c) && (Node.ELEMENT_NODE!=c.nodeType)) {\n\t\t\tc = c.nextSibling;\n\t\t}\n\t\tif (null==c) {\n\t\t\tconsole.error(\"FAILED TO FIND ANY ELEMENT CHILD OF \", k, \":\", el)\n\t\t\treturn mk('error', 'No child elements in template ' + k + '');\n\t\t}\n\t\tel = c;\n\t\tif ('function'==typeof el.querySelector) {\n\t\t\tlet et = el.querySelector('[data-set=\"this\"]');\n\t\t\tif (null!=et) {\n\t\t\t\tel = et;\n\t\t\t\tel.removeAttribute('data-set');\n\t\t\t}\n\t\t}\n\t\treturn el;\n\t}\n\n\treturn function(t, dest={}) {\n\t\t// Return a deep copy of the node, created on first use\n\t\tlet n = templates[t];\n\t\tif ('string'==typeof(n)) {\t\t\t\n\t\t\tn = mk(t, n);\n\t\t\ttemplates[t] = n;\n\t\t}\n\t\tif ('undefined'==typeof n) {\n\t\t\tconsole.error('Failed to find template ' + t);\n\t\t\treturn [false,false];\n\t\t}\n\t\tif (n.content) {\n\t\t\tn = n.content.cloneNode(true);\n\t\t} else {\n\t\t\tn = n.cloneNode(true);\n\t\t}\n\t\ttry {\n\t\t\tfor (let attr of ['id', 'data-set']) {\n\t\t\t\tlet nodes = Array.from(n.querySelectorAll('[' + attr + ']'));\n\t\t\t\tif ('function'==typeof n.hasAttribute && n.hasAttribute(attr)) {\n\t\t\t\t\tnodes.unshift(n);\n\t\t\t\t}\n\t\t\t\tfor (let el of nodes) {\n\t\t\t\t\tlet a = el.getAttribute(attr);\n\t\t\t\t\tif (a.substr(0,1)=='$') {\n\t\t\t\t\t\ta = a.substr(1);\n\t\t\t\t\t\tel = jQuery(el);\n\t\t\t\t\t\tel.setAttribute(attr, a);\n\t\t\t\t\t}\n\t\t\t\t\tdest[a] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"ERROR in DTemplate(\" + t + \"): \", err);\n\t\t\tdebugger;\n\t\t}\n\t\treturn [n,dest];\n\t}\n})();\n", "import {DojoTemplates} from './DojoTemplates.js';\n\nclass SelectList {\n\tconstructor(el) {\n\t\tthis.el = el;\n\t}\n\tadd(value, display) {\n\t\tlet s = document.createElement(`span`);\n\t\ts.innerHTML = display;\n\t\ts.setAttribute(`data-value`, value);\n\t\ts.addEventListener(`click`, evt=>{\n\t\t\tevt.preventDefault();\n\t\t\tthis.el.dispatchEvent(new CustomEvent(`select-item-selected`, {\n\t\t\t\tcomposed: true,\n\t\t\t\tbubbles: false,\n\t\t\t\tdetail: value,\n\t\t\t}));\n\t\t});\n\t\tthis.el.appendChild(s);\n\t}\n\tempty() {\n\t\tthis.el.innerHTML = ``;\n\t}\n}\n\nclass AutoComplete extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`AutoComplete`);\n\t\tthis.attachShadow({mode:`open`});\n\t\tthis.shadowRoot.appendChild(this.el);\n\n\t\tthis._searchingFor = false;\n\n\t\tthis.$.input.addEventListener(`keyup`, evt=>this.keyDown(evt));\n\t\tthis.selectList = new SelectList(this.$.items);\n\n\t\tthis.$.items.addEventListener(`select-item-selected`, evt=>{\n\t\t\tconsole.log(`selected item: `, evt.detail);\n\t\t\tthis.$.input.value = evt.detail;\n\t\t\tthis.postInput();\n\t\t});\n\t}\n\tconnectedCallback() {\n\t}\n\tkeyDown(evt) {\n\t\tif (evt.keyCode==13) {\n\t\t\tevt.preventDefault();\n\t\t\tthis.postInput();\n\t\t\treturn;\n\t\t}\n\t\tif (3{\n\t\t\tif (arr[0]!=this._searchingFor) {\n\t\t\t\tconsole.log(`discarding results of searchFor because another search has begun.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tarr.splice(0,1);\n\t\t\tthis.selectList.empty();\n\t\t\tfor (let i of arr) {\n\t\t\t\tthis.selectList.add(i, i);\n\t\t\t}\n\t\t})\n\t\t.catch(err=>console.error(err));\n\t}\n}\ncustomElements.define(`dojo-auto-complete`, AutoComplete);", "/**\n * Eventify adds eventListeners to the given object\n * for each node in the given element and it's sub-elements\n * that has an attribute of the form:\n * data-event=\"event:method,event:method,...\"\n * When the named event occurs on the element, the named\n * method will be called on the object.\n */\nexport function Eventify(el, object) {\n\tlet eventLink = function(el, event, object, method) {\n\t\tel.addEventListener(event, evt=>{\n\t\t\tobject[method].call(object, evt);\n\t\t});\n\t}\n\tlet eventify = function(e) {\n\t\tlet pairs = e.getAttribute(`data-event`).split(`;`);\n\t\tfor (let p of pairs) {\n\t\t\tlet [event,method] = p.trim().split(`:`).map( m=>m.trim() );\n\t\t\tfor (let evt of event.split(`,`).map( et=>et.trim() )) {\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = evt;\n\t\t\t\t}\n\t\t\t\teventLink(e, evt, object, method);\n\t\t\t}\n\t\t}\n\t};\n\tif (`function`==typeof el.hasAttribute && el.hasAttribute(`data-event`)) {\n\t\teventify(el);\n\t}\n\tfor (let e of el.querySelectorAll(`[data-event]`)) eventify(e);\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {ClassRecordTechniquesModel} from './ClassRecordTechniquesModel.js';\nimport {StudentAttendanceTable} from './classrecord_student_attendance/StudentAttendanceTable.js';\nimport {ClassRecordTechniquesEditor} from './ClassRecordTechniquesEditor.js';\nimport {ClassRecordDetailsEditor} from './ClassRecordDetailsEditor.js';\nimport {ClassRecordNavigationButtons} from './ClassRecordNavigationButtons.js';\nimport {DateToDayDisplay} from './DateToDayDisplay.js';\n\nexport class ClassRecordEditor {\n\tconstructor(techniques, classRecordId, previousClassRecordId, nextClassRecordId) {\n\t\tlet techniquesModel = new ClassRecordTechniquesModel(classRecordId);\n\n\t\t// let attendanceTypes = new AttendanceTypesModel(attendanceTypesArray);\n\t\t// let studentListEditor = new ClassRecordStudentListEditor(\n\t\t// \tdocument.getElementById('students-editor'),\n\t\t// \tclassRecordId, attendanceTypes);\n\n\t\tif (document.getElementById(`students-editor`)) {\n\t\t\t// let attendanceTable = new StudentAttendanceTable(\n\t\t\t// \tdocument.getElementById('students-editor'),\n\t\t\t// \tclassRecordId);\n\n\t\t\t// let attendanceTable = document.getElementById(`students-editor`);\n\t\t}\n\n\t\tif (document.getElementById(`techniques-editor`)) {\n\t\t\tconsole.log(`Found technqiues-editor= `, document.getElementById('techniques-editor'));\n\t\t\tnew ClassRecordTechniquesEditor(\n\t\t\t\tdocument.getElementById('techniques-editor'),\n\t\t\t\tclassRecordId, techniquesModel, techniques);\n\t\t} else {\n\t\t\tconsole.log(`Failed to find #technqiues-editor`);\n\t\t}\n\n\t\tnew ClassRecordDetailsEditor(classRecordId);\n\n\t\tnew DateToDayDisplay(document.getElementById('Date'), document.getElementById('dateDay'));\n\n\t\tif (document.getElementById(`techniques-editor-link`))\n\t\t\tnew ClassRecordTabTitleCount(techniquesModel, \n\t\t\t\tdocument.getElementById('techniques-editor-link'));\n\n\t\tif (document.getElementById('students-editor-link'))\t\n\t\t\tnew ClassRecordTabTitleCount(attendanceTable.presentModel(), \n\t\t\t \tdocument.getElementById('students-editor-link'));\n\n\t\tdocument.getElementById('deleteClassRecordButton').addEventListener('click',\n\t\t\tfunction(evt) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tif (confirm('Deletion is permanent. Continue?')) {\n\t\t\t\t\tDojoDeshi.instance().RPC().DeleteClassRecord(classRecordId).then(\n\t\t\t\t\t\tfunction(res) {\n\t\t\t\t\t\t\tdocument.location='/classrecord/summary';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction(err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t\talert('Failed to delete Class Record:' + err);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\tnew ClassRecordNavigationButtons(previousClassRecordId, nextClassRecordId);\t\t\n\t}\n}\n\nwindow.ClassRecordEditor = ClassRecordEditor;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\n/**\n * ClassRecordTechniquesModel are the techniques practiced in a \n * particular class.\n */\nexport class ClassRecordTechniquesModel {\n\tconstructor(classRecordId) {\n\t\tthis.ClassRecordId = classRecordId;\n\t\tthis.techniques = new Array();\n\t\tthis.Listeners = new signals.Signal();\n\n\t\tDojoDeshi.instance().RPC().LoadClassRecordTechniques(classRecordId)\n\t\t.then( \n\t\t\t(res)=>{\n\t\t\t\tres[0].map( (t)=>this.addTechnique(t, false) );\n\t\t\t}, \n\t\t\t(err)=>{\n\t\t\t\talert(\"ERROR on LoadClassRecordTechniques:\", err); \n\t\t\t} );\n\t}\n\tcount() {\n\t\treturn this.techniques.length;\n\t}\n\taddTechnique(technique, addToServer=true) {\n\t\tif (addToServer) {\n\t\t\tDojoDeshi.instance().RPC().AddTechniqueToClassRecord(this.ClassRecordId, technique.Name)\n\t\t\t.then(\n\t\t\t\t(res)=>{\n\t\t\t\t\ttechnique.Id = res[0];\n\t\t\t\t\tthis.techniques.push(technique);\n\t\t\t\t\tthis.Listeners.dispatch('technique_added', technique);\n\t\t\t\t}, (err)=>{\n\t\t\t\t\talert(err);\n\t\t\t\t});\n\t\t} else {\n\t\t\tthis.techniques.push(technique);\n\t\t\tthis.Listeners.dispatch('technique_added', technique);\n\t\t}\n\n\t}\n\tremoveTechnique(technique, sendToServer=true) {\n\t\tif (sendToServer) {\n\t\t\tDojoDeshi.instance().RPC().RemoveTechniqueFromClassRecord(this.ClassRecordId, technique.Name)\n\t\t\t.then(\n\t\t\t\t(res)=> {\n\t\t\t\t\t_.remove(this.techniques, technique);\n\t\t\t\t\tthis.Listeners.dispatch('technique_removed', technique);\n\t\t\t\t},\n\t\t\t\t(err)=> {\n\t\t\t\t\talert(err);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tconsole.log(\"Removed technique in MEMORY model only \" , technique);\n\t\t\tthis.techniques = _.remove(this.techniques, technique);\n\t\t\tthis.Listeners.dispatch('technique_removed', technique);\n\t\t}\n\t}\n}", "import signals from '../lib/signals.js';\n\nexport class StudentAttendanceModel {\n\tconstructor(student, attendance) {\n\t\tthis.Student = student;\n\t\tthis.Attendance = attendance;\n\n\t\tthis.changed = new signals.Signal();\n\t}\n\tsetAttendance(at, src=null) {\n\t\tif (at.Id == this.Attendance.Id) {\n\t\t\treturn;\n\t\t}\n\t\tthis.Attendance = at;\n\t\tthis.changed.dispatch(this.student, this.Attendance, src);\n\t}\n\tisPresent() {\n\t\treturn this.Attendance.Id > 0;\n\t}\n}", "import signals from '../lib/signals.js';\n\nexport class StudentAttendancePresentModel {\n\tconstructor() {\n\t\tthis.sams = [];\n\t\tthis.Listeners = new signals.Signal();\n\t}\n\taddStudentAttendanceModel(sam) {\n\t\tthis.sams.push(sam);\n\t\tsam.changed.add( (evt)=> {\n\t\t\tthis.Listeners.dispatch(this);\n\t\t});\n\t\tthis.Listeners.dispatch();\n\t}\n\tcount() {\n\t\tlet present = 0;\n\t\tfor (let s of this.sams) {\n\t\t\tif (s.isPresent()) {\n\t\t\t\tpresent++;\n\t\t\t}\n\t\t}\n\t\treturn present;\n\t}\n}", "import {DojoDeshi} from '../DojoDeshi.js';\nimport {DojoTemplates} from '../DojoTemplates.js';\nimport {Eventify} from '../Eventify.js';\n\nexport class StudentAttendanceCard {\n\tstatic hasParent(el, parent) {\n\t\tif (!el) return false;\n\t\tif (el==parent) return true;\n\t\treturn StudentAttendanceCard.hasParent(el.parentNode, parent);\n\t}\n\tconstructor(parent, classRecordId, sam, attendanceList) {\n\t\tthis.sam = sam;\n\t\tthis.sam.changed.add(this.attendanceChanged, this);\n\t\tthis.classRecordId = classRecordId;\n\t\tthis.attendanceList = attendanceList;\n\n\t\t[this.el, this.$] = DojoTemplates(`classrecord_student_attendance/StudentAttendanceCard`);\n\t\tEventify(this.el, {\n\t\t\t'click': evt => {\n\t\t\t\t// prevent the click on the EditLink from registering as a change of\n\t\t\t\t// attendance status.\n\t\t\t\tif (StudentAttendanceCard.hasParent(evt.target, this.$.EditLink)) return;\n\t\t\t\t// Update the server then update our model\n\t\t\t\tlet i = (this.attendanceIndex+1) % this.attendanceList.length;\n\t\t\t\tlet attendanceType = this.attendanceList[i];\n\n\t\t\t\tDojoDeshi.instance().RPC().SetStudentClassRecordAttendanceType(\n\t\t\t\t\tthis.classRecordId,\n\t\t\t\t\tthis.sam.Student.Id,\n\t\t\t\t\tattendanceType.Id\n\t\t\t\t).then(\n\t\t\t\t\t()=>{\n\t\t\t\t\t\tthis.attendanceIndex=i;\n\t\t\t\t\t\tthis.sam.setAttendance(attendanceType);\n\t\t\t\t\t}\n\t\t\t\t).catch( (err)=> {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t});\n\t\t\t}\n\t\t}, this);\n\n\t\tthis.$.Name.textContent = `${sam.Student.Firstname} ${sam.Student.Surname}`\n\t\tthis.$.EditLink.setAttribute(`href`, `/students/edit/${sam.Student.Id}`);\n\t\tthis.attendanceChanged(sam.Student, sam.Attendance);\n\t\tparent.appendChild(this.el);\n\t}\n\tattendanceChanged(student, attendance, src) {\n\t\tif (src==this) return;\n\t\tthis.$.Attendance.textContent = attendance.Name;\n\n\t\tfor (let i=0; i {\n\t\t\t\tlet ats = res[0][0];\n\t\t\t\tlet sams = res[1][0];\n\t\t\t\t// console.log(`ats = `, ats);\n\t\t\t\t// console.log(`sams = `, sams);\n\t\t\t\tfor (let s of sams) {\n\t\t\t\t\tlet m = new StudentAttendanceModel(s.Student, s.AttendanceType);\n\t\t\t\t\tthis._presentModel.addStudentAttendanceModel(m);\n\t\t\t\t\tnew StudentAttendanceCard(this.$.table, this.classRecordId, m, ats);\n\t\t\t\t}\n\t\t\t\tthis.sendTabHeaderSet();\n\t\t\t}\n\t\t).catch(\n\t\t\t(err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t}\n\t\t);\n\t}\n\tsendTabHeaderSet() {\n\t\tlet evt = new CustomEvent(`dojo-tab-title-set`,{\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t\tcancelable: true,\n\t\t\tdetail: {\n\t\t\t\ttab: `students`,\n\t\t\t\ttitle: `Students (${this._presentModel.count()})`,\n\t\t\t}\n\t\t});\n\t\tthis.dispatchEvent(evt);\n\t}\n\tpresentModel() {\n\t\treturn this._presentModel;\n\t}\n}\n\ncustomElements.define(`dojo-student-attendance-table`, StudentAttendanceTable);", "\nimport {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {ClassRecordTechniqueComponent} from './ClassRecordTechniqueComponent.js';\n\nexport class ClassRecordTechniquesEditor {\n\tconstructor(parentEl, classRecordId, model, techniquesArray) {\n\t\tthis.parentEl = parentEl;\n\t\tthis.classRecordId = classRecordId;\n\t\tthis.model = model;\n\n\t\tthis.model.Listeners.add( (msg, dat) => {\n\t\t\tswitch(msg) {\n\t\t\t\tcase 'technique_added':\n\t\t\t\t\tlet c = new ClassRecordTechniqueComponent(this.model, dat, false);\n\t\t\t\t\tthis.$.techniquesList.appendChild(c.render());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'technique_removed':\n\t\t\t\t\t// Ignore for now - the component will remove itself\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error('Unhandled ClassRecordTechniquesModel message: ' + msg);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.setTechniquesCount();\n\t\t});\n\t\t[this.el, this.$] = DojoTemplates('ClassRecordTechniquesEditor');\n\n\t\tthis.$.techniqueEntry.addEventListener(`auto-complete-entry`, evt=>{\n\t\t\tlet technique = evt.detail.value;\n\t\t\tlet data = evt.detail.data;\n\t\t\tthis.model.addTechnique({\"Name\": technique});\n\t\t\treturn false;\n\t\t});\n\n\n\t\tthis.parentEl.appendChild(this.el);\n\t}\n\trender() {\n\t\treturn this.el;\n\t}\n\tsetTechniquesCount() {\n\t\tlet evt = new CustomEvent(`dojo-tab-title-set`,{\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t\tcancelable: true,\n\t\t\tdetail: {\n\t\t\t\ttab: `techniques`,\n\t\t\t\ttitle: `Techniques (${this.model.count()})`,\n\t\t\t}\n\t\t});\n\t\tthis.el.dispatchEvent(evt);\n\t}\n}\n\nwindow.ClassRecordTechniquesEditor = ClassRecordTechniquesEditor;", "\nimport {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class ClassRecordTechniqueComponent {\n\tconstructor(techniquesModel, technique, addToServer=false) {\n\t\tthis.techniquesModel = techniquesModel;\n\t\tthis.technique = technique;\n\n\t\t[this.el, this.$] = DojoTemplates('ClassRecordTechniqueComponent');\n\t\tthis.$.Name.textContent = technique.Name;\n\n\t\tthis.$.remove.addEventListener('click', (evt)=>{\n\t\t\tthis.techniquesModel.removeTechnique(this.technique);\n\t\t\tthis.el.remove();\n\t\t});\n\t}\n\trender() {\n\t\treturn this.el;\n\t}\n}\n\nwindow.ClassRecordTechniqueComponent = ClassRecordTechniqueComponent;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\n/**\n * ClassRecordDetailsEditor works with the Form on the ClassRecord \n * data page, permitting changing of class type, date, and start/end times.\n */\nexport class ClassRecordDetailsEditor {\n\tconstructor(classRecordId) {\n\t\tthis.ClassRecordId = classRecordId;\n\t\tthis.ClassTypeSelect = document.getElementById('ClassTypeId');\n\t\tthis.StartTime = document.getElementById('StartTime');\n\t\tthis.EndTime = document.getElementById('EndTime');\n\t\tthis.Date = document.getElementById('Date');\n\t\tthis.Title = document.getElementById('Title');\n\t\tthis.Notes = document.getElementById('Notes');\n\n\t\tthis.ClassTypeSelect.addEventListener('change', (evt)=> {\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t\tlet sel = this.ClassTypeSelect.options[this.ClassTypeSelect.selectedIndex];\n\t\t\tDojoDeshi.instance().RPC().SetClassRecordType(this.ClassRecordId, parseInt(sel.value))\n\t\t\t.then((res)=>{},(err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\talert('Failed to set Class Record Type: ' + err);\n\t\t\t});\n\t\t});\n\n\t\tthis.Title.addEventListener('blur', (evt)=> {\n\t\t\tDojoDeshi.instance().RPC().SetClassRecordTitle(this.ClassRecordId, this.Title.value)\n\t\t\t.then((res)=>{}, (err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\talert('Failed to set Title: '+ err);\n\t\t\t});\n\t\t});\n\t\tthis.Notes.addEventListener('blur', (evt)=>{\n\t\t\tDojoDeshi.instance().RPC().SetClassRecordNotes(this.ClassRecordId, this.Notes.value)\n\t\t\t.then((res)=>{}, (err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\talert('Failed to set Notes: '+ err);\n\t\t\t});\n\t\t});\n\t\tlet timesChanged = (evt)=> {\n\t\t\tDojoDeshi.instance().RPC().SetClassRecordTimes(this.ClassRecordId, \n\t\t\t\tthis.Date.value, this.StartTime.value, this.EndTime.value)\n\t\t\t.then((res)=>{}, (err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\talert('Failed to set Class Record Times: ' + err);\n\t\t\t})\n\t\t}\n\t\tthis.Date.addEventListener('blur',timesChanged);\n\t\tthis.StartTime.addEventListener('blur', timesChanged);\n\t\tthis.EndTime.addEventListener('blur', timesChanged);\n\t}\n}\n\nwindow.ClassRecordDetailsEditor = ClassRecordDetailsEditor;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class ClassRecordNavigationButtons {\n\tconstructor(previous, next) {\n\t\tlet previousBtn = document.getElementById('previousClassRecordButton');\n\t\tlet nextBtn = document.getElementById('nextClassRecordButton');\n\n\t\tpreviousBtn.disabled = (null==previous) || (!(('undefined' != typeof previous) && (0!=previous.Id)));\n\t\tnextBtn.disabled = (null==next) || (!(('undefined'!=typeof next) && (0!=next.Id)));\n\n\t\tlet navigate = (courseId)=> {\n\t\t\treturn (evt)=> {\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tevt.preventDefault();\n\t\t\t\tdocument.location = `/classrecord/${courseId}/edit`;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif (null!=previous) {\n\t\t\tpreviousBtn.addEventListener('click', navigate(previous.Id));\n\t\t\tif ('undefined'!= typeof previous.Name)\n\t\t\t\tpreviousBtn.appendChild(document.createTextNode(previous.Name));\n\t\t}\n\t\tif (null!=next) {\n\t\t\tnextBtn.addEventListener('click', navigate(next.Id));\n\t\t\tif ('undefined' != typeof next.Name)\n\t\t\t\tnextBtn.appendChild(document.createTextNode(next.Name));\n\t\t}\n\t}\n}\n\nwindow.ClassRecordNavigationButtons = ClassRecordNavigationButtons;", "let days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];\n\nimport {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class DateToDayDisplay {\n\tconstructor(dateField, dayDiv) {\n\t\tlet set = function(dateField, dayDiv) {\n\t\t\treturn function(evt) {\n\t\t\t\tlet d = new Date(dateField.value);\n\t\t\t\tdayDiv.innerHTML = days[d.getDay()];\n\t\t\t\treturn false;\n\t\t\t};\n\t\t};\n\t\tset = set(dateField, dayDiv);\n\n\t\tdateField.addEventListener('blur', set);\n\t\tset();\n\t}\n}\n\nwindow.DateToDayDisplay = DateToDayDisplay;", "import {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\n\n/**\n * A Pager just implements a paging control, with a page number, \n * first, previous, next and last control elements.\n */\nexport class Pager extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`Pager`);\n\t\tthis.attachShadow({mode:`open`});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t\tEventify(this.shadowRoot, this);\n\t}\n\tconnectedCallback() {\n\n\t}\n\n\tenable(el, enable=true) {\n\t\tif (enable) {\n\t\t\tel.removeAttribute('disabled');\n\t\t} else {\n\t\t\tel.setAttribute('disabled','disabled');\n\t\t}\n\t}\n\tfirst(evt) {\n\t\tthis.gotoPage(evt, 0);\n\t}\n\tprevious(evt) {\n\t\tthis.gotoPage(evt, this.page - 1);\n\t}\n\tnext(evt) {\n\t\tthis.gotoPage(evt, this.page + 1);\n\t}\n\tlast(evt) {\n\t\tthis.gotoPage(evt, this.pageCount-1);\n\t}\n\tenterPageCallback(evt) {\n\t\tthis.gotoPage(evt, parseInt(this.$.page.value)-1);\n\t}\n\tgotoPage(evt, page) {\n\t\tevt.stopPropagation();\n\n\t\tif (\n\t\t\t(page==this.page) || (0>page) || (page>=this.pageCount)\n\t\t\t) return;\n\n\t\tthis.dispatchEvent(new CustomEvent(`pager-goto`, \n\t\t{\n\t\t\tcomposed: true,\n\t\t\tbubbles: false,\n\t\t\tdetail: page \n\t\t}));\n\t}\n\tsetControls() {\n\t\tlet page = this.page;\n\t\tlet pageCount = this.pageCount;\n\t\tthis.enable(this.$.first, 0page);\n\t\tthis.enable(this.$.next, pageCount-1>page);\n\t\tthis.$.page.setAttribute(`max`, pageCount);\n\t}\n\tget page() {\n\t\treturn parseInt(this.getAttribute(`page`));\n\t}\n\tget pageCount() {\n\t\treturn parseInt(this.getAttribute(`page-count`));\n\t}\n\tstatic get observedAttributes() {\n\t\treturn ['page','page-count','record-count'];\n\t}\n\tattributeChangedCallback(attr, oldValue, newValue) {\n\t\tif (newValue==oldValue) return;\n\t\tswitch (attr) {\n\t\tcase `page`:\n\t\t\tthis.$.page.value = parseInt(newValue)+1;\n\t\t\tthis.setControls();\n\t\t\tbreak;\n\t\tcase `page-count`:\n\t\t\tthis.$.pageCount.innerText = newValue;\n\t\t\tthis.setControls();\n\t\t\tbreak;\n\t\tcase `record-count`:\n\t\t\tthis.$.recordCount.innerText = newValue;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\ncustomElements.define(`dojo-pager`,Pager);", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\n\nimport {Pager} from './Pager.js';\n\n/**\n * ClassRecord is a single record in the ClassRecordSummaryTable\n */\nclass ClassRecord {\n\tconstructor(append, record) {\n\t\t[this.el, this.$] = DojoTemplates(`ClassRecordSummaryTable.Record`);\n\t\tlet date = new Date(record.Start);\n\t\tthis.$.date.innerText = date.toLocaleString(undefined, {year: 'numeric', month: 'short', day: 'numeric'});\n\t\tthis.$.day.innerText = date.toLocaleString(undefined, {weekday:'short'});\n\t\tthis.$.start.innerText = date.toLocaleString(undefined, {hour: 'numeric', minute: 'numeric'})\n\t\tthis.$.art.innerText = record.ClassType.Art.Name;\n\t\tthis.$.classType.innerText = record.ClassType.Name;\n\t\tthis.$.students.innerText = record.StudentCount;\n\t\tthis.$.techniques.innerText = record.TechniqueCount;\n\n\t\tappend(this.el);\n\n\t\tthis.el.addEventListener(`click`, (evt)=>{\n\t\t\tevt.stopPropagation();\n\t\t\tlocation=`/classrecord/${record.Id}/edit`;\n\t\t});\n\t}\n}\n\n/** \n * ClassRecordSummaryTable displays a summary table of \n * class records.\n */\nexport class ClassRecordSummaryTable extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`ClassRecordSummaryTable`);\n\t\tthis.attachShadow({mode:'open'});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t\tEventify(this.shadowRoot, this);\n\t}\n\tgotoPage(evt) {\n\t\tthis.fetchPage(evt.detail);\n\t}\n\tconnectedCallback() {\n\t\tthis.fetchPage(0);\n\t}\n\tfetchPage(page) {\n\t\tDojoDeshi.instance().RPC().ClassRecordSummarySearch({\n\t\t\tDojoIds: [parseInt(this.getAttribute(`dojo-id`))],\n\t\t\tRecordsPerPage: 30,\n\t\t\tPage: page,\n\t\t}).then(\n\t\t\t([res])=>{\n\t\t\t\tthis.$.pager.setAttribute(`page`,res.Page);\n\t\t\t\tthis.$.pager.setAttribute(`record-count`, res.TotalRecords);\n\t\t\t\tthis.$.pager.setAttribute(`page-count`, Math.ceil(res.TotalRecords/res.RecordsPerPage));\n\n\t\t\t\t// Remove all summary records\n\t\t\t\twhile (this.$.summaryHeader.nextSibling) {\n\t\t\t\t\tthis.$.summaryHeader.nextSibling.remove();\n\t\t\t\t}\n\t\t\t\tres.Records.map( r => {\n\t\t\t\t\tnew ClassRecord( el=>this.$.summaryTable.appendChild(el), r );\n\t\t\t\t})\n\t\t\t});\n\t}\n}\n\ncustomElements.define(`class-record-summary-table`, ClassRecordSummaryTable);", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {ClassRecordSummaryTableRow} from './ClassRecordSummaryTableRow.js';\n\nexport class ClassRecordSummaryTableController {\n\tconstructor() {\n\t\tlet s = document.querySelectorAll('.class-record');\n\t\tfor (let i=0; i{\n\t\t\tevt.stopPropagation(); evt.preventDefault();\n\t\t\tdocument.location = `/classrecord/${this.ClassRecordId}/edit`;\n\t\t});\n\t}\n}", "\nimport {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class FormsTabContainer {\n\tconstructor(el) {\n\t\tconsole.log(`FormsTabContainer el = `, el);\n\t\tthis.el = el;\n\t\tthis.dojoId = parseInt(el.getAttribute('dojo-id'));\n\t\tthis.refType = el.getAttribute('ref-type');\n\t\tthis.refId = parseInt(el.getAttribute('ref-id'));\n\n\n\t\tthis.tabs = this.el.querySelector(`#tabs`);\n\n\t\tPromise.all(\n\t\t\t[\n\t\t\tDojoDeshi.instance().RPC().FormsAndInputsForDojoRefType(this.dojoId, this.refType, this.refId),\n\t\t\t]\n\t\t).then(\n\t\t\t(res)=>{\n\t\t\t\tlet forms = res[0][0];\n\t\t\t\tlet inputs = res[0][1];\n\n\t\t\t\tlet appendPanel = (panel, title)=>{\n\t\t\t\t\tconsole.log(`appendPanel(title= ${title}, panel=`, panel); \n\t\t\t\t\tthis.tabs.addPanel(panel, title, true);\n\t\t\t\t};\t\t\t\t\n\n\t\t\t\tfor (let i=0; i {\n\t\t\t\t\t\t\treturn new Promise( (resolve,reject)=> {\n\t\t\t\t\t\t\t\tconsole.log(\"Saving data for form \", form);\n\t\t\t\t\t\t\t\tconsole.log('data = ', data);\n\t\t\t\t\t\t\t\tinput.Input = data;\n\t\t\t\t\t\t\t\tconsole.log(\"Input = \", input);\n\t\t\t\t\t\t\t\tDojoDeshi.instance().RPC().SaveFormInput(input).then(\n\t\t\t\t\t\t\t\t\t(res)=>{\n\t\t\t\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t\t\t\t}, (err)=>{\n\t\t\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t\t\t}).catch( (err)=> {\n\t\t\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Foundation.reInit(['tabs']);\n\t\t\t\t// Foundation.reflow(jQuery(el), ['tabs']);\n\t\t\t\t// jQuery(el).foundation('tabs');\n\t\t\t}\n\t\t).catch(\n\t\t\t(err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\talert(`ERROR: ${err.message}`);\n\t\t\t}\n\t\t);\n\t}\n}\n\nwindow.FormsTabContainer = FormsTabContainer;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {FormGenerator} from './formal/FormGenerator.js';\n\nexport class FormsTabPanel {\n\tconstructor(appendTab, name, title, jsDefinition, jsData, saveData) {\n\t\tlet [el, $] = DojoTemplates('FormsTabPanel');\n\t\tthis.$ = $;\n\t\tconsole.log(\"FormsTabPanel, definition = \", jsDefinition);\n\t\tif (null==jsDefinition) {\n\t\t\tjsDefinition = {\n\t\t\t\t'Name': 'new',\n\t\t\t\t'Title':'unnamed form',\n\t\t\t\t'fields':[{'name':'f','title':'unnamed field'}],\n\t\t\t}\n\t\t};\n\n\t\tlet id = `form-${name}`;\n\t\tthis.$.a.href=`#${id}`;\n\t\tthis.$.a.textContent = title;\n\t\tthis.$.panel.id = id;\n\n\t\tappendTab(this.$.panel, title);\n\n\t\tnew FormGenerator(this.$.panel, jsDefinition, jsData, saveData);\n\t}\n}\n\nwindow.FormsTabPanel = FormsTabPanel;", "import {DojoDeshi} from '../DojoDeshi.js';\nimport {DojoTemplates} from '../DojoTemplates.js';\nimport {Eventify} from '../Eventify.js';\nimport signals from '../lib/signals.js';\n\nimport {FormField} from './FormField.js';\nimport {FormProxyModel, FormModel} from './FormModel.js';\n\nexport class FormGenerator {\n\tconstructor(parent, jsDef, jsData, formSave, formDelete=null, formReload=null) {\n\t\t// We ensure that every field has a corresponding data entry.\n\t\t// If we don't do this, reset isn't able to reset fields\n\t\t// that had not data.\n\t\tif (undefined==jsDef.fields) {\n\t\t\treturn null;\n\t\t}\n\t\tfor (let f of jsDef.fields) {\n\t\t\tif (undefined == jsData[f.name]) {\n\t\t\t\tjsData[f.name] = undefined;\n\t\t\t}\n\t\t}\n\t\t// Our data is now field-complete, so we can create our model\n\t\tthis.model = new FormProxyModel(new FormModel(jsData));\n\t\tthis.model.changed.add(this.modelChanged, this);\n\n\t\t[this.el, this.$] = DojoTemplates('formal/FormGenerator');\n\t\tif (null==formDelete) {\n\t\t\tthis.$.deleteButton.style.display = 'none';\n\t\t}\n\t\tEventify(this.el, {\n\t\t\t\"save\": evt=> {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tformSave(this.model.Data, jsDef).then(\n\t\t\t\t\t(res)=>{\n\t\t\t\t\t\tthis.model.hasChanged = false;\n\t\t\t\t\t\tthis.$.saveButton.disabled=true;\n\t\t\t\t\t\tthis.$.resetButton.disabled=true;\n\t\t\t\t\t},\n\t\t\t\t\t(err)=>{\n\t\t\t\t\t\tconsole.error(`ERROR saving form: `, err);\n\t\t\t\t\t\talert(`ERROR saving : ${err.message}`);\n\t\t\t\t\t}).catch( (err)=>{\n\t\t\t\t\t\tconsole.error(`ERROR on Form save: `, err);\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t\"reset\": evt=> {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tif (null==formReload) {\n\t\t\t\t\tthis.model.reset();\n\t\t\t\t} else {\n\t\t\t\t\tformReload().then(\n\t\t\t\t\t\t(data)=>{\n\t\t\t\t\t\t\tthis.model.Data = data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err)=>{\n\t\t\t\t\t\t\tconsole.error(`ERROR resetting form: `, err);\n\t\t\t\t\t\t\talert(`ERROR resetting : ${err.message}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t).catch( (err)=> {\n\t\t\t\t\t\tconsole.error(`ERROR on Form reset:`, err);\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"delete\": evt=> {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tconsole.log('formDelete= ', formDelete);\n\t\t\t\tformDelete(this.model.Data, jsDef).then(\n\t\t\t\t\t(deleted)=>{\n\t\t\t\t\t\tif (!deleted) {\n\t\t\t\t\t\t\tconsole.log(`did not delete`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Want to really delete the model\n\t\t\t\t\t\tthis.model.deleteForm();\n\t\t\t\t\t}).catch( (err)=> {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t},\n\t\t}, this);\n\t\tthis.$.saveButton.disabled = true;\n\t\tthis.$.resetButton.disabled = true;\n\n\t\t// Add the appropriate fields.\n\t\tfor (let f of jsDef.fields) {\n\t\t\tlet fld = new FormField(f, this.model);\n\t\t\tthis.$.form.appendChild(fld.DOM);\n\t\t}\n\t\tparent.appendChild(this.el);\n\t}\n\tget DOM() {\n\t\treturn this.el;\n\t}\n\tmodelChanged(k,v,model) {\n\t\tthis.$.saveButton.disabled = !(model.hasChanged);\n\t\tthis.$.resetButton.disabled = !(model.hasChanged);\n\t\tif (null!=this.linkedModel) {\n\t\t\tthis.linkedModel.modelChanged(k,v,linkedModel);\n\t\t}\n\t}\n\tsetData(data, model=null) {\n\t\tif (null==model) {\n\t\t\tthis.model.Data = data;\n\t\t\treturn;\n\t\t}\n\t\tthis.model.setSourceModel(model);\n\t}\n}\n\nwindow.FormGenerator = FormGenerator;\n", "import {DojoDeshi} from '../DojoDeshi.js';\nimport {DojoTemplates} from '../DojoTemplates.js';\nimport {Eventify} from '../Eventify.js';\nimport signals from '../lib/signals.js';\n\nexport class DOMInput {\n\tconstructor(js, model) {\n\t\tthis.js = js;\n\t\tthis.model = model;\n\t\tthis.makeDOM();\n\t\tthis.model.changed.add(this.modelChanged, this);\n\t\tthis.value = model.getField(this.js.name);\n\t\tthis.ignoreSet = true;\n\t}\n\tmakeDOM() {\n\t\tthis.el = document.createElement('input');\n\t\tthis.el.setAttribute('type', this.getType());\n\t\tthis.copyAttributes(this.el);\n\t\tthis.setChangeListener(this.el);\n\t}\n\tgetType() {\n\t\treturn (undefined==this.js.type) ? 'text' : this.js.type;\n\t}\n\tgetChangeEvent() {\n\t\treturn (undefined==this.js.changeEvent) ? \"input\" : this.js.changeEvent;\n\t}\n\tgetAttribute(attr, def) {\n\t\tif ((undefined==this.js.attributes) ||\n\t\t\t(undefined==this.js.attributes[attr])) {\n\t\t\treturn def;\n\t\t}\n\t\treturn this.js.attributes[attr];\n\t}\n\tcopyAttributes(el) {\n\t\tfor (let a in this.js.attributes) {\n\t\t\tel.setAttribute(a, this.js.attributes[a]);\n\t\t}\n\t}\n\tsetChangeListener(el) {\n\t\tel.addEventListener(this.getChangeEvent(), (evt)=>{\n\t\t\tthis.model.setField(this.js.name, this.value, this);\n\t\t});\n\t}\n\tmodelChanged(name, value, model, src) {\n\t\tif (src==this) {\n\t\t\treturn;\n\t\t}\n\t\tif ((name==this.js.name) && (value!=this.value)) {\n\t\t\tthis.value = value;\n\t\t}\n\t}\n\t// If the value is undefined, how does this Field type show the data\n\tundefinedValue() {\n\t\treturn '';\n\t}\n\tset value(v) {\n\t\tif (undefined != v) {\n\t\t\tthis.el.value = v;\n\t\t} else {\n\t\t\tthis.el.value = this.undefinedValue();\n\t\t}\n\t}\n\tget value() {\n\t\treturn this.el.value;\n\t}\n\tget DOM() {\n\t\treturn this.el;\n\t}\n}\n\nexport class DOMInputNumber extends DOMInput {\n\tget value() {\n\t\treturn parseInt(this.el.value);\n\t}\n}\n\nexport class DOMInputCodeMirror extends DOMInput {\n\tmakeDOM() {\n\t\tthis.el = document.createElement('div');\n\t\tlet jsMode = this.getAttribute('mode','json');\n\t\tthis.codeMirror = CodeMirror(this.el, {\n\t\t\t\"mode\": {\n\t\t\t\t\"name\":\"javascript\",\n\t\t\t\tjsMode:true\n\t\t\t}\n\t\t});\n\t\tthis.codeMirror.on('change', (evt)=>{\n\t\t\tthis.model.setField(this.js.name,this.value,this);\n\t\t});\n\t}\n\tget value() {\n\t\tlet s = this.codeMirror.getValue();\n\t\ttry {\n\t\t\tlet js = JSON.parse(s);\n\t\t\treturn js;\n\t\t} catch (e) {\n\t\t\treturn {};\n\t\t}\n\t}\n\tset value(v) {\n\t\tif (JSON.stringify(v) == JSON.stringify(this.value)) {\n\t\t\treturn;\n\t\t}\n\t\t// We ignore the next call to value, which will be the\n\t\t// model changing... hopefully...\n\t\t// this.ignoreSet = true;\n\t\t// @TODO I'm not too sure about this ignoreSet approach...\n\t\t// going to stick with direct comparison for now.\n\t\tif (undefined != v) {\n\t\t\tif ('string'==typeof v) {\n\t\t\t\tthis.codeMirror.setValue(v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet js = JSON.stringify(v);\n\t\t\tthis.codeMirror.setValue(js);\n\t\t} else {\n\t\t\tthis.codeMirror.setValue(`{}`);\n\t\t}\n\t}\n}\n\nexport class DOMInputSelect extends DOMInput {\n\tmakeDOM() {\n\t\tthis.el = document.createElement('select');\n\t\tfor (let i in this.js.options) {\n\t\t\tlet v = this.js.options[i];\n\t\t\tlet o = document.createElement('option');\n\t\t\to.textContent = v;\n\t\t\to.setAttribute('value', v);\n\t\t\tthis.el.appendChild(o);\n\t\t}\n\t\tthis.copyAttributes(this.el);\n\t\tthis.el.addEventListener('change', (evt)=>{\n\t\t\tthis.model.setField(this.js.name, this.value);\t\t\n\t\t});\n\t}\n}\n\nexport class DOMInputCheckbox extends DOMInput {\n\tgetChangeEvent() {\n\t\treturn 'change';\n\t}\n\tget value() {\n\t\treturn this.el.checked;\n\t}\n\tset value(v) {\n\t\tthis.el.checked = (undefined == v) ? false : v;\n\t}\n}\n\nexport class FormField {\n\tconstructor(js, model) {\n\t\tthis.name = js.name;\n\t\tthis.label = js.label;\n\t\tthis.placeholder = js.placeholder;\n\t\tthis.description = js.description;\n\t\tthis.type = js.type;\n\n\t\tthis.el = document.createElement('div');\n\t\tlet lbl = document.createElement('label');\n\t\tlet s = document.createElement('span');\n\t\ts.textContent = (this.label)?this.label:this.name;\n\t\tlbl.appendChild(s);\n\t\tlet input = {};\n\t\tswitch (js.type) {\n\t\t\tcase 'checkbox':\n\t\t\t\tinput = new DOMInputCheckbox(js,model);\n\t\t\t\tbreak;\n\t\t\tcase 'codemirror':\n\t\t\t\tinput = new DOMInputCodeMirror(js,model);\n\t\t\t\tbreak;\n\t\t\tcase 'number':\n\t\t\t\tinput = new DOMInputNumber(js,model);\n\t\t\t\tbreak;\n\t\t\tcase 'select':\n\t\t\t\tinput = new DOMInputSelect(js,model);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tinput = new DOMInput(js, model);\n\t\t\t\tbreak;\n\t\t}\n\t\tlbl.appendChild(input.DOM);\n\t\tthis.el.appendChild(lbl);\n\t}\n\tget DOM() {\n\t\treturn this.el;\n\t}\n}", "import {DojoDeshi} from '../DojoDeshi.js';\nimport {DojoTemplates} from '../DojoTemplates.js';\nimport {Eventify} from '../Eventify.js';\nimport signals from '../lib/signals.js';\n\nexport class FormProxyModel {\n\tconstructor(model=null) {\n\t\tthis.changed = new signals.Signal();\n\t\tthis.deleted = new signals.Signal();\n\t\tthis.setSourceModel(model);\n\t}\n\tsourceModelChanged(k,v,src) {\n\t\tthis.changed.dispatch(k,v,src);\n\t}\n\tsourceModelDeleted(m) {\n\t\tthis.changed.dispatch(this);\n\t}\n\tsetSourceModel(model) {\n\t\tif (null!=this.model) {\n\t\t\tthis.model.deleted.remove(this.sourceModelDeleted,this);\n\t\t\tthis.model.changed.remove(this.sourceModelChanged,this);\n\t\t}\n\t\tthis.model = model;\n\t\tthis.model.deleted.add(this.sourceModelDeleted,this);\n\t\tthis.model.changed.add(this.sourceModelChanged,this);\n\n\t\tfor (let d in this.model.data) {\n\t\t\tthis.changed.dispatch(d, this.model.data[d], this);\n\t\t}\n\t}\n\tdeleteForm() {\n\t\tif (null!=this.model)\n\t\t\tthis.model.deleteForm();\n\t}\n\tsetField(name, val, src=null) {\n\t\tif (null!=this.model)\n\t\t\tthis.model.setField(name,val,src)\n\t}\n\tgetField(name) {\n\t\tif (null==this.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.model.data[name];\n\t}\n\tupdateOriginal() {\n\t\tif (null!=this.model)\n\t\t\tthis.model.updateOriginal();\n\t}\n\tget hasChanged() {\n\t\treturn this.model.hasChanged;\n\t}\n\tset hasChanged(h) {\n\t\tif (null!=this.model)\n\t\t\tthis.model.hasChanged = h;\n\t}\n\treset() {\n\t\tif (null!=this.model)\n\t\t\tthis.model.reset();\n\t}\n\tget Data() {\n\t\tif (null==this.model)\n\t\t\treturn {};\n\t\treturn this.model.Data;\n\t}\n\t// Only set the Data with data from a remote, unchanged\n\t// source. After setting the Form's data, the model is considered\n\t// unchanged.\n\tset Data(data) {\n\t\tif (null!=this.model)\n\t\t\tthis.model.Data = data;\n\t}\n}\n\nexport class FormModel {\n\tconstructor(data = {}) {\n\t\tthis.changed = new signals.Signal();\n\t\tthis.deleted = new signals.Signal();\n\t\tthis.Data = data;\n\t}\n\tdeleteForm() {\n\t\tthis.deleted.dispatch(this);\n\t}\n\tsetField(name, val, src=null) {\n\t\tif (val == this.data[name]) {\n\t\t\treturn;\n\t\t}\n\t\tthis.data[name] = val;\n\t\tthis.hasChanged = true;\n\t\tthis.changed.dispatch(name,val,this,src);\n\t}\n\tgetField(name) {\n\t\treturn this.data[name];\n\t}\n\tclone(a) {\n\t\tif (null==a) {\n\t\t\treturn null;\n\t\t}\n\t\tlet c = {};\n\t\tswitch (typeof a) {\n\t\tcase 'object':\n\t\t\tc = {}\n\t\t\tlet keys = Object.keys(a);\n\t\t\tfor (let i in keys) {\n\t\t\t\tlet k = keys[i];\n\t\t\t\tc[k] = this.clone(a[k]);\n\t\t\t}\n\t\t\treturn c;\n\t\t// /** @TODO Apparently 'typeof' will enver return array */\n\t\t// case 'array':\n\t\t// \tc = [];\n\t\t// \tfor (let i of a) {\n\t\t// \t\tc[i] = this.clone(a[i]);\n\t\t// \t}\n\t\t// \treturn c;\n\t\t}\n\t\treturn a;\n\t}\n\tupdateOriginal() {\n\t\tthis.OriginalData = this.clone(this.data);\n\t\tif (this.OriginalData==this.data) {\n\t\t\tconsole.error('Our objects are the same');\n\t\t}\n\t\tthis.hasChanged = false;\n\t}\n\treset() {\n\t\tconsole.log(\"Resetting to \", this.OriginalData);\n\t\tthis.Data = this.OriginalData;\n\t}\n\tget Data() {\n\t\treturn this.data;\n\t}\n\t// Only set the Data with data from a remote, unchanged\n\t// source. After setting the Form's data, the model is considered\n\t// unchanged.\n\tset Data(data) {\n\t\tthis.data = data;\n\t\tthis.updateOriginal()\n\t\tfor (let d in this.data) {\n\t\t\tthis.changed.dispatch(d, this.data[d], this);\n\t\t}\n\t}\n}", "\nimport {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class LoginForm {\n\tconstructor(parent) {\n\t\t[this.el, this.$] = DojoTemplates('LoginForm');\n\t\tthis.$.callout.style.display = 'none';\n\t\tthis.$.actionButton.addEventListener('click', (evt)=>{\n\t\t\tthis.action(evt);\n\t\t});\n\t\tlet altClick = (evt)=>{\n\t\t\tevt.stopPropagation();\n\t\t\tevt.preventDefault();\t\t\t\n\t\t\tthis.setState(evt.target.getAttribute('data-state'));\n\t\t}\n\t\tfor (let a of [this.$.altAction1, this.$.altAction2]) {\n\t\t\ta.addEventListener('click',altClick);\n\t\t} \n\t\tthis.setState('login');\n\t\tparent.appendChild(this.el);\n\t}\n\tdisplayMessage(txt) {\n\t\tthis.$.callout.textContent = txt;\n\t\tthis.$.callout.className = \"callout success\";\n\t\tthis.$.callout.style.display = 'block';\n\t}\n\tdisplayError(txt) {\n\t\tthis.$.callout.textContent = txt;\n\t\tthis.$.callout.className = \"callout alert\";\n\t\tthis.$.callout.style.display = 'block';\n\t}\n\thideCallout() {\n\t\tthis.$.callout.style.display = 'none';\n\t}\n\taction(evt) {\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\t\tswitch (this.state) {\n\t\t\tcase 'login':\n\t\t\t\tDojoDeshi.instance().RPCHttp()\n\t\t\t\t.LoginUser(this.$.identity.value,this.$.password.value)\n\t\t\t\t.then(\n\t\t\t\t\t(res)=>{\n\t\t\t\t\t\tlet [success, cookieval] = res;\n\t\t\t\t\t\tif (success) {\n\t\t\t\t\t\t\tdocument.cookie = `dojo-deshi-id=${cookieval};path=/`\n\t\t\t\t\t\t\tdocument.location = \"/classrecord/summary\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.log(`received result: `, res);\n\t\t\t\t\t}, (err)=>{\n\t\t\t\t\t\tthis.displayError('Login failed. Please try again.');\n\t\t\t\t\t});\t\t\t\n\t\t\t\tbreak;\n\t\t\tcase 'register':\n\t\t\t\tDojoDeshi.instance().RPCHttp()\n\t\t\t\t.StudentRegisterByEmailOrMobile(this.$.identity.value)\n\t\t\t\t.then(\n\t\t\t\t\t(res)=>{\n\t\t\t\t\t\tstype = res[0];\n\t\t\t\t\t\tthis.displayMessage(`Your password has been sent to ${this.$.identity.value}. Please login.`);\n\t\t\t\t\t\tthis.setState('login');\n\t\t\t\t\t}, (err)=>{\n\t\t\t\t\t\tif (\"ErrStudentExists\"==err.message) {\n\t\t\t\t\t\t\tthis.displayError(`That user already exists. Perhaps try Forgotten to reset your password.`);\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.displayError(`An error: ${err.message}`);\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t})\n\t\t\t\tbreak;\n\t\t\tcase 'forgot':\n\t\t\t\tDojoDeshi.instance().RPCHttp()\n\t\t\t\t.StudentResetPasswordByEmailOrMobile(this.$.identity.value)\n\t\t\t\t.then(\n\t\t\t\t\t(res)=>{\n\t\t\t\t\t\tstype = res[0];\n\t\t\t\t\t\tif (\"NoSuchStudent\"==stype) {\n\t\t\t\t\t\t\tthis.displayError(`Sorry, we don't have a record for ${this.$.identity.value}. Perhaps you can register?`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.displayMessage(`A new password has been sent to ${this.$.identity.value}. Please login.`);\n\t\t\t\t\t\t\tthis.setState('login');\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t}, (err)=>{\n\t\t\t\t\t\tthis.displayError(`Oops- an error occurred: ${err.message}`);\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tsetAlt(alt, state, text) {\n\t\talt.textContent = text;\n\t\talt.setAttribute('data-state', state);\n\t}\n\tsetActions(actText, alt1, alt1Text, alt2, alt2Text) {\n\t\tthis.$.actionButton.textContent = actText;\n\t\tthis.setAlt(this.$.altAction1, alt1, alt1Text);\n\t\tthis.setAlt(this.$.altAction2, alt2, alt2Text);\n\t}\n\tsetState(state) {\n\t\tthis.state = state;\n\t\t// this.$.callout.style.display = 'none';\n\t\tswitch (state) {\n\t\t\tcase 'login':\n\t\t\t\tthis.setActions('Login','register','Register','forgot','Forgotten');\n\t\t\t\tthis.$.passwordContainer.style.visibility = 'visible';\n\t\t\t\treturn;\n\t\t\tcase 'register':\n\t\t\t\tthis.setActions('Register','login','Login','forgot','Forgotten');\n\t\t\t\tthis.$.passwordContainer.style.visibility = 'hidden';\n\t\t\t\treturn;\n\t\t\tcase 'forgot':\n\t\t\t\tthis.setActions('Forgotten','login','Login','register','Register');\n\t\t\t\tthis.$.passwordContainer.style.visibility = 'hidden';\n\t\t\t\treturn;\n\t\t}\n\t}\n}\n\nwindow.LoginForm = LoginForm;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {StudentListModel} from './StudentListModel.js';\nimport {StudentListTable} from './StudentListTable.js';\nimport {StudentSelectModel} from './StudentSelectModel.js';\nimport {MessageForm} from './MessageForm.js';\n\nexport class StudentListController {\n\tconstructor(parent) {\n\t\t[this.el, this.$] = DojoTemplates('StudentListController');\n\t\tEventify(this.el, {\n\t\t\t'addStudent': evt => {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tdocument.location = '/students/edit/0';\n\t\t\t},\n\t\t\t'messageClick': evt=> {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tthis.messageForm.open();\n\t\t\t}\n\t\t}, this);\n\t\tlet model = new StudentListModel();\n\t\tlet selectModel = new StudentSelectModel(model);\n\t\tnew StudentListTable(this.$.studentTable, model, selectModel);\n\t\tmodel.load();\n\t\tparent.appendChild(this.el);\n\t\tthis.messageForm = new MessageForm(parent, selectModel);\n\t}\n}\n\nwindow.StudentListController = StudentListController;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {StudentSelectModel} from './StudentSelectModel.js';\n\nexport class StudentListModel {\n\tconstructor() {\n\t\tthis.students = [];\n\t\tthis.added = new signals.Signal();\n\t\tthis.removed = new signals.Signal();\n\t\tthis.changed = new signals.Signal();\n\t\tthis.selectModel = new StudentSelectModel(this);\n\t}\n\tload() {\n\t\tDojoDeshi.instance().RPC().StudentsForDojo(0)\n\t\t.then(\n\t\t\t(res)=>{\n\t\t\t\tthis.setStudents(res[0]);\n\t\t\t})\n\t\t.catch(\n\t\t\t(err)=>{\n\t\t\t\tconsole.log(err);\n\t\t\t\talert('ERR: ' + err.message);\n\t\t\t});\n\t}\n\tsetStudents(students) {\n\t\tfor (let s of this.students) {\n\t\t\tthis.removed.dispatch(s, this);\n\t\t}\n\t\tthis.students = [];\n\t\tfor (let s of students) {\n\t\t\tthis.students.push(s);\n\t\t\tthis.added.dispatch(s, this);\n\t\t}\n\t}\n\t[Symbol.iterator]() {\n\t\treturn this.students[Symbol.iterator]();\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class StudentSelectModel {\n\tconstructor(studentListModel) {\n\t\tthis.students = new Set();\n\t\tthis.selected = new signals.Signal();\n\t\tstudentListModel.removed.add(this.studentRemoved, this);\n\t\tthis.allStudentsList = studentListModel;\n\t}\n\tstudentRemoved(student, src) {\n\t\tthis.select(student.Id, false, src);\n\t}\n\ttoggle(student, src=null) {\n\t\tthis.select(student, !this.students.has(student), src);\n\t}\n\t// selectFor selects students based on the returned value from\n\t// the filterF parameter. If the union parameter is true, \n\t// any previously selected students remain selected, otherwise\n\t// only the students matching the filter function are selected.\n\tselectFor(filterF, union=true, src=null) {\n\t\tfor (let s of this.allStudentsList) {\n\t\t\tif (filterF(s)) {\n\t\t\t\tthis.select(s,true,src);\n\t\t\t} else {\n\t\t\t\tif (!union) {\n\t\t\t\t\tthis.select(s,false,src);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tselect(student, selected=true, src=null) {\n\t\tlet dispatch = false;\n\t\tlet found = this.students.has(student);\n\t\tif (selected && !found) {\n\t\t\tthis.students.add(student);\n\t\t\tdispatch = true;\n\t\t}\n\t\tif (!selected && found) {\n\t\t\tthis.students.delete(student);\n\t\t\tdispatch =true;\n\t\t}\n\t\tif (dispatch) {\n\t\t\tconsole.log(\"Dispatching StudentSelectModel update\");\n\t\t\tthis.selected.dispatch(student, selected, src);\n\t\t}\n\t}\n\tclear(src=null) {\n\t\tfor (let s of this.students) {\n\t\t\tthis.selected.dispatch(s, false, src);\n\t\t}\n\t\tthis.students.clear();\n\t}\n\t[Symbol.iterator]() {\n\t\treturn this.students[Symbol.iterator]();\n\t}\n\tidArray() {\n\t\tlet arr = [];\n\t\tfor (let s of this.students) {\n\t\t\tarr.push(s.Id);\n\t\t}\n\t\treturn arr;\n\t}\n\ttoArray() {\n\t\tlet arr = [];\n\t\tfor (let s of this.students) {\n\t\t\tarr.push(s);\n\t\t}\n\t\treturn arr;\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {StudentInfoForm} from './StudentInfoForm.js';\nimport {StudentListTableRow} from './StudentListTableRow.js';\n\nexport class StudentListTable {\n\tconstructor(parent, studentListModel, studentSelectModel) {\n\t\t[this.el, this.$] = DojoTemplates('StudentListTable2');\n\t\tthis.model = studentListModel;\n\t\tthis.model.added.add(this.studentAdded, this);\n\t\tthis.selectModel = studentSelectModel;\n\t\t// console.log(\"StudentListTable :: this.$.table = \" , this.$.table);\n\t\tparent.appendChild(this.el);\n\t\tthis.infoForm = new StudentInfoForm(this.$.infoForm);\n\t}\n\tstudentAdded(student, src) {\n\t\tnew StudentListTableRow(this.$.table, student, this.model, \n\t\t\tthis.selectModel, this.infoForm);\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class StudentAttendanceSummaryCard {\n\tconstructor(parent, student, atr) {\n\t\t[this.el, this.$] = DojoTemplates('StudentAttendanceSummaryCard');\n\t\tthis.$.attendanceType.textContent = atr.AttendanceType.Name;\n\t\tthis.$.attendanceCount.textContent = atr.Count;\n\t\tthis.el.style.backgroundColor = atr.AttendanceType.Color;\n\t\tparent.appendChild(this.el);\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport {StudentAttendanceSummaryCard} from './StudentAttendanceSummaryCard.js';\nimport signals from './lib/signals.js';\n\nexport class StudentInfoForm {\n\tconstructor(parent) {\n\t\t[this.el, this.$] = DojoTemplates('StudentInfoForm');\n\t\tthis.parent = parent;\n\t}\n\topen(student) {\n\t\tthis.parent.appendChild(this.el);\n\t\tthis.$.title.textContent = `${student.Firstname} ${student.Surname}`;\n\t\tthis.$.Surname.textContent = student.Surname;\n\t\tthis.$.Firstname.textContent = student.Firstname;\n\t\tthis.$.Mobile.href=\"tel:\" + student.Mobile;\n\t\tthis.$.Mobile.textContent = student.Mobile;\n\t\tthis.$.Email.href = \"mailto:\" + student.Email;\n\t\tthis.$.Email.textContent = student.Email;\n\n\t\tthis.$.LastGrading.textContent = '...';\n\t\tthis.$.ClassesSinceLastGrading.textContent = '...';\n\t\t\n\t\tlet from = new Date();\n\t\tfrom.setMonth(from.getMonth()-1);\n\t\tDojoDeshi.instance().RPC().StudentAttendance(student.Id,\n\t\t\t/* default dojo */0, { From: from })\n\t\t.then(\n\t\t\t(res)=>{\n\t\t\t\t// console.log(`res = `, res);\n\t\t\t\tlet div = document.createElement('div');\n\t\t\t\t// console.log(`Attendance = `, res[0].Attendance);\n\t\t\t\tfor (let atr of res[0].Attendance) {\n\t\t\t\t\t// console.log(`creating new StudentAttendanceSummaryCard `, atr);\n\t\t\t\t\tnew StudentAttendanceSummaryCard(div, this.student, atr);\n\t\t\t\t}\n\t\t\t\tthis.$.Attendance.innerHTML='';\n\t\t\t\tthis.$.Attendance.appendChild(div);\n\t\t\t})\n\t\t.catch(\n\t\t\t(err)=>{\n\t\t\t\tconsole.log(err);\n\t\t\t\talert('ERR: ' + err.message);\n\t\t\t});\n\n\t\tDojoDeshi.instance().RPC().StudentAttendanceSearch({\n\t\t\tStudentId: student.Id,\n\t\t\tAttendanceTypeId: 4,\t// Grading\n\t\t}).then(\n\t\t\t(res)=>{\n\t\t\t\tlet [sa] = res;\n\t\t\t\tlet countParams = {\n\t\t\t\t\tStudentId: student.Id\n\t\t\t\t};\n\t\t\t\tif (0==sa.Classes.length) {\n\t\t\t\t\tthis.$.LastGrading.textContent = '- no last grading recorded -';\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(`Class0 = `, sa.Classes[0]);\n\t\t\t\t\tthis.$.LastGrading.textContent = sa.Classes[0].Class.Start;\n\t\t\t\t\tthis.$.LastGrading.setAttribute(`href`,`/classrecord/${sa.Classes[0].Class.Id}/edit`);\n\t\t\t\t\tcountParams.DateRange = [ sa.Classes[0].Class.Start ];\n\t\t\t\t}\n\t\t\t\tDojoDeshi.instance().RPC().StudentAttendanceSearch(countParams)\n\t\t\t\t.then(\n\t\t\t\t\t(res)=>{\n\t\t\t\t\t\tconsole.log(`Count results are `, res);\n\t\t\t\t\t\tlet count = 0;\n\t\t\t\t\t\tlet weight = 0;\n\t\t\t\t\t\tfor (let c of res[0].Classes) {\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\tweight += c.Attendance.Weight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$.ClassesSinceLastGrading.textContent = `${count} (weight ${weight})`;\n\t\t\t\t\t})\n\t\t\t\t.catch(\n\t\t\t\t\t(err)=>{\n\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\talert(`ERR counting attendance: ${err.message}`);\n\t\t\t\t\t});\n\t\t})\n\t\t.catch(\n\t\t\t(err)=>{\n\t\t\t\tconsole.log(err);\n\t\t\t\talert(`ERR: ${err.message}`);\n\t\t\t});\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {StudentAttendanceByDateBadges} from './StudentAttendanceByDateBadges.js';\n\nexport class StudentListTableRow {\n\tconstructor(parent, student, studentListModel, studentSelectModel,\n\t\tstudentInfoForm) {\n\t\tthis.selectModel = studentSelectModel;\n\t\tthis.infoForm = studentInfoForm;\n\t\t[this.el, this.$] = DojoTemplates('StudentListTableRow2');\n\t\tEventify(this.el,\n\t\t{\n\t\t\t\"editClick\":evt=>{\n\t\t\t\tif (null==this.student) return;\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tdocument.location = `/students/edit/${this.student.Id}`;\n\t\t\t},\n\t\t\t\"selectClick\":evt=>{\n\t\t\t\tthis.selectModel.toggle(this.student, this);\n\t\t\t},\n\t\t\t\"stateClick\":evt=>{\n\t\t\t\tif (null==this.student) return;\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tlet thisStateId = this.student.State.Id;\n\t\t\t\tthis.selectModel.selectFor(function(s) {\n\t\t\t\t\treturn (s.State.Id==thisStateId);\n\t\t\t\t});\n\t\t\t},\n\t\t\t\"infoClick\":evt=>{\n\t\t\t\tif (null==this.student) return;\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tthis.infoForm.open(this.student);\n\t\t\t},\n\t\t\t\"vcardClick\":evt=>{\n\t\t\t\tif (null==this.student) return;\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tdocument.location=`/students/vcard/${this.student.Id}.vcard`;\n\t\t\t}\n\t\t}, this);\n\t\tparent.appendChild(this.el);\n\t\tthis.studentListModel = studentListModel;\n\t\tstudentListModel.removed.add(this.studentRemoved, this);\n\t\tthis.selectModel.selected.add(this.studentSelected, this);\n\t\tthis.setStudent(student);\n\t}\n\tsetStudent(student=null) {\n\t\tthis.student = student;\n\t\tthis.$.Surname.textContent = student.Surname;\n\t\tthis.$.Firstname.textContent = student.Firstname;\n\t\tthis.$.Email.href = `mailto:${student.Email}`\n\t\tthis.$.Email.textContent = student.Email;\n\t\tthis.$.Mobile.href = `tel:${student.Mobile}`\n\t\tthis.$.Mobile.textContent = student.Mobile;\n\t\tthis.$.State.textContent = student.State.Name;\n\n\t\tthis.$.Attendance.textContent = '...';\n\t\tnew StudentAttendanceByDateBadges(this.$.Attendance, student.Id);\n\t}\n\tstudentRemoved(student, src) {\n\t\tif (this.student.Id == student.Id) {\n\t\t\tthis.studentListModel.removed.remove(this.studentRemoved, this);\n\t\t\tthis.selectModel.selected.remove(this.studentSelected, this);\n\t\t\tthis.el.parentNode.removeChild(this.el);\n\t\t}\n\t}\n\tstudentSelected(student, selected, src) {\n\t\tif ((null==this.student) || (student.Id != this.student.Id)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.$.selectCheckbox.checked = selected;\n\t}\n}", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class StudentAttendanceByDateBadges {\n\tconstructor (div, studentId) {\n\t\tthis.div = div;\n\t\tDojoDeshi.instance().RPC().StudentAttendanceByDate(studentId).then(\n\t\t\t(res)=>{\n\t\t\t\tthis.div.innerHTML = '';\n\t\t\t\tlet d = new Date();\n\t\t\t\tlet dt = Date.parse(res[0][0].Date);\n\t\t\t\td.setTime(dt);\n\t\t\t\tlet future = [];\n\t\t\t\t// if (0<=d.getDay()) {\n\t\t\t\t// \tfor (let i=7-d.getDay(); i>0; i--) {\n\t\t\t\t// \t\tlet f = dt + i * 24*60*60*1000;\n\t\t\t\t// \t\tlet fd = new Date();\n\t\t\t\t// \t\tfd.setTime(dt + i*24*60*60*1000);\n\t\t\t\t// \t\tfuture.push({Date:fd, Count:-1});\n\t\t\t\t// \t}\n\t\t\t\t// }\n\t\t\t\tlet el = document.createElement('div');\n\t\t\t\tel.className = \"attendance-row\";\n\t\t\t\tlet badge = (att)=> {\n\t\t\t\t\tel.appendChild(this.badge(att));\n\t\t\t\t}\n\t\t\t\t// console.log(\"future = \", future);\n\t\t\t\t// console.log(\"res[0][0] = \", res[0][0]);\n\t\t\t\tfuture.forEach( badge );\n\t\t\t\tres[0].forEach( badge );\n\t\t\t\tthis.div.innerHTML = '';\n\t\t\t\tthis.div.appendChild(el);\n\t\t\t}\n\t\t\t, (err)=>{\n\t\t\t\tconsole.error(err);\n\t\t\t\tdiv.appendChild(document.createTextNode(err));\n\t\t\t}).catch( (err)=> {\n\t\t\t\tconsole.error(err);\n\t\t\t\t// alert(`ERROR: ${err.message}`);\n\t\t\t});\n\t}\n\tbadge(att) {\n\t\tlet e = document.createElement('div');\n\t\te.className = 'attendance-badge attendance-' + \n\t\t(att.Count>0 ? 'present' : \n\t\t\t(att.Count==0 ? 'absent':'future'));\n\t\treturn e;\n\t}\n\trenderWeekBadges(items, el) {\n\t\tlet badge = (a)=>{\n\t\t\tlet e = document.createElement('div');\n\t\t\te.className = 'attendance-badge attendance-' + \n\t\t\t\t(a.Count>0 ? 'present' : \n\t\t\t\t\t(a.Count==0 ? 'absent':'future'));\n\t\t\tel.appendChild(e);\n\t\t};\n\t}\n}\n\nwindow.StudentAttendanceByDateBadges = StudentAttendanceByDateBadges;", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport class MessageForm {\n\tconstructor(parent, provider) {\n\t\t[this.el, this.$] = DojoTemplates('MessageForm');\n\t\tthis.provider = provider;\n\t\tEventify(this.el, {\n\t\t\t'Send':function(evt) {\n\t\t\t\tconsole.log(`In MessageForm.Send`);\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t\tlet p = null;\n\t\t\t\tlet rpc = DojoDeshi.instance().RPC();\n\t\t\t\tlet ids = this.provider.idArray();\n\t\t\t\tif (this.isSms()) {\n\t\t\t\t\tp = rpc.SendShortMessage(ids, this.$.msgText.value);\n\t\t\t\t} else {\n\t\t\t\t\tp = rpc.SendEmailMessage(ids, this.$.msgTitle.value, this.$.msgText.value);\n\t\t\t\t}\n\t\t\t\tp.then(\n\t\t\t\t\t\t(res)=>{\n\t\t\t\t\t\t\tjQuery(this.el).foundation('close');\n\t\t\t\t\t\t})\n\t\t\t\t\t.catch( \n\t\t\t\t\t\t(err)=>{\n\t\t\t\t\t\t\talert(`ERROR: ${err.message}`);\n\t\t\t\t\t\t\tconsole.error(\"ERROR on SendShortMessage: \", err);\n\t\t\t\t\t\t});\n\t\t\t},\n\t\t\t'messageChange':function(evt) {\n\t\t\t\tthis.$.characterCount.textContent = `(${this.$.msgText.value.length} chars)`;\n\t\t\t},\n\t\t\t'smsOrEmailToggle':function(evt) {\n\t\t\t\tthis.$.titleDiv.style.display = (this.isSms() ? 'none' : 'block');\n\t\t\t}\n\t\t}, this);\n\t\tparent.appendChild(this.el);\n\n\t\t// jQuery(this.el).foundation();\n\t}\n\topen() {\n\t\t// jQuery(this.el).foundation('open');\n\t}\n\tisSms() {\n\t\treturn this.$.smsMessage.checked;\n\t}\n}", "class TechniquesAutoComplete extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t}\n\tsearchFor(input) {\n\t\treturn DojoDeshi.instance().RPC().TechniqueSearch(this.classRecordId, input).then(\n\t\t\t([searchTerm, techniques, err])=>{\n\t\t\t\tif (err) {\n\t\t\t\t\tthrow(err);\n\t\t\t\t}\n\t\t\t\tconsole.log(`searchFor returned `, [searchTerm, techniques, err]);\n\t\t\t\tlet res = [searchTerm];\t\t\n\t\t\t\tfor (let t of techniques) {\n\t\t\t\t\tres.push(t.Name);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t});\n\t}\n\tget classRecordId() {\n\t\treturn parseInt(this.getAttribute(`data-record-id`));\n\t}\n}\n\ncustomElements.define(`dojo-techniques-auto-complete`, TechniquesAutoComplete);", "import {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\n\nexport class DojoPopup extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`DojoPopup`);\n\t\tEventify(this.el, this);\n\t\tthis.attachShadow({mode:`open`});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t}\n\tconnectedCallback() {\n\n\t}\n\tclosePopup(evt) {\n\t\tevt.stopPropagation();\n\t\tthis.remove();\n\t}\n}\ncustomElements.define(`dojo-popup`, DojoPopup);", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport function DataComponents(el) {\n\tfor (let e of el.querySelectorAll(`[data-component]`)) {\n\t\tlet c = e.getAttribute(`data-component`);\n\t\tlet f = window[c];\n\t\tif (!f) {\n\t\t\tconsole.error(`Failed to find constructor for data-componet = ${c}`);\n\t\t}\n\t\t// console.log(`window[${c}] = `, f);\n\t\tlet comp = new f(e);\n\t\tconsole.log('Instantianted ', comp, ' on ', e);\n\t}\n}\n\nexport function DataInstance(el) {\n\tfor (let e of el.querySelectorAll(`[data-instance]`)) {\n\t\tlet c = e.getAttribute(`data-instance`);\t\t\n\t}\n}\n\n", "import {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\n\nexport class DojoMenu extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`DojoMenu`);\n\t\tthis.attachShadow({mode:`open`});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t\tEventify(this.shadowRoot, this);\n\t\t// Turns out it's much easier if the menu is hidden by default, or at least\n\t\t// it seems that way for me.\n\t\t// if (`hide`==this.getState()) {\n\t\t\tthis.$.menu.classList.add(`hide`);\n\t\t// }\n\t}\n\tsetState(state) {\n\t\twindow.sessionStorage.setItem(`dojo-menu-toggle`, state);\n\t}\n\tgetState() {\n\t\treturn window.sessionStorage.getItem(`dojo-menu-toggle`);\n\t}\n\tconnectedCallback() {}\n\ttoggleDisplay(evt) {\n\t\tevt.stopPropagation();\n\t\tif (this.$.menu.classList.contains(`hide`)) {\n\t\t\tthis.$.menu.classList.remove(`hide`);\n\t\t\tthis.setState(``);\n\t\t} else {\n\t\t\tthis.$.menu.classList.add(`hide`);\n\t\t\tthis.setState(`hide`);\n\t\t}\n\t}\n}\n\ncustomElements.define(`dojo-menu`, DojoMenu);", "export class DojoAPIHttp {\n\tconstructor(path=\"/rpc/DojoAPI/json\", server=\"\", _timeout=0) {\n\t\tthis._id = 0;\n\t\tthis._timeout = 0;\n\t\tif (\"\"==server) {\n\t\t\tserver = document.location.protocol + \"//\" + document.location.host;\n\t\t}\n\t\tthis.url = server + path;\n\t\tthis._headers = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\":\"application/json\"\n\t\t};\n\t}\n\tsetTimeout (ts) {\n\t\tthis._timeout = ts;\n\t}\t\n\treject(reject, err) {\n\t\treject(err);\n\t}\n\theaders() {\n\t\treturn this._headers;\n\t}\n\trpc (method, params) {\n\t\t// params comes in as an 'arguments' object, so we need to convert\n\t\t// it to an array\n\t\tparams = Array.prototype.slice.call(params);\n\n\t\treturn new Promise( (resolve, reject)=>{\t\t\n\t\t\tfetch(this.url + \"?\" + method, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: this.headers(),\n\t\t\t\tbody: JSON.stringify({ id: this._id++, method:method, params: params })\n\t\t\t})\n\t\t\t.then( (res)=>{\n\t\t\t\tif (!res.ok) {\n\t\t\t\t\tlet err = new Error(res.statusText);\n\t\t\t\t\terr.response = res;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\treturn res.json();\n\t\t\t}).then( (js)=>{\n\t\t\t\tif (null!=js.error) {\n\t\t\t\t\tthrow js.error;\n\t\t\t\t}\n\t\t\t\tif (null!=js.result) {\n\t\t\t\t\tresolve(js.result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(null);\n\t\t\t\treturn;\n\t\t\t} )\n\t\t\t.catch( (err)=>{\n\t\t\t\tthis.reject(reject, err);\n\t\t\t})\n\t\t});\n\t}\n\t\n\tError() {\n\t\treturn this.rpc(\"Error\", arguments );\n\t}\n\t\n\tLoginUser(emailOrMobile,password) {\n\t\treturn this.rpc(\"LoginUser\", arguments );\n\t}\n\t\n\tLogout() {\n\t\treturn this.rpc(\"Logout\", arguments );\n\t}\n\t\n\tStudentResetPasswordByEmailOrMobile(emailOrMobile) {\n\t\treturn this.rpc(\"StudentResetPasswordByEmailOrMobile\", arguments );\n\t}\n\t\n\tStudentRegisterByEmailOrMobile(emailOrMobile) {\n\t\treturn this.rpc(\"StudentRegisterByEmailOrMobile\", arguments );\n\t}\n\t\n\tNewDojo(name,parentId,offset) {\n\t\treturn this.rpc(\"NewDojo\", arguments );\n\t}\n\t\n\tGetDojo(id) {\n\t\treturn this.rpc(\"GetDojo\", arguments );\n\t}\n\t\n\tSaveDojo(d) {\n\t\treturn this.rpc(\"SaveDojo\", arguments );\n\t}\n\t\n\tDeleteDojo(dojo) {\n\t\treturn this.rpc(\"DeleteDojo\", arguments );\n\t}\n\t\n\tDeleteClassRecord(classRecordId) {\n\t\treturn this.rpc(\"DeleteClassRecord\", arguments );\n\t}\n\t\n\tDojosForUser() {\n\t\treturn this.rpc(\"DojosForUser\", arguments );\n\t}\n\t\n\tClassTypes() {\n\t\treturn this.rpc(\"ClassTypes\", arguments );\n\t}\n\t\n\tSetClassRecordNotes(classRecordId,notes) {\n\t\treturn this.rpc(\"SetClassRecordNotes\", arguments );\n\t}\n\t\n\tSetClassRecordTitle(classRecordId,title) {\n\t\treturn this.rpc(\"SetClassRecordTitle\", arguments );\n\t}\n\t\n\tSetClassRecordType(classRecordId,classTypeId) {\n\t\treturn this.rpc(\"SetClassRecordType\", arguments );\n\t}\n\t\n\tSetClassRecordTimes(crId,dateString,startString,endString) {\n\t\treturn this.rpc(\"SetClassRecordTimes\", arguments );\n\t}\n\t\n\tStudentAttendanceForClassRecord(crId) {\n\t\treturn this.rpc(\"StudentAttendanceForClassRecord\", arguments );\n\t}\n\t\n\tStudentAbsenceForClassRecord(crId) {\n\t\treturn this.rpc(\"StudentAbsenceForClassRecord\", arguments );\n\t}\n\t\n\tStudentsForClassRecord(crId) {\n\t\treturn this.rpc(\"StudentsForClassRecord\", arguments );\n\t}\n\t\n\tAddStudentToClassRecord(classRecordId,studentId,attendanceTypeId) {\n\t\treturn this.rpc(\"AddStudentToClassRecord\", arguments );\n\t}\n\t\n\tRemoveStudentFromClassRecord(classRecordId,studentId) {\n\t\treturn this.rpc(\"RemoveStudentFromClassRecord\", arguments );\n\t}\n\t\n\tSetStudentClassRecordAttendanceType(classRecordId,studentId,attendanceTypeId) {\n\t\treturn this.rpc(\"SetStudentClassRecordAttendanceType\", arguments );\n\t}\n\t\n\tAttendanceTypes() {\n\t\treturn this.rpc(\"AttendanceTypes\", arguments );\n\t}\n\t\n\tAttendanceTypesWithAbsence() {\n\t\treturn this.rpc(\"AttendanceTypesWithAbsence\", arguments );\n\t}\n\t\n\tLoadTechniques() {\n\t\treturn this.rpc(\"LoadTechniques\", arguments );\n\t}\n\t\n\tTechniqueSearch(classRecordId,techniqueSearch) {\n\t\treturn this.rpc(\"TechniqueSearch\", arguments );\n\t}\n\t\n\tAddTechniqueToClassRecord(classRecordId,technique) {\n\t\treturn this.rpc(\"AddTechniqueToClassRecord\", arguments );\n\t}\n\t\n\tRemoveTechniqueFromClassRecord(classRecordId,technique) {\n\t\treturn this.rpc(\"RemoveTechniqueFromClassRecord\", arguments );\n\t}\n\t\n\tLoadClassRecordTechniques(classRecordId) {\n\t\treturn this.rpc(\"LoadClassRecordTechniques\", arguments );\n\t}\n\t\n\tClassRecordSummaryForPeriod(dojoId,start,end) {\n\t\treturn this.rpc(\"ClassRecordSummaryForPeriod\", arguments );\n\t}\n\t\n\tClassRecordSummarySearch(search) {\n\t\treturn this.rpc(\"ClassRecordSummarySearch\", arguments );\n\t}\n\t\n\tDojoAttendanceByDate(dojoId) {\n\t\treturn this.rpc(\"DojoAttendanceByDate\", arguments );\n\t}\n\t\n\tStudentAttendanceByDate(studentId) {\n\t\treturn this.rpc(\"StudentAttendanceByDate\", arguments );\n\t}\n\t\n\tDeleteAspect(aspectId) {\n\t\treturn this.rpc(\"DeleteAspect\", arguments );\n\t}\n\t\n\tLoadTechniquesForArtLimited(artId,from,to) {\n\t\treturn this.rpc(\"LoadTechniquesForArtLimited\", arguments );\n\t}\n\t\n\tLoadTechniquesForArt(artId) {\n\t\treturn this.rpc(\"LoadTechniquesForArt\", arguments );\n\t}\n\t\n\tDeleteTechnique(techniqueId) {\n\t\treturn this.rpc(\"DeleteTechnique\", arguments );\n\t}\n\t\n\tSaveTechnique(t) {\n\t\treturn this.rpc(\"SaveTechnique\", arguments );\n\t}\n\t\n\tDeleteStudent(dojoId,studentId) {\n\t\treturn this.rpc(\"DeleteStudent\", arguments );\n\t}\n\t\n\tFormsForDojo(dojoId) {\n\t\treturn this.rpc(\"FormsForDojo\", arguments );\n\t}\n\t\n\tFormsAndInputsForDojoRefType(dojoId,refType,refId) {\n\t\treturn this.rpc(\"FormsAndInputsForDojoRefType\", arguments );\n\t}\n\t\n\tFormsForDojoRefType(dojoId,refType) {\n\t\treturn this.rpc(\"FormsForDojoRefType\", arguments );\n\t}\n\t\n\tSaveForm(f) {\n\t\treturn this.rpc(\"SaveForm\", arguments );\n\t}\n\t\n\tLoadFormInput(formId,refId) {\n\t\treturn this.rpc(\"LoadFormInput\", arguments );\n\t}\n\t\n\tSaveFormInput(fi) {\n\t\treturn this.rpc(\"SaveFormInput\", arguments );\n\t}\n\t\n\tDeleteForm(formId) {\n\t\treturn this.rpc(\"DeleteForm\", arguments );\n\t}\n\t\n\tSendShortMessage(toIds,txt) {\n\t\treturn this.rpc(\"SendShortMessage\", arguments );\n\t}\n\t\n\tSendEmailMessage(toIds,title,text) {\n\t\treturn this.rpc(\"SendEmailMessage\", arguments );\n\t}\n\t\n\tStudentById(studentId) {\n\t\treturn this.rpc(\"StudentById\", arguments );\n\t}\n\t\n\tStudentsForDojo(dojoId) {\n\t\treturn this.rpc(\"StudentsForDojo\", arguments );\n\t}\n\t\n\tMergeTechniques(fromId,toId) {\n\t\treturn this.rpc(\"MergeTechniques\", arguments );\n\t}\n\t\n\tStudentAttendance(studentId,dojoId,dates) {\n\t\treturn this.rpc(\"StudentAttendance\", arguments );\n\t}\n\t\n\tStudentAttendanceSearch(sas) {\n\t\treturn this.rpc(\"StudentAttendanceSearch\", arguments );\n\t}\n\t\n\tVersion() {\n\t\treturn this.rpc(\"Version\", arguments );\n\t}\n\t\n\tflatten(callback, context=null) {\n\t\treturn function(argsArray) {\n\t\t\tcallback.apply(context, argsArray);\n\t\t}\n\t}\n}\n\n// Define the class in the window and make AMD compatible\nwindow.DojoAPI = DojoAPIHttp;\nif ((\"function\" == typeof window.define) && (window.define.amd)) {\n\twindow.define(\"DojoAPI\", [], function() { return window.DojoAPI; });\n}\n", "export class DojoAPIWs {\n\tconstructor(path=\"/rpc/DojoAPI/json/ws\", server=\"\") {\n\t\tif (\"\"== server) {\n\t\t\tserver = \"ws\" +\n\t\t\t\t (\"https:\" == document.location.protocol ? \"s\" : \"\") +\n\t\t\t\t \"://\" +\n\t\t\t\t document.location.host\n\t\t}\n\t\tthis._id = 0;\n\t\tthis.url = server+path;\n\t\tthis.live = {};\n\t\tthis.queue = [];\n\t\tthis.setRPCErrorHandler(null);\n\t\tthis.startWs();\n\t}\t\n\tsetRPCErrorHandler(_errorHandler=null) {\n\t\tthis._errorHandler = _errorHandler;\n\t}\n\t_reject (reject,err) {\n\t\tif (null!=this._errorHandler) {\n\t\t\tthis._errorHandler(err);\n\t\t}\n\t\treject(err);\n\t\treturn;\n\t}\n\tstartWs() {\n\t\tthis.ws = new WebSocket(this.url);\n\t\tthis.ws.onmessage = (evt)=> {\n\t\t\tlet log = console.error ? console.error : console.log;\n\t\t\tlet res = false;\n\t\t\ttry {\n\t\t\t\tres = JSON.parse(evt.data);\n\t\t\t} catch (err) {\n\t\t\t\tlog(`Failed to parse JSON response:`, evt.data);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (undefined == res || undefined==res.id) {\n\t\t\t\tlog(`Failed to parse response: ${evt.data}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet promise = this.live[res.id];\n\t\t\tif (undefined == promise) {\n\t\t\t\tlog(`Failed to find promise for ${evt.data}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelete this.live[res.id];\n\t\t\tif (null!=res.error) {\n\t\t\t\tthis._reject(promise.reject, res.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (null!=res.result) {\n\t\t\t\tpromise.resolve(res.result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpromise.resolve(null);\n\t\t};\n\t\tthis.ws.onerror = (err)=> {\n\t\t\tconsole.error(\"ERROR on websocket:\", err);\n\t\t};\n\t\tthis.ws.onopen = (evt)=> {\n\t\t\tconsole.log(\"Connected websocket\");\n\t\t\tfor (let q of this.queue) {\n\t\t\t\tthis.ws.send(q);\n\t\t\t}\n\t\t\tconsole.log(`Emptied queue of ${this.queue.length} queued messages`);\n\t\t\tthis.queue = [];\n\t\t};\n\t\tthis.ws.onclose = (evt)=> {\n\t\t\tconsole.log(\"Websocket closed - attempting reconnect in 1s\");\n\t\t\tsetTimeout( ()=> this.startWs(), 1000 );\n\t\t}\n\t}\n\t_rpc(method, params) {\n\t\tlet id = this._id++;\n\t\t// params comes in as an 'arguments' object, so we need to convert\n\t\t// it to an array\n\t\tparams = Array.prototype.slice.call(params);\n\t\t// let p = [];\n\t\t// for (let i=0; i {\n\t\t\tthis.live[id].resolve = resolve;\n\t\t\tthis.live[id].reject = reject;\n\t\t\tif (1==this.ws.readyState) {\n\t\t\t\tthis.ws.send(data);\n\t\t\t} else {\n\t\t\t\tthis.queue.push(data);\n\t\t\t}\n\t\t});\n\t}\n\n\t\n\tError () {\n\t\treturn this._rpc(\"Error\", arguments );\n\t}\n\t\n\tLoginUser (emailOrMobile,password) {\n\t\treturn this._rpc(\"LoginUser\", arguments );\n\t}\n\t\n\tLogout () {\n\t\treturn this._rpc(\"Logout\", arguments );\n\t}\n\t\n\tStudentResetPasswordByEmailOrMobile (emailOrMobile) {\n\t\treturn this._rpc(\"StudentResetPasswordByEmailOrMobile\", arguments );\n\t}\n\t\n\tStudentRegisterByEmailOrMobile (emailOrMobile) {\n\t\treturn this._rpc(\"StudentRegisterByEmailOrMobile\", arguments );\n\t}\n\t\n\tNewDojo (name,parentId,offset) {\n\t\treturn this._rpc(\"NewDojo\", arguments );\n\t}\n\t\n\tGetDojo (id) {\n\t\treturn this._rpc(\"GetDojo\", arguments );\n\t}\n\t\n\tSaveDojo (d) {\n\t\treturn this._rpc(\"SaveDojo\", arguments );\n\t}\n\t\n\tDeleteDojo (dojo) {\n\t\treturn this._rpc(\"DeleteDojo\", arguments );\n\t}\n\t\n\tDeleteClassRecord (classRecordId) {\n\t\treturn this._rpc(\"DeleteClassRecord\", arguments );\n\t}\n\t\n\tDojosForUser () {\n\t\treturn this._rpc(\"DojosForUser\", arguments );\n\t}\n\t\n\tClassTypes () {\n\t\treturn this._rpc(\"ClassTypes\", arguments );\n\t}\n\t\n\tSetClassRecordNotes (classRecordId,notes) {\n\t\treturn this._rpc(\"SetClassRecordNotes\", arguments );\n\t}\n\t\n\tSetClassRecordTitle (classRecordId,title) {\n\t\treturn this._rpc(\"SetClassRecordTitle\", arguments );\n\t}\n\t\n\tSetClassRecordType (classRecordId,classTypeId) {\n\t\treturn this._rpc(\"SetClassRecordType\", arguments );\n\t}\n\t\n\tSetClassRecordTimes (crId,dateString,startString,endString) {\n\t\treturn this._rpc(\"SetClassRecordTimes\", arguments );\n\t}\n\t\n\tStudentAttendanceForClassRecord (crId) {\n\t\treturn this._rpc(\"StudentAttendanceForClassRecord\", arguments );\n\t}\n\t\n\tStudentAbsenceForClassRecord (crId) {\n\t\treturn this._rpc(\"StudentAbsenceForClassRecord\", arguments );\n\t}\n\t\n\tStudentsForClassRecord (crId) {\n\t\treturn this._rpc(\"StudentsForClassRecord\", arguments );\n\t}\n\t\n\tAddStudentToClassRecord (classRecordId,studentId,attendanceTypeId) {\n\t\treturn this._rpc(\"AddStudentToClassRecord\", arguments );\n\t}\n\t\n\tRemoveStudentFromClassRecord (classRecordId,studentId) {\n\t\treturn this._rpc(\"RemoveStudentFromClassRecord\", arguments );\n\t}\n\t\n\tSetStudentClassRecordAttendanceType (classRecordId,studentId,attendanceTypeId) {\n\t\treturn this._rpc(\"SetStudentClassRecordAttendanceType\", arguments );\n\t}\n\t\n\tAttendanceTypes () {\n\t\treturn this._rpc(\"AttendanceTypes\", arguments );\n\t}\n\t\n\tAttendanceTypesWithAbsence () {\n\t\treturn this._rpc(\"AttendanceTypesWithAbsence\", arguments );\n\t}\n\t\n\tLoadTechniques () {\n\t\treturn this._rpc(\"LoadTechniques\", arguments );\n\t}\n\t\n\tTechniqueSearch (classRecordId,techniqueSearch) {\n\t\treturn this._rpc(\"TechniqueSearch\", arguments );\n\t}\n\t\n\tAddTechniqueToClassRecord (classRecordId,technique) {\n\t\treturn this._rpc(\"AddTechniqueToClassRecord\", arguments );\n\t}\n\t\n\tRemoveTechniqueFromClassRecord (classRecordId,technique) {\n\t\treturn this._rpc(\"RemoveTechniqueFromClassRecord\", arguments );\n\t}\n\t\n\tLoadClassRecordTechniques (classRecordId) {\n\t\treturn this._rpc(\"LoadClassRecordTechniques\", arguments );\n\t}\n\t\n\tClassRecordSummaryForPeriod (dojoId,start,end) {\n\t\treturn this._rpc(\"ClassRecordSummaryForPeriod\", arguments );\n\t}\n\t\n\tClassRecordSummarySearch (search) {\n\t\treturn this._rpc(\"ClassRecordSummarySearch\", arguments );\n\t}\n\t\n\tDojoAttendanceByDate (dojoId) {\n\t\treturn this._rpc(\"DojoAttendanceByDate\", arguments );\n\t}\n\t\n\tStudentAttendanceByDate (studentId) {\n\t\treturn this._rpc(\"StudentAttendanceByDate\", arguments );\n\t}\n\t\n\tDeleteAspect (aspectId) {\n\t\treturn this._rpc(\"DeleteAspect\", arguments );\n\t}\n\t\n\tLoadTechniquesForArtLimited (artId,from,to) {\n\t\treturn this._rpc(\"LoadTechniquesForArtLimited\", arguments );\n\t}\n\t\n\tLoadTechniquesForArt (artId) {\n\t\treturn this._rpc(\"LoadTechniquesForArt\", arguments );\n\t}\n\t\n\tDeleteTechnique (techniqueId) {\n\t\treturn this._rpc(\"DeleteTechnique\", arguments );\n\t}\n\t\n\tSaveTechnique (t) {\n\t\treturn this._rpc(\"SaveTechnique\", arguments );\n\t}\n\t\n\tDeleteStudent (dojoId,studentId) {\n\t\treturn this._rpc(\"DeleteStudent\", arguments );\n\t}\n\t\n\tFormsForDojo (dojoId) {\n\t\treturn this._rpc(\"FormsForDojo\", arguments );\n\t}\n\t\n\tFormsAndInputsForDojoRefType (dojoId,refType,refId) {\n\t\treturn this._rpc(\"FormsAndInputsForDojoRefType\", arguments );\n\t}\n\t\n\tFormsForDojoRefType (dojoId,refType) {\n\t\treturn this._rpc(\"FormsForDojoRefType\", arguments );\n\t}\n\t\n\tSaveForm (f) {\n\t\treturn this._rpc(\"SaveForm\", arguments );\n\t}\n\t\n\tLoadFormInput (formId,refId) {\n\t\treturn this._rpc(\"LoadFormInput\", arguments );\n\t}\n\t\n\tSaveFormInput (fi) {\n\t\treturn this._rpc(\"SaveFormInput\", arguments );\n\t}\n\t\n\tDeleteForm (formId) {\n\t\treturn this._rpc(\"DeleteForm\", arguments );\n\t}\n\t\n\tSendShortMessage (toIds,txt) {\n\t\treturn this._rpc(\"SendShortMessage\", arguments );\n\t}\n\t\n\tSendEmailMessage (toIds,title,text) {\n\t\treturn this._rpc(\"SendEmailMessage\", arguments );\n\t}\n\t\n\tStudentById (studentId) {\n\t\treturn this._rpc(\"StudentById\", arguments );\n\t}\n\t\n\tStudentsForDojo (dojoId) {\n\t\treturn this._rpc(\"StudentsForDojo\", arguments );\n\t}\n\t\n\tMergeTechniques (fromId,toId) {\n\t\treturn this._rpc(\"MergeTechniques\", arguments );\n\t}\n\t\n\tStudentAttendance (studentId,dojoId,dates) {\n\t\treturn this._rpc(\"StudentAttendance\", arguments );\n\t}\n\t\n\tStudentAttendanceSearch (sas) {\n\t\treturn this._rpc(\"StudentAttendanceSearch\", arguments );\n\t}\n\t\n\tVersion () {\n\t\treturn this._rpc(\"Version\", arguments );\n\t}\n\t\n\n\tflatten(callback, context=null) {\n\t\treturn function(argsArray) {\n\t\t\tcallback.apply(context, argsArray);\n\t\t}\n\t}\n}\n\n// Define the class in the window and make AMD compatible\nwindow.DojoAPIWs = DojoAPIWs;\nif ((\"function\" == typeof window.define) && (window.define.amd)) {\n\twindow.define(\"DojoAPIWs\", [], function() { return window.DojoAPIWs; });\n}\n", "import {DojoTemplates} from './DojoTemplates.js';\n\n\n// panelWrapper provides a utility class for hiding/showing a tab panel\n// and wrapping the element that will be the panel.\nclass panelWrapper {\n\tconstructor(el) {\n\t\tthis.el = el;\n\t\tthis.cacheDisplay = false;\n\t}\n\thide() {\n\t\tif (`none`!=this.el.style.display) {\n\t\t\tthis.cacheDisplay = this.el.style.display;\n\t\t}\n\t\tthis.el.style.display = `none`;\n\t}\n\tshow() {\n\t\tconsole.log(`showing panel ${this.title()}, setting display = `, this.cacheDisplay);\n\n\t\tthis.el.style.display = this.cacheDisplay ? this.cacheDisplay : \"inherit\";\n\t\tthis.cacheDisplay = false;\n\t}\n\ttitle() {\n\t\treturn this.el.getAttribute(`tab-title`);\n\t}\n\ttabId() {\n\t\treturn this.el.getAttribute(`tab-id`);\n\t}\n}\n\nclass tabHeader {\n\tconstructor(tabs, append, wrapper) {\n\t\tthis.tabs = tabs;\n\t\tthis.wrapper = wrapper;\n\t\tthis.span = document.createElement(`span`);\n\t\tthis.span.innerText = wrapper.title();\n\t\tthis.span.addEventListener(`click`, (evt)=>{\n\t\t\tevt.preventDefault();\n\t\t\tthis.select();\n\t\t});\n\t\tappend(this.span);\n\t\ttabs.addEventListener(`dojo-tab-selected`, evt=>{\n\t\t\tif (evt.detail == this.wrapper) {\n\t\t\t\tthis.show();\n\t\t\t\tthis.wrapper.show();\n\t\t\t} else {\n\t\t\t\tthis.hide();\n\t\t\t\tthis.wrapper.hide();\n\t\t\t}\n\t\t});\n\t}\n\t// hide is called when the panel is hidden\n\thide() {\n\t\tthis.span.classList.remove(`selected`);\n\t}\n\t// show is called when the panel is to be shown\n\tshow() {\n\t\tthis.span.classList.add(`selected`);\n\t}\n\tselect() {\n\t\tthis.tabs.dispatchEvent(new CustomEvent(`dojo-tab-selected`, {\n\t\t\tcomposed: true,\n\t\t\tbubbles: false,\n\t\t\tcancelable: false,\n\t\t\tdetail: this.wrapper\n\t\t}));\t\t\n\t}\n\tsetTitle(title) {\n\t\tthis.span.innerText = title;\n\t}\n\tsetTitleHTML(titleHtml) {\n\t\tthis.span.innerHTML = titleHtml;\n\t}\n\ttabId() {\n\t\treturn this.wrapper.tabId();\n\t}\n}\n\n\n/**\n * DojoTabs provides a tab frame for users to click between tabs on a page.\n */\nexport class DojoTabs extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates('DojoTabs');\n\n\t\tthis.attachShadow({mode:'open'});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t\tthis.tabHeaders = {};\n\t\tthis.addEventListener(`dojo-tab-title-set`, evt=>{\n\t\t\tlet header = this.tabHeaders[evt.detail.tab];\n\t\t\tif (!header) {\n\t\t\t\tconsole.error(`No tab header found for id ${evt.detail.tab}`);\n\t\t\t} else {\n\t\t\t\theader.setTitle(evt.detail.title);\n\t\t\t}\n\t\t});\n\t}\n\ttabClicked(tab, data, span) {\n\t\t// console.log(`TAB clicked: `, tab, span);\n\t}\n\tconnectedCallback() {\n\t\t// when we are constructed, we won't have child elements.\n\t\t// SO if we have no child elements, we ask to be re-notified\n\t\t// when the DOMContentLoaded event triggers, at which point\n\t\t// our child elements will be present.\n\t\tif (!this.firstElementChild) {\n\t\t\tdocument.addEventListener(`DOMContentLoaded`, ()=>this.connectedCallback());\n\t\t\treturn;\n\n\t\t}\n\t\tlet firstTab = null;\n\t\tfor (let e = this.firstElementChild; e; e=e.nextElementSibling) {\n\t\t\tlet header = this.addPanel(e, false, false);\n\t\t\tif (null==firstTab || e.hasAttribute(`selected`)) firstTab = header;\n\t\t\tthis.tabHeaders[header.tabId()] = header\n\t\t}\n\t\tif (firstTab) firstTab.select();\n\t}\n\taddPanel(tab, title=false, appendPanel=false) {\n\t\t// console.log(`addPanel title=${title}, appendPanel=${appendPanel}`);\n\t\tif (!title) title=tab.getAttribute(`tab-title`);\n\t\telse tab.setAttribute(`tab-title`, title);\n\t\tlet wrap = new panelWrapper(tab);\n\t\tlet header = new tabHeader(this, el=>{\n\t\t\t// console.log(`adding header to tabs: `, el, `, header = `, this.$.header, `, this=`, this);;\n\t\t\tthis.$.header.appendChild(el);\n\t\t}, wrap);\n\t\tif (appendPanel) {\n\t\t\t// console.log(`adding tab to slot`, tab, `, `, this);\n\t\t\tthis.appendChild(tab);\n\t\t}\n\t\tthis.tabHeaders[header.tabId()] = header;\n\t\treturn header;\n\t}\n}\ncustomElements.define('dojo-tabs', DojoTabs);", "import {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\n\nexport class MenuItem extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`MenuItem`);\n\t\tEventify(this.el, this);\n\t\tthis._configured = false;\n\t}\n\tconnectedCallback() {\n\t\tif (!this.firstElementChild) {\n\t\t\tdocument.addEventListener(`DOMContentLoaded`, evt=>this.connectedCallback());\n\t\t\treturn;\n\t\t}\n\t\t/** This can be called twice, not sure why... so we prevent ourselves being run twice with a flag */\n\t\tif (this._configured) return;\n\t\tthis._configured = true;\n\t\tthis.$.title.innerHTML = this.getAttribute(`title`);\n\t\t// transfer all our children to children of this.el\n\t\twhile (this.firstElementChild) {\n\t\t\tthis.$.dropdown.appendChild(this.firstElementChild);\n\t\t}\n\t\tthis.appendChild(this.el);\n\t}\n\tclick(evt) {\n\t\tevt.preventDefault();\n\t\tthis.el.classList.toggle('show');\n\t}\n}\n\nexport class TopMenu extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\t[this.el, this.$] = DojoTemplates(`TopMenu`);\n\t\tthis.attachShadow({mode:'open'});\n\t\tthis.shadowRoot.appendChild(this.el);\n\t}\n\tconnectedCallback() {\n\t\tif (!this.firstElementChild) {\n\t\t\tdocument.addEventListener(`DOMContentLoaded`, evt=>this.connectedCallback());\n\t\t\treturn;\n\t\t}\n\t\twhile (this.firstElementChild) {\n\t\t\tthis.shadowRoot.appendChild(this.firstElementChild);\n\t\t}\n\t}\n}\n\ncustomElements.define(`dojo-top-menu`, TopMenu);\ncustomElements.define(`dojo-menu-item`, MenuItem);", "// dojo is the internal private class that\n// provides a singleton instance of the Dojo manager class\nlet _dojoDeshi = null;\n\nimport {AutoComplete} from './AutoComplete.js';\nimport {ClassRecordEditor} from './ClassRecordEditor.js';\nimport {ClassRecordSummaryTable} from './ClassRecordSummaryTable.js';\nimport {ClassRecordSummaryTableController} from './ClassRecordSummaryTableController.js';\nimport {FormsTabContainer} from './FormsTabContainer.js';\nimport {FormsTabPanel} from './FormsTabPanel.js';\nimport {LoginForm} from './LoginForm.js';\nimport {StudentListController} from './StudentListController.js';\nimport {TechniquesAutoComplete} from './TechniquesAutoComplete.js';\nimport {DojoPopup} from './DojoPopup.js';\n\nimport {DataComponents} from './DataComponents.js';\nimport {DojoMenu} from './DojoMenu.js';\nimport {DojoAPIHttp} from './DojoAPI.js';\nimport {DojoAPIWs} from './DojoAPIWs.js';\n\nimport {DojoTabs} from './DojoTabs.js';\nimport {TopMenu} from './TopMenu.js';\n\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nimport {RPCClick} from './RPCClick.js';\n\nexport class DojoDeshi {\n\tconstructor() {\n\t\tif (!_dojoDeshi) {\n\t\t\t_dojoDeshi = this;\n\t\t}\n\t\t// console.log(\"Document.location.protocol = \", document.location.protocol);\n\t\tconsole.log(`DojoAPIHttp = `, DojoAPIHttp);\n\t\tthis._rpc = new DojoAPIHttp();\n\t\tthis._rpcWs = new DojoAPIWs();\n\n\t\t// $(document).foundation();\n\t\t// $('.menu-link').bigSlide({'easyClose':true});\n\t\t// new LeftNavController(document.getElementById('left-nav'));\n\n\t\tDataComponents(document);\n\n\t\treturn _dojoDeshi;\n\t}\n\tRPCHttp() {\n\t\treturn this._rpc;\n\t}\n\tRPC() {\n\t\treturn this._rpcWs;\n\t}\t\n\tstatic instance() {\n\t\tif (!_dojoDeshi) {\n\t\t\t_dojoDeshi = new DojoDeshi();\n\t\t}\n\t\treturn _dojoDeshi;\n\t}\n}\n\nwindow.DojoDeshi = DojoDeshi;\n\ndocument.addEventListener('DOMContentLoaded', function() {\n\tDojoDeshi.instance();\n});\n", "import {DojoDeshi} from './DojoDeshi.js';\nimport {DojoTemplates} from './DojoTemplates.js';\nimport {Eventify} from './Eventify.js';\nimport signals from './lib/signals.js';\n\nexport function RPCClick(el) {\n\tif (null==el) return;\n\tconsole.log(\"el = \", el);\n\tlet click = function(evt) {\n\t\t// Find the data-rpc containing parent\n\t\tlet el = evt.target;\n\t\twhile ((null!=el) && (!el.hasAttribute('data-rpc'))) {\n\t\t\tel = el.parentNode;\n\t\t}\n\t\tif (null==el) {\n\t\t\t// No parent node found, which shouldn't happen...\n\t\t\tconsole.error(`NO PARENT NODE found looking for data-rpc`);\n\t\t\treturn false;\n\t\t}\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\n\t\tconsole.log(`JSON = X${el.getAttribute('data-rpc')}X`);\n\t\tlet js = JSON.parse(el.getAttribute('data-rpc'));\n\n\t\tconsole.log(\"GOT json info \", js);\n\t\tlet gotoF = (function(url) {\n\t\t\treturn function() {\n\t\t\t\tif ('undefined'!=typeof url) {\n\t\t\t\t\tdocument.location = url;\n\t\t\t\t}\n\t\t\t}\n\t\t})(js.url);\n\t\t// Will throw syntax error on failure\n\t\tif (\"undefined\" != typeof js.confirm) {\n\t\t\tif (!confirm(js.confirm)) return true;\n\t\t}\n\t\tif (\"undefined\" == typeof js.method) {\n\t\t\tdocument.location = js.url;\n\t\t\treturn true;\n\t\t}\n\t\tlet rpc = DojoDeshi.instance().RPC();\n\t\tconsole.log(`rpc = `, rpc, ` and js.method = `, js.method);\n\t\t// let f = rpc[js.method];\n\t\trpc[js.method](...js.params).then(\n\t\t\tfunction(res) {\n\t\t\t\tgotoF();\n\t\t\t},\n\t\t\tfunction(err) {\n\t\t\t\tconsole.error(`ERROR on RPC ${js.method}: `, err);\n\t\t\t\talert(`ERROR on RPC ${js.method}`);\n\t\t\t}\n\t\t);\n\t}\n\tif (el.hasAttribute('data-rpc')) {\n\t\tel.addEventListener('click', click);\n\t}\n\tfor (let e of el.querySelectorAll('[data-rpc]')) {\n\t\tconsole.log(\"Binding RPC to \", e);\n\t\te.addEventListener('click', click);\n\t}\n}\n\nwindow.RPCClick = RPCClick;"], "mappings": "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", "names": ["signals", "el", "object", "import_signals", "signals", "DojoDeshi", "import_signals", "signals", "import_signals", "signals", "DojoDeshi", "DojoDeshi", "import_signals", "import_signals", "import_signals", "DojoDeshi", "import_signals", "import_signals", "dateField", "dayDiv", "DojoDeshi", "DojoDeshi", "import_signals", "import_signals", "import_signals", "DojoDeshi", "res", "import_signals", "import_signals", "import_signals", "import_signals", "signals", "FormsTabPanel", "import_signals", "DojoDeshi", "import_signals", "import_signals", "import_signals", "signals", "signals", "DojoDeshi", "import_signals", "import_signals", "import_signals", "DojoDeshi", "res", "import_signals", "import_signals", "DojoDeshi", "import_signals", "DojoDeshi", "import_signals", "import_signals", "import_signals", "el", "DojoDeshi", "DojoDeshi"] }