From ea993c6db63c175aa960a8e90b0ea3e114c769dd Mon Sep 17 00:00:00 2001 From: akai Date: Tue, 20 Oct 2015 15:50:02 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=94=A8=20api=20=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _src/plugins/video.js | 10 ++------ dialogs/video/video.js | 56 +++++++++++++++++------------------------- 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/_src/plugins/video.js b/_src/plugins/video.js index 96d7d146..3d9c7dab 100755 --- a/_src/plugins/video.js +++ b/_src/plugins/video.js @@ -18,15 +18,9 @@ UM.plugins['video'] = function (){ * @param addParagraph 是否需要添加P 标签 */ function creatInsertStr(url,width,height,id,align,toEmbed){ - return !toEmbed ? + return '' - '' - - : - ''; } function switchImgAndEmbed(root,img2embed){ diff --git a/dialogs/video/video.js b/dialogs/video/video.js index 64a47eca..83b39875 100644 --- a/dialogs/video/video.js +++ b/dialogs/video/video.js @@ -91,18 +91,19 @@ var me = this, lang = me.lang, - conUrl = me.convert_url(url); + $preview = $("#eduiVideoPreview", me.$widget); - if(!me.endWith(conUrl,[".swf",".flv",".wmv"])){ - $("#eduiVideoPreview", me.$widget).html( lang.urlError ); - return; - } - $("#eduiVideoPreview", me.$widget)[0].innerHTML = ''; + $preview.html(lang.loading); + me.convertUrl(url, function(data) { + $preview[0].innerHTML = ''; + }, function() { + $preview.html(lang.urlError); + }); }, /** * 将单个视频信息插入编辑器中 @@ -128,30 +129,19 @@ /** * URL转换 */ - convert_url: function(url){ - if ( !url ) return ''; - var matches = url.match(/youtu.be\/(\w+)$/) || - url.match(/youtube\.com\/watch\?v=(\w+)/) || - url.match(/youtube.com\/v\/(\w+)/), - youku = url.match(/youku\.com\/v_show\/id_(\w+)/), - youkuPlay = /player\.youku\.com/ig.test(url); - - if(youkuPlay){ - url = url.replace(/\?f=.*/, ""); - } else if (matches){ - url = "https://www.youtube.com/v/" + matches[1] + "?version=3&feature=player_embedded"; - }else if(youku){ - url = "http://player.youku.com/player.php/sid/"+youku[1]+"/v.swf" - } else { - url = url.replace(/http:\/\/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "http://www.tudou.com/v/$1") - .replace(/http:\/\/www\.youtube\.com\/watch\?v=([\w\-]+)/i, "http://www.youtube.com/v/$1") - .replace(/http:\/\/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, "http://player.youku.com/player.php/sid/$1") - .replace(/http:\/\/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "http://player.56.com/v_$1.swf") - .replace(/http:\/\/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "http://player.56.com/v_$1.swf") - .replace(/http:\/\/v\.ku6\.com\/.+\/([^.]+)\.html/i, "http://player.ku6.com/refer/$1/v.swf") - .replace(/\?f=.*/, ""); + convertUrl: function(url, success, fail) { + if (!url) { + fail(); + return; } - return url; + + $.get('/web/article/video/extract', { videoUrl: url, type: 0 }, function(res) { + if (res.success && res.result.data) { + success(res.result.data); + } else { + fail(); + } + }) }, /** * 检测传入的所有input框中输入的长宽是否是正数 From 4283a0e348cbb8fa2f50eaca8f3994accc35d94f Mon Sep 17 00:00:00 2001 From: akai Date: Thu, 22 Oct 2015 11:07:27 +0800 Subject: [PATCH 2/5] comments imagescale, popup, formula, scale --- _src/adapter/dialog.js | 2 +- _src/adapter/imagescale.js | 130 +++++++-------- _src/adapter/popup.js | 88 +++++----- _src/plugins/formula.js | 152 ++++++++--------- _src/ui/scale.js | 322 ++++++++++++++++++------------------- 5 files changed, 347 insertions(+), 347 deletions(-) diff --git a/_src/adapter/dialog.js b/_src/adapter/dialog.js index b3538c2c..e99c906d 100644 --- a/_src/adapter/dialog.js +++ b/_src/adapter/dialog.js @@ -1,4 +1,4 @@ -UM.registerUI('link image video map formula',function(name){ +UM.registerUI('link image video',function(name){ var me = this, currentRange, $dialog, opt = { diff --git a/_src/adapter/imagescale.js b/_src/adapter/imagescale.js index a3879edc..05c09075 100644 --- a/_src/adapter/imagescale.js +++ b/_src/adapter/imagescale.js @@ -1,76 +1,76 @@ -UM.registerUI('imagescale',function () { - var me = this, - $imagescale; +// UM.registerUI('imagescale',function () { +// var me = this, +// $imagescale; - me.setOpt('imageScaleEnabled', true); +// me.setOpt('imageScaleEnabled', true); - if (browser.webkit && me.getOpt('imageScaleEnabled')) { +// if (browser.webkit && me.getOpt('imageScaleEnabled')) { - me.addListener('click', function (type, e) { - var range = me.selection.getRange(), - img = range.getClosedNode(), - target = e.target; +// me.addListener('click', function (type, e) { +// var range = me.selection.getRange(), +// img = range.getClosedNode(), +// target = e.target; - /* 点击第一个图片的后面,八个角不消失 fix:3652 */ - if (img && img.tagName == 'IMG' && target == img) { +// /* 点击第一个图片的后面,八个角不消失 fix:3652 */ +// if (img && img.tagName == 'IMG' && target == img) { - if (!$imagescale) { - $imagescale = $.eduiscale({'$wrap':me.$container}).css('zIndex', me.options.zIndex); - me.$container.append($imagescale); +// if (!$imagescale) { +// $imagescale = $.eduiscale({'$wrap':me.$container}).css('zIndex', me.options.zIndex); +// me.$container.append($imagescale); - var _keyDownHandler = function () { - $imagescale.edui().hide(); - }, _mouseDownHandler = function (e) { - var ele = e.target || e.srcElement; - if (ele && ele.className.indexOf('edui-scale') == -1) { - _keyDownHandler(e); - } - }, timer; +// var _keyDownHandler = function () { +// $imagescale.edui().hide(); +// }, _mouseDownHandler = function (e) { +// var ele = e.target || e.srcElement; +// if (ele && ele.className.indexOf('edui-scale') == -1) { +// _keyDownHandler(e); +// } +// }, timer; - $imagescale.edui() - .on('aftershow', function () { - $(document).bind('keydown', _keyDownHandler); - $(document).bind('mousedown', _mouseDownHandler); - me.selection.getNative().removeAllRanges(); - }) - .on('afterhide', function () { - $(document).unbind('keydown', _keyDownHandler); - $(document).unbind('mousedown', _mouseDownHandler); - var target = $imagescale.edui().getScaleTarget(); - if (target.parentNode) { - me.selection.getRange().selectNode(target).select(); - } - }) - .on('mousedown', function (e) { - me.selection.getNative().removeAllRanges(); - var ele = e.target || e.srcElement; - if (ele && ele.className.indexOf('edui-scale-hand') == -1) { - timer = setTimeout(function() { - $imagescale.edui().hide(); - }, 200); - } - }) - .on('mouseup', function (e) { - var ele = e.target || e.srcElement; - if (ele && ele.className.indexOf('edui-scale-hand') == -1) { - clearTimeout(timer); - } - }); - } - $imagescale.edui().show($(img)); +// $imagescale.edui() +// .on('aftershow', function () { +// $(document).bind('keydown', _keyDownHandler); +// $(document).bind('mousedown', _mouseDownHandler); +// me.selection.getNative().removeAllRanges(); +// }) +// .on('afterhide', function () { +// $(document).unbind('keydown', _keyDownHandler); +// $(document).unbind('mousedown', _mouseDownHandler); +// var target = $imagescale.edui().getScaleTarget(); +// if (target.parentNode) { +// me.selection.getRange().selectNode(target).select(); +// } +// }) +// .on('mousedown', function (e) { +// me.selection.getNative().removeAllRanges(); +// var ele = e.target || e.srcElement; +// if (ele && ele.className.indexOf('edui-scale-hand') == -1) { +// timer = setTimeout(function() { +// $imagescale.edui().hide(); +// }, 200); +// } +// }) +// .on('mouseup', function (e) { +// var ele = e.target || e.srcElement; +// if (ele && ele.className.indexOf('edui-scale-hand') == -1) { +// clearTimeout(timer); +// } +// }); +// } +// $imagescale.edui().show($(img)); - } else { - if ($imagescale && $imagescale.css('display') != 'none') $imagescale.edui().hide(); +// } else { +// if ($imagescale && $imagescale.css('display') != 'none') $imagescale.edui().hide(); - } - }); +// } +// }); - me.addListener('click', function (type, e) { - if (e.target.tagName == 'IMG') { - var range = new dom.Range(me.document, me.body); - range.selectNode(e.target).select(); - } - }); +// me.addListener('click', function (type, e) { +// if (e.target.tagName == 'IMG') { +// var range = new dom.Range(me.document, me.body); +// range.selectNode(e.target).select(); +// } +// }); - } -}); \ No newline at end of file +// } +// }); \ No newline at end of file diff --git a/_src/adapter/popup.js b/_src/adapter/popup.js index 7ccc542f..6fa3d173 100644 --- a/_src/adapter/popup.js +++ b/_src/adapter/popup.js @@ -1,49 +1,49 @@ -UM.registerUI( 'emotion formula', function( name ){ - var me = this, - url = me.options.UMEDITOR_HOME_URL + 'dialogs/' +name+ '/'+name+'.js'; +// UM.registerUI( 'emotion formula', function( name ){ +// var me = this, +// url = me.options.UMEDITOR_HOME_URL + 'dialogs/' +name+ '/'+name+'.js'; - var $btn = $.eduibutton({ - icon: name, - title: this.getLang('labelMap')[name] || '' - }); +// var $btn = $.eduibutton({ +// icon: name, +// title: this.getLang('labelMap')[name] || '' +// }); - //加载模版数据 - utils.loadFile(document,{ - src: url, - tag: "script", - type: "text/javascript", - defer: "defer" - },function(){ - var opt = { - url : url - }; - //调整数据 - var data = UM.getWidgetData(name); +// //加载模版数据 +// utils.loadFile(document,{ +// src: url, +// tag: "script", +// type: "text/javascript", +// defer: "defer" +// },function(){ +// var opt = { +// url : url +// }; +// //调整数据 +// var data = UM.getWidgetData(name); - data.width && (opt.width = data.width); - data.height && (opt.height = data.height); +// data.width && (opt.width = data.width); +// data.height && (opt.height = data.height); - $.eduipopup(opt).css('zIndex',me.options.zIndex + 1) - .addClass('edui-popup-' + name) - .edui() - .on('beforeshow',function(){ - var $root = this.root(); - if(!$root.parent().length){ - me.$container.find('.edui-dialog-container').append($root); - } - UM.setWidgetBody(name,$root,me); - UM.setTopEditor(me); - }).attachTo($btn,{ - offsetTop:-5, - offsetLeft:10, - caretLeft:11, - caretTop:-8 - }); - me.addListener('selectionchange', function () { - var state = this.queryCommandState(name); - $btn.edui().disabled(state == -1).active(state == 1); - }); - }); - return $btn; +// $.eduipopup(opt).css('zIndex',me.options.zIndex + 1) +// .addClass('edui-popup-' + name) +// .edui() +// .on('beforeshow',function(){ +// var $root = this.root(); +// if(!$root.parent().length){ +// me.$container.find('.edui-dialog-container').append($root); +// } +// UM.setWidgetBody(name,$root,me); +// UM.setTopEditor(me); +// }).attachTo($btn,{ +// offsetTop:-5, +// offsetLeft:10, +// caretLeft:11, +// caretTop:-8 +// }); +// me.addListener('selectionchange', function () { +// var state = this.queryCommandState(name); +// $btn.edui().disabled(state == -1).active(state == 1); +// }); +// }); +// return $btn; -} ); \ No newline at end of file +// } ); \ No newline at end of file diff --git a/_src/plugins/formula.js b/_src/plugins/formula.js index b2af5354..9b21ff69 100755 --- a/_src/plugins/formula.js +++ b/_src/plugins/formula.js @@ -1,81 +1,81 @@ -/** - * 公式插件 - */ -UM.plugins['formula'] = function () { - var me = this; +// /** +// * 公式插件 +// */ +// UM.plugins['formula'] = function () { +// var me = this; - function getActiveIframe() { - return me.$body.find('iframe.edui-formula-active')[0] || null; - } +// function getActiveIframe() { +// return me.$body.find('iframe.edui-formula-active')[0] || null; +// } - function blurActiveIframe(){ - var iframe = getActiveIframe(); - iframe && iframe.contentWindow.formula.blur(); - } +// function blurActiveIframe(){ +// var iframe = getActiveIframe(); +// iframe && iframe.contentWindow.formula.blur(); +// } - me.addInputRule(function (root) { - $.each(root.getNodesByTagName('span'), function (i, node) { - if (node.hasClass('mathquill-embedded-latex')) { - var firstChild, latex = ''; - while(firstChild = node.firstChild()){ - latex += firstChild.data; - node.removeChild(firstChild); - } - node.tagName = 'iframe'; - node.setAttr({ - 'frameborder': '0', - 'src': me.getOpt('UMEDITOR_HOME_URL') + 'dialogs/formula/formula.html', - 'data-latex': utils.unhtml(latex) - }); - } - }); - }); - me.addOutputRule(function (root) { - $.each(root.getNodesByTagName('iframe'), function (i, node) { - if (node.hasClass('mathquill-embedded-latex')) { - node.tagName = 'span'; - node.appendChild(UM.uNode.createText(node.getAttr('data-latex'))); - node.setAttr({ - 'frameborder': '', - 'src': '', - 'data-latex': '' - }); - } - }); - }); - me.addListener('click', function(){ - blurActiveIframe(); - }); - me.addListener('afterexeccommand', function(type, cmd){ - if(cmd != 'formula') { - blurActiveIframe(); - } - }); +// me.addInputRule(function (root) { +// $.each(root.getNodesByTagName('span'), function (i, node) { +// if (node.hasClass('mathquill-embedded-latex')) { +// var firstChild, latex = ''; +// while(firstChild = node.firstChild()){ +// latex += firstChild.data; +// node.removeChild(firstChild); +// } +// node.tagName = 'iframe'; +// node.setAttr({ +// 'frameborder': '0', +// 'src': me.getOpt('UMEDITOR_HOME_URL') + 'dialogs/formula/formula.html', +// 'data-latex': utils.unhtml(latex) +// }); +// } +// }); +// }); +// me.addOutputRule(function (root) { +// $.each(root.getNodesByTagName('iframe'), function (i, node) { +// if (node.hasClass('mathquill-embedded-latex')) { +// node.tagName = 'span'; +// node.appendChild(UM.uNode.createText(node.getAttr('data-latex'))); +// node.setAttr({ +// 'frameborder': '', +// 'src': '', +// 'data-latex': '' +// }); +// } +// }); +// }); +// me.addListener('click', function(){ +// blurActiveIframe(); +// }); +// me.addListener('afterexeccommand', function(type, cmd){ +// if(cmd != 'formula') { +// blurActiveIframe(); +// } +// }); - me.commands['formula'] = { - execCommand: function (cmd, latex) { - var iframe = getActiveIframe(); - if (iframe) { - iframe.contentWindow.formula.insertLatex(latex); - } else { - me.execCommand('inserthtml', '' + latex + ''); - browser.ie && browser.ie9below && setTimeout(function(){ - var rng = me.selection.getRange(), - startContainer = rng.startContainer; - if(startContainer.nodeType == 1 && !startContainer.childNodes[rng.startOffset]){ - rng.insertNode(me.document.createTextNode(' ')); - rng.setCursor() - } - },100) - } - }, - queryCommandState: function (cmd) { - return 0; - }, - queryCommandValue: function (cmd) { - var iframe = getActiveIframe(); - return iframe && iframe.contentWindow.formula.getLatex(); - } - } +// me.commands['formula'] = { +// execCommand: function (cmd, latex) { +// var iframe = getActiveIframe(); +// if (iframe) { +// iframe.contentWindow.formula.insertLatex(latex); +// } else { +// me.execCommand('inserthtml', '' + latex + ''); +// browser.ie && browser.ie9below && setTimeout(function(){ +// var rng = me.selection.getRange(), +// startContainer = rng.startContainer; +// if(startContainer.nodeType == 1 && !startContainer.childNodes[rng.startOffset]){ +// rng.insertNode(me.document.createTextNode(' ')); +// rng.setCursor() +// } +// },100) +// } +// }, +// queryCommandState: function (cmd) { +// return 0; +// }, +// queryCommandValue: function (cmd) { +// var iframe = getActiveIframe(); +// return iframe && iframe.contentWindow.formula.getLatex(); +// } +// } -}; +// }; diff --git a/_src/ui/scale.js b/_src/ui/scale.js index 9dbda4c9..5c03b488 100644 --- a/_src/ui/scale.js +++ b/_src/ui/scale.js @@ -1,165 +1,165 @@ //scale 类 -UM.ui.define('scale', { - tpl: '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
', - defaultOpt: { - $doc: $(document), - $wrap: $(document) - }, - init: function (options) { - if(options.$doc) this.defaultOpt.$doc = options.$doc; - if(options.$wrap) this.defaultOpt.$wrap = options.$wrap; - this.root($($.parseTmpl(this.tpl, options))); - this.initStyle(); - this.startPos = this.prePos = {x: 0, y: 0}; - this.dragId = -1; - return this; - }, - initStyle: function () { - utils.cssRule('edui-style-scale', '.edui-scale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;}' + - '.edui-scale span{position:absolute;left:0;top:0;width:7px;height:7px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}' - + '.edui-scale .edui-scale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}' - + '.edui-scale .edui-scale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}' - + '.edui-scale .edui-scale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}' - + '.edui-scale .edui-scale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}' - + '.edui-scale .edui-scale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}' - + '.edui-scale .edui-scale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}' - + '.edui-scale .edui-scale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}' - + '.edui-scale .edui-scale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}'); - }, - _eventHandler: function (e) { - var me = this, - $doc = me.defaultOpt.$doc; - switch (e.type) { - case 'mousedown': - var hand = e.target || e.srcElement, hand; - if (hand.className.indexOf('edui-scale-hand') != -1) { - me.dragId = hand.className.slice(-1); - me.startPos.x = me.prePos.x = e.clientX; - me.startPos.y = me.prePos.y = e.clientY; - $doc.bind('mousemove', $.proxy(me._eventHandler, me)); - } - break; - case 'mousemove': - if (me.dragId != -1) { - me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); - me.prePos.x = e.clientX; - me.prePos.y = e.clientY; - me.updateTargetElement(); - } - break; - case 'mouseup': - if (me.dragId != -1) { - me.dragId = -1; - me.updateTargetElement(); - var $target = me.data('$scaleTarget'); - if ($target.parent()) me.attachTo(me.data('$scaleTarget')); - } - $doc.unbind('mousemove', $.proxy(me._eventHandler, me)); - break; - default: - break; - } - }, - updateTargetElement: function () { - var me = this, - $root = me.root(), - $target = me.data('$scaleTarget'); - $target.css({width: $root.width(), height: $root.height()}); - me.attachTo($target); - }, - updateContainerStyle: function (dir, offset) { - var me = this, - $dom = me.root(), - tmp, - rect = [ - //[left, top, width, height] - [0, 0, -1, -1], - [0, 0, 0, -1], - [0, 0, 1, -1], - [0, 0, -1, 0], - [0, 0, 1, 0], - [0, 0, -1, 1], - [0, 0, 0, 1], - [0, 0, 1, 1] - ]; +// UM.ui.define('scale', { +// tpl: '
' + +// '' + +// '' + +// '' + +// '' + +// '' + +// '' + +// '' + +// '' + +// '
', +// defaultOpt: { +// $doc: $(document), +// $wrap: $(document) +// }, +// init: function (options) { +// if(options.$doc) this.defaultOpt.$doc = options.$doc; +// if(options.$wrap) this.defaultOpt.$wrap = options.$wrap; +// this.root($($.parseTmpl(this.tpl, options))); +// this.initStyle(); +// this.startPos = this.prePos = {x: 0, y: 0}; +// this.dragId = -1; +// return this; +// }, +// initStyle: function () { +// utils.cssRule('edui-style-scale', '.edui-scale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;}' + +// '.edui-scale span{position:absolute;left:0;top:0;width:7px;height:7px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}' +// + '.edui-scale .edui-scale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}' +// + '.edui-scale .edui-scale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}' +// + '.edui-scale .edui-scale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}' +// + '.edui-scale .edui-scale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}' +// + '.edui-scale .edui-scale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}' +// + '.edui-scale .edui-scale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}' +// + '.edui-scale .edui-scale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}' +// + '.edui-scale .edui-scale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}'); +// }, +// _eventHandler: function (e) { +// var me = this, +// $doc = me.defaultOpt.$doc; +// switch (e.type) { +// case 'mousedown': +// var hand = e.target || e.srcElement, hand; +// if (hand.className.indexOf('edui-scale-hand') != -1) { +// me.dragId = hand.className.slice(-1); +// me.startPos.x = me.prePos.x = e.clientX; +// me.startPos.y = me.prePos.y = e.clientY; +// $doc.bind('mousemove', $.proxy(me._eventHandler, me)); +// } +// break; +// case 'mousemove': +// if (me.dragId != -1) { +// me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); +// me.prePos.x = e.clientX; +// me.prePos.y = e.clientY; +// me.updateTargetElement(); +// } +// break; +// case 'mouseup': +// if (me.dragId != -1) { +// me.dragId = -1; +// me.updateTargetElement(); +// var $target = me.data('$scaleTarget'); +// if ($target.parent()) me.attachTo(me.data('$scaleTarget')); +// } +// $doc.unbind('mousemove', $.proxy(me._eventHandler, me)); +// break; +// default: +// break; +// } +// }, +// updateTargetElement: function () { +// var me = this, +// $root = me.root(), +// $target = me.data('$scaleTarget'); +// $target.css({width: $root.width(), height: $root.height()}); +// me.attachTo($target); +// }, +// updateContainerStyle: function (dir, offset) { +// var me = this, +// $dom = me.root(), +// tmp, +// rect = [ +// //[left, top, width, height] +// [0, 0, -1, -1], +// [0, 0, 0, -1], +// [0, 0, 1, -1], +// [0, 0, -1, 0], +// [0, 0, 1, 0], +// [0, 0, -1, 1], +// [0, 0, 0, 1], +// [0, 0, 1, 1] +// ]; - if (rect[dir][0] != 0) { - tmp = parseInt($dom.offset().left) + offset.x; - $dom.css('left', me._validScaledProp('left', tmp)); - } - if (rect[dir][1] != 0) { - tmp = parseInt($dom.offset().top) + offset.y; - $dom.css('top', me._validScaledProp('top', tmp)); - } - if (rect[dir][2] != 0) { - tmp = $dom.width() + rect[dir][2] * offset.x; - $dom.css('width', me._validScaledProp('width', tmp)); - } - if (rect[dir][3] != 0) { - tmp = $dom.height() + rect[dir][3] * offset.y; - $dom.css('height', me._validScaledProp('height', tmp)); - } - }, - _validScaledProp: function (prop, value) { - var $ele = this.root(), - $wrap = this.defaultOpt.$doc, - calc = function(val, a, b){ - return (val + a) > b ? b - a : value; - }; +// if (rect[dir][0] != 0) { +// tmp = parseInt($dom.offset().left) + offset.x; +// $dom.css('left', me._validScaledProp('left', tmp)); +// } +// if (rect[dir][1] != 0) { +// tmp = parseInt($dom.offset().top) + offset.y; +// $dom.css('top', me._validScaledProp('top', tmp)); +// } +// if (rect[dir][2] != 0) { +// tmp = $dom.width() + rect[dir][2] * offset.x; +// $dom.css('width', me._validScaledProp('width', tmp)); +// } +// if (rect[dir][3] != 0) { +// tmp = $dom.height() + rect[dir][3] * offset.y; +// $dom.css('height', me._validScaledProp('height', tmp)); +// } +// }, +// _validScaledProp: function (prop, value) { +// var $ele = this.root(), +// $wrap = this.defaultOpt.$doc, +// calc = function(val, a, b){ +// return (val + a) > b ? b - a : value; +// }; - value = isNaN(value) ? 0 : value; - switch (prop) { - case 'left': - return value < 0 ? 0 : calc(value, $ele.width(), $wrap.width()); - case 'top': - return value < 0 ? 0 : calc(value, $ele.height(),$wrap.height()); - case 'width': - return value <= 0 ? 1 : calc(value, $ele.offset().left, $wrap.width()); - case 'height': - return value <= 0 ? 1 : calc(value, $ele.offset().top, $wrap.height()); - } - }, - show: function ($obj) { - var me = this; - if ($obj) me.attachTo($obj); - me.root().bind('mousedown', $.proxy(me._eventHandler, me)); - me.defaultOpt.$doc.bind('mouseup', $.proxy(me._eventHandler, me)); - me.root().show(); - me.trigger("aftershow"); - }, - hide: function () { - var me = this; - me.root().unbind('mousedown', $.proxy(me._eventHandler, me)); - me.defaultOpt.$doc.unbind('mouseup', $.proxy(me._eventHandler, me)); - me.root().hide(); - me.trigger('afterhide') - }, - attachTo: function ($obj) { - var me = this, - imgPos = $obj.offset(), - $root = me.root(), - $wrap = me.defaultOpt.$wrap, - posObj = $wrap.offset(); +// value = isNaN(value) ? 0 : value; +// switch (prop) { +// case 'left': +// return value < 0 ? 0 : calc(value, $ele.width(), $wrap.width()); +// case 'top': +// return value < 0 ? 0 : calc(value, $ele.height(),$wrap.height()); +// case 'width': +// return value <= 0 ? 1 : calc(value, $ele.offset().left, $wrap.width()); +// case 'height': +// return value <= 0 ? 1 : calc(value, $ele.offset().top, $wrap.height()); +// } +// }, +// show: function ($obj) { +// var me = this; +// if ($obj) me.attachTo($obj); +// me.root().bind('mousedown', $.proxy(me._eventHandler, me)); +// me.defaultOpt.$doc.bind('mouseup', $.proxy(me._eventHandler, me)); +// me.root().show(); +// me.trigger("aftershow"); +// }, +// hide: function () { +// var me = this; +// me.root().unbind('mousedown', $.proxy(me._eventHandler, me)); +// me.defaultOpt.$doc.unbind('mouseup', $.proxy(me._eventHandler, me)); +// me.root().hide(); +// me.trigger('afterhide') +// }, +// attachTo: function ($obj) { +// var me = this, +// imgPos = $obj.offset(), +// $root = me.root(), +// $wrap = me.defaultOpt.$wrap, +// posObj = $wrap.offset(); - me.data('$scaleTarget', $obj); - me.root().css({ - position: 'absolute', - width: $obj.width(), - height: $obj.height(), - left: imgPos.left - posObj.left - parseInt($wrap.css('border-left-width')) - parseInt($root.css('border-left-width')), - top: imgPos.top - posObj.top - parseInt($wrap.css('border-top-width')) - parseInt($root.css('border-top-width')) - }); - }, - getScaleTarget: function () { - return this.data('$scaleTarget')[0]; - } -}); \ No newline at end of file +// me.data('$scaleTarget', $obj); +// me.root().css({ +// position: 'absolute', +// width: $obj.width(), +// height: $obj.height(), +// left: imgPos.left - posObj.left - parseInt($wrap.css('border-left-width')) - parseInt($root.css('border-left-width')), +// top: imgPos.top - posObj.top - parseInt($wrap.css('border-top-width')) - parseInt($root.css('border-top-width')) +// }); +// }, +// getScaleTarget: function () { +// return this.data('$scaleTarget')[0]; +// } +// }); \ No newline at end of file From a10eee2cc83e2d9425568d6dbff93e7529f9be2b Mon Sep 17 00:00:00 2001 From: akai Date: Thu, 22 Oct 2015 11:08:17 +0800 Subject: [PATCH 3/5] insert video --- _src/adapter/adapter.js | 6 +- _src/plugins/video.js | 38 ++---- dialogs/video/video.js | 180 +++++----------------------- themes/default/_css/button.css | 1 - themes/default/_css/buttonicon.css | 156 +++++------------------- themes/default/_css/combobox.css | 12 +- themes/default/_css/editor.css | 8 +- themes/default/_css/separator.css | 13 +- themes/default/_css/splitbutton.css | 10 +- themes/default/_css/tab.css | 2 +- themes/default/images/arrow.png | Bin 0 -> 1048 bytes themes/default/images/icons.png | Bin 41374 -> 2991 bytes 12 files changed, 83 insertions(+), 343 deletions(-) create mode 100755 themes/default/images/arrow.png diff --git a/_src/adapter/adapter.js b/_src/adapter/adapter.js index f249ac1b..0209ab45 100644 --- a/_src/adapter/adapter.js +++ b/_src/adapter/adapter.js @@ -201,11 +201,7 @@ $.eduiseparator && btns.push($.eduiseparator()); }else{ var ui = _cacheUI[name]; - if(name=="fullscreen"){ - ui&&btns.unshift(ui); - }else{ - ui && btns.push(ui); - } + ui && btns.push(ui); } }); diff --git a/_src/plugins/video.js b/_src/plugins/video.js index 3d9c7dab..9d8cc52c 100755 --- a/_src/plugins/video.js +++ b/_src/plugins/video.js @@ -5,8 +5,7 @@ ///commandsTitle 插入视频 ///commandsDialog dialogs\video UM.plugins['video'] = function (){ - var me =this, - div; + var me =this; /** * 创建插入视频字符窜 @@ -17,38 +16,17 @@ UM.plugins['video'] = function (){ * @param toEmbed 是否以flash代替显示 * @param addParagraph 是否需要添加P 标签 */ - function creatInsertStr(url,width,height,id,align,toEmbed){ - return '' + function creatInsertStr(url, toEmbed){ + var src = me.options.UMEDITOR_HOME_URL + 'themes/default/images/spacer.gif'; + if (url) { + return ''; + } } - function switchImgAndEmbed(root,img2embed){ - utils.each(root.getNodesByTagName(img2embed ? 'img' : 'embed'),function(node){ - if(node.getAttr('class') == 'edui-faked-video'){ - - var html = creatInsertStr( img2embed ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',img2embed); - node.parentNode.replaceChild(UM.uNode.createElement(html),node) - } - }) - } - - me.addOutputRule(function(root){ - switchImgAndEmbed(root,true) - }); - me.addInputRule(function(root){ - switchImgAndEmbed(root) - }); - me.commands["insertvideo"] = { - execCommand: function (cmd, videoObjs){ - videoObjs = utils.isArray(videoObjs)?videoObjs:[videoObjs]; - var html = [],id = 'tmpVedio'; - for(var i=0,vi,len = videoObjs.length;i" + "
" + "
" + - "
" + - "
" + - "<%=lang_video_size%>" + - "" + - "" + - "" + - "
" + - "
" + - "
" + - "<%=lang_alignment%>" + - "
" + - "
" + - "
" + "" + "" + "" + @@ -49,15 +37,24 @@ initEvent:function(){ var me = this, - url = $("#eduiVideoUrl", me.$widget)[0]; + url = $("#eduiVideoUrl", me.$widget)[0], + timer; + + function createPreview(url) { + clearTimeout(timer); + + timer = setTimeout(function() { + me.createPreviewVideo(url); + }, 200); + } if( 'oninput' in url ) { url.oninput = function(){ - me.createPreviewVideo( this.value ); + createPreview(this.value); }; } else { url.onpropertychange = function () { - me.createPreviewVideo( this.value ); + createPreview( this.value ); } } @@ -68,17 +65,11 @@ img = me.editor.selection.getRange().getClosedNode(), url; - me.createAlignButton( ["eduiVideoFloat"] ); - //编辑视频时初始化相关信息 if(img && img.className == "edui-faked-video"){ $("#eduiVideoUrl", me.$widget)[0].value = url = img.getAttribute("_url"); - $("#eduiVideoWidth", me.$widget)[0].value = img.width; - $("#eduiVideoHeight", me.$widget)[0].value = img.height; - var align = domUtils.getComputedStyle(img,"float"), - parentAlign = domUtils.getComputedStyle(img.parentNode,"text-align"); - me.updateAlignButton(parentAlign==="center"?"center":align); } + me.createPreviewVideo(url); }, @@ -96,11 +87,9 @@ $preview.html(lang.loading); me.convertUrl(url, function(data) { - $preview[0].innerHTML = ''; + _swfUrl = data.swf_url; + + $preview[0].innerHTML = ''; }, function() { $preview.html(lang.urlError); }); @@ -111,20 +100,23 @@ insertSingle: function(){ var me = this, - width = $("#eduiVideoWidth", me.$widget)[0], - height = $("#eduiVideoHeight", me.$widget)[0], - url=$('#eduiVideoUrl', me.$widget)[0].value, - align = this.findFocus("eduiVideoFloat","name"); + url=$('#eduiVideoUrl', me.$widget)[0].value; if(!url) return false; - if ( !me.checkNum( [width, height] ) ) return false; - this.editor.execCommand('insertvideo', { - url: me.convert_url(url), - width: width.value, - height: height.value, - align: align - }); + if (_swfUrl) { + me.editor.execCommand('insertvideo', _swfUrl); + } else { + me.convertUrl(url, function(data) { + if (data.swf_url) { + me.editor.execCommand('insertvideo', data.swf_url); + } else { + console.error('Insert video error:', url); + } + }, function() { + console.error('Insert video error:', url); + }); + } }, /** * URL转换 @@ -143,116 +135,6 @@ } }) }, - /** - * 检测传入的所有input框中输入的长宽是否是正数 - */ - checkNum: function checkNum( nodes ) { - - var me = this; - - for ( var i = 0, ci; ci = nodes[i++]; ) { - var value = ci.value; - if ( !me.isNumber( value ) && value) { - alert( me.lang.numError ); - ci.value = ""; - ci.focus(); - return false; - } - } - return true; - }, - /** - * 数字判断 - * @param value - */ - isNumber: function( value ) { - return /(0|^[1-9]\d*$)/.test( value ); - }, - updateAlignButton: function( align ) { - var aligns = $( "#eduiVideoFloat", this.$widget )[0].children; - - for ( var i = 0, ci; ci = aligns[i++]; ) { - if ( ci.getAttribute( "name" ) == align ) { - if ( ci.className !="edui-video-focus" ) { - ci.className = "edui-video-focus"; - } - } else { - if ( ci.className =="edui-video-focus" ) { - ci.className = ""; - } - } - } - - }, - /** - * 创建图片浮动选择按钮 - * @param ids - */ - createAlignButton: function( ids ) { - var lang = this.lang, - vidoe_home = UMEDITOR_CONFIG.UMEDITOR_HOME_URL + 'dialogs/video/'; - - for ( var i = 0, ci; ci = ids[i++]; ) { - var floatContainer = $( "#" + ci, this.$widget ) [0], - nameMaps = {"none":lang['default'], "left":lang.floatLeft, "right":lang.floatRight}; - for ( var j in nameMaps ) { - var div = document.createElement( "div" ); - div.setAttribute( "name", j ); - if ( j == "none" ) div.className="edui-video-focus"; - div.style.cssText = "background:url("+ vidoe_home +"images/" + j + "_focus.jpg);"; - div.setAttribute( "title", nameMaps[j] ); - floatContainer.appendChild( div ); - } - this.switchSelect( ci ); - } - }, - /** - * 选择切换 - */ - switchSelect: function( selectParentId ) { - var selects = $( "#" + selectParentId, this.$widget )[0].children; - for ( var i = 0, ci; ci = selects[i++]; ) { - $(ci).on("click", function () { - for ( var j = 0, cj; cj = selects[j++]; ) { - cj.className = ""; - cj.removeAttribute && cj.removeAttribute( "class" ); - } - this.className = "edui-video-focus"; - } ) - } - }, - /** - * 找到id下具有focus类的节点并返回该节点下的某个属性 - * @param id - * @param returnProperty - */ - findFocus: function( id, returnProperty ) { - var tabs = $( "#" + id , this.$widget)[0].children, - property; - for ( var i = 0, ci; ci = tabs[i++]; ) { - if ( ci.className=="edui-video-focus" ) { - property = ci.getAttribute( returnProperty ); - break; - } - } - return property; - }, - /** - * 末尾字符检测 - */ - endWith: function(str,endStrArr){ - for(var i=0,len = endStrArr.length;i+vC;=eUW) zZ?$Q=wqm#>5bexIOoNC;bKLww8rkkTroh2nKQ#I8@ArA&dnUi8)?h6vAX+8_-!!o)~Tet>JReReGIVBkX6P5zivyVd|@5@Vo>s^CJD z19@FUD#{hmO&~+0NKlcGA|Tm-x`9+Me0Y{E_Buw>S{mkJmdW=hjSNZZ_xoaB5lP&Y zkgn?zlqFdfn1_&Th15=kFqs)4SU7QGKcYSfL565MWRsdaV|sjrAga|)fWu^1C{{8l zwId0MPzr+VUIXuhHt}B?r+O!?tq4m^oRH1fW&P;PjDlJ1&Q6p$GB(D&*k?_#H!R|A z1~{Zu%jDS~(eph+)4iMwT}LQD>Nl%>(TL*Egbt#u(uSG01S$3_@@wXume3MkAzNMSB0FM!-B0ks$eTP zuOLrHPpSrV)&&IfG Vuu@L&L0p-Mh^f0 literal 0 HcmV?d00001 diff --git a/themes/default/images/icons.png b/themes/default/images/icons.png index de9a1bb2bd6b0da151b87771792c79b2c8a69188..7ab39602fba2b656c61f76f9ed0d819b38dafd8e 100755 GIT binary patch literal 2991 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 Date: Tue, 12 Jan 2016 11:24:51 +0800 Subject: [PATCH 4/5] _href.indexOf('://') --- _src/plugins/link.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_src/plugins/link.js b/_src/plugins/link.js index e935352e..610f0263 100755 --- a/_src/plugins/link.js +++ b/_src/plugins/link.js @@ -58,7 +58,8 @@ UM.plugins['link'] = function(){ this.addOutputRule(function(root){ $.each(root.getNodesByTagName('a'),function(i,a){ var _href = utils.html(a.getAttr('_href')); - if(!/^(ftp|https?|\/|file)/.test(_href)){ + + if (_href.indexOf('://') === -1) { _href = 'http://' + _href; } a.setAttr('href', _href); From 64d8115d51401ebeb76e5aa0fda2f949ba4e4c03 Mon Sep 17 00:00:00 2001 From: akai Date: Tue, 12 Jan 2016 11:47:03 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=99=90=E5=88=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E7=89=87=E6=98=BE=E7=A4=BA=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _src/plugins/image.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_src/plugins/image.js b/_src/plugins/image.js index 5b53ca0b..33c91b98 100755 --- a/_src/plugins/image.js +++ b/_src/plugins/image.js @@ -19,7 +19,8 @@ UM.commands['insertimage'] = { var html = [], str = '', ci; ci = opt[0]; if (opt.length == 1) { - str = '