Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
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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"}