From cc248209fe8f13eef54b468d7e114f600aefcf81 Mon Sep 17 00:00:00 2001 From: Mathew May Date: Mon, 6 May 2024 14:50:53 +0800 Subject: [PATCH] Move templates and JS in dirs --- mod/assign/amd/build/grading_actions.min.js | 11 ----------- mod/assign/amd/build/grading_actions.min.js.map | 1 - mod/assign/amd/build/grading_events.min.js | 11 ----------- mod/assign/amd/build/grading_events.min.js.map | 1 - .../amd/build/grading_form_change_checker.min.js | 11 ----------- .../amd/build/grading_form_change_checker.min.js.map | 1 - mod/assign/amd/build/grading_navigation.min.js | 11 ----------- mod/assign/amd/build/grading_navigation.min.js.map | 1 - .../amd/build/grading_navigation_user_info.min.js | 11 ----------- .../amd/build/grading_navigation_user_info.min.js.map | 1 - mod/assign/amd/build/grading_panel.min.js | 11 ----------- mod/assign/amd/build/grading_panel.min.js.map | 1 - mod/assign/amd/build/grading_review_panel.min.js | 11 ----------- mod/assign/amd/build/grading_review_panel.min.js.map | 1 - mod/assign/amd/build/gradingapp/actions.min.js | 11 +++++++++++ mod/assign/amd/build/gradingapp/actions.min.js.map | 1 + mod/assign/amd/build/gradingapp/events.min.js | 11 +++++++++++ mod/assign/amd/build/gradingapp/events.min.js.map | 1 + .../amd/build/gradingapp/form_change_checker.min.js | 11 +++++++++++ .../build/gradingapp/form_change_checker.min.js.map | 1 + mod/assign/amd/build/gradingapp/navigation.min.js | 11 +++++++++++ mod/assign/amd/build/gradingapp/navigation.min.js.map | 1 + .../amd/build/gradingapp/navigation_user_info.min.js | 11 +++++++++++ .../build/gradingapp/navigation_user_info.min.js.map | 1 + mod/assign/amd/build/gradingapp/panel.min.js | 11 +++++++++++ mod/assign/amd/build/gradingapp/panel.min.js.map | 1 + mod/assign/amd/build/gradingapp/review_panel.min.js | 11 +++++++++++ .../amd/build/gradingapp/review_panel.min.js.map | 1 + .../src/{grading_actions.js => gradingapp/actions.js} | 2 +- .../src/{grading_events.js => gradingapp/events.js} | 0 .../form_change_checker.js} | 0 .../navigation.js} | 2 +- .../navigation_user_info.js} | 6 +++--- .../amd/src/{grading_panel.js => gradingapp/panel.js} | 4 ++-- .../review_panel.js} | 2 +- mod/assign/classes/output/renderer.php | 4 ++-- .../moodle-assignfeedback_editpdf-editor-debug.js | 2 +- .../moodle-assignfeedback_editpdf-editor-min.js | 8 ++++---- .../moodle-assignfeedback_editpdf-editor.js | 2 +- .../feedback/editpdf/yui/src/editor/js/editor.js | 2 +- .../actionmenu.mustache} | 0 .../actions.mustache} | 2 +- .../{ => gradingapp}/attempt_history_chooser.mustache | 0 .../templates/{ => gradingapp}/grading_app.mustache | 10 +++++----- .../list_participant_user_summary.mustache | 0 .../navigation.mustache} | 6 +++--- .../navigation_no_users.mustache} | 0 .../navigation_user_info.mustache} | 2 +- .../navigation_user_selector.mustache} | 0 .../navigation_user_summary.mustache} | 2 +- .../panel.mustache} | 2 +- .../templates/{ => gradingapp}/review_panel.mustache | 0 .../save_in_progress.mustache} | 0 53 files changed, 113 insertions(+), 113 deletions(-) delete mode 100644 mod/assign/amd/build/grading_actions.min.js delete mode 100644 mod/assign/amd/build/grading_actions.min.js.map delete mode 100644 mod/assign/amd/build/grading_events.min.js delete mode 100644 mod/assign/amd/build/grading_events.min.js.map delete mode 100644 mod/assign/amd/build/grading_form_change_checker.min.js delete mode 100644 mod/assign/amd/build/grading_form_change_checker.min.js.map delete mode 100644 mod/assign/amd/build/grading_navigation.min.js delete mode 100644 mod/assign/amd/build/grading_navigation.min.js.map delete mode 100644 mod/assign/amd/build/grading_navigation_user_info.min.js delete mode 100644 mod/assign/amd/build/grading_navigation_user_info.min.js.map delete mode 100644 mod/assign/amd/build/grading_panel.min.js delete mode 100644 mod/assign/amd/build/grading_panel.min.js.map delete mode 100644 mod/assign/amd/build/grading_review_panel.min.js delete mode 100644 mod/assign/amd/build/grading_review_panel.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/actions.min.js create mode 100644 mod/assign/amd/build/gradingapp/actions.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/events.min.js create mode 100644 mod/assign/amd/build/gradingapp/events.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/form_change_checker.min.js create mode 100644 mod/assign/amd/build/gradingapp/form_change_checker.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/navigation.min.js create mode 100644 mod/assign/amd/build/gradingapp/navigation.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/navigation_user_info.min.js create mode 100644 mod/assign/amd/build/gradingapp/navigation_user_info.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/panel.min.js create mode 100644 mod/assign/amd/build/gradingapp/panel.min.js.map create mode 100644 mod/assign/amd/build/gradingapp/review_panel.min.js create mode 100644 mod/assign/amd/build/gradingapp/review_panel.min.js.map rename mod/assign/amd/src/{grading_actions.js => gradingapp/actions.js} (99%) rename mod/assign/amd/src/{grading_events.js => gradingapp/events.js} (100%) rename mod/assign/amd/src/{grading_form_change_checker.js => gradingapp/form_change_checker.js} (100%) rename mod/assign/amd/src/{grading_navigation.js => gradingapp/navigation.js} (99%) rename mod/assign/amd/src/{grading_navigation_user_info.js => gradingapp/navigation_user_info.js} (95%) rename mod/assign/amd/src/{grading_panel.js => gradingapp/panel.js} (99%) rename mod/assign/amd/src/{grading_review_panel.js => gradingapp/review_panel.js} (98%) rename mod/assign/templates/{grading_actionmenu.mustache => gradingapp/actionmenu.mustache} (100%) rename mod/assign/templates/{grading_actions.mustache => gradingapp/actions.mustache} (97%) rename mod/assign/templates/{ => gradingapp}/attempt_history_chooser.mustache (100%) rename mod/assign/templates/{ => gradingapp}/grading_app.mustache (92%) rename mod/assign/templates/{ => gradingapp}/list_participant_user_summary.mustache (100%) rename mod/assign/templates/{grading_navigation.mustache => gradingapp/navigation.mustache} (92%) rename mod/assign/templates/{grading_navigation_no_users.mustache => gradingapp/navigation_no_users.mustache} (100%) rename mod/assign/templates/{grading_navigation_user_info.mustache => gradingapp/navigation_user_info.mustache} (93%) rename mod/assign/templates/{grading_navigation_user_selector.mustache => gradingapp/navigation_user_selector.mustache} (100%) rename mod/assign/templates/{grading_navigation_user_summary.mustache => gradingapp/navigation_user_summary.mustache} (97%) rename mod/assign/templates/{grading_panel.mustache => gradingapp/panel.mustache} (94%) rename mod/assign/templates/{ => gradingapp}/review_panel.mustache (100%) rename mod/assign/templates/{grading_save_in_progress.mustache => gradingapp/save_in_progress.mustache} (100%) diff --git a/mod/assign/amd/build/grading_actions.min.js b/mod/assign/amd/build/grading_actions.min.js deleted file mode 100644 index 381d9e72c178a..0000000000000 --- a/mod/assign/amd/build/grading_actions.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Javascript controller for the "Actions" panel at the bottom of the page. - * - * @module mod_assign/grading_actions - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_actions",["jquery","mod_assign/grading_events"],(function($,GradingEvents){var GradingActions=function(selector){this._regionSelector=selector,this._region=$(selector),this.registerEventListeners()};return GradingActions.prototype._regionSelector=null,GradingActions.prototype._lastUserId=0,GradingActions.prototype._region=null,GradingActions.prototype._showActionsForm=function(event,userid){var form=this._region.find("[data-region=grading-actions-form]");userid!=this._lastUserId&&userid>0&&(this._lastUserId=userid),userid>0?form.removeClass("hide"):form.addClass("hide")},GradingActions.prototype._trigger=function(action){$(document).trigger(action)},GradingActions.prototype.getReviewPanelElement=function(){return $('[data-region="review-panel"]')},GradingActions.prototype.hasReviewPanelElement=function(){return this.getReviewPanelElement().length>0},GradingActions.prototype.getCollapseGradePanelButton=function(){return $('[data-region="grade-actions"] .collapse-grade-panel')},GradingActions.prototype.getCollapseReviewPanelButton=function(){return $('[data-region="grade-actions"] .collapse-review-panel')},GradingActions.prototype.getExpandAllPanelsButton=function(){return $('[data-region="grade-actions"] .collapse-none')},GradingActions.prototype.resetLayoutButtons=function(){this.getCollapseGradePanelButton().removeClass("active"),this.getCollapseReviewPanelButton().removeClass("active"),this.getExpandAllPanelsButton().removeClass("active")},GradingActions.prototype.collapseReviewPanel=function(){$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL),$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),this.resetLayoutButtons(),this.getCollapseReviewPanelButton().addClass("active")},GradingActions.prototype.collapseGradePanel=function(){$(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getCollapseGradePanelButton().addClass("active")},GradingActions.prototype.expandAllPanels=function(){$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getExpandAllPanelsButton().addClass("active")},GradingActions.prototype.registerEventListeners=function(){if(this.hasReviewPanelElement()){var collapseReviewPanelButton=this.getCollapseReviewPanelButton();collapseReviewPanelButton.click(function(e){this.collapseReviewPanel(),e.preventDefault()}.bind(this)),collapseReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.collapseReviewPanel(),e.preventDefault())}.bind(this));var collapseGradePanelButton=this.getCollapseGradePanelButton();collapseGradePanelButton.click(function(e){this.collapseGradePanel(),e.preventDefault()}.bind(this)),collapseGradePanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.collapseGradePanel(),e.preventDefault())}.bind(this));var expandAllPanelsButton=this.getExpandAllPanelsButton();expandAllPanelsButton.click(function(e){this.expandAllPanels(),e.preventDefault()}.bind(this)),expandAllPanelsButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.expandAllPanels(),e.preventDefault())}.bind(this))}$(document).on("user-changed",this._showActionsForm.bind(this)),this._region.find('[name="savechanges"]').on("click",this._trigger.bind(this,"save-changes")),this._region.find('[name="saveandshownext"]').on("click",this._trigger.bind(this,"save-and-show-next")),this._region.find('[name="resetbutton"]').on("click",this._trigger.bind(this,"reset")),this._region.find("form").on("submit",(function(e){e.preventDefault()}))},GradingActions})); - -//# sourceMappingURL=grading_actions.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_actions.min.js.map b/mod/assign/amd/build/grading_actions.min.js.map deleted file mode 100644 index 7af7444562d94..0000000000000 --- a/mod/assign/amd/build/grading_actions.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_actions.min.js","sources":["../src/grading_actions.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Actions\" panel at the bottom of the page.\n *\n * @module mod_assign/grading_actions\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'mod_assign/grading_events'], function($, GradingEvents) {\n\n /**\n * GradingActions class.\n *\n * @class mod_assign/grading_actions\n * @param {String} selector The selector for the page region containing the actions panel.\n */\n var GradingActions = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n\n this.registerEventListeners();\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingActions.prototype._regionSelector = null;\n\n /** @property {Integer} Remember the last user id to prevent unnessecary reloads. */\n GradingActions.prototype._lastUserId = 0;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingActions.prototype._region = null;\n\n /**\n * Show the actions if there is valid user.\n *\n * @method _showActionsForm\n * @private\n * @param {Event} event\n * @param {Integer} userid\n */\n GradingActions.prototype._showActionsForm = function(event, userid) {\n var form = this._region.find('[data-region=grading-actions-form]');\n\n if (userid != this._lastUserId && userid > 0) {\n this._lastUserId = userid;\n }\n if (userid > 0) {\n form.removeClass('hide');\n } else {\n form.addClass('hide');\n }\n\n };\n\n /**\n * Trigger the named action.\n *\n * @method _trigger\n * @private\n * @param {String} action\n */\n GradingActions.prototype._trigger = function(action) {\n $(document).trigger(action);\n };\n\n /**\n * Get the review panel element.\n *\n * @method getReviewPanelElement\n * @return {jQuery}\n */\n GradingActions.prototype.getReviewPanelElement = function() {\n return $('[data-region=\"review-panel\"]');\n };\n\n /**\n * Check if the page has a review panel.\n *\n * @method hasReviewPanelElement\n * @return {bool}\n */\n GradingActions.prototype.hasReviewPanelElement = function() {\n return this.getReviewPanelElement().length > 0;\n };\n\n /**\n * Get the collapse grade panel button.\n *\n * @method getCollapseGradePanelButton\n * @return {jQuery}\n */\n GradingActions.prototype.getCollapseGradePanelButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-grade-panel');\n };\n\n /**\n * Get the collapse review panel button.\n *\n * @method getCollapseReviewPanelButton\n * @return {jQuery}\n */\n GradingActions.prototype.getCollapseReviewPanelButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-review-panel');\n };\n\n /**\n * Get the expand all panels button.\n *\n * @method getExpandAllPanelsButton\n * @return {jQuery}\n */\n GradingActions.prototype.getExpandAllPanelsButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-none');\n };\n\n /**\n * Remove the active state from all layout buttons.\n *\n * @method resetLayoutButtons\n */\n GradingActions.prototype.resetLayoutButtons = function() {\n this.getCollapseGradePanelButton().removeClass('active');\n this.getCollapseReviewPanelButton().removeClass('active');\n this.getExpandAllPanelsButton().removeClass('active');\n };\n\n /**\n * Hide the review panel.\n *\n * @method collapseReviewPanel\n */\n GradingActions.prototype.collapseReviewPanel = function() {\n $(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL);\n $(document).trigger(GradingEvents.EXPAND_GRADE_PANEL);\n this.resetLayoutButtons();\n this.getCollapseReviewPanelButton().addClass('active');\n };\n\n /**\n * Show/Hide the grade panel.\n *\n * @method collapseGradePanel\n */\n GradingActions.prototype.collapseGradePanel = function() {\n $(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL);\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n this.resetLayoutButtons();\n this.getCollapseGradePanelButton().addClass('active');\n };\n\n /**\n * Return the layout to default.\n *\n * @method expandAllPanels\n */\n GradingActions.prototype.expandAllPanels = function() {\n $(document).trigger(GradingEvents.EXPAND_GRADE_PANEL);\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n this.resetLayoutButtons();\n this.getExpandAllPanelsButton().addClass('active');\n };\n\n /**\n * Register event listeners for the grade panel.\n *\n * @method registerEventListeners\n */\n GradingActions.prototype.registerEventListeners = function() {\n // Don't need layout controls if there is no review panel.\n if (this.hasReviewPanelElement()) {\n var collapseReviewPanelButton = this.getCollapseReviewPanelButton();\n collapseReviewPanelButton.click(function(e) {\n this.collapseReviewPanel();\n e.preventDefault();\n }.bind(this));\n\n collapseReviewPanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.collapseReviewPanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var collapseGradePanelButton = this.getCollapseGradePanelButton();\n collapseGradePanelButton.click(function(e) {\n this.collapseGradePanel();\n e.preventDefault();\n }.bind(this));\n\n collapseGradePanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.collapseGradePanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var expandAllPanelsButton = this.getExpandAllPanelsButton();\n expandAllPanelsButton.click(function(e) {\n this.expandAllPanels();\n e.preventDefault();\n }.bind(this));\n\n expandAllPanelsButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.expandAllPanels();\n e.preventDefault();\n }\n }\n }.bind(this));\n }\n\n $(document).on('user-changed', this._showActionsForm.bind(this));\n\n this._region.find('[name=\"savechanges\"]').on('click', this._trigger.bind(this, 'save-changes'));\n this._region.find('[name=\"saveandshownext\"]').on('click', this._trigger.bind(this, 'save-and-show-next'));\n this._region.find('[name=\"resetbutton\"]').on('click', this._trigger.bind(this, 'reset'));\n this._region.find('form').on('submit', function(e) {\n e.preventDefault();\n });\n };\n\n return GradingActions;\n});\n"],"names":["define","$","GradingEvents","GradingActions","selector","_regionSelector","_region","registerEventListeners","prototype","_lastUserId","_showActionsForm","event","userid","form","this","find","removeClass","addClass","_trigger","action","document","trigger","getReviewPanelElement","hasReviewPanelElement","length","getCollapseGradePanelButton","getCollapseReviewPanelButton","getExpandAllPanelsButton","resetLayoutButtons","collapseReviewPanel","COLLAPSE_REVIEW_PANEL","EXPAND_GRADE_PANEL","collapseGradePanel","COLLAPSE_GRADE_PANEL","EXPAND_REVIEW_PANEL","expandAllPanels","collapseReviewPanelButton","click","e","preventDefault","bind","keydown","metaKey","shiftKey","altKey","ctrlKey","keyCode","collapseGradePanelButton","expandAllPanelsButton","on"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_events.min.js b/mod/assign/amd/build/grading_events.min.js deleted file mode 100644 index 609fa5dc81029..0000000000000 --- a/mod/assign/amd/build/grading_events.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Events for the grading interface. - * - * @module mod_assign/grading_events - * @copyright 2016 Ryan Wyllie - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_events",(function(){return{COLLAPSE_REVIEW_PANEL:"grading:collapse-review-panel",EXPAND_REVIEW_PANEL:"grading:expand-review-panel",COLLAPSE_GRADE_PANEL:"grading:collapse-grade-panel",EXPAND_GRADE_PANEL:"grading:expand-grade-panel"}})); - -//# sourceMappingURL=grading_events.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_events.min.js.map b/mod/assign/amd/build/grading_events.min.js.map deleted file mode 100644 index a49176ccd74ba..0000000000000 --- a/mod/assign/amd/build/grading_events.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_events.min.js","sources":["../src/grading_events.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Events for the grading interface.\n *\n * @module mod_assign/grading_events\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(function() {\n return {\n COLLAPSE_REVIEW_PANEL: 'grading:collapse-review-panel',\n EXPAND_REVIEW_PANEL: 'grading:expand-review-panel',\n COLLAPSE_GRADE_PANEL: 'grading:collapse-grade-panel',\n EXPAND_GRADE_PANEL: 'grading:expand-grade-panel',\n };\n});\n"],"names":["define","COLLAPSE_REVIEW_PANEL","EXPAND_REVIEW_PANEL","COLLAPSE_GRADE_PANEL","EXPAND_GRADE_PANEL"],"mappings":";;;;;;;;AAuBAA,oCAAO,iBACI,CACHC,sBAAuB,gCACvBC,oBAAqB,8BACrBC,qBAAsB,+BACtBC,mBAAoB"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_form_change_checker.min.js b/mod/assign/amd/build/grading_form_change_checker.min.js deleted file mode 100644 index 84120c9f6925b..0000000000000 --- a/mod/assign/amd/build/grading_form_change_checker.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Simple method to check for changes to a form between two points in time. - * - * @module mod_assign/grading_form_change_checker - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_form_change_checker",["jquery"],(function($){return{saveFormState:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize();$(selector).data("saved-form-state",data)},checkFormForChanges:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize(),previousdata=$(selector).data("saved-form-state");return void 0!==previousdata&&previousdata!=data}}})); - -//# sourceMappingURL=grading_form_change_checker.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_form_change_checker.min.js.map b/mod/assign/amd/build/grading_form_change_checker.min.js.map deleted file mode 100644 index be6b0287b4d36..0000000000000 --- a/mod/assign/amd/build/grading_form_change_checker.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_form_change_checker.min.js","sources":["../src/grading_form_change_checker.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Simple method to check for changes to a form between two points in time.\n *\n * @module mod_assign/grading_form_change_checker\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery'], function($) {\n\n return {\n /**\n * Save the values in the form to a data attribute so they can be compared later for changes.\n *\n * @method saveFormState\n * @param {String} selector The selector for the form element.\n */\n saveFormState: function(selector) {\n $(selector).trigger('save-form-state');\n var data = $(selector).serialize();\n $(selector).data('saved-form-state', data);\n },\n\n /**\n * Compare the current values in the form to the previously saved state.\n *\n * @method checkFormForChanges\n * @param {String} selector The selector for the form element.\n * @return {Boolean} True if there are changes to the form data.\n */\n checkFormForChanges: function(selector) {\n\n $(selector).trigger('save-form-state');\n\n var data = $(selector).serialize(),\n previousdata = $(selector).data('saved-form-state');\n\n if (typeof previousdata === 'undefined') {\n return false;\n }\n return (previousdata != data);\n }\n };\n});\n"],"names":["define","$","saveFormState","selector","trigger","data","serialize","checkFormForChanges","previousdata"],"mappings":";;;;;;;;AAuBAA,gDAAO,CAAC,WAAW,SAASC,SAEjB,CAOHC,cAAe,SAASC,UACpBF,EAAEE,UAAUC,QAAQ,uBAChBC,KAAOJ,EAAEE,UAAUG,YACvBL,EAAEE,UAAUE,KAAK,mBAAoBA,OAUzCE,oBAAqB,SAASJ,UAE1BF,EAAEE,UAAUC,QAAQ,uBAEhBC,KAAOJ,EAAEE,UAAUG,YACnBE,aAAeP,EAAEE,UAAUE,KAAK,gCAER,IAAjBG,cAGHA,cAAgBH"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_navigation.min.js b/mod/assign/amd/build/grading_navigation.min.js deleted file mode 100644 index 6f8fa093d3f55..0000000000000 --- a/mod/assign/amd/build/grading_navigation.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Javascript to handle changing users via the user selector in the header. - * - * @module mod_assign/grading_navigation - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_navigation",["jquery","core/notification","core/str","core/form-autocomplete","core/ajax","core_user/repository","mod_assign/grading_form_change_checker"],(function($,notification,str,autocomplete,ajax,UserRepository,checker){var GradingNavigation=function(selector){this._regionSelector=selector,this._region=$(selector),this._filters=[],this._users=[],this._filteredUsers=[],this._lastXofYUpdate=0,this._firstLoadUsers=!0;let url=new URL(window.location);parseInt(url.searchParams.get("treset"))>0&&(url.searchParams.delete("treset"),window.history.replaceState({},"",url)),this._loadAllUsers(),this._region.find('[data-action="previous-user"]').on("click",this._handlePreviousUser.bind(this)),this._region.find('[data-action="next-user"]').on("click",this._handleNextUser.bind(this)),this._region.find('[data-action="change-user"]').on("change",this._handleChangeUser.bind(this)),this._region.find('[data-region="user-filters"]').on("click",this._toggleExpandFilters.bind(this)),this._region.find('[data-region="user-resettable"]').on("click",this._toggleResetTable.bind()),$(document).on("user-changed",this._refreshSelector.bind(this)),$(document).on("done-saving-show-next",this._handleNextUser.bind(this));var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).on("change","select",this._filterChanged.bind(this));var userid=$('[data-region="grading-navigation-panel"]').data("first-userid");userid&&this._selectUserById(userid),str.get_string("changeuser","mod_assign").done((function(s){autocomplete.enhance("[data-action=change-user]",!1,"mod_assign/participant_selector",s)})).fail(notification.exception),$(document).bind("start-loading-user",function(){this._isLoading=!0}.bind(this)),$(document).bind("finish-loading-user",function(){this._isLoading=!1}.bind(this))};return GradingNavigation.prototype._isLoading=!1,GradingNavigation.prototype._regionSelector=null,GradingNavigation.prototype._filters=null,GradingNavigation.prototype._users=null,GradingNavigation.prototype._region=null,GradingNavigation.prototype._lastFilters="",GradingNavigation.prototype._loadAllUsers=function(){var select=this._region.find("[data-action=change-user]"),assignmentid=select.attr("data-assignmentid"),groupid=select.attr("data-groupid"),filterPanel=this._region.find('[data-region="configure-filters"]'),filter=filterPanel.find('select[name="filter"]').val(),workflowFilter=filterPanel.find('select[name="workflowfilter"]');workflowFilter&&(filter+=","+workflowFilter.val());var markerFilter=filterPanel.find('select[name="markerfilter"]');return markerFilter&&(filter+=","+markerFilter.val()),this._lastFilters!=filter&&(this._lastFilters=filter,ajax.call([{methodname:"mod_assign_list_participants",args:{assignid:assignmentid,groupid:groupid,filter:"",onlyids:!0,tablesort:!0},done:this._usersLoaded.bind(this),fail:notification.exception}]),!0)},GradingNavigation.prototype._usersLoaded=function(users){if(this._firstLoadUsers=!1,this._filteredUsers=this._users=users,this._users.length){var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).find('select[name="filter"]').trigger("change")}else this._selectNoUser();this._triggerNextUserEvent()},GradingNavigation.prototype._checkClickOutsideConfigureFilters=function(event){var configPanel=this._region.find('[data-region="configure-filters"]');if(!configPanel.is(event.target)&&0===configPanel.has(event.target).length){var toggleLink=this._region.find('[data-region="user-filters"]');configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")}},GradingNavigation.prototype._updateFilterPreferences=function(userId,filterList,preferenceNames){var preferences=[],i=0;if(0==filterList.length||this._firstLoadUsers){var deferred=$.Deferred();return deferred.resolve(),deferred}for(i=0;i0&&!isNaN(useridnumber)&&useridnumber>0&&$(document).trigger("user-changed",useridnumber)))},GradingNavigation.prototype._toggleExpandFilters=function(event){event.preventDefault();var toggleLink=$(event.target).closest('[data-region="user-filters"]'),expanded="true"==toggleLink.attr("aria-expanded"),configPanel=$(document.getElementById(toggleLink.attr("aria-controls")));expanded?(configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")):(configPanel.css("display","inline-block"),configPanel.attr("aria-hidden","false"),toggleLink.attr("aria-expanded","true"),event.stopPropagation(),$(document).on("click.mod_assign_grading_navigation",this._checkClickOutsideConfigureFilters.bind(this)))},GradingNavigation.prototype._toggleResetTable=function(){let url=new URL(window.location);url.searchParams.set("treset","1"),window.location.href=url},GradingNavigation.prototype._handlePreviousUser=function(e){e.preventDefault();var currentUserId=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;for(i=0;i0&&$(document).trigger("user-changed",userid)}else count&&this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._setCountString=function(x,y){var updateNumber;this._lastXofYUpdate++,updateNumber=this._lastXofYUpdate;var param={x:x,y:y};str.get_string("xofy","mod_assign",param).done(function(s){updateNumber==this._lastXofYUpdate&&this._region.find('[data-region="user-count-summary"]').text(s)}.bind(this)).fail(notification.exception)},GradingNavigation.prototype._refreshCount=function(){var userid=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;if(isNaN(userid)||userid<=0)this._region.find('[data-region="user-count"]').hide();else{for(this._region.find('[data-region="user-count"]').show(),i=0;i0){var url=new URL(window.location);if(parseInt(url.searchParams.get("blindid"))>0){var newid=this._filteredUsers[currentIndex-1].recordid;url.searchParams.set("blindid",newid)}else url.searchParams.set("userid",userid);window.history.replaceState({},"",url)}}},GradingNavigation.prototype._refreshSelector=function(event,userid){var select=this._region.find("[data-action=change-user]");userid=parseInt(userid,10),!isNaN(userid)&&userid>0&&select.attr("data-selected",userid),this._refreshCount()},GradingNavigation.prototype._triggerNextUserEvent=function(){this._filteredUsers.length>1?$(document).trigger("next-user",{nextUserId:null,nextUser:!0}):$(document).trigger("next-user",{nextUser:!1})},GradingNavigation.prototype._handleChangeUser=function(){var select=this._region.find("[data-action=change-user]"),userid=parseInt(select.val(),10);this._isLoading||(checker.checkFormForChanges('[data-region="grade-panel"] .gradeform')?str.get_strings([{key:"unsavedchanges",component:"mod_assign"},{key:"unsavedchangesquestion",component:"mod_assign"},{key:"saveandcontinue",component:"mod_assign"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger("save-changes",userid)}))})):!isNaN(userid)&&userid>0&&(select.attr("data-selected",userid),$(document).trigger("user-changed",userid)))},GradingNavigation})); - -//# sourceMappingURL=grading_navigation.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_navigation.min.js.map b/mod/assign/amd/build/grading_navigation.min.js.map deleted file mode 100644 index c375784c8bb04..0000000000000 --- a/mod/assign/amd/build/grading_navigation.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_navigation.min.js","sources":["../src/grading_navigation.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript to handle changing users via the user selector in the header.\n *\n * @module mod_assign/grading_navigation\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/notification', 'core/str', 'core/form-autocomplete',\n 'core/ajax', 'core_user/repository', 'mod_assign/grading_form_change_checker'],\n function($, notification, str, autocomplete, ajax, UserRepository, checker) {\n\n /**\n * GradingNavigation class.\n *\n * @class mod_assign/grading_navigation\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var GradingNavigation = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._filters = [];\n this._users = [];\n this._filteredUsers = [];\n this._lastXofYUpdate = 0;\n this._firstLoadUsers = true;\n\n let url = new URL(window.location);\n if (parseInt(url.searchParams.get('treset')) > 0) {\n // Remove 'treset' url parameter to make sure that\n // table preferences won't be reset on page refresh.\n url.searchParams.delete('treset');\n window.history.replaceState({}, \"\", url);\n }\n\n // Get the current user list from a webservice.\n this._loadAllUsers();\n\n // We do not allow navigation while ajax requests are pending.\n // Attach listeners to the select and arrow buttons.\n\n this._region.find('[data-action=\"previous-user\"]').on('click', this._handlePreviousUser.bind(this));\n this._region.find('[data-action=\"next-user\"]').on('click', this._handleNextUser.bind(this));\n this._region.find('[data-action=\"change-user\"]').on('change', this._handleChangeUser.bind(this));\n this._region.find('[data-region=\"user-filters\"]').on('click', this._toggleExpandFilters.bind(this));\n this._region.find('[data-region=\"user-resettable\"]').on('click', this._toggleResetTable.bind());\n\n $(document).on('user-changed', this._refreshSelector.bind(this));\n $(document).on('done-saving-show-next', this._handleNextUser.bind(this));\n\n // Position the configure filters panel under the link that expands it.\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n configPanel.on('change', 'select', this._filterChanged.bind(this));\n\n var userid = $('[data-region=\"grading-navigation-panel\"]').data('first-userid');\n if (userid) {\n this._selectUserById(userid);\n }\n\n str.get_string('changeuser', 'mod_assign').done(function(s) {\n autocomplete.enhance('[data-action=change-user]', false, 'mod_assign/participant_selector', s);\n }\n ).fail(notification.exception);\n\n $(document).bind(\"start-loading-user\", function() {\n this._isLoading = true;\n }.bind(this));\n $(document).bind(\"finish-loading-user\", function() {\n this._isLoading = false;\n }.bind(this));\n };\n\n /** @property {Boolean} Boolean tracking active ajax requests. */\n GradingNavigation.prototype._isLoading = false;\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingNavigation.prototype._regionSelector = null;\n\n /** @property {Array} The list of active filter keys */\n GradingNavigation.prototype._filters = null;\n\n /** @property {Array} The list of users */\n GradingNavigation.prototype._users = null;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingNavigation.prototype._region = null;\n\n /** @property {String} Last active filters */\n GradingNavigation.prototype._lastFilters = '';\n\n /**\n * Load the list of all users for this assignment.\n *\n * @private\n * @method _loadAllUsers\n * @return {Boolean} True if the user list was fetched.\n */\n GradingNavigation.prototype._loadAllUsers = function() {\n var select = this._region.find('[data-action=change-user]');\n var assignmentid = select.attr('data-assignmentid');\n var groupid = select.attr('data-groupid');\n\n var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n var filter = filterPanel.find('select[name=\"filter\"]').val();\n var workflowFilter = filterPanel.find('select[name=\"workflowfilter\"]');\n if (workflowFilter) {\n filter += ',' + workflowFilter.val();\n }\n var markerFilter = filterPanel.find('select[name=\"markerfilter\"]');\n if (markerFilter) {\n filter += ',' + markerFilter.val();\n }\n\n if (this._lastFilters == filter) {\n return false;\n }\n this._lastFilters = filter;\n\n ajax.call([{\n methodname: 'mod_assign_list_participants',\n args: {assignid: assignmentid, groupid: groupid, filter: '', onlyids: true, tablesort: true},\n done: this._usersLoaded.bind(this),\n fail: notification.exception\n }]);\n return true;\n };\n\n /**\n * Call back to rebuild the user selector and x of y info when the user list is updated.\n *\n * @private\n * @method _usersLoaded\n * @param {Array} users\n */\n GradingNavigation.prototype._usersLoaded = function(users) {\n this._firstLoadUsers = false;\n this._filteredUsers = this._users = users;\n if (this._users.length) {\n // Position the configure filters panel under the link that expands it.\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n configPanel.find('select[name=\"filter\"]').trigger('change');\n } else {\n this._selectNoUser();\n }\n this._triggerNextUserEvent();\n };\n\n /**\n * Close the configure filters panel if a click is detected outside of it.\n *\n * @private\n * @method _checkClickOutsideConfigureFilters\n * @param {Event} event\n */\n GradingNavigation.prototype._checkClickOutsideConfigureFilters = function(event) {\n var configPanel = this._region.find('[data-region=\"configure-filters\"]');\n\n if (!configPanel.is(event.target) && configPanel.has(event.target).length === 0) {\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n\n configPanel.hide();\n configPanel.attr('aria-hidden', 'true');\n toggleLink.attr('aria-expanded', 'false');\n $(document).unbind('click.mod_assign_grading_navigation');\n }\n };\n\n /**\n * Close the configure filters panel if a click is detected outside of it.\n *\n * @private\n * @method _updateFilterPreference\n * @param {Number} userId The current user id.\n * @param {Array} filterList The list of current filter values.\n * @param {Array} preferenceNames The names of the preferences to update\n * @return {Promise} Resolved when all the preferences are updated.\n */\n GradingNavigation.prototype._updateFilterPreferences = function(userId, filterList, preferenceNames) {\n var preferences = [],\n i = 0;\n\n if (filterList.length == 0 || this._firstLoadUsers) {\n // Nothing to update.\n var deferred = $.Deferred();\n deferred.resolve();\n return deferred;\n }\n // General filter.\n // Set the user preferences to the current filters.\n for (i = 0; i < filterList.length; i++) {\n var newValue = filterList[i];\n if (newValue == 'none') {\n newValue = '';\n }\n\n preferences.push({\n userid: userId,\n name: preferenceNames[i],\n value: newValue\n });\n }\n\n return UserRepository.setUserPreferences(preferences);\n };\n /**\n * Turn a filter on or off.\n *\n * @private\n * @method _filterChanged\n */\n GradingNavigation.prototype._filterChanged = function() {\n // There are 3 types of filter right now.\n var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n var filters = filterPanel.find('select');\n var preferenceNames = [];\n\n this._filters = [];\n filters.each(function(idx, ele) {\n var element = $(ele);\n this._filters.push(element.val());\n preferenceNames.push('assign_' + element.prop('name'));\n }.bind(this));\n\n // Update the active filter string.\n var filterlist = [];\n filterPanel.find('option:checked').each(function(idx, ele) {\n filterlist[filterlist.length] = $(ele).text();\n });\n if (filterlist.length) {\n this._region.find('[data-region=\"user-filters\"] span').text(filterlist.join(', '));\n } else {\n str.get_string('nofilters', 'mod_assign').done(function(s) {\n this._region.find('[data-region=\"user-filters\"] span').text(s);\n }.bind(this)).fail(notification.exception);\n }\n\n var select = this._region.find('[data-action=change-user]');\n var currentUserID = select.data('currentuserid');\n this._updateFilterPreferences(currentUserID, this._filters, preferenceNames).done(function() {\n // Reload the list of users to apply the new filters.\n if (!this._loadAllUsers()) {\n var userid = parseInt(select.attr('data-selected'));\n let foundIndex = null;\n // Search the returned users for the current selection.\n $.each(this._filteredUsers, function(index, user) {\n if (userid == user.id) {\n foundIndex = index;\n }\n });\n\n if (this._filteredUsers.length && foundIndex !== null) {\n this._selectUserById(this._filteredUsers[foundIndex].id);\n } else {\n this._selectNoUser();\n }\n\n }\n }.bind(this)).fail(notification.exception);\n this._refreshCount();\n };\n\n /**\n * Select no users, because no users match the filters.\n *\n * @private\n * @method _selectNoUser\n */\n GradingNavigation.prototype._selectNoUser = function() {\n // Detect unsaved changes, and offer to save them - otherwise change user right now.\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', -1);\n });\n });\n } else {\n $(document).trigger('user-changed', -1);\n }\n };\n\n /**\n * Select the specified user by id.\n *\n * @private\n * @method _selectUserById\n * @param {Number} userid\n */\n GradingNavigation.prototype._selectUserById = function(userid) {\n var select = this._region.find('[data-action=change-user]');\n var useridnumber = parseInt(userid, 10);\n\n // Detect unsaved changes, and offer to save them - otherwise change user right now.\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', useridnumber);\n });\n });\n } else {\n select.attr('data-selected', userid);\n\n // If we have some filtered users, and userid is specified, then trigger change.\n if (this._filteredUsers.length > 0 && !isNaN(useridnumber) && useridnumber > 0) {\n $(document).trigger('user-changed', useridnumber);\n }\n }\n };\n\n /**\n * Expand or collapse the filter config panel.\n *\n * @private\n * @method _toggleExpandFilters\n * @param {Event} event\n */\n GradingNavigation.prototype._toggleExpandFilters = function(event) {\n event.preventDefault();\n var toggleLink = $(event.target).closest('[data-region=\"user-filters\"]');\n var expanded = toggleLink.attr('aria-expanded') == 'true';\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n if (expanded) {\n configPanel.hide();\n configPanel.attr('aria-hidden', 'true');\n toggleLink.attr('aria-expanded', 'false');\n $(document).unbind('click.mod_assign_grading_navigation');\n } else {\n configPanel.css('display', 'inline-block');\n configPanel.attr('aria-hidden', 'false');\n toggleLink.attr('aria-expanded', 'true');\n event.stopPropagation();\n $(document).on('click.mod_assign_grading_navigation', this._checkClickOutsideConfigureFilters.bind(this));\n }\n };\n\n /**\n * Reset table preferences.\n *\n * @private\n * @method _toggleResetTable\n */\n GradingNavigation.prototype._toggleResetTable = function() {\n let url = new URL(window.location);\n url.searchParams.set('treset', '1');\n window.location.href = url;\n };\n\n /**\n * Change to the previous user in the grading list.\n *\n * @private\n * @method _handlePreviousUser\n * @param {Event} e\n */\n GradingNavigation.prototype._handlePreviousUser = function(e) {\n e.preventDefault();\n var select = this._region.find('[data-action=change-user]');\n var currentUserId = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == currentUserId) {\n currentIndex = i;\n break;\n }\n }\n\n var count = this._filteredUsers.length;\n var newIndex = (currentIndex - 1);\n if (newIndex < 0) {\n newIndex = count - 1;\n }\n\n if (count) {\n this._selectUserById(this._filteredUsers[newIndex].id);\n }\n };\n\n /**\n * Change to the next user in the grading list.\n *\n * @param {Event} e\n * @param {Boolean} saved Has the form already been saved? Skips checking for changes if true.\n */\n GradingNavigation.prototype._handleNextUser = function(e, saved) {\n e.preventDefault();\n var select = this._region.find('[data-action=change-user]');\n var currentUserId = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == currentUserId) {\n currentIndex = i;\n break;\n }\n }\n\n var count = this._filteredUsers.length;\n var newIndex = (currentIndex + 1) % count;\n\n if (saved && count) {\n // If we've already saved the grade, skip checking if we've made any changes.\n var userid = this._filteredUsers[newIndex].id;\n var useridnumber = parseInt(userid, 10);\n select.attr('data-selected', userid);\n if (!isNaN(useridnumber) && useridnumber > 0) {\n $(document).trigger('user-changed', userid);\n }\n } else if (count) {\n this._selectUserById(this._filteredUsers[newIndex].id);\n }\n };\n\n /**\n * Set count string. This method only sets the value for the last time it was ever called to deal\n * with promises that return in a non-predictable order.\n *\n * @private\n * @method _setCountString\n * @param {Number} x\n * @param {Number} y\n */\n GradingNavigation.prototype._setCountString = function(x, y) {\n var updateNumber = 0;\n this._lastXofYUpdate++;\n updateNumber = this._lastXofYUpdate;\n\n var param = {x: x, y: y};\n str.get_string('xofy', 'mod_assign', param).done(function(s) {\n if (updateNumber == this._lastXofYUpdate) {\n this._region.find('[data-region=\"user-count-summary\"]').text(s);\n }\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Rebuild the x of y string.\n *\n * @private\n * @method _refreshCount\n */\n GradingNavigation.prototype._refreshCount = function() {\n var select = this._region.find('[data-action=change-user]');\n var userid = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n if (isNaN(userid) || userid <= 0) {\n this._region.find('[data-region=\"user-count\"]').hide();\n } else {\n this._region.find('[data-region=\"user-count\"]').show();\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == userid) {\n currentIndex = i;\n break;\n }\n }\n var count = this._filteredUsers.length;\n if (count) {\n currentIndex += 1;\n }\n this._setCountString(currentIndex, count);\n // Update window URL\n if (currentIndex > 0) {\n var url = new URL(window.location);\n if (parseInt(url.searchParams.get('blindid')) > 0) {\n var newid = this._filteredUsers[currentIndex - 1].recordid;\n url.searchParams.set('blindid', newid);\n } else {\n url.searchParams.set('userid', userid);\n }\n // We do this so a browser refresh will return to the same user.\n window.history.replaceState({}, \"\", url);\n }\n }\n };\n\n /**\n * Respond to a user-changed event by updating the selector.\n *\n * @private\n * @method _refreshSelector\n * @param {Event} event\n * @param {String} userid\n */\n GradingNavigation.prototype._refreshSelector = function(event, userid) {\n var select = this._region.find('[data-action=change-user]');\n userid = parseInt(userid, 10);\n\n if (!isNaN(userid) && userid > 0) {\n select.attr('data-selected', userid);\n }\n this._refreshCount();\n };\n\n /**\n * Trigger the next user event depending on the number of filtered users\n *\n * @private\n * @method _triggerNextUserEvent\n */\n GradingNavigation.prototype._triggerNextUserEvent = function() {\n if (this._filteredUsers.length > 1) {\n $(document).trigger('next-user', {nextUserId: null, nextUser: true});\n } else {\n $(document).trigger('next-user', {nextUser: false});\n }\n };\n\n /**\n * Change to a different user in the grading list.\n *\n * @private\n * @method _handleChangeUser\n */\n GradingNavigation.prototype._handleChangeUser = function() {\n var select = this._region.find('[data-action=change-user]');\n var userid = parseInt(select.val(), 10);\n\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', userid);\n });\n });\n } else {\n if (!isNaN(userid) && userid > 0) {\n select.attr('data-selected', userid);\n\n $(document).trigger('user-changed', userid);\n }\n }\n };\n\n return GradingNavigation;\n});\n"],"names":["define","$","notification","str","autocomplete","ajax","UserRepository","checker","GradingNavigation","selector","_regionSelector","_region","_filters","_users","_filteredUsers","_lastXofYUpdate","_firstLoadUsers","url","URL","window","location","parseInt","searchParams","get","delete","history","replaceState","_loadAllUsers","find","on","this","_handlePreviousUser","bind","_handleNextUser","_handleChangeUser","_toggleExpandFilters","_toggleResetTable","document","_refreshSelector","toggleLink","getElementById","attr","_filterChanged","userid","data","_selectUserById","get_string","done","s","enhance","fail","exception","_isLoading","prototype","_lastFilters","select","assignmentid","groupid","filterPanel","filter","val","workflowFilter","markerFilter","call","methodname","args","assignid","onlyids","tablesort","_usersLoaded","users","length","trigger","_selectNoUser","_triggerNextUserEvent","_checkClickOutsideConfigureFilters","event","configPanel","is","target","has","hide","unbind","_updateFilterPreferences","userId","filterList","preferenceNames","preferences","i","deferred","Deferred","resolve","newValue","push","name","value","setUserPreferences","filters","each","idx","ele","element","prop","filterlist","text","join","currentUserID","foundIndex","index","user","id","_refreshCount","checkFormForChanges","get_strings","key","component","strs","confirm","useridnumber","isNaN","preventDefault","closest","expanded","css","stopPropagation","set","href","e","currentUserId","currentIndex","count","newIndex","saved","_setCountString","x","y","updateNumber","param","show","newid","recordid","nextUserId","nextUser"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_navigation_user_info.min.js b/mod/assign/amd/build/grading_navigation_user_info.min.js deleted file mode 100644 index c28edb274217a..0000000000000 --- a/mod/assign/amd/build/grading_navigation_user_info.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Javascript controller for the "User summary" panel at the top of the page. - * - * @module mod_assign/grading_navigation_user_info - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_navigation_user_info",["jquery","core/notification","core/ajax","core/templates"],(function($,notification,ajax,templates){var UserInfo=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache={},$(document).on("user-changed",this._refreshUserInfo.bind(this))};return UserInfo.prototype._regionSelector=null,UserInfo.prototype._userCache=null,UserInfo.prototype._region=null,UserInfo.prototype._lastUserId=0,UserInfo.prototype._getAssignmentId=function(){return this._region.attr("data-assignmentid")},UserInfo.prototype._refreshUserInfo=function(event,userid){var promise=$.Deferred();this._region.attr("data-userid",userid),this._lastUserId!=userid&&(this._lastUserId=userid,templates.render("mod_assign/loading",{}).done(function(html,js){if(this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this)),userid<0)templates.render("mod_assign/grading_navigation_no_users",{}).done(function(html,js){userid==this._lastUserId&&this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception);else{if(void 0!==this._userCache[userid])promise.resolve(this._userCache[userid]);else{var assignmentId=this._getAssignmentId();ajax.call([{methodname:"mod_assign_get_participant",args:{userid:userid,assignid:assignmentId,embeduser:!0}}])[0].done(function(participant){participant.hasOwnProperty("id")?(this._userCache[userid]=participant,promise.resolve(this._userCache[userid])):promise.reject("No users")}.bind(this)).fail(notification.exception)}promise.done(function(context){var identityfields=$("[data-showuseridentity]").data("showuseridentity").split(","),identity=[];context.courseid=$('[data-region="grading-navigation-panel"]').attr("data-courseid"),context.user&&($.each(identityfields,(function(i,k){void 0!==context.user[k]&&""!==context.user[k]&&(context.hasidentity=!0,identity.push(context.user[k]))})),context.identity=identity.join(", "),context.user.profileimageurl&&(context.profileimageurl=context.user.profileimageurl)),templates.render("mod_assign/grading_navigation_user_summary",context).done(function(html,js){userid==this._lastUserId&&this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this)).fail(function(){templates.render("mod_assign/grading_navigation_no_users",{}).done(function(html,js){this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this))}}.bind(this)).fail(notification.exception))},UserInfo})); - -//# sourceMappingURL=grading_navigation_user_info.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_navigation_user_info.min.js.map b/mod/assign/amd/build/grading_navigation_user_info.min.js.map deleted file mode 100644 index 05b9bc47f0fbc..0000000000000 --- a/mod/assign/amd/build/grading_navigation_user_info.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_navigation_user_info.min.js","sources":["../src/grading_navigation_user_info.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"User summary\" panel at the top of the page.\n *\n * @module mod_assign/grading_navigation_user_info\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function($, notification, ajax, templates) {\n\n /**\n * UserInfo class.\n *\n * @class mod_assign/grading_navigation_user_info\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var UserInfo = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._userCache = {};\n\n $(document).on('user-changed', this._refreshUserInfo.bind(this));\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n UserInfo.prototype._regionSelector = null;\n\n /** @property {Array} Cache of user info contexts. */\n UserInfo.prototype._userCache = null;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n UserInfo.prototype._region = null;\n\n /** @property {Integer} Remember the last user id to prevent unnecessary reloads. */\n UserInfo.prototype._lastUserId = 0;\n\n /**\n * Get the assignment id\n *\n * @private\n * @method _getAssignmentId\n * @return {Integer} assignment id\n */\n UserInfo.prototype._getAssignmentId = function() {\n return this._region.attr('data-assignmentid');\n };\n\n /**\n * Get the user context - re-render the template in the page.\n *\n * @private\n * @method _refreshUserInfo\n * @param {Event} event\n * @param {Number} userid\n */\n UserInfo.prototype._refreshUserInfo = function(event, userid) {\n var promise = $.Deferred();\n\n // Put the current user ID in the DOM so yui can access it.\n this._region.attr('data-userid', userid);\n\n // Skip reloading if it is the same user.\n if (this._lastUserId == userid) {\n return;\n }\n this._lastUserId = userid;\n\n // First insert the loading template.\n templates.render('mod_assign/loading', {}).done(function(html, js) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n\n if (userid < 0) {\n // Render the template.\n templates.render('mod_assign/grading_navigation_no_users', {}).done(function(html, js) {\n if (userid == this._lastUserId) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }\n }.bind(this)).fail(notification.exception);\n return;\n }\n\n if (typeof this._userCache[userid] !== \"undefined\") {\n promise.resolve(this._userCache[userid]);\n } else {\n // Load context from ajax.\n var assignmentId = this._getAssignmentId();\n var requests = ajax.call([{\n methodname: 'mod_assign_get_participant',\n args: {\n userid: userid,\n assignid: assignmentId,\n embeduser: true\n }\n }]);\n\n requests[0].done(function(participant) {\n if (!participant.hasOwnProperty('id')) {\n promise.reject('No users');\n } else {\n this._userCache[userid] = participant;\n promise.resolve(this._userCache[userid]);\n }\n }.bind(this)).fail(notification.exception);\n }\n\n promise.done(function(context) {\n var identityfields = $('[data-showuseridentity]').data('showuseridentity').split(','),\n identity = [];\n // Render the template.\n context.courseid = $('[data-region=\"grading-navigation-panel\"]').attr('data-courseid');\n\n if (context.user) {\n // Build a string for the visible identity fields listed in showuseridentity config setting.\n $.each(identityfields, function(i, k) {\n if (typeof context.user[k] !== 'undefined' && context.user[k] !== '') {\n context.hasidentity = true;\n identity.push(context.user[k]);\n }\n });\n context.identity = identity.join(', ');\n\n // Add profile image url to context.\n if (context.user.profileimageurl) {\n context.profileimageurl = context.user.profileimageurl;\n }\n }\n\n templates.render('mod_assign/grading_navigation_user_summary', context).done(function(html, js) {\n // Update the page.\n if (userid == this._lastUserId) {\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }\n }.bind(this)).fail(notification.exception);\n }.bind(this)).fail(function() {\n // Render the template.\n templates.render('mod_assign/grading_navigation_no_users', {}).done(function(html, js) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n }\n .bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n return UserInfo;\n});\n"],"names":["define","$","notification","ajax","templates","UserInfo","selector","_regionSelector","_region","_userCache","document","on","this","_refreshUserInfo","bind","prototype","_lastUserId","_getAssignmentId","attr","event","userid","promise","Deferred","render","done","html","js","fadeOut","replaceNodeContents","fadeIn","fail","exception","resolve","assignmentId","call","methodname","args","assignid","embeduser","participant","hasOwnProperty","reject","context","identityfields","data","split","identity","courseid","user","each","i","k","hasidentity","push","join","profileimageurl"],"mappings":";;;;;;;;AAuBAA,iDAAO,CAAC,SAAU,oBAAqB,YAAa,mBAAmB,SAASC,EAAGC,aAAcC,KAAMC,eAQ/FC,SAAW,SAASC,eACfC,gBAAkBD,cAClBE,QAAUP,EAAEK,eACZG,WAAa,GAElBR,EAAES,UAAUC,GAAG,eAAgBC,KAAKC,iBAAiBC,KAAKF,eAI9DP,SAASU,UAAUR,gBAAkB,KAGrCF,SAASU,UAAUN,WAAa,KAGhCJ,SAASU,UAAUP,QAAU,KAG7BH,SAASU,UAAUC,YAAc,EASjCX,SAASU,UAAUE,iBAAmB,kBAC3BL,KAAKJ,QAAQU,KAAK,sBAW7Bb,SAASU,UAAUF,iBAAmB,SAASM,MAAOC,YAC9CC,QAAUpB,EAAEqB,gBAGXd,QAAQU,KAAK,cAAeE,QAG7BR,KAAKI,aAAeI,cAGnBJ,YAAcI,OAGnBhB,UAAUmB,OAAO,qBAAsB,IAAIC,KAAK,SAASC,KAAMC,YAEtDlB,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,OAEHQ,OAAS,EAEThB,UAAUmB,OAAO,yCAA0C,IAAIC,KAAK,SAASC,KAAMC,IAC3EN,QAAUR,KAAKI,kBAEVR,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QAEbE,KAAKF,OAAOkB,KAAK5B,aAAa6B,wBAIG,IAA5BnB,KAAKH,WAAWW,QACvBC,QAAQW,QAAQpB,KAAKH,WAAWW,aAC7B,KAECa,aAAerB,KAAKK,mBACTd,KAAK+B,KAAK,CAAC,CACtBC,WAAY,6BACZC,KAAM,CACFhB,OAAQA,OACRiB,SAAUJ,aACVK,WAAW,MAIV,GAAGd,KAAK,SAASe,aACjBA,YAAYC,eAAe,YAGvB/B,WAAWW,QAAUmB,YAC1BlB,QAAQW,QAAQpB,KAAKH,WAAWW,UAHhCC,QAAQoB,OAAO,aAKrB3B,KAAKF,OAAOkB,KAAK5B,aAAa6B,WAGpCV,QAAQG,KAAK,SAASkB,aACdC,eAAiB1C,EAAE,2BAA2B2C,KAAK,oBAAoBC,MAAM,KAC7EC,SAAW,GAEfJ,QAAQK,SAAW9C,EAAE,4CAA4CiB,KAAK,iBAElEwB,QAAQM,OAER/C,EAAEgD,KAAKN,gBAAgB,SAASO,EAAGC,QACA,IAApBT,QAAQM,KAAKG,IAA0C,KAApBT,QAAQM,KAAKG,KACvDT,QAAQU,aAAc,EACtBN,SAASO,KAAKX,QAAQM,KAAKG,QAGnCT,QAAQI,SAAWA,SAASQ,KAAK,MAG7BZ,QAAQM,KAAKO,kBACbb,QAAQa,gBAAkBb,QAAQM,KAAKO,kBAI/CnD,UAAUmB,OAAO,6CAA8CmB,SAASlB,KAAK,SAASC,KAAMC,IAEpFN,QAAUR,KAAKI,kBACVR,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QAEbE,KAAKF,OAAOkB,KAAK5B,aAAa6B,YAClCjB,KAAKF,OAAOkB,KAAK,WAEf1B,UAAUmB,OAAO,yCAA0C,IAAIC,KAAK,SAASC,KAAMC,SAE1ElB,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QACTE,KAAKF,OAAOkB,KAAK5B,aAAa6B,YAEnCjB,KAAKF,SACRE,KAAKF,OAAOkB,KAAK5B,aAAa6B,aAG7B1B"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_panel.min.js b/mod/assign/amd/build/grading_panel.min.js deleted file mode 100644 index bdd6256eb4653..0000000000000 --- a/mod/assign/amd/build/grading_panel.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Javascript controller for the "Grading" panel at the right of the page. - * - * @module mod_assign/grading_panel - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_panel",["jquery","core/yui","core/notification","core/templates","core/fragment","core/ajax","core/str","mod_assign/grading_form_change_checker","mod_assign/grading_events","core_form/events","core/toast","core_form/changechecker"],(function($,Y,notification,templates,fragment,ajax,str,checker,GradingEvents,FormEvents,Toast,FormChangeChecker){var GradingPanel=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache=[],this.registerEventListeners()};return GradingPanel.prototype._regionSelector=null,GradingPanel.prototype._lastUserId=0,GradingPanel.prototype._lastAttemptNumber=-1,GradingPanel.prototype._region=null,GradingPanel.prototype.nextUserId=null,GradingPanel.prototype.nextUser=!1,GradingPanel.prototype._niceReplaceNodeContents=function(node,html,js){var promise=$.Deferred();return node.fadeOut("fast",(function(){templates.replaceNodeContents(node,html,js),node.fadeIn("fast",(function(){promise.resolve()}))})),promise.promise()},GradingPanel.prototype._saveFormState=function(){var checked=$('[data-region="grading-actions-form"] [name="sendstudentnotifications"]').prop("checked");$('.gradeform [name="sendstudentnotifications"]').val(checked)},GradingPanel.prototype._submitForm=function(event,nextUserId,nextUser){var commentAreaElement=document.querySelector(".comment-area");commentAreaElement&&(""!==commentAreaElement.querySelector(".db > textarea").value&&commentAreaElement.querySelector('.fd a[id^="comment-action-post-"]').click());var form=$(this._region.find("form.gradeform"));$('[data-region="overlay"]').show(),FormChangeChecker.markFormSubmitted(form[0]),form.trigger("save-form-state"),FormEvents.notifyFormSubmittedByJavascript(form[0]);var data=form.serialize(),assignmentid=this._region.attr("data-assignmentid");ajax.call([{methodname:"mod_assign_submit_grading_form",args:{assignmentid:assignmentid,userid:this._lastUserId,jsonformdata:JSON.stringify(data)},done:this._handleFormSubmissionResponse.bind(this,data,nextUserId,nextUser),fail:notification.exception}])},GradingPanel.prototype._handleFormSubmissionResponse=function(formdata,nextUserId,nextUser,response){if(void 0===nextUserId&&(nextUserId=this._lastUserId),response.length)$(document).trigger("reset",[this._lastUserId,formdata]);else{str.get_string("gradechangessaveddetail","mod_assign").then((function(str){return Toast.add(str),str})).catch(notification.exception);var form=$(this._region.find("form.gradeform"));FormChangeChecker.resetFormDirtyState(form[0]),nextUserId==this._lastUserId?$(document).trigger("reset",nextUserId):nextUser?$(document).trigger("done-saving-show-next",!0):$(document).trigger("user-changed",nextUserId)}$('[data-region="overlay"]').hide()},GradingPanel.prototype._resetForm=function(e,userid,formdata){var event=$.Event("custom");void 0===userid&&(userid=this._lastUserId),this._lastUserId=0,this._refreshGradingPanel(event,userid,formdata)},GradingPanel.prototype._chooseAttempt=function(e){var submissionsId=$(e.target).data("submissions"),formhtml=$(document.getElementById(submissionsId)).clone().wrap($("
")).html();str.get_strings([{key:"viewadifferentattempt",component:"mod_assign"},{key:"view",component:"core"},{key:"cancel",component:"core"}]).done(function(strs){notification.confirm(strs[0],formhtml,strs[1],strs[2],function(){var attemptnumber=$("input:radio[name='select-attemptnumber']:checked").val();this._refreshGradingPanel(null,this._lastUserId,"",attemptnumber)}.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._addPopoutButtons=function(selector){var region=$(selector);templates.render("mod_assign/popout_button",{}).done(function(html){region.find('[data-fieldtype="filemanager"],[data-fieldtype="editor"],[data-fieldtype="grading"]').closest(".fitem").addClass("has-popout").find("label").parent().append(html),region.on("click",'[data-region="popout-button"]',this._togglePopout.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._togglePopout=function(event){event.preventDefault();var container=$(event.target).closest(".fitem");container.hasClass("popout")?$(".popout").removeClass("popout"):($(".popout").removeClass("popout"),container.addClass("popout"),container.addClass("moodle-has-zindex"))},GradingPanel.prototype._refreshGradingPanel=function(event,userid,submissiondata,attemptnumber){var contextid=this._region.attr("data-contextid");void 0===submissiondata&&(submissiondata=""),void 0===attemptnumber&&(attemptnumber=-1),this._lastUserId==userid&&this._lastAttemptNumber==attemptnumber&&""===submissiondata||(this._lastUserId=userid,this._lastAttemptNumber=attemptnumber,$(document).trigger("start-loading-user"),window.M.util.js_pending("mod-assign-loading-user"),templates.render("mod_assign/loading",{}).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){if(userid>0){this._region.show();var params={userid:userid,attemptnumber:attemptnumber,jsonformdata:JSON.stringify(submissiondata)};fragment.loadFragment("mod_assign","gradingpanel",contextid,params).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform'),$(document).on("editor-content-restored",(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform')})),$('[data-region="attempt-chooser"]').on("click",this._chooseAttempt.bind(this)),this._addPopoutButtons('[data-region="grade-panel"] .gradeform'),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this)).fail(notification.exception)}.bind(this)).fail(notification.exception),$('[data-region="review-panel"]').show()}else this._region.hide(),$('[data-region="review-panel"]').hide(),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this))}.bind(this)).fail(notification.exception))},GradingPanel.prototype._getNextUser=function(event,data){this.nextUserId=data.nextUserId,this.nextUser=data.nextUser},GradingPanel.prototype._handleSaveAndShowNext=function(){this._submitForm(null,this.nextUserId,this.nextUser)},GradingPanel.prototype.getPanelElement=function(){return $('[data-region="grade-panel"]')},GradingPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed")},GradingPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed")},GradingPanel.prototype.registerEventListeners=function(){var docElement=$(document);$(this._region).on("submit","form",(function(e){e.preventDefault()})),docElement.on("next-user",this._getNextUser.bind(this)),docElement.on("user-changed",this._refreshGradingPanel.bind(this)),docElement.on("save-changes",this._submitForm.bind(this)),docElement.on("save-and-show-next",this._handleSaveAndShowNext.bind(this)),docElement.on("reset",this._resetForm.bind(this)),docElement.on("save-form-state",this._saveFormState.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.expandPanel()}.bind(this))},GradingPanel})); - -//# sourceMappingURL=grading_panel.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_panel.min.js.map b/mod/assign/amd/build/grading_panel.min.js.map deleted file mode 100644 index 930e9b4c6d308..0000000000000 --- a/mod/assign/amd/build/grading_panel.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_panel.min.js","sources":["../src/grading_panel.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Grading\" panel at the right of the page.\n *\n * @module mod_assign/grading_panel\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine([\n 'jquery',\n 'core/yui',\n 'core/notification',\n 'core/templates',\n 'core/fragment',\n 'core/ajax',\n 'core/str',\n 'mod_assign/grading_form_change_checker',\n 'mod_assign/grading_events',\n 'core_form/events',\n 'core/toast',\n 'core_form/changechecker',\n], function(\n $,\n Y,\n notification,\n templates,\n fragment,\n ajax,\n str,\n checker,\n GradingEvents,\n FormEvents,\n Toast,\n FormChangeChecker\n) {\n\n /**\n * GradingPanel class.\n *\n * @class mod_assign/grading_panel\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var GradingPanel = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._userCache = [];\n\n this.registerEventListeners();\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingPanel.prototype._regionSelector = null;\n\n /** @property {Integer} Remember the last user id to prevent unnessecary reloads. */\n GradingPanel.prototype._lastUserId = 0;\n\n /** @property {Integer} Remember the last attempt number to prevent unnessecary reloads. */\n GradingPanel.prototype._lastAttemptNumber = -1;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingPanel.prototype._region = null;\n\n /** @property {Integer} The id of the next user in the grading list */\n GradingPanel.prototype.nextUserId = null;\n\n /** @property {Boolean} Next user exists in the grading list */\n GradingPanel.prototype.nextUser = false;\n\n /**\n * Fade the dom node out, update it, and fade it back.\n *\n * @private\n * @method _niceReplaceNodeContents\n * @param {JQuery} node\n * @param {String} html\n * @param {String} js\n * @return {Deferred} promise resolved when the animations are complete.\n */\n GradingPanel.prototype._niceReplaceNodeContents = function(node, html, js) {\n var promise = $.Deferred();\n\n node.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(node, html, js);\n node.fadeIn(\"fast\", function() {\n promise.resolve();\n });\n });\n\n return promise.promise();\n };\n\n /**\n * Make sure all form fields have the latest saved state.\n * @private\n * @method _saveFormState\n */\n GradingPanel.prototype._saveFormState = function() {\n // Copy data from notify students checkbox which was moved out of the form.\n var checked = $('[data-region=\"grading-actions-form\"] [name=\"sendstudentnotifications\"]').prop(\"checked\");\n $('.gradeform [name=\"sendstudentnotifications\"]').val(checked);\n };\n\n /**\n * Make form submit via ajax.\n *\n * @private\n * @param {Object} event\n * @param {Integer} nextUserId\n * @param {Boolean} nextUser optional. Load next user in the grading list.\n * @method _submitForm\n * @fires event:formSubmittedByJavascript\n */\n GradingPanel.prototype._submitForm = function(event, nextUserId, nextUser) {\n // If the form has data in comment-area, then we need to save that comment\n var commentAreaElement = document.querySelector('.comment-area');\n if (commentAreaElement) {\n var commentTextAreaElement = commentAreaElement.querySelector('.db > textarea');\n if (commentTextAreaElement.value !== '') {\n var commentActionPostElement = commentAreaElement.querySelector('.fd a[id^=\"comment-action-post-\"]');\n commentActionPostElement.click();\n }\n }\n\n // The form was submitted - send it via ajax instead.\n var form = $(this._region.find('form.gradeform'));\n\n $('[data-region=\"overlay\"]').show();\n\n // Mark the form as submitted in the change checker.\n FormChangeChecker.markFormSubmitted(form[0]);\n\n // We call this, so other modules can update the form with the latest state.\n form.trigger('save-form-state');\n\n // Tell all form fields we are about to submit the form.\n FormEvents.notifyFormSubmittedByJavascript(form[0]);\n\n // Now we get all the current values from the form.\n var data = form.serialize();\n var assignmentid = this._region.attr('data-assignmentid');\n\n // Now we can continue...\n ajax.call([{\n methodname: 'mod_assign_submit_grading_form',\n args: {assignmentid: assignmentid, userid: this._lastUserId, jsonformdata: JSON.stringify(data)},\n done: this._handleFormSubmissionResponse.bind(this, data, nextUserId, nextUser),\n fail: notification.exception\n }]);\n };\n\n /**\n * Handle form submission response.\n *\n * @private\n * @method _handleFormSubmissionResponse\n * @param {Array} formdata - submitted values\n * @param {Number} [nextUserId] The id of the user to load after the form is saved\n * @param {Boolean} [nextUser] - Whether to switch to next user in the grading list.\n * @param {Array} response List of errors.\n */\n GradingPanel.prototype._handleFormSubmissionResponse = function(formdata, nextUserId, nextUser, response) {\n if (typeof nextUserId === \"undefined\") {\n nextUserId = this._lastUserId;\n }\n if (response.length) {\n // There was an error saving the grade. Re-render the form using the submitted data so we can show\n // validation errors.\n $(document).trigger('reset', [this._lastUserId, formdata]);\n } else {\n str.get_string('gradechangessaveddetail', 'mod_assign')\n .then(function(str) {\n Toast.add(str);\n return str;\n })\n .catch(notification.exception);\n\n // Reset the form state.\n var form = $(this._region.find('form.gradeform'));\n FormChangeChecker.resetFormDirtyState(form[0]);\n\n if (nextUserId == this._lastUserId) {\n $(document).trigger('reset', nextUserId);\n } else if (nextUser) {\n $(document).trigger('done-saving-show-next', true);\n } else {\n $(document).trigger('user-changed', nextUserId);\n }\n }\n $('[data-region=\"overlay\"]').hide();\n };\n\n /**\n * Refresh form with default values.\n *\n * @private\n * @method _resetForm\n * @param {Event} e\n * @param {Integer} userid\n * @param {Array} formdata\n */\n GradingPanel.prototype._resetForm = function(e, userid, formdata) {\n // The form was cancelled - refresh with default values.\n var event = $.Event(\"custom\");\n if (typeof userid == \"undefined\") {\n userid = this._lastUserId;\n }\n this._lastUserId = 0;\n this._refreshGradingPanel(event, userid, formdata);\n };\n\n /**\n * Open a picker to choose an older attempt.\n *\n * @private\n * @param {Object} e\n * @method _chooseAttempt\n */\n GradingPanel.prototype._chooseAttempt = function(e) {\n // Show a dialog.\n\n // The form is in the element pointed to by data-submissions.\n var link = $(e.target);\n var submissionsId = link.data('submissions');\n var submissionsform = $(document.getElementById(submissionsId));\n var formcopy = submissionsform.clone();\n var formhtml = formcopy.wrap($('')).html();\n\n str.get_strings([\n {key: 'viewadifferentattempt', component: 'mod_assign'},\n {key: 'view', component: 'core'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], formhtml, strs[1], strs[2], function() {\n var attemptnumber = $(\"input:radio[name='select-attemptnumber']:checked\").val();\n\n this._refreshGradingPanel(null, this._lastUserId, '', attemptnumber);\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Add popout buttons\n *\n * @private\n * @method _addPopoutButtons\n * @param {JQuery} selector The region selector to add popout buttons to.\n */\n GradingPanel.prototype._addPopoutButtons = function(selector) {\n var region = $(selector);\n\n templates.render('mod_assign/popout_button', {}).done(function(html) {\n var parents = region.find('[data-fieldtype=\"filemanager\"],[data-fieldtype=\"editor\"],[data-fieldtype=\"grading\"]')\n .closest('.fitem');\n parents.addClass('has-popout').find('label').parent().append(html);\n\n region.on('click', '[data-region=\"popout-button\"]', this._togglePopout.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Make a div \"popout\" or \"popback\".\n *\n * @private\n * @method _togglePopout\n * @param {Event} event\n */\n GradingPanel.prototype._togglePopout = function(event) {\n event.preventDefault();\n var container = $(event.target).closest('.fitem');\n if (container.hasClass('popout')) {\n $('.popout').removeClass('popout');\n } else {\n $('.popout').removeClass('popout');\n container.addClass('popout');\n container.addClass('moodle-has-zindex');\n }\n };\n\n /**\n * Get the user context - re-render the template in the page.\n *\n * @private\n * @method _refreshGradingPanel\n * @param {Event} event\n * @param {Number} userid\n * @param {String} submissiondata serialised submission data.\n * @param {Integer} attemptnumber\n */\n GradingPanel.prototype._refreshGradingPanel = function(event, userid, submissiondata, attemptnumber) {\n var contextid = this._region.attr('data-contextid');\n if (typeof submissiondata === 'undefined') {\n submissiondata = '';\n }\n if (typeof attemptnumber === 'undefined') {\n attemptnumber = -1;\n }\n // Skip reloading if it is the same user.\n if (this._lastUserId == userid && this._lastAttemptNumber == attemptnumber && submissiondata === '') {\n return;\n }\n this._lastUserId = userid;\n this._lastAttemptNumber = attemptnumber;\n $(document).trigger('start-loading-user');\n // Tell behat to back off too.\n window.M.util.js_pending('mod-assign-loading-user');\n // First insert the loading template.\n templates.render('mod_assign/loading', {}).done(function(html, js) {\n // Update the page.\n this._niceReplaceNodeContents(this._region, html, js).done(function() {\n if (userid > 0) {\n this._region.show();\n // Reload the grading form \"fragment\" for this user.\n var params = {userid: userid, attemptnumber: attemptnumber, jsonformdata: JSON.stringify(submissiondata)};\n fragment.loadFragment('mod_assign', 'gradingpanel', contextid, params).done(function(html, js) {\n this._niceReplaceNodeContents(this._region, html, js)\n .done(function() {\n checker.saveFormState('[data-region=\"grade-panel\"] .gradeform');\n $(document).on('editor-content-restored', function() {\n // If the editor has some content that has been restored\n // then save the form state again for comparison.\n checker.saveFormState('[data-region=\"grade-panel\"] .gradeform');\n });\n $('[data-region=\"attempt-chooser\"]').on('click', this._chooseAttempt.bind(this));\n this._addPopoutButtons('[data-region=\"grade-panel\"] .gradeform');\n $(document).trigger('finish-loading-user');\n // Tell behat we are friends again.\n window.M.util.js_complete('mod-assign-loading-user');\n }.bind(this))\n .fail(notification.exception);\n }.bind(this)).fail(notification.exception);\n $('[data-region=\"review-panel\"]').show();\n } else {\n this._region.hide();\n $('[data-region=\"review-panel\"]').hide();\n $(document).trigger('finish-loading-user');\n // Tell behat we are friends again.\n window.M.util.js_complete('mod-assign-loading-user');\n }\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Get next user data and store it in global variables\n *\n * @private\n * @method _getNextUser\n * @param {Event} event\n * @param {Object} data Next user's data\n */\n GradingPanel.prototype._getNextUser = function(event, data) {\n this.nextUserId = data.nextUserId;\n this.nextUser = data.nextUser;\n };\n\n /**\n * Handle the save-and-show-next event\n *\n * @private\n * @method _handleSaveAndShowNext\n */\n GradingPanel.prototype._handleSaveAndShowNext = function() {\n this._submitForm(null, this.nextUserId, this.nextUser);\n };\n\n /**\n * Get the grade panel element.\n *\n * @method getPanelElement\n * @return {jQuery}\n */\n GradingPanel.prototype.getPanelElement = function() {\n return $('[data-region=\"grade-panel\"]');\n };\n\n /**\n * Hide the grade panel.\n *\n * @method collapsePanel\n */\n GradingPanel.prototype.collapsePanel = function() {\n this.getPanelElement().addClass('collapsed');\n };\n\n /**\n * Show the grade panel.\n *\n * @method expandPanel\n */\n GradingPanel.prototype.expandPanel = function() {\n this.getPanelElement().removeClass('collapsed');\n };\n\n /**\n * Register event listeners for the grade panel.\n *\n * @method registerEventListeners\n */\n GradingPanel.prototype.registerEventListeners = function() {\n var docElement = $(document);\n var region = $(this._region);\n // Add an event listener to prevent form submission when pressing enter key.\n region.on('submit', 'form', function(e) {\n e.preventDefault();\n });\n\n docElement.on('next-user', this._getNextUser.bind(this));\n docElement.on('user-changed', this._refreshGradingPanel.bind(this));\n docElement.on('save-changes', this._submitForm.bind(this));\n docElement.on('save-and-show-next', this._handleSaveAndShowNext.bind(this));\n docElement.on('reset', this._resetForm.bind(this));\n\n docElement.on('save-form-state', this._saveFormState.bind(this));\n\n docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL, function() {\n this.collapsePanel();\n }.bind(this));\n\n // We should expand if the review panel is collapsed.\n docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_GRADE_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n };\n\n return GradingPanel;\n});\n"],"names":["define","$","Y","notification","templates","fragment","ajax","str","checker","GradingEvents","FormEvents","Toast","FormChangeChecker","GradingPanel","selector","_regionSelector","_region","_userCache","registerEventListeners","prototype","_lastUserId","_lastAttemptNumber","nextUserId","nextUser","_niceReplaceNodeContents","node","html","js","promise","Deferred","fadeOut","replaceNodeContents","fadeIn","resolve","_saveFormState","checked","prop","val","_submitForm","event","commentAreaElement","document","querySelector","value","click","form","this","find","show","markFormSubmitted","trigger","notifyFormSubmittedByJavascript","data","serialize","assignmentid","attr","call","methodname","args","userid","jsonformdata","JSON","stringify","done","_handleFormSubmissionResponse","bind","fail","exception","formdata","response","length","get_string","then","add","catch","resetFormDirtyState","hide","_resetForm","e","Event","_refreshGradingPanel","_chooseAttempt","submissionsId","target","formhtml","getElementById","clone","wrap","get_strings","key","component","strs","confirm","attemptnumber","_addPopoutButtons","region","render","closest","addClass","parent","append","on","_togglePopout","preventDefault","container","hasClass","removeClass","submissiondata","contextid","window","M","util","js_pending","params","loadFragment","saveFormState","js_complete","_getNextUser","_handleSaveAndShowNext","getPanelElement","collapsePanel","expandPanel","docElement","COLLAPSE_GRADE_PANEL","COLLAPSE_REVIEW_PANEL","EXPAND_GRADE_PANEL"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/grading_review_panel.min.js b/mod/assign/amd/build/grading_review_panel.min.js deleted file mode 100644 index dfa1880b9a881..0000000000000 --- a/mod/assign/amd/build/grading_review_panel.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Javascript controller for the "Review" panel at the left of the page. - * - * @module mod_assign/grading_review_panel - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @since 3.1 - */ -define("mod_assign/grading_review_panel",["jquery","mod_assign/grading_events"],(function($,GradingEvents){var GradingReviewPanel=function(){this._region=$('[data-region="review-panel-content"]'),this.registerEventListeners()};return GradingReviewPanel.prototype._region=null,GradingReviewPanel.prototype.getReviewPanel=function(pluginname){return void 0===this._region.data("panel-owner")&&this._region.data("review-panel-plugin",pluginname),this._region.data("review-panel-plugin")==pluginname&&this._region[0]},GradingReviewPanel.prototype.getTogglePanelButton=function(){return this.getPanelElement().find('[data-region="review-panel-toggle"]')},GradingReviewPanel.prototype.getPanelElement=function(){return $('[data-region="review-panel"]')},GradingReviewPanel.prototype.getPanelContentElement=function(){return $('[data-region="review-panel-content"]')},GradingReviewPanel.prototype.togglePanel=function(){this.getPanelElement().hasClass("collapsed")?$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL):$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL)},GradingReviewPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed").removeClass("grade-panel-collapsed"),this.getPanelContentElement().attr("aria-hidden",!0)},GradingReviewPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed"),this.getPanelContentElement().removeAttr("aria-hidden")},GradingReviewPanel.prototype.registerEventListeners=function(){var toggleReviewPanelButton=this.getTogglePanelButton();toggleReviewPanelButton.click(function(e){this.togglePanel(),e.preventDefault()}.bind(this)),toggleReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.togglePanel(),e.preventDefault())}.bind(this));var docElement=$(document);docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.expandPanel(),this.getPanelElement().addClass("grade-panel-collapsed")}.bind(this)),docElement.on(GradingEvents.EXPAND_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.getPanelElement().removeClass("grade-panel-collapsed")}.bind(this))},GradingReviewPanel})); - -//# sourceMappingURL=grading_review_panel.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/grading_review_panel.min.js.map b/mod/assign/amd/build/grading_review_panel.min.js.map deleted file mode 100644 index c59ec4ce5d575..0000000000000 --- a/mod/assign/amd/build/grading_review_panel.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading_review_panel.min.js","sources":["../src/grading_review_panel.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Review\" panel at the left of the page.\n *\n * @module mod_assign/grading_review_panel\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'mod_assign/grading_events'], function($, GradingEvents) {\n\n /**\n * GradingReviewPanel class.\n *\n * @class mod_assign/grading_review_panel\n */\n var GradingReviewPanel = function() {\n this._region = $('[data-region=\"review-panel-content\"]');\n this.registerEventListeners();\n };\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingReviewPanel.prototype._region = null;\n\n /**\n * It is first come first served to get ownership of the grading review panel.\n * There can be only one.\n *\n * @public\n * @method getReviewPanel\n * @param {String} pluginname - the first plugin to ask for the panel gets it.\n * @return {DOMNode} or false\n */\n GradingReviewPanel.prototype.getReviewPanel = function(pluginname) {\n var owner = this._region.data('panel-owner');\n if (typeof owner == \"undefined\") {\n this._region.data('review-panel-plugin', pluginname);\n }\n if (this._region.data('review-panel-plugin') == pluginname) {\n return this._region[0];\n }\n return false;\n };\n\n /**\n * Get the toggle review panel button.\n *\n * @method getTogglePanelButton\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getTogglePanelButton = function() {\n return this.getPanelElement().find('[data-region=\"review-panel-toggle\"]');\n };\n\n /**\n * Get the review panel element.\n *\n * @method getPanelElement\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getPanelElement = function() {\n return $('[data-region=\"review-panel\"]');\n };\n\n /**\n * Get the review panel content element.\n *\n * @method getPanelContentElement\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getPanelContentElement = function() {\n return $('[data-region=\"review-panel-content\"]');\n };\n\n /**\n * Show/Hide the review panel.\n *\n * @method togglePanel\n */\n GradingReviewPanel.prototype.togglePanel = function() {\n if (this.getPanelElement().hasClass('collapsed')) {\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n } else {\n $(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL);\n }\n };\n\n /**\n * Hide the review panel.\n *\n * @method collapsePanel\n */\n GradingReviewPanel.prototype.collapsePanel = function() {\n this.getPanelElement().addClass('collapsed').removeClass('grade-panel-collapsed');\n this.getPanelContentElement().attr('aria-hidden', true);\n };\n\n /**\n * Show the review panel.\n *\n * @method expandPanel\n */\n GradingReviewPanel.prototype.expandPanel = function() {\n this.getPanelElement().removeClass('collapsed');\n this.getPanelContentElement().removeAttr('aria-hidden');\n };\n\n /**\n * Register event listeners for the review panel.\n *\n * @method registerEventListeners\n */\n GradingReviewPanel.prototype.registerEventListeners = function() {\n var toggleReviewPanelButton = this.getTogglePanelButton();\n toggleReviewPanelButton.click(function(e) {\n this.togglePanel();\n e.preventDefault();\n }.bind(this));\n\n toggleReviewPanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.togglePanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var docElement = $(document);\n docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL, function() {\n this.collapsePanel();\n }.bind(this));\n\n // Need special styling when grade panel is collapsed.\n docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL, function() {\n this.expandPanel();\n this.getPanelElement().addClass('grade-panel-collapsed');\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_REVIEW_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_GRADE_PANEL, function() {\n this.getPanelElement().removeClass('grade-panel-collapsed');\n }.bind(this));\n };\n\n return GradingReviewPanel;\n});\n"],"names":["define","$","GradingEvents","GradingReviewPanel","_region","registerEventListeners","prototype","getReviewPanel","pluginname","this","data","getTogglePanelButton","getPanelElement","find","getPanelContentElement","togglePanel","hasClass","document","trigger","EXPAND_REVIEW_PANEL","COLLAPSE_REVIEW_PANEL","collapsePanel","addClass","removeClass","attr","expandPanel","removeAttr","toggleReviewPanelButton","click","e","preventDefault","bind","keydown","metaKey","shiftKey","altKey","ctrlKey","keyCode","docElement","on","COLLAPSE_GRADE_PANEL","EXPAND_GRADE_PANEL"],"mappings":";;;;;;;;AAuBAA,yCAAO,CAAC,SAAU,8BAA8B,SAASC,EAAGC,mBAOpDC,mBAAqB,gBAChBC,QAAUH,EAAE,6CACZI,iCAITF,mBAAmBG,UAAUF,QAAU,KAWvCD,mBAAmBG,UAAUC,eAAiB,SAASC,wBAE/B,IADRC,KAAKL,QAAQM,KAAK,qBAErBN,QAAQM,KAAK,sBAAuBF,YAEzCC,KAAKL,QAAQM,KAAK,wBAA0BF,YACrCC,KAAKL,QAAQ,IAW5BD,mBAAmBG,UAAUK,qBAAuB,kBACzCF,KAAKG,kBAAkBC,KAAK,wCASvCV,mBAAmBG,UAAUM,gBAAkB,kBACpCX,EAAE,iCASbE,mBAAmBG,UAAUQ,uBAAyB,kBAC3Cb,EAAE,yCAQbE,mBAAmBG,UAAUS,YAAc,WACnCN,KAAKG,kBAAkBI,SAAS,aAChCf,EAAEgB,UAAUC,QAAQhB,cAAciB,qBAElClB,EAAEgB,UAAUC,QAAQhB,cAAckB,wBAS1CjB,mBAAmBG,UAAUe,cAAgB,gBACpCT,kBAAkBU,SAAS,aAAaC,YAAY,8BACpDT,yBAAyBU,KAAK,eAAe,IAQtDrB,mBAAmBG,UAAUmB,YAAc,gBAClCb,kBAAkBW,YAAY,kBAC9BT,yBAAyBY,WAAW,gBAQ7CvB,mBAAmBG,UAAUD,uBAAyB,eAC9CsB,wBAA0BlB,KAAKE,uBACnCgB,wBAAwBC,MAAM,SAASC,QAC9Bd,cACLc,EAAEC,kBACJC,KAAKtB,OAEPkB,wBAAwBK,QAAQ,SAASH,GAChCA,EAAEI,SAAYJ,EAAEK,UAAaL,EAAEM,QAAWN,EAAEO,SAC3B,KAAdP,EAAEQ,SAAgC,KAAdR,EAAEQ,eACjBtB,cACLc,EAAEC,mBAGZC,KAAKtB,WAEH6B,WAAarC,EAAEgB,UACnBqB,WAAWC,GAAGrC,cAAckB,sBAAuB,gBAC1CC,iBACPU,KAAKtB,OAGP6B,WAAWC,GAAGrC,cAAcsC,qBAAsB,gBACzCf,mBACAb,kBAAkBU,SAAS,0BAClCS,KAAKtB,OAEP6B,WAAWC,GAAGrC,cAAciB,oBAAqB,gBACxCM,eACPM,KAAKtB,OAEP6B,WAAWC,GAAGrC,cAAcuC,mBAAoB,gBACvC7B,kBAAkBW,YAAY,0BACrCQ,KAAKtB,QAGJN"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/actions.min.js b/mod/assign/amd/build/gradingapp/actions.min.js new file mode 100644 index 0000000000000..f23232e52aa93 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/actions.min.js @@ -0,0 +1,11 @@ +/** + * Javascript controller for the "Actions" panel at the bottom of the page. + * + * @module mod_assign/grading_actions + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/actions",["jquery","mod_assign/gradingapp/events"],(function($,GradingEvents){var GradingActions=function(selector){this._regionSelector=selector,this._region=$(selector),this.registerEventListeners()};return GradingActions.prototype._regionSelector=null,GradingActions.prototype._lastUserId=0,GradingActions.prototype._region=null,GradingActions.prototype._showActionsForm=function(event,userid){var form=this._region.find("[data-region=grading-actions-form]");userid!=this._lastUserId&&userid>0&&(this._lastUserId=userid),userid>0?form.removeClass("hide"):form.addClass("hide")},GradingActions.prototype._trigger=function(action){$(document).trigger(action)},GradingActions.prototype.getReviewPanelElement=function(){return $('[data-region="review-panel"]')},GradingActions.prototype.hasReviewPanelElement=function(){return this.getReviewPanelElement().length>0},GradingActions.prototype.getCollapseGradePanelButton=function(){return $('[data-region="grade-actions"] .collapse-grade-panel')},GradingActions.prototype.getCollapseReviewPanelButton=function(){return $('[data-region="grade-actions"] .collapse-review-panel')},GradingActions.prototype.getExpandAllPanelsButton=function(){return $('[data-region="grade-actions"] .collapse-none')},GradingActions.prototype.resetLayoutButtons=function(){this.getCollapseGradePanelButton().removeClass("active"),this.getCollapseReviewPanelButton().removeClass("active"),this.getExpandAllPanelsButton().removeClass("active")},GradingActions.prototype.collapseReviewPanel=function(){$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL),$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),this.resetLayoutButtons(),this.getCollapseReviewPanelButton().addClass("active")},GradingActions.prototype.collapseGradePanel=function(){$(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getCollapseGradePanelButton().addClass("active")},GradingActions.prototype.expandAllPanels=function(){$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getExpandAllPanelsButton().addClass("active")},GradingActions.prototype.registerEventListeners=function(){if(this.hasReviewPanelElement()){var collapseReviewPanelButton=this.getCollapseReviewPanelButton();collapseReviewPanelButton.click(function(e){this.collapseReviewPanel(),e.preventDefault()}.bind(this)),collapseReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.collapseReviewPanel(),e.preventDefault())}.bind(this));var collapseGradePanelButton=this.getCollapseGradePanelButton();collapseGradePanelButton.click(function(e){this.collapseGradePanel(),e.preventDefault()}.bind(this)),collapseGradePanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.collapseGradePanel(),e.preventDefault())}.bind(this));var expandAllPanelsButton=this.getExpandAllPanelsButton();expandAllPanelsButton.click(function(e){this.expandAllPanels(),e.preventDefault()}.bind(this)),expandAllPanelsButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.expandAllPanels(),e.preventDefault())}.bind(this))}$(document).on("user-changed",this._showActionsForm.bind(this)),this._region.find('[name="savechanges"]').on("click",this._trigger.bind(this,"save-changes")),this._region.find('[name="saveandshownext"]').on("click",this._trigger.bind(this,"save-and-show-next")),this._region.find('[name="resetbutton"]').on("click",this._trigger.bind(this,"reset")),this._region.find("form").on("submit",(function(e){e.preventDefault()}))},GradingActions})); + +//# sourceMappingURL=actions.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/actions.min.js.map b/mod/assign/amd/build/gradingapp/actions.min.js.map new file mode 100644 index 0000000000000..fec4d9f37f259 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/actions.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"actions.min.js","sources":["../../src/gradingapp/actions.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Actions\" panel at the bottom of the page.\n *\n * @module mod_assign/grading_actions\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'mod_assign/gradingapp/events'], function($, GradingEvents) {\n\n /**\n * GradingActions class.\n *\n * @class mod_assign/grading_actions\n * @param {String} selector The selector for the page region containing the actions panel.\n */\n var GradingActions = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n\n this.registerEventListeners();\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingActions.prototype._regionSelector = null;\n\n /** @property {Integer} Remember the last user id to prevent unnessecary reloads. */\n GradingActions.prototype._lastUserId = 0;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingActions.prototype._region = null;\n\n /**\n * Show the actions if there is valid user.\n *\n * @method _showActionsForm\n * @private\n * @param {Event} event\n * @param {Integer} userid\n */\n GradingActions.prototype._showActionsForm = function(event, userid) {\n var form = this._region.find('[data-region=grading-actions-form]');\n\n if (userid != this._lastUserId && userid > 0) {\n this._lastUserId = userid;\n }\n if (userid > 0) {\n form.removeClass('hide');\n } else {\n form.addClass('hide');\n }\n\n };\n\n /**\n * Trigger the named action.\n *\n * @method _trigger\n * @private\n * @param {String} action\n */\n GradingActions.prototype._trigger = function(action) {\n $(document).trigger(action);\n };\n\n /**\n * Get the review panel element.\n *\n * @method getReviewPanelElement\n * @return {jQuery}\n */\n GradingActions.prototype.getReviewPanelElement = function() {\n return $('[data-region=\"review-panel\"]');\n };\n\n /**\n * Check if the page has a review panel.\n *\n * @method hasReviewPanelElement\n * @return {bool}\n */\n GradingActions.prototype.hasReviewPanelElement = function() {\n return this.getReviewPanelElement().length > 0;\n };\n\n /**\n * Get the collapse grade panel button.\n *\n * @method getCollapseGradePanelButton\n * @return {jQuery}\n */\n GradingActions.prototype.getCollapseGradePanelButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-grade-panel');\n };\n\n /**\n * Get the collapse review panel button.\n *\n * @method getCollapseReviewPanelButton\n * @return {jQuery}\n */\n GradingActions.prototype.getCollapseReviewPanelButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-review-panel');\n };\n\n /**\n * Get the expand all panels button.\n *\n * @method getExpandAllPanelsButton\n * @return {jQuery}\n */\n GradingActions.prototype.getExpandAllPanelsButton = function() {\n return $('[data-region=\"grade-actions\"] .collapse-none');\n };\n\n /**\n * Remove the active state from all layout buttons.\n *\n * @method resetLayoutButtons\n */\n GradingActions.prototype.resetLayoutButtons = function() {\n this.getCollapseGradePanelButton().removeClass('active');\n this.getCollapseReviewPanelButton().removeClass('active');\n this.getExpandAllPanelsButton().removeClass('active');\n };\n\n /**\n * Hide the review panel.\n *\n * @method collapseReviewPanel\n */\n GradingActions.prototype.collapseReviewPanel = function() {\n $(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL);\n $(document).trigger(GradingEvents.EXPAND_GRADE_PANEL);\n this.resetLayoutButtons();\n this.getCollapseReviewPanelButton().addClass('active');\n };\n\n /**\n * Show/Hide the grade panel.\n *\n * @method collapseGradePanel\n */\n GradingActions.prototype.collapseGradePanel = function() {\n $(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL);\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n this.resetLayoutButtons();\n this.getCollapseGradePanelButton().addClass('active');\n };\n\n /**\n * Return the layout to default.\n *\n * @method expandAllPanels\n */\n GradingActions.prototype.expandAllPanels = function() {\n $(document).trigger(GradingEvents.EXPAND_GRADE_PANEL);\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n this.resetLayoutButtons();\n this.getExpandAllPanelsButton().addClass('active');\n };\n\n /**\n * Register event listeners for the grade panel.\n *\n * @method registerEventListeners\n */\n GradingActions.prototype.registerEventListeners = function() {\n // Don't need layout controls if there is no review panel.\n if (this.hasReviewPanelElement()) {\n var collapseReviewPanelButton = this.getCollapseReviewPanelButton();\n collapseReviewPanelButton.click(function(e) {\n this.collapseReviewPanel();\n e.preventDefault();\n }.bind(this));\n\n collapseReviewPanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.collapseReviewPanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var collapseGradePanelButton = this.getCollapseGradePanelButton();\n collapseGradePanelButton.click(function(e) {\n this.collapseGradePanel();\n e.preventDefault();\n }.bind(this));\n\n collapseGradePanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.collapseGradePanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var expandAllPanelsButton = this.getExpandAllPanelsButton();\n expandAllPanelsButton.click(function(e) {\n this.expandAllPanels();\n e.preventDefault();\n }.bind(this));\n\n expandAllPanelsButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.expandAllPanels();\n e.preventDefault();\n }\n }\n }.bind(this));\n }\n\n $(document).on('user-changed', this._showActionsForm.bind(this));\n\n this._region.find('[name=\"savechanges\"]').on('click', this._trigger.bind(this, 'save-changes'));\n this._region.find('[name=\"saveandshownext\"]').on('click', this._trigger.bind(this, 'save-and-show-next'));\n this._region.find('[name=\"resetbutton\"]').on('click', this._trigger.bind(this, 'reset'));\n this._region.find('form').on('submit', function(e) {\n e.preventDefault();\n });\n };\n\n return GradingActions;\n});\n"],"names":["define","$","GradingEvents","GradingActions","selector","_regionSelector","_region","registerEventListeners","prototype","_lastUserId","_showActionsForm","event","userid","form","this","find","removeClass","addClass","_trigger","action","document","trigger","getReviewPanelElement","hasReviewPanelElement","length","getCollapseGradePanelButton","getCollapseReviewPanelButton","getExpandAllPanelsButton","resetLayoutButtons","collapseReviewPanel","COLLAPSE_REVIEW_PANEL","EXPAND_GRADE_PANEL","collapseGradePanel","COLLAPSE_GRADE_PANEL","EXPAND_REVIEW_PANEL","expandAllPanels","collapseReviewPanelButton","click","e","preventDefault","bind","keydown","metaKey","shiftKey","altKey","ctrlKey","keyCode","collapseGradePanelButton","expandAllPanelsButton","on"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/events.min.js b/mod/assign/amd/build/gradingapp/events.min.js new file mode 100644 index 0000000000000..4a896a0891320 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/events.min.js @@ -0,0 +1,11 @@ +/** + * Events for the grading interface. + * + * @module mod_assign/grading_events + * @copyright 2016 Ryan Wyllie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/events",(function(){return{COLLAPSE_REVIEW_PANEL:"grading:collapse-review-panel",EXPAND_REVIEW_PANEL:"grading:expand-review-panel",COLLAPSE_GRADE_PANEL:"grading:collapse-grade-panel",EXPAND_GRADE_PANEL:"grading:expand-grade-panel"}})); + +//# sourceMappingURL=events.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/events.min.js.map b/mod/assign/amd/build/gradingapp/events.min.js.map new file mode 100644 index 0000000000000..45fcad3c5d50c --- /dev/null +++ b/mod/assign/amd/build/gradingapp/events.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"events.min.js","sources":["../../src/gradingapp/events.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Events for the grading interface.\n *\n * @module mod_assign/grading_events\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(function() {\n return {\n COLLAPSE_REVIEW_PANEL: 'grading:collapse-review-panel',\n EXPAND_REVIEW_PANEL: 'grading:expand-review-panel',\n COLLAPSE_GRADE_PANEL: 'grading:collapse-grade-panel',\n EXPAND_GRADE_PANEL: 'grading:expand-grade-panel',\n };\n});\n"],"names":["define","COLLAPSE_REVIEW_PANEL","EXPAND_REVIEW_PANEL","COLLAPSE_GRADE_PANEL","EXPAND_GRADE_PANEL"],"mappings":";;;;;;;;AAuBAA,uCAAO,iBACI,CACHC,sBAAuB,gCACvBC,oBAAqB,8BACrBC,qBAAsB,+BACtBC,mBAAoB"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/form_change_checker.min.js b/mod/assign/amd/build/gradingapp/form_change_checker.min.js new file mode 100644 index 0000000000000..0afe907cbe21f --- /dev/null +++ b/mod/assign/amd/build/gradingapp/form_change_checker.min.js @@ -0,0 +1,11 @@ +/** + * Simple method to check for changes to a form between two points in time. + * + * @module mod_assign/grading_form_change_checker + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/form_change_checker",["jquery"],(function($){return{saveFormState:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize();$(selector).data("saved-form-state",data)},checkFormForChanges:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize(),previousdata=$(selector).data("saved-form-state");return void 0!==previousdata&&previousdata!=data}}})); + +//# sourceMappingURL=form_change_checker.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/form_change_checker.min.js.map b/mod/assign/amd/build/gradingapp/form_change_checker.min.js.map new file mode 100644 index 0000000000000..d2961dded9f67 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/form_change_checker.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"form_change_checker.min.js","sources":["../../src/gradingapp/form_change_checker.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Simple method to check for changes to a form between two points in time.\n *\n * @module mod_assign/grading_form_change_checker\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery'], function($) {\n\n return {\n /**\n * Save the values in the form to a data attribute so they can be compared later for changes.\n *\n * @method saveFormState\n * @param {String} selector The selector for the form element.\n */\n saveFormState: function(selector) {\n $(selector).trigger('save-form-state');\n var data = $(selector).serialize();\n $(selector).data('saved-form-state', data);\n },\n\n /**\n * Compare the current values in the form to the previously saved state.\n *\n * @method checkFormForChanges\n * @param {String} selector The selector for the form element.\n * @return {Boolean} True if there are changes to the form data.\n */\n checkFormForChanges: function(selector) {\n\n $(selector).trigger('save-form-state');\n\n var data = $(selector).serialize(),\n previousdata = $(selector).data('saved-form-state');\n\n if (typeof previousdata === 'undefined') {\n return false;\n }\n return (previousdata != data);\n }\n };\n});\n"],"names":["define","$","saveFormState","selector","trigger","data","serialize","checkFormForChanges","previousdata"],"mappings":";;;;;;;;AAuBAA,mDAAO,CAAC,WAAW,SAASC,SAEjB,CAOHC,cAAe,SAASC,UACpBF,EAAEE,UAAUC,QAAQ,uBAChBC,KAAOJ,EAAEE,UAAUG,YACvBL,EAAEE,UAAUE,KAAK,mBAAoBA,OAUzCE,oBAAqB,SAASJ,UAE1BF,EAAEE,UAAUC,QAAQ,uBAEhBC,KAAOJ,EAAEE,UAAUG,YACnBE,aAAeP,EAAEE,UAAUE,KAAK,gCAER,IAAjBG,cAGHA,cAAgBH"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/navigation.min.js b/mod/assign/amd/build/gradingapp/navigation.min.js new file mode 100644 index 0000000000000..81c5c4e777c49 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/navigation.min.js @@ -0,0 +1,11 @@ +/** + * Javascript to handle changing users via the user selector in the header. + * + * @module mod_assign/grading_navigation + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/navigation",["jquery","core/notification","core/str","core/form-autocomplete","core/ajax","core_user/repository","mod_assign/gradingapp/form_change_checker"],(function($,notification,str,autocomplete,ajax,UserRepository,checker){var GradingNavigation=function(selector){this._regionSelector=selector,this._region=$(selector),this._filters=[],this._users=[],this._filteredUsers=[],this._lastXofYUpdate=0,this._firstLoadUsers=!0;let url=new URL(window.location);parseInt(url.searchParams.get("treset"))>0&&(url.searchParams.delete("treset"),window.history.replaceState({},"",url)),this._loadAllUsers(),this._region.find('[data-action="previous-user"]').on("click",this._handlePreviousUser.bind(this)),this._region.find('[data-action="next-user"]').on("click",this._handleNextUser.bind(this)),this._region.find('[data-action="change-user"]').on("change",this._handleChangeUser.bind(this)),this._region.find('[data-region="user-filters"]').on("click",this._toggleExpandFilters.bind(this)),this._region.find('[data-region="user-resettable"]').on("click",this._toggleResetTable.bind()),$(document).on("user-changed",this._refreshSelector.bind(this)),$(document).on("done-saving-show-next",this._handleNextUser.bind(this));var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).on("change","select",this._filterChanged.bind(this));var userid=$('[data-region="grading-navigation-panel"]').data("first-userid");userid&&this._selectUserById(userid),str.get_string("changeuser","mod_assign").done((function(s){autocomplete.enhance("[data-action=change-user]",!1,"mod_assign/participant_selector",s)})).fail(notification.exception),$(document).bind("start-loading-user",function(){this._isLoading=!0}.bind(this)),$(document).bind("finish-loading-user",function(){this._isLoading=!1}.bind(this))};return GradingNavigation.prototype._isLoading=!1,GradingNavigation.prototype._regionSelector=null,GradingNavigation.prototype._filters=null,GradingNavigation.prototype._users=null,GradingNavigation.prototype._region=null,GradingNavigation.prototype._lastFilters="",GradingNavigation.prototype._loadAllUsers=function(){var select=this._region.find("[data-action=change-user]"),assignmentid=select.attr("data-assignmentid"),groupid=select.attr("data-groupid"),filterPanel=this._region.find('[data-region="configure-filters"]'),filter=filterPanel.find('select[name="filter"]').val(),workflowFilter=filterPanel.find('select[name="workflowfilter"]');workflowFilter&&(filter+=","+workflowFilter.val());var markerFilter=filterPanel.find('select[name="markerfilter"]');return markerFilter&&(filter+=","+markerFilter.val()),this._lastFilters!=filter&&(this._lastFilters=filter,ajax.call([{methodname:"mod_assign_list_participants",args:{assignid:assignmentid,groupid:groupid,filter:"",onlyids:!0,tablesort:!0},done:this._usersLoaded.bind(this),fail:notification.exception}]),!0)},GradingNavigation.prototype._usersLoaded=function(users){if(this._firstLoadUsers=!1,this._filteredUsers=this._users=users,this._users.length){var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).find('select[name="filter"]').trigger("change")}else this._selectNoUser();this._triggerNextUserEvent()},GradingNavigation.prototype._checkClickOutsideConfigureFilters=function(event){var configPanel=this._region.find('[data-region="configure-filters"]');if(!configPanel.is(event.target)&&0===configPanel.has(event.target).length){var toggleLink=this._region.find('[data-region="user-filters"]');configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")}},GradingNavigation.prototype._updateFilterPreferences=function(userId,filterList,preferenceNames){var preferences=[],i=0;if(0==filterList.length||this._firstLoadUsers){var deferred=$.Deferred();return deferred.resolve(),deferred}for(i=0;i0&&!isNaN(useridnumber)&&useridnumber>0&&$(document).trigger("user-changed",useridnumber)))},GradingNavigation.prototype._toggleExpandFilters=function(event){event.preventDefault();var toggleLink=$(event.target).closest('[data-region="user-filters"]'),expanded="true"==toggleLink.attr("aria-expanded"),configPanel=$(document.getElementById(toggleLink.attr("aria-controls")));expanded?(configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")):(configPanel.css("display","inline-block"),configPanel.attr("aria-hidden","false"),toggleLink.attr("aria-expanded","true"),event.stopPropagation(),$(document).on("click.mod_assign_grading_navigation",this._checkClickOutsideConfigureFilters.bind(this)))},GradingNavigation.prototype._toggleResetTable=function(){let url=new URL(window.location);url.searchParams.set("treset","1"),window.location.href=url},GradingNavigation.prototype._handlePreviousUser=function(e){e.preventDefault();var currentUserId=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;for(i=0;i0&&$(document).trigger("user-changed",userid)}else count&&this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._setCountString=function(x,y){var updateNumber;this._lastXofYUpdate++,updateNumber=this._lastXofYUpdate;var param={x:x,y:y};str.get_string("xofy","mod_assign",param).done(function(s){updateNumber==this._lastXofYUpdate&&this._region.find('[data-region="user-count-summary"]').text(s)}.bind(this)).fail(notification.exception)},GradingNavigation.prototype._refreshCount=function(){var userid=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;if(isNaN(userid)||userid<=0)this._region.find('[data-region="user-count"]').hide();else{for(this._region.find('[data-region="user-count"]').show(),i=0;i0){var url=new URL(window.location);if(parseInt(url.searchParams.get("blindid"))>0){var newid=this._filteredUsers[currentIndex-1].recordid;url.searchParams.set("blindid",newid)}else url.searchParams.set("userid",userid);window.history.replaceState({},"",url)}}},GradingNavigation.prototype._refreshSelector=function(event,userid){var select=this._region.find("[data-action=change-user]");userid=parseInt(userid,10),!isNaN(userid)&&userid>0&&select.attr("data-selected",userid),this._refreshCount()},GradingNavigation.prototype._triggerNextUserEvent=function(){this._filteredUsers.length>1?$(document).trigger("next-user",{nextUserId:null,nextUser:!0}):$(document).trigger("next-user",{nextUser:!1})},GradingNavigation.prototype._handleChangeUser=function(){var select=this._region.find("[data-action=change-user]"),userid=parseInt(select.val(),10);this._isLoading||(checker.checkFormForChanges('[data-region="grade-panel"] .gradeform')?str.get_strings([{key:"unsavedchanges",component:"mod_assign"},{key:"unsavedchangesquestion",component:"mod_assign"},{key:"saveandcontinue",component:"mod_assign"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger("save-changes",userid)}))})):!isNaN(userid)&&userid>0&&(select.attr("data-selected",userid),$(document).trigger("user-changed",userid)))},GradingNavigation})); + +//# sourceMappingURL=navigation.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/navigation.min.js.map b/mod/assign/amd/build/gradingapp/navigation.min.js.map new file mode 100644 index 0000000000000..ee818ffedbd9b --- /dev/null +++ b/mod/assign/amd/build/gradingapp/navigation.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"navigation.min.js","sources":["../../src/gradingapp/navigation.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript to handle changing users via the user selector in the header.\n *\n * @module mod_assign/grading_navigation\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/notification', 'core/str', 'core/form-autocomplete',\n 'core/ajax', 'core_user/repository', 'mod_assign/gradingapp/form_change_checker'],\n function($, notification, str, autocomplete, ajax, UserRepository, checker) {\n\n /**\n * GradingNavigation class.\n *\n * @class mod_assign/grading_navigation\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var GradingNavigation = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._filters = [];\n this._users = [];\n this._filteredUsers = [];\n this._lastXofYUpdate = 0;\n this._firstLoadUsers = true;\n\n let url = new URL(window.location);\n if (parseInt(url.searchParams.get('treset')) > 0) {\n // Remove 'treset' url parameter to make sure that\n // table preferences won't be reset on page refresh.\n url.searchParams.delete('treset');\n window.history.replaceState({}, \"\", url);\n }\n\n // Get the current user list from a webservice.\n this._loadAllUsers();\n\n // We do not allow navigation while ajax requests are pending.\n // Attach listeners to the select and arrow buttons.\n\n this._region.find('[data-action=\"previous-user\"]').on('click', this._handlePreviousUser.bind(this));\n this._region.find('[data-action=\"next-user\"]').on('click', this._handleNextUser.bind(this));\n this._region.find('[data-action=\"change-user\"]').on('change', this._handleChangeUser.bind(this));\n this._region.find('[data-region=\"user-filters\"]').on('click', this._toggleExpandFilters.bind(this));\n this._region.find('[data-region=\"user-resettable\"]').on('click', this._toggleResetTable.bind());\n\n $(document).on('user-changed', this._refreshSelector.bind(this));\n $(document).on('done-saving-show-next', this._handleNextUser.bind(this));\n\n // Position the configure filters panel under the link that expands it.\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n configPanel.on('change', 'select', this._filterChanged.bind(this));\n\n var userid = $('[data-region=\"grading-navigation-panel\"]').data('first-userid');\n if (userid) {\n this._selectUserById(userid);\n }\n\n str.get_string('changeuser', 'mod_assign').done(function(s) {\n autocomplete.enhance('[data-action=change-user]', false, 'mod_assign/participant_selector', s);\n }\n ).fail(notification.exception);\n\n $(document).bind(\"start-loading-user\", function() {\n this._isLoading = true;\n }.bind(this));\n $(document).bind(\"finish-loading-user\", function() {\n this._isLoading = false;\n }.bind(this));\n };\n\n /** @property {Boolean} Boolean tracking active ajax requests. */\n GradingNavigation.prototype._isLoading = false;\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingNavigation.prototype._regionSelector = null;\n\n /** @property {Array} The list of active filter keys */\n GradingNavigation.prototype._filters = null;\n\n /** @property {Array} The list of users */\n GradingNavigation.prototype._users = null;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingNavigation.prototype._region = null;\n\n /** @property {String} Last active filters */\n GradingNavigation.prototype._lastFilters = '';\n\n /**\n * Load the list of all users for this assignment.\n *\n * @private\n * @method _loadAllUsers\n * @return {Boolean} True if the user list was fetched.\n */\n GradingNavigation.prototype._loadAllUsers = function() {\n var select = this._region.find('[data-action=change-user]');\n var assignmentid = select.attr('data-assignmentid');\n var groupid = select.attr('data-groupid');\n\n var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n var filter = filterPanel.find('select[name=\"filter\"]').val();\n var workflowFilter = filterPanel.find('select[name=\"workflowfilter\"]');\n if (workflowFilter) {\n filter += ',' + workflowFilter.val();\n }\n var markerFilter = filterPanel.find('select[name=\"markerfilter\"]');\n if (markerFilter) {\n filter += ',' + markerFilter.val();\n }\n\n if (this._lastFilters == filter) {\n return false;\n }\n this._lastFilters = filter;\n\n ajax.call([{\n methodname: 'mod_assign_list_participants',\n args: {assignid: assignmentid, groupid: groupid, filter: '', onlyids: true, tablesort: true},\n done: this._usersLoaded.bind(this),\n fail: notification.exception\n }]);\n return true;\n };\n\n /**\n * Call back to rebuild the user selector and x of y info when the user list is updated.\n *\n * @private\n * @method _usersLoaded\n * @param {Array} users\n */\n GradingNavigation.prototype._usersLoaded = function(users) {\n this._firstLoadUsers = false;\n this._filteredUsers = this._users = users;\n if (this._users.length) {\n // Position the configure filters panel under the link that expands it.\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n configPanel.find('select[name=\"filter\"]').trigger('change');\n } else {\n this._selectNoUser();\n }\n this._triggerNextUserEvent();\n };\n\n /**\n * Close the configure filters panel if a click is detected outside of it.\n *\n * @private\n * @method _checkClickOutsideConfigureFilters\n * @param {Event} event\n */\n GradingNavigation.prototype._checkClickOutsideConfigureFilters = function(event) {\n var configPanel = this._region.find('[data-region=\"configure-filters\"]');\n\n if (!configPanel.is(event.target) && configPanel.has(event.target).length === 0) {\n var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n\n configPanel.hide();\n configPanel.attr('aria-hidden', 'true');\n toggleLink.attr('aria-expanded', 'false');\n $(document).unbind('click.mod_assign_grading_navigation');\n }\n };\n\n /**\n * Close the configure filters panel if a click is detected outside of it.\n *\n * @private\n * @method _updateFilterPreference\n * @param {Number} userId The current user id.\n * @param {Array} filterList The list of current filter values.\n * @param {Array} preferenceNames The names of the preferences to update\n * @return {Promise} Resolved when all the preferences are updated.\n */\n GradingNavigation.prototype._updateFilterPreferences = function(userId, filterList, preferenceNames) {\n var preferences = [],\n i = 0;\n\n if (filterList.length == 0 || this._firstLoadUsers) {\n // Nothing to update.\n var deferred = $.Deferred();\n deferred.resolve();\n return deferred;\n }\n // General filter.\n // Set the user preferences to the current filters.\n for (i = 0; i < filterList.length; i++) {\n var newValue = filterList[i];\n if (newValue == 'none') {\n newValue = '';\n }\n\n preferences.push({\n userid: userId,\n name: preferenceNames[i],\n value: newValue\n });\n }\n\n return UserRepository.setUserPreferences(preferences);\n };\n /**\n * Turn a filter on or off.\n *\n * @private\n * @method _filterChanged\n */\n GradingNavigation.prototype._filterChanged = function() {\n // There are 3 types of filter right now.\n var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n var filters = filterPanel.find('select');\n var preferenceNames = [];\n\n this._filters = [];\n filters.each(function(idx, ele) {\n var element = $(ele);\n this._filters.push(element.val());\n preferenceNames.push('assign_' + element.prop('name'));\n }.bind(this));\n\n // Update the active filter string.\n var filterlist = [];\n filterPanel.find('option:checked').each(function(idx, ele) {\n filterlist[filterlist.length] = $(ele).text();\n });\n if (filterlist.length) {\n this._region.find('[data-region=\"user-filters\"] span').text(filterlist.join(', '));\n } else {\n str.get_string('nofilters', 'mod_assign').done(function(s) {\n this._region.find('[data-region=\"user-filters\"] span').text(s);\n }.bind(this)).fail(notification.exception);\n }\n\n var select = this._region.find('[data-action=change-user]');\n var currentUserID = select.data('currentuserid');\n this._updateFilterPreferences(currentUserID, this._filters, preferenceNames).done(function() {\n // Reload the list of users to apply the new filters.\n if (!this._loadAllUsers()) {\n var userid = parseInt(select.attr('data-selected'));\n let foundIndex = null;\n // Search the returned users for the current selection.\n $.each(this._filteredUsers, function(index, user) {\n if (userid == user.id) {\n foundIndex = index;\n }\n });\n\n if (this._filteredUsers.length && foundIndex !== null) {\n this._selectUserById(this._filteredUsers[foundIndex].id);\n } else {\n this._selectNoUser();\n }\n\n }\n }.bind(this)).fail(notification.exception);\n this._refreshCount();\n };\n\n /**\n * Select no users, because no users match the filters.\n *\n * @private\n * @method _selectNoUser\n */\n GradingNavigation.prototype._selectNoUser = function() {\n // Detect unsaved changes, and offer to save them - otherwise change user right now.\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', -1);\n });\n });\n } else {\n $(document).trigger('user-changed', -1);\n }\n };\n\n /**\n * Select the specified user by id.\n *\n * @private\n * @method _selectUserById\n * @param {Number} userid\n */\n GradingNavigation.prototype._selectUserById = function(userid) {\n var select = this._region.find('[data-action=change-user]');\n var useridnumber = parseInt(userid, 10);\n\n // Detect unsaved changes, and offer to save them - otherwise change user right now.\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', useridnumber);\n });\n });\n } else {\n select.attr('data-selected', userid);\n\n // If we have some filtered users, and userid is specified, then trigger change.\n if (this._filteredUsers.length > 0 && !isNaN(useridnumber) && useridnumber > 0) {\n $(document).trigger('user-changed', useridnumber);\n }\n }\n };\n\n /**\n * Expand or collapse the filter config panel.\n *\n * @private\n * @method _toggleExpandFilters\n * @param {Event} event\n */\n GradingNavigation.prototype._toggleExpandFilters = function(event) {\n event.preventDefault();\n var toggleLink = $(event.target).closest('[data-region=\"user-filters\"]');\n var expanded = toggleLink.attr('aria-expanded') == 'true';\n var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n if (expanded) {\n configPanel.hide();\n configPanel.attr('aria-hidden', 'true');\n toggleLink.attr('aria-expanded', 'false');\n $(document).unbind('click.mod_assign_grading_navigation');\n } else {\n configPanel.css('display', 'inline-block');\n configPanel.attr('aria-hidden', 'false');\n toggleLink.attr('aria-expanded', 'true');\n event.stopPropagation();\n $(document).on('click.mod_assign_grading_navigation', this._checkClickOutsideConfigureFilters.bind(this));\n }\n };\n\n /**\n * Reset table preferences.\n *\n * @private\n * @method _toggleResetTable\n */\n GradingNavigation.prototype._toggleResetTable = function() {\n let url = new URL(window.location);\n url.searchParams.set('treset', '1');\n window.location.href = url;\n };\n\n /**\n * Change to the previous user in the grading list.\n *\n * @private\n * @method _handlePreviousUser\n * @param {Event} e\n */\n GradingNavigation.prototype._handlePreviousUser = function(e) {\n e.preventDefault();\n var select = this._region.find('[data-action=change-user]');\n var currentUserId = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == currentUserId) {\n currentIndex = i;\n break;\n }\n }\n\n var count = this._filteredUsers.length;\n var newIndex = (currentIndex - 1);\n if (newIndex < 0) {\n newIndex = count - 1;\n }\n\n if (count) {\n this._selectUserById(this._filteredUsers[newIndex].id);\n }\n };\n\n /**\n * Change to the next user in the grading list.\n *\n * @param {Event} e\n * @param {Boolean} saved Has the form already been saved? Skips checking for changes if true.\n */\n GradingNavigation.prototype._handleNextUser = function(e, saved) {\n e.preventDefault();\n var select = this._region.find('[data-action=change-user]');\n var currentUserId = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == currentUserId) {\n currentIndex = i;\n break;\n }\n }\n\n var count = this._filteredUsers.length;\n var newIndex = (currentIndex + 1) % count;\n\n if (saved && count) {\n // If we've already saved the grade, skip checking if we've made any changes.\n var userid = this._filteredUsers[newIndex].id;\n var useridnumber = parseInt(userid, 10);\n select.attr('data-selected', userid);\n if (!isNaN(useridnumber) && useridnumber > 0) {\n $(document).trigger('user-changed', userid);\n }\n } else if (count) {\n this._selectUserById(this._filteredUsers[newIndex].id);\n }\n };\n\n /**\n * Set count string. This method only sets the value for the last time it was ever called to deal\n * with promises that return in a non-predictable order.\n *\n * @private\n * @method _setCountString\n * @param {Number} x\n * @param {Number} y\n */\n GradingNavigation.prototype._setCountString = function(x, y) {\n var updateNumber = 0;\n this._lastXofYUpdate++;\n updateNumber = this._lastXofYUpdate;\n\n var param = {x: x, y: y};\n str.get_string('xofy', 'mod_assign', param).done(function(s) {\n if (updateNumber == this._lastXofYUpdate) {\n this._region.find('[data-region=\"user-count-summary\"]').text(s);\n }\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Rebuild the x of y string.\n *\n * @private\n * @method _refreshCount\n */\n GradingNavigation.prototype._refreshCount = function() {\n var select = this._region.find('[data-action=change-user]');\n var userid = select.attr('data-selected');\n var i = 0;\n var currentIndex = 0;\n\n if (isNaN(userid) || userid <= 0) {\n this._region.find('[data-region=\"user-count\"]').hide();\n } else {\n this._region.find('[data-region=\"user-count\"]').show();\n\n for (i = 0; i < this._filteredUsers.length; i++) {\n if (this._filteredUsers[i].id == userid) {\n currentIndex = i;\n break;\n }\n }\n var count = this._filteredUsers.length;\n if (count) {\n currentIndex += 1;\n }\n this._setCountString(currentIndex, count);\n // Update window URL\n if (currentIndex > 0) {\n var url = new URL(window.location);\n if (parseInt(url.searchParams.get('blindid')) > 0) {\n var newid = this._filteredUsers[currentIndex - 1].recordid;\n url.searchParams.set('blindid', newid);\n } else {\n url.searchParams.set('userid', userid);\n }\n // We do this so a browser refresh will return to the same user.\n window.history.replaceState({}, \"\", url);\n }\n }\n };\n\n /**\n * Respond to a user-changed event by updating the selector.\n *\n * @private\n * @method _refreshSelector\n * @param {Event} event\n * @param {String} userid\n */\n GradingNavigation.prototype._refreshSelector = function(event, userid) {\n var select = this._region.find('[data-action=change-user]');\n userid = parseInt(userid, 10);\n\n if (!isNaN(userid) && userid > 0) {\n select.attr('data-selected', userid);\n }\n this._refreshCount();\n };\n\n /**\n * Trigger the next user event depending on the number of filtered users\n *\n * @private\n * @method _triggerNextUserEvent\n */\n GradingNavigation.prototype._triggerNextUserEvent = function() {\n if (this._filteredUsers.length > 1) {\n $(document).trigger('next-user', {nextUserId: null, nextUser: true});\n } else {\n $(document).trigger('next-user', {nextUser: false});\n }\n };\n\n /**\n * Change to a different user in the grading list.\n *\n * @private\n * @method _handleChangeUser\n */\n GradingNavigation.prototype._handleChangeUser = function() {\n var select = this._region.find('[data-action=change-user]');\n var userid = parseInt(select.val(), 10);\n\n if (this._isLoading) {\n return;\n }\n if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n // Form has changes, so we need to confirm before switching users.\n str.get_strings([\n {key: 'unsavedchanges', component: 'mod_assign'},\n {key: 'unsavedchangesquestion', component: 'mod_assign'},\n {key: 'saveandcontinue', component: 'mod_assign'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n $(document).trigger('save-changes', userid);\n });\n });\n } else {\n if (!isNaN(userid) && userid > 0) {\n select.attr('data-selected', userid);\n\n $(document).trigger('user-changed', userid);\n }\n }\n };\n\n return GradingNavigation;\n});\n"],"names":["define","$","notification","str","autocomplete","ajax","UserRepository","checker","GradingNavigation","selector","_regionSelector","_region","_filters","_users","_filteredUsers","_lastXofYUpdate","_firstLoadUsers","url","URL","window","location","parseInt","searchParams","get","delete","history","replaceState","_loadAllUsers","find","on","this","_handlePreviousUser","bind","_handleNextUser","_handleChangeUser","_toggleExpandFilters","_toggleResetTable","document","_refreshSelector","toggleLink","getElementById","attr","_filterChanged","userid","data","_selectUserById","get_string","done","s","enhance","fail","exception","_isLoading","prototype","_lastFilters","select","assignmentid","groupid","filterPanel","filter","val","workflowFilter","markerFilter","call","methodname","args","assignid","onlyids","tablesort","_usersLoaded","users","length","trigger","_selectNoUser","_triggerNextUserEvent","_checkClickOutsideConfigureFilters","event","configPanel","is","target","has","hide","unbind","_updateFilterPreferences","userId","filterList","preferenceNames","preferences","i","deferred","Deferred","resolve","newValue","push","name","value","setUserPreferences","filters","each","idx","ele","element","prop","filterlist","text","join","currentUserID","foundIndex","index","user","id","_refreshCount","checkFormForChanges","get_strings","key","component","strs","confirm","useridnumber","isNaN","preventDefault","closest","expanded","css","stopPropagation","set","href","e","currentUserId","currentIndex","count","newIndex","saved","_setCountString","x","y","updateNumber","param","show","newid","recordid","nextUserId","nextUser"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/navigation_user_info.min.js b/mod/assign/amd/build/gradingapp/navigation_user_info.min.js new file mode 100644 index 0000000000000..71e50cdb611c5 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/navigation_user_info.min.js @@ -0,0 +1,11 @@ +/** + * Javascript controller for the "User summary" panel at the top of the page. + * + * @module mod_assign/grading_navigation_user_info + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/navigation_user_info",["jquery","core/notification","core/ajax","core/templates"],(function($,notification,ajax,templates){var UserInfo=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache={},$(document).on("user-changed",this._refreshUserInfo.bind(this))};return UserInfo.prototype._regionSelector=null,UserInfo.prototype._userCache=null,UserInfo.prototype._region=null,UserInfo.prototype._lastUserId=0,UserInfo.prototype._getAssignmentId=function(){return this._region.attr("data-assignmentid")},UserInfo.prototype._refreshUserInfo=function(event,userid){var promise=$.Deferred();this._region.attr("data-userid",userid),this._lastUserId!=userid&&(this._lastUserId=userid,templates.render("mod_assign/loading",{}).done(function(html,js){if(this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this)),userid<0)templates.render("mod_assign/gradingapp/navigation_no_users",{}).done(function(html,js){userid==this._lastUserId&&this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception);else{if(void 0!==this._userCache[userid])promise.resolve(this._userCache[userid]);else{var assignmentId=this._getAssignmentId();ajax.call([{methodname:"mod_assign_get_participant",args:{userid:userid,assignid:assignmentId,embeduser:!0}}])[0].done(function(participant){participant.hasOwnProperty("id")?(this._userCache[userid]=participant,promise.resolve(this._userCache[userid])):promise.reject("No users")}.bind(this)).fail(notification.exception)}promise.done(function(context){var identityfields=$("[data-showuseridentity]").data("showuseridentity").split(","),identity=[];context.courseid=$('[data-region="grading-navigation-panel"]').attr("data-courseid"),context.user&&($.each(identityfields,(function(i,k){void 0!==context.user[k]&&""!==context.user[k]&&(context.hasidentity=!0,identity.push(context.user[k]))})),context.identity=identity.join(", "),context.user.profileimageurl&&(context.profileimageurl=context.user.profileimageurl)),templates.render("mod_assign/gradingapp/navigation_user_summary",context).done(function(html,js){userid==this._lastUserId&&this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this)).fail(function(){templates.render("mod_assign/gradingapp/navigation_no_users",{}).done(function(html,js){this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this))}}.bind(this)).fail(notification.exception))},UserInfo})); + +//# sourceMappingURL=navigation_user_info.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/navigation_user_info.min.js.map b/mod/assign/amd/build/gradingapp/navigation_user_info.min.js.map new file mode 100644 index 0000000000000..b6bf8e1316ff5 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/navigation_user_info.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"navigation_user_info.min.js","sources":["../../src/gradingapp/navigation_user_info.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"User summary\" panel at the top of the page.\n *\n * @module mod_assign/grading_navigation_user_info\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function($, notification, ajax, templates) {\n\n /**\n * UserInfo class.\n *\n * @class mod_assign/grading_navigation_user_info\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var UserInfo = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._userCache = {};\n\n $(document).on('user-changed', this._refreshUserInfo.bind(this));\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n UserInfo.prototype._regionSelector = null;\n\n /** @property {Array} Cache of user info contexts. */\n UserInfo.prototype._userCache = null;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n UserInfo.prototype._region = null;\n\n /** @property {Integer} Remember the last user id to prevent unnecessary reloads. */\n UserInfo.prototype._lastUserId = 0;\n\n /**\n * Get the assignment id\n *\n * @private\n * @method _getAssignmentId\n * @return {Integer} assignment id\n */\n UserInfo.prototype._getAssignmentId = function() {\n return this._region.attr('data-assignmentid');\n };\n\n /**\n * Get the user context - re-render the template in the page.\n *\n * @private\n * @method _refreshUserInfo\n * @param {Event} event\n * @param {Number} userid\n */\n UserInfo.prototype._refreshUserInfo = function(event, userid) {\n var promise = $.Deferred();\n\n // Put the current user ID in the DOM so yui can access it.\n this._region.attr('data-userid', userid);\n\n // Skip reloading if it is the same user.\n if (this._lastUserId == userid) {\n return;\n }\n this._lastUserId = userid;\n\n // First insert the loading template.\n templates.render('mod_assign/loading', {}).done(function(html, js) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n\n if (userid < 0) {\n // Render the template.\n templates.render('mod_assign/gradingapp/navigation_no_users', {}).done(function(html, js) {\n if (userid == this._lastUserId) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }\n }.bind(this)).fail(notification.exception);\n return;\n }\n\n if (typeof this._userCache[userid] !== \"undefined\") {\n promise.resolve(this._userCache[userid]);\n } else {\n // Load context from ajax.\n var assignmentId = this._getAssignmentId();\n var requests = ajax.call([{\n methodname: 'mod_assign_get_participant',\n args: {\n userid: userid,\n assignid: assignmentId,\n embeduser: true\n }\n }]);\n\n requests[0].done(function(participant) {\n if (!participant.hasOwnProperty('id')) {\n promise.reject('No users');\n } else {\n this._userCache[userid] = participant;\n promise.resolve(this._userCache[userid]);\n }\n }.bind(this)).fail(notification.exception);\n }\n\n promise.done(function(context) {\n var identityfields = $('[data-showuseridentity]').data('showuseridentity').split(','),\n identity = [];\n // Render the template.\n context.courseid = $('[data-region=\"grading-navigation-panel\"]').attr('data-courseid');\n\n if (context.user) {\n // Build a string for the visible identity fields listed in showuseridentity config setting.\n $.each(identityfields, function(i, k) {\n if (typeof context.user[k] !== 'undefined' && context.user[k] !== '') {\n context.hasidentity = true;\n identity.push(context.user[k]);\n }\n });\n context.identity = identity.join(', ');\n\n // Add profile image url to context.\n if (context.user.profileimageurl) {\n context.profileimageurl = context.user.profileimageurl;\n }\n }\n\n templates.render('mod_assign/gradingapp/navigation_user_summary', context).done(function(html, js) {\n // Update the page.\n if (userid == this._lastUserId) {\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }\n }.bind(this)).fail(notification.exception);\n }.bind(this)).fail(function() {\n // Render the template.\n templates.render('mod_assign/gradingapp/navigation_no_users', {}).done(function(html, js) {\n // Update the page.\n this._region.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(this._region, html, js);\n this._region.fadeIn(\"fast\");\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n }\n .bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n return UserInfo;\n});\n"],"names":["define","$","notification","ajax","templates","UserInfo","selector","_regionSelector","_region","_userCache","document","on","this","_refreshUserInfo","bind","prototype","_lastUserId","_getAssignmentId","attr","event","userid","promise","Deferred","render","done","html","js","fadeOut","replaceNodeContents","fadeIn","fail","exception","resolve","assignmentId","call","methodname","args","assignid","embeduser","participant","hasOwnProperty","reject","context","identityfields","data","split","identity","courseid","user","each","i","k","hasidentity","push","join","profileimageurl"],"mappings":";;;;;;;;AAuBAA,oDAAO,CAAC,SAAU,oBAAqB,YAAa,mBAAmB,SAASC,EAAGC,aAAcC,KAAMC,eAQ/FC,SAAW,SAASC,eACfC,gBAAkBD,cAClBE,QAAUP,EAAEK,eACZG,WAAa,GAElBR,EAAES,UAAUC,GAAG,eAAgBC,KAAKC,iBAAiBC,KAAKF,eAI9DP,SAASU,UAAUR,gBAAkB,KAGrCF,SAASU,UAAUN,WAAa,KAGhCJ,SAASU,UAAUP,QAAU,KAG7BH,SAASU,UAAUC,YAAc,EASjCX,SAASU,UAAUE,iBAAmB,kBAC3BL,KAAKJ,QAAQU,KAAK,sBAW7Bb,SAASU,UAAUF,iBAAmB,SAASM,MAAOC,YAC9CC,QAAUpB,EAAEqB,gBAGXd,QAAQU,KAAK,cAAeE,QAG7BR,KAAKI,aAAeI,cAGnBJ,YAAcI,OAGnBhB,UAAUmB,OAAO,qBAAsB,IAAIC,KAAK,SAASC,KAAMC,YAEtDlB,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,OAEHQ,OAAS,EAEThB,UAAUmB,OAAO,4CAA6C,IAAIC,KAAK,SAASC,KAAMC,IAC9EN,QAAUR,KAAKI,kBAEVR,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QAEbE,KAAKF,OAAOkB,KAAK5B,aAAa6B,wBAIG,IAA5BnB,KAAKH,WAAWW,QACvBC,QAAQW,QAAQpB,KAAKH,WAAWW,aAC7B,KAECa,aAAerB,KAAKK,mBACTd,KAAK+B,KAAK,CAAC,CACtBC,WAAY,6BACZC,KAAM,CACFhB,OAAQA,OACRiB,SAAUJ,aACVK,WAAW,MAIV,GAAGd,KAAK,SAASe,aACjBA,YAAYC,eAAe,YAGvB/B,WAAWW,QAAUmB,YAC1BlB,QAAQW,QAAQpB,KAAKH,WAAWW,UAHhCC,QAAQoB,OAAO,aAKrB3B,KAAKF,OAAOkB,KAAK5B,aAAa6B,WAGpCV,QAAQG,KAAK,SAASkB,aACdC,eAAiB1C,EAAE,2BAA2B2C,KAAK,oBAAoBC,MAAM,KAC7EC,SAAW,GAEfJ,QAAQK,SAAW9C,EAAE,4CAA4CiB,KAAK,iBAElEwB,QAAQM,OAER/C,EAAEgD,KAAKN,gBAAgB,SAASO,EAAGC,QACA,IAApBT,QAAQM,KAAKG,IAA0C,KAApBT,QAAQM,KAAKG,KACvDT,QAAQU,aAAc,EACtBN,SAASO,KAAKX,QAAQM,KAAKG,QAGnCT,QAAQI,SAAWA,SAASQ,KAAK,MAG7BZ,QAAQM,KAAKO,kBACbb,QAAQa,gBAAkBb,QAAQM,KAAKO,kBAI/CnD,UAAUmB,OAAO,gDAAiDmB,SAASlB,KAAK,SAASC,KAAMC,IAEvFN,QAAUR,KAAKI,kBACVR,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QAEbE,KAAKF,OAAOkB,KAAK5B,aAAa6B,YAClCjB,KAAKF,OAAOkB,KAAK,WAEf1B,UAAUmB,OAAO,4CAA6C,IAAIC,KAAK,SAASC,KAAMC,SAE7ElB,QAAQmB,QAAQ,OAAQ,WACzBvB,UAAUwB,oBAAoBhB,KAAKJ,QAASiB,KAAMC,SAC7ClB,QAAQqB,OAAO,SACtBf,KAAKF,QACTE,KAAKF,OAAOkB,KAAK5B,aAAa6B,YAEnCjB,KAAKF,SACRE,KAAKF,OAAOkB,KAAK5B,aAAa6B,aAG7B1B"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/panel.min.js b/mod/assign/amd/build/gradingapp/panel.min.js new file mode 100644 index 0000000000000..a5213692fb469 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/panel.min.js @@ -0,0 +1,11 @@ +/** + * Javascript controller for the "Grading" panel at the right of the page. + * + * @module mod_assign/grading_panel + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/panel",["jquery","core/yui","core/notification","core/templates","core/fragment","core/ajax","core/str","mod_assign/gradingapp/form_change_checker","mod_assign/gradingapp/events","core_form/events","core/toast","core_form/changechecker"],(function($,Y,notification,templates,fragment,ajax,str,checker,GradingEvents,FormEvents,Toast,FormChangeChecker){var GradingPanel=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache=[],this.registerEventListeners()};return GradingPanel.prototype._regionSelector=null,GradingPanel.prototype._lastUserId=0,GradingPanel.prototype._lastAttemptNumber=-1,GradingPanel.prototype._region=null,GradingPanel.prototype.nextUserId=null,GradingPanel.prototype.nextUser=!1,GradingPanel.prototype._niceReplaceNodeContents=function(node,html,js){var promise=$.Deferred();return node.fadeOut("fast",(function(){templates.replaceNodeContents(node,html,js),node.fadeIn("fast",(function(){promise.resolve()}))})),promise.promise()},GradingPanel.prototype._saveFormState=function(){var checked=$('[data-region="grading-actions-form"] [name="sendstudentnotifications"]').prop("checked");$('.gradeform [name="sendstudentnotifications"]').val(checked)},GradingPanel.prototype._submitForm=function(event,nextUserId,nextUser){var commentAreaElement=document.querySelector(".comment-area");commentAreaElement&&(""!==commentAreaElement.querySelector(".db > textarea").value&&commentAreaElement.querySelector('.fd a[id^="comment-action-post-"]').click());var form=$(this._region.find("form.gradeform"));$('[data-region="overlay"]').show(),FormChangeChecker.markFormSubmitted(form[0]),form.trigger("save-form-state"),FormEvents.notifyFormSubmittedByJavascript(form[0]);var data=form.serialize(),assignmentid=this._region.attr("data-assignmentid");ajax.call([{methodname:"mod_assign_submit_grading_form",args:{assignmentid:assignmentid,userid:this._lastUserId,jsonformdata:JSON.stringify(data)},done:this._handleFormSubmissionResponse.bind(this,data,nextUserId,nextUser),fail:notification.exception}])},GradingPanel.prototype._handleFormSubmissionResponse=function(formdata,nextUserId,nextUser,response){if(void 0===nextUserId&&(nextUserId=this._lastUserId),response.length)$(document).trigger("reset",[this._lastUserId,formdata]);else{str.get_string("gradechangessaveddetail","mod_assign").then((function(str){return Toast.add(str),str})).catch(notification.exception);var form=$(this._region.find("form.gradeform"));FormChangeChecker.resetFormDirtyState(form[0]),nextUserId==this._lastUserId?$(document).trigger("reset",nextUserId):nextUser?$(document).trigger("done-saving-show-next",!0):$(document).trigger("user-changed",nextUserId)}$('[data-region="overlay"]').hide()},GradingPanel.prototype._resetForm=function(e,userid,formdata){var event=$.Event("custom");void 0===userid&&(userid=this._lastUserId),this._lastUserId=0,this._refreshGradingPanel(event,userid,formdata)},GradingPanel.prototype._chooseAttempt=function(e){var submissionsId=$(e.target).data("submissions"),formhtml=$(document.getElementById(submissionsId)).clone().wrap($("")).html();str.get_strings([{key:"viewadifferentattempt",component:"mod_assign"},{key:"view",component:"core"},{key:"cancel",component:"core"}]).done(function(strs){notification.confirm(strs[0],formhtml,strs[1],strs[2],function(){var attemptnumber=$("input:radio[name='select-attemptnumber']:checked").val();this._refreshGradingPanel(null,this._lastUserId,"",attemptnumber)}.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._addPopoutButtons=function(selector){var region=$(selector);templates.render("mod_assign/popout_button",{}).done(function(html){region.find('[data-fieldtype="filemanager"],[data-fieldtype="editor"],[data-fieldtype="grading"]').closest(".fitem").addClass("has-popout").find("label").parent().append(html),region.on("click",'[data-region="popout-button"]',this._togglePopout.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._togglePopout=function(event){event.preventDefault();var container=$(event.target).closest(".fitem");container.hasClass("popout")?$(".popout").removeClass("popout"):($(".popout").removeClass("popout"),container.addClass("popout"),container.addClass("moodle-has-zindex"))},GradingPanel.prototype._refreshGradingPanel=function(event,userid,submissiondata,attemptnumber){var contextid=this._region.attr("data-contextid");void 0===submissiondata&&(submissiondata=""),void 0===attemptnumber&&(attemptnumber=-1),this._lastUserId==userid&&this._lastAttemptNumber==attemptnumber&&""===submissiondata||(this._lastUserId=userid,this._lastAttemptNumber=attemptnumber,$(document).trigger("start-loading-user"),window.M.util.js_pending("mod-assign-loading-user"),templates.render("mod_assign/loading",{}).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){if(userid>0){this._region.show();var params={userid:userid,attemptnumber:attemptnumber,jsonformdata:JSON.stringify(submissiondata)};fragment.loadFragment("mod_assign","gradingpanel",contextid,params).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform'),$(document).on("editor-content-restored",(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform')})),$('[data-region="attempt-chooser"]').on("click",this._chooseAttempt.bind(this)),this._addPopoutButtons('[data-region="grade-panel"] .gradeform'),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this)).fail(notification.exception)}.bind(this)).fail(notification.exception),$('[data-region="review-panel"]').show()}else this._region.hide(),$('[data-region="review-panel"]').hide(),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this))}.bind(this)).fail(notification.exception))},GradingPanel.prototype._getNextUser=function(event,data){this.nextUserId=data.nextUserId,this.nextUser=data.nextUser},GradingPanel.prototype._handleSaveAndShowNext=function(){this._submitForm(null,this.nextUserId,this.nextUser)},GradingPanel.prototype.getPanelElement=function(){return $('[data-region="grade-panel"]')},GradingPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed")},GradingPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed")},GradingPanel.prototype.registerEventListeners=function(){var docElement=$(document);$(this._region).on("submit","form",(function(e){e.preventDefault()})),docElement.on("next-user",this._getNextUser.bind(this)),docElement.on("user-changed",this._refreshGradingPanel.bind(this)),docElement.on("save-changes",this._submitForm.bind(this)),docElement.on("save-and-show-next",this._handleSaveAndShowNext.bind(this)),docElement.on("reset",this._resetForm.bind(this)),docElement.on("save-form-state",this._saveFormState.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.expandPanel()}.bind(this))},GradingPanel})); + +//# sourceMappingURL=panel.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/panel.min.js.map b/mod/assign/amd/build/gradingapp/panel.min.js.map new file mode 100644 index 0000000000000..5f57f8ee1b850 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/panel.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"panel.min.js","sources":["../../src/gradingapp/panel.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Grading\" panel at the right of the page.\n *\n * @module mod_assign/grading_panel\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine([\n 'jquery',\n 'core/yui',\n 'core/notification',\n 'core/templates',\n 'core/fragment',\n 'core/ajax',\n 'core/str',\n 'mod_assign/gradingapp/form_change_checker',\n 'mod_assign/gradingapp/events',\n 'core_form/events',\n 'core/toast',\n 'core_form/changechecker',\n], function(\n $,\n Y,\n notification,\n templates,\n fragment,\n ajax,\n str,\n checker,\n GradingEvents,\n FormEvents,\n Toast,\n FormChangeChecker\n) {\n\n /**\n * GradingPanel class.\n *\n * @class mod_assign/grading_panel\n * @param {String} selector The selector for the page region containing the user navigation.\n */\n var GradingPanel = function(selector) {\n this._regionSelector = selector;\n this._region = $(selector);\n this._userCache = [];\n\n this.registerEventListeners();\n };\n\n /** @property {String} Selector for the page region containing the user navigation. */\n GradingPanel.prototype._regionSelector = null;\n\n /** @property {Integer} Remember the last user id to prevent unnessecary reloads. */\n GradingPanel.prototype._lastUserId = 0;\n\n /** @property {Integer} Remember the last attempt number to prevent unnessecary reloads. */\n GradingPanel.prototype._lastAttemptNumber = -1;\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingPanel.prototype._region = null;\n\n /** @property {Integer} The id of the next user in the grading list */\n GradingPanel.prototype.nextUserId = null;\n\n /** @property {Boolean} Next user exists in the grading list */\n GradingPanel.prototype.nextUser = false;\n\n /**\n * Fade the dom node out, update it, and fade it back.\n *\n * @private\n * @method _niceReplaceNodeContents\n * @param {JQuery} node\n * @param {String} html\n * @param {String} js\n * @return {Deferred} promise resolved when the animations are complete.\n */\n GradingPanel.prototype._niceReplaceNodeContents = function(node, html, js) {\n var promise = $.Deferred();\n\n node.fadeOut(\"fast\", function() {\n templates.replaceNodeContents(node, html, js);\n node.fadeIn(\"fast\", function() {\n promise.resolve();\n });\n });\n\n return promise.promise();\n };\n\n /**\n * Make sure all form fields have the latest saved state.\n * @private\n * @method _saveFormState\n */\n GradingPanel.prototype._saveFormState = function() {\n // Copy data from notify students checkbox which was moved out of the form.\n var checked = $('[data-region=\"grading-actions-form\"] [name=\"sendstudentnotifications\"]').prop(\"checked\");\n $('.gradeform [name=\"sendstudentnotifications\"]').val(checked);\n };\n\n /**\n * Make form submit via ajax.\n *\n * @private\n * @param {Object} event\n * @param {Integer} nextUserId\n * @param {Boolean} nextUser optional. Load next user in the grading list.\n * @method _submitForm\n * @fires event:formSubmittedByJavascript\n */\n GradingPanel.prototype._submitForm = function(event, nextUserId, nextUser) {\n // If the form has data in comment-area, then we need to save that comment\n var commentAreaElement = document.querySelector('.comment-area');\n if (commentAreaElement) {\n var commentTextAreaElement = commentAreaElement.querySelector('.db > textarea');\n if (commentTextAreaElement.value !== '') {\n var commentActionPostElement = commentAreaElement.querySelector('.fd a[id^=\"comment-action-post-\"]');\n commentActionPostElement.click();\n }\n }\n\n // The form was submitted - send it via ajax instead.\n var form = $(this._region.find('form.gradeform'));\n\n $('[data-region=\"overlay\"]').show();\n\n // Mark the form as submitted in the change checker.\n FormChangeChecker.markFormSubmitted(form[0]);\n\n // We call this, so other modules can update the form with the latest state.\n form.trigger('save-form-state');\n\n // Tell all form fields we are about to submit the form.\n FormEvents.notifyFormSubmittedByJavascript(form[0]);\n\n // Now we get all the current values from the form.\n var data = form.serialize();\n var assignmentid = this._region.attr('data-assignmentid');\n\n // Now we can continue...\n ajax.call([{\n methodname: 'mod_assign_submit_grading_form',\n args: {assignmentid: assignmentid, userid: this._lastUserId, jsonformdata: JSON.stringify(data)},\n done: this._handleFormSubmissionResponse.bind(this, data, nextUserId, nextUser),\n fail: notification.exception\n }]);\n };\n\n /**\n * Handle form submission response.\n *\n * @private\n * @method _handleFormSubmissionResponse\n * @param {Array} formdata - submitted values\n * @param {Number} [nextUserId] The id of the user to load after the form is saved\n * @param {Boolean} [nextUser] - Whether to switch to next user in the grading list.\n * @param {Array} response List of errors.\n */\n GradingPanel.prototype._handleFormSubmissionResponse = function(formdata, nextUserId, nextUser, response) {\n if (typeof nextUserId === \"undefined\") {\n nextUserId = this._lastUserId;\n }\n if (response.length) {\n // There was an error saving the grade. Re-render the form using the submitted data so we can show\n // validation errors.\n $(document).trigger('reset', [this._lastUserId, formdata]);\n } else {\n str.get_string('gradechangessaveddetail', 'mod_assign')\n .then(function(str) {\n Toast.add(str);\n return str;\n })\n .catch(notification.exception);\n\n // Reset the form state.\n var form = $(this._region.find('form.gradeform'));\n FormChangeChecker.resetFormDirtyState(form[0]);\n\n if (nextUserId == this._lastUserId) {\n $(document).trigger('reset', nextUserId);\n } else if (nextUser) {\n $(document).trigger('done-saving-show-next', true);\n } else {\n $(document).trigger('user-changed', nextUserId);\n }\n }\n $('[data-region=\"overlay\"]').hide();\n };\n\n /**\n * Refresh form with default values.\n *\n * @private\n * @method _resetForm\n * @param {Event} e\n * @param {Integer} userid\n * @param {Array} formdata\n */\n GradingPanel.prototype._resetForm = function(e, userid, formdata) {\n // The form was cancelled - refresh with default values.\n var event = $.Event(\"custom\");\n if (typeof userid == \"undefined\") {\n userid = this._lastUserId;\n }\n this._lastUserId = 0;\n this._refreshGradingPanel(event, userid, formdata);\n };\n\n /**\n * Open a picker to choose an older attempt.\n *\n * @private\n * @param {Object} e\n * @method _chooseAttempt\n */\n GradingPanel.prototype._chooseAttempt = function(e) {\n // Show a dialog.\n\n // The form is in the element pointed to by data-submissions.\n var link = $(e.target);\n var submissionsId = link.data('submissions');\n var submissionsform = $(document.getElementById(submissionsId));\n var formcopy = submissionsform.clone();\n var formhtml = formcopy.wrap($('')).html();\n\n str.get_strings([\n {key: 'viewadifferentattempt', component: 'mod_assign'},\n {key: 'view', component: 'core'},\n {key: 'cancel', component: 'core'},\n ]).done(function(strs) {\n notification.confirm(strs[0], formhtml, strs[1], strs[2], function() {\n var attemptnumber = $(\"input:radio[name='select-attemptnumber']:checked\").val();\n\n this._refreshGradingPanel(null, this._lastUserId, '', attemptnumber);\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Add popout buttons\n *\n * @private\n * @method _addPopoutButtons\n * @param {JQuery} selector The region selector to add popout buttons to.\n */\n GradingPanel.prototype._addPopoutButtons = function(selector) {\n var region = $(selector);\n\n templates.render('mod_assign/popout_button', {}).done(function(html) {\n var parents = region.find('[data-fieldtype=\"filemanager\"],[data-fieldtype=\"editor\"],[data-fieldtype=\"grading\"]')\n .closest('.fitem');\n parents.addClass('has-popout').find('label').parent().append(html);\n\n region.on('click', '[data-region=\"popout-button\"]', this._togglePopout.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Make a div \"popout\" or \"popback\".\n *\n * @private\n * @method _togglePopout\n * @param {Event} event\n */\n GradingPanel.prototype._togglePopout = function(event) {\n event.preventDefault();\n var container = $(event.target).closest('.fitem');\n if (container.hasClass('popout')) {\n $('.popout').removeClass('popout');\n } else {\n $('.popout').removeClass('popout');\n container.addClass('popout');\n container.addClass('moodle-has-zindex');\n }\n };\n\n /**\n * Get the user context - re-render the template in the page.\n *\n * @private\n * @method _refreshGradingPanel\n * @param {Event} event\n * @param {Number} userid\n * @param {String} submissiondata serialised submission data.\n * @param {Integer} attemptnumber\n */\n GradingPanel.prototype._refreshGradingPanel = function(event, userid, submissiondata, attemptnumber) {\n var contextid = this._region.attr('data-contextid');\n if (typeof submissiondata === 'undefined') {\n submissiondata = '';\n }\n if (typeof attemptnumber === 'undefined') {\n attemptnumber = -1;\n }\n // Skip reloading if it is the same user.\n if (this._lastUserId == userid && this._lastAttemptNumber == attemptnumber && submissiondata === '') {\n return;\n }\n this._lastUserId = userid;\n this._lastAttemptNumber = attemptnumber;\n $(document).trigger('start-loading-user');\n // Tell behat to back off too.\n window.M.util.js_pending('mod-assign-loading-user');\n // First insert the loading template.\n templates.render('mod_assign/loading', {}).done(function(html, js) {\n // Update the page.\n this._niceReplaceNodeContents(this._region, html, js).done(function() {\n if (userid > 0) {\n this._region.show();\n // Reload the grading form \"fragment\" for this user.\n var params = {userid: userid, attemptnumber: attemptnumber, jsonformdata: JSON.stringify(submissiondata)};\n fragment.loadFragment('mod_assign', 'gradingpanel', contextid, params).done(function(html, js) {\n this._niceReplaceNodeContents(this._region, html, js)\n .done(function() {\n checker.saveFormState('[data-region=\"grade-panel\"] .gradeform');\n $(document).on('editor-content-restored', function() {\n // If the editor has some content that has been restored\n // then save the form state again for comparison.\n checker.saveFormState('[data-region=\"grade-panel\"] .gradeform');\n });\n $('[data-region=\"attempt-chooser\"]').on('click', this._chooseAttempt.bind(this));\n this._addPopoutButtons('[data-region=\"grade-panel\"] .gradeform');\n $(document).trigger('finish-loading-user');\n // Tell behat we are friends again.\n window.M.util.js_complete('mod-assign-loading-user');\n }.bind(this))\n .fail(notification.exception);\n }.bind(this)).fail(notification.exception);\n $('[data-region=\"review-panel\"]').show();\n } else {\n this._region.hide();\n $('[data-region=\"review-panel\"]').hide();\n $(document).trigger('finish-loading-user');\n // Tell behat we are friends again.\n window.M.util.js_complete('mod-assign-loading-user');\n }\n }.bind(this));\n }.bind(this)).fail(notification.exception);\n };\n\n /**\n * Get next user data and store it in global variables\n *\n * @private\n * @method _getNextUser\n * @param {Event} event\n * @param {Object} data Next user's data\n */\n GradingPanel.prototype._getNextUser = function(event, data) {\n this.nextUserId = data.nextUserId;\n this.nextUser = data.nextUser;\n };\n\n /**\n * Handle the save-and-show-next event\n *\n * @private\n * @method _handleSaveAndShowNext\n */\n GradingPanel.prototype._handleSaveAndShowNext = function() {\n this._submitForm(null, this.nextUserId, this.nextUser);\n };\n\n /**\n * Get the grade panel element.\n *\n * @method getPanelElement\n * @return {jQuery}\n */\n GradingPanel.prototype.getPanelElement = function() {\n return $('[data-region=\"grade-panel\"]');\n };\n\n /**\n * Hide the grade panel.\n *\n * @method collapsePanel\n */\n GradingPanel.prototype.collapsePanel = function() {\n this.getPanelElement().addClass('collapsed');\n };\n\n /**\n * Show the grade panel.\n *\n * @method expandPanel\n */\n GradingPanel.prototype.expandPanel = function() {\n this.getPanelElement().removeClass('collapsed');\n };\n\n /**\n * Register event listeners for the grade panel.\n *\n * @method registerEventListeners\n */\n GradingPanel.prototype.registerEventListeners = function() {\n var docElement = $(document);\n var region = $(this._region);\n // Add an event listener to prevent form submission when pressing enter key.\n region.on('submit', 'form', function(e) {\n e.preventDefault();\n });\n\n docElement.on('next-user', this._getNextUser.bind(this));\n docElement.on('user-changed', this._refreshGradingPanel.bind(this));\n docElement.on('save-changes', this._submitForm.bind(this));\n docElement.on('save-and-show-next', this._handleSaveAndShowNext.bind(this));\n docElement.on('reset', this._resetForm.bind(this));\n\n docElement.on('save-form-state', this._saveFormState.bind(this));\n\n docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL, function() {\n this.collapsePanel();\n }.bind(this));\n\n // We should expand if the review panel is collapsed.\n docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_GRADE_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n };\n\n return GradingPanel;\n});\n"],"names":["define","$","Y","notification","templates","fragment","ajax","str","checker","GradingEvents","FormEvents","Toast","FormChangeChecker","GradingPanel","selector","_regionSelector","_region","_userCache","registerEventListeners","prototype","_lastUserId","_lastAttemptNumber","nextUserId","nextUser","_niceReplaceNodeContents","node","html","js","promise","Deferred","fadeOut","replaceNodeContents","fadeIn","resolve","_saveFormState","checked","prop","val","_submitForm","event","commentAreaElement","document","querySelector","value","click","form","this","find","show","markFormSubmitted","trigger","notifyFormSubmittedByJavascript","data","serialize","assignmentid","attr","call","methodname","args","userid","jsonformdata","JSON","stringify","done","_handleFormSubmissionResponse","bind","fail","exception","formdata","response","length","get_string","then","add","catch","resetFormDirtyState","hide","_resetForm","e","Event","_refreshGradingPanel","_chooseAttempt","submissionsId","target","formhtml","getElementById","clone","wrap","get_strings","key","component","strs","confirm","attemptnumber","_addPopoutButtons","region","render","closest","addClass","parent","append","on","_togglePopout","preventDefault","container","hasClass","removeClass","submissiondata","contextid","window","M","util","js_pending","params","loadFragment","saveFormState","js_complete","_getNextUser","_handleSaveAndShowNext","getPanelElement","collapsePanel","expandPanel","docElement","COLLAPSE_GRADE_PANEL","COLLAPSE_REVIEW_PANEL","EXPAND_GRADE_PANEL"],"mappings":"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"} \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/review_panel.min.js b/mod/assign/amd/build/gradingapp/review_panel.min.js new file mode 100644 index 0000000000000..be90e61ee578e --- /dev/null +++ b/mod/assign/amd/build/gradingapp/review_panel.min.js @@ -0,0 +1,11 @@ +/** + * Javascript controller for the "Review" panel at the left of the page. + * + * @module mod_assign/grading_review_panel + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since 3.1 + */ +define("mod_assign/gradingapp/review_panel",["jquery","mod_assign/gradingapp/events"],(function($,GradingEvents){var GradingReviewPanel=function(){this._region=$('[data-region="review-panel-content"]'),this.registerEventListeners()};return GradingReviewPanel.prototype._region=null,GradingReviewPanel.prototype.getReviewPanel=function(pluginname){return void 0===this._region.data("panel-owner")&&this._region.data("review-panel-plugin",pluginname),this._region.data("review-panel-plugin")==pluginname&&this._region[0]},GradingReviewPanel.prototype.getTogglePanelButton=function(){return this.getPanelElement().find('[data-region="review-panel-toggle"]')},GradingReviewPanel.prototype.getPanelElement=function(){return $('[data-region="review-panel"]')},GradingReviewPanel.prototype.getPanelContentElement=function(){return $('[data-region="review-panel-content"]')},GradingReviewPanel.prototype.togglePanel=function(){this.getPanelElement().hasClass("collapsed")?$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL):$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL)},GradingReviewPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed").removeClass("grade-panel-collapsed"),this.getPanelContentElement().attr("aria-hidden",!0)},GradingReviewPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed"),this.getPanelContentElement().removeAttr("aria-hidden")},GradingReviewPanel.prototype.registerEventListeners=function(){var toggleReviewPanelButton=this.getTogglePanelButton();toggleReviewPanelButton.click(function(e){this.togglePanel(),e.preventDefault()}.bind(this)),toggleReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&&32!==e.keyCode||(this.togglePanel(),e.preventDefault())}.bind(this));var docElement=$(document);docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.expandPanel(),this.getPanelElement().addClass("grade-panel-collapsed")}.bind(this)),docElement.on(GradingEvents.EXPAND_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.getPanelElement().removeClass("grade-panel-collapsed")}.bind(this))},GradingReviewPanel})); + +//# sourceMappingURL=review_panel.min.js.map \ No newline at end of file diff --git a/mod/assign/amd/build/gradingapp/review_panel.min.js.map b/mod/assign/amd/build/gradingapp/review_panel.min.js.map new file mode 100644 index 0000000000000..388aff75616f9 --- /dev/null +++ b/mod/assign/amd/build/gradingapp/review_panel.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"review_panel.min.js","sources":["../../src/gradingapp/review_panel.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript controller for the \"Review\" panel at the left of the page.\n *\n * @module mod_assign/grading_review_panel\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'mod_assign/gradingapp/events'], function($, GradingEvents) {\n\n /**\n * GradingReviewPanel class.\n *\n * @class mod_assign/grading_review_panel\n */\n var GradingReviewPanel = function() {\n this._region = $('[data-region=\"review-panel-content\"]');\n this.registerEventListeners();\n };\n\n /** @property {JQuery} JQuery node for the page region containing the user navigation. */\n GradingReviewPanel.prototype._region = null;\n\n /**\n * It is first come first served to get ownership of the grading review panel.\n * There can be only one.\n *\n * @public\n * @method getReviewPanel\n * @param {String} pluginname - the first plugin to ask for the panel gets it.\n * @return {DOMNode} or false\n */\n GradingReviewPanel.prototype.getReviewPanel = function(pluginname) {\n var owner = this._region.data('panel-owner');\n if (typeof owner == \"undefined\") {\n this._region.data('review-panel-plugin', pluginname);\n }\n if (this._region.data('review-panel-plugin') == pluginname) {\n return this._region[0];\n }\n return false;\n };\n\n /**\n * Get the toggle review panel button.\n *\n * @method getTogglePanelButton\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getTogglePanelButton = function() {\n return this.getPanelElement().find('[data-region=\"review-panel-toggle\"]');\n };\n\n /**\n * Get the review panel element.\n *\n * @method getPanelElement\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getPanelElement = function() {\n return $('[data-region=\"review-panel\"]');\n };\n\n /**\n * Get the review panel content element.\n *\n * @method getPanelContentElement\n * @return {jQuery}\n */\n GradingReviewPanel.prototype.getPanelContentElement = function() {\n return $('[data-region=\"review-panel-content\"]');\n };\n\n /**\n * Show/Hide the review panel.\n *\n * @method togglePanel\n */\n GradingReviewPanel.prototype.togglePanel = function() {\n if (this.getPanelElement().hasClass('collapsed')) {\n $(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL);\n } else {\n $(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL);\n }\n };\n\n /**\n * Hide the review panel.\n *\n * @method collapsePanel\n */\n GradingReviewPanel.prototype.collapsePanel = function() {\n this.getPanelElement().addClass('collapsed').removeClass('grade-panel-collapsed');\n this.getPanelContentElement().attr('aria-hidden', true);\n };\n\n /**\n * Show the review panel.\n *\n * @method expandPanel\n */\n GradingReviewPanel.prototype.expandPanel = function() {\n this.getPanelElement().removeClass('collapsed');\n this.getPanelContentElement().removeAttr('aria-hidden');\n };\n\n /**\n * Register event listeners for the review panel.\n *\n * @method registerEventListeners\n */\n GradingReviewPanel.prototype.registerEventListeners = function() {\n var toggleReviewPanelButton = this.getTogglePanelButton();\n toggleReviewPanelButton.click(function(e) {\n this.togglePanel();\n e.preventDefault();\n }.bind(this));\n\n toggleReviewPanelButton.keydown(function(e) {\n if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.togglePanel();\n e.preventDefault();\n }\n }\n }.bind(this));\n\n var docElement = $(document);\n docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL, function() {\n this.collapsePanel();\n }.bind(this));\n\n // Need special styling when grade panel is collapsed.\n docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL, function() {\n this.expandPanel();\n this.getPanelElement().addClass('grade-panel-collapsed');\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_REVIEW_PANEL, function() {\n this.expandPanel();\n }.bind(this));\n\n docElement.on(GradingEvents.EXPAND_GRADE_PANEL, function() {\n this.getPanelElement().removeClass('grade-panel-collapsed');\n }.bind(this));\n };\n\n return GradingReviewPanel;\n});\n"],"names":["define","$","GradingEvents","GradingReviewPanel","_region","registerEventListeners","prototype","getReviewPanel","pluginname","this","data","getTogglePanelButton","getPanelElement","find","getPanelContentElement","togglePanel","hasClass","document","trigger","EXPAND_REVIEW_PANEL","COLLAPSE_REVIEW_PANEL","collapsePanel","addClass","removeClass","attr","expandPanel","removeAttr","toggleReviewPanelButton","click","e","preventDefault","bind","keydown","metaKey","shiftKey","altKey","ctrlKey","keyCode","docElement","on","COLLAPSE_GRADE_PANEL","EXPAND_GRADE_PANEL"],"mappings":";;;;;;;;AAuBAA,4CAAO,CAAC,SAAU,iCAAiC,SAASC,EAAGC,mBAOvDC,mBAAqB,gBAChBC,QAAUH,EAAE,6CACZI,iCAITF,mBAAmBG,UAAUF,QAAU,KAWvCD,mBAAmBG,UAAUC,eAAiB,SAASC,wBAE/B,IADRC,KAAKL,QAAQM,KAAK,qBAErBN,QAAQM,KAAK,sBAAuBF,YAEzCC,KAAKL,QAAQM,KAAK,wBAA0BF,YACrCC,KAAKL,QAAQ,IAW5BD,mBAAmBG,UAAUK,qBAAuB,kBACzCF,KAAKG,kBAAkBC,KAAK,wCASvCV,mBAAmBG,UAAUM,gBAAkB,kBACpCX,EAAE,iCASbE,mBAAmBG,UAAUQ,uBAAyB,kBAC3Cb,EAAE,yCAQbE,mBAAmBG,UAAUS,YAAc,WACnCN,KAAKG,kBAAkBI,SAAS,aAChCf,EAAEgB,UAAUC,QAAQhB,cAAciB,qBAElClB,EAAEgB,UAAUC,QAAQhB,cAAckB,wBAS1CjB,mBAAmBG,UAAUe,cAAgB,gBACpCT,kBAAkBU,SAAS,aAAaC,YAAY,8BACpDT,yBAAyBU,KAAK,eAAe,IAQtDrB,mBAAmBG,UAAUmB,YAAc,gBAClCb,kBAAkBW,YAAY,kBAC9BT,yBAAyBY,WAAW,gBAQ7CvB,mBAAmBG,UAAUD,uBAAyB,eAC9CsB,wBAA0BlB,KAAKE,uBACnCgB,wBAAwBC,MAAM,SAASC,QAC9Bd,cACLc,EAAEC,kBACJC,KAAKtB,OAEPkB,wBAAwBK,QAAQ,SAASH,GAChCA,EAAEI,SAAYJ,EAAEK,UAAaL,EAAEM,QAAWN,EAAEO,SAC3B,KAAdP,EAAEQ,SAAgC,KAAdR,EAAEQ,eACjBtB,cACLc,EAAEC,mBAGZC,KAAKtB,WAEH6B,WAAarC,EAAEgB,UACnBqB,WAAWC,GAAGrC,cAAckB,sBAAuB,gBAC1CC,iBACPU,KAAKtB,OAGP6B,WAAWC,GAAGrC,cAAcsC,qBAAsB,gBACzCf,mBACAb,kBAAkBU,SAAS,0BAClCS,KAAKtB,OAEP6B,WAAWC,GAAGrC,cAAciB,oBAAqB,gBACxCM,eACPM,KAAKtB,OAEP6B,WAAWC,GAAGrC,cAAcuC,mBAAoB,gBACvC7B,kBAAkBW,YAAY,0BACrCQ,KAAKtB,QAGJN"} \ No newline at end of file diff --git a/mod/assign/amd/src/grading_actions.js b/mod/assign/amd/src/gradingapp/actions.js similarity index 99% rename from mod/assign/amd/src/grading_actions.js rename to mod/assign/amd/src/gradingapp/actions.js index 1fec81a434efb..c8229f223437e 100644 --- a/mod/assign/amd/src/grading_actions.js +++ b/mod/assign/amd/src/gradingapp/actions.js @@ -21,7 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.1 */ -define(['jquery', 'mod_assign/grading_events'], function($, GradingEvents) { +define(['jquery', 'mod_assign/gradingapp/events'], function($, GradingEvents) { /** * GradingActions class. diff --git a/mod/assign/amd/src/grading_events.js b/mod/assign/amd/src/gradingapp/events.js similarity index 100% rename from mod/assign/amd/src/grading_events.js rename to mod/assign/amd/src/gradingapp/events.js diff --git a/mod/assign/amd/src/grading_form_change_checker.js b/mod/assign/amd/src/gradingapp/form_change_checker.js similarity index 100% rename from mod/assign/amd/src/grading_form_change_checker.js rename to mod/assign/amd/src/gradingapp/form_change_checker.js diff --git a/mod/assign/amd/src/grading_navigation.js b/mod/assign/amd/src/gradingapp/navigation.js similarity index 99% rename from mod/assign/amd/src/grading_navigation.js rename to mod/assign/amd/src/gradingapp/navigation.js index 6dadc557e99d0..a2346c4e9d2b5 100644 --- a/mod/assign/amd/src/grading_navigation.js +++ b/mod/assign/amd/src/gradingapp/navigation.js @@ -22,7 +22,7 @@ * @since 3.1 */ define(['jquery', 'core/notification', 'core/str', 'core/form-autocomplete', - 'core/ajax', 'core_user/repository', 'mod_assign/grading_form_change_checker'], + 'core/ajax', 'core_user/repository', 'mod_assign/gradingapp/form_change_checker'], function($, notification, str, autocomplete, ajax, UserRepository, checker) { /** diff --git a/mod/assign/amd/src/grading_navigation_user_info.js b/mod/assign/amd/src/gradingapp/navigation_user_info.js similarity index 95% rename from mod/assign/amd/src/grading_navigation_user_info.js rename to mod/assign/amd/src/gradingapp/navigation_user_info.js index b18ecfcc302fb..ddc5c18f5e282 100644 --- a/mod/assign/amd/src/grading_navigation_user_info.js +++ b/mod/assign/amd/src/gradingapp/navigation_user_info.js @@ -90,7 +90,7 @@ define(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function( if (userid < 0) { // Render the template. - templates.render('mod_assign/grading_navigation_no_users', {}).done(function(html, js) { + templates.render('mod_assign/gradingapp/navigation_no_users', {}).done(function(html, js) { if (userid == this._lastUserId) { // Update the page. this._region.fadeOut("fast", function() { @@ -148,7 +148,7 @@ define(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function( } } - templates.render('mod_assign/grading_navigation_user_summary', context).done(function(html, js) { + templates.render('mod_assign/gradingapp/navigation_user_summary', context).done(function(html, js) { // Update the page. if (userid == this._lastUserId) { this._region.fadeOut("fast", function() { @@ -159,7 +159,7 @@ define(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function( }.bind(this)).fail(notification.exception); }.bind(this)).fail(function() { // Render the template. - templates.render('mod_assign/grading_navigation_no_users', {}).done(function(html, js) { + templates.render('mod_assign/gradingapp/navigation_no_users', {}).done(function(html, js) { // Update the page. this._region.fadeOut("fast", function() { templates.replaceNodeContents(this._region, html, js); diff --git a/mod/assign/amd/src/grading_panel.js b/mod/assign/amd/src/gradingapp/panel.js similarity index 99% rename from mod/assign/amd/src/grading_panel.js rename to mod/assign/amd/src/gradingapp/panel.js index d499071df3d9e..669e92300dd62 100644 --- a/mod/assign/amd/src/grading_panel.js +++ b/mod/assign/amd/src/gradingapp/panel.js @@ -29,8 +29,8 @@ define([ 'core/fragment', 'core/ajax', 'core/str', - 'mod_assign/grading_form_change_checker', - 'mod_assign/grading_events', + 'mod_assign/gradingapp/form_change_checker', + 'mod_assign/gradingapp/events', 'core_form/events', 'core/toast', 'core_form/changechecker', diff --git a/mod/assign/amd/src/grading_review_panel.js b/mod/assign/amd/src/gradingapp/review_panel.js similarity index 98% rename from mod/assign/amd/src/grading_review_panel.js rename to mod/assign/amd/src/gradingapp/review_panel.js index 36a2644e8c1f1..c8208189e73c3 100644 --- a/mod/assign/amd/src/grading_review_panel.js +++ b/mod/assign/amd/src/gradingapp/review_panel.js @@ -21,7 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.1 */ -define(['jquery', 'mod_assign/grading_events'], function($, GradingEvents) { +define(['jquery', 'mod_assign/gradingapp/events'], function($, GradingEvents) { /** * GradingReviewPanel class. diff --git a/mod/assign/classes/output/renderer.php b/mod/assign/classes/output/renderer.php index 7e78350f1b467..2c56df31a4634 100644 --- a/mod/assign/classes/output/renderer.php +++ b/mod/assign/classes/output/renderer.php @@ -1494,7 +1494,7 @@ protected function moodleform(\moodleform $mform) { */ public function render_grading_app(grading_app $app) { $context = $app->export_for_template($this); - return $this->render_from_template('mod_assign/grading_app', $context); + return $this->render_from_template('mod_assign/gradingapp/grading_app', $context); } /** @@ -1538,7 +1538,7 @@ public function render_override_actionmenu(\mod_assign\output\override_actionmen */ public function render_grading_actionmenu(\mod_assign\output\grading_actionmenu $actionmenu): string { $context = $actionmenu->export_for_template($this); - return $this->render_from_template('mod_assign/grading_actionmenu', $context); + return $this->render_from_template('mod_assign/gradingapp/actionmenu', $context); } /** diff --git a/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-debug.js b/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-debug.js index 80f64403e28f8..ea76535026fdf 100644 --- a/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-debug.js +++ b/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-debug.js @@ -3542,7 +3542,7 @@ EDITOR.prototype = { link.on('key', this.link_handler, 'down:13', this); // We call the amd module to see if we can take control of the review panel. - require(['mod_assign/grading_review_panel'], function(ReviewPanelManager) { + require(['mod_assign/gradingapp/review_panel'], function(ReviewPanelManager) { var panelManager = new ReviewPanelManager(); var panel = panelManager.getReviewPanel('assignfeedback_editpdf'); diff --git a/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-min.js b/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-min.js index 525b9391fc3e2..7cf720d7d0bdb 100644 --- a/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-min.js +++ b/mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-min.js @@ -3,7 +3,7 @@ this.colour=t.annotationcolour,this.path="",e.has_min_width()&&e.has_min_height( i.shapes.push(e),i},init_from_edit:function(t){var e=new M.assignfeedback_editpdf.rect;return e.bound([t.start,t.end]),this.gradeid=this.editor.get("gradeid"),this.pageno=this.editor.currentpage,this.x=e.x,this.y=t.start.y-10,this.endx=e.x+e.width,this.endy=t.start.y+10,this.colour=t.annotationcolour,this.page="",e.has_min_width()}}),M.assignfeedback_editpdf=M.assignfeedback_editpdf||{},M.assignfeedback_editpdf.annotationhighlight=h,(l=function(t){l.superclass.constructor.apply(this,[t])}).NAME="annotationstamp",l.ATTRS={},u.extend(l,M.assignfeedback_editpdf.annotation,{draw:function(){var t=new M.assignfeedback_editpdf.drawable(this.editor),e=this.editor.get_dialogue_element(g),i=this.editor.get_window_coordinates(new M.assignfeedback_editpdf.point(this.x,this.y)),s=u.Node.create("
");return s.addClass("annotation"),s.addClass("stamp"),s.setStyles({position:"absolute",display:"inline-block",backgroundImage:"url("+this.editor.get_stamp_image_url(this.path)+")",width:this.endx-this.x,height:this.endy-this.y,backgroundSize:"100% 100%"}),e.append(s),s.setX(i.x),s.setY(i.y),t.store_position(s,i.x,i.y),this.editor.get("readonly")||(s.on("gesturemovestart",this.editor.edit_start,null,this.editor),s.on("gesturemove",this.editor.edit_move,null,this.editor),s.on("gesturemoveend",this.editor.edit_end,null,this.editor)),t.nodes.push(s),this.drawable=t,l.superclass.draw.apply(this)},draw_current_edit:function(t){var e,i,s=new M.assignfeedback_editpdf.rect,n=new M.assignfeedback_editpdf.drawable(this.editor),a=this.editor.get_dialogue_element(r);return s.bound([t.start,t.end]),i=this.editor.get_window_coordinates(new M.assignfeedback_editpdf.point(s.x,s.y)),(e=u.Node.create("
")).addClass("annotation"),e.addClass("stamp"),e.setStyles({position:"absolute",display:"inline-block",backgroundImage:"url("+this.editor.get_stamp_image_url(t.stamp)+")",width:s.width,height:s.height,backgroundSize:"100% 100%"}),a.append(e),e.setX(i.x),e.setY(i.y),n.store_position(e,i.x,i.y),n.nodes.push(e),n},init_from_edit:function(t){var e=new M.assignfeedback_editpdf.rect;return e.bound([t.start,t.end]),e.width<40&&(e.width=40),e.height<40&&(e.height=40),this.gradeid=this.editor.get("gradeid"),this.pageno=this.editor.currentpage,this.x=e.x,this.y=e.y,this.endx=e.x+e.width,this.endy=e.y+e.height,this.colour=t.annotationcolour,this.path=t.stamp,!0},move:function(t,e){t-=this.x,e-=this.y;this.x+=t,this.y+=e,this.endx+=t,this.endy+=e,this.drawable&&this.drawable.erase(),this.editor.drawables.push(this.draw())}}),M.assignfeedback_editpdf=M.assignfeedback_editpdf||{},M.assignfeedback_editpdf.annotationstamp=l,u.extend(p=function(t){t.draggable=!1,t.centered=!1,t.width="auto",t.visible=!1,t.footerContent="",p.superclass.constructor.apply(this,[t])},M.core.dialogue,{initializer:function(t){var e,i;p.superclass.initializer.call(this,t),this.get("boundingBox").addClass("assignfeedback_editpdf_dropdown"),e=this.get("buttonNode"),t=this.bodyNode,(i=u.Node.create("

")).addClass("accesshide"),i.setHTML(this.get("headerText")),t.prepend(i),t.on("clickoutside",function(t){this.get("visible")&&t.target.get("id")!==e.get("id")&&t.target.ancestor().get("id")!==e.get("id")&&(t.preventDefault(),this.hide())},this),e.on("click",function(t){t.preventDefault(),this.show()},this),e.on("key",this.show,"enter,space",this)},show:function(){var t=this.get("buttonNode"),e=p.superclass.show.call(this);return this.align(t,[u.WidgetPositionAlign.TL,u.WidgetPositionAlign.BL]),e}},{NAME:"Dropdown menu",ATTRS:{headerText:{value:""},buttonNode:{value:null}}}),u.Base.modifyAttrs(p,{modal:{getter:function(){return!1}}}),M.assignfeedback_editpdf=M.assignfeedback_editpdf||{},M.assignfeedback_editpdf.dropdown=p,u.extend(f=function(t){f.superclass.constructor.apply(this,[t])},M.assignfeedback_editpdf.dropdown,{initializer:function(t){var e,n=u.Node.create('