Difference between revisions of "MediaWiki:Common.js"

Jump to: navigation, search

Difference between revisions of "MediaWiki:Common.js"

 
(39 intermediate revisions by the same user not shown)
Line 1: Line 1:
;(function(){
+
// Terms Modal
  /* ========================================================================
+
$(document).ready(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);
 
 
 
})();
 
  
 +
  setTimeout(function() {
 +
    const termsModal = $('#termsModal');
  
 +
    if (termsModal.length) {
 +
      // Check if the "rpmTermsAgreement" cookie is present
 +
      if (!document.cookie.includes('rpmTermsAgreement')) {
 +
        // Show the Bootstrap modal
 +
        termsModal.modal({
 +
          backdrop: "static"
 +
        });
 +
      }
  
$( document ).ready()
+
      // Agree button click event to set the "rpm" cookie
 
+
      $('#agreeTermsButton').click(function() {
{
+
        termsModal.modal('hide');
    //Activate windows scroller to highlight links
+
       
    $('body').scrollspyv2();
+
        // Set the "rpmTermsAgreement" cookie with expiration date five years from now
    //Hide TOC from mobile
+
        var expirationDate = new Date();
    $('.toc').addClass('hidden-xs');
+
        expirationDate.setFullYear(expirationDate.getFullYear() + 5);
    $('.toc').addClass('hidden-sm');
+
        document.cookie = "rpmTermsAgreement=true; expires=" + expirationDate.toUTCString() + "; path=/";
    //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');
 
 
     }
 
     }
}
+
  }, 200);
  
//--------------------Variables for the auto highlighter---------------//
+
  /* MailChimp Form */
var monthNames = ["January", "February", "March", "April", "May", "June",
 
  "July", "August", "September", "October", "November", "December"
 
];
 
  
var x = new Date();
+
  var mailchimpFormHTML =
x.setMonth(x.getMonth() + 12);
+
    '<div id="mc_embed_signup">' +
 +
    '    <form action="https://rcabc.us21.list-manage.com/subscribe/post?u=aa570610c198792349997a983&amp;id=91bc758592&amp;f_id=000857e1f0" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_self">' +
 +
    '        <div id="mc_embed_signup_scroll">' +
 +
    '            <div class="mc-field-group form-group">' +
 +
    '                <label for="mce-EMAIL">Email Address</label>' +
 +
    '                <input type="email" value="" name="EMAIL" class="required email form-control" id="mce-EMAIL" required>' +
 +
    '                <span id="mce-EMAIL-HELPERTEXT" class="helper_text"></span>' +
 +
    '            </div>' +
 +
    '            <div id="mce-responses" class="clear foot">' +
 +
    '                <div class="response" id="mce-error-response" style="display:none"></div>' +
 +
    '                <div class="response" id="mce-success-response" style="display:none"></div>' +
 +
    '            </div>' +
 +
    '            <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_aa570610c198792349997a983_91bc758592" tabindex="-1" value=""></div>' +
 +
    '            <input type="submit" value="Subscribe To RPM Updates" name="subscribe" id="mc-embedded-subscribe" class="btn btn-primary">' +
 +
    '        </div>' +
 +
    '    </form>' +
 +
    '</div>';
  
var y = ' || ' + x.getFullYear() + '-' + monthNames[x.getMonth()] + '-' + x.getDate() + ' }}';
+
  $('#mailchimpForm').html(mailchimpFormHTML);
 
 
//--------------------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'
 
  });
 
 
});
 
});

Latest revision as of 22:13, 19 June 2023

// Terms Modal
$(document).ready(function() {

  setTimeout(function() {
    const termsModal = $('#termsModal');

    if (termsModal.length) {
      // Check if the "rpmTermsAgreement" cookie is present
      if (!document.cookie.includes('rpmTermsAgreement')) {
        // Show the Bootstrap modal
        termsModal.modal({
          backdrop: "static"
        });
      }

      // Agree button click event to set the "rpm" cookie
      $('#agreeTermsButton').click(function() {
        termsModal.modal('hide');
        
        // Set the "rpmTermsAgreement" cookie with expiration date five years from now
        var expirationDate = new Date();
        expirationDate.setFullYear(expirationDate.getFullYear() + 5);
        document.cookie = "rpmTermsAgreement=true; expires=" + expirationDate.toUTCString() + "; path=/";
      });
    }
  }, 200);

  /* MailChimp Form */

  var mailchimpFormHTML =
    '<div id="mc_embed_signup">' +
    '    <form action="https://rcabc.us21.list-manage.com/subscribe/post?u=aa570610c198792349997a983&amp;id=91bc758592&amp;f_id=000857e1f0" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_self">' +
    '        <div id="mc_embed_signup_scroll">' +
    '            <div class="mc-field-group form-group">' +
    '                <label for="mce-EMAIL">Email Address</label>' +
    '                <input type="email" value="" name="EMAIL" class="required email form-control" id="mce-EMAIL" required>' +
    '                <span id="mce-EMAIL-HELPERTEXT" class="helper_text"></span>' +
    '            </div>' +
    '            <div id="mce-responses" class="clear foot">' +
    '                <div class="response" id="mce-error-response" style="display:none"></div>' +
    '                <div class="response" id="mce-success-response" style="display:none"></div>' +
    '            </div>' +
    '            <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_aa570610c198792349997a983_91bc758592" tabindex="-1" value=""></div>' +
    '            <input type="submit" value="Subscribe To RPM Updates" name="subscribe" id="mc-embedded-subscribe" class="btn btn-primary">' +
    '        </div>' +
    '    </form>' +
    '</div>';

  $('#mailchimpForm').html(mailchimpFormHTML);
});