Vés al contingut

Usuari:Xaris333/vector.js

De la Viquipèdia, l'enciclopèdia lliure

if (mw.config.get('wgPageName')=="Special:BlankPage/list") {

 var list = prompt("Paste list of page names").split('\n');
 alert(list);
 for (var i = 0; i < list.length; i++) {
   open("https://el.wikipedia.org/w/index.php?action=edit&title="+encodeURIComponent(list[i].replace(/ /g,'_')));
 }

} importScript('en:User:NicoV/TemplateDataEditor.js'); importScript('User:Salix alba/TDSkell.js'); /*jslint browser: true, regexp: true, unparam: true*/ /*global jQuery: false, mw: false */ (function ($) {

   'use strict';
   var translationTextArea,
       progressCount,
       itemsCount,
       ajaxUrl,
       conf = {
           'homeWiki': 'el',
           'fromLang': mw.config.get('wgPageContentLanguage'),
           'translatorBarFormat': '$1translate$2 links from $3 to $4 ($5)',
           'templateTranslatorText': 'Template translation',
           'removeLinksAliasesText': 'Remove Links Aliases',
           'doneText': 'Done!',
           'enableTemplateTranslation': true,
           'removeLinksAliases': true,
           'enableNeedingShow': false,
           'name': 'Name',
           'interwikiCount': 'Interwiki Count',
           'linkedTo': 'Linked to',
           'listOfUnavailablePagesOn': 'List of not available pages on'
       };

   $.extend(conf, window.articleTranslatorConf);

   // getting the last translator preference from the cookie
   if ($.cookie('homeWiki') !== null) {
       conf.homeWiki = $.cookie('homeWiki');
   }

   if ($.cookie('fromLang') !== null) {
       conf.fromLang = $.cookie('fromLang');
   }
   //

   // from: http://80.68.89.23/2006/Jan/20/escape/
   function escape(text) {
       return text.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
   }

   function getOrigin() {
       var result = location.protocol + '//' + location.host;
       if (location.port !== ) {
           result = result + ':' + location.port;
       }
       return result;
   }

   function getOriginOfWikiLang(lang) {
       return getOrigin().replace(mw.config.get('wgPageContentLanguage'), lang);
   }

   function setAjaxUrl() {
       var tailOfApiUrl = '/api.php?action=query&prop=langlinks&redirects=&format=json&lllimit=500&titles=';
       if (conf.enableNeedingShow === true) {
           tailOfApiUrl = '/api.php?action=query&prop=langlinks|links&redirects=&format=json&pllimit=500&lllimit=500&titles=';
       }
       ajaxUrl = getOriginOfWikiLang(conf.fromLang) + mw.config.get('wgScriptPath') + tailOfApiUrl;
   }

   function getSelectedTextLinks() {
       // borrowed from: http://stackoverflow.com/questions/4220478 :)
       var selection,
           selectionAncestor,
           range,
           allWithinRangeParent,
           allSelected,
           i,
           el;

       // if `window.getSelection` is not defined (on IE) return nothing.
       if (window.getSelection === undefined) {
           return [];
       }
       selection = window.getSelection();

       // if nothing is selected, return empty array
       if (selection.isCollapsed) {
           return [];
       }

       range = selection.getRangeAt(0);
       selectionAncestor = range.commonAncestorContainer;
       if (selectionAncestor.getElementsByTagName === undefined) { // if it is not a formal HTML selection
           return [];
       }
       allWithinRangeParent = selectionAncestor.getElementsByTagName('a');

       allSelected = [];
       for (i = 0; (el = allWithinRangeParent[i]) !== undefined; i += 1) {
           // The second parameter says to include the element 
           // even if it's not fully selected
           if (selection.containsNode(el, true)) {
               allSelected.push(el);
           }
       }
       return allSelected;
   }

   function increaseProgressCount() {
       progressCount = progressCount + 1;
       $('#translatorProgress').attr('value', progressCount);

       if (progressCount === itemsCount) {
           $('#translatorProgress').hide('slow');
           $('#translatorStatus').css('font-weight', 'bold').text(conf.doneText).show('slow');
           if (conf.enableNeedingShow) {
               var links = [],
                   result,
                   linksCount,
                   titleExistance = {},
                   title;
               $('.translatorNeededLink').each(function (k, v) {
                   title = $(v).attr('data-title');
                   if (titleExistance[title] === true) {
                       return;
                   }
                   titleExistance[title] = true;
                   linksCount = $(v).attr('data-links-to-count');
                   if (parseInt(linksCount, 10) === 500) {
                       linksCount = '500+';
                   }
                   links.push([title, parseInt($(v).attr('data-interwikis'), 10), linksCount]);
               });
               links = links.sort(function (x, y) { return y[1] - x[1]; });

result = '

' + links.map(function (x) { return ''; }).join() + '
' + conf.name + '' + conf.interwikiCount + '' + conf.linkedTo + '
' + x[0] + '' + x[1] + '' + x[2] + '

';

               $('#translatorPlusContainer').remove();

$('

' + conf.listOfUnavailablePagesOn + ' ' + conf.homeWiki + '.wiki:\n
' + result + '

').appendTo('#translatorBar');

           }
       }
   }

   function queryTranslationFromData(data) {
       var languageLinks,
           linksToCount = 0,
           translation;

       if (data.query === undefined || data.query.pages === undefined) {
           return null;
       }
       $.each(data.query.pages, function (key, value) { // for retrieving first object index
           languageLinks = value.langlinks;
           if (value.links !== undefined) {
               linksToCount = value.links.length;
           }
       });
       if (languageLinks === undefined) {
           return null;
       }
       $.each(languageLinks, function (key, value) { // we can also use .filter here
           if (value.lang === conf.homeWiki) {
               translation = value['*'];
           }
       });
       return {
           translation: translation,
           linksToCount: linksToCount,
           interwikis: languageLinks.length
       };
   }

   function commonAjaxRunner(title, translatorFunction) {
       $.ajax({
           url: ajaxUrl + encodeURIComponent(title),
           complete: function () {
               increaseProgressCount();
           },
           success: function (data) {
               var translation = queryTranslationFromData(data);
               if (translation !== null) {
                   translatorFunction(translation);
               }
           },
           dataType: 'jsonp'
       });
   }

   function addTranslationToNode(node, translation) {
       if (translation.translation !== undefined) {
           node.after('(<a href="' + getOriginOfWikiLang(conf.homeWiki) + mw.util.getUrl(translation.translation) + '">' + translation.translation + '</a>)');
       } else if (conf.enableNeedingShow === true) {
           node.after('(' + translation.interwikis + ')');
       }
   }

   function translateFromLanguageLinkNode(title, node) {
       commonAjaxRunner(title, function (translation) {
           addTranslationToNode(node, translation);
       });
   }

   // for Links in textareas
   function addTranslationToTextareaLink(title, translation) {
       translationTextArea.val(translationTextArea.val().replace(
           new RegExp('(\\[\\[:?)' + escape(title) + '((?:\\|[^\\]]*)?)(\\]\\])'),
           '$1' + translation + (conf.removeLinksAliases ?  : '$2') + '$3'
       ));
   }

   function translateFromLanguageLinks(title) {
       commonAjaxRunner(title, function (translation) {
           if (translation.translation !== undefined) {
               addTranslationToTextareaLink(title, translation.translation);
           }
       });
   }

   // for Plantilla:TemplateLinks in textareas
   function addTranslationToTextareaTemplateLink(title, translation) {
       translationTextArea.val(translationTextArea.val().replace(
           new RegExp('(\\{\\{\\s*(?:[Tt]emplate:)?)' + escape(title) + '([\\n\\|\\}])'),
           '$1' + translation + '$2'
       ));
   }

   function translateFromLanguageTemplateLinks(title) {
       commonAjaxRunner('Template:' + title, function (translation) {
           if (translation.translation !== undefined) {
               addTranslationToTextareaTemplateLink(title, translation.translation.replace(/^.*?:/, ));
           }
       });
   }

   function parseUrl(url) {
       if (url === undefined) {
           return undefined;
       }
       var match = url.match(/\/wiki\/([^#]*)/);
       if (match === null) {
           match = url.match(/\/w\/index\.php\?title=([^&#]*).*redlink=1/);
       }

       if (match !== null) {
           return decodeURI(match[1]); // returns () matched text
       }
       return undefined;
   }

   function getLinkTitle(link) { // previously it was link.attr("title")
       return parseUrl(link.attr('href'));
   }

   function run() {
       setAjaxUrl();
       progressCount = 0;
       itemsCount = 0;
       $('#translatorStatus').hide(0);
       $('#translatorProgress').removeAttr('max').removeAttr('value');
       $('.translatorAddedcontent').remove();

       var links,
           templates,
           i,
           title,
           action = mw.config.get('wgAction');

       if (action === 'view' || action === 'purge' || action === 'historysubmit') {
           links = getSelectedTextLinks();
           if (links.length === 0) {
               links = $('#bodyContent a');
           }

           $(links).each(function () {
               var iter = $(this),
                   title = getLinkTitle(iter);
               if (title !== undefined) {
                   itemsCount = itemsCount + 1;
                   translateFromLanguageLinkNode(title, iter);
               }
           });

           $('#translatorProgress').show().attr('max', itemsCount);

       } else if (action === 'edit' || action === 'submit') {
           $('#wpTextbox2').remove(); // remove translation textarea if exists

           if (conf.fromLang === mw.config.get('wgPageContentLanguage')) {
               translationTextArea = $('#wpTextbox1').clone().attr({
                   'id': 'wpTextbox2'
               }).css({ // new color for translation textarea
                   'background-color': '#CCCEFF'
               }).val($('#wpTextbox1').val()); // this something that clone must do
               $('#wpTextbox1').before(translationTextArea); // put translation textarea before old
           } else {
               translationTextArea = $('#wpTextbox1');
           }

           // for links
           links = translationTextArea.val().match(/\[\[.*?\]\]/g);
           templates = translationTextArea.val().match(/\{\{.*?[\n\|\}]/g);

           itemsCount = -1;
           if (links !== null) {
               for (i = 0; i < links.length; i = i + 1) { // equals with for (i in matched)
                   title = links[i].replace(/\[\[:?([^\]\|]*)\|?.*?\]\]/g, "$1");
                   translateFromLanguageLinks(title);
               }

               if (itemsCount === -1) {
                   itemsCount = 0;
               }

               itemsCount = itemsCount + links.length;
           }

           if (templates !== null && conf.enableTemplateTranslation === true) {
               for (i = 0; i < templates.length; i = i + 1) { // equals with for (i in matched)
                   title = templates[i].replace(/\{\{\s*(?:[Tt]emplate:)?(.*)\s*[\n\|\}]/g, '$1');
                   translateFromLanguageTemplateLinks(title);
               }

               if (itemsCount === -1) {
                   itemsCount = 0;
               }

               itemsCount = itemsCount + templates.length;
           }

           if (itemsCount !== -1) {
               $('#translatorProgress').show().attr('max', itemsCount);
           }
       }
   }

   function initiateEditor(forEditable, inputForEditable, setVariableClosure) {
       $(forEditable).click(function (event) {
           event.preventDefault();
           $(forEditable).hide();
           $(inputForEditable).css('width', '2em').show().val($(forEditable).text());
       });

       $(inputForEditable).keyup(function (event) {
           var selectedLanugage = $(this).val();

           if (event.keyCode === 13) {
               $(this).focusout(); // on enter
           } else if (event.keyCode === 27) {
               $(forEditable).show(); // on escape
               $(inputForEditable).hide().val(selectedLanugage);
           }

       }).focusout(function () {
           var selectedLanugage = $(this).val();

           if (/...?/.test(selectedLanugage)) {
               setVariableClosure(selectedLanugage);
               $(forEditable).html(selectedLanugage);
           }

           $(forEditable).show();
           $(inputForEditable).hide();
       });
   }

   $(function () {
       $('#translatorBar').remove();

       // HTML Builder
       var hb = [],
           bar = conf.translatorBarFormat,
           action = mw.config.get('wgAction');

hb.push('

');
       bar = bar.replace('$1', '<a id="translator-equ" href="#">=</a><a id="translator-button" href="#">');
       bar = bar.replace('$2', '</a><a id="translator-plus" href="#">+</a>');
       bar = bar.replace('$3', '<a id="translator-from" href="#">' + conf.fromLang + '</a><input style="display: none" id="translator-from-input">');
       bar = bar.replace('$4', '<a id="translator-to" href="#">' + conf.homeWiki + '</a><input style="display: none" id="translator-to-input">');
       bar = bar.replace('$5', '<a id="translator-switch" href="$">↔</a>');

       hb.push(bar);

       if (action === "edit" || action === "submit") {
           hb.push(' <input type="checkbox" name="enableTemplateTranslation" id="enableTemplateTranslation"><label for="enableTemplateTranslation">' + conf.templateTranslatorText + '</label>');
           hb.push(' <input type="checkbox" name="removeLinksAliases" id="removeLinksAliases"><label for="removeLinksAliases">' + conf.removeLinksAliasesText + '</label>');
       }

hb.push('  <progress id="translatorProgress" style="display: none;">In progress...</progress>

');

       $('h1:first').append(hb.join());

       $('#translator-button').click(function (event) {
           event.preventDefault();
           conf.enableNeedingShow = false;
           run();
       });

       $('#translator-equ').click(function (event) {
           event.preventDefault();
           var title = mw.config.get('wgTitle');
           $('#translator-equ-links').html('<a target="_blank" href="//translate.google.com/translate_t?sl=' + conf.fromLang + '&tl=' + conf.homeWiki + '&q=' + title + '">Translator</a> / <a target="_blank" href=\'//www.google.com/search?q="' + encodeURI(title) + '"&lr=lang_' + conf.homeWiki + '\'>Specific Language Search</a> ');
       });

       $('#translator-plus').click(function (event) {
           event.preventDefault();
           conf.enableNeedingShow = true;
           run();
       });

       $('#translator-switch').click(function (event) {
           event.preventDefault();

           var t = conf.homeWiki;

           conf.homeWiki = conf.fromLang;
           $.cookie("homeWiki", conf.fromLang);
           $('#translator-to').html(conf.fromLang);

           conf.fromLang = t;
           $.cookie("fromLang", t);
           $('#translator-from').html(t);
       });

       initiateEditor('#translator-to', '#translator-to-input', function (value) {
           conf.homeWiki = value;
           $.cookie("homeWiki", value);
       });

       initiateEditor('#translator-from', '#translator-from-input', function (value) {
           conf.fromLang = value;
           $.cookie("fromLang", value);
       });

       $('#enableTemplateTranslation').attr('checked', conf.enableTemplateTranslation).click(function () {
           conf.enableTemplateTranslation = this.checked;
       });

       $('#removeLinksAliases').attr('checked', conf.removeLinksAliases).click(function () {
           conf.removeLinksAliases = this.checked;
       });
       importScript('Χρήστης:Xaris333/linkclassifier.js'); // Linkback: Χρήστης:Xaris333/linkclassifier.js

importStylesheet('Χρήστης:Xaris333/linkclassifier.css'); // Linkback: Χρήστης:Xaris333/linkclassifier.css

   });

}(jQuery));