Difference between revisions of "MediaWiki:Common.js"
Difference between revisions of "MediaWiki:Common.js"
Line 1: | Line 1: | ||
− | ; (function ( | + | ;(function(){ |
− | + | /* ======================================================================== | |
− | + | * Bootstrap: scrollspy.js v3.0.2 | |
− | + | * http://getbootstrap.com/javascript/#scrollspy | |
− | + | * ======================================================================== | |
− | + | * Copyright 2013 Twitter, Inc. | |
− | + | * | |
− | + | * Licensed under the Apache License, Version 2.0 (the "License"); | |
− | + | * you may not use this file except in compliance with the License. | |
− | + | * You may obtain a copy of the License at | |
− | + | * | |
− | + | * http://www.apache.org/licenses/LICENSE-2.0 | |
− | + | * | |
− | + | * Unless required by applicable law or agreed to in writing, software | |
− | + | * distributed under the License is distributed on an "AS IS" BASIS, | |
− | + | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
− | + | * See the License for the specific language governing permissions and | |
− | + | * limitations under the License. | |
− | + | * ======================================================================== */ | |
− | + | ||
− | + | ||
− | + | +function ($) { "use strict"; | |
− | + | ||
− | + | // SCROLLSPY CLASS DEFINITION | |
− | + | // ========================== | |
− | + | ||
− | + | function ScrollSpy(element, options) { | |
− | + | var href | |
− | + | var process = $.proxy(this.process, this) | |
− | + | ||
− | + | this.$element = $(element).is('body') ? $(window) : $(element) | |
− | + | this.$body = $('body') | |
− | + | this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process) | |
− | + | this.options = $.extend({}, ScrollSpy.DEFAULTS, options) | |
− | + | this.selector = (this.options.target | |
− | + | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 | |
− | + | || '') + ' .nav li > a' | |
− | + | this.offsets = $([]) | |
− | + | this.targets = $([]) | |
− | + | this.activeTarget = null | |
− | + | ||
− | + | this.refresh() | |
− | + | this.process() | |
− | + | } | |
− | + | ||
− | + | ScrollSpy.DEFAULTS = { | |
− | + | offset: 10 | |
− | + | } | |
− | + | ||
− | + | ScrollSpy.prototype.refresh = function () { | |
− | + | var offsetMethod = this.$element[0] == window ? 'offset' : 'position' | |
− | + | ||
− | + | this.offsets = $([]) | |
− | + | this.targets = $([]) | |
− | + | ||
− | + | var self = this | |
− | + | var $targets = this.$body | |
− | + | .find(this.selector) | |
− | + | .map(function () { | |
− | + | var $el = $(this) | |
− | + | var href = $el.data('target') || $el.attr('href') | |
− | + | var $href = /^#\w/.test(href) && $(href) | |
− | + | ||
− | + | return ($href | |
− | + | && $href.length | |
− | + | && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null | |
− | + | }) | |
− | + | .sort(function (a, b) { return a[0] - b[0] }) | |
− | + | .each(function () { | |
− | + | self.offsets.push(this[0]) | |
− | + | self.targets.push(this[1]) | |
− | + | }) | |
− | + | } | |
− | + | ||
− | + | ScrollSpy.prototype.process = function () { | |
− | + | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset | |
− | + | var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight | |
− | + | var maxScroll = scrollHeight - this.$scrollElement.height() | |
− | + | var offsets = this.offsets | |
− | + | var targets = this.targets | |
− | + | var activeTarget = this.activeTarget | |
− | + | var i | |
− | + | ||
− | + | if (scrollTop >= maxScroll) { | |
− | + | return activeTarget != (i = targets.last()[0]) && this.activate(i) | |
− | + | } | |
− | + | ||
− | + | for (i = offsets.length; i--;) { | |
− | + | activeTarget != targets[i] | |
− | + | && scrollTop >= offsets[i] | |
− | + | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) | |
− | + | && this.activate( targets[i] ) | |
− | + | } | |
− | + | } | |
− | + | ||
− | + | ScrollSpy.prototype.activate = function (target) { | |
− | + | this.activeTarget = target | |
− | + | ||
− | + | $(this.selector) | |
− | + | .parents('.active') | |
− | + | .removeClass('active') | |
− | + | ||
− | + | var selector = this.selector | |
− | + | + '[data-target="' + target + '"],' | |
− | + | + this.selector + '[href="' + target + '"]' | |
− | + | ||
− | + | var active = $(selector) | |
− | + | .parents('li') | |
− | + | .addClass('active') | |
− | + | ||
− | + | if (active.parent('.dropdown-menu').length) { | |
− | + | active = active | |
− | + | .closest('li.dropdown') | |
− | + | .addClass('active') | |
− | + | } | |
− | + | ||
− | + | active.trigger('activate.bs.scrollspy') | |
− | + | } | |
− | + | ||
− | + | ||
− | + | // SCROLLSPY PLUGIN DEFINITION | |
− | + | // =========================== | |
− | + | ||
− | + | var old = $.fn.scrollspy | |
− | + | ||
− | + | $.fn.scrollspy = function (option) { | |
− | + | return this.each(function () { | |
− | + | var $this = $(this) | |
− | + | var data = $this.data('bs.scrollspy') | |
− | + | var options = typeof option == 'object' && option | |
− | + | ||
− | + | if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) | |
− | + | if (typeof option == 'string') data[option]() | |
− | + | }) | |
− | + | } | |
− | + | ||
− | + | $.fn.scrollspy.Constructor = ScrollSpy | |
− | + | ||
− | + | ||
− | + | // SCROLLSPY NO CONFLICT | |
− | + | // ===================== | |
− | + | ||
− | + | $.fn.scrollspy.noConflict = function () { | |
− | + | $.fn.scrollspy = old | |
− | + | return this | |
− | + | } | |
− | + | ||
− | + | ||
− | + | // SCROLLSPY DATA-API | |
− | + | // ================== | |
− | + | ||
− | + | $(window).on('load', function () { | |
− | + | $('[data-spy="scroll"]').each(function () { | |
− | + | var $spy = $(this) | |
− | + | $spy.scrollspy($spy.data()) | |
− | + | }) | |
− | + | }) | |
− | + | ||
− | + | }(jQuery); | |
− | + | ||
− | + | })(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | })( | ||
Revision as of 07:07, 7 February 2019
;(function(){ /* ======================================================================== * Bootstrap: scrollspy.js v3.0.2 * http://getbootstrap.com/javascript/#scrollspy * ======================================================================== * Copyright 2013 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ +function ($) { "use strict"; // SCROLLSPY CLASS DEFINITION // ========================== function ScrollSpy(element, options) { var href var process = $.proxy(this.process, this) this.$element = $(element).is('body') ? $(window) : $(element) this.$body = $('body') this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process) this.options = $.extend({}, ScrollSpy.DEFAULTS, options) this.selector = (this.options.target || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 || '') + ' .nav li > a' this.offsets = $([]) this.targets = $([]) this.activeTarget = null this.refresh() this.process() } ScrollSpy.DEFAULTS = { offset: 10 } ScrollSpy.prototype.refresh = function () { var offsetMethod = this.$element[0] == window ? 'offset' : 'position' this.offsets = $([]) this.targets = $([]) var self = this var $targets = this.$body .find(this.selector) .map(function () { var $el = $(this) var href = $el.data('target') || $el.attr('href') var $href = /^#\w/.test(href) && $(href) return ($href && $href.length && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null }) .sort(function (a, b) { return a[0] - b[0] }) .each(function () { self.offsets.push(this[0]) self.targets.push(this[1]) }) } ScrollSpy.prototype.process = function () { var scrollTop = this.$scrollElement.scrollTop() + this.options.offset var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight var maxScroll = scrollHeight - this.$scrollElement.height() var offsets = this.offsets var targets = this.targets var activeTarget = this.activeTarget var i if (scrollTop >= maxScroll) { return activeTarget != (i = targets.last()[0]) && this.activate(i) } for (i = offsets.length; i--;) { activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) && this.activate( targets[i] ) } } ScrollSpy.prototype.activate = function (target) { this.activeTarget = target $(this.selector) .parents('.active') .removeClass('active') var selector = this.selector + '[data-target="' + target + '"],' + this.selector + '[href="' + target + '"]' var active = $(selector) .parents('li') .addClass('active') if (active.parent('.dropdown-menu').length) { active = active .closest('li.dropdown') .addClass('active') } active.trigger('activate.bs.scrollspy') } // SCROLLSPY PLUGIN DEFINITION // =========================== var old = $.fn.scrollspy $.fn.scrollspy = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.scrollspy') var options = typeof option == 'object' && option if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) if (typeof option == 'string') data[option]() }) } $.fn.scrollspy.Constructor = ScrollSpy // SCROLLSPY NO CONFLICT // ===================== $.fn.scrollspy.noConflict = function () { $.fn.scrollspy = old return this } // SCROLLSPY DATA-API // ================== $(window).on('load', function () { $('[data-spy="scroll"]').each(function () { var $spy = $(this) $spy.scrollspy($spy.data()) }) }) }(jQuery); })(); $( document ).ready() { //Activate windows scroller to highlight links $('body').scrollspyv2(); //Hide TOC from mobile $('.toc').addClass('hidden-xs'); $('.toc').addClass('hidden-sm'); //On scroll $(window).scroll(function(){ scrollingToc(); }); scrollingToc(); } function scrollingToc() { if($(window).scrollTop()>150) { $('.toc').removeClass('affix-top toc-top'); $('.toc').addClass('affix toc-scrolling'); } else { $('.toc').removeClass('affix toc-scrolling'); $('.toc').addClass('affix-top toc-top'); } } //--------------------Variables for the auto highlighter---------------// var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var x = new Date(); x.setMonth(x.getMonth() + 12); var y = ' || ' + x.getFullYear() + '-' + monthNames[x.getMonth()] + '-' + x.getDate() + ' }}'; //--------------------Visible and Invisible options for the defined text (red,green,blue)---------------// jQuery.fn.visible = function() { return this.css('visibility', 'visible'); }; jQuery.fn.invisible = function() { return this.css('visibility', 'hidden'); }; jQuery.fn.visibilityToggle = function() { return this.css('visibility', function(i, visibility) { return (visibility == 'visible') ? 'hidden' : 'visible'; }); }; //--------------------Editing Toolbar Buttons---------------// $.ajax({ url: 'https://meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript', dataType: 'script', cache: true }).done(function () { krInsertWikiEditorButton({ id: "mw-customeditbutton-policiesDiv", icon: "//rpm.rcabc.org/resources/assets/policiesDiv.png", label: 'Guiding Principles Div', insertBefore: '<div class="principles">', insertAfter: '</div>', sampleText: 'Guiding Principles Div' }); krInsertWikiEditorButton({ id: "mw-customeditbutton-policiesSpan", icon: "//rpm.rcabc.org/resources/assets/policiesSpan.png", label: 'Guiding Principles Span', insertBefore: '<span class="principles">', insertAfter: '</span>', sampleText: 'Guiding Principles Span' }); krInsertWikiEditorButton({ id: "mw-customeditbutton-policiesP", icon: "//rpm.rcabc.org/resources/assets/policiesP.png", label: 'Guiding Principles Paragraph', insertBefore: '<p class="principles">', insertAfter: '</p>', sampleText: 'Guiding Principles Paragraph' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-recommendedDiv', icon: '//rpm.rcabc.org/resources/assets/recommendationsDiv.png', label: 'Recommended', insertBefore: '<div class="recommended">', insertAfter: '</div>', sampleText: 'Recommended' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-recommendedSpan', icon: '//rpm.rcabc.org/resources/assets/recommendationsSpan.png', label: 'Recommended Span', insertBefore: '<span class="recommended">', insertAfter: '</span>', sampleText: 'Recommended Span' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-recommendedP', icon: '//rpm.rcabc.org/resources/assets/recommendationsP.png', label: 'Recommended Paragraph', insertBefore: '<p class="recommended">', insertAfter: '</p>', sampleText: 'Recommended Paragraph' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-referenceDiv', icon: '//rpm.rcabc.org/resources/assets/referenceDiv.png', label: 'Reference Div', insertBefore: '<div class="reference">', insertAfter: '</div>', sampleText: 'Reference Div' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-referenceSpan', icon: '//rpm.rcabc.org/resources/assets/referenceSpan.png', label: 'Reference Span', insertBefore: '<span class="reference">', insertAfter: '</span>', sampleText: 'Reference Span' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-referenceP', icon: '//rpm.rcabc.org/resources/assets/referenceP.png', label: 'Reference Paragraph', insertBefore: '<p class="reference">', insertAfter: '</p>', sampleText: 'Reference Paragraph' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-tabgroup', icon: '//rpm.rcabc.org/resources/assets/tabstart.png', label: 'Create Tab Group', insertBefore: '<tabs>', insertAfter: '</tabs>' }); krInsertWikiEditorButton({ id: 'mw-customeditbutton-tab', icon: '//rpm.rcabc.org/resources/assets/tab.png', label: 'Create Tab', insertBefore: '<tab name="CHANGE ME">', insertAfter: '</tab>' }); krInsertWikiEditorButton({ id: "mw-customeditbutton-hilite", icon: "//upload.wikimedia.org/wikipedia/commons/3/3f/Button_attendre.png", label: 'Highlight with Date', insertBefore: '{{hilite | ', insertAfter: y, sampleText: 'Highlight this' }); krInsertWikiEditorButton({ id: "mw-customeditbutton-hilite", icon: "//upload.wikimedia.org/wikipedia/commons/0/08/VisualEditor_-_Icon_-_Strikethrough-a.svg", label: 'Strike with Date', insertBefore: '{{strike| ', insertAfter: y, sampleText: 'Strike this' }); krInsertWikiEditorButton({ id: "mw-customeditbutton-tooltip", icon: "//upload.wikimedia.org/wikipedia/commons/2/27/Antu_help_hover.svg", label: 'Tooltip popout window', insertBefore: '<span class="tooltiptext">', insertAfter: '</span>', sampleText: 'Tooltip Popout' }); });