includes/clientside/tinymce/plugins/media/editor_plugin_src.js
changeset 778 57ce13805b6f
parent 588 20484deb89cd
child 1193 e3b94bd055dc
equal deleted inserted replaced
777:488665d49417 778:57ce13805b6f
     1 /**
     1 /**
     2  * $Id: editor_plugin_src.js 870 2008-06-13 09:25:41Z spocke $
     2  * $Id: editor_plugin_src.js 952 2008-11-03 17:56:04Z spocke $
     3  *
     3  *
     4  * @author Moxiecode
     4  * @author Moxiecode
     5  * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
     5  * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
     6  */
     6  */
     7 
     7 
    19 				return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);
    19 				return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);
    20 			};
    20 			};
    21 
    21 
    22 			ed.onPreInit.add(function() {
    22 			ed.onPreInit.add(function() {
    23 				// Force in _value parameter this extra parameter is required for older Opera versions
    23 				// Force in _value parameter this extra parameter is required for older Opera versions
    24 				ed.serializer.addRules('param[name|value|_value]');
    24 				ed.serializer.addRules('param[name|value|_mce_value]');
    25 			});
    25 			});
    26 
    26 
    27 			// Register commands
    27 			// Register commands
    28 			ed.addCommand('mceMedia', function() {
    28 			ed.addCommand('mceMedia', function() {
    29 				ed.windowManager.open({
    29 				ed.windowManager.open({
    49 					mceItemShockWave : 'shockwave',
    49 					mceItemShockWave : 'shockwave',
    50 					mceItemWindowsMedia : 'windowsmedia',
    50 					mceItemWindowsMedia : 'windowsmedia',
    51 					mceItemQuickTime : 'quicktime',
    51 					mceItemQuickTime : 'quicktime',
    52 					mceItemRealMedia : 'realmedia'
    52 					mceItemRealMedia : 'realmedia'
    53 				};
    53 				};
       
    54 
       
    55 				ed.selection.onSetContent.add(function() {
       
    56 					t._spansToImgs(ed.getBody());
       
    57 				});
       
    58 
       
    59 				ed.selection.onBeforeSetContent.add(t._objectsToSpans, t);
    54 
    60 
    55 				if (ed.settings.content_css !== false)
    61 				if (ed.settings.content_css !== false)
    56 					ed.dom.loadCSS(url + "/css/content.css");
    62 					ed.dom.loadCSS(url + "/css/content.css");
    57 
    63 
    58 				if (ed.theme.onResolveName) {
    64 				if (ed.theme.onResolveName) {
    76 						}
    82 						}
    77 					});
    83 					});
    78 				}
    84 				}
    79 			});
    85 			});
    80 
    86 
    81 			ed.onBeforeSetContent.add(function(ed, o) {
    87 			ed.onBeforeSetContent.add(t._objectsToSpans, t);
    82 				var h = o.content;
       
    83 
       
    84 				h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {
       
    85 					var o = t._parse(c);
       
    86 
       
    87 					return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'
       
    88 				});
       
    89 
       
    90 				h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');
       
    91 				h = h.replace(/<embed([^>]*)\/>/gi, '<span class="mceItemEmbed" $1>');
       
    92 				h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');
       
    93 				h = h.replace(/<\/(object|embed)([^>]*)>/gi, '</span>');
       
    94 				h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_value=') + ' class="mceItemParam"></span>'});
       
    95 				h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');
       
    96 
       
    97 				o.content = h;
       
    98 			});
       
    99 
    88 
   100 			ed.onSetContent.add(function() {
    89 			ed.onSetContent.add(function() {
   101 				t._spansToImgs(ed.getBody());
    90 				t._spansToImgs(ed.getBody());
   102 			});
    91 			});
   103 
    92 
   171 					});
   160 					});
   172 				}
   161 				}
   173 			});
   162 			});
   174 
   163 
   175 			ed.onPostProcess.add(function(ed, o) {
   164 			ed.onPostProcess.add(function(ed, o) {
   176 				o.content = o.content.replace(/_value=/g, 'value=');
   165 				o.content = o.content.replace(/_mce_value=/g, 'value=');
   177 			});
   166 			});
   178 
   167 
   179 			if (ed.getParam('media_use_script')) {
   168 			if (ed.getParam('media_use_script')) {
   180 				function getAttr(s, n) {
   169 				function getAttr(s, n) {
   181 					n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
   170 					n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
   209 				version : tinymce.majorVersion + "." + tinymce.minorVersion
   198 				version : tinymce.majorVersion + "." + tinymce.minorVersion
   210 			};
   199 			};
   211 		},
   200 		},
   212 
   201 
   213 		// Private methods
   202 		// Private methods
       
   203 		_objectsToSpans : function(ed, o) {
       
   204 			var t = this, h = o.content;
       
   205 
       
   206 			h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {
       
   207 				var o = t._parse(c);
       
   208 
       
   209 				return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + t.url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'
       
   210 			});
       
   211 
       
   212 			h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');
       
   213 			h = h.replace(/<embed([^>]*)\/?>/gi, '<span class="mceItemEmbed" $1></span>');
       
   214 			h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');
       
   215 			h = h.replace(/<\/(object)([^>]*)>/gi, '</span>');
       
   216 			h = h.replace(/<\/embed>/gi, '');
       
   217 			h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_mce_value=') + ' class="mceItemParam"></span>'});
       
   218 			h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');
       
   219 
       
   220 			o.content = h;
       
   221 		},
   214 
   222 
   215 		_buildObj : function(o, n) {
   223 		_buildObj : function(o, n) {
   216 			var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title);
   224 			var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc;
       
   225 			
       
   226 			stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash';
   217 
   227 
   218 			p.width = o.width = dom.getAttrib(n, 'width') || 100;
   228 			p.width = o.width = dom.getAttrib(n, 'width') || 100;
   219 			p.height = o.height = dom.getAttrib(n, 'height') || 100;
   229 			p.height = o.height = dom.getAttrib(n, 'height') || 100;
   220 
   230 
   221 			ob = dom.create('span', {
       
   222 				mce_name : 'object',
       
   223 				classid : "clsid:" + o.classid,
       
   224 				codebase : o.codebase,
       
   225 				width : o.width,
       
   226 				height : o.height
       
   227 			});
       
   228 
       
   229 			if (p.src)
   231 			if (p.src)
   230 				p.src = ed.convertURL(p.src, 'src', n);
   232 				p.src = ed.convertURL(p.src, 'src', n);
   231 
   233 
       
   234 			if (stc) {
       
   235 				ob = dom.create('span', {
       
   236 					mce_name : 'object',
       
   237 					type : 'application/x-shockwave-flash',
       
   238 					data : p.src,
       
   239 					width : o.width,
       
   240 					height : o.height
       
   241 				});
       
   242 			} else {
       
   243 				ob = dom.create('span', {
       
   244 					mce_name : 'object',
       
   245 					classid : "clsid:" + o.classid,
       
   246 					codebase : o.codebase,
       
   247 					width : o.width,
       
   248 					height : o.height
       
   249 				});
       
   250 			}
       
   251 
   232 			each (p, function(v, k) {
   252 			each (p, function(v, k) {
   233 				if (!/^(width|height|codebase|classid)$/.test(k)) {
   253 				if (!/^(width|height|codebase|classid|_cx|_cy)$/.test(k)) {
   234 					// Use url instead of src in IE for Windows media
   254 					// Use url instead of src in IE for Windows media
   235 					if (o.type == 'application/x-mplayer2' && k == 'src')
   255 					if (o.type == 'application/x-mplayer2' && k == 'src')
   236 						k = 'url';
   256 						k = 'url';
   237 
   257 
   238 					dom.add(ob, 'span', {mce_name : 'param', name : k, '_value' : v});
   258 					if (v)
   239 				}
   259 						dom.add(ob, 'span', {mce_name : 'param', name : k, '_mce_value' : v});
   240 			});
   260 				}
   241 
   261 			});
   242 			dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));
   262 
       
   263 			if (!stc)
       
   264 				dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));
   243 
   265 
   244 			return ob;
   266 			return ob;
   245 		},
   267 		},
   246 
   268 
   247 		_spansToImgs : function(p) {
   269 		_spansToImgs : function(p) {
   311 				}			
   333 				}			
   312 			});
   334 			});
   313 		},
   335 		},
   314 
   336 
   315 		_createImg : function(cl, n) {
   337 		_createImg : function(cl, n) {
   316 			var im, dom = this.editor.dom, pa = {}, ti = '';
   338 			var im, dom = this.editor.dom, pa = {}, ti = '', args;
       
   339 
       
   340 			args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality'];	
   317 
   341 
   318 			// Create image
   342 			// Create image
   319 			im = dom.create('img', {
   343 			im = dom.create('img', {
   320 				src : this.url + '/img/trans.gif',
   344 				src : this.url + '/img/trans.gif',
   321 				width : dom.getAttrib(n, 'width') || 100,
   345 				width : dom.getAttrib(n, 'width') || 100,
   322 				height : dom.getAttrib(n, 'height') || 100,
   346 				height : dom.getAttrib(n, 'height') || 100,
   323 				'class' : cl
   347 				'class' : cl
   324 			});
   348 			});
   325 
   349 
   326 			// Setup base parameters
   350 			// Setup base parameters
   327 			each(['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode'], function(na) {
   351 			each(args, function(na) {
   328 				var v = dom.getAttrib(n, na);
   352 				var v = dom.getAttrib(n, na);
   329 
   353 
   330 				if (v)
   354 				if (v)
   331 					pa[na] = v;
   355 					pa[na] = v;
   332 			});
   356 			});
   333 
   357 
   334 			// Add optional parameters
   358 			// Add optional parameters
   335 			each(dom.select('span', n), function(n) {
   359 			each(dom.select('span', n), function(n) {
   336 				if (dom.hasClass(n, 'mceItemParam'))
   360 				if (dom.hasClass(n, 'mceItemParam'))
   337 					pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_value');
   361 					pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value');
   338 			});
   362 			});
   339 
   363 
   340 			// Use src not movie
   364 			// Use src not movie
   341 			if (pa.movie) {
   365 			if (pa.movie) {
   342 				pa.src = pa.movie;
   366 				pa.src = pa.movie;
   343 				delete pa.movie;
   367 				delete pa.movie;
   344 			}
   368 			}
   345 
   369 
       
   370 			// Merge with embed args
       
   371 			n = dom.select('.mceItemEmbed', n)[0];
       
   372 			if (n) {
       
   373 				each(args, function(na) {
       
   374 					var v = dom.getAttrib(n, na);
       
   375 
       
   376 					if (v && !pa[na])
       
   377 						pa[na] = v;
       
   378 				});
       
   379 			}
       
   380 
   346 			delete pa.width;
   381 			delete pa.width;
   347 			delete pa.height;
   382 			delete pa.height;
   348 
   383 
   349 			im.title = this._serialize(pa);
   384 			im.title = this._serialize(pa);
   350 
   385