blob: 8b1ddb8a2070dff431922a15438f659ec6b850fd [file] [log] [blame]
(function($) {
elRTE.prototype.ui.prototype.buttons.flash = function(rte, name) {
this.constructor.prototype.constructor.call(this, rte, name);
var self = this;
this.swf = null;
this.placeholder = null;
this.src = {
url : $('<input type="text" name="url" />').css('width', '99%'),
type : $('<select name="type"/>')
.append('<option value="application/x-shockwave-flash">Flash</option>')
.append('<option value="video/quicktime">Quicktime movie</option>')
.append('<option value="application/x-mplayer2">Windows media</option>'),
width : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
height : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
wmode : $('<select />')
.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
.append($('<option />').val('transparent').text(this.rte.i18n('Transparent'))),
align : $('<select />')
.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
.append($('<option />').val('left' ).text(this.rte.i18n('Left')))
.append($('<option />').val('right' ).text(this.rte.i18n('Right')))
.append($('<option />').val('top' ).text(this.rte.i18n('Top')))
.append($('<option />').val('text-top' ).text(this.rte.i18n('Text top')))
.append($('<option />').val('middle' ).text(this.rte.i18n('middle')))
.append($('<option />').val('baseline' ).text(this.rte.i18n('Baseline')))
.append($('<option />').val('bottom' ).text(this.rte.i18n('Bottom')))
.append($('<option />').val('text-bottom').text(this.rte.i18n('Text bottom'))),
margin : $('<div />')
}
this.command = function() {
var n = this.rte.selection.getEnd(), opts, url='', w='', h='', f, a, d, mid, o, wm;
this.rte.selection.saveIERange();
this.src.margin.elPaddingInput({ type : 'margin' });
this.placeholder = null;
this.swf = null;
if ($(n).hasClass('elrte-media') && (mid = $(n).attr('rel')) && this.rte.filter.scripts[mid]) {
this.placeholder = $(n);
o = this.rte.filter.scripts[mid];
url = '';
if (o.embed && o.embed.src) {
url = o.embed.src;
}
if (o.params && o.params.length) {
l = o.params.length;
while (l--) {
if (o.params[l].name == 'src' || o.params[l].name == 'movie') {
url = o.params[l].value;
}
}
}
if (o.embed) {
w = o.embed.width||parseInt(o.embed.style.width)||'';
h = o.embed.height||parseInt(o.embed.style.height)||'';
wm = o.embed.wmode||'';
} else if (o.obj) {
w = o.obj.width||parseInt(o.obj.style.width)||'';
h = o.obj.height||parseInt(o.obj.style.height)||'';
wm = o.obj.wmode||'';
}
if (o.obj) {
f = o.obj.style['float']||'';
a = o.obj.style['vertical-align']||'';
} else if (o.embed) {
f = o.embed.style['float']||'';
a = o.embed.style['vertical-align']||'';
}
this.src.margin.val(n);
this.src.type.val(o.embed ? o.embed.type : '');
}
if ($(n).hasClass('elrte-swf-placeholder')) {
this.placeholder = $(n);
url = $(n).attr('rel');
w = parseInt($(n).css('width'))||'';
h = parseInt($(n).css('height'))||'';
f = $(n).css('float');
a = $(n).css('vertical-align');
this.src.margin.val(n);
this.src.wmode.val($(n).attr('wmode'));
}
this.src.url.val(url);
this.src.width.val(w);
this.src.height.val(h);
this.src.align.val(f||a);
this.src.wmode.val(wm);
var opts = {
rtl : this.rte.rtl,
submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
dialog : {
width : 580,
position : 'top',
title : this.rte.i18n('Flash')
}
}
var d = new elDialogForm(opts);
if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
var src = $('<span />').append(this.src.url.css('width', '85%'))
.append(
$('<span />').addClass('ui-state-default ui-corner-all')
.css({'float' : 'right', 'margin-right' : '3px'})
.attr('title', self.rte.i18n('Open file manger'))
.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
.click( function() {
self.rte.options.fmOpen( function(url) { self.src.url.val(url).change(); } );
})
.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
);
} else {
var src = this.src.url;
}
d.append([this.rte.i18n('URL'), src], null, true);
d.append([this.rte.i18n('Type'), this.src.type], null, true);
d.append([this.rte.i18n('Size'), $('<span />').append(this.src.width).append(' x ').append(this.src.height).append(' px')], null, true)
d.append([this.rte.i18n('Wmode'), this.src.wmode], null, true);
d.append([this.rte.i18n('Alignment'), this.src.align], null, true);
d.append([this.rte.i18n('Margins'), this.src.margin], null, true);
d.open();
// setTimeout( function() {self.src.url.focus()}, 100)
var fs = $('<fieldset />').append($('<legend />').text(this.rte.i18n('Preview')))
d.append(fs, 'main');
var frame = document.createElement('iframe');
$(frame).attr('src', '#').addClass('el-rte-preview').appendTo(fs);
html = this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin</body></html>';
frame.contentWindow.document.open();
frame.contentWindow.document.write(html);
frame.contentWindow.document.close();
this.frame = frame.contentWindow.document;
this.preview = $(frame.contentWindow.document.body);
this.src.type.change(function() {
self.src.url.change();
});
this.src.width.change(function() {
if (self.swf) {
var w = parseInt($(this).val())||'';
$(this).val(w);
self.swf.css('width', w);
self.swf.children('embed').css('width', w);
} else {
$(this).val('');
}
});
this.src.height.change(function() {
if (self.swf) {
var h = parseInt($(this).val())||'';
$(this).val(h);
self.swf.css('height', h);
self.swf.children('embed').css('height', h);
} else {
$(this).val('');
}
});
this.src.wmode.change(function() {
if (self.swf) {
var wm = $(this).val();
if (wm) {
self.swf.attr('wmode', wm);
self.swf.children('embed').attr('wmode', wm);
} else {
self.swf.removeAttr('wmode');
self.swf.children('embed').removeAttr('wmode');
}
}
});
this.src.align.change(function() {
var v = $(this).val(), f = v=='left' || v=='right';
if (self.swf) {
self.swf.css({
'float' : f ? v : '',
'vertical-align' : f ? '' : v
});
} else {
$(this).val('');
}
});
this.src.margin.change(function() {
if (self.swf) {
var m = self.src.margin.val();
if (m.css) {
self.swf.css('margin', m.css);
} else {
self.swf.css('margin-top', m.top);
self.swf.css('margin-right', m.right);
self.swf.css('margin-bottom', m.bottom);
self.swf.css('margin-left', m.left);
}
}
});
this.src.url.change(function() {
var url = self.rte.utils.absoluteURL($(this).val()), i, swf;
if (url) {
i = self.rte.utils.mediaInfo(self.src.type.val());
if (!i) {
i = self.rte.util.mediaInfo('application/x-shockwave-flash');
}
swf = '<object classid="'+i.classid+'" codebase="'+i.codebase+'"><param name="src" value="'+url+'" /><embed quality="high" src="'+url+'" type="'+i.type+'"></object>';
self.preview.children('object').remove().end().prepend(swf);
self.swf = self.preview.children('object').eq(0);
} else if (self.swf){
self.swf.remove();
self.swf = null;
}
self.src.width.trigger('change');
self.src.height.trigger('change');
self.src.align.trigger('change');
}).trigger('change');
};
this.set = function() {
self.swf = null
var url = this.rte.utils.absoluteURL(this.src.url.val()),
w = parseInt(this.src.width.val()) || '',
h = parseInt(this.src.height.val()) || '',
wm = this.src.wmode.val(),
a = this.src.align.val(),
f = a == 'left' || a == 'right' ? a : '',
mid = this.placeholder ? this.placeholder.attr('rel') : '', o, _o, c,
m = this.src.margin.val(), margin;
if (!url) {
if (this.placeholder) {
this.placeholder.remove();
delete this.rte.filter.scripts[mid];
}
} else {
i = self.rte.utils.mediaInfo(self.src.type.val());
if (!i) {
i = self.rte.util.mediaInfo('application/x-shockwave-flash');
}
c = this.rte.filter.videoHostRegExp.test(url) ? url.replace(this.rte.filter.videoHostRegExp, "$2") : i.type.replace(/^\w+\/(.+)/, "$1");
o = {
obj : {
classid : i.classid[0],
codebase : i.codebase,
style : {}
},
params :[ { name : 'src', value : url } ],
embed :{
src : url,
type : i.type,
quality : 'high',
wmode : wm,
style : {}
}
};
if (w) {
o.obj.width = w;
o.embed.width = w;
}
if (h) {
o.obj.height = h;
o.embed.height = h;
}
if (f) {
o.obj.style['float'] = f;
} else if (a) {
o.obj.style['vertical-align'] = a;
}
if (m.css) {
margin = { margin : m.css };
} else {
margin = {
'margin-top' : m.top,
'margin-right' : m.right,
'margin-bottom' : m.bottom,
'margin-left' : m.left
};
}
o.obj.style = $.extend({}, o.obj.style, margin);
if (this.placeholder && mid) {
_o = this.rte.filter.scripts[mid]||{};
o = $.extend(true, _o, o);
delete o.obj.style.width;
delete o.obj.style.height;
delete o.embed.style.width;
delete o.embed.style.height;
this.rte.filter.scripts[mid] = o;
this.placeholder.removeAttr('class');
} else {
var id = 'media'+Math.random().toString().substring(2);
this.rte.filter.scripts[id] = o;
this.placeholder = $(this.rte.dom.create('img')).attr('rel', id).attr('src', this.rte.filter.url+'pixel.gif');
var ins = true;
}
this.placeholder.attr('title', this.rte.utils.encode(url)).attr('width', w||150).attr('height', h||100).addClass('elrte-protected elrte-media elrte-media-'+c).css(o.obj.style);
if (f) {
this.placeholder.css('float', f).css('vertical-align', '');
} else if (a) {
this.placeholder.css('float', '').css('vertical-align', a);
} else {
this.placeholder.css('float', '').css('vertical-align', '');
}
if (ins) {
this.rte.window.focus();
this.rte.selection.restoreIERange();
this.rte.selection.insertNode(this.placeholder.get(0));
}
}
}
this.update = function() {
this.domElem.removeClass('disabled');
var n = this.rte.selection.getNode();
this.domElem.toggleClass('active', n && n.nodeName == 'IMG' && $(n).hasClass('elrte-media'))
}
}
})(jQuery);