|
|
(160 intermediate revisions by 9 users not shown) |
Line 1: |
Line 1: |
| /* Any JavaScript here will be loaded for all users on every page load. */ | | /* Add Adobe Analytics Tracking Details 2022-11-17 */ |
| | // First listen to an event that is fired when the FS object is available |
| | window.addEventListener('ExReady', function(){ |
| | |
| | // Call setTimeout to avoid a flaw in FS that triggers infinite recursion |
| | setTimeout(function(){ |
|
| |
|
| /** Test if an element has a certain class | | // Now configure the page data and manually trigger the page view |
| * Description: Uses regular expressions and caching for better performance.
| | FS.Analytics.updatePageViewData({ |
| * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
| | page_channel: 'Wiki', |
| */
| | page_detail: 'Wiki Test' |
| var hasClass = (function() {
| | }); |
| var reCache = {}; | | FS.Analytics.trackPageView(); |
| return function(element, className) { | | }); |
| return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
| | }); |
| };
| | /* End Adobe Analytics Tracking Details */ |
| })(); | |
|
| |
|
| | /* Fix for <imagemap>s to prevent them from resizing */ |
| | $( document ).ready(function() { |
| | $('[usemap]').each(function() { |
| | $(this).css('min-width', parseInt($(this).attr('width'))); |
| | }); |
| | }); |
|
| |
|
| /** | | /* Add obvious background color to Beta */ |
| * Collapsible tables
| | if (document.location.origin.indexOf("beta") > -1) { |
| *
| | document.getElementById("mw-head").style.backgroundColor = "#ffb3b3"; |
| * @version 2.0.2 (2014-03-14)
| |
| * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
| |
| * @author [[User:R. Koot]]
| |
| * @author [[User:Krinkle]] | |
| * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
| |
| * is supported in MediaWiki core.
| |
| */
| |
| /*global $, mw */
| |
| var autoCollapse = 2;
| |
| var collapseCaption = 'hide';
| |
| var expandCaption = 'show';
| |
| | |
| (function() {
| |
| function collapseTable(tableIndex) {
| |
| var Button = document.getElementById('collapseButton' + tableIndex);
| |
| var Table = document.getElementById('collapsibleTable' + tableIndex);
| |
| | |
| if (!Table || !Button) {
| |
| return false;
| |
| }
| |
| | |
| var Rows = Table.rows;
| |
| var i;
| |
| | |
| if (Button.firstChild.data === collapseCaption) {
| |
| for (i = 1; i < Rows.length; i++) {
| |
| Rows[i].style.display = 'none';
| |
| }
| |
| Button.firstChild.data = expandCaption;
| |
| } else {
| |
| for (i = 1; i < Rows.length; i++) {
| |
| Rows[i].style.display = Rows[0].style.display;
| |
| }
| |
| Button.firstChild.data = collapseCaption;
| |
| }
| |
| }
| |
| | |
| function createClickHandler(tableIndex) {
| |
| return function(e) {
| |
| e.preventDefault();
| |
| collapseTable(tableIndex);
| |
| };
| |
| }
| |
| | |
| function createCollapseButtons() {
| |
| var tableIndex = 0;
| |
| var NavigationBoxes = {};
| |
| var Tables = document.getElementsByTagName('table');
| |
| var i;
| |
| | |
| for (i = 0; i < Tables.length; i++) {
| |
| if ($(Tables[i]).hasClass('collapsible')) {
| |
| /* only add button and increment count if there is a header row to work with */
| |
| var HeaderRow = Tables[i].getElementsByTagName('tr')[0];
| |
| if (!HeaderRow) {
| |
| continue;
| |
| }
| |
| var Header = HeaderRow.getElementsByTagName('th')[0];
| |
| if (!Header) {
| |
| continue;
| |
| }
| |
| | |
| NavigationBoxes[tableIndex] = Tables[i];
| |
| Tables[i].setAttribute('id', 'collapsibleTable' + tableIndex);
| |
| | |
| var Button = document.createElement('span');
| |
| var ButtonLink = document.createElement('a');
| |
| var ButtonText = document.createTextNode(collapseCaption);
| |
| // TODO: Declare styles in [[MediaWiki:Gadget-collapsibleTables.css]]
| |
| // Button.className = 'collapseButton';
| |
| Button.style.styleFloat = 'right';
| |
| Button.style.cssFloat = 'right';
| |
| Button.style.fontWeight = 'normal';
| |
| Button.style.textAlign = 'right';
| |
| Button.style.width = '6em';
| |
| | |
| ButtonLink.style.color = Header.style.color;
| |
| ButtonLink.setAttribute('id', 'collapseButton' + tableIndex);
| |
| ButtonLink.setAttribute('href', '#');
| |
| $(ButtonLink).on('click', createClickHandler(tableIndex));
| |
| ButtonLink.appendChild(ButtonText);
| |
| | |
| Button.appendChild(document.createTextNode('['));
| |
| Button.appendChild(ButtonLink);
| |
| Button.appendChild(document.createTextNode(']'));
| |
| | |
| Header.insertBefore(Button, Header.firstChild);
| |
| tableIndex++;
| |
| }
| |
| }
| |
| | |
| for (i = 0; i < tableIndex; i++) {
| |
| if ($(NavigationBoxes[i]).hasClass('collapsed') ||
| |
| (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass('autocollapse'))
| |
| ) {
| |
| collapseTable(i);
| |
| }
| |
| }
| |
| }
| |
| | |
| mw.hook('wikipage.content').add(createCollapseButtons);
| |
| }());
| |
| | |
| /**
| |
| * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]]
| |
| * Based on script from en.wikipedia.org, 2008-09-15.
| |
| * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js
| |
| * @maintainer Helder.wiki, 2012–2013
| |
| * @maintainer Krinkle, 2013
| |
| */
| |
| (function() {
| |
| // set up the words in your language
| |
| var navigationBarHide = '[' + collapseCaption + ']';
| |
| var navigationBarShow = '[' + expandCaption + ']';
| |
| | |
| /**
| |
| * Shows and hides content and picture (if available) of navigation bars.
| |
| * @param {number} indexNavigationBar The index of navigation bar to be toggled
| |
| * @param {jQuery.Event} e Event object
| |
| */
| |
| function toggleNavigationBar(indexNavigationBar, e) { | |
| var navChild,
| |
| navToggle = document.getElementById('NavToggle' + indexNavigationBar),
| |
| navFrame = document.getElementById('NavFrame' + indexNavigationBar);
| |
| | |
| // Prevent browser from jumping to href "#"
| |
| e.preventDefault();
| |
| | |
| if (!navFrame || !navToggle) {
| |
| return false;
| |
| }
| |
| | |
| // If shown now
| |
| if (navToggle.firstChild.data == navigationBarHide) {
| |
| for (navChild = navFrame.firstChild; navChild !== null; navChild = navChild.nextSibling) {
| |
| if (hasClass(navChild, 'NavPic')) {
| |
| navChild.style.display = 'none';
| |
| }
| |
| if (hasClass(navChild, 'NavContent')) {
| |
| navChild.style.display = 'none';
| |
| }
| |
| }
| |
| navToggle.firstChild.data = navigationBarShow;
| |
| | |
| // If hidden now
| |
| } else if (navToggle.firstChild.data == navigationBarShow) {
| |
| for (navChild = navFrame.firstChild; navChild !== null; navChild = navChild.nextSibling) {
| |
| if ($(navChild).hasClass('NavPic') || $(navChild).hasClass('NavContent')) {
| |
| navChild.style.display = 'block';
| |
| }
| |
| }
| |
| navToggle.firstChild.data = navigationBarHide;
| |
| }
| |
| }
| |
| | |
| /**
| |
| * Adds show/hide-button to navigation bars.
| |
| * @param {jQuery} $content
| |
| */
| |
| function createNavigationBarToggleButton($content) {
| |
| var i, j, navFrame, navToggle, navToggleText, navChild,
| |
| indexNavigationBar = 0,
| |
| navFrames = $content.find('div.NavFrame').toArray();
| |
| | |
| // Iterate over all (new) nav frames
| |
| for (i = 0; i < navFrames.length; i++) {
| |
| navFrame = navFrames[i];
| |
| // If found a navigation bar
| |
| indexNavigationBar++;
| |
| navToggle = document.createElement('a');
| |
| navToggle.className = 'NavToggle';
| |
| navToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
| |
| navToggle.setAttribute('href', '#');
| |
| $(navToggle).on('click', $.proxy(toggleNavigationBar, null, indexNavigationBar));
| |
| | |
| navToggleText = document.createTextNode(navigationBarHide);
| |
| for (navChild = navFrame.firstChild; navChild !== null; navChild = navChild.nextSibling) {
| |
| if ($(navChild).hasClass('NavPic') || $(navChild).hasClass('NavContent')) {
| |
| if (navChild.style.display == 'none') {
| |
| navToggleText = document.createTextNode(navigationBarShow);
| |
| break;
| |
| }
| |
| }
| |
| }
| |
| | |
| navToggle.appendChild(navToggleText);
| |
| // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
| |
| for (j = 0; j < navFrame.childNodes.length; j++) {
| |
| if ($(navFrame.childNodes[j]).hasClass('NavHead')) {
| |
| navFrame.childNodes[j].appendChild(navToggle);
| |
| }
| |
| }
| |
| navFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
| |
| }
| |
| }
| |
| | |
| mw.hook('wikipage.content').add(createNavigationBarToggleButton);
| |
| }());
| |
| | |
| //Adding Header/Footer to these pages
| |
| (function() {
| |
| var css = document.createElement('link');
| |
| css.rel = 'stylesheet';
| |
| css.href = '//familysearch.org/hf/hf.css';
| |
| var head = document.querySelector('head');
| |
| head.insertBefore(css, head.childNodes[0]);
| |
| })();
| |
| | |
| (function() {
| |
| var body = document.querySelector('body');
| |
| body.innerHTML = '<div class="wikiContainer">' + body.innerHTML + '</div>';
| |
| body.insertBefore(document.createElement('header'), body.childNodes[0]);
| |
| body.appendChild(document.createElement('footer'));
| |
| })();
| |
| | |
| (function() {
| |
| var meta = document.createElement('meta');
| |
| meta.name = 'hf_base_url';
| |
| meta.content = 'https://familysearch.org';
| |
| var head = document.querySelector('head');
| |
| head.insertBefore(meta, head.childNodes[0]);
| |
| })();
| |
| | |
| (function() {
| |
| var fs = document.createElement('script');
| |
| fs.type = 'text/javascript';
| |
| fs.async = true;
| |
| var base_url = "https://familysearch.org";
| |
| fs.src = 'https://familysearch.org/hf/hf.js' + (base_url === "" ? "" : "?base_url=" + base_url);
| |
| var s = document.getElementsByTagName('script')[0];
| |
| s.parentNode.insertBefore(fs, s);
| |
| })();
| |
| | |
| function getCookie(name) {
| |
| var re = new RegExp(name + "=([^;]+)");
| |
| var value = re.exec(document.cookie);
| |
| return (value !== null) ? unescape(value[1]) : null;
| |
| } | | } |
| setTimeout(function() {
| |
| var templeCookie = getCookie('fs-highconf') || getCookie('fs-templeinfo');
| |
| if (templeCookie && templeCookie.indexOf('true') > -1) {
| |
| var body = document.querySelector('body');
| |
| body.classList.add('templeMember');
| |
| }
| |
| }, 2000);
| |
|
| |
| /* Fix for double title */
| |
| (function(){
| |
| var mainTitle = document.querySelector('#firstHeading');
| |
| var secondTitle = document.querySelector('#mw-content-text > h1');
| |
| if(mainTitle && secondTitle){
| |
| mainTitle.hidden = true;
| |
| }
| |
| })();
| |