IP.Board - Plaintext BBCode

Adds BBCode button support to Plaintext editor mode.

  1. // ==UserScript==
  2. // @name IP.Board - Plaintext BBCode
  3. // @namespace Makaze
  4. // @include *
  5. // @grant none
  6. // @version 5.0.2
  7. // @description Adds BBCode button support to Plaintext editor mode.
  8. // ==/UserScript==
  9.  
  10. var MakazeScriptStyles,
  11. styleElem;
  12.  
  13. function fade(elem, type, speed) {
  14. function defaultStyle(tag) {
  15. var defaultStyles = {},
  16. testElem = document.createElement(tag),
  17. getStyle = 'getComputedStyle' in window,
  18. styles;
  19.  
  20. document.body.appendChild(testElem);
  21.  
  22. styles = (getStyle) ? window.getComputedStyle(testElem) : testElem.currentStyle;
  23.  
  24. for (var prop in styles) {
  25. defaultStyles[prop] = styles[prop];
  26. }
  27.  
  28. document.body.removeChild(testElem);
  29.  
  30. return defaultStyles;
  31. }
  32.  
  33. var defaults = defaultStyle(elem.tagName),
  34. defaultOpacity,
  35. defaultDisplay,
  36. currentDisplay = (elem.style.display.length) ? elem.style.display : window.getComputedStyle(elem).display;
  37.  
  38. if (elem.style.display.length) {
  39. elem.style.display = '';
  40. }
  41.  
  42. defaultDisplay = (window.getComputedStyle(elem).display === 'none') ? defaults.display : window.getComputedStyle(elem).display;
  43.  
  44. elem.style.display = currentDisplay;
  45.  
  46. if (elem.style.display.length) {
  47. elem.style.opacity = '';
  48. }
  49.  
  50. defaultOpacity = (window.getComputedStyle(elem).opacity === '0') ? defaults.opacity : window.getComputedStyle(elem).opacity;
  51.  
  52. elem.style.opacity = 0;
  53.  
  54. // Default values:
  55.  
  56. switch (arguments.length) {
  57. case 1:
  58. type = 'toggle';
  59. case 2:
  60. speed = 300;
  61. break;
  62. }
  63.  
  64. switch (type) {
  65. case 'in':
  66. elem.style.display = defaultDisplay;
  67. setTimeout(function() {
  68. elem.style.transition = 'all ' + speed + 'ms ease-in-out';
  69. elem.style.opacity = defaultOpacity;
  70. setTimeout(function() {
  71. elem.style.transition = '';
  72. }, speed + 10);
  73. }, 0);
  74. break;
  75. case 'out':
  76. elem.style.transition = 'none';
  77. elem.style.opacity = defaultOpacity;
  78. elem.style.transition = 'all ' + speed + 'ms ease-in-out';
  79. elem.style.opacity = 0;
  80. setTimeout(function() {
  81. elem.style.display = 'none';
  82. elem.style.transition = '';
  83. elem.style.opacity = '';
  84. }, speed + 10);
  85. break;
  86. case 'toggle':
  87. default:
  88. if (currentDisplay === 'none') {
  89. elem.style.display = defaultDisplay;
  90. setTimeout(function() {
  91. elem.style.transition = 'all ' + speed + 'ms ease-in-out';
  92. elem.style.opacity = defaultOpacity;
  93. setTimeout(function() {
  94. elem.style.transition = '';
  95. }, speed + 10);
  96. }, 0);
  97. } else {
  98. elem.style.transition = 'none';
  99. elem.style.opacity = defaultOpacity;
  100. elem.style.transition = 'all ' + speed + 'ms ease-in-out';
  101. elem.style.opacity = 0;
  102. setTimeout(function() {
  103. elem.style.display = 'none';
  104. elem.style.transition = '';
  105. elem.style.opacity = '';
  106. }, speed + 10);
  107. }
  108. }
  109. }
  110.  
  111. function empty(elem) {
  112. while (elem.hasChildNodes()) {
  113. elem.removeChild(elem.lastChild);
  114. }
  115. }
  116.  
  117. function createElement(type, callback) {
  118. var element = document.createElement(type);
  119.  
  120. callback(element);
  121.  
  122. return element;
  123. }
  124.  
  125. function getPosition(element) {
  126. var xPosition = 0,
  127. yPosition = 0;
  128.  
  129. while (element) {
  130. xPosition += (element.offsetLeft
  131. + element.clientLeft);
  132. yPosition += (element.offsetTop
  133. + element.clientTop);
  134. element = element.offsetParent;
  135. }
  136. return {x: xPosition, y: yPosition};
  137. }
  138.  
  139. function runInGlobal(code) {
  140. var scripts = document.createElement('script');
  141. scripts.type = 'text/javascript';
  142. scripts.id = 'runInGlobal';
  143. scripts.appendChild(document.createTextNode(
  144. '(function() { ' + code + '})();' +
  145. '\n\n' +
  146. 'document.getElementById(\'runInGlobal\').remove();'
  147. ));
  148.  
  149. (document.head || document.body || document.documentElement).appendChild(scripts);
  150. }
  151.  
  152. // Classes constructor
  153.  
  154. function ClassHandler() {
  155. var self = this;
  156.  
  157. this.classList = function(elem) {
  158. return elem.className.trim().split(/[\b\s]/);
  159. };
  160.  
  161. this.hasClass = function(elem, className) {
  162. var classes = self.classList(elem),
  163. has = false,
  164. i = 0;
  165.  
  166. for (i = 0; i < classes.length; i++) {
  167. if (classes[i] === className) {
  168. has = true;
  169. break;
  170. }
  171. }
  172.  
  173. return (has);
  174. };
  175.  
  176. this.addClass = function(elem, className) {
  177. var classes;
  178.  
  179. if (!self.hasClass(elem, className)) {
  180. classes = self.classList(elem);
  181. classes.push(className);
  182. elem.className = classes.join(' ').trim();
  183. }
  184.  
  185. return self;
  186. };
  187.  
  188. this.removeClass = function(elem, className) {
  189. var classes = self.classList(elem),
  190. i = 0;
  191.  
  192. for (i = 0; i < classes.length; i++) {
  193. if (classes[i] === className) {
  194. classes.splice(i, 1);
  195. }
  196. }
  197.  
  198. elem.className = classes.join(' ').trim();
  199.  
  200. return self;
  201. };
  202.  
  203. this.toggleClass = function(elem, className) {
  204. var classes;
  205.  
  206. if (self.hasClass(elem, className)) {
  207. self.removeClass(elem, className);
  208. } else {
  209. classes = self.classList(elem);
  210. classes.push(className);
  211. elem.className = classes.join(' ').trim();
  212. }
  213.  
  214. return self;
  215. };
  216. }
  217.  
  218. // Initilize
  219.  
  220. var Classes = new ClassHandler();
  221.  
  222. // End Classes constructor
  223.  
  224. // Event handler constructor
  225.  
  226. function EventHandler() {
  227. var events = [],
  228. matchedEvents = [],
  229. selector = document,
  230. self = this;
  231.  
  232. this.selector = function(toSelect) {
  233. selector = toSelect;
  234. return self;
  235. };
  236.  
  237. this.add = function(types, namespace, listener, useCapture) {
  238. var type,
  239. event,
  240. i = 0;
  241.  
  242. types = types.split(/[\b\s]/);
  243.  
  244. events.push({'selector': selector, 'namespace': namespace, 'types': types, 'listener': listener, 'useCapture': useCapture});
  245. event = events[events.length - 1];
  246.  
  247. for (i = 0; i < event.types.length; i++) {
  248. type = event.types[i];
  249. selector.addEventListener(type, listener, useCapture);
  250. }
  251.  
  252. return self;
  253. };
  254.  
  255. this.remove = function(types, namespace, listener, useCapture) {
  256. var event,
  257. eventType,
  258. eventTypes,
  259. type,
  260. i = 0,
  261. j = 0,
  262. k = 0;
  263.  
  264. if (!arguments.length) {
  265. if (matchedEvents.length) {
  266. for (i = 0; i < matchedEvents.length; i++) {
  267. event = matchedEvents[i];
  268. for (j = 0; j < event.types.length; j++) {
  269. type = event.types[j];
  270. event.selector.removeEventListener(type, event.listener, event.useCapture);
  271. }
  272. }
  273. } else {
  274. self.getEventsBySelector(selector).remove();
  275. }
  276. } else {
  277. types = types.split(/[\b\s]/);
  278.  
  279. for (i = 0; i < events.length; i++) {
  280. event = events[i];
  281. if (event.selector == selector && event.namespace === namespace && event.useCapture === useCapture && event.listener === listener) {
  282. eventTypes = event.types;
  283. for (j = 0; j < eventTypes.length; j++) {
  284. eventType = eventTypes[j];
  285. for (k = 0; k < event.types.length; k++) {
  286. type = types[k];
  287. if (type === eventType) {
  288. selector.removeEventListener(type, event.listener, event.useCapture);
  289. }
  290. }
  291. }
  292. break;
  293. }
  294. }
  295. }
  296.  
  297. matchedEvents = [];
  298.  
  299. return self;
  300. };
  301.  
  302. this.output = function() {
  303. if (!matchedEvents.length) {
  304. self.getAllEvents().output();
  305. } else {
  306. var output = matchedEvents;
  307. matchedEvents = [];
  308. return output;
  309. }
  310. };
  311.  
  312. this.getAllEvents = function() {
  313. matchedEvents = events;
  314. return self;
  315. };
  316.  
  317. this.getEventsBySelector = function(getSelector) {
  318. var event,
  319. i = 0;
  320.  
  321. if (matchedEvents.length) {
  322. for (i = 0; i < matchedEvents.length; i++) {
  323. event = matchedEvents[i];
  324. if (event.selector != getSelector) {
  325. matchedEvents.splice(i, 1);
  326. }
  327. }
  328. } else {
  329. for (i = 0; i < events.length; i++) {
  330. event = events[i];
  331. if (event.selector == getSelector) {
  332. matchedEvents.push(event);
  333. }
  334. }
  335. }
  336.  
  337. return self;
  338. };
  339.  
  340. this.getEventsByType = function(types) {
  341. var eventTypes,
  342. eventType,
  343. event,
  344. type,
  345. hasType = false,
  346. i = 0,
  347. j = 0,
  348. k = 0;
  349.  
  350. types = types.split(/[\b\s]/);
  351.  
  352. if (matchedEvents.length) {
  353. for (i = 0; i < matchedEvents.length; i++) {
  354. event = matchedEvents[i];
  355. for (j = 0; j < eventTypes.length; j++) {
  356. eventType = eventTypes[j];
  357. for (k = 0; k < event.types.length; k++) {
  358. type = types[k];
  359. if (type === eventType) {
  360. hasType = true;
  361. break;
  362. }
  363. }
  364. if (hasType) {
  365. break;
  366. }
  367. }
  368. if (hasType) {
  369. matchedEvents.splice(i, 1);
  370. }
  371. }
  372. } else {
  373. for (i = 0; i < events.length; i++) {
  374. event = events[i];
  375. for (j = 0; j < eventTypes.length; j++) {
  376. eventType = eventTypes[j];
  377. for (k = 0; k < event.types.length; k++) {
  378. type = types[k];
  379. if (type === eventType) {
  380. hasType = true;
  381. break;
  382. }
  383. }
  384. if (hasType) {
  385. break;
  386. }
  387. }
  388. if (hasType) {
  389. matchedEvents.push(event);
  390. }
  391. }
  392. }
  393. return self;
  394. };
  395.  
  396. this.getEventsByName = function(namespace) {
  397. var event,
  398. i = 0;
  399.  
  400. if (matchedEvents.length) {
  401. for (i = 0; i < matchedEvents.length; i++) {
  402. event = matchedEvents[i];
  403. if (event.namespace !== namespace) {
  404. matchedEvents.splice(i, 1);
  405. }
  406. }
  407. } else {
  408. for (i = 0; i < events.length; i++) {
  409. event = events[i];
  410. if (event.namespace === namespace) {
  411. matchedEvents.push(event);
  412. }
  413. }
  414. }
  415.  
  416. return self;
  417. };
  418.  
  419. this.getEventsByListener = function(listener) {
  420. var event,
  421. i = 0;
  422.  
  423. if (matchedEvents.length) {
  424. for (i = 0; i < matchedEvents.length; i++) {
  425. event = matchedEvents[i];
  426. if (event.listener !== listener) {
  427. matchedEvents.splice(i, 1);
  428. }
  429. }
  430. } else {
  431. for (i = 0; i < events.length; i++) {
  432. event = events[i];
  433. if (event.listener === listener) {
  434. matchedEvents.push(event);
  435. }
  436. }
  437. }
  438.  
  439. return self;
  440. };
  441. }
  442.  
  443. // Initialize
  444.  
  445. var Events = new EventHandler();
  446.  
  447. // End Event handler constructor
  448.  
  449. function isChildOf(selector, element) {
  450. switch (selector.charAt(0)) {
  451. case '.':
  452. if (document.getElementsByClassName(selector.slice(1))[0] == null) {
  453. return false;
  454. }
  455.  
  456. while (element.getElementsByClassName(selector.slice(1))[0] == null && element.parentNode) {
  457. if (Classes.hasClass(element, selector.slice(1))) {
  458. return true;
  459. }
  460. element = element.parentNode;
  461. }
  462. break;
  463. case '#':
  464. if (document.getElementById(selector.slice(1)) == null) {
  465. return false;
  466. }
  467.  
  468. while (element.parentNode) {
  469. if (element.id === selector.slice(1)) {
  470. return true;
  471. }
  472. element = element.parentNode;
  473. }
  474. break;
  475. default:
  476. if (document.getElementsByTagName(selector)[0] == null) {
  477. return false;
  478. }
  479.  
  480. while (element.getElementsByTagName(selector) == null && element.parentNode) {
  481. if (element.tagName === selector.toUpperCase()) {
  482. return true;
  483. }
  484. element = element.parentNode;
  485. }
  486. }
  487. return false;
  488. }
  489.  
  490. function getParent(selector, element) {
  491. switch (selector.charAt(0)) {
  492. case '.':
  493. if (document.getElementsByClassName(selector.slice(1))[0] == null) {
  494. return false;
  495. }
  496.  
  497. while (element.getElementsByClassName(selector.slice(1))[0] == null && element.parentNode) {
  498. if (Classes.hasClass(element, selector.slice(1))) {
  499. return element;
  500. }
  501. element = element.parentNode;
  502. }
  503. break;
  504. case '#':
  505. if (document.getElementById(selector.slice(1)) == null) {
  506. return false;
  507. }
  508.  
  509. while (element.parentNode) {
  510. if (element.id === selector.slice(1)) {
  511. return element;
  512. }
  513. element = element.parentNode;
  514. }
  515. break;
  516. default:
  517. if (document.getElementsByTagName(selector)[0] == null) {
  518. return false;
  519. }
  520.  
  521. while (element.getElementsByTagName(selector) == null && element.parentNode) {
  522. if (element.tagName === selector.toUpperCase()) {
  523. return element;
  524. }
  525. element = element.parentNode;
  526. }
  527. }
  528. }
  529.  
  530. function getSubmit(request) {
  531. var i,
  532. select;
  533. for (i = 0; i < request.getElementsByClassName('cke_dialog_ui_button').length; i++) {
  534. select = request.getElementsByClassName('cke_dialog_ui_button')[i];
  535. if (select.title === 'OK') {
  536. return select;
  537. }
  538. }
  539. }
  540.  
  541. function getCancel(request) {
  542. var i,
  543. select;
  544. for (i = 0; i < request.getElementsByClassName('cke_dialog_ui_button').length; i++) {
  545. select = request.getElementsByClassName('cke_dialog_ui_button')[i];
  546. if (select.title === 'Cancel') {
  547. return select;
  548. }
  549. }
  550. }
  551.  
  552. function getClose(request) {
  553. return request.getElementsByClassName('cke_dialog_close_button')[0];
  554. }
  555.  
  556. function getSelection(elem) {
  557. var start = elem.selectionStart,
  558. end = elem.selectionEnd,
  559. selectedText = elem.value.substring(start, end);
  560.  
  561. return selectedText;
  562. }
  563.  
  564. function selectRange(elem, start, end) {
  565. var range;
  566.  
  567. if (elem.setSelectionRange) {
  568. elem.focus();
  569. elem.setSelectionRange(start, end);
  570. } else if (elem.createTextRange) {
  571. range = elem.createTextRange();
  572. range.collapse(true);
  573. range.moveEnd('character', end);
  574. range.moveStart('character', start);
  575. range.select();
  576. }
  577. }
  578.  
  579. function wrapText(elementSelector, openTag, closeTag, contentField) {
  580. var textArea = elementSelector,
  581. len = textArea.value.length,
  582. start = textArea.selectionStart,
  583. end = textArea.selectionEnd,
  584. selectedText = textArea.value.substring(start, end),
  585. replacement,
  586. paste = document.createEvent('TextEvent');
  587. if (contentField != null) {
  588. replacement = openTag + contentField.value + closeTag;
  589. } else {
  590. replacement = openTag + selectedText + closeTag;
  591. }
  592. if (paste.initTextEvent) {
  593. paste.initTextEvent('textInput', true, true, null, replacement);
  594. textArea.dispatchEvent(paste);
  595. } else {
  596. textArea.value = textArea.value.substring(0, start) + replacement + textArea.value.substring(end, len);
  597. }
  598. selectRange(textArea, start + openTag.length, start + replacement.length - closeTag.length);
  599. }
  600.  
  601. function removeListeners(element, callback, deleteElement) {
  602. var elementClone = element.cloneNode(true),
  603. elementParent = element.parentNode,
  604. fullValue = element.value,
  605. start = element.selectionStart,
  606. end = element.selectionEnd,
  607. newElement,
  608. thisChild,
  609. i = 0;
  610.  
  611. callback(element, elementClone);
  612.  
  613. elementClone.setAttribute('data-listenersRemoved', '');
  614. elementParent.insertBefore(elementClone, element);
  615. element.style.display = 'none';
  616. if (deleteElement) {
  617. elementParent.replaceChild(elementClone, element);
  618. }
  619. for (i = 0; i < elementParent.childNodes.length; i++) {
  620. thisChild = elementParent.childNodes[i];
  621. if (thisChild.hasAttribute('data-listenersRemoved')) {
  622. newElement = thisChild;
  623. thisChild.removeAttribute('data-listenersRemoved');
  624. break;
  625. }
  626. }
  627. newElement.focus();
  628. newElement.value = fullValue;
  629. selectRange(newElement, start, end);
  630. }
  631.  
  632. Events.selector(document).add('keydown', 'plaintext_shortcuts', function(event) {
  633. var element = event.target;
  634.  
  635. if (!element.className || !Classes.hasClass(element, 'cke_source')) {
  636. return false;
  637. }
  638.  
  639. if (!element.hasAttribute('data-shortcutsenabled')) {
  640. removeListeners(element, function(element, removed) {
  641. var postFormParent = element.parentNode,
  642. inputs,
  643. thisInput,
  644. i = 0;
  645.  
  646. removed.setAttribute('data-shortcutsenabled', '');
  647.  
  648. Events.selector(removed).add('input propertychange', 'edit', function() {
  649. element.value = removed.value;
  650. }, false);
  651.  
  652. while (postFormParent.getElementsByClassName('input_submit')[0] == null && postFormParent.parentNode) {
  653. postFormParent = postFormParent.parentNode;
  654. }
  655.  
  656. inputs = postFormParent.getElementsByClassName('input_submit');
  657.  
  658. // On submits
  659.  
  660. var deleteCloneListener = function() {
  661. var texts = postFormParent.getElementsByTagName('textarea'),
  662. thisOne,
  663. i = 0;
  664.  
  665. for (i = 0; i < texts.length; i++) {
  666. thisOne = texts[i];
  667. if (thisOne.hasAttribute('data-shortcutsenabled')) {
  668. thisOne.remove();
  669. break;
  670. }
  671. }
  672.  
  673. element.style.display = '';
  674.  
  675. Events.selector(this).remove('click', 'deleteClone', deleteCloneListener, false);
  676. };
  677.  
  678. for (i = 0; i < inputs.length; i++) {
  679. thisInput = inputs[i];
  680. Events.selector(thisInput).add('click', 'deleteClone', deleteCloneListener, false);
  681. }
  682. }, false);
  683. }
  684.  
  685. if (event.ctrlKey || event.metaKey) {
  686. switch (event.keyCode) {
  687. case 66:
  688. event.preventDefault();
  689. wrapText(element, '[b]', '[/b]');
  690. break;
  691. case 73:
  692. event.preventDefault();
  693. wrapText(element, '[i]', '[/i]');
  694. break;
  695. case 85:
  696. event.preventDefault();
  697. wrapText(element, '[u]', '[/u]');
  698. break;
  699. }
  700. }
  701. }, false);
  702.  
  703. // Styling
  704.  
  705. if (document.getElementById('MakazeScriptStyles') == null) {
  706. MakazeScriptStyles = createElement('style', function(style) {
  707. style.id = 'MakazeScriptStyles';
  708. style.type = 'text/css';
  709. });
  710. document.head.appendChild(MakazeScriptStyles);
  711. }
  712.  
  713. styleElem = document.getElementById('MakazeScriptStyles');
  714.  
  715. if (styleElem.hasChildNodes()) {
  716. styleElem.childNodes[0].nodeValue += '\n\n';
  717. } else {
  718. styleElem.appendChild(document.createTextNode(''));
  719. }
  720.  
  721. styleElem.childNodes[0].nodeValue +=
  722. '#request-background {\n' +
  723. 'position: fixed;\n' +
  724. 'z-index: 9999998;\n' +
  725. 'top: 0px;\n' +
  726. 'left: 0px;\n' +
  727. 'opacity: 0.5;\n' +
  728. 'width: 100%;\n' +
  729. 'height: 100%;\n' +
  730. 'display: none;\n' +
  731. '}\n\n' +
  732.  
  733. '.plaintextBBCodeRequest {\n' +
  734. 'z-index: 9999999;\n' +
  735. '}\n\n' +
  736.  
  737. '.sp_BBCode_desc {\n' +
  738. 'color: #666 ! important;\n' +
  739. 'white-space: normal ! important;\n' +
  740. 'word-wrap: break-word;\n' +
  741. '}\n\n' +
  742.  
  743. '.plaintextBBCode-dropdown {\n' +
  744. 'position: absolute;\n' +
  745. 'z-index: 9999;\n' +
  746. 'overflow-y: auto;\n' +
  747. 'background-color: #fff;\n' +
  748. 'border-top-left-radius: 0px;\n' +
  749. 'border-top-right-radius: 3px;\n' +
  750. 'border-bottom-right-radius: 3px;\n' +
  751. 'border-bottom-left-radius: 3px;\n' +
  752. 'border: 1px solid #aaa;\n' +
  753. 'color: #222;\n' +
  754. 'font-family: \'Helvetica Neue\', Arial, Verdana, sans-serif;\n' +
  755. 'display: none;\n' +
  756. '}\n\n' +
  757.  
  758. '#font-dropdown {\n' +
  759. 'width: 300px;\n' +
  760. 'height: 170px;\n' +
  761. '}\n\n' +
  762.  
  763. '#size-dropdown {\n' +
  764. 'width: 120px;\n' +
  765. 'height: 170px;\n' +
  766. '}\n\n' +
  767.  
  768. '#color-dropdown {\n' +
  769. 'width: 154px;\n' +
  770. 'height: 134px;\n' +
  771. '}\n\n' +
  772.  
  773. '.dropdown-link {\n' +
  774. 'padding: 2px;\n' +
  775. 'display: block;\n' +
  776. 'border: 1px solid #fff;\n' +
  777. 'color: inherit !important;\n' +
  778. 'text-decoration: none;\n' +
  779. 'overflow: hidden;\n' +
  780. 'text-overflow: ellipsis;\n' +
  781. '}';
  782.  
  783. function getBackgroundColor(elem) {
  784. var bg;
  785.  
  786. function hex(x) {
  787. return ("0" + parseInt(x).toString(16)).slice(-2);
  788. }
  789.  
  790. if (elem.currentStyle) {
  791. bg = elem.currentStyle.backgroundColor;
  792. } else if (window.getComputedStyle) {
  793. bg = document.defaultView.getComputedStyle(elem, null).getPropertyValue("background-color");
  794. if (bg.search("rgb") == -1) {
  795. return bg;
  796. } else {
  797. bg = bg.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
  798. return "#" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
  799. }
  800. }
  801. }
  802.  
  803. function createDialogCSS() {
  804. var dialogcss = false,
  805. dialogStyle,
  806. links = document.getElementsByTagName('link'),
  807. i = 0;
  808.  
  809. for (i = 0; i < links.length; i++) {
  810. if (links[i].href.match(/dialog\.css/)) {
  811. dialogcss = true;
  812. break;
  813. }
  814. }
  815.  
  816. if (!dialogcss) {
  817. dialogStyle = createElement('link', function(css) {
  818. css.setAttribute('rel', 'stylesheet');
  819. css.setAttribute('media', 'screen,print');
  820. css.type = 'text/css';
  821. css.href = 'public/js/3rd_party/ckeditor/skins/ips/dialog.css';
  822. });
  823. document.head.appendChild(dialogStyle);
  824. }
  825. }
  826.  
  827. function createRequestBackground() {
  828. if (document.getElementById('request-background') == null) {
  829. var requestbackground = createElement('div', function(bg) {
  830. bg.id = 'request-background';
  831. bg.className = 'cke_dialog_background_cover';
  832. });
  833. document.body.appendChild(requestbackground);
  834. }
  835. }
  836.  
  837. function createRequest() {
  838. createDialogCSS();
  839.  
  840. var requestDialog = createElement('div', function(request) {
  841. request.className = 'cke_skin_ips plaintextBBCodeRequest';
  842. request.id = 'plaintext-request';
  843. request.style.display = 'none';
  844. request.style.position = 'fixed';
  845. request.style.top = '0px';
  846. request.style.left = '0px';
  847. request.style.width = '400px';
  848. request.style.backgroundColor = '#fff';
  849.  
  850. request.appendChild(createElement('div', function(body) {
  851. body.className = 'cke_dialog_body';
  852.  
  853. body.appendChild(createElement('div', function(handle) {
  854. handle.className = 'request-type cke_dialog_title';
  855. handle.appendChild(document.createTextNode('Link'));
  856. }));
  857.  
  858. body.appendChild(createElement('a', function(close) {
  859. close.className = 'cke_dialog_close_button';
  860. close.href = 'javascript:void(0)';
  861. close.title = 'Close';
  862.  
  863. close.appendChild(createElement('span', function(label) {
  864. label.className = 'cke_label';
  865. label.appendChild(document.createTextNode('X'));
  866. }));
  867. }));
  868.  
  869. body.appendChild(createElement('div', function(contents) {
  870. contents.className = 'cke_dialog_contents';
  871.  
  872. contents.appendChild(createElement('div', function(spec) {
  873. spec.className = 'spec';
  874. spec.style.marginTop = '5px';
  875. spec.appendChild(document.createTextNode('URL'));
  876. }));
  877.  
  878. contents.appendChild(createElement('div', function(fields) {
  879. fields.className = 'fields';
  880. fields.style.lineHeight = '14px';
  881. fields.style.verticalAlign = 'middle';
  882.  
  883. fields.appendChild(createElement('div', function(cont) {
  884. cont.className = 'cke_dialog_ui_input_text';
  885. cont.appendChild(createElement('input', function(input) {
  886. input.className = 'cke_dialog_ui_input_text';
  887. input.type = 'text';
  888. }));
  889. }));
  890. }));
  891.  
  892. contents.appendChild(createElement('div', function(footer) {
  893. footer.className = 'cke_dialog_footer cke_dialog_footer_buttons';
  894. footer.style.float = 'right';
  895. footer.style.marginRight = '0px';
  896. footer.style.marginTop = '10px';
  897.  
  898. footer.appendChild(createElement('a', function(okay) {
  899. okay.className = 'cke_dialog_ui_button';
  900. okay.setAttribute('hidefocus', 'true');
  901. okay.title = 'OK';
  902. okay.href = 'javascript:void(0)';
  903.  
  904. okay.appendChild(createElement('span', function(span) {
  905. span.className = 'cke_dialog_ui_button';
  906. span.style.marginBottom = '5px';
  907. span.appendChild(document.createTextNode('OK'));
  908. }));
  909. }));
  910.  
  911. footer.appendChild(createElement('a', function(cancel) {
  912. cancel.className = 'cke_dialog_ui_button';
  913. cancel.setAttribute('hidefocus', 'true');
  914. cancel.title = 'Cancel';
  915. cancel.href = 'javascript:void(0)';
  916. cancel.style.marginLeft = '10px';
  917.  
  918. cancel.appendChild(createElement('span', function(span) {
  919. span.className = 'cke_dialog_ui_button';
  920. span.style.marginBottom = '5px';
  921. span.appendChild(document.createTextNode('Cancel'));
  922. }));
  923. }));
  924. }));
  925. }));
  926. }));
  927. });
  928.  
  929. document.body.appendChild(requestDialog);
  930.  
  931. runInGlobal('requestDrag = new Draggable(\'plaintext-request\', { handle: \'request-type\', starteffect: null, endeffect: null });');
  932.  
  933. createRequestBackground();
  934.  
  935. var requestClickHandler = function() {
  936. fade(document.getElementById('plaintext-request'), 'out');
  937. fade(document.getElementById('request-background'), 'out');
  938. };
  939.  
  940. Events.selector(document.getElementById('plaintext-request').getElementsByClassName('cke_dialog_close_button')[0]).add('click', 'plaintextRequest_fade', requestClickHandler, false);
  941. Events.selector(document.getElementById('plaintext-request').getElementsByClassName('cke_dialog_footer')[0].getElementsByTagName('a')[0]).add('click', 'plaintextRequest_fade', requestClickHandler, false);
  942. Events.selector(document.getElementById('plaintext-request').getElementsByClassName('cke_dialog_footer')[0].getElementsByTagName('a')[1]).add('click', 'plaintextRequest_fade', requestClickHandler, false);
  943. }
  944.  
  945. function createFontDropdown() {
  946. function createFont(name, family) {
  947. return createElement('li', function(font) {
  948. font.className = 'cke_panel_listItem';
  949.  
  950. font.appendChild(createElement('a', function(link) {
  951. link.className = 'dropdown-link';
  952. link.href = 'javascript:void(\'' + name + '\')';
  953. link.title = name;
  954. link.appendChild(createElement('span', function(span) {
  955. span.style.fontSize = '14px';
  956. span.style.fontFamily = family;
  957. span.appendChild(document.createTextNode(name));
  958. }));
  959. }));
  960. });
  961. }
  962.  
  963. var fontDropdown = createElement('div', function(dropdown) {
  964. dropdown.id = 'font-dropdown';
  965. dropdown.className = 'cke_panel cke_ltr cke_rcombopanel font-dropdown plaintextBBCode-dropdown';
  966.  
  967. dropdown.appendChild(createElement('div', function(block) {
  968. block.className = 'cke_panel_block';
  969.  
  970. block.appendChild(createElement('h1', function(title) {
  971. title.className = 'cke_panel_grouptitle';
  972. title.appendChild(document.createTextNode('Font Name'));
  973. }));
  974.  
  975. block.appendChild(createElement('ul', function(list) {
  976. list.className = 'cke_panel_list';
  977.  
  978. list.appendChild(createFont('Arial', 'arial,helvetica,sans-serif'));
  979. list.appendChild(createFont('Comic Sans MS', 'comic sans ms,cursive'));
  980. list.appendChild(createFont('Courier New', 'courier new,courier,monospace'));
  981. list.appendChild(createFont('Georgia', 'georgia,serif'));
  982. list.appendChild(createFont('Lucida Sans Unicode', 'lucida sans unicode,lucida grande,sans-serif'));
  983. list.appendChild(createFont('Tahoma', 'tahoma,geneva,sans-serif'));
  984. list.appendChild(createFont('Times New Roman', 'times new roman,times,serif'));
  985. list.appendChild(createFont('Trebuchet MS', 'trebuchet ms,helvetica,sans-serif'));
  986. list.appendChild(createFont('Verdana', 'verdana,geneva,sans-serif'));
  987. }));
  988. }));
  989. });
  990.  
  991. document.body.appendChild(fontDropdown);
  992. }
  993.  
  994. function createSizeDropdown() {
  995. function createSize(size, id) {
  996. return createElement('li', function(font) {
  997. font.className = 'cke_panel_listItem';
  998.  
  999. font.appendChild(createElement('a', function(link) {
  1000. link.className = 'dropdown-link';
  1001. link.href = 'javascript:void(\'' + size.toString() + '\')';
  1002. link.title = size.toString();
  1003. link.id = 'Size_' + id;
  1004. link.appendChild(createElement('span', function(span) {
  1005. span.style.fontSize = size + 'px';
  1006. span.appendChild(document.createTextNode(size.toString()));
  1007. }));
  1008. }));
  1009. });
  1010. }
  1011.  
  1012. var sizeDropdown = createElement('div', function(dropdown) {
  1013. dropdown.id = 'size-dropdown';
  1014. dropdown.className = 'cke_panel cke_ltr cke_rcombopanel size-dropdown plaintextBBCode-dropdown';
  1015.  
  1016. dropdown.appendChild(createElement('div', function(block) {
  1017. block.className = 'cke_panel_block';
  1018.  
  1019. block.appendChild(createElement('h1', function(title) {
  1020. title.className = 'cke_panel_grouptitle';
  1021. title.appendChild(document.createTextNode('Font Size'));
  1022. }));
  1023.  
  1024. block.appendChild(createElement('ul', function(list) {
  1025. list.className = 'cke_panel_list';
  1026.  
  1027. list.appendChild(createSize(8, 1));
  1028. list.appendChild(createSize(10, 2));
  1029. list.appendChild(createSize(12, 3));
  1030. list.appendChild(createSize(14, 4));
  1031. list.appendChild(createSize(18, 5));
  1032. list.appendChild(createSize(24, 6));
  1033. list.appendChild(createSize(36, 7));
  1034. list.appendChild(createSize(48, 8));
  1035. }));
  1036. }));
  1037. });
  1038.  
  1039. document.body.appendChild(sizeDropdown);
  1040. }
  1041.  
  1042. function createColorDropdown() {
  1043. function createColor(name, color) {
  1044. return createElement('td', function(cell) {
  1045. cell.style.padding = '0px';
  1046. cell.appendChild(createElement('a', function(link) {
  1047. link.className = 'cke_colorbox';
  1048. link.title = name;
  1049. link.href = 'javascript:void(\'' + name + '\')';
  1050. link.appendChild(createElement('span', function(value) {
  1051. value.className = 'cke_colorbox';
  1052. value.style.backgroundColor = color;
  1053. }));
  1054. }));
  1055. });
  1056. }
  1057.  
  1058. var colors = [ { 'title': 'Black', 'color': '#000000' }, { 'title': 'Maroon', 'color': '#800000' }, { 'title': 'Saddle Brown', 'color': '#8b4513' }, { 'title': 'Dark Slate Gray', 'color': '#2f4f4f' }, { 'title': 'Teal', 'color': '#008080' }, { 'title': 'Navy', 'color': '#000080' }, { 'title': 'Indigo', 'color': '#4b0082' }, { 'title': 'Dark Gray', 'color': '#696969' }, { 'title': 'Fire Brick', 'color': '#b22222' }, { 'title': 'Brown', 'color': '#a52a2a' }, { 'title': 'Golden Rod', 'color': '#daa520' }, { 'title': 'Dark Green', 'color': '#006400' }, { 'title': 'Turquoise', 'color': '#40e0d0' }, { 'title': 'Medium Blue', 'color': '#0000cd' }, { 'title': 'Purple', 'color': '#800080' }, { 'title': 'Gray', 'color': '#808080' }, { 'title': 'Red', 'color': '#ff0000' }, { 'title': 'Dark Orange', 'color': '#ff8c00' }, { 'title': 'Gold', 'color': '#ffd700' }, { 'title': 'Green', 'color': '#008000' }, { 'title': 'Cyan', 'color': '#00ffff' }, { 'title': 'Blue', 'color': '#0000ff' }, { 'title': 'Violet', 'color': '#ee82ee' }, { 'title': 'Dim Gray', 'color': '#a9a9a9' }, { 'title': 'Light Salmon', 'color': '#ffa07a' }, { 'title': 'Orange', 'color': '#ffa500' }, { 'title': 'Yellow', 'color': '#ffff00' }, { 'title': 'Lime', 'color': '#00ff00' }, { 'title': 'Pale Turquoise', 'color': '#afeeee' }, { 'title': 'Light Blue', 'color': '#add8e6' }, { 'title': 'Plum', 'color': '#dda0dd' }, { 'title': 'Light Gray', 'color': '#d3d3d3' }, { 'title': 'Lavender Blush', 'color': '#fff0f5' }, { 'title': 'Antique White', 'color': '#faebd7' }, { 'title': 'Light Yellow', 'color': '#ffffe0' }, { 'title': 'Honeydew', 'color': '#f0fff0' }, { 'title': 'Azure', 'color': '#f0ffff' }, { 'title': 'Alice Blue', 'color': '#f0f8ff' }, { 'title': 'Lavender', 'color': '#e6e6fa' }, { 'title': 'White', 'color': '#ffffff' } ],
  1059. buffer = [0, 8],
  1060. i = 0;
  1061.  
  1062. var colorDropdown = createElement('div', function(dropdown) {
  1063. dropdown.id = 'color-dropdown';
  1064. dropdown.className = 'cke_panel cke_ltr color-dropdown plaintextBBCode-dropdown';
  1065.  
  1066. dropdown.appendChild(createElement('div', function(block) {
  1067. block.className = 'cke_panel_block cke_colorblock cke_frameLoaded';
  1068.  
  1069. block.appendChild(createElement('a', function(auto) {
  1070. auto.className = 'cke_colorauto';
  1071. auto.title = 'Automatic';
  1072. auto.href = 'javascript:void(\'Automatic\')';
  1073.  
  1074. auto.appendChild(createElement('table', function(table) {
  1075. table.setAttribute('cellspacing', 0);
  1076. table.setAttribute('cellpadding', 0);
  1077. table.width = '100%';
  1078.  
  1079. table.appendChild(createElement('tbody', function(tbody) {
  1080. tbody.appendChild(createElement('tr', function(row) {
  1081. row.appendChild(createElement('td', function(color) {
  1082. color.style.padding = '0px';
  1083.  
  1084. color.appendChild(createElement('span', function(span) {
  1085. span.className = 'cke_colorbox';
  1086. span.style.backgroundColor = '#222222';
  1087. }));
  1088. }));
  1089.  
  1090. row.appendChild(createElement('td', function(name) {
  1091. name.style.padding = '0px';
  1092. name.setAttribute('colspan', 7);
  1093. name.align = 'center';
  1094. name.appendChild(document.createTextNode('Automatic'));
  1095. }));
  1096. }));
  1097. }));
  1098. }));
  1099. }));
  1100.  
  1101. block.appendChild(createElement('table', function(colorstable) {
  1102. colorstable.setAttribute('cellspacing', 0);
  1103. colorstable.setAttribute('cellpadding', 0);
  1104. colorstable.width = '100%';
  1105.  
  1106. colorstable.appendChild(createElement('tbody', function(body) {
  1107. body.appendChild(createElement('tr', function(row) {
  1108. for (i = buffer[0]; i < buffer[1]; i++) {
  1109. row.appendChild(createColor(colors[i].title, colors[i].color));
  1110. }
  1111. }));
  1112.  
  1113. buffer[0] += 8;
  1114. buffer[1] += 8;
  1115.  
  1116. body.appendChild(createElement('tr', function(row) {
  1117. for (i = buffer[0]; i < buffer[1]; i++) {
  1118. row.appendChild(createColor(colors[i].title, colors[i].color));
  1119. }
  1120. }));
  1121.  
  1122. buffer[0] += 8;
  1123. buffer[1] += 8;
  1124.  
  1125. body.appendChild(createElement('tr', function(row) {
  1126. for (i = buffer[0]; i < buffer[1]; i++) {
  1127. row.appendChild(createColor(colors[i].title, colors[i].color));
  1128. }
  1129. }));
  1130.  
  1131. buffer[0] += 8;
  1132. buffer[1] += 8;
  1133.  
  1134. body.appendChild(createElement('tr', function(row) {
  1135. for (i = buffer[0]; i < buffer[1]; i++) {
  1136. row.appendChild(createColor(colors[i].title, colors[i].color));
  1137. }
  1138. }));
  1139.  
  1140. buffer[0] += 8;
  1141. buffer[1] += 8;
  1142.  
  1143. body.appendChild(createElement('tr', function(row) {
  1144. for (i = buffer[0]; i < buffer[1]; i++) {
  1145. row.appendChild(createColor(colors[i].title, colors[i].color));
  1146. }
  1147. }));
  1148.  
  1149. body.appendChild(createElement('tr', function(row) {
  1150. row.appendChild(createElement('td', function(colormore) {
  1151. colormore.style.padding = '0px';
  1152. colormore.setAttribute('colspan', 8);
  1153. colormore.align = 'center';
  1154.  
  1155. colormore.appendChild(createElement('a', function(link) {
  1156. link.className = 'cke_colormore';
  1157. link.title = 'More Colors...';
  1158. link.href = 'javascript:void(\'More Colors...\')';
  1159. link.appendChild(document.createTextNode('More Colors...'));
  1160. }));
  1161. }));
  1162. }));
  1163. }));
  1164. }));
  1165. }));
  1166. });
  1167.  
  1168. document.body.appendChild(colorDropdown);
  1169. }
  1170.  
  1171. function createColorMoreRequest() {
  1172. function createColorMore(color) {
  1173. return createElement('td', function(colorMore) {
  1174. colorMore.className = 'ColorCell';
  1175. colorMore.style.backgroundColor = color;
  1176. colorMore.style.border = '1px solid ' + color;
  1177. colorMore.style.width = '14px';
  1178. colorMore.style.height = '14px';
  1179. colorMore.appendChild(createElement('span', function(value) {
  1180. value.className = 'cke_voice_label';
  1181. value.appendChild(document.createTextNode(color));
  1182. }));
  1183. });
  1184. }
  1185.  
  1186. createDialogCSS();
  1187. var colors = [ { 'color': '#000000' }, { 'color': '#003300' }, { 'color': '#006600' }, { 'color': '#009900' }, { 'color': '#00cc00' }, { 'color': '#00ff00' }, { 'color': '#330000' }, { 'color': '#333300' }, { 'color': '#336600' }, { 'color': '#339900' }, { 'color': '#33cc00' }, { 'color': '#33ff00' }, { 'color': '#660000' }, { 'color': '#663300' }, { 'color': '#666600' }, { 'color': '#669900' }, { 'color': '#66cc00' }, { 'color': '#66ff00' }, { 'color': '#000033' }, { 'color': '#003333' }, { 'color': '#006633' }, { 'color': '#009933' }, { 'color': '#00cc33' }, { 'color': '#00ff33' }, { 'color': '#330033' }, { 'color': '#333333' }, { 'color': '#336633' }, { 'color': '#339933' }, { 'color': '#33cc33' }, { 'color': '#33ff33' }, { 'color': '#660033' }, { 'color': '#663333' }, { 'color': '#666633' }, { 'color': '#669933' }, { 'color': '#66cc33' }, { 'color': '#66ff33' }, { 'color': '#000066' }, { 'color': '#003366' }, { 'color': '#006666' }, { 'color': '#009966' }, { 'color': '#00cc66' }, { 'color': '#00ff66' }, { 'color': '#330066' }, { 'color': '#333366' }, { 'color': '#336666' }, { 'color': '#339966' }, { 'color': '#33cc66' }, { 'color': '#33ff66' }, { 'color': '#660066' }, { 'color': '#663366' }, { 'color': '#666666' }, { 'color': '#669966' }, { 'color': '#66cc66' }, { 'color': '#66ff66' }, { 'color': '#000099' }, { 'color': '#003399' }, { 'color': '#006699' }, { 'color': '#009999' }, { 'color': '#00cc99' }, { 'color': '#00ff99' }, { 'color': '#330099' }, { 'color': '#333399' }, { 'color': '#336699' }, { 'color': '#339999' }, { 'color': '#33cc99' }, { 'color': '#33ff99' }, { 'color': '#660099' }, { 'color': '#663399' }, { 'color': '#666699' }, { 'color': '#669999' }, { 'color': '#66cc99' }, { 'color': '#66ff99' }, { 'color': '#0000cc' }, { 'color': '#0033cc' }, { 'color': '#0066cc' }, { 'color': '#0099cc' }, { 'color': '#00cccc' }, { 'color': '#00ffcc' }, { 'color': '#3300cc' }, { 'color': '#3333cc' }, { 'color': '#3366cc' }, { 'color': '#3399cc' }, { 'color': '#33cccc' }, { 'color': '#33ffcc' }, { 'color': '#6600cc' }, { 'color': '#6633cc' }, { 'color': '#6666cc' }, { 'color': '#6699cc' }, { 'color': '#66cccc' }, { 'color': '#66ffcc' }, { 'color': '#0000ff' }, { 'color': '#0033ff' }, { 'color': '#0066ff' }, { 'color': '#0099ff' }, { 'color': '#00ccff' }, { 'color': '#00ffff' }, { 'color': '#3300ff' }, { 'color': '#3333ff' }, { 'color': '#3366ff' }, { 'color': '#3399ff' }, { 'color': '#33ccff' }, { 'color': '#33ffff' }, { 'color': '#6600ff' }, { 'color': '#6633ff' }, { 'color': '#6666ff' }, { 'color': '#6699ff' }, { 'color': '#66ccff' }, { 'color': '#66ffff' }, { 'color': '#990000' }, { 'color': '#993300' }, { 'color': '#996600' }, { 'color': '#999900' }, { 'color': '#99cc00' }, { 'color': '#99ff00' }, { 'color': '#cc0000' }, { 'color': '#cc3300' }, { 'color': '#cc6600' }, { 'color': '#cc9900' }, { 'color': '#cccc00' }, { 'color': '#ccff00' }, { 'color': '#ff0000' }, { 'color': '#ff3300' }, { 'color': '#ff6600' }, { 'color': '#ff9900' }, { 'color': '#ffcc00' }, { 'color': '#ffff00' }, { 'color': '#990033' }, { 'color': '#993333' }, { 'color': '#996633' }, { 'color': '#999933' }, { 'color': '#99cc33' }, { 'color': '#99ff33' }, { 'color': '#cc0033' }, { 'color': '#cc3333' }, { 'color': '#cc6633' }, { 'color': '#cc9933' }, { 'color': '#cccc33' }, { 'color': '#ccff33' }, { 'color': '#ff0033' }, { 'color': '#ff3333' }, { 'color': '#ff6633' }, { 'color': '#ff9933' }, { 'color': '#ffcc33' }, { 'color': '#ffff33' }, { 'color': '#990066' }, { 'color': '#993366' }, { 'color': '#996666' }, { 'color': '#999966' }, { 'color': '#99cc66' }, { 'color': '#99ff66' }, { 'color': '#cc0066' }, { 'color': '#cc3366' }, { 'color': '#cc6666' }, { 'color': '#cc9966' }, { 'color': '#cccc66' }, { 'color': '#ccff66' }, { 'color': '#ff0066' }, { 'color': '#ff3366' }, { 'color': '#ff6666' }, { 'color': '#ff9966' }, { 'color': '#ffcc66' }, { 'color': '#ffff66' }, { 'color': '#990099' }, { 'color': '#993399' }, { 'color': '#996699' }, { 'color': '#999999' }, { 'color': '#99cc99' }, { 'color': '#99ff99' }, { 'color': '#cc0099' }, { 'color': '#cc3399' }, { 'color': '#cc6699' }, { 'color': '#cc9999' }, { 'color': '#cccc99' }, { 'color': '#ccff99' }, { 'color': '#ff0099' }, { 'color': '#ff3399' }, { 'color': '#ff6699' }, { 'color': '#ff9999' }, { 'color': '#ffcc99' }, { 'color': '#ffff99' }, { 'color': '#9900cc' }, { 'color': '#9933cc' }, { 'color': '#9966cc' }, { 'color': '#9999cc' }, { 'color': '#99cccc' }, { 'color': '#99ffcc' }, { 'color': '#cc00cc' }, { 'color': '#cc33cc' }, { 'color': '#cc66cc' }, { 'color': '#cc99cc' }, { 'color': '#cccccc' }, { 'color': '#ccffcc' }, { 'color': '#ff00cc' }, { 'color': '#ff33cc' }, { 'color': '#ff66cc' }, { 'color': '#ff99cc' }, { 'color': '#ffcccc' }, { 'color': '#ffffcc' }, { 'color': '#9900ff' }, { 'color': '#9933ff' }, { 'color': '#9966ff' }, { 'color': '#9999ff' }, { 'color': '#99ccff' }, { 'color': '#99ffff' }, { 'color': '#cc00ff' }, { 'color': '#cc33ff' }, { 'color': '#cc66ff' }, { 'color': '#cc99ff' }, { 'color': '#ccccff' }, { 'color': '#ccffff' }, { 'color': '#ff00ff' }, { 'color': '#ff33ff' }, { 'color': '#ff66ff' }, { 'color': '#ff99ff' }, { 'color': '#ffccff' }, { 'color': '#ffffff' }, { 'color': '#000000' }, { 'color': '#333333' }, { 'color': '#666666' }, { 'color': '#999999' }, { 'color': '#cccccc' }, { 'color': '#ffffff' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' }, { 'color': '#000000' } ],
  1188. buffer = [0, 18],
  1189. i = 0;
  1190.  
  1191. var colorMoreRequest = createElement('div', function(request) {
  1192. request.className = 'cke_skin_ips plaintextBBCodeRequest';
  1193. request.id = 'colorMore-request';
  1194. request.style.display = 'none';
  1195. request.style.position = 'fixed';
  1196. request.style.top = '0px';
  1197. request.style.left = '0px';
  1198. request.style.width = '400px';
  1199. request.style.backgroundColor = '#fff';
  1200.  
  1201. request.appendChild(createElement('div', function(body) {
  1202. body.className = 'cke_dialog_body';
  1203.  
  1204. body.appendChild(createElement('div', function(handle) {
  1205. handle.className = 'request-type cke_dialog_title';
  1206. handle.appendChild(document.createTextNode('Select color'));
  1207. }));
  1208.  
  1209. body.appendChild(createElement('a', function(close) {
  1210. close.className = 'cke_dialog_close_button';
  1211. close.href = 'javascript:void(0)';
  1212. close.title = 'Close';
  1213. close.appendChild(createElement('span', function(span) {
  1214. span.className = 'cke_label';
  1215. span.appendChild(document.createTextNode('X'));
  1216. }));
  1217. }));
  1218.  
  1219. body.appendChild(createElement('div', function(content_table) {
  1220. content_table.className = 'cke_dialog_contents';
  1221. content_table.appendChild(createElement('tbody', function(content_tbody) {
  1222. content_tbody.appendChild(createElement('tr', function(content_row) {
  1223. content_row.appendChild(createElement('td', function(content_cell) {
  1224. content_cell.className = 'cke_dialog_contents';
  1225. content_cell.style.width = '360px';
  1226. content_cell.style.height = '220px';
  1227. content_cell.appendChild(createElement('div', function(content_page) {
  1228. content_page.className = 'cke_dialog_ui_vbox cke_dialog_page_contents';
  1229. content_page.style.width = '100%';
  1230. content_page.style.height = '100%';
  1231. content_page.appendChild(createElement('table', function(content_page_table) {
  1232. content_page_table.align = 'left';
  1233. content_page_table.border = '0';
  1234. content_page_table.setAttribute('cellspacing', '0');
  1235. content_page_table.style.width = '100%';
  1236. content_page_table.appendChild(createElement('tbody', function(content_page_tbody) {
  1237. content_page_tbody.appendChild(createElement('tr', function(content_page_row) {
  1238. content_page_row.appendChild(createElement('td', function(content_page_cell) {
  1239. content_page_cell.className = 'cke_dialog_ui_vbox_child';
  1240. content_page_cell.appendChild(createElement('table', function(content_page_cell_table) {
  1241. content_page_cell_table.className = 'cke_dialog_ui_hbox';
  1242. content_page_cell_table.appendChild(createElement('tbody', function(content_page_cell_tbody) {
  1243. content_page_cell_tbody.appendChild(createElement('tr', function(content_page_cell_row) {
  1244. content_page_cell_row.className = 'cke_dialog_ui_hbox';
  1245. content_page_cell_row.appendChild(createElement('td', function(content_page_cell_cell) {
  1246. content_page_cell_cell.className = 'cke_dialog_ui_hbox_first';
  1247. content_page_cell_cell.style.width = '70%';
  1248. content_page_cell_cell.style.padding = '0';
  1249. content_page_cell_cell.appendChild(createElement('div', function(content_page_cell_cell_box) {
  1250. content_page_cell_cell_box.className = 'cke_dialog_ui_html';
  1251. content_page_cell_cell_box.appendChild(createElement('table', function(content_page_cell_cell_table) {
  1252. content_page_cell_cell_table.setAttribute('cellspacing', '0');
  1253. content_page_cell_cell_table.setAttribute('style', 'border-collapse: separate;');
  1254.  
  1255. content_page_cell_cell_table.appendChild(createElement('caption', function(caption) {
  1256. caption.className = 'cke_voice_label';
  1257. caption.appendChild(document.createTextNode('Color Options'));
  1258. }));
  1259.  
  1260. content_page_cell_cell_table.appendChild(createElement('tbody', function(content_page_cell_cell_tbody) {
  1261. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1262. for (i = buffer[0]; i < buffer[1]; i++) {
  1263. color_row.appendChild(createColorMore(colors[i].color));
  1264. }
  1265. }));
  1266.  
  1267. buffer[0] += 18;
  1268. buffer[1] += 18;
  1269.  
  1270. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1271. for (i = buffer[0]; i < buffer[1]; i++) {
  1272. color_row.appendChild(createColorMore(colors[i].color));
  1273. }
  1274. }));
  1275.  
  1276. buffer[0] += 18;
  1277. buffer[1] += 18;
  1278.  
  1279. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1280. for (i = buffer[0]; i < buffer[1]; i++) {
  1281. color_row.appendChild(createColorMore(colors[i].color));
  1282. }
  1283. }));
  1284.  
  1285. buffer[0] += 18;
  1286. buffer[1] += 18;
  1287.  
  1288. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1289. for (i = buffer[0]; i < buffer[1]; i++) {
  1290. color_row.appendChild(createColorMore(colors[i].color));
  1291. }
  1292. }));
  1293.  
  1294. buffer[0] += 18;
  1295. buffer[1] += 18;
  1296.  
  1297. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1298. for (i = buffer[0]; i < buffer[1]; i++) {
  1299. color_row.appendChild(createColorMore(colors[i].color));
  1300. }
  1301. }));
  1302.  
  1303. buffer[0] += 18;
  1304. buffer[1] += 18;
  1305.  
  1306. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1307. for (i = buffer[0]; i < buffer[1]; i++) {
  1308. color_row.appendChild(createColorMore(colors[i].color));
  1309. }
  1310. }));
  1311.  
  1312. buffer[0] += 18;
  1313. buffer[1] += 18;
  1314.  
  1315. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1316. for (i = buffer[0]; i < buffer[1]; i++) {
  1317. color_row.appendChild(createColorMore(colors[i].color));
  1318. }
  1319. }));
  1320.  
  1321. buffer[0] += 18;
  1322. buffer[1] += 18;
  1323.  
  1324. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1325. for (i = buffer[0]; i < buffer[1]; i++) {
  1326. color_row.appendChild(createColorMore(colors[i].color));
  1327. }
  1328. }));
  1329.  
  1330. buffer[0] += 18;
  1331. buffer[1] += 18;
  1332.  
  1333. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1334. for (i = buffer[0]; i < buffer[1]; i++) {
  1335. color_row.appendChild(createColorMore(colors[i].color));
  1336. }
  1337. }));
  1338.  
  1339. buffer[0] += 18;
  1340. buffer[1] += 18;
  1341.  
  1342. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1343. for (i = buffer[0]; i < buffer[1]; i++) {
  1344. color_row.appendChild(createColorMore(colors[i].color));
  1345. }
  1346. }));
  1347.  
  1348. buffer[0] += 18;
  1349. buffer[1] += 18;
  1350.  
  1351. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1352. for (i = buffer[0]; i < buffer[1]; i++) {
  1353. color_row.appendChild(createColorMore(colors[i].color));
  1354. }
  1355. }));
  1356.  
  1357. buffer[0] += 18;
  1358. buffer[1] += 18;
  1359.  
  1360. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1361. for (i = buffer[0]; i < buffer[1]; i++) {
  1362. color_row.appendChild(createColorMore(colors[i].color));
  1363. }
  1364. }));
  1365.  
  1366. buffer[0] += 18;
  1367. buffer[1] += 18;
  1368.  
  1369. content_page_cell_cell_tbody.appendChild(createElement('tr', function(color_row) {
  1370. for (i = buffer[0]; i < buffer[1]; i++) {
  1371. color_row.appendChild(createColorMore(colors[i].color));
  1372. }
  1373. }));
  1374. }));
  1375. }));
  1376. }));
  1377. }));
  1378. content_page_cell_row.appendChild(createElement('td', function(content_page_cell_cell) {
  1379. content_page_cell_cell.className = 'cke_dialog_ui_hbox_child';
  1380. content_page_cell_cell.style.width = '10%';
  1381. content_page_cell_cell.style.padding = '0';
  1382. content_page_cell_cell.appendChild(createElement('span', function(span) {
  1383. span.className = 'cke_dialog_ui_html';
  1384. span.appendChild(document.createTextNode('\u00a0'));
  1385. }));
  1386. }));
  1387.  
  1388. content_page_cell_row.appendChild(createElement('td', function(content_page_cell_cell) {
  1389. content_page_cell_cell.className = 'cke_dialog_ui_hbox_last';
  1390. content_page_cell_cell.style.width = '30%';
  1391. content_page_cell_cell.style.padding = '0';
  1392. content_page_cell_cell.appendChild(createElement('div', function(content_page_cell_cell_box) {
  1393. content_page_cell_cell_box.className = 'cke_dialog_ui_vbox';
  1394. content_page_cell_cell_box.appendChild(createElement('table', function(content_page_cell_cell_table) {
  1395. content_page_cell_cell_table.align = 'left';
  1396. content_page_cell_cell_table.border = '0';
  1397. content_page_cell_cell_table.setAttribute('cellspacing', '0');
  1398. content_page_cell_cell_table.style.width = '100%';
  1399. content_page_cell_cell_table.appendChild(createElement('tbody', function(content_page_cell_cell_tbody) {
  1400. content_page_cell_cell_tbody.appendChild(createElement('tr', function(content_page_cell_cell_row) {
  1401. content_page_cell_cell_row.appendChild(createElement('td', function(content_page_cell_cell_cell) {
  1402. content_page_cell_cell_cell.className = 'cke_dialog_ui_vbox_child';
  1403. content_page_cell_cell_cell.style.padding = '0';
  1404. content_page_cell_cell_cell.appendChild(createElement('span', function(span) {
  1405. span.className = 'cke_dialog_ui_html';
  1406. span.appendChild(document.createTextNode('Highlight'));
  1407. }));
  1408.  
  1409. content_page_cell_cell_cell.appendChild(createElement('div', function(previewbox) {
  1410. previewbox.className = 'color-preview';
  1411. previewbox.style.border = '1px solid';
  1412. previewbox.style.width = '74px';
  1413. previewbox.style.height = '74px';
  1414. previewbox.style.backgroundColor = '#000';
  1415. }));
  1416.  
  1417. content_page_cell_cell_cell.appendChild(createElement('div', function(previewvalue) {
  1418. previewvalue.id = 'colorMore-preview-value';
  1419. previewvalue.appendChild(document.createTextNode('#000000'));
  1420. }));
  1421.  
  1422. content_page_cell_cell_cell.appendChild(createElement('span', function(span) {
  1423. span.appendChild(document.createTextNode('Selected Color'));
  1424. }));
  1425.  
  1426. content_page_cell_cell_cell.appendChild(createElement('div', function(selectedbox) {
  1427. selectedbox.className = 'selected-preview';
  1428. selectedbox.style.border = '1px solid';
  1429. selectedbox.style.width = '74px';
  1430. selectedbox.style.height = '20px';
  1431. }));
  1432. }));
  1433. }));
  1434.  
  1435. content_page_cell_cell_tbody.appendChild(createElement('tr', function(content_page_cell_cell_row) {
  1436. content_page_cell_cell_row.appendChild(createElement('td', function(content_page_cell_cell_cell) {
  1437. content_page_cell_cell_cell.className = 'cke_dialog_ui_vbox_child';
  1438. content_page_cell_cell_cell.style.padding = '0';
  1439. content_page_cell_cell_cell.appendChild(createElement('div', function(selectedcont) {
  1440. selectedcont.className = 'cke_dialog_ui_text';
  1441. selectedcont.style.width = '74px';
  1442. selectedcont.appendChild(createElement('label', function(selectedlabel) {
  1443. selectedlabel.className = 'cke_dialog_ui_labeled_label';
  1444. selectedlabel.style.display = 'none';
  1445. selectedlabel.appendChild(document.createTextNode('Selected Color'));
  1446. }));
  1447.  
  1448. selectedcont.appendChild(createElement('div', function(labelcontent) {
  1449. labelcontent.className = 'cke_dialog_ui_labeled_content';
  1450. labelcontent.appendChild(createElement('div', function(inputcont) {
  1451. inputcont.className = 'cke_dialog_ui_input_text';
  1452. inputcont.appendChild(createElement('input', function(input) {
  1453. input.id = 'colorMore-input';
  1454. input.className = 'cke_dialog_ui_input_text';
  1455. input.type = 'text';
  1456. }));
  1457. }));
  1458. }));
  1459. }));
  1460. }));
  1461. }));
  1462.  
  1463. content_page_cell_cell_tbody.appendChild(createElement('tr', function(content_page_cell_cell_row) {
  1464. content_page_cell_cell_row.appendChild(createElement('td', function(content_page_cell_cell_cell) {
  1465. content_page_cell_cell_cell.className = 'cke_dialog_ui_vbox_child';
  1466. content_page_cell_cell_cell.style.padding = '0';
  1467. content_page_cell_cell_cell.appendChild(createElement('span', function(span) {
  1468. span.className = 'cke_dialog_ui_html';
  1469. span.appendChild(document.createTextNode('\u00a0'));
  1470. }));
  1471. }));
  1472. }));
  1473.  
  1474. content_page_cell_cell_tbody.appendChild(createElement('tr', function(content_page_cell_cell_row) {
  1475. content_page_cell_cell_row.appendChild(createElement('td', function(content_page_cell_cell_cell) {
  1476. content_page_cell_cell_cell.className = 'cke_dialog_ui_vbox_child';
  1477. content_page_cell_cell_cell.style.padding = '0';
  1478. content_page_cell_cell_cell.appendChild(createElement('a', function(clear) {
  1479. clear.className = 'cke_dialog_ui_button clear_button';
  1480. clear.href = 'javascript:void(0)';
  1481. clear.style.marginTop = '5px';
  1482. clear.title = 'Clear';
  1483. clear.appendChild(createElement('span', function(span) {
  1484. span.className = 'cke_dialog_ui_button';
  1485. span.appendChild(document.createTextNode('Clear'));
  1486. }));
  1487. }));
  1488. }));
  1489. }));
  1490. }));
  1491. }));
  1492. }));
  1493. }));
  1494. }));
  1495. }));
  1496. }));
  1497. }));
  1498. }));
  1499. }));
  1500. }));
  1501. }));
  1502. }));
  1503. }));
  1504.  
  1505. content_tbody.appendChild(createElement('tr', function(content_row) {
  1506. content_row.appendChild(createElement('td', function(content_cell) {
  1507. content_cell.className = 'cke_dialog_footer';
  1508. content_cell.appendChild(createElement('table', function(footer) {
  1509. footer.className = 'cke_dialog_ui_hbox cke_dialog_footer_buttons';
  1510. footer.appendChild(createElement('tbody', function(footer_tbody) {
  1511. footer_tbody.appendChild(createElement('tr', function(footer_row) {
  1512. footer_row.className = 'cke_dialog_ui_hbox';
  1513. footer_row.appendChild(createElement('td', function(okay) {
  1514. okay.className = 'cke_dialog_ui_hbox_first';
  1515. okay.style.paddingRight = '10px';
  1516. okay.appendChild(createElement('a', function(button) {
  1517. button.className = 'cke_dialog_ui_button cke_dialog_ui_button_ok';
  1518. button.href = 'javascript:void(0)';
  1519. button.title = 'OK';
  1520. button.appendChild(createElement('span', function(span) {
  1521. span.className = 'cke_dialog_ui_button';
  1522. span.appendChild(document.createTextNode('OK'));
  1523. }));
  1524. }));
  1525. }));
  1526.  
  1527. footer_row.appendChild(createElement('td', function(cancel) {
  1528. cancel.className = 'cke_dialog_ui_hbox_first';
  1529. cancel.appendChild(createElement('a', function(button) {
  1530. button.className = 'cke_dialog_ui_button cke_dialog_ui_button_cancel';
  1531. button.href = 'javascript:void(0)';
  1532. button.title = 'Cancel';
  1533. button.appendChild(createElement('span', function(span) {
  1534. span.className = 'cke_dialog_ui_button';
  1535. span.appendChild(document.createTextNode('Cancel'));
  1536. }));
  1537. }));
  1538. }));
  1539. }));
  1540. }));
  1541. }));
  1542. }));
  1543. }));
  1544. }));
  1545. }));
  1546. }));
  1547. });
  1548.  
  1549. // Prepend
  1550.  
  1551. document.body.appendChild(colorMoreRequest);
  1552.  
  1553. runInGlobal('colorMoreRequestDrag = new Draggable(\'colorMore-request\', { handle: \'request-type\', starteffect: null, endeffect: null });');
  1554.  
  1555. createRequestBackground();
  1556.  
  1557. var ColorCellHightlightHandler = function() {
  1558. var colorPreview = document.getElementById('colorMore-request').getElementsByClassName('color-preview')[0],
  1559. color = this.getElementsByTagName('span')[0].childNodes[0].nodeValue;
  1560.  
  1561. colorPreview.style.backgroundColor = color;
  1562. colorPreview.nextSibling.childNodes[0].nodeValue = color;
  1563. };
  1564.  
  1565. var ColorCellSelectHandler = function() {
  1566. var selectedCell = document.getElementById('colorMore-request').getElementsByClassName('selected-cell')[0] || null,
  1567. newColor = this.getElementsByTagName('span')[0].childNodes[0].nodeValue;
  1568.  
  1569. if (selectedCell != null) {
  1570. selectedCell.style.border = '1px solid ' + selectedCell.style.backgroundColor;
  1571. Classes.removeClass(selectedCell, 'selected-cell');
  1572. }
  1573.  
  1574. document.getElementById('colorMore-request').getElementsByClassName('selected-preview')[0].style.backgroundColor = newColor;
  1575. document.getElementById('colorMore-input').value = newColor;
  1576.  
  1577. this.style.border = '1px dotted #fff';
  1578. Classes.addClass(this, 'selected-cell');
  1579. this.focus();
  1580. };
  1581.  
  1582. var clearHandler = function() {
  1583. var selectedCell = document.getElementById('colorMore-request').getElementsByClassName('selected-cell')[0];
  1584.  
  1585. selectedCell.style.border = '1px solid ' + selectedCell.style.backgroundColor;
  1586. selectedCell.blur();
  1587. Classes.removeClass(selectedCell, 'selected-cell');
  1588.  
  1589. document.getElementById('colorMore-request').getElementsByClassName('selected-preview')[0].style.backgroundColor = '';
  1590. document.getElementById('colorMore-input').value = '';
  1591. };
  1592.  
  1593. var cells = document.getElementById('colorMore-request').getElementsByClassName('ColorCell'),
  1594. cell;
  1595.  
  1596. for (i = 0; i < cells.length; i++) {
  1597. cell = cells[i];
  1598. Events.selector(cell).add('mouseenter', 'highlightColor', ColorCellHightlightHandler, false);
  1599. Events.selector(cell).add('click', 'selectColor', ColorCellSelectHandler, false);
  1600. }
  1601.  
  1602. Events.selector(document.getElementById('colorMore-request').getElementsByClassName('clear_button')[0]).add('click', 'clearColor', clearHandler, false);
  1603.  
  1604. var requestClickHandler = function() {
  1605. fade(document.getElementById('colorMore-request'), 'out');
  1606. fade(document.getElementById('request-background'), 'out');
  1607. };
  1608.  
  1609. Events.selector(document.getElementById('colorMore-request').getElementsByClassName('cke_dialog_close_button')[0]).add('click', 'colorMoreRequest_fade', requestClickHandler, false);
  1610. Events.selector(document.getElementById('colorMore-request').getElementsByClassName('cke_dialog_footer')[0].getElementsByTagName('a')[0]).add('click', 'colorMoreRequest_fade', requestClickHandler, false);
  1611. Events.selector(document.getElementById('colorMore-request').getElementsByClassName('cke_dialog_footer')[0].getElementsByTagName('a')[1]).add('click', 'colorMoreRequest_fade', requestClickHandler, false);
  1612. }
  1613.  
  1614. function plaintextParser(editor) {
  1615. var buttons = editor.getElementsByClassName('cke_button'),
  1616. dropdowns = editor.getElementsByClassName('cke_rcombo'),
  1617. i = 0;
  1618.  
  1619. var plaintextBBCodeHandler = function() {
  1620. if (editor.getElementsByClassName('cke_source')[0] != null) {
  1621. var top = '0px',
  1622. self = this,
  1623. request,
  1624. dropdown,
  1625. buttonOffset,
  1626. buttonHeight,
  1627. windowScroll,
  1628. windowHeight,
  1629. dropdownHeight,
  1630. textArea = editor.getElementsByClassName('cke_source')[0],
  1631. selectedText;
  1632.  
  1633. switch (self.title) {
  1634. case 'Special BBCode':
  1635. if (request == null) {
  1636. createRequest();
  1637. }
  1638.  
  1639. request = document.getElementById('plaintext-request');
  1640.  
  1641. request.getElementsByClassName('request-type')[0].childNodes[0].nodeValue = 'Special BBCode';
  1642. request.getElementsByClassName('spec')[0].childNodes[0].nodeValue = 'BBCode';
  1643.  
  1644. empty(request.getElementsByClassName('fields')[0]);
  1645.  
  1646. // Make fields
  1647.  
  1648. var specialSelect = createElement('select', function(select) {
  1649. select.className = 'cke_dialog_ui_input_select sp_BBCode';
  1650. select.options[0] = new Option(' Please select', 'Default', true);
  1651. select.options[1] = new Option(' Acronym', 'Acronym');
  1652. select.options[2] = new Option(' Background-color', 'Background-color');
  1653. select.options[3] = new Option(' Horizontal Rule', 'Horizontal Rule');
  1654. select.options[4] = new Option(' Media', 'Media');
  1655. select.options[5] = new Option(' Member', 'Member');
  1656. select.options[6] = new Option(' Post Link', 'Post Link');
  1657. select.options[7] = new Option(' Spoiler', 'Spoiler');
  1658. select.options[8] = new Option(' Topic Link', 'Topic Link');
  1659. select.options[9] = new Option(' Twitter', 'Twitter');
  1660. }),
  1661. specialFields = createElement('div', function(fields) {
  1662. fields.className = 'sp_BBCode_fields';
  1663. fields.style.paddingTop = '5px';
  1664. });
  1665.  
  1666. request.getElementsByClassName('fields')[0].appendChild(specialSelect);
  1667. request.getElementsByClassName('fields')[0].appendChild(specialFields);
  1668.  
  1669. // Event
  1670.  
  1671. var selectSpecialBBCodeHandler = function() {
  1672. var select = this;
  1673.  
  1674. empty(select.nextSibling);
  1675.  
  1676. switch (select.options[select.selectedIndex].value) {
  1677. case 'Acronym':
  1678. (function () {
  1679. var descript = createElement('div', function(el) {
  1680. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1681. el.appendChild(document.createTextNode('Allows you to make an acronym that will display a description when moused over.'));
  1682. }),
  1683. inputbox = createElement('div', function(el) {
  1684. el.className = 'cke_dialog_ui_vbox_child';
  1685. el.appendChild(document.createTextNode('Enter the description for this acronym (EG: Laugh Out Loud)'));
  1686. el.appendChild(createElement('div', function(cont) {
  1687. cont.className = 'cke_dialog_ui_input_text';
  1688. cont.appendChild(createElement('input', function(input) {
  1689. input.className = 'cke_dialog_ui_input_text';
  1690. input.type = 'text';
  1691. }));
  1692. }));
  1693. }),
  1694. textbox = createElement('div', function(el) {
  1695. el.className = 'cke_dialog_ui_vbox_child';
  1696. el.style.paddingBottom = '0px';
  1697. el.appendChild(document.createTextNode('Enter the acronym (EG: lol)'));
  1698. el.appendChild(createElement('div', function(cont) {
  1699. cont.className = 'cke_dialog_ui_input_textarea';
  1700. cont.appendChild(createElement('textarea', function(text) {
  1701. text.className = 'cke_dialog_ui_input_textarea';
  1702. text.rows = 5;
  1703. text.cols = 20;
  1704. }));
  1705. }));
  1706. });
  1707.  
  1708. select.nextSibling.appendChild(descript);
  1709. select.nextSibling.appendChild(inputbox);
  1710. select.nextSibling.appendChild(textbox);
  1711. })();
  1712. break;
  1713. case 'Background-color':
  1714. (function () {
  1715. var descript = createElement('div', function(el) {
  1716. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1717. el.appendChild(document.createTextNode('Adds a background color behind the text.'));
  1718. }),
  1719. inputbox = createElement('div', function(el) {
  1720. el.className = 'cke_dialog_ui_vbox_child';
  1721. el.appendChild(document.createTextNode('Option'));
  1722. el.appendChild(createElement('div', function(cont) {
  1723. cont.className = 'cke_dialog_ui_input_text';
  1724. cont.appendChild(createElement('input', function(input) {
  1725. input.className = 'cke_dialog_ui_input_text';
  1726. input.type = 'text';
  1727. }));
  1728. }));
  1729. }),
  1730. textbox = createElement('div', function(el) {
  1731. el.className = 'cke_dialog_ui_vbox_child';
  1732. el.style.paddingBottom = '0px';
  1733. el.appendChild(document.createTextNode('Content'));
  1734. el.appendChild(createElement('div', function(cont) {
  1735. cont.className = 'cke_dialog_ui_input_textarea';
  1736. cont.appendChild(createElement('textarea', function(text) {
  1737. text.className = 'cke_dialog_ui_input_textarea';
  1738. text.rows = 5;
  1739. text.cols = 20;
  1740. }));
  1741. }));
  1742. });
  1743.  
  1744. select.nextSibling.appendChild(descript);
  1745. select.nextSibling.appendChild(inputbox);
  1746. select.nextSibling.appendChild(textbox);
  1747. })();
  1748. break;
  1749. case 'Horizontal Rule':
  1750. (function () {
  1751. var descript = createElement('div', function(el) {
  1752. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1753. el.appendChild(document.createTextNode('Adds a horizontal rule to separate text.'));
  1754. });
  1755.  
  1756. select.nextSibling.appendChild(descript);
  1757. })();
  1758. break;
  1759. case 'Media':
  1760. (function () {
  1761. var descript = createElement('div', function(el) {
  1762. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1763. el.appendChild(document.createTextNode('Allows a user to post media content from certain common media sites.'));
  1764. }),
  1765. inputbox = createElement('div', function(el) {
  1766. el.className = 'cke_dialog_ui_vbox_child';
  1767. el.appendChild(document.createTextNode('Dimensions (Flash Only)'));
  1768. el.appendChild(createElement('div', function(cont) {
  1769. cont.className = 'cke_dialog_ui_input_text';
  1770. cont.appendChild(createElement('input', function(input) {
  1771. input.className = 'cke_dialog_ui_input_text';
  1772. input.type = 'text';
  1773. }));
  1774. }));
  1775. }),
  1776. textbox = createElement('div', function(el) {
  1777. el.className = 'cke_dialog_ui_vbox_child';
  1778. el.style.paddingBottom = '0px';
  1779. el.appendChild(document.createTextNode('Media URL'));
  1780. el.appendChild(createElement('div', function(cont) {
  1781. cont.className = 'cke_dialog_ui_input_textarea';
  1782. cont.appendChild(createElement('textarea', function(text) {
  1783. text.className = 'cke_dialog_ui_input_textarea';
  1784. text.rows = 5;
  1785. text.cols = 20;
  1786. }));
  1787. }));
  1788. });
  1789.  
  1790. select.nextSibling.appendChild(descript);
  1791. select.nextSibling.appendChild(inputbox);
  1792. select.nextSibling.appendChild(textbox);
  1793. })();
  1794. break;
  1795. case 'Member':
  1796. (function () {
  1797. var descript = createElement('div', function(el) {
  1798. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1799. el.appendChild(document.createTextNode('Given a member name, a link is automatically generated to the member\'s profile.'));
  1800. }),
  1801. inputbox = createElement('div', function(el) {
  1802. el.className = 'cke_dialog_ui_vbox_child';
  1803. el.appendChild(document.createTextNode('Member Name'));
  1804. el.appendChild(createElement('div', function(cont) {
  1805. cont.className = 'cke_dialog_ui_input_text';
  1806. cont.appendChild(createElement('input', function(input) {
  1807. input.className = 'cke_dialog_ui_input_text';
  1808. input.type = 'text';
  1809. }));
  1810. }));
  1811. });
  1812.  
  1813. select.nextSibling.appendChild(descript);
  1814. select.nextSibling.appendChild(inputbox);
  1815. })();
  1816. break;
  1817. case 'Post Link':
  1818. (function () {
  1819. var descript = createElement('div', function(el) {
  1820. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1821. el.appendChild(document.createTextNode('This tag provides an easy way to link to a post.'));
  1822. }),
  1823. inputbox = createElement('div', function(el) {
  1824. el.className = 'cke_dialog_ui_vbox_child';
  1825. el.appendChild(document.createTextNode('Enter the Post ID'));
  1826. el.appendChild(createElement('div', function(cont) {
  1827. cont.className = 'cke_dialog_ui_input_text';
  1828. cont.appendChild(createElement('input', function(input) {
  1829. input.className = 'cke_dialog_ui_input_text';
  1830. input.type = 'text';
  1831. }));
  1832. }));
  1833. }),
  1834. textbox = createElement('div', function(el) {
  1835. el.className = 'cke_dialog_ui_vbox_child';
  1836. el.style.paddingBottom = '0px';
  1837. el.appendChild(document.createTextNode('Enter the title for this link'));
  1838. el.appendChild(createElement('div', function(cont) {
  1839. cont.className = 'cke_dialog_ui_input_textarea';
  1840. cont.appendChild(createElement('textarea', function(text) {
  1841. text.className = 'cke_dialog_ui_input_textarea';
  1842. text.rows = 5;
  1843. text.cols = 20;
  1844. }));
  1845. }));
  1846. });
  1847.  
  1848. select.nextSibling.appendChild(descript);
  1849. select.nextSibling.appendChild(inputbox);
  1850. select.nextSibling.appendChild(textbox);
  1851. })();
  1852. break;
  1853. case 'Spoiler':
  1854. (function () {
  1855. var descript = createElement('div', function(el) {
  1856. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1857. el.appendChild(document.createTextNode('Spoiler tag.'));
  1858. }),
  1859. inputbox = createElement('div', function(el) {
  1860. el.className = 'cke_dialog_ui_vbox_child';
  1861. el.appendChild(document.createTextNode('Option'));
  1862. el.appendChild(createElement('div', function(cont) {
  1863. cont.className = 'cke_dialog_ui_input_text';
  1864. cont.appendChild(createElement('input', function(input) {
  1865. input.className = 'cke_dialog_ui_input_text';
  1866. input.type = 'text';
  1867. }));
  1868. }));
  1869. }),
  1870. textbox = createElement('div', function(el) {
  1871. el.className = 'cke_dialog_ui_vbox_child';
  1872. el.style.paddingBottom = '0px';
  1873. el.appendChild(document.createTextNode('Enter the text to be masked'));
  1874. el.appendChild(createElement('div', function(cont) {
  1875. cont.className = 'cke_dialog_ui_input_textarea';
  1876. cont.appendChild(createElement('textarea', function(text) {
  1877. text.className = 'cke_dialog_ui_input_textarea';
  1878. text.rows = 5;
  1879. text.cols = 20;
  1880. }));
  1881. }));
  1882. });
  1883.  
  1884. select.nextSibling.appendChild(descript);
  1885. select.nextSibling.appendChild(inputbox);
  1886. select.nextSibling.appendChild(textbox);
  1887. })();
  1888. break;
  1889. case 'Topic Link':
  1890. (function () {
  1891. var descript = createElement('div', function(el) {
  1892. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1893. el.appendChild(document.createTextNode('This tag provides an easy way to link to a topic.'));
  1894. }),
  1895. inputbox = createElement('div', function(el) {
  1896. el.className = 'cke_dialog_ui_vbox_child';
  1897. el.appendChild(document.createTextNode('Enter the Topic ID'));
  1898. el.appendChild(createElement('div', function(cont) {
  1899. cont.className = 'cke_dialog_ui_input_text';
  1900. cont.appendChild(createElement('input', function(input) {
  1901. input.className = 'cke_dialog_ui_input_text';
  1902. input.type = 'text';
  1903. }));
  1904. }));
  1905. }),
  1906. textbox = createElement('div', function(el) {
  1907. el.className = 'cke_dialog_ui_vbox_child';
  1908. el.style.paddingBottom = '0px';
  1909. el.appendChild(document.createTextNode('Enter the title for this link'));
  1910. el.appendChild(createElement('div', function(cont) {
  1911. cont.className = 'cke_dialog_ui_input_textarea';
  1912. cont.appendChild(createElement('textarea', function(text) {
  1913. text.className = 'cke_dialog_ui_input_textarea';
  1914. text.rows = 5;
  1915. text.cols = 20;
  1916. }));
  1917. }));
  1918. });
  1919.  
  1920. select.nextSibling.appendChild(descript);
  1921. select.nextSibling.appendChild(inputbox);
  1922. select.nextSibling.appendChild(textbox);
  1923. })();
  1924. break;
  1925. case 'Twitter':
  1926. (function () {
  1927. var descript = createElement('div', function(el) {
  1928. el.className = 'cke_dialog_ui_vbox_child sp_BBCode_desc';
  1929. el.appendChild(document.createTextNode('A tag to link to a user\'s twitter account.'));
  1930. }),
  1931. textbox = createElement('div', function(el) {
  1932. el.className = 'cke_dialog_ui_vbox_child';
  1933. el.style.paddingBottom = '0px';
  1934. el.appendChild(document.createTextNode('Twitter Username'));
  1935. el.appendChild(createElement('div', function(cont) {
  1936. cont.className = 'cke_dialog_ui_input_textarea';
  1937. cont.appendChild(createElement('textarea', function(text) {
  1938. text.className = 'cke_dialog_ui_input_textarea';
  1939. text.rows = 5;
  1940. text.cols = 20;
  1941. }));
  1942. }));
  1943. });
  1944.  
  1945. select.nextSibling.appendChild(descript);
  1946. select.nextSibling.appendChild(textbox);
  1947. })();
  1948. break;
  1949. }
  1950.  
  1951. selectedText = getSelection(editor.getElementsByClassName('cke_source')[0]);
  1952.  
  1953. if (select.nextSibling.getElementsByTagName('textarea')[0] != null && selectedText.length) {
  1954. select.nextSibling.getElementsByTagName('textarea')[0].value = selectedText;
  1955. }
  1956. };
  1957.  
  1958. Events.selector(request.getElementsByClassName('sp_BBCode')[0]).add('change', 'selectSpecialBBCode', selectSpecialBBCodeHandler, false);
  1959.  
  1960. var SpecialBBCodeSubmitHandler = function() {
  1961. var select = request.getElementsByClassName('sp_BBCode')[0],
  1962. fields = select.nextSibling,
  1963. input,
  1964. textarea;
  1965.  
  1966. switch (select.options[select.selectedIndex].value) {
  1967. case 'Acronym':
  1968. input = fields.getElementsByTagName('input')[0].value;
  1969. textarea = fields.getElementsByTagName('textarea')[0];
  1970. wrapText(editor.getElementsByClassName('cke_source')[0], '[acronym=' + input + ']', '[/acronym]', textarea);
  1971. break;
  1972. case 'Background-color':
  1973. input = fields.getElementsByTagName('input')[0].value;
  1974. textarea = fields.getElementsByTagName('textarea')[0];
  1975. wrapText(editor.getElementsByClassName('cke_source')[0], '[background=' + input + ']', '[/background]', textarea);
  1976. break;
  1977. case 'Horizontal Rule':
  1978. wrapText(editor.getElementsByClassName('cke_source')[0], '[hr]', '');
  1979. break;
  1980. case 'Media':
  1981. input = fields.getElementsByTagName('input')[0].value;
  1982. textarea = fields.getElementsByTagName('textarea')[0];
  1983. wrapText(editor.getElementsByClassName('cke_source')[0], '[media=' + input + ']', '[/media]', textarea);
  1984. break;
  1985. case 'Member':
  1986. input = fields.getElementsByTagName('input')[0].value;
  1987. wrapText(editor.getElementsByClassName('cke_source')[0], '[member=' + input + ']', '');
  1988. break;
  1989. case 'Post Link':
  1990. input = fields.getElementsByTagName('input')[0].value;
  1991. textarea = fields.getElementsByTagName('textarea')[0];
  1992. wrapText(editor.getElementsByClassName('cke_source')[0], '[post=' + input + ']', '[/post]', textarea);
  1993. break;
  1994. case 'Spoiler':
  1995. input = fields.getElementsByTagName('input')[0].value;
  1996. textarea = fields.getElementsByTagName('textarea')[0];
  1997. if (input.length) {
  1998. wrapText(editor.getElementsByClassName('cke_source')[0], '[spoiler=' + input + ']', '[/spoiler]', textarea);
  1999. } else {
  2000. wrapText(editor.getElementsByClassName('cke_source')[0], '[spoiler]', '[/spoiler]', textarea);
  2001. }
  2002. break;
  2003. case 'Topic Link':
  2004. input = fields.getElementsByTagName('input')[0].value;
  2005. textarea = fields.getElementsByTagName('textarea')[0];
  2006. wrapText(editor.getElementsByClassName('cke_source')[0], '[topic=' + input + ']', '[/topic]', textarea);
  2007. break;
  2008. case 'Twitter':
  2009. textarea = fields.getElementsByTagName('textarea')[0];
  2010. wrapText(editor.getElementsByClassName('cke_source')[0], '[twitter]', '[/twitter]', textarea);
  2011. break;
  2012. }
  2013.  
  2014. Events.getEventsByName('submitSpecialBBCode').remove();
  2015. Events.getEventsByName('removeSpecialBBCodeSubmit').remove();
  2016. };
  2017.  
  2018. var removeSpecialBBCodeHandlers = function() {
  2019. Events.getEventsByName('submitSpecialBBCode').remove();
  2020. Events.getEventsByName('removeSpecialBBCodeSubmit').remove();
  2021. };
  2022.  
  2023. Events.selector(getSubmit(request)).add('click', 'submitSpecialBBCode', SpecialBBCodeSubmitHandler, false);
  2024.  
  2025. Events.selector(getCancel(request)).add('click', 'removeSpecialBBCodeSubmit', removeSpecialBBCodeHandlers, false);
  2026.  
  2027. Events.selector(getClose(request)).add('click', 'removeSpecialBBCodeSubmit', removeSpecialBBCodeHandlers, false);
  2028.  
  2029. fade(document.getElementById('request-background'), 'in');
  2030. fade(document.getElementById('plaintext-request'), 'in');
  2031.  
  2032. if (window.innerHeight > request.offsetHeight) {
  2033. top = (window.innerHeight / 2) - (request.offsetHeight / 2) + 'px';
  2034. }
  2035.  
  2036. request.style.top = top;
  2037. request.style.left = (window.innerWidth / 2) - 200 + 'px';
  2038. request.style.width = '400px';
  2039.  
  2040. request.getElementsByClassName('sp_BBCode')[0].focus();
  2041. break;
  2042. case 'Font Name':
  2043. if (document.getElementById('font-dropdown') == null) {
  2044. createFontDropdown();
  2045. }
  2046.  
  2047. dropdown = document.getElementById('font-dropdown');
  2048.  
  2049. var fonts = dropdown.getElementsByTagName('a');
  2050.  
  2051. var applyFontHandler = function() {
  2052. wrapText(editor.getElementsByClassName('cke_source')[0], '[font=' + this.getElementsByTagName('span')[0].style.fontFamily.replace(/'/g, "").replace(/, /g, ",") + ']', '[/font]');
  2053.  
  2054. Classes.removeClass(self.parentNode, 'cke_on');
  2055. Classes.addClass(self.parentNode, 'cke_off');
  2056.  
  2057. Events.getEventsByName('applyFont').remove();
  2058.  
  2059. dropdown.style.display = 'none';
  2060.  
  2061. document.getElementById('dropdown-click-background').remove();
  2062. };
  2063. if (window.getComputedStyle(dropdown).display === 'none') {
  2064. Classes.removeClass(self.parentNode, 'cke_off');
  2065. Classes.addClass(self.parentNode, 'cke_on');
  2066.  
  2067. for (i = 0; i < fonts.length; i++) {
  2068. Events.selector(fonts[i]).add('click', 'applyFont', applyFontHandler, false);
  2069. }
  2070.  
  2071. dropdown.style.display = 'block';
  2072.  
  2073. document.body.appendChild(createElement('div', function(click) {
  2074. click.id = 'dropdown-click-background';
  2075. click.style.position = 'fixed';
  2076. click.style.width = '100%';
  2077. click.style.height = '100%';
  2078. click.style.top = '0px';
  2079. click.style.left = '0px';
  2080. click.style.zIndex = '9998';
  2081.  
  2082. click.onclick = function() {
  2083. Classes.removeClass(self.parentNode, 'cke_on');
  2084. Classes.addClass(self.parentNode, 'cke_off');
  2085.  
  2086. Events.getEventsByName('applyFont').remove();
  2087.  
  2088. dropdown.style.display = 'none';
  2089. this.remove();
  2090. editor.getElementsByClassName('cke_source')[0].focus();
  2091. };
  2092. }));
  2093. }
  2094.  
  2095. buttonOffset = getPosition(self).y;
  2096. buttonHeight = self.offsetHeight;
  2097. windowScroll = window.scrollY;
  2098. windowHeight = window.innerHeight;
  2099. dropdownHeight = dropdown.offsetHeight;
  2100.  
  2101. if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) >= dropdownHeight) {
  2102. top = buttonOffset + buttonHeight - 1 + 'px';
  2103. } else if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) < dropdownHeight && (buttonOffset + buttonHeight - 1) - windowScroll > dropdownHeight) {
  2104. top = buttonOffset + buttonHeight - 1 - dropdownHeight + 'px';
  2105. } else {
  2106. top = windowScroll + 'px';
  2107. }
  2108.  
  2109. dropdown.style.top = top;
  2110. dropdown.style.left = getPosition(self).x + 'px';
  2111. break;
  2112.  
  2113. case 'Font Size':
  2114. if (document.getElementById('size-dropdown') == null) {
  2115. createSizeDropdown();
  2116. }
  2117.  
  2118. dropdown = document.getElementById('size-dropdown');
  2119.  
  2120. var sizes = dropdown.getElementsByTagName('a');
  2121.  
  2122. var applySizeHandler = function() {
  2123. wrapText(editor.getElementsByClassName('cke_source')[0], '[size=' + this.id.split('Size_')[1] + ']', '[/size]');
  2124.  
  2125. Classes.removeClass(self.parentNode, 'cke_on');
  2126. Classes.addClass(self.parentNode, 'cke_off');
  2127.  
  2128. Events.getEventsByName('applySize').remove();
  2129.  
  2130. dropdown.style.display = 'none';
  2131.  
  2132. document.getElementById('dropdown-click-background').remove();
  2133. };
  2134. if (window.getComputedStyle(dropdown).display === 'none') {
  2135. Classes.removeClass(self.parentNode, 'cke_off');
  2136. Classes.addClass(self.parentNode, 'cke_on');
  2137.  
  2138. for (i = 0; i < sizes.length; i++) {
  2139. Events.selector(sizes[i]).add('click', 'applySize', applySizeHandler, false);
  2140. }
  2141.  
  2142. dropdown.style.display = 'block';
  2143.  
  2144. document.body.appendChild(createElement('div', function(click) {
  2145. click.id = 'dropdown-click-background';
  2146. click.style.position = 'fixed';
  2147. click.style.width = '100%';
  2148. click.style.height = '100%';
  2149. click.style.top = '0px';
  2150. click.style.left = '0px';
  2151. click.style.zIndex = '9998';
  2152.  
  2153. click.onclick = function() {
  2154. Classes.removeClass(self.parentNode, 'cke_on');
  2155. Classes.addClass(self.parentNode, 'cke_off');
  2156.  
  2157. Events.getEventsByName('applySize').remove();
  2158.  
  2159. dropdown.style.display = 'none';
  2160. this.remove();
  2161. editor.getElementsByClassName('cke_source')[0].focus();
  2162. };
  2163. }));
  2164. }
  2165.  
  2166. buttonOffset = getPosition(self).y;
  2167. buttonHeight = self.offsetHeight;
  2168. windowScroll = window.scrollY;
  2169. windowHeight = window.innerHeight;
  2170. dropdownHeight = dropdown.offsetHeight;
  2171.  
  2172. if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) >= dropdownHeight) {
  2173. top = buttonOffset + buttonHeight - 1 + 'px';
  2174. } else if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) < dropdownHeight && (buttonOffset + buttonHeight - 1) - windowScroll > dropdownHeight) {
  2175. top = buttonOffset + buttonHeight - 1 - dropdownHeight + 'px';
  2176. } else {
  2177. top = windowScroll + 'px';
  2178. }
  2179.  
  2180. dropdown.style.top = top;
  2181. dropdown.style.left = getPosition(self).x + 'px';
  2182. break;
  2183.  
  2184. case 'Text Color':
  2185. if (document.getElementById('color-dropdown') == null) {
  2186. createColorDropdown();
  2187. }
  2188.  
  2189. dropdown = document.getElementById('color-dropdown');
  2190.  
  2191. var colors = dropdown.getElementsByClassName('cke_colorbox');
  2192.  
  2193. var colorBoxHandler = function() {
  2194. wrapText(editor.getElementsByClassName('cke_source')[0], '[color=' + getBackgroundColor(this.getElementsByTagName('span')[0]) + ']', '[/color]');
  2195.  
  2196. Classes.removeClass(self.parentNode, 'cke_on');
  2197. Classes.addClass(self.parentNode, 'cke_off');
  2198.  
  2199. Events.getEventsByName('applyColor').remove();
  2200.  
  2201. dropdown.style.display = 'none';
  2202.  
  2203. document.getElementById('dropdown-click-background').remove();
  2204. };
  2205.  
  2206. var colorMoreHandler = function() {
  2207. if (document.getElementById('colorMore-request') == null) {
  2208. createColorMoreRequest();
  2209. }
  2210.  
  2211. var request = document.getElementById('colorMore-request');
  2212.  
  2213. var submitColorMoreHandler = function() {
  2214. var color = document.getElementById('colorMore-input').value;
  2215. wrapText(editor.getElementsByClassName('cke_source')[0], '[color=' + color + ']', '[/color]');
  2216.  
  2217. Events.getEventsByName('submitColorMore').remove();
  2218. Events.getEventsByName('removeColorMoreSubmit').remove();
  2219. };
  2220.  
  2221. var removeColorMoreHandlers = function() {
  2222. Events.getEventsByName('submitColorMore').remove();
  2223. Events.getEventsByName('removeColorMoreSubmit').remove();
  2224. };
  2225.  
  2226. Events.selector(getSubmit(request)).add('click', 'submitColorMore', submitColorMoreHandler, false);
  2227.  
  2228. Events.selector(getCancel(request)).add('click', 'removeColorMoreSubmit', removeColorMoreHandlers, false);
  2229.  
  2230. Events.selector(getClose(request)).add('click', 'removeColorMoreSubmit', removeColorMoreHandlers, false);
  2231.  
  2232. fade(document.getElementById('request-background'), 'in');
  2233. fade(document.getElementById('colorMore-request'), 'in');
  2234.  
  2235. if (window.innerHeight > request.offsetHeight) {
  2236. top = (window.innerHeight / 2) - (request.offsetHeight / 2) + 'px';
  2237. }
  2238.  
  2239. request.style.top = top;
  2240. request.style.left = (window.innerWidth / 2) - 190 + 'px';
  2241.  
  2242. if (request.getElementsByClassName('selected-cell')[0] != null) {
  2243. request.getElementsByClassName('selected-cell')[0].style.border = '1px solid ' + request.getElementsByClassName('selected-cell')[0].style.backgroundColor;
  2244. request.getElementsByClassName('selected-cell')[0].blur();
  2245. Classes.removeClass(request.getElementsByClassName('selected-cell')[0], 'selected-cell');
  2246. }
  2247.  
  2248. request.getElementsByClassName('ColorCell')[0].style.border = '1px dotted #fff';
  2249. Classes.addClass(request.getElementsByClassName('ColorCell')[0], 'selected-cell');
  2250. request.getElementsByClassName('ColorCell')[0].focus();
  2251.  
  2252. Classes.removeClass(self.parentNode, 'cke_on');
  2253. Classes.addClass(self.parentNode, 'cke_off');
  2254.  
  2255. Events.getEventsByName('applyColor').remove();
  2256.  
  2257. dropdown.style.display = 'none';
  2258.  
  2259. document.getElementById('dropdown-click-background').remove();
  2260. };
  2261.  
  2262. if (window.getComputedStyle(dropdown).display === 'none') {
  2263. Classes.removeClass(self.parentNode, 'cke_off');
  2264. Classes.addClass(self.parentNode, 'cke_on');
  2265.  
  2266. Events.selector(dropdown.getElementsByClassName('cke_colorauto')[0]).add('click', 'applyColor', colorBoxHandler, false);
  2267.  
  2268. for (i = 0; i < colors.length; i++) {
  2269. if (colors[i].tagName === 'A') {
  2270. Events.selector(colors[i]).add('click', 'applyColor', colorBoxHandler, false);
  2271. }
  2272. }
  2273.  
  2274. Events.selector(dropdown.getElementsByClassName('cke_colormore')[0]).add('click', 'applyColor', colorMoreHandler, false);
  2275.  
  2276. dropdown.style.display = 'block';
  2277.  
  2278. document.body.appendChild(createElement('div', function(click) {
  2279. click.id = 'dropdown-click-background';
  2280. click.style.position = 'fixed';
  2281. click.style.width = '100%';
  2282. click.style.height = '100%';
  2283. click.style.top = '0px';
  2284. click.style.left = '0px';
  2285. click.style.zIndex = '9998';
  2286.  
  2287. click.onclick = function() {
  2288. Classes.removeClass(self.parentNode, 'cke_on');
  2289. Classes.addClass(self.parentNode, 'cke_off');
  2290.  
  2291. Events.getEventsByName('applyColor').remove();
  2292.  
  2293. dropdown.style.display = 'none';
  2294. this.remove();
  2295. editor.getElementsByClassName('cke_source')[0].focus();
  2296. };
  2297. }));
  2298. }
  2299.  
  2300. buttonOffset = getPosition(self).y;
  2301. buttonHeight = self.offsetHeight;
  2302. windowScroll = window.scrollY;
  2303. windowHeight = window.innerHeight;
  2304. dropdownHeight = dropdown.offsetHeight;
  2305.  
  2306. if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) >= dropdownHeight) {
  2307. top = buttonOffset + buttonHeight - 1 + 'px';
  2308. } else if ((windowScroll + windowHeight) - (buttonOffset + buttonHeight - 1) < dropdownHeight && (buttonOffset + buttonHeight - 1) - windowScroll > dropdownHeight) {
  2309. top = buttonOffset + buttonHeight - 1 - dropdownHeight + 'px';
  2310. } else {
  2311. top = windowScroll + 'px';
  2312. }
  2313.  
  2314. dropdown.style.top = top;
  2315. dropdown.style.left = getPosition(self).x + 'px';
  2316. break;
  2317.  
  2318. case 'Smiley':
  2319. var smileyTray;
  2320.  
  2321. if (editor.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('ipsSmileyTray')[0] == null) {
  2322. var restoreContent = textArea.value,
  2323. RestoreStart = textArea.selectionStart,
  2324. RestoreEnd = textArea.selectionEnd;
  2325.  
  2326. editor.getElementsByClassName('cke_button_ipssource')[0].click();
  2327.  
  2328. var smileyMain = setInterval(function() {
  2329. if (editor.getElementsByClassName('cke_button_ipssource')[0].getAttribute('aria-pressed') !== 'true' && !Classes.hasClass(editor.getElementsByClassName('cke_button_removeFormat')[0], 'cke_disabled')) {
  2330. editor.getElementsByClassName('cke_button_ipsemoticon')[0].click();
  2331.  
  2332. var smiliesHandler = function(event) {
  2333. if (event.target.nodeType !== 1 || event.target.tagName !== 'IMG') {
  2334. return false;
  2335. }
  2336.  
  2337. wrapText(editor.getElementsByClassName('cke_source')[0], event.target.title, '');
  2338. };
  2339.  
  2340. smileyTray = editor.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('ipsSmileyTray')[0];
  2341.  
  2342. Events.selector(smileyTray).add('click', 'addSmiley', smiliesHandler, false);
  2343.  
  2344. editor.getElementsByClassName('cke_button_ipssource')[0].click();
  2345. smileyTray.nextSibling.remove();
  2346.  
  2347. var checker = setInterval(function() {
  2348. if (editor.getElementsByClassName('cke_button_ipssource')[0].getAttribute('aria-pressed') === 'true' && Classes.hasClass(editor.getElementsByClassName('cke_button_removeFormat')[0], 'cke_disabled')) {
  2349. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsbbcode')[0], 'cke_disabled');
  2350. Classes.removeClass(editor.getElementsByClassName('cke_font')[0], 'cke_disabled');
  2351. Classes.removeClass(editor.getElementsByClassName('cke_fontSize')[0], 'cke_disabled');
  2352. Classes.removeClass(editor.getElementsByClassName('cke_button_textcolor')[0], 'cke_disabled');
  2353. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsemoticon')[0], 'cke_disabled');
  2354. Classes.removeClass(editor.getElementsByClassName('cke_button_bold')[0], 'cke_disabled');
  2355. Classes.removeClass(editor.getElementsByClassName('cke_button_italic')[0], 'cke_disabled');
  2356. Classes.removeClass(editor.getElementsByClassName('cke_button_underline')[0], 'cke_disabled');
  2357. Classes.removeClass(editor.getElementsByClassName('cke_button_strike')[0], 'cke_disabled');
  2358. Classes.removeClass(editor.getElementsByClassName('cke_button_subscript')[0], 'cke_disabled');
  2359. Classes.removeClass(editor.getElementsByClassName('cke_button_superscript')[0], 'cke_disabled');
  2360. Classes.removeClass(editor.getElementsByClassName('cke_button_bulletedlist')[0], 'cke_disabled');
  2361. Classes.removeClass(editor.getElementsByClassName('cke_button_numberedlist')[0], 'cke_disabled');
  2362. Classes.removeClass(editor.getElementsByClassName('cke_button_link')[0], 'cke_disabled');
  2363. Classes.removeClass(editor.getElementsByClassName('cke_button_image')[0], 'cke_disabled');
  2364. Classes.removeClass(editor.getElementsByClassName('cke_button_ipscode')[0], 'cke_disabled');
  2365. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsquote')[0], 'cke_disabled');
  2366. Classes.removeClass(editor.getElementsByClassName('cke_button_indent')[0], 'cke_disabled');
  2367. Classes.removeClass(editor.getElementsByClassName('cke_button_justifycenter')[0], 'cke_disabled');
  2368. Classes.removeClass(editor.getElementsByClassName('cke_button_justifyright')[0], 'cke_disabled');
  2369. fade(smileyTray, 'in', 100);
  2370. clearTimeout(checker);
  2371. }
  2372. }, 1000);
  2373.  
  2374. if (editor.getElementsByClassName('cke_source')[0] != null) {
  2375. editor.getElementsByClassName('cke_source')[0].focus();
  2376. editor.getElementsByClassName('cke_source')[0].value = restoreContent;
  2377. selectRange(editor.getElementsByClassName('cke_source')[0], RestoreStart, RestoreEnd);
  2378. }
  2379.  
  2380. clearTimeout(smileyMain);
  2381. }
  2382. }, 1000);
  2383. } else {
  2384. smileyTray = editor.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('ipsSmileyTray')[0];
  2385. fade(smileyTray, 'toggle', 100);
  2386. }
  2387. break;
  2388.  
  2389. case 'Bold':
  2390. wrapText(editor.getElementsByClassName('cke_source')[0], '[b]', '[/b]');
  2391. break;
  2392.  
  2393. case 'Italic':
  2394. wrapText(editor.getElementsByClassName('cke_source')[0], '[i]', '[/i]');
  2395. break;
  2396.  
  2397. case 'Underline':
  2398. wrapText(editor.getElementsByClassName('cke_source')[0], '[u]', '[/u]');
  2399. break;
  2400.  
  2401. case 'Strike Through':
  2402. wrapText(editor.getElementsByClassName('cke_source')[0], '[s]', '[/s]');
  2403. break;
  2404.  
  2405. case 'Subscript':
  2406. wrapText(editor.getElementsByClassName('cke_source')[0], '[sub]', '[/sub]');
  2407. break;
  2408.  
  2409. case 'Superscript':
  2410. wrapText(editor.getElementsByClassName('cke_source')[0], '[sup]', '[/sup]');
  2411. break;
  2412. case 'Insert/Remove Bulleted List':
  2413. wrapText(editor.getElementsByClassName('cke_source')[0], '[list]\n[*]', '[/*]\n[/list]');
  2414. break;
  2415.  
  2416. case 'Insert/Remove Numbered List':
  2417. wrapText(editor.getElementsByClassName('cke_source')[0], '[list=1]\n[*]', '[/*]\n[/list]');
  2418. break;
  2419.  
  2420. case 'Link':
  2421. selectedText = getSelection(textArea);
  2422.  
  2423. if (selectedText.length && selectedText.substr(0, 4) === 'http') {
  2424. wrapText(editor.getElementsByClassName('cke_source')[0], '[url=' + selectedText + ']', '[/url]');
  2425. } else {
  2426. if (document.getElementById('plaintext-request') == null) {
  2427. createRequest();
  2428. }
  2429.  
  2430. request = document.getElementById('plaintext-request');
  2431.  
  2432. request.getElementsByClassName('request-type')[0].childNodes[0].nodeValue = 'Link';
  2433.  
  2434. empty(request.getElementsByClassName('spec')[0]);
  2435. request.getElementsByClassName('spec')[0].appendChild(createElement('span', function(el) {
  2436. el.style.fontWeight = 'bolder';
  2437. el.appendChild(document.createTextNode('URL'));
  2438. }));
  2439.  
  2440. empty(request.getElementsByClassName('fields')[0]);
  2441. request.getElementsByClassName('fields')[0].appendChild(createElement('div', function(el) {
  2442. el.className = 'cke_dialog_ui_input_text';
  2443. el.appendChild(createElement('input', function(input) {
  2444. input.className = 'cke_dialog_ui_input_text';
  2445. input.type = 'text';
  2446. }));
  2447. }));
  2448.  
  2449. var submitLinkHandler = function() {
  2450. var link = request.getElementsByClassName('fields')[0].getElementsByTagName('input')[0].value;
  2451.  
  2452. selectedText = getSelection(textArea);
  2453.  
  2454. if (selectedText.length) {
  2455. wrapText(editor.getElementsByClassName('cke_source')[0], '[url=' + link + ']', '[/url]');
  2456. } else {
  2457. wrapText(editor.getElementsByClassName('cke_source')[0], '[url=' + link + ']' + link, '[/url]');
  2458. }
  2459.  
  2460. Events.getEventsByName('applyLinkRequest').remove();
  2461. Events.getEventsByName('removeLinkSubmit').remove();
  2462. };
  2463.  
  2464. var removeLinkHandlers = function() {
  2465. Events.getEventsByName('applyLinkRequest').remove();
  2466. Events.getEventsByName('removeLinkSubmit').remove();
  2467. };
  2468.  
  2469. Events.selector(getSubmit(request)).add('click', 'applyLinkRequest', submitLinkHandler, false);
  2470.  
  2471. Events.selector(getCancel(request)).add('click', 'removeLinkSubmit', removeLinkHandlers, false);
  2472.  
  2473. Events.selector(getClose(request)).add('click', 'removeLinkSubmit', removeLinkHandlers, false);
  2474.  
  2475. fade(document.getElementById('request-background'), 'in');
  2476. fade(document.getElementById('plaintext-request'), 'in');
  2477.  
  2478. if (window.innerHeight > request.offsetHeight) {
  2479. top = (window.innerHeight / 2) - (request.offsetHeight / 2) + 'px';
  2480. }
  2481.  
  2482. request.style.top = top;
  2483. request.style.left = (window.innerWidth / 2) - 200 + 'px';
  2484. request.style.width = '400px';
  2485.  
  2486. request.getElementsByClassName('fields')[0].getElementsByTagName('input')[0].focus();
  2487. }
  2488. break;
  2489.  
  2490. case 'Image':
  2491. selectedText = getSelection(textArea);
  2492.  
  2493. if (selectedText.length && selectedText.substr(0, 4) === 'http') {
  2494. wrapText(editor.getElementsByClassName('cke_source')[0], '[img=', ']');
  2495. } else {
  2496. if (document.getElementById('plaintext-request') == null) {
  2497. createRequest();
  2498. }
  2499.  
  2500. request = document.getElementById('plaintext-request');
  2501.  
  2502. request.getElementsByClassName('request-type')[0].childNodes[0].nodeValue = 'Image';
  2503.  
  2504. empty(request.getElementsByClassName('spec')[0]);
  2505. request.getElementsByClassName('spec')[0].appendChild(createElement('span', function(el) {
  2506. el.style.fontWeight = 'bolder';
  2507. el.appendChild(document.createTextNode('URL'));
  2508. }));
  2509.  
  2510. empty(request.getElementsByClassName('fields')[0]);
  2511. request.getElementsByClassName('fields')[0].appendChild(createElement('div', function(el) {
  2512. el.className = 'cke_dialog_ui_input_text';
  2513. el.appendChild(createElement('input', function(input) {
  2514. input.className = 'cke_dialog_ui_input_text';
  2515. input.type = 'text';
  2516. }));
  2517. }));
  2518.  
  2519. var submitImageHandler = function() {
  2520. var link = request.getElementsByClassName('fields')[0].getElementsByTagName('input')[0].value;
  2521.  
  2522. selectedText = getSelection(textArea);
  2523.  
  2524. wrapText(editor.getElementsByClassName('cke_source')[0], '[img=' + link + ']', '');
  2525.  
  2526. Events.getEventsByName('applyImageRequest').remove();
  2527. Events.getEventsByName('removeImageSubmit').remove();
  2528. };
  2529.  
  2530. var removeImageHandlers = function() {
  2531. Events.getEventsByName('applyImageRequest').remove();
  2532. Events.getEventsByName('removeImageSubmit').remove();
  2533. };
  2534.  
  2535. Events.selector(getSubmit(request)).add('click', 'applyImageRequest', submitImageHandler, false);
  2536.  
  2537. Events.selector(getCancel(request)).add('click', 'removeImageSubmit', removeImageHandlers, false);
  2538.  
  2539. Events.selector(getClose(request)).add('click', 'removeImageSubmit', removeImageHandlers, false);
  2540.  
  2541. fade(document.getElementById('request-background'), 'in');
  2542. fade(document.getElementById('plaintext-request'), 'in');
  2543.  
  2544. if (window.innerHeight > request.offsetHeight) {
  2545. top = (window.innerHeight / 2) - (request.offsetHeight / 2) + 'px';
  2546. }
  2547.  
  2548. request.style.top = top;
  2549. request.style.left = (window.innerWidth / 2) - 200 + 'px';
  2550. request.style.width = '400px';
  2551.  
  2552. request.getElementsByClassName('fields')[0].getElementsByTagName('input')[0].focus();
  2553. }
  2554. break;
  2555.  
  2556. case 'Code':
  2557. selectedText = getSelection(textArea);
  2558.  
  2559. if (selectedText.length) {
  2560. wrapText(editor.getElementsByClassName('cke_source')[0], '[code=auto:0]', '[/code]');
  2561. } else {
  2562. if (document.getElementById('plaintext-request') == null) {
  2563. createRequest();
  2564. }
  2565.  
  2566. request = document.getElementById('plaintext-request');
  2567. request.getElementsByClassName('request-type')[0].childNodes[0].nodeValue = 'Code';
  2568.  
  2569. empty(request.getElementsByClassName('spec')[0]);
  2570. request.getElementsByClassName('spec')[0].appendChild(createElement('span', function(el) {
  2571. el.style.fontWeight = 'bolder';
  2572. el.appendChild(document.createTextNode('Code Type'));
  2573. }));
  2574.  
  2575. empty(request.getElementsByClassName('fields')[0]);
  2576.  
  2577. request.getElementsByClassName('fields')[0].appendChild(createElement('select', function(select) {
  2578. select.className = 'cke_dialog_ui_input_select';
  2579.  
  2580. select.options[0] = new Option(' PHP/Generic/Auto Detect', 'auto', true);
  2581. select.options[1] = new Option(' Javascript', 'js');
  2582. select.options[2] = new Option(' HTML', 'html');
  2583. select.options[3] = new Option(' SQL', 'sql');
  2584. select.options[4] = new Option(' CSS', 'css');
  2585. select.options[5] = new Option(' XML', 'xml');
  2586. select.options[6] = new Option(' None', 'nocode');
  2587. }));
  2588.  
  2589. request.getElementsByClassName('fields')[0].appendChild(createElement('div', function(cont) {
  2590. cont.className = 'cke_dialog_ui_vbox_child';
  2591.  
  2592. cont.appendChild(document.createTextNode('Starting Line Number'));
  2593.  
  2594. cont.appendChild(createElement('div', function(box) {
  2595. box.className = 'cke_dialog_ui_input_text';
  2596. box.appendChild(createElement('input', function(input) {
  2597. input.className = 'cke_dialog_ui_input_text code-line-number';
  2598. input.type = 'text';
  2599. }));
  2600. }));
  2601.  
  2602. cont.appendChild(createElement('div', function(box) {
  2603. box.className = 'cke_dialog_ui_vbox_child';
  2604. box.style.paddingBottom = '0px';
  2605.  
  2606. box.appendChild(createElement('div', function(textcont) {
  2607. textcont.className = 'cke_dialog_ui_input_textarea';
  2608.  
  2609. textcont.appendChild(createElement('textarea', function(text) {
  2610. text.className = 'cke_dialog_ui_input_textarea code-body';
  2611. text.rows = 5;
  2612. text.cols = 20;
  2613. text.style.height = '240px';
  2614. text.style.direction = 'ltr';
  2615. text.style.fontFamily = 'monospace';
  2616. text.style.fontSize = '13px';
  2617. }));
  2618. }));
  2619. }));
  2620. }));
  2621.  
  2622. var submitCodeHandler = function() {
  2623. var type = request.getElementsByClassName('fields')[0].getElementsByTagName('select')[0].options[request.getElementsByClassName('fields')[0].getElementsByTagName('select')[0].selectedIndex].value,
  2624. line = request.getElementsByClassName('fields')[0].getElementsByClassName('code-line-number')[0].value,
  2625. body = request.getElementsByClassName('fields')[0].getElementsByClassName('code-body')[0].value;
  2626.  
  2627. if (!line.length) {
  2628. line = 0;
  2629. }
  2630.  
  2631. wrapText(editor.getElementsByClassName('cke_source')[0], '[code=' + type + ':' + line + ']' + body + '[/code]', '');
  2632.  
  2633. Events.getEventsByName('applyCodeRequest').remove();
  2634. Events.getEventsByName('removeCodeSubmit').remove();
  2635. };
  2636.  
  2637. var removeCodeHandlers = function() {
  2638. Events.getEventsByName('applyCodeRequest').remove();
  2639. Events.getEventsByName('removeCodeSubmit').remove();
  2640. };
  2641.  
  2642. Events.selector(getSubmit(request)).add('click', 'applyCodeRequest', submitCodeHandler, false);
  2643.  
  2644. Events.selector(getCancel(request)).add('click', 'removeCodeSubmit', removeCodeHandlers, false);
  2645.  
  2646. Events.selector(getClose(request)).add('click', 'removeCodeSubmit', removeCodeHandlers, false);
  2647.  
  2648. fade(document.getElementById('request-background'), 'in');
  2649. fade(document.getElementById('plaintext-request'), 'in');
  2650.  
  2651. if (window.innerHeight > request.offsetHeight) {
  2652. top = (window.innerHeight / 2) - (request.offsetHeight / 2) + 'px';
  2653. }
  2654.  
  2655. request.style.top = top;
  2656. request.style.left = (window.innerWidth / 2) - 385 + 'px';
  2657. request.style.width = '770px';
  2658.  
  2659. request.getElementsByClassName('fields')[0].getElementsByClassName('code-body')[0].focus();
  2660. }
  2661. break;
  2662.  
  2663. case 'Quote':
  2664. wrapText(editor.getElementsByClassName('cke_source')[0], '[quote]', '[/quote]');
  2665. break;
  2666.  
  2667. case 'Increase Indent':
  2668. wrapText(editor.getElementsByClassName('cke_source')[0], '[indent=1]', '[/indent]');
  2669. break;
  2670.  
  2671. case 'Center':
  2672. wrapText(editor.getElementsByClassName('cke_source')[0], '[center]', '[/center]');
  2673. break;
  2674.  
  2675. case 'Align Right':
  2676. wrapText(editor.getElementsByClassName('cke_source')[0], '[right]', '[/right]');
  2677. break;
  2678.  
  2679. default:
  2680. return false;
  2681. }
  2682. }
  2683. };
  2684.  
  2685. for (i = 0; i < buttons.length; i++) {
  2686. Events.selector(buttons[i].getElementsByTagName('a')[0]).add('click', 'Plaintext_BBCode', plaintextBBCodeHandler, false);
  2687. }
  2688.  
  2689. for (i = 0; i < dropdowns.length; i++) {
  2690. Events.selector(dropdowns[i].getElementsByTagName('a')[0]).add('click', 'Plaintext_BBCode', plaintextBBCodeHandler, false);
  2691. }
  2692.  
  2693. Classes.addClass(editor.getElementsByClassName('cke_button_ipssource')[0], 'bbcode-parsed');
  2694. }
  2695.  
  2696. function plaintextBBCode(editor) {
  2697. if (Classes.hasClass(editor.getElementsByClassName('cke_button_ipssource')[0], 'cke_on')) {
  2698. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsbbcode')[0], 'cke_disabled');
  2699. Classes.removeClass(editor.getElementsByClassName('cke_font')[0], 'cke_disabled');
  2700. Classes.removeClass(editor.getElementsByClassName('cke_fontSize')[0], 'cke_disabled');
  2701. Classes.removeClass(editor.getElementsByClassName('cke_button_textcolor')[0], 'cke_disabled');
  2702. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsemoticon')[0], 'cke_disabled');
  2703. Classes.removeClass(editor.getElementsByClassName('cke_button_bold')[0], 'cke_disabled');
  2704. Classes.removeClass(editor.getElementsByClassName('cke_button_italic')[0], 'cke_disabled');
  2705. Classes.removeClass(editor.getElementsByClassName('cke_button_underline')[0], 'cke_disabled');
  2706. Classes.removeClass(editor.getElementsByClassName('cke_button_strike')[0], 'cke_disabled');
  2707. Classes.removeClass(editor.getElementsByClassName('cke_button_subscript')[0], 'cke_disabled');
  2708. Classes.removeClass(editor.getElementsByClassName('cke_button_superscript')[0], 'cke_disabled');
  2709. Classes.removeClass(editor.getElementsByClassName('cke_button_bulletedlist')[0], 'cke_disabled');
  2710. Classes.removeClass(editor.getElementsByClassName('cke_button_numberedlist')[0], 'cke_disabled');
  2711. Classes.removeClass(editor.getElementsByClassName('cke_button_link')[0], 'cke_disabled');
  2712. Classes.removeClass(editor.getElementsByClassName('cke_button_image')[0], 'cke_disabled');
  2713. Classes.removeClass(editor.getElementsByClassName('cke_button_ipscode')[0], 'cke_disabled');
  2714. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsquote')[0], 'cke_disabled');
  2715. Classes.removeClass(editor.getElementsByClassName('cke_button_indent')[0], 'cke_disabled');
  2716. Classes.removeClass(editor.getElementsByClassName('cke_button_justifycenter')[0], 'cke_disabled');
  2717. Classes.removeClass(editor.getElementsByClassName('cke_button_justifyright')[0], 'cke_disabled');
  2718.  
  2719. if (!Classes.hasClass(editor.getElementsByClassName('cke_button_ipssource')[0], 'bbcode-parsed')) {
  2720. plaintextParser(editor);
  2721. }
  2722. }
  2723.  
  2724. var buttonParseHandler = function() {
  2725. setTimeout(function() {
  2726. var checker = setInterval(function() {
  2727. if (Classes.hasClass(editor.getElementsByClassName('cke_button_ipssource')[0], 'cke_on')) {
  2728. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsbbcode')[0], 'cke_disabled');
  2729. Classes.removeClass(editor.getElementsByClassName('cke_font')[0], 'cke_disabled');
  2730. Classes.removeClass(editor.getElementsByClassName('cke_fontSize')[0], 'cke_disabled');
  2731. Classes.removeClass(editor.getElementsByClassName('cke_button_textcolor')[0], 'cke_disabled');
  2732. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsemoticon')[0], 'cke_disabled');
  2733. Classes.removeClass(editor.getElementsByClassName('cke_button_bold')[0], 'cke_disabled');
  2734. Classes.removeClass(editor.getElementsByClassName('cke_button_italic')[0], 'cke_disabled');
  2735. Classes.removeClass(editor.getElementsByClassName('cke_button_underline')[0], 'cke_disabled');
  2736. Classes.removeClass(editor.getElementsByClassName('cke_button_strike')[0], 'cke_disabled');
  2737. Classes.removeClass(editor.getElementsByClassName('cke_button_subscript')[0], 'cke_disabled');
  2738. Classes.removeClass(editor.getElementsByClassName('cke_button_superscript')[0], 'cke_disabled');
  2739. Classes.removeClass(editor.getElementsByClassName('cke_button_bulletedlist')[0], 'cke_disabled');
  2740. Classes.removeClass(editor.getElementsByClassName('cke_button_numberedlist')[0], 'cke_disabled');
  2741. Classes.removeClass(editor.getElementsByClassName('cke_button_link')[0], 'cke_disabled');
  2742. Classes.removeClass(editor.getElementsByClassName('cke_button_image')[0], 'cke_disabled');
  2743. Classes.removeClass(editor.getElementsByClassName('cke_button_ipscode')[0], 'cke_disabled');
  2744. Classes.removeClass(editor.getElementsByClassName('cke_button_ipsquote')[0], 'cke_disabled');
  2745. Classes.removeClass(editor.getElementsByClassName('cke_button_indent')[0], 'cke_disabled');
  2746. Classes.removeClass(editor.getElementsByClassName('cke_button_justifycenter')[0], 'cke_disabled');
  2747. Classes.removeClass(editor.getElementsByClassName('cke_button_justifyright')[0], 'cke_disabled');
  2748.  
  2749. if (!Classes.hasClass(editor.getElementsByClassName('cke_button_ipssource')[0], 'bbcode-parsed')) {
  2750. plaintextParser(editor);
  2751. }
  2752. clearTimeout(checker);
  2753. }
  2754. }, 10);
  2755. }, 100);
  2756. var smileyTray = editor.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('ipsSmileyTray')[0];
  2757.  
  2758. if (smileyTray != null) {
  2759. fade(smileyTray, 'out', 100);
  2760. }
  2761. };
  2762.  
  2763. Events.selector(editor.getElementsByClassName('cke_button_ipssource')[0]).add('click', 'parseBBCode', buttonParseHandler, false);
  2764. }
  2765.  
  2766. var initBBCodeHandler = function(event) {
  2767. var instance;
  2768.  
  2769. if (isChildOf('.cke_editor', event.target)) {
  2770. instance = getParent('.cke_editor', event.target);
  2771. } else {
  2772. return false;
  2773. }
  2774.  
  2775. if (Classes.hasClass(instance, 'plaintextBBCode')) {
  2776. return false;
  2777. }
  2778.  
  2779. if (Classes.hasClass(instance.getElementsByClassName('cke_button_ipssource')[0], 'cke_on') && Classes.hasClass(instance.getElementsByClassName('cke_button_bold')[0], 'cke_disabled')) {
  2780. plaintextBBCode(instance);
  2781. console.log('Plaintext BBCode initilized on:', instance);
  2782. Classes.addClass(instance, 'plaintextBBCode');
  2783. }
  2784. };
  2785.  
  2786. if (document.body.id === 'ipboard_body') {
  2787. Events.selector(document).add('mouseover', 'initBBCode', initBBCodeHandler, false);
  2788. }