MediaWiki:Gadget-PreloadTemplates.js: Difference between revisions

From Tardis Wiki, the free Doctor Who reference
(display name, case-by-case preload page)
mNo edit summary
Line 46: Line 46:
             // English
             // English
             en: {
             en: {
                 preload: 'Preload template:',
                 preload: "Preload template:",
                 choose: '(choose)',
                 choose: "(choose)",
                 help: 'Select a template to insert its preloaded syntax at the current position ',
                 help: "Select a template to insert its preloaded syntax at the current position",
                 devWiki: 'Check the documentation on Dev Wiki',
                 devWiki: "Check the documentation on Dev Wiki",
                 error: 'No valid syntax found at $1 or page is missing.'
                 error: "No valid syntax found at $1 or page is missing."
             },
             },
             // Belarusian
             // Belarusian
             be: {
             be: {
                 preload: 'Гатовы шаблон:',
                 preload: "Гатовы шаблон:",
                 choose: '(выберыце)',
                 choose: "(выберыце)",
                 help: 'Выберыце падрыхтаваны шаблон, каб ўставіць код у дадзеным месцы',
                 help: "Выберыце падрыхтаваны шаблон, каб ўставіць код у дадзеным месцы",
                 devWiki: 'Паглядзець дакументацыю на Dev Wiki',
                 devWiki: "Паглядзець дакументацыю на Dev Wiki",
                 error: 'Не знойдзены правільны сінтаксіс у $1 ці старонка не існуе.'
                 error: "Не знойдзены правільны сінтаксіс у $1 ці старонка не існуе."
             },
             },
             // Catalan
             // Catalan
             ca: {
             ca: {
                 preload: 'Pre-carrega una plantilla:',
                 preload: "Pre-carrega una plantilla:",
                 choose: '(tria)',
                 choose: "(tria)",
                 help: 'Selecciona una plantilla per inserir la seva sintaxi pre-carregada a la posició actual',
                 help: "Selecciona una plantilla per inserir la seva sintaxi pre-carregada a la posició actual",
                 devWiki: 'Controla la documentació al Dev Wiki',
                 devWiki: "Controla la documentació al Dev Wiki",
                 error: 'Cap sintaxi vàlida trobada a $1 o la pàgina hi falta.'
                 error: "Cap sintaxi vàlida trobada a $1 o la pàgina hi falta."
             },
             },
             // German
             // German
             de: {
             de: {
                 preload: 'Vorlage einfügen:',
                 preload: "Vorlage einfügen:",
                 choose: '(Auswählen)',
                 choose: "(Auswählen)",
                 help: 'Wähle die Vorlage, deren vorgefertigte Syntax an der aktuellen Position eingefügt werden soll',
                 help: "Wähle die Vorlage, deren vorgefertigte Syntax an der aktuellen Position eingefügt werden soll",
                 devWiki: 'Lies die Dokumentation im Dev-Wiki',
                 devWiki: "Lies die Dokumentation im Dev-Wiki",
                 error: 'Keine gültige Syntax unter $1 gefunden bzw. keine Seite.'
                 error: "Keine gültige Syntax unter $1 gefunden bzw. keine Seite."
             },
             },
             // Spanish
             // Spanish
             es: {
             es: {
                 preload: 'Precarga una plantilla:',
                 preload: "Precarga una plantilla:",
                 choose: '(elige)',
                 choose: "(elige)",
                 help: 'Selecciona una plantilla para insertar su sintaxis precargada en la posición actual',
                 help: "Selecciona una plantilla para insertar su sintaxis precargada en la posición actual",
                 devWiki: 'Controla la documentación en la Dev Wiki',
                 devWiki: "Controla la documentación en la Dev Wiki",
                 error: 'Ninguna sintaxis válida encontrada en $1 o falta la página.'
                 error: "Ninguna sintaxis válida encontrada en $1 o falta la página."
             },
             },
             // French
             // French
             fr: {
             fr: {
                 preload: 'Précharger un modèle :',
                 preload: "Précharger un modèle :",
                 choose: '(choisir)',
                 choose: "(choisir)",
                 help: 'Sélectionnez un modèle pour insérer sa syntaxe préchargée dans la position actuelle',
                 help: "Sélectionnez un modèle pour insérer sa syntaxe préchargée dans la position actuelle",
                 devWiki: 'Contrôlez la documentation sur le Dev Wiki',
                 devWiki: "Contrôlez la documentation sur le Dev Wiki",
                 error: 'Aucune syntaxe valable trouvée sur $1 ou la page est absente.'
                 error: "Aucune syntaxe valable trouvée sur $1 ou la page est absente."
             },
             },
             // Finnish
             // Finnish
             fi: {
             fi: {
                 preload: 'Esilataa malline:',
                 preload: "Esilataa malline:",
                 choose: '(valitse)',
                 choose: "(valitse)",
                 help: 'Valitse malline lisätäksesi sen esiladatun syntaksin nykyiseen paikkaan',
                 help: "Valitse malline lisätäksesi sen esiladatun syntaksin nykyiseen paikkaan",
                 devWiki: 'Katso dokumentointi Dev Wikissä',
                 devWiki: "Katso dokumentointi Dev Wikissä",
                 error: 'Väärin syntaksi kohdassa $1 or tai sivu puuttuu.'
                 error: "Väärin syntaksi kohdassa $1 or tai sivu puuttuu."
             },
             },
             // Galician
             // Galician
             gl: {
             gl: {
                 preload: 'Pre-carga un modelo:',
                 preload: "Pre-carga un modelo:",
                 choose: '(elixe)',
                 choose: "(elixe)",
                 help: 'Selecciona un modelo para inserir a súa sintaxe pre-cargada na posición actual',
                 help: "Selecciona un modelo para inserir a súa sintaxe pre-cargada na posición actual",
                 devWiki: 'Controla a documentación no Dev Wiki',
                 devWiki: "Controla a documentación no Dev Wiki",
                 error: 'Ningunha sintaxe válida atopada en $1 ou a páxina está a faltar.'
                 error: "Ningunha sintaxe válida atopada en $1 ou a páxina está a faltar."
             },           
             },           
             // Bahasa Indonesia
             // Bahasa Indonesia
             'id': {
             "id": {
                 preload: 'Pramuat templat:',   
                 preload: "Pramuat templat:",   
                 choose: '(plihan)',             
                 choose: "(plihan)",             
                 help: 'Pilihlah sebuah templat untuk dimasukkan ke pramuat sintaksis di posisi sekarang ini ',
                 help: "Pilihlah sebuah templat untuk dimasukkan ke pramuat sintaksis di posisi sekarang ini ",
                 devWiki: 'Mengecek dokumentasi di devwiki',
                 devWiki: "Mengecek dokumentasi di devwiki",
                 error: 'Tidak ditemukan sintaksis yang sah ditemukan $1 atau laman menghilang.'
                 error: "Tidak ditemukan sintaksis yang sah ditemukan $1 atau laman menghilang."
             },
             },
             // Italian
             // Italian
             it: {
             it: {
                 preload: 'Precarica un template:',
                 preload: "Precarica un template:",
                 choose: '(scegli)',
                 choose: "(scegli)",
                 help: 'Seleziona un template per inserire la sua sintassi precaricata nella posizione corrente',
                 help: "Seleziona un template per inserire la sua sintassi precaricata nella posizione corrente",
                 devWiki: 'Controlla la documentazione su Dev Wiki',
                 devWiki: "Controlla la documentazione su Dev Wiki",
                 error: 'Nessuna sintassi valida trovata su $1 o la pagina è mancante.'
                 error: "Nessuna sintassi valida trovata su $1 o la pagina è mancante."
             },
             },
             // Japanese
             // Japanese
             ja: {
             ja: {
                 preload: 'プリロード・テンプレート:',
                 preload: "プリロード・テンプレート:",
                 choose: '(選択してください)',
                 choose: "(選択してください)",
                 help: 'テンプレートを選ぶと、文字入力カーソルの位置に埋め込まれます。',
                 help: "テンプレートを選ぶと、文字入力カーソルの位置に埋め込まれます。",
                 devWiki: 'Dev Wikiの解説ページをご覧ください。',
                 devWiki: "Dev Wikiの解説ページをご覧ください。",
                 error: '$1は無効な構文か、ページが存在しません。'
                 error: "$1は無効な構文か、ページが存在しません。"
             },
             },
             // Occitan
             // Occitan
             oc: {
             oc: {
                 preload: 'Precarga un modèl:',
                 preload: "Precarga un modèl:",
                 choose: '(escuelh)',
                 choose: "(escuelh)",
                 help: 'Selecciona un modèl per inserir la siá sintaxi precargada dins la posicion actuala',
                 help: "Selecciona un modèl per inserir la siá sintaxi precargada dins la posicion actuala",
                 devWiki: 'Contròtla la documentacion sul Dev Wiki',
                 devWiki: "Contròtla la documentacion sul Dev Wiki",
                 error: 'Cap de sintaxi valida amassada sus $1 o la pagina i manca.'
                 error: "Cap de sintaxi valida amassada sus $1 o la pagina i manca."
             },
             },
             // Polish
             // Polish
             pl: {
             pl: {
                 preload: 'Gotowy szablon:',
                 preload: "Gotowy szablon:",
                 choose: '(wybierz)',
                 choose: "(wybierz)",
                 help: 'Wybierz przygotowany szablon, aby wstawić kod w obecnym miejscu',
                 help: "Wybierz przygotowany szablon, aby wstawić kod w obecnym miejscu",
                 devWiki: 'Zobacz dokumentację na Dev Wiki',
                 devWiki: "Zobacz dokumentację na Dev Wiki",
                 error: 'Nie znaleziono odpowiedniej składni w $1 lub strona nie istnieje.'
                 error: "Nie znaleziono odpowiedniej składni w $1 lub strona nie istnieje."
             },
             },
             // Portuguese
             // Portuguese
             pt: {
             pt: {
                 preload: 'Pré-carrega uma predefinição:',
                 preload: "Pré-carrega uma predefinição:",
                 choose: '(escolhe)',
                 choose: "(escolhe)",
                 help: 'Seleciona uma predefinição para inserires a sua sintaxe pré-carregada na posição actual',
                 help: "Seleciona uma predefinição para inserires a sua sintaxe pré-carregada na posição actual",
                 devWiki: 'Controla a documentação no Dev Wiki',
                 devWiki: "Controla a documentação no Dev Wiki",
                 error: 'Nenhuma sintaxe válida encontrada em $1 ou a página está a faltar.'
                 error: "Nenhuma sintaxe válida encontrada em $1 ou a página está a faltar."
             },
             },
             // Brazilian Portuguese
             // Brazilian Portuguese
             'pt-br': {
             "pt-br": {
                 preload: 'Pré-carrega uma predefinição:',
                 preload: "Pré-carrega uma predefinição:",
                 choose: '(escolha)',
                 choose: "(escolha)",
                 help: 'Selecione uma predefinição para inserir a sintaxe dela pré-carregada na posição atual',
                 help: "Selecione uma predefinição para inserir a sintaxe dela pré-carregada na posição atual",
                 devWiki: 'Controle a documentação na Dev Wiki',
                 devWiki: "Controle a documentação na Dev Wiki",
                 error: 'Nenhuma sintaxe válida encontrada em $1 ou a página está faltando.'
                 error: "Nenhuma sintaxe válida encontrada em $1 ou a página está faltando."
             },
             },
             // Romanian
             // Romanian
             ro: {
             ro: {
                 preload: 'Preîncărcaţi un format:',
                 preload: "Preîncărcaţi un format:",
                 choose: '(alegeţi)',
                 choose: "(alegeţi)",
                 help: 'Selecţionaţi un format pentru a insera sintaxa acesta preîncărcată în poziţia actuală',
                 help: "Selecţionaţi un format pentru a insera sintaxa acesta preîncărcată în poziţia actuală",
                 devWiki: 'Controlaţi documentaţia pe Dev Wiki',
                 devWiki: "Controlaţi documentaţia pe Dev Wiki",
                 eroare: 'Nicio sintaxa validă găsită pe $1 sau pagina lipseşte.'
                 eroare: "Nicio sintaxa validă găsită pe $1 sau pagina lipseşte."
             },
             },
             // Russian
             // Russian
             ru: {
             ru: {
                 preload: 'Готовый шаблон:',
                 preload: "Готовый шаблон:",
                 choose: '(выберите)',
                 choose: "(выберите)",
                 help: 'Выберите подготовленный шаблон, чтобы вставить код в данном месте',
                 help: "Выберите подготовленный шаблон, чтобы вставить код в данном месте",
                 devWiki: 'Посмотреть документацию на Dev Wiki',
                 devWiki: "Посмотреть документацию на Dev Wiki",
                 error: 'Не найден правильный синтаксис в $1 или страница не существует.'
                 error: "Не найден правильный синтаксис в $1 или страница не существует."
             },
             },
             // Ukrainian
             // Ukrainian
             uk: {
             uk: {
                 preload: 'Готовий шаблон:',
                 preload: "Готовий шаблон:",
                 choose: '(виберіть)',
                 choose: "(виберіть)",
                 help: 'Виберіть підготовлений шаблон, щоб вставити код в даному місці',
                 help: "Виберіть підготовлений шаблон, щоб вставити код в даному місці",
                 devWiki: 'Подивитися документацію на Dev Wiki',
                 devWiki: "Подивитися документацію на Dev Wiki",
                 error: 'Не знайдений правильний синтаксис в $1 або сторінка не існує.'
                 error: "Не знайдений правильний синтаксис в $1 або сторінка не існує."
             },
             },
             // Valencian
             // Valencian
             val: {
             val: {
                 preload: 'Precarrega una plantilla:',
                 preload: "Precarrega una plantilla:",
                 choose: '(tria)',
                 choose: "(tria)",
                 help: 'Selecciona una plantilla per a insertar la sua sintaxis precarregada en la posició actual',
                 help: "Selecciona una plantilla per a insertar la sua sintaxis precarregada en la posició actual",
                 devWiki: 'Controla la documentació en el Dev Wiki',
                 devWiki: "Controla la documentació en el Dev Wiki",
                 error: 'No hi ha sintaxis vàlides trobades en $1 o falta la pàgina.'
                 error: "No hi ha sintaxis vàlides trobades en $1 o falta la pàgina."
             },
             },
             // Chinese (simplified) (Also in zh)  
             // Chinese (simplified) (Also in zh)  
             zh: {
             zh: {
                 preload: '预载模板:',
                 preload: "预载模板:",
                 choose: '(选择)',
                 choose: "(选择)",
                 help: '选择一个模板以于目前位置插入其预载语法',
                 help: "选择一个模板以于目前位置插入其预载语法",
                 devWiki: '于 Dev Wiki 查看相关文件',
                 devWiki: "于 Dev Wiki 查看相关文件",
                 error: '$1 为无效语法或页面遗失。'
                 error: "$1 为无效语法或页面遗失。"
             },
             },
             // Chinese (traditional)
             // Chinese (traditional)
             'zh-hant': {
             "zh-hant": {
                 preload: '預載模板:',
                 preload: "預載模板:",
                 choose: '(選擇)',
                 choose: "(選擇)",
                 help: '選擇一個模板以於目前位置插入其預載語法',
                 help: "選擇一個模板以於目前位置插入其預載語法",
                 devWiki: '於 Dev Wiki 查看相關文件',
                 devWiki: "於 Dev Wiki 查看相關文件",
                 error: '$1 為無效語法或頁面遺失。'
                 error: "$1 為無效語法或頁面遺失。"
             }
             }
             // thanks http://wlb.wikia.com !
             // thanks http://wlb.wikia.com !

