MDL-69454 core_search: consistent admin search
authorBas Brands <bas@moodle.com>
Mon, 31 Aug 2020 09:06:08 +0000 (09:06 +0000)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 23 Sep 2020 15:36:14 +0000 (17:36 +0200)
admin/admin_settings_search_form.php [deleted file]
admin/search.php
admin/tests/behat/behat_admin.php
lib/amd/build/search-input.min.js [deleted file]
lib/amd/build/search-input.min.js.map [deleted file]
lib/amd/src/search-input.js [deleted file]
lib/templates/search_input.mustache [new file with mode: 0644]

diff --git a/admin/admin_settings_search_form.php b/admin/admin_settings_search_form.php
deleted file mode 100644 (file)
index ad42300..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-// This file is part of Moodle - http://moodle.org/
-//
-// Moodle is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Moodle is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
-
-/**
- * Admin settings search form
- *
- * @package    admin
- * @copyright  2016 Damyon Wiese
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-defined('MOODLE_INTERNAL') || die();
-
-require_once $CFG->libdir.'/formslib.php';
-
-/**
- * Admin settings search form
- *
- * @package    admin
- * @copyright  2016 Damyon Wiese
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class admin_settings_search_form extends moodleform {
-    function definition () {
-        $mform = $this->_form;
-
-        //$mform->addElement('header', 'settingsheader', get_string('search', 'admin'));
-        $elements = [];
-        $elements[] = $mform->createElement('text', 'query', get_string('query', 'admin'));
-        $elements[] = $mform->createElement('submit', 'search', get_string('search'));
-        $mform->addGroup($elements);
-        $mform->setType('query', PARAM_RAW);
-        $mform->setDefault('query', optional_param('query', '', PARAM_RAW));
-    }
-}
index 5539517..98ec900 100644 (file)
@@ -68,9 +68,16 @@ if ($errormsg !== '') {
 $showsettingslinks = true;
 
 if ($hassiteconfig) {
-    require_once("admin_settings_search_form.php");
-    $form = new admin_settings_search_form();
-    $form->display();
+    $data = [
+        'action' => new moodle_url('/admin/search.php'),
+        'btnclass' => 'btn-primary',
+        'inputname' => 'query',
+        'searchstring' => get_string('search'),
+        'query' => $query,
+        'extraclasses' => 'd-flex justify-content-center'
+    ];
+    echo $OUTPUT->render_from_template('core/search_input', $data);
+
     echo '<hr>';
     if ($query) {
         echo admin_search_settings_html($query);
index af027de..98f5d91 100644 (file)
@@ -56,7 +56,7 @@ class behat_admin extends behat_base {
             $this->execute('behat_navigation::i_select_from_flat_navigation_drawer', [get_string('administrationsite')]);
 
             // Search by label.
-            $this->execute('behat_forms::i_set_the_field_to', [get_string('query', 'admin'), $label]);
+            $this->execute('behat_forms::i_set_the_field_to', [get_string('search'), $label]);
             $this->execute("behat_forms::press_button", get_string('search', 'admin'));
 
             // Admin settings does not use the same DOM structure than other moodle forms
diff --git a/lib/amd/build/search-input.min.js b/lib/amd/build/search-input.min.js
deleted file mode 100644 (file)
index 5e2f8db..0000000
Binary files a/lib/amd/build/search-input.min.js and /dev/null differ
diff --git a/lib/amd/build/search-input.min.js.map b/lib/amd/build/search-input.min.js.map
deleted file mode 100644 (file)
index f6a55ed..0000000
Binary files a/lib/amd/build/search-input.min.js.map and /dev/null differ
diff --git a/lib/amd/src/search-input.js b/lib/amd/src/search-input.js
deleted file mode 100644 (file)
index 85f9bb1..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-// This file is part of Moodle - http://moodle.org/
-//
-// Moodle is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Moodle is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
-
-/**
- * Search box.
- *
- * @module     core/search-input
- * @class      search-input
- * @package    core
- * @copyright  2016 David Monllao {@link http://www.davidmonllao.com}
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since      Moodle 3.1
- */
-define(['jquery'], function($) {
-
-    /**
-     * This search box div node.
-     *
-     * @private
-     */
-    var wrapper = null;
-
-    /**
-     * Toggles the form visibility.
-     *
-     * @param {Event} ev
-     * @method toggleForm
-     * @private
-     */
-    var toggleForm = function(ev) {
-
-        if (wrapper.hasClass('expanded')) {
-            hideForm();
-        } else {
-            showForm(ev);
-        }
-    };
-
-    /**
-     * Shows the form or submits it depending on the window size.
-     *
-     * @param {Event} ev
-     * @method showForm
-     * @private
-     */
-    var showForm = function(ev) {
-
-        var windowWidth = $(document).width();
-
-        // We are only interested in enter and space keys (accessibility).
-        if (ev.type === 'keydown' && ev.keyCode !== 13 && ev.keyCode !== 32) {
-            return;
-        }
-
-        if (windowWidth <= 767 && (ev.type === 'click' || ev.type === 'keydown')) {
-            // Move to the search page when using small window sizes as the input requires too much space.
-            submitForm();
-            return;
-        } else if (windowWidth <= 767) {
-            // Ignore mousedown events in while using small window sizes.
-            return;
-        }
-
-        if (ev.type === 'keydown') {
-            // We don't want to submit the form unless the user hits enter.
-            ev.preventDefault();
-        }
-
-        wrapper.addClass('expanded');
-        wrapper.find('form').addClass('expanded');
-        wrapper.find('input').focus();
-    };
-
-    /**
-     * Hides the form.
-     *
-     * @method hideForm
-     * @private
-     */
-    var hideForm = function() {
-        wrapper.removeClass('expanded');
-        wrapper.find('form').removeClass('expanded');
-    };
-
-    /**
-     * Submits the form.
-     *
-     * @param {Event} ev
-     * @method submitForm
-     * @private
-     */
-    var submitForm = function() {
-        wrapper.find('form').submit();
-    };
-
-    return /** @alias module:core/search-input */ {
-        // Public variables and functions.
-
-        /**
-         * Assigns listeners to the requested select box.
-         *
-         * @method init
-         * @param {Number} id The search wrapper div id
-         */
-        init: function(id) {
-            wrapper = $('#' + id);
-            wrapper.on('click mouseover keydown', 'div', toggleForm);
-        }
-    };
-});
diff --git a/lib/templates/search_input.mustache b/lib/templates/search_input.mustache
new file mode 100644 (file)
index 0000000..48c20f7
--- /dev/null
@@ -0,0 +1,66 @@
+{{!
+    This file is part of Moodle - http://moodle.org/
+
+    Moodle is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    Moodle is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+}}
+{{!
+    @template core/search_input
+
+    Simple search input.
+
+    Example context (json):
+    {
+        "action": "https://moodle.local/admin/search.php",
+        "extraclasses": "my-2",
+        "inputname": "search",
+        "searchstring": "Search settings",
+        "value": "policy",
+        "btnclass": "primary",
+        "query": "themedesigner",
+        "hiddenfields": [
+            {
+                "name": "context",
+                "value": "11"
+            }
+        ]
+    }
+}}
+<div class="simplesearchform {{{ extraclasses }}}">
+    <form autocomplete="off" action="{{{ action }}}" method="get" accept-charset="utf-8" class="mform form-inline simplesearchform">
+    {{#hiddenfields}}
+        <input type="hidden" name="{{ name }}" value="{{ value }}">
+    {{/hiddenfields}}
+    <div class="input-group">
+        <label for="searchinput-{{uniqid}}">
+            <span class="sr-only">{{{ searchstring }}}</span>
+        </label>
+        <input type="text"
+           id="searchinput-{{uniqid}}"
+           class="form-control"
+           placeholder="{{{ searchstring }}}"
+           aria-label="{{{ searchstring }}}"
+           name="{{{ inputname }}}"
+           data-region="input"
+           autocomplete="off"
+           value="{{{ query }}}"
+        >
+        <div class="input-group-append">
+            <button type="submit" class="btn {{^btnclass}}btn-submit{{/btnclass}} {{{ btnclass }}} search-icon">
+                {{#pix}} a/search, core {{/pix}}
+                <span class="sr-only">{{{ searchstring }}}</span>
+            </button>
+        </div>
+    </div>
+</form>
+</div>
\ No newline at end of file