ace-elements.min.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. if (! ("ace" in window)) {
  2. window.ace = {}
  3. }
  4. jQuery(function() {
  5. window.ace.click_event = $.fn.tap ? "tap": "click"
  6. }); (function(e, c) {
  7. var d = "multiple" in document.createElement("INPUT");
  8. var j = "FileList" in window;
  9. var b = "FileReader" in window;
  10. var f = function(l, m) {
  11. var k = this;
  12. this.settings = e.extend({},
  13. e.fn.ace_file_input.defaults, m);
  14. this.$element = e(l);
  15. this.element = l;
  16. this.disabled = false;
  17. this.can_reset = true;
  18. this.$element.on("change.ace_inner_call",
  19. function(o, n) {
  20. if (n === true) {
  21. return
  22. }
  23. return a.call(k)
  24. });
  25. this.$element.wrap('<div class="ace-file-input" />');
  26. this.apply_settings()
  27. };
  28. f.error = {
  29. FILE_LOAD_FAILED: 1,
  30. IMAGE_LOAD_FAILED: 2,
  31. THUMBNAIL_FAILED: 3
  32. };
  33. f.prototype.apply_settings = function() {
  34. var l = this;
  35. var k = !!this.settings.icon_remove;
  36. this.multi = this.$element.attr("multiple") && d;
  37. this.well_style = this.settings.style == "well";
  38. if (this.well_style) {
  39. this.$element.parent().addClass("ace-file-multiple")
  40. } else {
  41. this.$element.parent().removeClass("ace-file-multiple")
  42. }
  43. this.$element.parent().find(":not(input[type=file])").remove();
  44. this.$element.after('<label class="file-label" data-title="' + this.settings.btn_choose + '"><span class="file-name" data-title="' + this.settings.no_file + '">' + (this.settings.no_icon ? '<i class="' + this.settings.no_icon + '"></i>': "") + "</span></label>" + (k ? '<a class="remove" href="#"><i class="' + this.settings.icon_remove + '"></i></a>': ""));
  45. this.$label = this.$element.next();
  46. this.$label.on("click",
  47. function() {
  48. if (!this.disabled && !l.element.disabled && !l.$element.attr("readonly")) {
  49. l.$element.click()
  50. }
  51. });
  52. if (k) {
  53. this.$label.next("a").on(ace.click_event,
  54. function() {
  55. if (!l.can_reset) {
  56. return false
  57. }
  58. var m = true;
  59. if (l.settings.before_remove) {
  60. m = l.settings.before_remove.call(l.element)
  61. }
  62. if (!m) {
  63. return false
  64. }
  65. return l.reset_input()
  66. })
  67. }
  68. if (this.settings.droppable && j) {
  69. g.call(this)
  70. }
  71. };
  72. f.prototype.show_file_list = function(k) {
  73. var n = typeof k === "undefined" ? this.$element.data("ace_input_files") : k;
  74. if (!n || n.length == 0) {
  75. return
  76. }
  77. if (this.well_style) {
  78. this.$label.find(".file-name").remove();
  79. if (!this.settings.btn_change) {
  80. this.$label.addClass("hide-placeholder")
  81. }
  82. }
  83. this.$label.attr("data-title", this.settings.btn_change).addClass("selected");
  84. for (var p = 0; p < n.length; p++) {
  85. var l = typeof n[p] === "string" ? n[p] : e.trim(n[p].name);
  86. var q = l.lastIndexOf("\\") + 1;
  87. if (q == 0) {
  88. q = l.lastIndexOf("/") + 1
  89. }
  90. l = l.substr(q);
  91. var m = "icon-file";
  92. if ((/\.(jpe?g|png|gif|svg|bmp|tiff?)$/i).test(l)) {
  93. m = "icon-picture"
  94. } else {
  95. if ((/\.(mpe?g|flv|mov|avi|swf|mp4|mkv|webm|wmv|3gp)$/i).test(l)) {
  96. m = "icon-film"
  97. } else {
  98. if ((/\.(mp3|ogg|wav|wma|amr|aac)$/i).test(l)) {
  99. m = "icon-music"
  100. }
  101. }
  102. }
  103. if (!this.well_style) {
  104. this.$label.find(".file-name").attr({
  105. "data-title": l
  106. }).find('[class*="icon-"]').attr("class", m)
  107. } else {
  108. this.$label.append('<span class="file-name" data-title="' + l + '"><i class="' + m + '"></i></span>');
  109. var r = e.trim(n[p].type);
  110. var o = b && this.settings.thumbnail && ((r.length > 0 && r.match("image")) || (r.length == 0 && m == "icon-picture"));
  111. if (o) {
  112. var s = this;
  113. e.when(i.call(this, n[p])).fail(function(t) {
  114. if (s.settings.preview_error) {
  115. s.settings.preview_error.call(s, l, t.code)
  116. }
  117. })
  118. }
  119. }
  120. }
  121. return true
  122. };
  123. f.prototype.reset_input = function() {
  124. this.$label.attr({
  125. "data-title": this.settings.btn_choose,
  126. "class": "file-label"
  127. }).find(".file-name:first").attr({
  128. "data-title": this.settings.no_file,
  129. "class": "file-name"
  130. }).find('[class*="icon-"]').attr("class", this.settings.no_icon).prev("img").remove();
  131. if (!this.settings.no_icon) {
  132. this.$label.find('[class*="icon-"]').remove()
  133. }
  134. this.$label.find(".file-name").not(":first").remove();
  135. if (this.$element.data("ace_input_files")) {
  136. this.$element.removeData("ace_input_files");
  137. this.$element.removeData("ace_input_method")
  138. }
  139. this.reset_input_field();
  140. return false
  141. };
  142. f.prototype.reset_input_field = function() {
  143. this.$element.wrap("<form>").closest("form").get(0).reset();
  144. this.$element.unwrap()
  145. };
  146. f.prototype.enable_reset = function(k) {
  147. this.can_reset = k
  148. };
  149. f.prototype.disable = function() {
  150. this.disabled = true;
  151. this.$element.attr("disabled", "disabled").addClass("disabled")
  152. };
  153. f.prototype.enable = function() {
  154. this.disabled = false;
  155. this.$element.removeAttr("disabled").removeClass("disabled")
  156. };
  157. f.prototype.files = function() {
  158. return e(this).data("ace_input_files") || null
  159. };
  160. f.prototype.method = function() {
  161. return e(this).data("ace_input_method") || ""
  162. };
  163. f.prototype.update_settings = function(k) {
  164. this.settings = e.extend({},
  165. this.settings, k);
  166. this.apply_settings()
  167. };
  168. var g = function() {
  169. var l = this;
  170. var k = this.element.parentNode;
  171. e(k).on("dragenter",
  172. function(m) {
  173. m.preventDefault();
  174. m.stopPropagation()
  175. }).on("dragover",
  176. function(m) {
  177. m.preventDefault();
  178. m.stopPropagation()
  179. }).on("drop",
  180. function(q) {
  181. q.preventDefault();
  182. q.stopPropagation();
  183. var p = q.originalEvent.dataTransfer;
  184. var o = p.files;
  185. if (!l.multi && o.length > 1) {
  186. var n = [];
  187. n.push(o[0]);
  188. o = n
  189. }
  190. var m = true;
  191. if (l.settings.before_change) {
  192. m = l.settings.before_change.call(l.element, o, true)
  193. }
  194. if (!m || m.length == 0) {
  195. return false
  196. }
  197. if (m instanceof Array || (j && m instanceof FileList)) {
  198. o = m
  199. }
  200. l.$element.data("ace_input_files", o);
  201. l.$element.data("ace_input_method", "drop");
  202. l.show_file_list(o);
  203. l.$element.triggerHandler("change", [true]);
  204. return true
  205. })
  206. };
  207. var a = function() {
  208. var l = true;
  209. if (this.settings.before_change) {
  210. l = this.settings.before_change.call(this.element, this.element.files || [this.element.value], false)
  211. }
  212. if (!l || l.length == 0) {
  213. if (!this.$element.data("ace_input_files")) {
  214. this.reset_input_field()
  215. }
  216. return false
  217. }
  218. var m = !j ? null: ((l instanceof Array || l instanceof FileList) ? l: this.element.files);
  219. this.$element.data("ace_input_method", "select");
  220. if (m && m.length > 0) {
  221. this.$element.data("ace_input_files", m)
  222. } else {
  223. var k = e.trim(this.element.value);
  224. if (k && k.length > 0) {
  225. m = [];
  226. m.push(k);
  227. this.$element.data("ace_input_files", m)
  228. }
  229. }
  230. if (!m || m.length == 0) {
  231. return false
  232. }
  233. this.show_file_list(m);
  234. return true
  235. };
  236. var i = function(o) {
  237. var n = this;
  238. var l = n.$label.find(".file-name:last");
  239. var m = new e.Deferred;
  240. var k = new FileReader();
  241. k.onload = function(q) {
  242. l.prepend("<img class='middle' style='display:none;' />");
  243. var p = l.find("img:last").get(0);
  244. e(p).one("load",
  245. function() {
  246. var t = 50;
  247. if (n.settings.thumbnail == "large") {
  248. t = 150
  249. } else {
  250. if (n.settings.thumbnail == "fit") {
  251. t = l.width()
  252. }
  253. }
  254. l.addClass(t > 50 ? "large": "");
  255. var s = h(p, t, o.type);
  256. if (s == null) {
  257. e(this).remove();
  258. m.reject({
  259. code: f.error.THUMBNAIL_FAILED
  260. });
  261. return
  262. }
  263. var r = s.w,
  264. u = s.h;
  265. if (n.settings.thumbnail == "small") {
  266. r = u = t
  267. }
  268. e(p).css({
  269. "background-image": "url(" + s.src + ")",
  270. width: r,
  271. height: u
  272. }).data("thumb", s.src).attr({
  273. src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
  274. }).show();
  275. m.resolve()
  276. }).one("error",
  277. function() {
  278. l.find("img").remove();
  279. m.reject({
  280. code: f.error.IMAGE_LOAD_FAILED
  281. })
  282. });
  283. p.src = q.target.result
  284. };
  285. k.onerror = function(p) {
  286. m.reject({
  287. code: f.error.FILE_LOAD_FAILED
  288. })
  289. };
  290. k.readAsDataURL(o);
  291. return m.promise()
  292. };
  293. var h = function(n, s, q) {
  294. var r = n.width,
  295. o = n.height;
  296. if (r > s || o > s) {
  297. if (r > o) {
  298. o = parseInt(s / r * o);
  299. r = s
  300. } else {
  301. r = parseInt(s / o * r);
  302. o = s
  303. }
  304. }
  305. var m;
  306. try {
  307. var l = document.createElement("canvas");
  308. l.width = r;
  309. l.height = o;
  310. var k = l.getContext("2d");
  311. k.drawImage(n, 0, 0, n.width, n.height, 0, 0, r, o);
  312. m = l.toDataURL()
  313. } catch(p) {
  314. m = null
  315. }
  316. if (! (/^data\:image\/(png|jpe?g|gif);base64,[0-9A-Za-z\+\/\=]+$/.test(m))) {
  317. m = null
  318. }
  319. if (!m) {
  320. return null
  321. }
  322. return {
  323. src: m,
  324. w: r,
  325. h: o
  326. }
  327. };
  328. e.fn.ace_file_input = function(m, n) {
  329. var l;
  330. var k = this.each(function() {
  331. var q = e(this);
  332. var p = q.data("ace_file_input");
  333. var o = typeof m === "object" && m;
  334. if (!p) {
  335. q.data("ace_file_input", (p = new f(this, o)))
  336. }
  337. if (typeof m === "string") {
  338. l = p[m](n)
  339. }
  340. });
  341. return (l === c) ? k: l
  342. };
  343. e.fn.ace_file_input.defaults = {
  344. style: false,
  345. no_file: "No File ...",
  346. no_icon: "icon-upload-alt",
  347. btn_choose: "Choose",
  348. btn_change: "Change",
  349. icon_remove: "icon-remove",
  350. droppable: false,
  351. thumbnail: false,
  352. before_change: null,
  353. before_remove: null,
  354. preview_error: null
  355. }
  356. })(window.jQuery); (function(a, b) {
  357. a.fn.ace_spinner = function(c) {
  358. this.each(function() {
  359. var f = c.icon_up || "icon-chevron-up";
  360. var j = c.icon_down || "icon-chevron-down";
  361. var h = c.on_sides || false;
  362. var e = c.btn_up_class || "";
  363. var g = c.btn_down_class || "";
  364. var d = c.max || 999;
  365. d = ("" + d).length;
  366. a(this).addClass("spinner-input form-control").wrap('<div class="ace-spinner">');
  367. var k = a(this).closest(".ace-spinner").spinner(c).wrapInner("<div class='input-group'></div>");
  368. if (h) {
  369. a(this).before('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-down btn-xs ' + g + '"> <i class="' + j + '"></i> </button> </div>').after('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-up btn-xs ' + e + '"> <i class="' + f + '"></i> </button> </div>');
  370. k.addClass("touch-spinner");
  371. k.css("width", (d * 20 + 40) + "px")
  372. } else {
  373. a(this).after('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-up btn-xs ' + e + '"> <i class="' + f + '"></i> </button> <button type="button" class="btn spinner-down btn-xs ' + g + '"> <i class="' + j + '"></i> </button> </div>');
  374. if ("ontouchend" in document || c.touch_spinner) {
  375. k.addClass("touch-spinner");
  376. k.css("width", (d * 20 + 40) + "px")
  377. } else {
  378. a(this).next().addClass("btn-group-vertical");
  379. k.css("width", (d * 20 + 10) + "px")
  380. }
  381. }
  382. a(this).on("mousewheel DOMMouseScroll",
  383. function(l) {
  384. var m = l.originalEvent.detail < 0 || l.originalEvent.wheelDelta > 0 ? 1 : -1;
  385. k.spinner("step", m > 0);
  386. k.spinner("triggerChangedEvent");
  387. return false
  388. });
  389. var i = a(this);
  390. k.on("changed",
  391. function() {
  392. i.trigger("change")
  393. })
  394. });
  395. return this
  396. }
  397. })(window.jQuery); (function(a, b) {
  398. a.fn.ace_wizard = function(c) {
  399. this.each(function() {
  400. var e = a(this);
  401. e.wizard();
  402. var d = e.siblings(".wizard-actions").eq(0);
  403. var f = e.data("wizard");
  404. f.$prevBtn.remove();
  405. f.$nextBtn.remove();
  406. f.$prevBtn = d.find(".btn-prev").eq(0).on(ace.click_event,
  407. function() {
  408. e.wizard("previous")
  409. }).attr("disabled", "disabled");
  410. f.$nextBtn = d.find(".btn-next").eq(0).on(ace.click_event,
  411. function() {
  412. e.wizard("next")
  413. }).removeAttr("disabled");
  414. f.nextText = f.$nextBtn.text()
  415. });
  416. return this
  417. }
  418. })(window.jQuery); (function(a, b) {
  419. a.fn.ace_colorpicker = function(c) {
  420. var d = a.extend({
  421. pull_right: false,
  422. caret: true
  423. },
  424. c);
  425. this.each(function() {
  426. var g = a(this);
  427. var e = "";
  428. var f = "";
  429. a(this).hide().find("option").each(function() {
  430. var h = "colorpick-btn";
  431. if (this.selected) {
  432. h += " selected";
  433. f = this.value
  434. }
  435. e += '<li><a class="' + h + '" href="#" style="background-color:' + this.value + ';" data-color="' + this.value + '"></a></li>'
  436. }).end().on("change.ace_inner_call",
  437. function() {
  438. a(this).next().find(".btn-colorpicker").css("background-color", this.value)
  439. }).after('<div class="dropdown dropdown-colorpicker"><a data-toggle="dropdown" class="dropdown-toggle" href="#"><span class="btn-colorpicker" style="background-color:' + f + '"></span></a><ul class="dropdown-menu' + (d.caret ? " dropdown-caret": "") + (d.pull_right ? " pull-right": "") + '">' + e + "</ul></div>").next().find(".dropdown-menu").on(ace.click_event,
  440. function(j) {
  441. var h = a(j.target);
  442. if (!h.is(".colorpick-btn")) {
  443. return false
  444. }
  445. h.closest("ul").find(".selected").removeClass("selected");
  446. h.addClass("selected");
  447. var i = h.data("color");
  448. g.val(i).change();
  449. j.preventDefault();
  450. return true
  451. })
  452. });
  453. return this
  454. }
  455. })(window.jQuery); (function(a, b) {
  456. a.fn.ace_tree = function(d) {
  457. var c = {
  458. "open-icon": "icon-folder-open",
  459. "close-icon": "icon-folder-close",
  460. selectable: true,
  461. "selected-icon": "tree-dot",
  462. "unselected-icon": "tree-dot"
  463. };
  464. c = a.extend({},
  465. c, d);
  466. this.each(function() {
  467. var e = a(this);
  468. e.html('<div class = "tree-folder" style="display:none;"> <div class="tree-folder-header"> <i class="' + c["close-icon"] + '"></i> <div class="tree-folder-name"></div> </div> <div class="tree-folder-content"></div> <div class="tree-loader" style="display:none"></div> </div> <div class="tree-item" style="display:none;"> ' + (c["unselected-icon"] == null ? "": '<i class="' + c["unselected-icon"] + '"></i>') + ' <div class="tree-item-name"></div> </div>');
  469. e.addClass(c.selectable == true ? "tree-selectable": "tree-unselectable");
  470. e.tree(c)
  471. });
  472. return this
  473. }
  474. })(window.jQuery); (function(a, b) {
  475. a.fn.ace_wysiwyg = function(c, h) {
  476. var d = a.extend({
  477. speech_button: true,
  478. wysiwyg: {}
  479. },
  480. c);
  481. var e = ["#ac725e", "#d06b64", "#f83a22", "#fa573c", "#ff7537", "#ffad46", "#42d692", "#16a765", "#7bd148", "#b3dc6c", "#fbe983", "#fad165", "#92e1c0", "#9fe1e7", "#9fc6e7", "#4986e7", "#9a9cff", "#b99aff", "#c2c2c2", "#cabdbf", "#cca6ac", "#f691b2", "#cd74e6", "#a47ae2", "#444444"];
  482. var g = {
  483. font: {
  484. values: ["Arial", "Courier", "Comic Sans MS", "Helvetica", "Open Sans", "Tahoma", "Verdana"],
  485. icon: "icon-font",
  486. title: "Font"
  487. },
  488. fontSize: {
  489. values: {
  490. 5 : "Huge",
  491. 3 : "Normal",
  492. 1 : "Small"
  493. },
  494. icon: "icon-text-height",
  495. title: "Font Size"
  496. },
  497. bold: {
  498. icon: "icon-bold",
  499. title: "Bold (Ctrl/Cmd+B)"
  500. },
  501. italic: {
  502. icon: "icon-italic",
  503. title: "Italic (Ctrl/Cmd+I)"
  504. },
  505. strikethrough: {
  506. icon: "icon-strikethrough",
  507. title: "Strikethrough"
  508. },
  509. underline: {
  510. icon: "icon-underline",
  511. title: "Underline"
  512. },
  513. insertunorderedlist: {
  514. icon: "icon-list-ul",
  515. title: "Bullet list"
  516. },
  517. insertorderedlist: {
  518. icon: "icon-list-ol",
  519. title: "Number list"
  520. },
  521. outdent: {
  522. icon: "icon-indent-left",
  523. title: "Reduce indent (Shift+Tab)"
  524. },
  525. indent: {
  526. icon: "icon-indent-right",
  527. title: "Indent (Tab)"
  528. },
  529. justifyleft: {
  530. icon: "icon-align-left",
  531. title: "Align Left (Ctrl/Cmd+L)"
  532. },
  533. justifycenter: {
  534. icon: "icon-align-center",
  535. title: "Center (Ctrl/Cmd+E)"
  536. },
  537. justifyright: {
  538. icon: "icon-align-right",
  539. title: "Align Right (Ctrl/Cmd+R)"
  540. },
  541. justifyfull: {
  542. icon: "icon-align-justify",
  543. title: "Justify (Ctrl/Cmd+J)"
  544. },
  545. createLink: {
  546. icon: "icon-link",
  547. title: "Hyperlink",
  548. button_text: "Add",
  549. placeholder: "URL",
  550. button_class: "btn-primary"
  551. },
  552. unlink: {
  553. icon: "icon-unlink",
  554. title: "Remove Hyperlink"
  555. },
  556. insertImage: {
  557. icon: "icon-picture",
  558. title: "Insert picture",
  559. button_text: '<i class="icon-file"></i> Choose Image &hellip;',
  560. placeholder: "Image URL",
  561. button_insert: "Insert",
  562. button_class: "btn-success",
  563. button_insert_class: "btn-primary",
  564. choose_file: true
  565. },
  566. foreColor: {
  567. values: e,
  568. title: "Change Color"
  569. },
  570. backColor: {
  571. values: e,
  572. title: "Change Background Color"
  573. },
  574. undo: {
  575. icon: "icon-undo",
  576. title: "Undo (Ctrl/Cmd+Z)"
  577. },
  578. redo: {
  579. icon: "icon-repeat",
  580. title: "Redo (Ctrl/Cmd+Y)"
  581. },
  582. viewSource: {
  583. icon: "icon-code",
  584. title: "View Source"
  585. }
  586. };
  587. var f = d.toolbar || ["font", null, "fontSize", null, "bold", "italic", "strikethrough", "underline", null, "insertunorderedlist", "insertorderedlist", "outdent", "indent", null, "justifyleft", "justifycenter", "justifyright", "justifyfull", null, "createLink", "unlink", null, "insertImage", null, "foreColor", null, "undo", "redo", null, "viewSource"];
  588. this.each(function() {
  589. var r = ' <div class="wysiwyg-toolbar btn-toolbar center"> <div class="btn-group"> ';
  590. for (var n in f) {
  591. if (f.hasOwnProperty(n)) {
  592. var p = f[n];
  593. if (p === null) {
  594. r += ' </div> <div class="btn-group"> ';
  595. continue
  596. }
  597. if (typeof p == "string" && p in g) {
  598. p = g[p];
  599. p.name = f[n]
  600. } else {
  601. if (typeof p == "object" && p.name in g) {
  602. p = a.extend(g[p.name], p)
  603. } else {
  604. continue
  605. }
  606. }
  607. var q = "className" in p ? p.className: "";
  608. switch (p.name) {
  609. case "font":
  610. r += ' <a class="btn btn-sm ' + q + ' dropdown-toggle" data-toggle="dropdown" title="' + p.title + '"><i class="' + p.icon + '"></i><i class="icon-angle-down icon-on-right"></i></a> ';
  611. r += ' <ul class="dropdown-menu dropdown-light">';
  612. for (var j in p.values) {
  613. if (p.values.hasOwnProperty(j)) {
  614. r += ' <li><a data-edit="fontName ' + p.values[j] + '" style="font-family:\'' + p.values[j] + "'\">" + p.values[j] + "</a></li> "
  615. }
  616. }
  617. r += " </ul>";
  618. break;
  619. case "fontSize":
  620. r += ' <a class="btn btn-sm ' + q + ' dropdown-toggle" data-toggle="dropdown" title="' + p.title + '"><i class="' + p.icon + '"></i>&nbsp;<i class="icon-angle-down icon-on-right"></i></a> ';
  621. r += ' <ul class="dropdown-menu dropdown-light"> ';
  622. for (var t in p.values) {
  623. if (p.values.hasOwnProperty(t)) {
  624. r += ' <li><a data-edit="fontSize ' + t + '"><font size="' + t + '">' + p.values[t] + "</font></a></li> "
  625. }
  626. }
  627. r += " </ul> ";
  628. break;
  629. case "createLink":
  630. r += ' <div class="inline position-relative"> <a class="btn btn-sm ' + q + ' dropdown-toggle" data-toggle="dropdown" title="' + p.title + '"><i class="' + p.icon + '"></i></a> ';
  631. r += ' <div class="dropdown-menu dropdown-caret pull-right"> <div class="input-group"> <input class="form-control" placeholder="' + p.placeholder + '" type="text" data-edit="' + p.name + '" /> <span class="input-group-btn"> <button class="btn btn-sm ' + p.button_class + '" type="button">' + p.button_text + "</button> </span> </div> </div> </div>";
  632. break;
  633. case "insertImage":
  634. r += ' <div class="inline position-relative"> <a class="btn btn-sm ' + q + ' dropdown-toggle" data-toggle="dropdown" title="' + p.title + '"><i class="' + p.icon + '"></i></a> ';
  635. r += ' <div class="dropdown-menu dropdown-caret pull-right"> <div class="input-group"> <input class="form-control" placeholder="' + p.placeholder + '" type="text" data-edit="' + p.name + '" /> <span class="input-group-btn"> <button class="btn btn-sm ' + p.button_insert_class + '" type="button">' + p.button_insert + "</button> </span> </div>";
  636. if (p.choose_file && "FileReader" in window) {
  637. r += '<div class="space-2"></div> <div class="center"> <button class="btn btn-sm ' + p.button_class + ' wysiwyg-choose-file" type="button">' + p.button_text + '</button> <input type="file" data-edit="' + p.name + '" /> </div>'
  638. }
  639. r += " </div> </div>";
  640. break;
  641. case "foreColor":
  642. case "backColor":
  643. r += ' <select class="hide wysiwyg_colorpicker" title="' + p.title + '"> ';
  644. for (var m in p.values) {
  645. r += ' <option value="' + p.values[m] + '">' + p.values[m] + "</option> "
  646. }
  647. r += " </select> ";
  648. r += ' <input style="display:none;" disabled class="hide" type="text" data-edit="' + p.name + '" /> ';
  649. break;
  650. case "viewSource":
  651. r += ' <a class="btn btn-sm ' + q + '" data-view="source" title="' + p.title + '"><i class="' + p.icon + '"></i></a> ';
  652. break;
  653. default:
  654. r += ' <a class="btn btn-sm ' + q + '" data-edit="' + p.name + '" title="' + p.title + '"><i class="' + p.icon + '"></i></a> ';
  655. break
  656. }
  657. }
  658. }
  659. r += " </div> </div> ";
  660. if (d.toolbar_place) {
  661. r = d.toolbar_place.call(this, r)
  662. } else {
  663. r = a(this).before(r).prev()
  664. }
  665. r.find("a[title]").tooltip({
  666. animation: false,
  667. container: "body"
  668. });
  669. r.find(".dropdown-menu input:not([type=file])").on(ace.click_event,
  670. function() {
  671. return false
  672. }).on("change",
  673. function() {
  674. a(this).closest(".dropdown-menu").siblings(".dropdown-toggle").dropdown("toggle")
  675. }).on("keydown",
  676. function(u) {
  677. if (u.which == 27) {
  678. this.value = "";
  679. a(this).change()
  680. }
  681. });
  682. r.find("input[type=file]").prev().on(ace.click_event,
  683. function(u) {
  684. a(this).next().click()
  685. });
  686. r.find(".wysiwyg_colorpicker").each(function() {
  687. a(this).ace_colorpicker({
  688. pull_right: true
  689. }).change(function() {
  690. a(this).nextAll("input").eq(0).val(this.value).change()
  691. }).next().find(".btn-colorpicker").tooltip({
  692. title: this.title,
  693. animation: false,
  694. container: "body"
  695. })
  696. });
  697. var k;
  698. if (d.speech_button && "onwebkitspeechchange" in (k = document.createElement("input"))) {
  699. var i = a(this).offset();
  700. r.append(k);
  701. a(k).attr({
  702. type: "text",
  703. "data-edit": "inserttext",
  704. "x-webkit-speech": ""
  705. }).addClass("wysiwyg-speech-input").css({
  706. position: "absolute"
  707. }).offset({
  708. top: i.top,
  709. left: i.left + a(this).innerWidth() - 35
  710. })
  711. } else {
  712. k = null
  713. }
  714. var s = a(this);
  715. var l = false;
  716. r.find("a[data-view=source]").on("click",
  717. function(v) {
  718. v.preventDefault();
  719. if (!l) {
  720. a("<textarea />").css({
  721. width: s.outerWidth(),
  722. height: s.outerHeight()
  723. }).val(s.html()).insertAfter(s);
  724. s.hide();
  725. a(this).addClass("active")
  726. } else {
  727. var u = s.next();
  728. s.html(u.val()).show();
  729. u.remove();
  730. a(this).removeClass("active")
  731. }
  732. l = !l
  733. });
  734. var o = a.extend({},
  735. {
  736. activeToolbarClass: "active",
  737. toolbarSelector: r
  738. },
  739. d.wysiwyg || {});
  740. a(this).wysiwyg(o)
  741. });
  742. return this
  743. }
  744. })(window.jQuery);