{"version":3,"sources":["transposh.js"],"names":["$","possibly_translateable","timer","t_jp_prefix","t_jp","prefix","source","done_posted","tokens","translations","loadingmsn","ajax_translate","token","translation","clearTimeout","push","trim","length","fix_image","img_segment_id","this","attr","substr","lastIndexOf","img","removeClass","addClass","replace","html","each","fix_page","setTimeout","i","data","ln0","lang","sr0","action","items","ajax","type","url","ajaxurl","success","console","window","log","auto_translate_success","text","do_mass_google_translate","batchtrans","callback","dataType","e","tl","q","do_mass_bing_translate","msn_key","encodeURIComponent","slice","jsonp","getScript","_mstConfig","appId","do_mass_yandex_translate","do_mass_baidu_translate","do_mass_apertium_translate","langpair","olang","markUnknown","traditional","do_mass_invoke","batchtokens","preferred","some","engine","engines","result","responseStatus","undefined","responseData","translatedText","TranslatedText","blang","results","do_auto_translate","auto_translated_phrases","batchlength","to_trans","test_for_lazyrun","xLazyLoader","plugin_url","done","dgpt","dbt","dyt","dut","dat","at","tfl","tfju","test_for_jqueryui","hit","fn","propAttr","prop","js","jQueryUI","css","theme","click","cache","hide","ajaxSetup","noauto","isEmptyObject","edit","jQuery"],"mappings":"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","sourcesContent":["/*  Copyright © 2009-2018 Transposh Team (website : http://transposh.org)\n *\n *\tThis program is free software; you can redistribute it and/or modify\n *\tit under the terms of the GNU General Public License as published by\n *\tthe Free Software Foundation; either version 2 of the License, or\n *\t(at your option) any later version.\n *\n *\tThis program is distributed in the hope that it will be useful,\n *\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n *\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *\tGNU General Public License for more details.\n *\n *\tYou should have received a copy of the GNU General Public License\n *\talong with this program; if not, write to the Free Software\n *\tFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n */\n\n// List of exposed functions:\n//    t_jp.dgpt = do_mass_google_translate;\n//    t_jp.dbt = do_mass_bing_translate;\n//    t_jp.dyt = do_mass_yandex_translate;\n//    t_jp.dat = do_mass_apertium_translate;\n//    t_jp.tfl = test_for_lazyrun;\n//    t_jp.tfju = test_for_jqueryui;\n//    t_jp.at = do_auto_translate;\n\n/*global Date, Math, alert, escape, clearTimeout, document, jQuery, setTimeout, t_jp, window, _mstConfig */\n(function ($) { // closure\n    var\n            // this is the size of strings to queue, we don't want too much there\n            BATCH_SIZE = 1024,\n            // number of phrases that might be translated\n            possibly_translateable,\n            // ids of progress bars\n            t_jp_prefix = t_jp.prefix,\n            // source - 0 is human, 1 google , 2 bing, 3 apertium, 4 yandex, 5 baidu - higher reserved for future engines\n            source = 1,\n            //Ajax translation\n            done_posted = 0, /*Timer for translation aggregation*/ timer, tokens = [], translations = [],\n            loadingmsn = 0\n            ;\n\n    // This function fixes the page, it gets a token and translation and fixes this,\n    // since here we only get the automated source, we use this to reduce the code size\n    function fix_page(token, translation) {\n        // Todo - Probably not needed, but in case we get bad stuff\n        if ($.trim(translation).length === 0) {\n            return;\n        }\n        // this is an inner function used to fix the images in the case of being inside the edit mode.\n        // if we are not editing, no images will be found and nothing will happen.\n        // even if this happens before the edit scripts adds the images, it won't matter as source is changed too and the\n        // edit script will fix this\n        var fix_image = function () { // handle the image changes\n            var img_segment_id = $(this).attr('id').substr($(this).attr('id').lastIndexOf('_') + 1),\n                    img = $(\"#\" + t_jp_prefix + \"img_\" + img_segment_id);\n            $(\"#\" + t_jp_prefix + img_segment_id).attr('data-source', 1); // source is 1\n            img.removeClass('tr-icon-yellow').removeClass('tr-icon-green').addClass('tr-icon-yellow');\n        };\n\n        // might need to escape the token selectors\n        token = token.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n        //window.console && console.log(token);\n        // rewrite text for all matching items at once\n        $(\"*[data-orig='\" + token + \"'][data-hidden!='y']\")\n                .html(translation)\n                .each(fix_image);\n\n        // TODO - FIX hidden elements too (need to update father's title)\n        $(\"*[data-orig='\" + token + \"'][data-hidden='y']\")\n                .attr('data-trans', translation)\n                .each(fix_image);\n    }\n\n    // we have four params, here two are implicit (source =1 auto translate, lang = target language)\n    function ajax_translate(token, translation) {\n        // we aggregate translations together, 200ms from the last translation we will send the timer\n        // so here we remove it so nothing unexpected happens\n        clearTimeout(timer);\n        // push translations\n        tokens.push(token);\n        translations.push(translation);\n        // This is a change - as we fix the pages before we got actual confirmation (worked well for auto-translation)\n        fix_page(token, translation);\n        timer = setTimeout(function () {\n            var data = {\n                ln0: t_jp.lang, // implicit\n                sr0: source, // implicit auto translate... 1 if google, 2 if msn\n                action: 'tp_translation',\n                items: tokens.length // we can do this here because all tokens will be different\n            }, i;\n            for (i = 0; i < tokens.length; i += 1) {\n                data[\"tk\" + i] = tokens[i];\n                data[\"tr\" + i] = translations[i];\n                // We are pre-accounting the progress bar here - which is not very nice\n                //if (source > 0) {\n                done_posted += $(\"*[data-orig='\" + tokens[i].replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1') + \"']\").length;\n                //}\n            }\n            $.ajax({\n                type: \"POST\",\n                url: t_jp.ajaxurl,\n                data: data,\n                success: function () {\n                    // Success now only updates the save progress bar (green)\n                    console.window && console.log(done_posted + \"/\" + possibly_translateable + \" translations posted\");\n                }\n                // we removed the error function, as there is no alert for automated thing, this will silently fail\n                // which although bad, is what we can do for now\n            });\n            translations = [];\n            tokens = [];\n        }, 200); // wait 200 ms... -- TODO, maybe do - items*3\n    }\n\n    // happens on traslate success\n    function auto_translate_success(token, translation) {\n        ajax_translate(token, $(\"<div>\" + $.trim(translation) + \"</div>\").text());\n        window.console && console.log(possibly_translateable - $(\".\" + t_jp_prefix + '[data-source=\"\"]').length + \"/\" + possibly_translateable + \" auto translated\");\n    }\n\n    // mass google translation - using proxy\n    function do_mass_google_translate(batchtrans, callback, lang) {\n        /*var sl = '';\n         if (usedefault) {\n         sl = t_jp.olang;\n         }*/\n        $.ajax({\n            url: t_jp.ajaxurl,\n            dataType: \"json\",\n            type: \"GET\",\n            // check each\n            data: {\n                action: 'tp_tp',\n                e: 'g',\n                tl: lang,\n                // sl: sl,\n                q: batchtrans\n            },\n            success: callback\n        });\n    }\n    function do_mass_google_invoker(tokens, trans) {\n        do_mass_google_translate(trans, function (result) {\n            $(result.results).each(function (i) {\n                auto_translate_success(tokens[i], this);\n            });\n        }, t_jp.lang);\n    }\n\n    /*  // mass google translation using an api key\n     function do_mass_google_api_translate(batchtrans, callback, lang) {\n     $.ajax({\n     url: 'https://www.googleapis.com/language/translate/v2',\n     dataType: \"jsonp\",\n     data: {\n     key: t_jp.google_key,\n     q: batchtrans,\n     target: lang,\n     source: t_jp.olang\n     },\n     traditional: true,\n     success: callback\n     });\n     }\n     function do_mass_google_api_invoker(tokens, trans) {\n     do_mass_google_api_translate(trans, function (result) {\n     // if there was an error we will try the other invoker\n     if (typeof result.error !== 'undefined') {\n     do_mass_google_invoker(tokens, trans);\n     } else {\n     $(result.data.translations).each(function (i) {\n     auto_translate_success(tokens[i], this.translatedText);\n     });\n     }\n     }, t_jp.lang);\n     }*/\n\n    // mass bing translation\n    function do_mass_bing_translate(batchtrans, callback, lang) {\n        if (t_jp.msn_key) {\n            var q = \"[\";\n            $(batchtrans).each(function (i) {\n                q += '\"' + encodeURIComponent(batchtrans[i].replace(/[\\\\\"]/g, '\\\\$&').replace(/(\\r\\n|\\n|\\r)/gm, \" \")) + '\",';\n            });\n            q = q.slice(0, -1) + ']';\n            $.ajax({\n                url: '//api.microsofttranslator.com/V2/Ajax.svc/TranslateArray?appId=' + t_jp.msn_key + '&to=' + lang + '&texts=' + q,\n                dataType: \"jsonp\",\n                jsonp: \"oncomplete\",\n                success: callback\n            });\n        } else {\n            if (loadingmsn === 1) {\n                setTimeout(function () {\n                    do_mass_bing_translate(batchtrans, callback, lang);\n                }, 500);\n            } else {\n                loadingmsn = 1;\n                $.getScript('//www.microsofttranslator.com/ajax/v2/toolkit.ashx?loc=en&toolbar=none', function () {\n                    t_jp.msn_key = _mstConfig.appId;\n                    do_mass_bing_translate(batchtrans, callback, lang);\n                });\n            }\n        }\n    }\n\n    function do_mass_bing_invoker(tokens, trans) {\n        source = 2;\n        do_mass_bing_translate(trans, function (result) {\n            $(result).each(function (i) {\n                auto_translate_success(tokens[i], this.TranslatedText);\n            });\n        }, t_jp.blang);\n    }\n\n    // mass yandex translation - using proxy\n    function do_mass_yandex_translate(batchtrans, callback, lang) {\n        /*var sl = '';\n         if (usedefault) {\n         sl = t_jp.olang;\n         }*/\n        $.ajax({\n            url: t_jp.ajaxurl,\n            dataType: \"json\",\n            type: \"GET\",\n            // check each\n            data: {\n                action: 'tp_tp',\n                e: 'y',\n                tl: lang,\n                // sl: sl,\n                q: batchtrans\n            },\n            success: callback\n        });\n    }\n    function do_mass_yandex_invoker(tokens, trans) {\n        source = 4;\n        do_mass_yandex_translate(trans, function (result) {\n            $(result.results).each(function (i) {\n                auto_translate_success(tokens[i], this);\n            });\n        }, t_jp.lang);\n    }\n\n    // mass baidu translation - using proxy\n    function do_mass_baidu_translate(batchtrans, callback, lang) {\n        /*var sl = '';\n         if (usedefault) {\n         sl = t_jp.olang;\n         }*/\n        $.ajax({\n            url: t_jp.ajaxurl,\n            dataType: \"json\",\n            type: \"GET\",\n            // check each\n            data: {\n                action: 'tp_tp',\n                e: 'u',\n                tl: lang,\n                // sl: sl,\n                q: batchtrans\n            },\n            success: callback\n        });\n    }\n    function do_mass_baidu_invoker(tokens, trans) {\n        source = 5;\n        do_mass_baidu_translate(trans, function (result) {\n            $(result.results).each(function (i) {\n                auto_translate_success(tokens[i], this);\n            });\n        }, t_jp.lang);\n    }\n\n    // mass apertium translation\n    function do_mass_apertium_translate(batchtrans, callback, lang) {\n        $.ajax({\n            url: 'http://api.apertium.org/json/translate',\n            data: {\n                q: batchtrans,\n                langpair: t_jp.olang + '|' + lang,\n                markUnknown: 'no'\n            },\n            dataType: \"jsonp\",\n            traditional: true,\n            success: callback\n        });\n    }\n\n    function do_mass_apertium_invoker(tokens, trans) {\n        source = 3;\n        do_mass_apertium_translate(trans, function (result) {\n            // we assume that 2xx answer should be good, 200 is good, 206 is partially good (some errors)\n            if (result.responseStatus >= 200 && result.responseStatus < 300) {\n                // single items get handled differently\n                if (result.responseData.translatedText !== undefined) {\n                    auto_translate_success(tokens[0], result.responseData.translatedText);\n                } else {\n                    $(result.responseData).each(function (i) {\n                        if (this.responseStatus === 200) {\n                            auto_translate_success(tokens[i], this.responseData.translatedText);\n                        }\n                    });\n                }\n            }\n        }, t_jp.lang);\n    }\n\n    // invokes the correct mass translator based on the preferred one...\n    function do_mass_invoke(batchtokens, batchtrans) {\n        t_jp.preferred.some(function (engine) {\n            //console.log(engine);\n            if (t_jp.engines[engine]) {\n                if (engine === 'a') {\n                    do_mass_apertium_invoker(batchtokens, batchtrans);\n                }\n                if (engine === 'b') {\n                    do_mass_bing_invoker(batchtokens, batchtrans);\n                }\n                if (engine === 'g') {\n                    do_mass_google_invoker(batchtokens, batchtrans);\n                }\n                if (engine === 'y') {\n                    do_mass_yandex_invoker(batchtokens, batchtrans);\n                }\n                if (engine === 'u') {\n                    do_mass_baidu_invoker(batchtokens, batchtrans);\n                }\n                return true;\n            }\n        });\n    }\n\n    //function for auto translation\n    function do_auto_translate() {\n        // auto_translated_previously...\n        var auto_translated_phrases = [], batchlength = 0, batchtrans = [], batchtokens = [];\n\n        $(\".\" + t_jp_prefix + '[data-source=\"\"]').each(function () {\n            var token = $(this).attr('data-orig'),\n                    // we only have orig if we have some translation? so it should probably not be here... ? (or maybe for future invalidations of cached auto translations)\n                    to_trans = $(this).attr('data-orig');\n            if (to_trans === undefined) {\n                to_trans = $(this).html();\n            }\n            if (auto_translated_phrases[to_trans] !== 1) {\n                auto_translated_phrases[to_trans] = 1;\n                if (batchlength + encodeURIComponent(to_trans).length > BATCH_SIZE) {\n                    do_mass_invoke(batchtokens, batchtrans);\n                    batchlength = 0;\n                    batchtrans = [];\n                    batchtokens = [];\n                }\n                batchlength += encodeURIComponent(to_trans).length;\n                batchtokens.push(token);\n                batchtrans.push(to_trans);\n            }\n        });\n        // this invokation is for the remaining items\n        do_mass_invoke(batchtokens, batchtrans);\n    }\n\n    // helper function for lazy running\n    function test_for_lazyrun(callback) {\n        if (typeof $.xLazyLoader === 'function') {\n            callback();\n        } else {\n            t_jp.$ = $; // We wanted the same jQuery... hmmm\n            $.getScript(t_jp.plugin_url + '/js/lazy.js', callback).done(callback);\n        }\n    }\n\n    function test_for_jqueryui(callback) {\n        if (test_for_jqueryui.hit /* might be needed? - && typeof $.fn.dialog !== 'function' */) {\n            callback();\n        } else {\n            test_for_jqueryui.hit = true;\n            test_for_lazyrun(function () {\n                // This is needed when old jQueryUI is being loaded (default for wp3.2)\n                $.fn.propAttr = $.fn.prop || $.fn.attr;\n                $.xLazyLoader({\n                    js: t_jp.jQueryUI + 'jquery-ui.min.js',\n                    css: t_jp.jQueryUI + 'themes/' + t_jp.theme + '/jquery-ui.css',\n                    success: callback\n                });\n            });\n        }\n    }\n\n    // expose some functions\n    t_jp.dgpt = do_mass_google_translate;\n    //t_jp.dgt = do_mass_google_api_translate;\n    t_jp.dbt = do_mass_bing_translate;\n    t_jp.dyt = do_mass_yandex_translate;\n    t_jp.dut = do_mass_baidu_translate;\n    t_jp.dat = do_mass_apertium_translate;\n    t_jp.at = do_auto_translate;\n    t_jp.tfl = test_for_lazyrun;\n    t_jp.tfju = test_for_jqueryui;\n\n    $(function () {\n        // set a global binglang (if needed)\n        if (typeof t_jp.blang === 'undefined')\n            t_jp.blang = t_jp.lang\n\n        // this is the set_default_language function\n        // attach a function to the set_default_language link if its there\n        $('.' + t_jp_prefix + 'setdeflang').click(function () {\n            $.ajax({\n                url: t_jp.ajaxurl,\n                data: {\n                    action: 'tp_cookie'\n                },\n                cache: false\n            });\n            $('.' + t_jp_prefix + 'setdeflang').hide(\"slow\");\n            return false;\n        });\n\n        // how many phrases are yet untranslated\n        possibly_translateable = $(\".\" + t_jp_prefix + '[data-source=\"\"]').length;\n\n        //now = new Date();\n        // we make sure script sub loaded are cached\n        $.ajaxSetup({\n            cache: true\n        });\n        // was: we'll only auto-translate and load the stuff if we either have more than 5 candidate translations, or more than one at 4am, and this language is supported...\n        // we'll translate if there's any candidate...?\n        if (possibly_translateable && !t_jp.noauto && !$.isEmptyObject(t_jp.engines)) {\n            do_auto_translate();\n        }\n\n        // this is the part when we have editor support\n        if (t_jp.edit) {\n            $.getScript(t_jp.plugin_url + '/js/transposhedit.js');\n        }\n    });\n}(jQuery)); // end of closure"]}