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 });