link.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. (function(){
  2. var utils = UM.utils;
  3. function hrefStartWith(href, arr) {
  4. href = href.replace(/^\s+|\s+$/g, '');
  5. for (var i = 0, ai; ai = arr[i++];) {
  6. if (href.indexOf(ai) == 0) {
  7. return true;
  8. }
  9. }
  10. return false;
  11. }
  12. UM.registerWidget('link', {
  13. tpl: "<style type=\"text/css\">" +
  14. ".edui-dialog-link .edui-link-table{font-size: 12px;margin: 10px;line-height: 30px}" +
  15. ".edui-dialog-link .edui-link-txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}" +
  16. "</style>" +
  17. "<table class=\"edui-link-table\">" +
  18. "<tr>" +
  19. "<td><label for=\"href\"><%=lang_input_url%></label></td>" +
  20. "<td><input class=\"edui-link-txt\" id=\"edui-link-Jhref\" type=\"text\" /></td>" +
  21. "</tr>" +
  22. "<tr>" +
  23. "<td><label for=\"title\"><%=lang_input_title%></label></td>" +
  24. "<td><input class=\"edui-link-txt\" id=\"edui-link-Jtitle\" type=\"text\"/></td>" +
  25. "</tr>" +
  26. "<tr>" +
  27. "<td colspan=\"2\">" +
  28. "<label for=\"target\"><%=lang_input_target%></label>" +
  29. "<input id=\"edui-link-Jtarget\" type=\"checkbox\" style=display:block>" +
  30. "</td>" +
  31. "</tr>" +
  32. // "<tr>" +
  33. // "<td colspan=\"2\" id=\"edui-link-Jmsg\"></td>" +
  34. // "</tr>" +
  35. "</table>",
  36. initContent: function (editor) {
  37. var lang = editor.getLang('link');
  38. if (lang) {
  39. var html = $.parseTmpl(this.tpl, lang.static);
  40. }
  41. this.root().html(html);
  42. },
  43. initEvent: function (editor, $w) {
  44. var link = editor.queryCommandValue('link');
  45. if(link){
  46. $('#edui-link-Jhref',$w).val(utils.html($(link).attr('href')));
  47. $('#edui-link-Jtitle',$w).val($(link).attr('title'));
  48. $(link).attr('target') == '_blank' && $('#edui-link-Jtarget').attr('checked',true)
  49. }
  50. $('#edui-link-Jhref',$w).focus();
  51. },
  52. buttons: {
  53. 'ok': {
  54. exec: function (editor, $w) {
  55. console.log($("#edui-link-Jtarget:checked").length);
  56. var href = $('#edui-link-Jhref').val().replace(/^\s+|\s+$/g, '');
  57. if (href) {
  58. editor.execCommand('link', {
  59. 'href': href,
  60. 'target': $("#edui-link-Jtarget:checked").length ? "_blank" : '_self',
  61. 'title': $("#edui-link-Jtitle").val().replace(/^\s+|\s+$/g, ''),
  62. '_href': href
  63. });
  64. }
  65. }
  66. },
  67. 'cancel':{}
  68. },
  69. width: 400
  70. })
  71. })();
  72. (function ($) {
  73. //对jquery的扩展
  74. $.parseTmpl = function parse(str, data) {
  75. 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) {
  76. return "',obj." + code.replace(/\\'/g, "'") + ",'";
  77. }).replace(/<%([\s\S]+?)%>/g,function (match, code) {
  78. return "');" + code.replace(/\\'/g, "'").replace(/[\r\n\t]/g, ' ') + "__p.push('";
  79. }).replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\t/g, '\\t') + "');}return __p.join('');";
  80. var func = new Function('obj', tmpl);
  81. return data ? func(data) : func;
  82. };
  83. $.extend2 = function (t, s) {
  84. var a = arguments,
  85. notCover = $.type(a[a.length - 1]) == 'boolean' ? a[a.length - 1] : false,
  86. len = $.type(a[a.length - 1]) == 'boolean' ? a.length - 1 : a.length;
  87. for (var i = 1; i < len; i++) {
  88. var x = a[i];
  89. for (var k in x) {
  90. if (!notCover || !t.hasOwnProperty(k)) {
  91. t[k] = x[k];
  92. }
  93. }
  94. }
  95. return t;
  96. };
  97. $.IE6 = !!window.ActiveXObject && parseFloat(navigator.userAgent.match(/msie (\d+)/i)[1]) == 6;
  98. //所有ui的基类
  99. var _eventHandler = [];
  100. var _widget = function () {
  101. };
  102. var _prefix = 'edui';
  103. _widget.prototype = {
  104. on: function (ev, cb) {
  105. this.root().on(ev, $.proxy(cb, this));
  106. return this;
  107. },
  108. off: function (ev, cb) {
  109. this.root().off(ev, $.proxy(cb, this));
  110. return this;
  111. },
  112. trigger: function (ev, data) {
  113. return this.root().trigger(ev, data) === false ? false : this;
  114. },
  115. root: function ($el) {
  116. return this._$el || (this._$el = $el);
  117. },
  118. destroy: function () {
  119. },
  120. data: function (key, val) {
  121. if (val !== undefined) {
  122. this.root().data(_prefix + key, val);
  123. return this;
  124. } else {
  125. return this.root().data(_prefix + key)
  126. }
  127. },
  128. register: function (eventName, $el, fn) {
  129. _eventHandler.push({
  130. 'evtname': eventName,
  131. '$els': $.isArray($el) ? $el : [$el],
  132. handler: $.proxy(fn, $el)
  133. })
  134. }
  135. };
  136. //从jq实例上拿到绑定的widget实例
  137. $.fn.edui = function (obj) {
  138. return obj ? this.data('eduiwidget', obj) : this.data('eduiwidget');
  139. };
  140. function _createClass(ClassObj, properties, supperClass) {
  141. ClassObj.prototype = $.extend2(
  142. $.extend({}, properties),
  143. (UM.ui[supperClass] || _widget).prototype,
  144. true
  145. );
  146. ClassObj.prototype.supper = (UM.ui[supperClass] || _widget).prototype;
  147. //父class的defaultOpt 合并
  148. if( UM.ui[supperClass] && UM.ui[supperClass].prototype.defaultOpt ) {
  149. var parentDefaultOptions = UM.ui[supperClass].prototype.defaultOpt,
  150. subDefaultOptions = ClassObj.prototype.defaultOpt;
  151. ClassObj.prototype.defaultOpt = $.extend( {}, parentDefaultOptions, subDefaultOptions || {} );
  152. }
  153. return ClassObj
  154. }
  155. var _guid = 1;
  156. function mergeToJQ(ClassObj, className) {
  157. $[_prefix + className] = ClassObj;
  158. $.fn[_prefix + className] = function (opt) {
  159. var result, args = Array.prototype.slice.call(arguments, 1);
  160. this.each(function (i, el) {
  161. var $this = $(el);
  162. var obj = $this.edui();
  163. if (!obj) {
  164. ClassObj(!opt || !$.isPlainObject(opt) ? {} : opt, $this);
  165. $this.edui(obj)
  166. }
  167. if ($.type(opt) == 'string') {
  168. if (opt == 'this') {
  169. result = obj;
  170. } else {
  171. result = obj[opt].apply(obj, args);
  172. if (result !== obj && result !== undefined) {
  173. return false;
  174. }
  175. result = null;
  176. }
  177. }
  178. });
  179. return result !== null ? result : this;
  180. }
  181. }
  182. UM.ui = {
  183. define: function (className, properties, supperClass) {
  184. var ClassObj = UM.ui[className] = _createClass(function (options, $el) {
  185. var _obj = function () {
  186. };
  187. $.extend(_obj.prototype, ClassObj.prototype, {
  188. guid: className + _guid++,
  189. widgetName: className
  190. }
  191. );
  192. var obj = new _obj;
  193. if ($.type(options) == 'string') {
  194. obj.init && obj.init({});
  195. obj.root().edui(obj);
  196. obj.root().find('a').click(function (evt) {
  197. evt.preventDefault()
  198. });
  199. return obj.root()[_prefix + className].apply(obj.root(), arguments)
  200. } else {
  201. $el && obj.root($el);
  202. obj.init && obj.init(!options || $.isPlainObject(options) ? $.extend2(options || {}, obj.defaultOpt || {}, true) : options);
  203. try{
  204. obj.root().find('a').click(function (evt) {
  205. evt.preventDefault()
  206. });
  207. }catch(e){
  208. }
  209. return obj.root().edui(obj);
  210. }
  211. },properties, supperClass);
  212. mergeToJQ(ClassObj, className);
  213. }
  214. };
  215. $(function () {
  216. $(document).on('click mouseup mousedown dblclick mouseover', function (evt) {
  217. $.each(_eventHandler, function (i, obj) {
  218. if (obj.evtname == evt.type) {
  219. $.each(obj.$els, function (i, $el) {
  220. if ($el[0] !== evt.target && !$.contains($el[0], evt.target)) {
  221. obj.handler(evt);
  222. }
  223. })
  224. }
  225. })
  226. })
  227. })
  228. })(jQuery);