(function(){ var utils = UM.utils; function hrefStartWith(href, arr) { href = href.replace(/^\s+|\s+$/g, ''); for (var i = 0, ai; ai = arr[i++];) { if (href.indexOf(ai) == 0) { return true; } } return false; } UM.registerWidget('link', { tpl: "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + // "" + // "" + // "" + "", initContent: function (editor) { var lang = editor.getLang('link'); if (lang) { var html = $.parseTmpl(this.tpl, lang.static); } this.root().html(html); }, initEvent: function (editor, $w) { var link = editor.queryCommandValue('link'); if(link){ $('#edui-link-Jhref',$w).val(utils.html($(link).attr('href'))); $('#edui-link-Jtitle',$w).val($(link).attr('title')); $(link).attr('target') == '_blank' && $('#edui-link-Jtarget').attr('checked',true) } $('#edui-link-Jhref',$w).focus(); }, buttons: { 'ok': { exec: function (editor, $w) { console.log($("#edui-link-Jtarget:checked").length); var href = $('#edui-link-Jhref').val().replace(/^\s+|\s+$/g, ''); if (href) { editor.execCommand('link', { 'href': href, 'target': $("#edui-link-Jtarget:checked").length ? "_blank" : '_self', 'title': $("#edui-link-Jtitle").val().replace(/^\s+|\s+$/g, ''), '_href': href }); } } }, 'cancel':{} }, width: 400 }) })(); (function ($) { //对jquery的扩展 $.parseTmpl = function parse(str, data) { var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + 'with(obj||{}){__p.push(\'' + str.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/<%=([\s\S]+?)%>/g,function (match, code) { return "',obj." + code.replace(/\\'/g, "'") + ",'"; }).replace(/<%([\s\S]+?)%>/g,function (match, code) { return "');" + code.replace(/\\'/g, "'").replace(/[\r\n\t]/g, ' ') + "__p.push('"; }).replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\t/g, '\\t') + "');}return __p.join('');"; var func = new Function('obj', tmpl); return data ? func(data) : func; }; $.extend2 = function (t, s) { var a = arguments, notCover = $.type(a[a.length - 1]) == 'boolean' ? a[a.length - 1] : false, len = $.type(a[a.length - 1]) == 'boolean' ? a.length - 1 : a.length; for (var i = 1; i < len; i++) { var x = a[i]; for (var k in x) { if (!notCover || !t.hasOwnProperty(k)) { t[k] = x[k]; } } } return t; }; $.IE6 = !!window.ActiveXObject && parseFloat(navigator.userAgent.match(/msie (\d+)/i)[1]) == 6; //所有ui的基类 var _eventHandler = []; var _widget = function () { }; var _prefix = 'edui'; _widget.prototype = { on: function (ev, cb) { this.root().on(ev, $.proxy(cb, this)); return this; }, off: function (ev, cb) { this.root().off(ev, $.proxy(cb, this)); return this; }, trigger: function (ev, data) { return this.root().trigger(ev, data) === false ? false : this; }, root: function ($el) { return this._$el || (this._$el = $el); }, destroy: function () { }, data: function (key, val) { if (val !== undefined) { this.root().data(_prefix + key, val); return this; } else { return this.root().data(_prefix + key) } }, register: function (eventName, $el, fn) { _eventHandler.push({ 'evtname': eventName, '$els': $.isArray($el) ? $el : [$el], handler: $.proxy(fn, $el) }) } }; //从jq实例上拿到绑定的widget实例 $.fn.edui = function (obj) { return obj ? this.data('eduiwidget', obj) : this.data('eduiwidget'); }; function _createClass(ClassObj, properties, supperClass) { ClassObj.prototype = $.extend2( $.extend({}, properties), (UM.ui[supperClass] || _widget).prototype, true ); ClassObj.prototype.supper = (UM.ui[supperClass] || _widget).prototype; //父class的defaultOpt 合并 if( UM.ui[supperClass] && UM.ui[supperClass].prototype.defaultOpt ) { var parentDefaultOptions = UM.ui[supperClass].prototype.defaultOpt, subDefaultOptions = ClassObj.prototype.defaultOpt; ClassObj.prototype.defaultOpt = $.extend( {}, parentDefaultOptions, subDefaultOptions || {} ); } return ClassObj } var _guid = 1; function mergeToJQ(ClassObj, className) { $[_prefix + className] = ClassObj; $.fn[_prefix + className] = function (opt) { var result, args = Array.prototype.slice.call(arguments, 1); this.each(function (i, el) { var $this = $(el); var obj = $this.edui(); if (!obj) { ClassObj(!opt || !$.isPlainObject(opt) ? {} : opt, $this); $this.edui(obj) } if ($.type(opt) == 'string') { if (opt == 'this') { result = obj; } else { result = obj[opt].apply(obj, args); if (result !== obj && result !== undefined) { return false; } result = null; } } }); return result !== null ? result : this; } } UM.ui = { define: function (className, properties, supperClass) { var ClassObj = UM.ui[className] = _createClass(function (options, $el) { var _obj = function () { }; $.extend(_obj.prototype, ClassObj.prototype, { guid: className + _guid++, widgetName: className } ); var obj = new _obj; if ($.type(options) == 'string') { obj.init && obj.init({}); obj.root().edui(obj); obj.root().find('a').click(function (evt) { evt.preventDefault() }); return obj.root()[_prefix + className].apply(obj.root(), arguments) } else { $el && obj.root($el); obj.init && obj.init(!options || $.isPlainObject(options) ? $.extend2(options || {}, obj.defaultOpt || {}, true) : options); try{ obj.root().find('a').click(function (evt) { evt.preventDefault() }); }catch(e){ } return obj.root().edui(obj); } },properties, supperClass); mergeToJQ(ClassObj, className); } }; $(function () { $(document).on('click mouseup mousedown dblclick mouseover', function (evt) { $.each(_eventHandler, function (i, obj) { if (obj.evtname == evt.type) { $.each(obj.$els, function (i, $el) { if ($el[0] !== evt.target && !$.contains($el[0], evt.target)) { obj.handler(evt); } }) } }) }) }) })(jQuery);