Advertisement
Guest User

qtranslate_javascript.php

a guest
Jun 6th, 2013
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.90 KB | None | 0 0
  1. <?php // encoding: utf-8
  2.  
  3. /*  Copyright 2008  Qian Qin  (email : mail@qianqin.de)
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18. */
  19.  
  20. // qTranslate Javascript functions
  21. function qtrans_initJS() {
  22.     global $q_config;
  23.     $q_config['js']['qtrans_xsplit'] = "
  24.         String.prototype.xsplit = function(_regEx){
  25.             // Most browsers can do this properly, so let them — they'll do it faster
  26.             if ('a~b'.split(/(~)/).length === 3) { return this.split(_regEx); }
  27.  
  28.             if (!_regEx.global)
  29.             { _regEx = new RegExp(_regEx.source, 'g' + (_regEx.ignoreCase ? 'i' : '')); }
  30.  
  31.             // IE (and any other browser that can't capture the delimiter)
  32.             // will, unfortunately, have to be slowed down
  33.             var start = 0, arr=[];
  34.             var result;
  35.             while((result = _regEx.exec(this)) != null){
  36.                 arr.push(this.slice(start, result.index));
  37.                 if(result.length > 1) arr.push(result[1]);
  38.                 start = _regEx.lastIndex;
  39.             }
  40.             if(start < this.length) arr.push(this.slice(start));
  41.             if(start == this.length) arr.push(''); //delim at the end
  42.             return arr;
  43.         };
  44.         ";
  45.  
  46.     $q_config['js']['qtrans_is_array'] = "
  47.         qtrans_isArray = function(obj) {
  48.            if (obj.constructor.toString().indexOf('Array') == -1)
  49.               return false;
  50.            else
  51.               return true;
  52.         }
  53.         ";
  54.  
  55.     $q_config['js']['qtrans_split'] = "
  56.         qtrans_split = function(text) {
  57.             var split_regex = /(<!--.*?-->)/gi;
  58.             var lang_begin_regex = /<!--:([a-z]{2})-->/gi;
  59.             var lang_end_regex = /<!--:-->/gi;
  60.             var morenextpage_regex = /(<!--more-->|<!--nextpage-->)+$/gi;
  61.             var matches = null;
  62.             var result = new Object;
  63.             var matched = false;
  64.         ";
  65.     foreach($q_config['enabled_languages'] as $language)
  66.         $q_config['js']['qtrans_split'].= "
  67.             result['".$language."'] = '';
  68.             ";
  69.     $q_config['js']['qtrans_split'].= "
  70.            
  71.             var blocks = text.xsplit(split_regex);
  72.             if(qtrans_isArray(blocks)) {
  73.                 for (var i = 0;i<blocks.length;i++) {
  74.                     if((matches = lang_begin_regex.exec(blocks[i])) != null) {
  75.                         matched = matches[1];
  76.                     } else if(lang_end_regex.test(blocks[i])) {
  77.                         matched = false;
  78.                     } else {
  79.                         if(matched) {
  80.                             result[matched] += blocks[i];
  81.                         } else {
  82.         ";
  83.     foreach($q_config['enabled_languages'] as $language)
  84.         $q_config['js']['qtrans_split'].= "
  85.                             result['".$language."'] += blocks[i];
  86.             ";
  87.     $q_config['js']['qtrans_split'].= "
  88.                         }
  89.                     }
  90.                 }
  91.             }
  92.             for (var i = 0;i<result.length;i++) {
  93.                 result[i] = result[i].replace(morenextpage_regex,'');
  94.             }
  95.             return result;
  96.         }
  97.         ";
  98.  
  99.     $q_config['js']['qtrans_use'] = "
  100.         qtrans_use = function(lang, text) {
  101.             var result = qtrans_split(text);
  102.             return result[lang];
  103.         }
  104.         ";
  105.        
  106.     $q_config['js']['qtrans_integrate'] = "
  107.         qtrans_integrate = function(lang, lang_text, text) {
  108.             var texts = qtrans_split(text);
  109.             var moreregex = /<!--more-->/i;
  110.             var text = '';
  111.             var max = 0;
  112.             var morenextpage_regex = /(<!--more-->|<!--nextpage-->)+$/gi;
  113.            
  114.             texts[lang] = lang_text;
  115.         ";
  116.     foreach($q_config['enabled_languages'] as $language)
  117.         $q_config['js']['qtrans_integrate'].= "
  118.             texts['".$language."'] = texts['".$language."'].split(moreregex);
  119.             if(!qtrans_isArray(texts['".$language."'])) {
  120.                 texts['".$language."'] = [texts['".$language."']];
  121.             }
  122.             if(max < texts['".$language."'].length) max = texts['".$language."'].length;
  123.             ";
  124.     $q_config['js']['qtrans_integrate'].= "
  125.             for(var i=0; i<max; i++) {
  126.                 if(i >= 1) {
  127.                     text += '<!--more-->';
  128.                 }
  129.         ";
  130.     foreach($q_config['enabled_languages'] as $language)
  131.         $q_config['js']['qtrans_integrate'].= "
  132.                 if(texts['".$language."'][i] && texts['".$language."'][i]!=''){
  133.                     text += '<!--:".$language."-->';
  134.                     text += texts['".$language."'][i];
  135.                     text += '<!--:-->';
  136.                 }
  137.             ";
  138.     $q_config['js']['qtrans_integrate'].= "
  139.             }
  140.             text = text.replace(morenextpage_regex,'');
  141.             return text;
  142.         }
  143.         ";
  144.        
  145.     $q_config['js']['qtrans_save'] = "
  146.         qtrans_save = function(text) {
  147.             var ta = document.getElementById('content');
  148.             ta.value = qtrans_integrate(qtrans_get_active_language(),text,ta.value);
  149.             return ta.value;
  150.         }
  151.         ";
  152.        
  153.     $q_config['js']['qtrans_integrate_category'] = "
  154.         qtrans_integrate_category = function() {
  155.             var t = document.getElementById('cat_name');
  156.         ";
  157.     foreach($q_config['enabled_languages'] as $language)
  158.         $q_config['js']['qtrans_integrate_category'].= "
  159.             if(document.getElementById('qtrans_category_".$language."').value!='')
  160.                 t.value = qtrans_integrate('".$language."',document.getElementById('qtrans_category_".$language."').value,t.value);
  161.             ";
  162.     $q_config['js']['qtrans_integrate_category'].= "
  163.         }
  164.         ";
  165.        
  166.     $q_config['js']['qtrans_integrate_tag'] = "
  167.         qtrans_integrate_tag = function() {
  168.             var t = document.getElementById('name');
  169.         ";
  170.     foreach($q_config['enabled_languages'] as $language)
  171.         $q_config['js']['qtrans_integrate_tag'].= "
  172.             if(document.getElementById('qtrans_tag_".$language."').value!='')
  173.                 t.value = qtrans_integrate('".$language."',document.getElementById('qtrans_tag_".$language."').value,t.value);
  174.             ";
  175.     $q_config['js']['qtrans_integrate_tag'].= "
  176.         }
  177.         ";
  178.        
  179.     $q_config['js']['qtrans_integrate_link_category'] = "
  180.         qtrans_integrate_link_category = function() {
  181.             var t = document.getElementById('name');
  182.         ";
  183.     foreach($q_config['enabled_languages'] as $language)
  184.         $q_config['js']['qtrans_integrate_link_category'].= "
  185.             if(document.getElementById('qtrans_link_category_".$language."').value!='')
  186.                 t.value = qtrans_integrate('".$language."',document.getElementById('qtrans_link_category_".$language."').value,t.value);
  187.             ";
  188.     $q_config['js']['qtrans_integrate_link_category'].= "
  189.         }
  190.         ";
  191.        
  192.     $q_config['js']['qtrans_integrate_title'] = "
  193.         qtrans_integrate_title = function() {
  194.             var t = document.getElementById('title');
  195.         ";
  196.     foreach($q_config['enabled_languages'] as $language)
  197.         $q_config['js']['qtrans_integrate_title'].= "
  198.             t.value = qtrans_integrate('".$language."',document.getElementById('qtrans_title_".$language."').value,t.value);
  199.             ";
  200.     $q_config['js']['qtrans_integrate_title'].= "
  201.         }
  202.         ";
  203.        
  204.     $q_config['js']['qtrans_assign'] = "
  205.         qtrans_assign = function(id, text) {
  206.             var inst = tinyMCE.get(id);
  207.             var ta = document.getElementById(id);
  208.             if(inst && ! inst.isHidden()) {
  209.                 text = switchEditors.wpautop(text);
  210.                 inst.execCommand('mceSetContent', null, text);
  211.             } else {
  212.                 ta.value = text;
  213.             }
  214.         }
  215.         ";
  216.        
  217.     $q_config['js']['qtrans_tinyMCEOverload'] = "
  218.         tinyMCE.get2 = tinyMCE.get;
  219.         tinyMCE.get = function(id) {
  220.             if(id=='content'&&this.get2('qtrans_textarea_'+id)!=undefined)
  221.                 return this.get2('qtrans_textarea_'+id);
  222.             return this.get2(id);
  223.         }
  224.        
  225.         ";
  226.        
  227.     $q_config['js']['qtrans_wpActiveEditorOverload'] = "
  228.         jQuery('.wp-editor-wrap').unbind('mousedown');
  229.         jQuery('.wp-editor-wrap').mousedown(function(e){
  230.             wpActiveEditor = 'qtrans_textarea_'+this.id.slice(3, -5);
  231.         });
  232.         ";
  233.    
  234.     $q_config['js']['qtrans_wpOnload'] = "
  235.         if(typeof(wpOnload)!='undefined') wpOnload2 = wpOnload;
  236.         wpOnload = function() {
  237.             for(var i in tinyMCEPreInit.qtInit) {
  238.                 var tmp = tinyMCEPreInit.qtInit[i];
  239.                 tmp.id = 'qtrans_textarea_'+tmp.id;
  240.                 try { quicktags( tmp ); } catch(e){}
  241.                 jQuery('#ed_toolbar').hide();
  242.             }
  243.             // remove hook so tinymce doesn't load for content
  244.             var hook = tinyMCEPreInit.mceInit['content']
  245.             hook.elements='hook-to-nothing';
  246.             delete tinyMCEPreInit.mceInit['content'];
  247.             tinyMCEPreInit.mceInit['qtrans_textarea_content'] = hook;
  248.            
  249.             if(typeof(wpOnload2)=='function') wpOnload2();
  250.         }
  251.        
  252.         jQuery(document).ready(function() {
  253.             qtrans_editorInit();
  254.         });
  255.         ";
  256.        
  257.     $q_config['js']['qtrans_editorInit'] = "
  258.         qtrans_editorInit = function() {
  259.             qtrans_editorInit1();
  260.             qtrans_editorInit2();
  261.             jQuery('#qtrans_imsg').hide();
  262.             qtrans_editorInit3();
  263.            
  264.             var h = getUserSetting( 'ed_size' );
  265.             if(h<300) h = 300;
  266.            
  267.             jQuery('#content').hide();
  268.             if ( getUserSetting( 'editor' ) == 'html' ) {
  269.                 if ( h )
  270.                     jQuery('#qtrans_textarea_content').css('height', h - 20 + 'px');
  271.                 jQuery('#qtrans_textarea_content').show();
  272.             } else {
  273.                 // Activate TinyMCE if it's the user's default editor
  274.                 jQuery('#qtrans_textarea_content').show();
  275.                 // correct p for tinymce
  276.                 jQuery('#qtrans_textarea_content').val(switchEditors.wpautop(jQuery('#qtrans_textarea_content').val()))
  277.                 // let wp3.5 autohook take care of init
  278.                 qtrans_hook_on_tinyMCE('qtrans_textarea_content');
  279.             }
  280.         }
  281.         ";
  282.    
  283.     $q_config['js']['qtrans_hook_on_tinyMCE'] = "
  284.         qtrans_hook_on_tinyMCE = function(id) {
  285.             tinyMCEPreInit.mceInit[id].setup = function(ed) {
  286.                 ed.onSaveContent.add(function(ed, o) {
  287.                     if (!ed.isHidden())  {
  288.                         qtrans_save(switchEditors.pre_wpautop(o.content));
  289.                     }
  290.                 });
  291.             };
  292.             ed = new tinymce.Editor(id, tinyMCEPreInit.mceInit[id]);
  293.             ed.render();
  294.         }
  295.         ";
  296.    
  297.     $q_config['js']['qtrans_get_active_language'] = "
  298.    
  299.         qtrans_get_active_language = function() {
  300.     ";
  301.     foreach($q_config['enabled_languages'] as $language)
  302.         $q_config['js']['qtrans_get_active_language'].= "
  303.                 if(document.getElementById('qtrans_select_".$language."').className=='wp-switch-editor switch-tmce switch-html')
  304.                     return '".$language."';
  305.             ";
  306.     $q_config['js']['qtrans_get_active_language'].= "
  307.         }
  308.         ";
  309.        
  310.     $q_config['js']['qtrans_switch_postbox'] = "
  311.         function qtrans_switch_postbox(parent, target, lang) {
  312.     ";
  313.     foreach($q_config['enabled_languages'] as $language)
  314.         $q_config['js']['qtrans_switch_postbox'].= "
  315.                 jQuery('#'+target).val(qtrans_integrate('".$language."', jQuery('#qtrans_textarea_'+target+'_'+'".$language."').val(), jQuery('#'+target).val()));
  316.                 jQuery('#'+parent+' .qtranslate_lang_div').removeClass('switch-html');
  317.                 jQuery('#'+parent+' .qtranslate_lang_div').removeClass('switch-tmce');
  318.                 if(lang!=false) jQuery('#qtrans_textarea_'+target+'_'+'".$language."').hide();
  319.             ";
  320.     $q_config['js']['qtrans_switch_postbox'].= "
  321.             if(lang!=false) {
  322.                 jQuery('#qtrans_switcher_'+parent+'_'+lang).addClass('switch-tmce');
  323.                 jQuery('#qtrans_switcher_'+parent+'_'+lang).addClass('switch-html');
  324.                 jQuery('#qtrans_textarea_'+target+'_'+lang).show().focus();
  325.             }
  326.         }
  327.     ";
  328.        
  329.     $q_config['js']['qtrans_switch'] = "
  330.         switchEditors.go = function(id, lang) {
  331.             id = id || 'content';
  332.             lang = lang || 'toggle';
  333.            
  334.             if ( 'toggle' == lang ) {
  335.                 if ( ed && !ed.isHidden() )
  336.                     lang = 'html';
  337.                 else
  338.                     lang = 'tmce';
  339.             } else if( 'tinymce' == lang )
  340.                 lang = 'tmce';
  341.        
  342.             var inst = tinyMCE.get('qtrans_textarea_' + id);
  343.             var vta = document.getElementById('qtrans_textarea_' + id);
  344.             var ta = document.getElementById(id);
  345.             var dom = tinymce.DOM;
  346.             var wrap_id = 'wp-'+id+'-wrap';
  347.            
  348.             // update merged content
  349.             if(inst && ! inst.isHidden()) {
  350.                 tinyMCE.triggerSave();
  351.             } else {
  352.                 qtrans_save(vta.value);
  353.             }
  354.            
  355.            
  356.             // check if language is already active
  357.             if(lang!='tmce' && lang!='html' && document.getElementById('qtrans_select_'+lang).className=='wp-switch-editor switch-tmce switch-html') {
  358.                 return;
  359.             }
  360.            
  361.             if(lang!='tmce' && lang!='html') {
  362.                 document.getElementById('qtrans_select_'+qtrans_get_active_language()).className='wp-switch-editor';
  363.                 document.getElementById('qtrans_select_'+lang).className='wp-switch-editor switch-tmce switch-html';
  364.             }
  365.            
  366.             if(lang=='html') {
  367.                 if ( inst && inst.isHidden() )
  368.                     return false;
  369.                 if ( inst ) {
  370.                     vta.style.height = inst.getContentAreaContainer().offsetHeight + 20 + 'px';
  371.                     inst.hide();
  372.                 }
  373.                
  374.                 dom.removeClass(wrap_id, 'tmce-active');
  375.                 dom.addClass(wrap_id, 'html-active');
  376.                 setUserSetting( 'editor', 'html' );
  377.             } else if(lang=='tmce') {
  378.                 if(inst && ! inst.isHidden())
  379.                     return false;
  380.                 if ( typeof(QTags) != 'undefined' )
  381.                     QTags.closeAllTags(id);
  382.                 if ( tinyMCEPreInit.mceInit['qtrans_textarea_'+id] && tinyMCEPreInit.mceInit['qtrans_textarea_'+id].wpautop )
  383.                     vta.value = this.wpautop(qtrans_use(qtrans_get_active_language(),ta.value));
  384.                 if (inst) {
  385.                     inst.show();
  386.                 } else {
  387.                     qtrans_hook_on_tinyMCE('qtrans_textarea_'+id);
  388.                 }
  389.                
  390.                 dom.removeClass(wrap_id, 'html-active');
  391.                 dom.addClass(wrap_id, 'tmce-active');
  392.                 setUserSetting('editor', 'tinymce');
  393.             } else {
  394.                 // switch content
  395.                 qtrans_assign('qtrans_textarea_'+id,qtrans_use(lang,ta.value));
  396.             }
  397.         }
  398.         ";
  399. }
  400.  
  401. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement