مدیاویکی:Common.js

نسخهٔ تاریخ ‏۲۴ نوامبر ۲۰۲۱، ساعت ۱۵:۵۶ توسط Admin (بحث | مشارکت‌ها)

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/* Any JavaScript here will be loaded for all users on every page load. */
/* $('#mw-content-text').not(":has('#editform')").each(function(){
    $(this).html(farsi_number($(this).html()));
})

function farsi_number(html_string){
    html_array=html_string.split("");
    var in_tag=false;
    if(html_array){
        for(var x in html_array){
            character=html_array[x];
            if(character=='<'){
                in_tag=true;continue;
            }
            if(character==">"){
                in_tag=false;continue;
            }
            if(!in_tag){
                character=num2fa(character);
                html_array[x]=character;
            }
        }
        html_string=html_array.join("");
    }
    return html_string;
}

function num2fa(string){
    farsi_array=new Array("0","1","2","3","4","5","6","7","8","9");
    english_array=new Array("0","1","2","3","4","5","6","7","8","9");
    for(var x in english_array){
        string=string.replace(new RegExp(english_array[x],"g"),farsi_array[x]);
    }
    return string;
}
*/

var autoCollapse = 2;
var collapseCaption = "نهفتن";
var expandCaption = "نمایش";
var expandCaption_more = "ادامه مطلب";

function collapseTable( tableIndex )
{
    var Button = document.getElementById( "collapseButton" + tableIndex );
    var Table = document.getElementById( "collapsibleTable" + tableIndex );

    if ( !Table || !Button ) {
        return false;
    }

    var Rows = Table.rows;
/**
  * AMDEADMAN Edit for readmore collapse added if
  */
    if ($("#collapsibleTable" + tableIndex).hasClass('readmore') & Button.firstChild.data == collapseCaption ) {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption_more;
    } else if ( Button.firstChild.data == collapseCaption ) {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}

function createCollapseButtons() {
    var tableIndex = 0;
    var NavigationBoxes = {};
    var Tables = document.getElementsByTagName( 'table' );
    var i;

    function handleButtonLink( index, e ) {
        window.collapseTable( index );
        e.preventDefault();
    }

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

            Button.className = 'collapseButton';  /* Styles are declared in Common.css */

            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
            ButtonLink.setAttribute( 'href', '#' );
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
            ButtonLink.appendChild( ButtonText );

            Button.appendChild( document.createTextNode( '[' ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( ']' ) );
/**
  * AMDEADMAN Edit for readmore collapse
  */
            if($( Tables[i] ).hasClass( 'readmore' )){
                $(Header).html($(Header).text()).append(Button);
            } else {
                Header.insertBefore( Button, Header.firstChild );
            }
            tableIndex++;
        }
    }

    for ( i = 0;  i < tableIndex; i++ ) {
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
            window.collapseTable( i );
        }
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
            var element = NavigationBoxes[i];
            while ((element = element.parentNode)) {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
                    window.collapseTable ( i );
                    break;
                }
            }
        }
    }
}

$( createCollapseButtons );

/*</pre>
===Dynamic Navigation Bars ===
<pre> */

/** Dynamic Navigation Bars (experimental) *************************************
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */

// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';

// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavigationBar: the index of navigation bar to be toggled
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
    var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
    var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
    var NavChild;

    if ( !NavFrame || !NavToggle ) {
        return false;
    }

    /* if shown now */
    if ( NavToggle.firstChild.data === NavigationBarHide ) {
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                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( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }

    event.preventDefault();
};

/* adds show/hide-button to navigation bars */
function createNavigationBarToggleButton() {
    var indexNavigationBar = 0;
    var NavFrame;
    var NavChild;
    /* iterate over all < div >-elements */
    var divs = document.getElementsByTagName( 'div' );
    for ( var i = 0; (NavFrame = divs[i]); i++ ) {
        /* if found a navigation bar */
        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {

            indexNavigationBar++;
            var NavToggle = document.createElement( 'a' );
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
            NavToggle.setAttribute( 'href', '#' );
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );

            var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
            /**
             * Check if any children are already hidden.  This loop is here for backwards compatibility:
             * the old way of making NavFrames start out collapsed was to manually add style="display:none"
             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
             * the content visible without JavaScript support), the new recommended way is to add the class
             * "collapsed" to the NavFrame itself, just like with collapsible tables.
             */
            for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
                if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                    if ( NavChild.style.display === 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if ( isCollapsed ) {
                for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
                    if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );
            NavToggle.appendChild( NavToggleText );

            /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
            for( var j = 0; j < NavFrame.childNodes.length; j++ ) {
                if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild( NavToggle );
                }
            }
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
        }
    }
}

