Merge branch 'MDL-57490-master' of git://github.com/danpoltawski/moodle
authorAndrew Nicols <andrew@nicols.co.uk>
Wed, 18 Jan 2017 04:09:20 +0000 (12:09 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Wed, 18 Jan 2017 04:09:20 +0000 (12:09 +0800)
lib/javascript-static.js
lib/upgrade.txt
mod/lesson/report.php
mod/quiz/report/attemptsreport_table.php
mod/scorm/report/basic/classes/report.php
mod/scorm/report/interactions/classes/report.php
mod/scorm/report/objectives/classes/report.php

index b8676e1..d2ce894 100644 (file)
@@ -896,96 +896,53 @@ M.util.add_spinner = function(Y, node) {
     return spinner;
 }
 
-//=== old legacy JS code, hopefully to be replaced soon by M.xx.yy and YUI3 code ===
-
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function checkall() {
-    var inputs = document.getElementsByTagName('input');
-    for (var i = 0; i < inputs.length; i++) {
-        if (inputs[i].type == 'checkbox') {
-            if (inputs[i].disabled || inputs[i].readOnly) {
-                continue;
-            }
-            inputs[i].checked = true;
-        }
-    }
+    throw new Error('checkall can not be used any more. Please use jQuery instead.');
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function checknone() {
-    var inputs = document.getElementsByTagName('input');
-    for (var i = 0; i < inputs.length; i++) {
-        if (inputs[i].type == 'checkbox') {
-            if (inputs[i].disabled || inputs[i].readOnly) {
-                continue;
-            }
-            inputs[i].checked = false;
-        }
-    }
+    throw new Error('checknone can not be used any more. Please use jQuery instead.');
 }
 
 /**
- * Either check, or uncheck, all checkboxes inside the element with id is
- * @param id the id of the container
- * @param checked the new state, either '' or 'checked'.
+ * @deprecated since Moodle 3.3.
  */
 function select_all_in_element_with_id(id, checked) {
-    var container = document.getElementById(id);
-    if (!container) {
-        return;
-    }
-    var inputs = container.getElementsByTagName('input');
-    for (var i = 0; i < inputs.length; ++i) {
-        if (inputs[i].type == 'checkbox' || inputs[i].type == 'radio') {
-            inputs[i].checked = checked;
-        }
-    }
+    throw new Error('select_all_in_element_with_id can not be used any more. Please use jQuery instead.');
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function select_all_in(elTagName, elClass, elId) {
-    var inputs = document.getElementsByTagName('input');
-    inputs = filterByParent(inputs, function(el) {return findParentNode(el, elTagName, elClass, elId);});
-    for(var i = 0; i < inputs.length; ++i) {
-        if(inputs[i].type == 'checkbox' || inputs[i].type == 'radio') {
-            inputs[i].checked = 'checked';
-        }
-    }
+    throw new Error('select_all_in can not be used any more. Please use jQuery instead.');
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function deselect_all_in(elTagName, elClass, elId) {
-    var inputs = document.getElementsByTagName('INPUT');
-    inputs = filterByParent(inputs, function(el) {return findParentNode(el, elTagName, elClass, elId);});
-    for(var i = 0; i < inputs.length; ++i) {
-        if(inputs[i].type == 'checkbox' || inputs[i].type == 'radio') {
-            inputs[i].checked = '';
-        }
-    }
+    throw new Error('deselect_all_in can not be used any more. Please use jQuery instead.');
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function confirm_if(expr, message) {
-    if(!expr) {
-        return true;
-    }
-    return confirm(message);
+    throw new Error('confirm_if can not be used any more.');
 }
 
-
-/*
-    findParentNode (start, elementName, elementClass, elementID)
-
-    Travels up the DOM hierarchy to find a parent element with the
-    specified tag name, class, and id. All conditions must be met,
-    but any can be ommitted. Returns the BODY element if no match
-    found.
-*/
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function findParentNode(el, elName, elClass, elId) {
-    while (el.nodeName.toUpperCase() != 'BODY') {
-        if ((!elName || el.nodeName.toUpperCase() == elName) &&
-            (!elClass || el.className.indexOf(elClass) != -1) &&
-            (!elId || el.id == elId)) {
-            break;
-        }
-        el = el.parentNode;
-    }
-    return el;
+    throw new Error('findParentNode can not be used any more. Please use jQuery instead.');
 }
 
 function unmaskPassword(id) {
@@ -1031,15 +988,11 @@ function unmaskPassword(id) {
     }
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function filterByParent(elCollection, parentFinder) {
-    var filteredCollection = [];
-    for (var i = 0; i < elCollection.length; ++i) {
-        var findParent = parentFinder(elCollection[i]);
-        if (findParent.nodeName.toUpperCase() != 'BODY') {
-            filteredCollection.push(elCollection[i]);
-        }
-    }
-    return filteredCollection;
+    throw new Error('filterByParent can not be used any more. Please use jQuery instead.');
 }
 
 /**
@@ -1253,10 +1206,11 @@ function convert_object_to_string(obj, separator) {
     return list.join(separator);
 }
 
+/**
+ * @deprecated since Moodle 3.3.
+ */
 function stripHTML(str) {
-    var re = /<\S[^><]*>/g;
-    var ret = str.replace(re, "");
-    return ret;
+    throw new Error('stripHTML can not be used any more. Please use jQuery instead.');
 }
 
 function updateProgressBar(id, percent, msg, estimate) {
@@ -1290,64 +1244,6 @@ function updateProgressBar(id, percent, msg, estimate) {
     el.dispatchEvent(event);
 }
 
-// ===== Deprecated core Javascript functions for Moodle ====
-//       DO NOT USE!!!!!!!
-// Do not put this stuff in separate file because it only adds extra load on servers!
-
-/**
- * @method show_item
- * @deprecated since Moodle 2.7.
- * @see Y.Node.show
- */
-function show_item() {
-    throw new Error('show_item can not be used any more. Please use Y.Node.show.');
-}
-
-/**
- * @method destroy_item
- * @deprecated since Moodle 2.7.
- * @see Y.Node.destroy
- */
-function destroy_item() {
-    throw new Error('destroy_item can not be used any more. Please use Y.Node.destroy.');
-}
-
-/**
- * @method hide_item
- * @deprecated since Moodle 2.7.
- * @see Y.Node.hide
- */
-function hide_item() {
-    throw new Error('hide_item can not be used any more. Please use Y.Node.hide.');
-}
-
-/**
- * @method addonload
- * @deprecated since Moodle 2.7 - please do not use this function any more.
- */
-function addonload() {
-    throw new Error('addonload can not be used any more.');
-}
-
-/**
- * @method getElementsByClassName
- * @deprecated Since Moodle 2.7 - please do not use this function any more.
- * @see Y.one
- * @see Y.all
- */
-function getElementsByClassName() {
-    throw new Error('getElementsByClassName can not be used any more. Please use Y.one or Y.all.');
-}
-
-/**
- * @method findChildNodes
- * @deprecated since Moodle 2.7 - please do not use this function any more.
- * @see Y.all
- */
-function findChildNodes() {
-    throw new Error('findChildNodes can not be used any more. Please use Y.all.');
-}
-
 M.util.help_popups = {
     setup : function(Y) {
         Y.one('body').delegate('click', this.open_popup, 'a.helplinkpopup', this);
index 1b7a6e3..2462ad7 100644 (file)
@@ -10,6 +10,9 @@ information provided here is intended especially for developers.
 * Return value of the validate_email() is now proper boolean as documented. Previously the function could return 1, 0 or false.
 * M.util.focus_login_form and M.util.focus_login_error no longer do anything. Please use jquery instead. See
   lib/templates/login.mustache for an example.
+* Some outdated global JS functions have been removed and should be replaced with calls to jquery or alternative approaches:
+    checkall, checknone, select_all_in_element_with_id, select_all_in, deselect_all_in, confirm_if, findParentNode,
+    filterByParent, stripHTML
 
 === 3.2 ===
 
index f2740c1..f61a708 100644 (file)
@@ -448,8 +448,8 @@ if ($action === 'delete') {
     }
     echo html_writer::table($table);
     if (has_capability('mod/lesson:edit', $context)) {
-        $checklinks  = '<a href="javascript: checkall();">'.get_string('selectall').'</a> / ';
-        $checklinks .= '<a href="javascript: checknone();">'.get_string('deselectall').'</a>';
+        $checklinks  = '<a id="checkall" href="#">'.get_string('selectall').'</a> / ';
+        $checklinks .= '<a id="checknone" href="#">'.get_string('deselectall').'</a>';
         $checklinks .= html_writer::label('action', 'menuaction', false, array('class' => 'accesshide'));
         $options = array('delete' => get_string('deleteselected'));
         $attributes = array('id' => 'actionid', 'class' => 'custom-select m-l-1');
@@ -459,6 +459,14 @@ if ($action === 'delete') {
             $('#actionid').change(function() {
                 $('#mod-lesson-report-form').submit();
             });
+            $('#checkall').click(function(e) {
+                $('#mod-lesson-report-form').find('input:checkbox').prop('checked', true);
+                e.preventDefault();
+            });
+            $('#checknone').click(function(e) {
+                $('#mod-lesson-report-form').find('input:checkbox').prop('checked', false);
+                e.preventDefault();
+            });
         });");
         echo $OUTPUT->box($checklinks, 'center');
         echo '</form>';
index 79d9afb..87e31bc 100644 (file)
@@ -569,15 +569,27 @@ abstract class quiz_attempts_report_table extends table_sql {
     }
 
     public function wrap_html_finish() {
+        global $PAGE;
         if ($this->is_downloading() || !$this->includecheckboxes) {
             return;
         }
 
         echo '<div id="commands">';
-        echo '<a href="javascript:select_all_in(\'DIV\', null, \'tablecontainer\');">' .
+        echo '<a id="checkattempts" href="#">' .
                 get_string('selectall', 'quiz') . '</a> / ';
-        echo '<a href="javascript:deselect_all_in(\'DIV\', null, \'tablecontainer\');">' .
+        echo '<a id="uncheckattempts" href="#">' .
                 get_string('selectnone', 'quiz') . '</a> ';
+        $PAGE->requires->js_amd_inline("
+        require(['jquery'], function($) {
+            $('#checkattempts').click(function(e) {
+                $('#attemptsform').find('input:checkbox').prop('checked', true);
+                e.preventDefault();
+            });
+            $('#uncheckattempts').click(function(e) {
+                $('#attemptsform').find('input:checkbox').prop('checked', false);
+                e.preventDefault();
+            });
+        });");
         echo '&nbsp;&nbsp;';
         $this->submit_buttons();
         echo '</div>';
index 6c3da63..5b8a490 100644 (file)
@@ -492,10 +492,20 @@ class report extends \mod_scorm\report {
                     if ($candelete) {
                         echo \html_writer::start_tag('table', array('id' => 'commands'));
                         echo \html_writer::start_tag('tr').\html_writer::start_tag('td');
-                        echo \html_writer::link('javascript:select_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectall', 'scorm')).' / ';
-                        echo \html_writer::link('javascript:deselect_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectnone', 'scorm'));
+                        echo \html_writer::link('#', get_string('selectall', 'scorm'), array('id' => 'checkattempts'));
+                        echo ' / ';
+                        echo \html_writer::link('#', get_string('selectnone', 'scorm'), array('id' => 'uncheckattempts'));
+                        $PAGE->requires->js_amd_inline("
+                        require(['jquery'], function($) {
+                            $('#checkattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', true);
+                                e.preventDefault();
+                            });
+                            $('#uncheckattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', false);
+                                e.preventDefault();
+                            });
+                        });");
                         echo '&nbsp;&nbsp;';
                         echo \html_writer::empty_tag('input', array('type' => 'submit',
                                                                     'value' => get_string('deleteselected', 'scorm'),
index 0def88c..41b24f8 100644 (file)
@@ -582,10 +582,20 @@ class report extends \mod_scorm\report {
                     if ($candelete) {
                         echo \html_writer::start_tag('table', array('id' => 'commands'));
                         echo \html_writer::start_tag('tr').\html_writer::start_tag('td');
-                        echo \html_writer::link('javascript:select_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectall', 'scorm')).' / ';
-                        echo \html_writer::link('javascript:deselect_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectnone', 'scorm'));
+                        echo \html_writer::link('#', get_string('selectall', 'scorm'), array('id' => 'checkattempts'));
+                        echo ' / ';
+                        echo \html_writer::link('#', get_string('selectnone', 'scorm'), array('id' => 'uncheckattempts'));
+                        $PAGE->requires->js_amd_inline("
+                        require(['jquery'], function($) {
+                            $('#checkattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', true);
+                                e.preventDefault();
+                            });
+                            $('#uncheckattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', false);
+                                e.preventDefault();
+                            });
+                        });");
                         echo '&nbsp;&nbsp;';
                         echo \html_writer::empty_tag('input', array('type' => 'submit',
                                                                     'value' => get_string('deleteselected', 'scorm'),
index 9d60756..68a7764 100644 (file)
@@ -582,10 +582,20 @@ class report extends \mod_scorm\report {
                     if ($candelete) {
                         echo \html_writer::start_tag('table', array('id' => 'commands'));
                         echo \html_writer::start_tag('tr').\html_writer::start_tag('td');
-                        echo \html_writer::link('javascript:select_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectall', 'scorm')).' / ';
-                        echo \html_writer::link('javascript:deselect_all_in(\'DIV\', null, \'scormtablecontainer\');',
-                                                    get_string('selectnone', 'scorm'));
+                        echo \html_writer::link('#', get_string('selectall', 'scorm'), array('id' => 'checkattempts'));
+                        echo ' / ';
+                        echo \html_writer::link('#', get_string('selectnone', 'scorm'), array('id' => 'uncheckattempts'));
+                        $PAGE->requires->js_amd_inline("
+                        require(['jquery'], function($) {
+                            $('#checkattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', true);
+                                e.preventDefault();
+                            });
+                            $('#uncheckattempts').click(function(e) {
+                                $('#attemptsform').find('input:checkbox').prop('checked', false);
+                                e.preventDefault();
+                            });
+                        });");
                         echo '&nbsp;&nbsp;';
                         echo \html_writer::empty_tag('input', array('type' => 'submit',
                                                                     'value' => get_string('deleteselected', 'scorm'),