1 /** 2 * video button. 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("editor/plugin/video/index", function (S, Editor, flashUtils, FlashBaseClass) { 6 var CLS_VIDEO = "ke_video", 7 TYPE_VIDEO = "video"; 8 9 function video(config) { 10 this.config = config; 11 } 12 13 S.augment(video, { 14 renderUI:function (editor) { 15 var dataProcessor = editor.htmlDataProcessor, 16 dataFilter = dataProcessor && dataProcessor.dataFilter; 17 18 var provider = []; 19 20 function getProvider(url) { 21 for (var i = 0; 22 i < provider.length; 23 i++) { 24 var p = provider[i]; 25 if (p['reg'].test(url)) { 26 return p; 27 } 28 } 29 return undefined; 30 } 31 32 var videoCfg = this.config; 33 34 if (videoCfg['providers']) { 35 provider.push.apply(provider, videoCfg['providers']); 36 } 37 38 videoCfg.getProvider = getProvider; 39 40 dataFilter && dataFilter.addRules({ 41 elements:{ 42 'object':function (element) { 43 var classId = element.getAttribute("classid"), i; 44 var childNodes = element.childNodes; 45 if (!classId) { 46 47 // Look for the inner <embed> 48 for (i = 0; i < childNodes.length; i++) { 49 if (childNodes[ i ].name == 'embed') { 50 if (!flashUtils.isFlashEmbed(childNodes[ i ])) { 51 return null; 52 } 53 if (getProvider(childNodes[ i ].getAttribute("src"))) { 54 return dataProcessor.createFakeParserElement(element, 55 CLS_VIDEO, TYPE_VIDEO, true); 56 } 57 } 58 } 59 return null; 60 } 61 for (i = 0; i < childNodes.length; i++) { 62 var c = childNodes[ i ]; 63 if (c.nodeName == 'param' && 64 c.getAttribute("name").toLowerCase() == "movie") { 65 if (getProvider(c.getAttribute("value"))) { 66 return dataProcessor.createFakeParserElement(element, 67 CLS_VIDEO, TYPE_VIDEO, true); 68 } 69 } 70 } 71 72 }, 73 74 'embed':function (element) { 75 if (!flashUtils.isFlashEmbed(element)) 76 return null; 77 if (getProvider(element.getAttribute("src"))) { 78 return dataProcessor.createFakeParserElement(element, 79 CLS_VIDEO, TYPE_VIDEO, true); 80 } 81 82 } 83 //4 比 flash 的优先级 5 高! 84 }}, 4); 85 86 87 var flashControl = new FlashBaseClass({ 88 editor:editor, 89 cls:CLS_VIDEO, 90 type:TYPE_VIDEO, 91 pluginConfig:this.config, 92 bubbleId:"video", 93 contextMenuId:"video", 94 contextMenuHandlers:{ 95 视频属性:function () { 96 var selectedEl = this.get("editorSelectedEl"); 97 if (selectedEl) { 98 flashControl.show(selectedEl); 99 } 100 } 101 } 102 }); 103 104 editor.addButton("video", { 105 tooltip:"插入视频", 106 listeners:{ 107 click:function () { 108 flashControl.show(); 109 110 } 111 }, 112 mode:Editor.WYSIWYG_MODE 113 }); 114 } 115 }); 116 117 118 return video; 119 120 }, { 121 requires:['editor', '../flashCommon/utils', '../flashCommon/baseClass'] 122 });