function align_mp_box() {
  var firstColumn = $('.first-column-container');
  var secondColumn = $('.second-column-container');

  var firstColumnLastChild = firstColumn.children().last();
  var secondColumnLastChild = secondColumn.children().last();

  var firstChildDataPaddingBottom = firstColumnLastChild.data('padding-bottom');
  var secondChildDataPaddingBottom = secondColumnLastChild.data('padding-bottom');

  if (typeof firstChildDataPaddingBottom == 'undefined') {
    firstChildDataPaddingBottom = Math.round(parseInt(firstColumnLastChild.css('padding-bottom')));
    firstColumnLastChild.data('padding-bottom', firstChildDataPaddingBottom);
  }

  if (typeof secondChildDataPaddingBottom == 'undefined') {
    secondChildDataPaddingBottom = Math.round(parseInt(secondColumnLastChild.css('padding-bottom')));
    secondColumnLastChild.data('padding-bottom', secondChildDataPaddingBottom);
  }

  firstColumnLastChild.css('padding-bottom', firstChildDataPaddingBottom)
  secondColumnLastChild.css('padding-bottom', secondChildDataPaddingBottom)

  var firstColumnHeight = firstColumn.height();
  var secondColumnHeight = secondColumn.height();

  var diff = Math.round(firstColumnHeight - secondColumnHeight);


  var lastChild = null;
  var lastChildPaddingBottom = null;
  if (diff > 0) {
    lastChild = secondColumn.children().last();
    lastChildPaddingBottom = secondChildDataPaddingBottom;
  } else {
    lastChild = firstColumn.children().last();
    lastChildPaddingBottom = firstChildDataPaddingBottom;
    diff = Math.abs(diff);
  }

  lastChild.css('padding-bottom', (lastChildPaddingBottom + diff));
}

function showModal() {
  var modalHtml = '<div class="modal fade" id="popUpOverlay">\n' +
    '  <div class="modal-dialog">\n' +
    '    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">\n' +
    '      <i class="fa fa-close"></i>\n' +
    '    </button>\n' +
    '    <a href="https://www.wikihussain.com/campaign" target="_blank">\n' +
    '      <img src="/assets/images/popup.png" class="img-responsive">\n' +
    '    </a>\n' +
    '  </div>\n' +
    '</div>\n';

  if (typeof(Storage) !== "undefined") {
    var showModal = localStorage.getItem("donatePopup");

    if (!showModal) {
      jQuery('body').append(modalHtml);
      jQuery('#popUpOverlay').modal('show');
      localStorage.setItem("donatePopup", "1");
    }
  }
}

/*
function replaceText1(selector, text, newText) {
    var matcher = new RegExp(text, 'g');
    jQuery(selector).each(function () {
        var $this = jQuery(this);
        if($this.prop("tagName")!='STYLE' && $this.prop("tagName")!='SCRIPT' && $this.prop("tagName")!='IMG' && $this.prop("tagName")!='PRE' && !$this.children().length )
            $this.text($this.text().replace(matcher, newText));
        
    });
}


function replaceText2(searchText, replacement, searchNode) {
  if (!searchText || typeof replacement === 'undefined') {
      // Throw error here if you want...
      return;
  }
  var regex = typeof searchText === 'string' ?
              new RegExp(searchText, 'g') : searchText,
      childNodes = (searchNode || document.body).childNodes,
      cnLength = childNodes.length,
      excludes = 'html,head,style,title,link,meta,script,object,iframe';
  while (cnLength--) {
      var currentNode = childNodes[cnLength];
      if (currentNode.nodeType === 1 &&
          (excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
          arguments.callee(searchText, replacement, currentNode);
      }
      if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
          continue;
      }
      var parent = currentNode.parentNode,
          frag = (function(){
              var html = currentNode.data.replace(regex, replacement),
                  wrap = document.createElement('div'),
                  frag = document.createDocumentFragment();
              wrap.innerHTML = html;
              while (wrap.firstChild) {
                  frag.appendChild(wrap.firstChild);
              }
              return frag;
          })();
      parent.insertBefore(frag, currentNode);
      parent.removeChild(currentNode);
  }
}

function replaceText3(element, pattern, replacement) {
  for (let node of element.childNodes) {
      switch (node.nodeType) {
          case Node.ELEMENT_NODE:
              replaceText3(node, pattern, replacement);
              break;
          case Node.TEXT_NODE:
              node.textContent = node.textContent.replace(pattern, replacement);
              break;
          case Node.DOCUMENT_NODE:
              replaceText3(node, pattern, replacement);
      }
  }
}
*/
jQuery(document).ready(function () {

  align_mp_box();
  // showModal();

  if (
    window.location.hostname != 'localhost'
    && window.location.hostname != '127.0.0.1'
    && window.location.hostname != 'wiki'
    && window.location.hostname != 'fa.wiki'
    && window.location.hostname != 'en.wiki'
    && window.location.hostname != 'fr.wiki'
  ) {

    (function (i, s, o, g, r, a, m) {
      i['GoogleAnalyticsObject'] = r;
      i[r] = i[r] || function () {
        (i[r].q = i[r].q || []).push(arguments)
      }, i[r].l = 1 * new Date();
      a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
      a.async = 1;
      a.src = g;
      m.parentNode.insertBefore(a, m)
    })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');

    ga('create', 'UA-85669311-1', 'auto');
    ga('send', 'pageview');
  }
  
  /*
  
  if(window.location.hostname == 'fa.wikihussain.com') {
    var faNum=['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
    for(k in faNum){
      replaceText1(document.body,k,faNum[k]);    
      //replaceText2(document.body,k,faNum[k]);    
      replaceText3(document.body,k,faNum[k]);    

    }

  }
  */
});

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DMBHXB1QVZ"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-DMBHXB1QVZ');
</script>

jQuery(window).on('load', function () {
  align_mp_box();
});

jQuery(window).on('resize', function () {
  align_mp_box();
});