/**
* @ignore
* video dialog
* @author yiminghe@gmail.com
*/
KISSY.add("editor/plugin/video/dialog", function (S, Editor, FlashDialog, MenuButton) {
var CLS_VIDEO = "ke_video",
TYPE_VIDEO = "video",
DTIP = "自动",
MARGIN_DEFAULT = 0,
bodyHTML = "<div style='padding:20px 20px 0 20px'>" +
"<p>" +
"<label>" +
"链接: " +
"" +
"<input " +
"class='{prefixCls}editor-video-url {prefixCls}editor-input' style='width:410px;" +
"'/>" +
"</label>" +
"</p>" +
"<table " +
"style='margin:10px 0 5px 40px;width:400px;'>" +
"<tr><td>" +
"<label>宽度: " +
" " +
"<input " +
" data-verify='^(" + DTIP + "|((?!0$)\\d+))?$' " +
" data-warning='宽度请输入正整数' " +
"class='{prefixCls}editor-video-width {prefixCls}editor-input' " +
"style='width:60px;" +
"' " +
"/> 像素" +
"</label>" +
"</td>" +
"<td>" +
"<label> 高度: " +
"" +
" <input " +
" data-verify='^(" + DTIP + "|((?!0$)\\d+))?$' " +
" data-warning='高度请输入正整数' " +
"class='{prefixCls}editor-video-height {prefixCls}editor-input' style='width:60px;" +
"'/> 像素" +
"</label>" +
"</td></tr>" +
"<tr>" +
"<td>" +
"<label>对齐: " +
"<select class='{prefixCls}editor-video-align' title='对齐'>" +
"<option value='none'>无</option>" +
"<option value='left'>左对齐</option>" +
"<option value='right'>右对齐</option>" +
"</select>" +
"</td>" +
"<td>" +
"<label>间距: " +
"<input " +
"" +
" data-verify='^\\d+$' " +
" data-warning='间距请输入非负整数' " +
"class='{prefixCls}editor-video-margin {prefixCls}editor-input' style='width:60px;" +
"' value='"
+ MARGIN_DEFAULT + "'/> 像素" +
"</label>" +
"</td></tr>" +
"</table>" +
"</div>",
footHTML = "<div style='padding:10px 0 35px 20px;'><a " +
"class='{prefixCls}editor-video-ok {prefixCls}editor-button ks-inline-block' " +
"style='margin-left:40px;margin-right:20px;'>确定</button> " +
"<a class='{prefixCls}editor-video-cancel {prefixCls}editor-button ks-inline-block'>取消</a></div>";
function VideoDialog() {
VideoDialog.superclass.constructor.apply(this, arguments);
}
S.extend(VideoDialog, FlashDialog, {
_config: function () {
var self = this,
editor = self.editor,
prefixCls = editor.get('prefixCls'),
cfg = self.config;
self._cls = CLS_VIDEO;
self._type = TYPE_VIDEO;
self._title = "视频";//属性";
self._bodyHTML = S.substitute(bodyHTML, {
prefixCls: prefixCls
});
self._footHTML = S.substitute(footHTML, {
prefixCls: prefixCls
});
self.urlCfg = cfg.urlCfg;
self._urlTip = cfg.urlTip || "请输入视频播放链接...";
},
_initD: function () {
var self = this,
d = self.dialog,
editor = self.editor,
prefixCls = editor.get('prefixCls'),
el = d.get("el");
self.dUrl = el.one("." + prefixCls + "editor-video-url");
self.dAlign = MenuButton.Select.decorate(el.one("." + prefixCls + "editor-video-align"), {
prefixCls: prefixCls + 'editor-big-',
width: 80,
menuCfg: {
prefixCls: prefixCls + 'editor-',
render: el
}
});
self.dMargin = el.one("." + prefixCls + "editor-video-margin");
self.dWidth = el.one("." + prefixCls + "editor-video-width");
self.dHeight = el.one("." + prefixCls + "editor-video-height");
var action = el.one("." + prefixCls + "editor-video-ok"),
cancel = el.one("." + prefixCls + "editor-video-cancel");
action.on("click", self._gen, self);
cancel.on("click", function (ev) {
d.hide();
ev.halt();
});
Editor.Utils.placeholder(self.dUrl, self._urlTip);
Editor.Utils.placeholder(self.dWidth, DTIP);
Editor.Utils.placeholder(self.dHeight, DTIP);
self.addRes(self.dAlign);
},
_getDInfo: function () {
var self = this,
url = self.dUrl.val();
var videoCfg = self.config,
p = videoCfg.getProvider(url);
if (!p) {
alert("不支持该链接来源!");
} else {
var re = p['detect'](url);
if (!re) {
alert("不支持该链接,请直接输入该视频提供的分享链接");
return undefined;
}
return {
url: re,
attrs: {
height: parseInt(self.dHeight.val()) || p.height,
width: parseInt(self.dWidth.val()) || p.width,
style: "margin:" + (parseInt(self.dMargin.val()) || 0) + "px;" +
"float:" + self.dAlign.get("value") + ";"
}
};
}
return undefined;
},
_gen: function (ev) {
var self = this,
url = self.dUrl.val(),
urlCfg = self.urlCfg;
if (urlCfg) {
for (var i = 0; i < urlCfg.length; i++) {
var c = urlCfg[i];
if (c['reg'].test(url)) {
self.dialog.loading();
var data = {};
data[c['paramName'] || "url"] = url;
S.io({
url: c.url,
data: data,
dataType: 'jsonp',
success: function (data) {
self._dynamicUrlPrepare(data[1]);
}
});
return;
}
}
}
VideoDialog.superclass._gen.call(self);
ev && ev.halt();
},
_dynamicUrlPrepare: function (re) {
var self = this;
self.dUrl.val(re);
self.dialog.unloading();
VideoDialog.superclass._gen.call(self);
},
_updateD: function () {
var self = this,
editor = self.editor,
f = self.selectedFlash;
if (f) {
var r = editor.restoreRealElement(f);
Editor.Utils.valInput(self.dUrl, self._getFlashUrl(r));
self.dAlign.set("value", f.css("float"));
self.dMargin.val(parseInt(r.style("margin")) || 0);
Editor.Utils.valInput(self.dWidth, parseInt(f.css("width")));
Editor.Utils.valInput(self.dHeight, parseInt(f.css("height")));
} else {
Editor.Utils.resetInput(self.dUrl);
self.dAlign.set("value", "none");
self.dMargin.val(MARGIN_DEFAULT);
Editor.Utils.resetInput(self.dWidth);
Editor.Utils.resetInput(self.dHeight);
}
}
});
return VideoDialog;
}, {
requires: ['editor', '../flash/dialog', '../menubutton']
});