<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://koreapedia.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FaisalBlink</id>
	<title>koreapedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://koreapedia.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FaisalBlink"/>
	<link rel="alternate" type="text/html" href="https://koreapedia.wiki/Special:Contributions/FaisalBlink"/>
	<updated>2026-04-11T01:32:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://koreapedia.wiki/index.php?title=MediaWiki:Common.js&amp;diff=388</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://koreapedia.wiki/index.php?title=MediaWiki:Common.js&amp;diff=388"/>
		<updated>2025-11-02T17:04:12Z</updated>

		<summary type="html">&lt;p&gt;FaisalBlink: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
/* Google Translate widget for Chameleon skin (selected languages only) — SAFE FOR VE */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  // ---- guards: never run on editor/VE or without Chameleon navbar ----&lt;br /&gt;
  mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    var isVE = mw.util.getParamValue(&#039;veaction&#039;) === &#039;edit&#039;;&lt;br /&gt;
    var isEdit = mw.config.get(&#039;wgAction&#039;) === &#039;edit&#039;;&lt;br /&gt;
    var isChameleon = mw.config.get(&#039;skin&#039;) === &#039;chameleon&#039;;&lt;br /&gt;
    var hasNavbar = !!document.querySelector(&#039;.navbar-collapse&#039;);&lt;br /&gt;
&lt;br /&gt;
    if (isVE || isEdit || !isChameleon || !hasNavbar) {&lt;br /&gt;
      return; // bail out: do not touch DOM or load scripts while editing / wrong skin&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var LANGS = &#039;ko,ja,es,de,zh-CN,zh-TW,fr,ar,hi,pt,ru&#039;;&lt;br /&gt;
    var CONTAINER_ID = &#039;google_translate_element&#039;;&lt;br /&gt;
&lt;br /&gt;
    function ensureContainer() {&lt;br /&gt;
      // only attach inside the Chameleon navbar; never fall back to &amp;lt;body&amp;gt; on VE&lt;br /&gt;
      var host = document.querySelector(&#039;.navbar-collapse&#039;);&lt;br /&gt;
      if (!host) return;&lt;br /&gt;
      if (!document.getElementById(CONTAINER_ID)) {&lt;br /&gt;
        var el = document.createElement(&#039;div&#039;);&lt;br /&gt;
        el.id = CONTAINER_ID;&lt;br /&gt;
        el.style.marginLeft = &#039;15px&#039;;&lt;br /&gt;
        host.appendChild(el);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // dedicated init&lt;br /&gt;
    window.koreapediaGTEInit = function () {&lt;br /&gt;
      ensureContainer();&lt;br /&gt;
      if (!(window.google &amp;amp;&amp;amp; google.translate &amp;amp;&amp;amp; google.translate.TranslateElement)) return;&lt;br /&gt;
      new google.translate.TranslateElement({&lt;br /&gt;
        pageLanguage: &#039;en&#039;,&lt;br /&gt;
        includedLanguages: LANGS,&lt;br /&gt;
        layout: google.translate.TranslateElement.InlineLayout.SIMPLE&lt;br /&gt;
      }, CONTAINER_ID);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function loadOrInit() {&lt;br /&gt;
      if (window.google &amp;amp;&amp;amp; google.translate &amp;amp;&amp;amp; google.translate.TranslateElement) {&lt;br /&gt;
        window.koreapediaGTEInit();&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (!document.querySelector(&#039;script[src*=&amp;quot;translate_a/element.js&amp;quot;]&#039;)) {&lt;br /&gt;
        var s = document.createElement(&#039;script&#039;);&lt;br /&gt;
        s.src = &#039;https://translate.google.com/translate_a/element.js?cb=koreapediaGTEInit&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ---- Only attach styling logic when the widget can actually appear (read view) ----&lt;br /&gt;
    (function () {&lt;br /&gt;
      var RIGHT_INSET = 160;&lt;br /&gt;
      var FRAME_WIDTH = 500;&lt;br /&gt;
&lt;br /&gt;
      function styleMenuFrame(f) {&lt;br /&gt;
        try {&lt;br /&gt;
          f.style.setProperty(&#039;width&#039;, FRAME_WIDTH + &#039;px&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;maxWidth&#039;, FRAME_WIDTH + &#039;px&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;borderRadius&#039;, &#039;8px&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;boxShadow&#039;, &#039;0 8px 24px rgba(0,0,0,.18)&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;clip-path&#039;, &#039;inset(0 &#039; + RIGHT_INSET + &#039;px 0 0)&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;-webkit-clip-path&#039;, &#039;inset(0 &#039; + RIGHT_INSET + &#039;px 0 0)&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;overflow&#039;, &#039;hidden&#039;, &#039;important&#039;);&lt;br /&gt;
          f.style.setProperty(&#039;zIndex&#039;, &#039;999999&#039;, &#039;important&#039;);&lt;br /&gt;
        } catch (e) {}&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      function findAndStyle() {&lt;br /&gt;
        var frames = document.querySelectorAll(&lt;br /&gt;
          &#039;iframe.goog-te-menu-frame, iframe[id*=&amp;quot;goog-te-menu&amp;quot;], iframe[src*=&amp;quot;translate.googleapis.com&amp;quot;], iframe[src*=&amp;quot;translate.google.com&amp;quot;]&#039;&lt;br /&gt;
        );&lt;br /&gt;
        frames.forEach(styleMenuFrame);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
        var el = e.target.closest &amp;amp;&amp;amp; e.target.closest(&#039;#google_translate_element&#039;);&lt;br /&gt;
        if (el) {&lt;br /&gt;
          setTimeout(findAndStyle, 120);&lt;br /&gt;
          setTimeout(findAndStyle, 400);&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      window.addEventListener(&#039;resize&#039;, function () {&lt;br /&gt;
        setTimeout(findAndStyle, 150);&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // scope the observer only on read view; avoid observing whole document in editors&lt;br /&gt;
      var mo = new MutationObserver(function () { setTimeout(findAndStyle, 50); });&lt;br /&gt;
      mo.observe(document.body, { childList: true, subtree: true });&lt;br /&gt;
&lt;br /&gt;
      // init&lt;br /&gt;
      $(function () {&lt;br /&gt;
        ensureContainer();&lt;br /&gt;
        loadOrInit();&lt;br /&gt;
        findAndStyle();&lt;br /&gt;
      });&lt;br /&gt;
    })();&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>FaisalBlink</name></author>
	</entry>
</feed>