includes/clientside/tinymce/tiny_mce_gzip_src.js
changeset 551 3acd624d4f4f
child 582 a38876c0793c
equal deleted inserted replaced
550:685e839d934e 551:3acd624d4f4f
       
     1 var tinyMCE_GZ = {
       
     2 	settings : {
       
     3 		themes : '',
       
     4 		plugins : '',
       
     5 		languages : '',
       
     6 		disk_cache : true,
       
     7 		page_name : 'tiny_mce_gzip.php',
       
     8 		debug : false,
       
     9 		suffix : ''
       
    10 	},
       
    11 
       
    12 	init : function(s, cb, sc) {
       
    13 		var t = this, n, i, nl = document.getElementsByTagName('script');
       
    14 
       
    15 		for (n in s)
       
    16 			t.settings[n] = s[n];
       
    17 
       
    18 		s = t.settings;
       
    19 
       
    20 		for (i=0; i<nl.length; i++) {
       
    21 			n = nl[i];
       
    22 
       
    23 			if (n.src && n.src.indexOf('tiny_mce') != -1)
       
    24 				t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));
       
    25 		}
       
    26 
       
    27 		if (!t.coreLoaded)
       
    28 			t.loadScripts(1, s.themes, s.plugins, s.languages, cb, sc);
       
    29 	},
       
    30 
       
    31 	loadScripts : function(co, th, pl, la, cb, sc) {
       
    32 		var t = this, x, w = window, q, c = 0, ti, s = t.settings;
       
    33 
       
    34 		function get(s) {
       
    35 			x = 0;
       
    36 
       
    37 			try {
       
    38 				x = new ActiveXObject(s);
       
    39 			} catch (s) {
       
    40 			}
       
    41 
       
    42 			return x;
       
    43 		};
       
    44 
       
    45 		// Build query string
       
    46 		q = 'js=true&diskcache=' + (s.disk_cache ? 'true' : 'false') + '&core=' + (co ? 'true' : 'false') + '&suffix=' + escape(s.suffix) + '&themes=' + escape(th) + '&plugins=' + escape(pl) + '&languages=' + escape(la);
       
    47 
       
    48 		if (co)
       
    49 			t.coreLoaded = 1;
       
    50 
       
    51 		// Send request
       
    52 		x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Msxml2.XMLHTTP') || get('Microsoft.XMLHTTP');
       
    53 		x.overrideMimeType && x.overrideMimeType('text/javascript');
       
    54 		x.open('GET', t.baseURL + '/' + s.page_name + '?' + q, !!cb);
       
    55 //		x.setRequestHeader('Content-Type', 'text/javascript');
       
    56 		x.send('');
       
    57 
       
    58 		// Handle asyncronous loading
       
    59 		if (cb) {
       
    60 			// Wait for response
       
    61 			ti = w.setInterval(function() {
       
    62 				if (x.readyState == 4 || c++ > 10000) {
       
    63 					w.clearInterval(ti);
       
    64 
       
    65 					if (c < 10000 && x.status == 200) {
       
    66 						t.loaded = 1;
       
    67 						t.eval(x.responseText);
       
    68 						tinymce.dom.Event.domLoaded = true;
       
    69 						cb.call(sc || t, x);
       
    70 					}
       
    71 
       
    72 					ti = x = null;
       
    73 				}
       
    74 			}, 10);
       
    75 		} else
       
    76 			t.eval(x.responseText);
       
    77 	},
       
    78 
       
    79 	start : function() {
       
    80 		var t = this, each = tinymce.each, s = t.settings, sl, ln = s.languages.split(',');
       
    81 
       
    82 		tinymce.suffix = s.suffix;
       
    83 
       
    84 		// Extend script loader
       
    85 		tinymce.create('tinymce.compressor.ScriptLoader:tinymce.dom.ScriptLoader', {
       
    86 			loadScripts : function(sc, cb, s) {
       
    87 				var ti = this, th = [], pl = [], la = [];
       
    88 
       
    89 				each(sc, function(o) {
       
    90 					var u = o.url;
       
    91 
       
    92 					if ((!ti.lookup[u] || ti.lookup[u].state != 2) && u.indexOf(t.baseURL) === 0) {
       
    93 						// Collect theme
       
    94 						if (u.indexOf('editor_template') != -1) {
       
    95 							th.push(/\/themes\/([^\/]+)/.exec(u)[1]);
       
    96 							load(u, 1);
       
    97 						}
       
    98 
       
    99 						// Collect plugin
       
   100 						if (u.indexOf('editor_plugin') != -1) {
       
   101 							pl.push(/\/plugins\/([^\/]+)/.exec(u)[1]);
       
   102 							load(u, 1);
       
   103 						}
       
   104 
       
   105 						// Collect language
       
   106 						if (u.indexOf('/langs/') != -1) {
       
   107 							la.push(/\/langs\/([^.]+)/.exec(u)[1]);
       
   108 							load(u, 1);
       
   109 						}
       
   110 					}
       
   111 				});
       
   112 
       
   113 				if (th.length + pl.length + la.length > 0) {
       
   114 					if (sl.settings.strict_mode) {
       
   115 						// Async
       
   116 						t.loadScripts(0, th.join(','), pl.join(','), la.join(','), cb, s);
       
   117 						return;
       
   118 					} else
       
   119 						t.loadScripts(0, th.join(','), pl.join(','), la.join(','), cb, s);
       
   120 				}
       
   121 
       
   122 				return ti.parent(sc, cb, s);
       
   123 			}
       
   124 		});
       
   125 
       
   126 		sl = tinymce.ScriptLoader = new tinymce.compressor.ScriptLoader();
       
   127 
       
   128 		function load(u, sp) {
       
   129 			var o;
       
   130 
       
   131 			if (!sp)
       
   132 				u = t.baseURL + u;
       
   133 
       
   134 			o = {url : u, state : 2};
       
   135 			sl.queue.push(o);
       
   136 			sl.lookup[o.url] = o;
       
   137 		};
       
   138 
       
   139 		// Add core languages
       
   140 		each (ln, function(c) {
       
   141 			if (c)
       
   142 				load('/langs/' + c + '.js');
       
   143 		});
       
   144 
       
   145 		// Add themes with languages
       
   146 		each(s.themes.split(','), function(n) {
       
   147 			if (n) {
       
   148 				load('/themes/' + n + '/editor_template' + s.suffix + '.js');
       
   149 
       
   150 				each (ln, function(c) {
       
   151 					if (c)
       
   152 						load('/themes/' + n + '/langs/' + c + '.js');
       
   153 				});
       
   154 			}
       
   155 		});
       
   156 
       
   157 		// Add plugins with languages
       
   158 		each(s.plugins.split(','), function(n) {
       
   159 			if (n) {
       
   160 				load('/plugins/' + n + '/editor_plugin' + s.suffix + '.js');
       
   161 
       
   162 				each (ln, function(c) {
       
   163 					if (c)
       
   164 						load('/plugins/' + n + '/langs/' + c + '.js');
       
   165 				});
       
   166 			}
       
   167 		});
       
   168 	},
       
   169 
       
   170 	end : function() {
       
   171 	},
       
   172 
       
   173 	eval : function(co) {
       
   174 		var w = window;
       
   175 
       
   176 		// Evaluate script
       
   177 		if (!w.execScript) {
       
   178 			if (/Gecko/.test(navigator.userAgent))
       
   179 				eval(co, w); // Firefox 3.0
       
   180 			else
       
   181 				eval.call(w, co);
       
   182 		} else
       
   183 			w.execScript(co); // IE
       
   184 	}
       
   185 };