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'
});
});