Revision as of 22:04, 17 October 2017

//  ================================
//      Custom preload templates
//  ================================
/*  @author Grunny 
    From http://harrypotter.wikia.com/wiki/MediaWiki:Wikia.js
    edited by leviathan_89

    ** Info: **
    Template list loaded by default from "MediaWiki:Custom-PreloadTemplates",
    each syntax is loaded by default from the "/preload" subpage of the
    template.
*/

$(function() {

    // Run conditions
    if (    wgAction != 'edit' || 
            (!$('div.module_content').length && skin == 'oasis') ||
            (!$('div.editButtons').length && skin == 'monobook') ||
             mw.config.get('wgNamespaceNumber') == 8 // MediaWiki:
        ) {
        console.log('[PreloadTemplates]: container not found or page is not supported.');
        return;
    }
    console.log('[PreloadTemplates]: version 1.02 - 17/10/2017.');
    
    // =================
    //   Configuration
    // =================
    var config = {
            list: null,
            subpage: null
        };

    // Checking user's custom settings
    config.list = ( typeof preloadTemplates_list == 'string' ) ? preloadTemplates_list : 'MediaWiki:Custom-PreloadTemplates';
    config.subpage = ( typeof preloadTemplates_subpage == 'string' ) ? preloadTemplates_subpage : 'preload';


    // ========
    //   i18n
    // ========
    var lang = mw.config.get('wgUserLanguage');
    var splitLang = lang.split('-')[0];
    var i18n = {
            // English
            en: {
                preload: "Preload template:",
                choose: "(choose)",
                help: "Select a template to insert its preloaded syntax at the current position",
                devWiki: "Check the documentation on Dev Wiki",
                error: "No valid syntax found at $1 or page is missing."
            },
            // Belarusian
            be: {
                preload: "Гатовы шаблон:",
                choose: "(выберыце)",
                help: "Выберыце падрыхтаваны шаблон, каб ўставіць код у дадзеным месцы",
                devWiki: "Паглядзець дакументацыю на Dev Wiki",
                error: "Не знойдзены правільны сінтаксіс у $1 ці старонка не існуе."
            },
            // Catalan
            ca: {
                preload: "Pre-carrega una plantilla:",
                choose: "(tria)",
                help: "Selecciona una plantilla per inserir la seva sintaxi pre-carregada a la posició actual",
                devWiki: "Controla la documentació al Dev Wiki",
                error: "Cap sintaxi vàlida trobada a $1 o la pàgina hi falta."
            },
            // German
            de: {
                preload: "Vorlage einfügen:",
                choose: "(Auswählen)",
                help: "Wähle die Vorlage, deren vorgefertigte Syntax an der aktuellen Position eingefügt werden soll",
                devWiki: "Lies die Dokumentation im Dev-Wiki",
                error: "Keine gültige Syntax unter $1 gefunden bzw. keine Seite."
            },
            // Spanish
            es: {
                preload: "Precarga una plantilla:",
                choose: "(elige)",
                help: "Selecciona una plantilla para insertar su sintaxis precargada en la posición actual",
                devWiki: "Controla la documentación en la Dev Wiki",
                error: "Ninguna sintaxis válida encontrada en $1 o falta la página."
            },
            // French
            fr: {
                preload: "Précharger un modèle :",
                choose: "(choisir)",
                help: "Sélectionnez un modèle pour insérer sa syntaxe préchargée dans la position actuelle",
                devWiki: "Contrôlez la documentation sur le Dev Wiki",
                error: "Aucune syntaxe valable trouvée sur $1 ou la page est absente."
            },
            // Finnish
            fi: {
                preload: "Esilataa malline:",
                choose: "(valitse)",
                help: "Valitse malline lisätäksesi sen esiladatun syntaksin nykyiseen paikkaan",
                devWiki: "Katso dokumentointi Dev Wikissä",
                error: "Väärin syntaksi kohdassa $1 or tai sivu puuttuu."
            },
            // Galician
            gl: {
                preload: "Pre-carga un modelo:",
                choose: "(elixe)",
                help: "Selecciona un modelo para inserir a súa sintaxe pre-cargada na posición actual",
                devWiki: "Controla a documentación no Dev Wiki",
                error: "Ningunha sintaxe válida atopada en $1 ou a páxina está a faltar."
            },           
            // Bahasa Indonesia
            "id": {
                preload: "Pramuat templat:",   
                choose: "(plihan)",             
                help: "Pilihlah sebuah templat untuk dimasukkan ke pramuat sintaksis di posisi sekarang ini ",
                devWiki: "Mengecek dokumentasi di devwiki",
                error: "Tidak ditemukan sintaksis yang sah ditemukan $1 atau laman menghilang."
            },
            // Italian
            it: {
                preload: "Precarica un template:",
                choose: "(scegli)",
                help: "Seleziona un template per inserire la sua sintassi precaricata nella posizione corrente",
                devWiki: "Controlla la documentazione su Dev Wiki",
                error: "Nessuna sintassi valida trovata su $1 o la pagina è mancante."
            },
            // Japanese
            ja: {
                preload: "プリロード・テンプレート:",
                choose: "(選択してください)",
                help: "テンプレートを選ぶと、文字入力カーソルの位置に埋め込まれます。",
                devWiki: "Dev Wikiの解説ページをご覧ください。",
                error: "$1は無効な構文か、ページが存在しません。"
            },
            // Occitan
            oc: {
                preload: "Precarga un modèl:",
                choose: "(escuelh)",
                help: "Selecciona un modèl per inserir la siá sintaxi precargada dins la posicion actuala",
                devWiki: "Contròtla la documentacion sul Dev Wiki",
                error: "Cap de sintaxi valida amassada sus $1 o la pagina i manca."
            },
            // Polish
            pl: {
                preload: "Gotowy szablon:",
                choose: "(wybierz)",
                help: "Wybierz przygotowany szablon, aby wstawić kod w obecnym miejscu",
                devWiki: "Zobacz dokumentację na Dev Wiki",
                error: "Nie znaleziono odpowiedniej składni w $1 lub strona nie istnieje."
            },
            // Portuguese
            pt: {
                preload: "Pré-carrega uma predefinição:",
                choose: "(escolhe)",
                help: "Seleciona uma predefinição para inserires a sua sintaxe pré-carregada na posição actual",
                devWiki: "Controla a documentação no Dev Wiki",
                error: "Nenhuma sintaxe válida encontrada em $1 ou a página está a faltar."
            },
            // Brazilian Portuguese
            "pt-br": {
                preload: "Pré-carrega uma predefinição:",
                choose: "(escolha)",
                help: "Selecione uma predefinição para inserir a sintaxe dela pré-carregada na posição atual",
                devWiki: "Controle a documentação na Dev Wiki",
                error: "Nenhuma sintaxe válida encontrada em $1 ou a página está faltando."
            },
            // Romanian
            ro: {
                preload: "Preîncărcaţi un format:",
                choose: "(alegeţi)",
                help: "Selecţionaţi un format pentru a insera sintaxa acesta preîncărcată în poziţia actuală",
                devWiki: "Controlaţi documentaţia pe Dev Wiki",
                eroare: "Nicio sintaxa validă găsită pe $1 sau pagina lipseşte."
            },
            // Russian
            ru: {
                preload: "Готовый шаблон:",
                choose: "(выберите)",
                help: "Выберите подготовленный шаблон, чтобы вставить код в данном месте",
                devWiki: "Посмотреть документацию на Dev Wiki",
                error: "Не найден правильный синтаксис в $1 или страница не существует."
            },
            // Ukrainian
            uk: {
                preload: "Готовий шаблон:",
                choose: "(виберіть)",
                help: "Виберіть підготовлений шаблон, щоб вставити код в даному місці",
                devWiki: "Подивитися документацію на Dev Wiki",
                error: "Не знайдений правильний синтаксис в $1 або сторінка не існує."
            },
            // Valencian
            val: {
                preload: "Precarrega una plantilla:",
                choose: "(tria)",
                help: "Selecciona una plantilla per a insertar la sua sintaxis precarregada en la posició actual",
                devWiki: "Controla la documentació en el Dev Wiki",
                error: "No hi ha sintaxis vàlides trobades en $1 o falta la pàgina."
            },
            // Chinese (simplified) (Also in zh) 
            zh: {
                preload: "预载模板:",
                choose: "(选择)",
                help: "选择一个模板以于目前位置插入其预载语法",
                devWiki: "于 Dev Wiki 查看相关文件",
                error: "$1 为无效语法或页面遗失。"
            },
            // Chinese (traditional)
            "zh-hant": {
                preload: "預載模板:",
                choose: "(選擇)",
                help: "選擇一個模板以於目前位置插入其預載語法",
                devWiki: "於 Dev Wiki 查看相關文件",
                error: "$1 為無效語法或頁面遺失。"
            }
            // thanks http://wlb.wikia.com !
    };

    // Select language
    // Check if user's language is present
    if (typeof i18n[lang] === 'object') {
        $.extend( i18n, i18n.en, i18n[lang] );
    } else {
        // Check to see if the parent language has a translation, example pt-br -> pt
        if (typeof i18n[splitLang] === 'object') {
            $.extend( i18n, i18n.en, i18n[splitLang] );
        } else {
        // Fallback to English
        $.extend( i18n, i18n.en );
        }
    }
    // END i18n

    // =============
    //   Execution  
    // =============
    
    // Variables
    var namespace = mw.config.get('wgFormattedNamespaces')['10'];
    var $preloadOptionsHtml;
    var $preloadOptionsList;
    var defaultOption = '<option selected disabled>' + i18n.choose + '</option>';
    var preloadHelp = '<span style="display:inline-block; vertical-align:middle; cursor:help; margin-left:5px;" class="sprite question"><a href="http://dev.wikia.com/wiki/PreloadTemplates" target="_blank" title="' + i18n.devWiki + '" style="display:inline-block; width:12px; height:12px;"></a></span>';

    // Append HTML container
    if (skin === 'oasis') {
        $('div.module_content:first').append('<div id="preload-templates" style="display:block; padding:0 10px;"><h3 style="font-size:14px;">' + i18n.preload + '</h4></div>');
    } else {
        $('div.editButtons').append('<div id="preload-templates" style="display:block; float:right; padding:10px;">' + i18n.preload + '&nbsp;</div>');
    }

    // Create template list
    // Get list
    $.get(wgScript, {
            title: config.list,
            action: 'raw',
            ctype: 'text/plain'
    }).done( function(listData) {
            var listDataParsed = parseMW(listData); // Parse data for MediaWiki tags
            var lines = listDataParsed.split('\n'); // Split data in lines

            // Display error if no valid data is present
            if ( listDataParsed === '' ) {
                $('div#preload-templates').append( i18n.error.replace('$1' , '"<a href="/wiki/' + mw.util.wikiUrlencode(config.list) + '">' + config.list + '</a>"') ).append(preloadHelp);
                return;
            }
            
            // Building the list HTML
            for (var i in lines) {
                var title;

                // Ignore empty lines
                if (lines[i].trim() === '') {
                    continue;
                }
                // Text in a list is the template name
                if (lines[i].indexOf('*') === 0) {
                    title = lines[i].substring(1).trim();
                    
                    // Text after pipe is display name
                    if (title.indexOf('|') !== -1) {
                        var parts = title.split('|');
                        
                        $preloadOptionsHtml += '<option value="' + parts[0].trim() + '">' + parts[1].trim() + '</option>';
                    } else {
                        // No display name
                        $preloadOptionsHtml += '<option value="' + title + '">' + title + '</option>';
                    }
                } else {
                    // Rest are normal strings
                    title = lines[i].trim();
                    $preloadOptionsHtml += '<option disabled>' + title + '</option>';
                }
            }
                
            // Build list HTML
            $preloadOptionsList = $('<select />').attr('id', 'pt-list').attr('title', i18n.help).css('max-width' , '220px').html(defaultOption + $preloadOptionsHtml).change(function() {
                    var templateTitle = $(this).val();
                    
                    // Restore default option
                    $('#pt-list option:first-child').prop('selected', true);

                    // Preload the template on click
                    getPreloadPage(templateTitle);
                });

            // Append template list and messageges
            $('div#preload-templates').append($preloadOptionsList).append(preloadHelp);

            // Import required CSS for monobook
            if (skin === 'monobook') {
                // Importing sprite for monobook
                $('.sprite.question').css({
                    'background-image': 'url(http://slot1.images.wikia.nocookie.net/__cb1475164013/common/skins/shared/images/sprite.png)',
                    'background-position': '-1144px -20px',
                    'background-color': 'transparent',
                    'background-repeat': 'no-repeat',
                    'height': '12px',
                    'width': '12px'
                });
            }
    }).fail( function(){
        // Add an error if failed to retrieve list
        $('div#preload-templates').append( i18n.error.replace('$1' , '"<a href="/wiki/' + mw.util.wikiUrlencode(config.list) + '">' + config.list + '</a>"') ).append(preloadHelp);
    });

    // =============
    //   Functions  
    // =============

    // Get preload text and add it to the text area
    function getPreloadPage(title) {
        // check if subpage is standard or is case by case
        var page = ( config.subpage === 'case-by-case' ) ? namespace + ':' + title : namespace + ':' + title + '/' + config.subpage;
        
        $.get(wgScript, {
                title: page,
                action: 'raw',
                ctype: 'text/plain'
        }).done(function(preloadData) {
            // Parse some MediaWiki tags
            var preloadDataParsed = parseMW(preloadData);
            
            // Display error if no useful data is present
            if ( preloadDataParsed === '' ) {
                notFound(page);
                return;
            }

            // Insert syntax
            if (document.getElementById('wpTextbox1')) {
                insertAtCursor(document.getElementById('wpTextbox1'), preloadDataParsed);
            } else {
                // Visual editor
                insertAtCursor(document.getElementsByClassName('cke_source')[0], preloadDataParsed);
            }
        }).fail( function(){
            notFound(page);
        });
    }

    // Inserts text at the cursor's current position - originally from Wookieepedia
    function insertAtCursor(myField, myValue) {
    //IE support
        if (document.selection) {
            myField.focus();
            sel = document.selection.createRange();
            sel.text = myValue;
        }
        //MOZILLA/NETSCAPE support
        else if (myField.selectionStart || myField.selectionStart == '0') {
            var startPos = myField.selectionStart;
            var endPos = myField.selectionEnd;
            myField.value = myField.value.substring(0, startPos) +
                myValue +
                myField.value.substring(endPos, myField.value.length);
        } else {
            myField.value += myValue;
        }
    }
    
    // Parse MediaWiki code to allow the use of incudeoonly and noninclude tags in the preload page
    function parseMW(source){
        var parsed = source.replace(/<includeonly>(\n)?|(\n)?<\/includeonly>|\s*<noinclude>[^]*?<\/noinclude>/g, '');
        
        return parsed;
    }
    
    // Error alert
    function notFound(page){
        var message = i18n.error.replace('$1' , '"' + page + '"');
        
        alert(message);
    }
});