1 |
efrain |
1 |
{"version":3,"file":"dash_instance.min.js","sources":["../src/dash_instance.js"],"sourcesContent":["define(['jquery', 'jqueryui', 'core/log', 'core/ajax', 'core/notification', 'core/modal_events',\n 'block_dash/preferences_modal', 'block_dash/datepicker', 'block_dash/select2', 'core/fragment', 'core/templates'],\n function($, UI, Log, Ajax, Notification, ModalEvents, PreferencesModal, DatePicker, Select2, Fragment, Templates) {\n\n var DashInstance = function(root, blockInstanceId, blockContextid, editing, istotara, pagelayout, pagecontext) {\n this.root = $(root);\n this.blockInstanceId = blockInstanceId;\n this.blockContextid = blockContextid;\n this.currentPage = 0;\n this.blockPreferencesModal = null;\n this.editing = editing;\n this.sortField = null;\n this.sortDirections = {};\n this.isTotara = istotara;\n this.pageLayout = pagelayout;\n this.pageContext = pagecontext;\n this.init();\n };\n\n DashInstance.prototype.BLOCK_CONTENT_SELECTOR = '.dash-block-content';\n DashInstance.prototype.FILTER_FORM_SELECTOR = '.filter-form';\n\n DashInstance.prototype.init = function() {\n\n Log.debug('Initializing dash instance', this);\n\n // Select datasource for configuration.\n if (this.getRoot().find('.dash-configuration-form').length > 0) {\n\n this.getRoot().find('.dash-configuration-form').removeClass('hide');\n this.getRoot()\n .find('[data-target=\"subsource-config\"] [type=radio], [name=\"config_data_source_idnumber\"]')\n .addClass('norefresh');\n\n // Hide the preference link for others.\n this.getRoot().find('.dash-edit-preferences').hide();\n\n // Select the parent datasource for the sub config.\n this.getRoot().on('change', '[data-target=\"subsource-config\"] [type=radio]', function(e) {\n var subConfig;\n if (e.target.closest('[data-target=\"subsource-config\"]')) {\n subConfig = e.target.closest('[data-target=\"subsource-config\"]');\n if (subConfig.parentNode !== null) {\n var dataSource = subConfig.parentNode.querySelector('[name=\"config_data_source_idnumber\"]');\n dataSource.click(); // = true;\n }\n }\n }.bind(this));\n\n this.getRoot().find('.dash-configuration-form [name=\"config_data_source_idnumber\"]').on('change', function() {\n\n var dataSource = this.getRoot().find('.dash-configuration-form');\n var formData = $(dataSource).find('form').serialize();\n\n // Now we can continue...\n Ajax.call([{\n methodname: 'block_dash_submit_preferences_form',\n args: {\n contextid: this.blockContextid,\n jsonformdata: JSON.stringify(formData)\n },\n done: function() {\n // Hide the preference link for others.\n this.getRoot().find('.dash-edit-preferences').show();\n this.refresh();\n }.bind(this),\n }])[0].fail(Notification.exception);\n }.bind(this));\n\n }\n\n this.initDatePickers();\n this.initSelect2();\n\n if (this.editing) {\n this.blockPreferencesModal = new PreferencesModal(this.getRoot().find('.dash-edit-preferences'),\n this.blockContextid, function() {\n // Preferences changed, go back to first page.\n this.currentPage = 0;\n this.refresh();\n }.bind(this));\n }\n this.getRoot().on('change', 'select:not(.norefresh), input:not(.select2-search__field, .norefresh)',\n function(e) {\n e.preventDefault();\n\n Log.debug('Submitting filter form');\n Log.debug(e);\n Log.debug($(e.target).serializeArray());\n\n // Filter results, go back to first page.\n this.currentPage = 0;\n this.refresh();\n }.bind(this));\n\n this.getRoot().on('submit', '.downloadreport .reportoption form', function(e) {\n e.preventDefault();\n let params = new URLSearchParams($(e.target).serialize());\n let sortDirection = null;\n if (this.sortField && this.sortDirections.hasOwnProperty(this.sortField)) {\n sortDirection = this.sortDirections[this.sortField];\n }\n var args = {\n 'download' : params.get('download'),\n \"block_instance_id\": this.blockInstanceId,\n \"filter_form_data\": JSON.stringify(this.getFilterForm().serializeArray()),\n \"page\": this.currentPage,\n \"sort_field\": this.sortField,\n \"sort_direction\": sortDirection,\n };\n let url = M.cfg.wwwroot + '/blocks/dash/download.php';\n // Create a new form element.\n const form = $('<form>', {\n method: 'post',\n action: url,\n target: '_self',\n });\n\n // Add input fields with your data\n form.append($('<input>', { type: 'hidden', name: 'download', value: args.download }));\n form.append($('<input>', { type: 'hidden', name: 'block_instance_id', value: args.block_instance_id }));\n form.append($('<input>', { type: 'hidden', name: 'filter_form_data', value: args.filter_form_data }));\n form.append($('<input>', { type: 'hidden', name: 'page', value: args.page }));\n form.append($('<input>', { type: 'hidden', name: 'sort_field', value: args.sort_field }));\n form.append($('<input>', { type: 'hidden', name: 'sort_direction', value: args.sort_direction }));\n\n // Append the form to the body and submit it\n form.appendTo('body').submit();\n\n }.bind(this));\n\n // Adding support for tab filters.\n this.getRoot().on('click', 'button.tab-filter', function(e) {\n e.preventDefault();\n var elem = $(e.currentTarget);\n\n var value = $(e.currentTarget).attr('data-value');\n var select = $(e.currentTarget).parents('.sort-group').find('select');\n var prevVal = select.val();\n // Remove checked is already checked.\n if (elem.hasClass('is-checked')) {\n elem.removeClass('is-checked');\n elem.removeClass('btn-primary');\n if (select.prop('multiple')) {\n var index = prevVal.indexOf(value.toString());\n if (index > -1) {\n prevVal.splice(index, 1);\n value = prevVal;\n }\n }\n } else {\n elem.addClass('is-checked');\n elem.addClass('btn-primary');\n if (select.prop('multiple')) {\n prevVal.push(value);\n value = prevVal;\n }\n }\n // Set value for select.\n select.val(value);\n // Filter results, go back to first page.\n this.currentPage = 0;\n this.refresh();\n }.bind(this));\n\n this.getBlockContentArea().on('click', '.page-link', function(e) {\n e.preventDefault();\n this.currentPage = $(e.target).data('page');\n this.refresh();\n }.bind(this));\n\n this.getBlockContentArea().on('click', '.dash-sort', function(e) {\n const $target = $(e.target);\n this.sortField = $target.data('sort');\n\n // Set sorting to asc by default.\n if (!this.sortDirections.hasOwnProperty(this.sortField)) {\n this.sortDirections[this.sortField] = 'asc';\n } else {\n // Toggle sort direction on field.\n this.sortDirections[this.sortField] = this.sortDirections[this.sortField] === 'asc' ? 'desc' : 'asc';\n }\n this.refresh();\n }.bind(this));\n\n if (this.isTotara) {\n this.setDynamicTable();\n }\n };\n\n /**\n * Get the root element of this dash instance.\n *\n * @method getRoot\n * @return {object} jQuery object\n */\n DashInstance.prototype.getRoot = function() {\n return this.root;\n };\n\n /**\n * Get the content element of this dash instance.\n *\n * @method getRoot\n * @return {object} jQuery object\n */\n DashInstance.prototype.getBlockContentArea = function() {\n return this.getRoot().find(this.BLOCK_CONTENT_SELECTOR);\n };\n\n /**\n * Get filter form element.\n *\n * @returns {object} jQuery object\n */\n DashInstance.prototype.getFilterForm = function() {\n return this.getRoot().find(this.FILTER_FORM_SELECTOR);\n };\n\n DashInstance.prototype.getBlockContent = function() {\n let sortDirection = null;\n if (this.sortField && this.sortDirections.hasOwnProperty(this.sortField)) {\n sortDirection = this.sortDirections[this.sortField];\n }\n\n var request = {\n methodname: 'block_dash_get_block_content',\n args: {\n \"block_instance_id\": this.blockInstanceId,\n \"filter_form_data\": JSON.stringify(this.getFilterForm().serializeArray()),\n \"page\": this.currentPage,\n \"sort_field\": this.sortField,\n \"sort_direction\": sortDirection,\n \"pagelayout\" : this.pageLayout,\n \"pagecontext\" : this.pageContext,\n }\n };\n return Ajax.call([request])[0];\n };\n\n DashInstance.prototype.refresh = function() {\n this.getBlockContentArea().css('opacity', 0.5);\n this.getBlockContent()\n .then(function(response) {\n this.getBlockContentArea().html(response.html);\n this.getBlockContentArea().css('opacity', 1);\n this.initDatePickers();\n this.initSelect2();\n if (response.scripts) {\n Templates.runTemplateJS($(response.scripts).html() || response.scripts);\n }\n }.bind(this))\n .catch(Notification.exception);\n };\n\n DashInstance.prototype.initDatePickers = function() {\n this.getRoot().find('.datepicker').datepicker2({\n autoclose: true,\n format: \"dd/mm/yyyy\"\n });\n };\n\n DashInstance.prototype.initSelect2 = function() {\n this.getRoot().find('.select2').each(function(index, element) {\n let placeholder = null;\n if ($(element).find(\"option[value='-1']\")) {\n placeholder = {\n id: '-1', // The value of the option.\n text: $(element).find(\"option[value='-1']\").text()\n };\n }\n $(element).select2({\n dropdownParent: this.getRoot(),\n allowClear: true,\n theme: 'bootstrap4',\n placeholder: placeholder\n }).on('select2:unselecting', function() {\n $(this).data('unselecting', true);\n }).on('select2:opening', function(e) {\n if ($(this).data('unselecting')) {\n $(this).removeData('unselecting');\n e.preventDefault();\n }\n });\n }.bind(this));\n };\n\n DashInstance.prototype.setDynamicTable = function() {\n\n $('body').delegate('[data-table-dynamic=\"true\"] thead th a', 'click', function(e) {\n e.preventDefault();\n updateTable($(this));\n });\n\n $('body').delegate('.modal-body .paging a', 'click', function(e) {\n e.preventDefault();\n updateTable($(this));\n });\n\n var updateTable = function(element) {\n var table = element.parents('.modal-body').find('table');\n\n var href = element.attr('href');\n var params = new URL(href).searchParams;\n var page = params.get('page');\n var sortfield = params.get('tsort');\n if (sortfield == '') {\n sortfield = table.data('table-sort');\n }\n\n var tablehandler = table.data('table-handler');\n var filter = table.data('table-filter');\n var uniqueid = table.data('table-uniqueid');\n var context = table.data('table-context');\n\n var data = {\n handler: tablehandler,\n filter: filter,\n uniqueid: uniqueid,\n sort: sortfield,\n page: page\n };\n\n Fragment.loadFragment('block_dash', 'loadtable', context, data).then((html, js) => {\n $('.modal-body').html(html);\n Templates.runTemplateJS(js);\n return html;\n }).catch(Notification.exception);\n };\n };\n\n return DashInstance;\n });\n"],"names":["define","$","UI","Log","Ajax","Notification","ModalEvents","PreferencesModal","DatePicker","Select2","Fragment","Templates","DashInstance","root","blockInstanceId","blockContextid","editing","istotara","pagelayout","pagecontext","currentPage","blockPreferencesModal","sortField","sortDirections","isTotara","pageLayout","pageContext","init","prototype","BLOCK_CONTENT_SELECTOR","FILTER_FORM_SELECTOR","debug","this","getRoot","find","length","removeClass","addClass","hide","on","e","subConfig","target","closest","parentNode","querySelector","click","bind","dataSource","formData","serialize","call","methodname","args","contextid","jsonformdata","JSON","stringify","done","show","refresh","fail","exception","initDatePickers","initSelect2","preventDefault","serializeArray","params","URLSearchParams","sortDirection","hasOwnProperty","get","getFilterForm","url","M","cfg","wwwroot","form","method","action","append","type","name","value","download","block_instance_id","filter_form_data","page","sort_field","sort_direction","appendTo","submit","elem","currentTarget","attr","select","parents","prevVal","val","hasClass","prop","index","indexOf","toString","splice","push","getBlockContentArea","data","$target","setDynamicTable","getBlockContent","request","css","then","response","html","scripts","runTemplateJS","catch","datepicker2","autoclose","format","each","element","placeholder","id","text","select2","dropdownParent","allowClear","theme","removeData","delegate","updateTable","table","href","URL","searchParams","sortfield","tablehandler","filter","uniqueid","context","handler","sort","loadFragment","js"],"mappings":"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"}
|