6d5f9d84d25737bdc470231876e62f28b6948e47
[moodle.git] / theme / boost / amd / src / loader.js
1 // This file is part of Moodle - http://moodle.org/
2 //
3 // Moodle is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // Moodle is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16 /**
17  * Template renderer for Moodle. Load and render Moodle templates with Mustache.
18  *
19  * @module     core/templates
20  * @package    core
21  * @class      templates
22  * @copyright  2015 Damyon Wiese <damyon@moodle.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  * @since      2.9
25  */
27 import $ from 'jquery';
28 import Aria from './aria';
29 import Scroll from './scroll';
30 import Bootstrap from './bootstrap/index';
31 import CustomEvents from 'core/custom_interaction_events';
33 /**
34  * Set up the search.
35  *
36  * @method init
37  */
38 export {
39     init,
40     Bootstrap
41 };
43 /**
44  * Bootstrap init function
45  */
46 const init = () => {
47     rememberTabs();
49     enablePopovers();
51     enableTooltips();
53     const scroll = new Scroll();
54     scroll.init();
56     // Disables flipping the dropdowns up and getting hidden behind the navbar.
57     $.fn.dropdown.Constructor.Default.flip = false;
59     Aria.init();
60 };
62 /**
63  * Rember the last visited tabs.
64  */
65 const rememberTabs = () => {
66     $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
67         var hash = $(e.target).attr('href');
68         if (history.replaceState) {
69             history.replaceState(null, null, hash);
70         } else {
71             location.hash = hash;
72         }
73     });
74     var hash = window.location.hash;
75     if (hash) {
76        $('.nav-link[href="' + hash + '"]').tab('show');
77     }
78 };
80 /**
81  * Enable all popovers
82  *
83  */
84 const enablePopovers = () => {
85     $('body').popover({
86         selector: '[data-toggle="popover"]',
87         trigger: 'focus hover',
88         placement: 'auto'
89     });
91     CustomEvents.define($('body'), [
92         CustomEvents.events.escape,
93     ]);
94     $('body').on(CustomEvents.events.escape, '[data-toggle=popover]', function() {
96         $(this).trigger('blur');
97     });
98 };
100 /**
101  * Enable tooltips
102  *
103  */
104 const enableTooltips = () => {
105     $('body').tooltip({
106         container: 'body',
107         selector: '[data-toggle="tooltip"]'
108     });
109 };