diff --git a/button.js b/button.js deleted file mode 100644 index 44d6cf5..0000000 --- a/button.js +++ /dev/null @@ -1,35 +0,0 @@ -$('document').ready(function () { - require(['composer', 'composer/controls'], function (composer, controls) { - var text, start, end; - composer.addButton('fa fa-eyedropper', function (textarea, selectionStart, selectionEnd) { - text = textarea; - }); - $(document).on('click', '[data-format="eyedropper"]', function () { - $('.fa-eyedropper').ColorPicker({ - onShow: function (el) { - $(el).show(); - return false; - controls.updateTextareaSelection(text, start, end); - }, - onHide: function (el) { - $(el).hide(); - return false; - }, - onSubmit: function (hsb, hex, rgb, el) { - $(el).ColorPickerHide(); - if (start === end) { - controls.insertIntoTextarea(text, '%(#' + hex + ')[Colored Text Here]'); - controls.updateTextareaSelection(text, start + 11, end + 28); - } else { - controls.wrapSelectionInTextareaWith(text, '%(#' + hex + ')[', ']'); - controls.updateTextareaSelection(text, start + 11, end + 11); - } - } - }).trigger('click'); - }); - $(document).on('blur', 'textarea.write', function () { - start = this.selectionStart; - end = this.selectionEnd; - }); - }); -}); diff --git a/lib/colorpicker/css/colorpicker.less b/lib/colorpicker/css/colorpicker.less deleted file mode 100644 index bf2700d..0000000 --- a/lib/colorpicker/css/colorpicker.less +++ /dev/null @@ -1,162 +0,0 @@ -.colorpicker { - width: 356px; - height: 176px; - overflow: hidden; - position: absolute; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_background.png); - font-family: Arial, Helvetica, sans-serif; - display: none; - z-index: 10100; -} -.colorpicker_color { - width: 150px; - height: 150px; - left: 14px; - top: 13px; - position: absolute; - background: #f00; - overflow: hidden; - cursor: crosshair; -} -.colorpicker_color div { - position: absolute; - top: 0; - left: 0; - width: 150px; - height: 150px; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_overlay.png); -} -.colorpicker_color div div { - position: absolute; - top: 0; - left: 0; - width: 11px; - height: 11px; - overflow: hidden; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_select.gif); - margin: -5px 0 0 -5px; -} -.colorpicker_hue { - position: absolute; - top: 13px; - left: 171px; - width: 35px; - height: 150px; - cursor: n-resize; -} -.colorpicker_hue div { - position: absolute; - width: 35px; - height: 9px; - overflow: hidden; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_indic.gif) left top; - margin: -4px 0 0 0; - left: 0px; -} -.colorpicker_new_color { - position: absolute; - width: 60px; - height: 30px; - left: 213px; - top: 13px; - background: #f00; -} -.colorpicker_current_color { - position: absolute; - width: 60px; - height: 30px; - left: 283px; - top: 13px; - background: #f00; -} -.colorpicker input { - background-color: transparent; - border: 1px solid transparent; - position: absolute; - font-size: 10px; - font-family: Arial, Helvetica, sans-serif; - color: #898989; - top: 4px; - right: 11px; - text-align: right; - margin: 0; - padding: 0; - height: 11px; -} -.colorpicker_hex { - position: absolute; - width: 72px; - height: 22px; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_hex.png) top; - left: 212px; - top: 142px; -} -.colorpicker_hex input { - right: 6px; -} -.colorpicker_field { - height: 22px; - width: 62px; - background-position: top; - position: absolute; -} -.colorpicker_field span { - position: absolute; - width: 12px; - height: 22px; - overflow: hidden; - top: 0; - right: 0; - cursor: n-resize; -} -.colorpicker_rgb_r { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_rgb_r.png); - top: 52px; - left: 212px; -} -.colorpicker_rgb_g { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_rgb_g.png); - top: 82px; - left: 212px; -} -.colorpicker_rgb_b { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_rgb_b.png); - top: 112px; - left: 212px; -} -.colorpicker_hsb_h { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_hsb_h.png); - top: 52px; - left: 282px; -} -.colorpicker_hsb_s { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_hsb_s.png); - top: 82px; - left: 282px; -} -.colorpicker_hsb_b { - background-image: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_hsb_b.png); - top: 112px; - left: 282px; -} -.colorpicker_submit { - position: absolute; - width: 22px; - height: 22px; - background: url(/plugins/nodebb-plugin-mega-colors/images/colorpicker_submit.png) top; - left: 322px; - top: 142px; - overflow: hidden; -} -.colorpicker_focus { - background-position: center; -} -.colorpicker_hex.colorpicker_focus { - background-position: bottom; -} -.colorpicker_submit.colorpicker_focus { - background-position: bottom; -} -.colorpicker_slider { - background-position: bottom; -} diff --git a/lib/colorpicker/images/blank.gif b/lib/colorpicker/images/blank.gif deleted file mode 100644 index 75b945d..0000000 Binary files a/lib/colorpicker/images/blank.gif and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_background.png b/lib/colorpicker/images/colorpicker_background.png deleted file mode 100644 index 8401572..0000000 Binary files a/lib/colorpicker/images/colorpicker_background.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_hex.png b/lib/colorpicker/images/colorpicker_hex.png deleted file mode 100644 index 4e532d7..0000000 Binary files a/lib/colorpicker/images/colorpicker_hex.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_hsb_b.png b/lib/colorpicker/images/colorpicker_hsb_b.png deleted file mode 100644 index dfac595..0000000 Binary files a/lib/colorpicker/images/colorpicker_hsb_b.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_hsb_h.png b/lib/colorpicker/images/colorpicker_hsb_h.png deleted file mode 100644 index 3977ed9..0000000 Binary files a/lib/colorpicker/images/colorpicker_hsb_h.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_hsb_s.png b/lib/colorpicker/images/colorpicker_hsb_s.png deleted file mode 100644 index a2a6997..0000000 Binary files a/lib/colorpicker/images/colorpicker_hsb_s.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_indic.gif b/lib/colorpicker/images/colorpicker_indic.gif deleted file mode 100644 index f9fa95e..0000000 Binary files a/lib/colorpicker/images/colorpicker_indic.gif and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_overlay.png b/lib/colorpicker/images/colorpicker_overlay.png deleted file mode 100644 index 561cdd9..0000000 Binary files a/lib/colorpicker/images/colorpicker_overlay.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_rgb_b.png b/lib/colorpicker/images/colorpicker_rgb_b.png deleted file mode 100644 index dfac595..0000000 Binary files a/lib/colorpicker/images/colorpicker_rgb_b.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_rgb_g.png b/lib/colorpicker/images/colorpicker_rgb_g.png deleted file mode 100644 index 72b3276..0000000 Binary files a/lib/colorpicker/images/colorpicker_rgb_g.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_rgb_r.png b/lib/colorpicker/images/colorpicker_rgb_r.png deleted file mode 100644 index 4855fe0..0000000 Binary files a/lib/colorpicker/images/colorpicker_rgb_r.png and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_select.gif b/lib/colorpicker/images/colorpicker_select.gif deleted file mode 100644 index 599f7f1..0000000 Binary files a/lib/colorpicker/images/colorpicker_select.gif and /dev/null differ diff --git a/lib/colorpicker/images/colorpicker_submit.png b/lib/colorpicker/images/colorpicker_submit.png deleted file mode 100644 index 7f4c082..0000000 Binary files a/lib/colorpicker/images/colorpicker_submit.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_background.png b/lib/colorpicker/images/custom_background.png deleted file mode 100644 index cf55ffd..0000000 Binary files a/lib/colorpicker/images/custom_background.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_hex.png b/lib/colorpicker/images/custom_hex.png deleted file mode 100644 index 888f444..0000000 Binary files a/lib/colorpicker/images/custom_hex.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_hsb_b.png b/lib/colorpicker/images/custom_hsb_b.png deleted file mode 100644 index 2f99dae..0000000 Binary files a/lib/colorpicker/images/custom_hsb_b.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_hsb_h.png b/lib/colorpicker/images/custom_hsb_h.png deleted file mode 100644 index a217e92..0000000 Binary files a/lib/colorpicker/images/custom_hsb_h.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_hsb_s.png b/lib/colorpicker/images/custom_hsb_s.png deleted file mode 100644 index 7826b41..0000000 Binary files a/lib/colorpicker/images/custom_hsb_s.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_indic.gif b/lib/colorpicker/images/custom_indic.gif deleted file mode 100644 index 222fb94..0000000 Binary files a/lib/colorpicker/images/custom_indic.gif and /dev/null differ diff --git a/lib/colorpicker/images/custom_rgb_b.png b/lib/colorpicker/images/custom_rgb_b.png deleted file mode 100644 index 80764e5..0000000 Binary files a/lib/colorpicker/images/custom_rgb_b.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_rgb_g.png b/lib/colorpicker/images/custom_rgb_g.png deleted file mode 100644 index fc9778b..0000000 Binary files a/lib/colorpicker/images/custom_rgb_g.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_rgb_r.png b/lib/colorpicker/images/custom_rgb_r.png deleted file mode 100644 index 91b0cd4..0000000 Binary files a/lib/colorpicker/images/custom_rgb_r.png and /dev/null differ diff --git a/lib/colorpicker/images/custom_submit.png b/lib/colorpicker/images/custom_submit.png deleted file mode 100644 index cd202cd..0000000 Binary files a/lib/colorpicker/images/custom_submit.png and /dev/null differ diff --git a/lib/colorpicker/images/select.png b/lib/colorpicker/images/select.png deleted file mode 100644 index 21213bf..0000000 Binary files a/lib/colorpicker/images/select.png and /dev/null differ diff --git a/lib/colorpicker/images/select2.png b/lib/colorpicker/images/select2.png deleted file mode 100644 index 2cd2cab..0000000 Binary files a/lib/colorpicker/images/select2.png and /dev/null differ diff --git a/lib/colorpicker/images/slider.png b/lib/colorpicker/images/slider.png deleted file mode 100644 index 8b03da9..0000000 Binary files a/lib/colorpicker/images/slider.png and /dev/null differ diff --git a/lib/colorpicker/js/colorpicker.js b/lib/colorpicker/js/colorpicker.js deleted file mode 100644 index 45f56ce..0000000 --- a/lib/colorpicker/js/colorpicker.js +++ /dev/null @@ -1,484 +0,0 @@ -/** - * - * Color picker - * Author: Stefan Petre www.eyecon.ro - * - * Dual licensed under the MIT and GPL licenses - * - */ -(function ($) { - var ColorPicker = function () { - var - ids = {}, - inAction, - charMin = 65, - visible, - tpl = '
', - defaults = { - eventName: 'click', - onShow: function () {}, - onBeforeShow: function(){}, - onHide: function () {}, - onChange: function () {}, - onSubmit: function () {}, - color: 'ff0000', - livePreview: true, - flat: false - }, - fillRGBFields = function (hsb, cal) { - var rgb = HSBToRGB(hsb); - $(cal).data('colorpicker').fields - .eq(1).val(rgb.r).end() - .eq(2).val(rgb.g).end() - .eq(3).val(rgb.b).end(); - }, - fillHSBFields = function (hsb, cal) { - $(cal).data('colorpicker').fields - .eq(4).val(hsb.h).end() - .eq(5).val(hsb.s).end() - .eq(6).val(hsb.b).end(); - }, - fillHexFields = function (hsb, cal) { - $(cal).data('colorpicker').fields - .eq(0).val(HSBToHex(hsb)).end(); - }, - setSelector = function (hsb, cal) { - $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); - $(cal).data('colorpicker').selectorIndic.css({ - left: parseInt(150 * hsb.s/100, 10), - top: parseInt(150 * (100-hsb.b)/100, 10) - }); - }, - setHue = function (hsb, cal) { - $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10)); - }, - setCurrentColor = function (hsb, cal) { - $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); - }, - setNewColor = function (hsb, cal) { - $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); - }, - keyDown = function (ev) { - var pressedKey = ev.charCode || ev.keyCode || -1; - if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { - return false; - } - var cal = $(this).parent().parent(); - if (cal.data('colorpicker').livePreview === true) { - change.apply(this); - } - }, - change = function (ev) { - var cal = $(this).parent().parent(), col; - if (this.parentNode.className.indexOf('_hex') > 0) { - cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); - } else if (this.parentNode.className.indexOf('_hsb') > 0) { - cal.data('colorpicker').color = col = fixHSB({ - h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), - s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), - b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) - }); - } else { - cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ - r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), - g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), - b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) - })); - } - if (ev) { - fillRGBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - } - setSelector(col, cal.get(0)); - setHue(col, cal.get(0)); - setNewColor(col, cal.get(0)); - cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); - }, - blur = function (ev) { - var cal = $(this).parent().parent(); - cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); - }, - focus = function () { - charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; - $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); - $(this).parent().addClass('colorpicker_focus'); - }, - downIncrement = function (ev) { - var field = $(this).parent().find('input').focus(); - var current = { - el: $(this).parent().addClass('colorpicker_slider'), - max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), - y: ev.pageY, - field: field, - val: parseInt(field.val(), 10), - preview: $(this).parent().parent().data('colorpicker').livePreview - }; - $(document).bind('mouseup', current, upIncrement); - $(document).bind('mousemove', current, moveIncrement); - }, - moveIncrement = function (ev) { - ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); - if (ev.data.preview) { - change.apply(ev.data.field.get(0), [true]); - } - return false; - }, - upIncrement = function (ev) { - change.apply(ev.data.field.get(0), [true]); - ev.data.el.removeClass('colorpicker_slider').find('input').focus(); - $(document).unbind('mouseup', upIncrement); - $(document).unbind('mousemove', moveIncrement); - return false; - }, - downHue = function (ev) { - var current = { - cal: $(this).parent(), - y: $(this).offset().top - }; - current.preview = current.cal.data('colorpicker').livePreview; - $(document).bind('mouseup', current, upHue); - $(document).bind('mousemove', current, moveHue); - }, - moveHue = function (ev) { - change.apply( - ev.data.cal.data('colorpicker') - .fields - .eq(4) - .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) - .get(0), - [ev.data.preview] - ); - return false; - }, - upHue = function (ev) { - fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - $(document).unbind('mouseup', upHue); - $(document).unbind('mousemove', moveHue); - return false; - }, - downSelector = function (ev) { - var current = { - cal: $(this).parent(), - pos: $(this).offset() - }; - current.preview = current.cal.data('colorpicker').livePreview; - $(document).bind('mouseup', current, upSelector); - $(document).bind('mousemove', current, moveSelector); - }, - moveSelector = function (ev) { - change.apply( - ev.data.cal.data('colorpicker') - .fields - .eq(6) - .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) - .end() - .eq(5) - .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) - .get(0), - [ev.data.preview] - ); - return false; - }, - upSelector = function (ev) { - fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - $(document).unbind('mouseup', upSelector); - $(document).unbind('mousemove', moveSelector); - return false; - }, - enterSubmit = function (ev) { - $(this).addClass('colorpicker_focus'); - }, - leaveSubmit = function (ev) { - $(this).removeClass('colorpicker_focus'); - }, - clickSubmit = function (ev) { - var cal = $(this).parent(); - var col = cal.data('colorpicker').color; - cal.data('colorpicker').origColor = col; - setCurrentColor(col, cal.get(0)); - cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); - }, - show = function (ev) { - var cal = $('#' + $(this).data('colorpickerId')); - cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); - var pos = $(this).offset(); - var viewPort = getViewport(); - var top = pos.top + this.offsetHeight; - var left = pos.left; - if (top + 176 > viewPort.t + viewPort.h) { - top -= this.offsetHeight + 176; - } - if (left + 356 > viewPort.l + viewPort.w) { - left -= 356; - } - cal.css({left: left + 'px', top: top + 'px'}); - if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { - cal.show(); - } - $(document).bind('mousedown', {cal: cal}, hide); - return false; - }, - hide = function (ev) { - if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { - if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { - ev.data.cal.hide(); - } - $(document).unbind('mousedown', hide); - } - }, - isChildOf = function(parentEl, el, container) { - if (parentEl == el) { - return true; - } - if (parentEl.contains) { - return parentEl.contains(el); - } - if ( parentEl.compareDocumentPosition ) { - return !!(parentEl.compareDocumentPosition(el) & 16); - } - var prEl = el.parentNode; - while(prEl && prEl != container) { - if (prEl == parentEl) - return true; - prEl = prEl.parentNode; - } - return false; - }, - getViewport = function () { - var m = document.compatMode == 'CSS1Compat'; - return { - l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), - t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), - w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), - h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) - }; - }, - fixHSB = function (hsb) { - return { - h: Math.min(360, Math.max(0, hsb.h)), - s: Math.min(100, Math.max(0, hsb.s)), - b: Math.min(100, Math.max(0, hsb.b)) - }; - }, - fixRGB = function (rgb) { - return { - r: Math.min(255, Math.max(0, rgb.r)), - g: Math.min(255, Math.max(0, rgb.g)), - b: Math.min(255, Math.max(0, rgb.b)) - }; - }, - fixHex = function (hex) { - var len = 6 - hex.length; - if (len > 0) { - var o = []; - for (var i=0; i -1) ? hex.substring(1) : hex), 16); - return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; - }, - HexToHSB = function (hex) { - return RGBToHSB(HexToRGB(hex)); - }, - RGBToHSB = function (rgb) { - var hsb = { - h: 0, - s: 0, - b: 0 - }; - var min = Math.min(rgb.r, rgb.g, rgb.b); - var max = Math.max(rgb.r, rgb.g, rgb.b); - var delta = max - min; - hsb.b = max; - if (max != 0) { - - } - hsb.s = max != 0 ? 255 * delta / max : 0; - if (hsb.s != 0) { - if (rgb.r == max) { - hsb.h = (rgb.g - rgb.b) / delta; - } else if (rgb.g == max) { - hsb.h = 2 + (rgb.b - rgb.r) / delta; - } else { - hsb.h = 4 + (rgb.r - rgb.g) / delta; - } - } else { - hsb.h = -1; - } - hsb.h *= 60; - if (hsb.h < 0) { - hsb.h += 360; - } - hsb.s *= 100/255; - hsb.b *= 100/255; - return hsb; - }, - HSBToRGB = function (hsb) { - var rgb = {}; - var h = Math.round(hsb.h); - var s = Math.round(hsb.s*255/100); - var v = Math.round(hsb.b*255/100); - if(s == 0) { - rgb.r = rgb.g = rgb.b = v; - } else { - var t1 = v; - var t2 = (255-s)*v/255; - var t3 = (t1-t2)*(h%60)/60; - if(h==360) h = 0; - if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3} - else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3} - else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3} - else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3} - else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3} - else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3} - else {rgb.r=0; rgb.g=0; rgb.b=0} - } - return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)}; - }, - RGBToHex = function (rgb) { - var hex = [ - rgb.r.toString(16), - rgb.g.toString(16), - rgb.b.toString(16) - ]; - $.each(hex, function (nr, val) { - if (val.length == 1) { - hex[nr] = '0' + val; - } - }); - return hex.join(''); - }, - HSBToHex = function (hsb) { - return RGBToHex(HSBToRGB(hsb)); - }, - restoreOriginal = function () { - var cal = $(this).parent(); - var col = cal.data('colorpicker').origColor; - cal.data('colorpicker').color = col; - fillRGBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - setSelector(col, cal.get(0)); - setHue(col, cal.get(0)); - setNewColor(col, cal.get(0)); - }; - return { - init: function (opt) { - opt = $.extend({}, defaults, opt||{}); - if (typeof opt.color == 'string') { - opt.color = HexToHSB(opt.color); - } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { - opt.color = RGBToHSB(opt.color); - } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { - opt.color = fixHSB(opt.color); - } else { - return this; - } - return this.each(function () { - if (!$(this).data('colorpickerId')) { - var options = $.extend({}, opt); - options.origColor = opt.color; - var id = 'collorpicker_' + parseInt(Math.random() * 1000); - $(this).data('colorpickerId', id); - var cal = $(tpl).attr('id', id); - if (options.flat) { - cal.appendTo(this).show(); - } else { - cal.appendTo(document.body); - } - options.fields = cal - .find('input') - .bind('keyup', keyDown) - .bind('change', change) - .bind('blur', blur) - .bind('focus', focus); - cal - .find('span').bind('mousedown', downIncrement).end() - .find('>div.colorpicker_current_color').bind('click', restoreOriginal); - options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector); - options.selectorIndic = options.selector.find('div div'); - options.el = this; - options.hue = cal.find('div.colorpicker_hue div'); - cal.find('div.colorpicker_hue').bind('mousedown', downHue); - options.newColor = cal.find('div.colorpicker_new_color'); - options.currentColor = cal.find('div.colorpicker_current_color'); - cal.data('colorpicker', options); - cal.find('div.colorpicker_submit') - .bind('mouseenter', enterSubmit) - .bind('mouseleave', leaveSubmit) - .bind('click', clickSubmit); - fillRGBFields(options.color, cal.get(0)); - fillHSBFields(options.color, cal.get(0)); - fillHexFields(options.color, cal.get(0)); - setHue(options.color, cal.get(0)); - setSelector(options.color, cal.get(0)); - setCurrentColor(options.color, cal.get(0)); - setNewColor(options.color, cal.get(0)); - if (options.flat) { - cal.css({ - position: 'relative', - display: 'block' - }); - } else { - $(this).bind(options.eventName, show); - } - } - }); - }, - showPicker: function() { - return this.each( function () { - if ($(this).data('colorpickerId')) { - show.apply(this); - } - }); - }, - hidePicker: function() { - return this.each( function () { - if ($(this).data('colorpickerId')) { - $('#' + $(this).data('colorpickerId')).hide(); - } - }); - }, - setColor: function(col) { - if (typeof col == 'string') { - col = HexToHSB(col); - } else if (col.r != undefined && col.g != undefined && col.b != undefined) { - col = RGBToHSB(col); - } else if (col.h != undefined && col.s != undefined && col.b != undefined) { - col = fixHSB(col); - } else { - return this; - } - return this.each(function(){ - if ($(this).data('colorpickerId')) { - var cal = $('#' + $(this).data('colorpickerId')); - cal.data('colorpicker').color = col; - cal.data('colorpicker').origColor = col; - fillRGBFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - setHue(col, cal.get(0)); - setSelector(col, cal.get(0)); - setCurrentColor(col, cal.get(0)); - setNewColor(col, cal.get(0)); - } - }); - } - }; - }(); - $.fn.extend({ - ColorPicker: ColorPicker.init, - ColorPickerHide: ColorPicker.hidePicker, - ColorPickerShow: ColorPicker.showPicker, - ColorPickerSetColor: ColorPicker.setColor - }); -})(jQuery) \ No newline at end of file diff --git a/library.js b/library.js index b91d1cc..ae742a4 100644 --- a/library.js +++ b/library.js @@ -1,16 +1,31 @@ -(function (module) { + 'use strict'; -var Plugin = {}, -codeRegex = /(?:
(?:.|\n)*?<\/pre>|(?:.|\n)*?<\/code>)/gi,
-colorRegex = /%\((#(?:[A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3})?)|(?:rgb\(\d{1,3},\d{1,3},\d{1,3}\))|(?:[a-zа-я]){3,})\)\[(.+?)\]/gi;
+
+const Plugin = module.exports;
+
+const codeRegex = /(?:
(?:.|\n)*?<\/pre>|(?:.|\n)*?<\/code>)/gi;
+
+const colorRegex = /%\((#(?:[A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3})?)|(?:rgb\(\d{1,3},\d{1,3},\d{1,3}\))|(?:[a-zа-я]){3,})\)\[(.+?)\]/gi;
+
+Plugin.registerFormatting = function (payload) {
+	const formatting = [
+		{ name: 'eyedropper', className: 'fa fa-eyedropper', title: 'Color' },
+	];
+
+	payload.options = payload.options.concat(formatting);
+
+	return payload;
+}
 
 Plugin.parse = function (data, callback) {
-	if (data && 'string' === typeof data) {
-		data = parser(data);
-	} else if (data.postData && data.postData.content && data.postData.content.match(colorRegex)) {
-		data.postData.content = parser(data.postData.content);
-	} else if (data.userData && data.userData.signature && data.userData.signature.match(colorRegex)) {
-		data.userData.signature = parser(data.userData.signature);
+	if (data) {
+		if ('string' === typeof data) {
+			data = parser(data);
+		} else if (data?.postData?.content?.match(colorRegex)) {
+			data.postData.content = parser(data.postData.content);
+		} else if (data?.userData?.signature?.match(colorRegex)) {
+			data.userData.signature = parser(data.userData.signature);
+		}
 	}
 	callback(null, data);
 };
@@ -46,6 +61,4 @@ function parser (data) {
 	return data;
 }
 
-module.exports = Plugin;
 
-})(module);
diff --git a/package.json b/package.json
index 6ef246f..0ad81b7 100644
--- a/package.json
+++ b/package.json
@@ -1,14 +1,14 @@
 {
-  "name": "nodebb-plugin-mega-colors",
-  "version": "0.10.24",
+  "name": "@nodebb/nodebb-plugin-mega-colors",
+  "version": "1.0.1",
   "nbbpm": {
-    "compatibility": "^0.7.1 || ^0.8.0 || ^0.9.0 || ^1.0.0"
+    "compatibility": "^4.x"
   },
   "description": "NodeBB Plugin that allows users to use colors in their posts.",
   "main": "library.js",
   "repository": {
     "type": "git",
-    "url": "https://github.com/MegaGM/nodebb-plugin-mega-colors.git"
+    "url": "https://github.com/barisusakli/nodebb-plugin-mega-colors.git"
   },
   "keywords": [
     "nodebb",
@@ -16,11 +16,12 @@
   ],
   "license": "MIT",
   "dependencies": {},
-  "homepage": "https://github.com/MegaGM/nodebb-plugin-mega-colors",
+  "homepage": "https://github.com/barisusakli/nodebb-plugin-mega-colors",
   "maintainers": [
     {
-      "name": "Mega",
-      "email": "daxaka.msk@gmail.com"
+      "name": "Barış Soner Uşaklı",
+      "email": "baris@nodebb.org",
+      "url": "https://github.com/barisusakli"
     }
   ],
   "directories": {}
diff --git a/plugin.json b/plugin.json
index 8380598..a0a842e 100644
--- a/plugin.json
+++ b/plugin.json
@@ -1,22 +1,16 @@
 {
-	"id": "nodebb-plugin-mega-colors",
+	"id": "@nodebb/nodebb-plugin-mega-colors",
 	"name": "NodeBB Text Colors Plugin",
 	"description": "NodeBB Plugin that allows users to use colors in their posts.",
-	"url": "https://github.com/MegaGM/nodebb-plugin-mega-colors",
+	"url": "https://github.com/barisusakli/nodebb-plugin-mega-colors",
 	"library": "./library.js",
-	"staticDirs": {
-		"images": "lib/colorpicker/images"
-	},
 	"hooks": [
 		{ "hook": "filter:parse.post", "method": "parse" },
 		{ "hook": "filter:parse.signature", "method": "parse" },
-		{ "hook": "filter:parse.raw", "method": "parse" }
-	],
-	"less": [
-		"lib/colorpicker/css/colorpicker.less"
+		{ "hook": "filter:parse.raw", "method": "parse" },
+		{ "hook": "filter:composer.formatting", "method": "registerFormatting" }
 	],
 	"scripts": [
-		"./button.js",
-		"lib/colorpicker/js/colorpicker.js"
+		"./public/button.js"
 	]
 }
diff --git a/public/button.js b/public/button.js
new file mode 100644
index 0000000..a0e41ac
--- /dev/null
+++ b/public/button.js
@@ -0,0 +1,39 @@
+$('document').ready(function () {
+	require(['composer/controls', 'composer/formatting'], function (controls, formatting) {
+		$(window).on('action:composer.enhanced', (ev, { postContainer }) => {
+			let composerTextarea;
+			const btn = postContainer.find('[data-format="eyedropper"]')
+
+			const colorInput = $(``);
+			colorInput.insertAfter(btn);
+
+			colorInput.on('input', function () {
+				const start = composerTextarea.selectionStart;
+				const end = composerTextarea.selectionEnd;
+				composerTextarea.value = composerTextarea.value.slice(0, start) + this.value + composerTextarea.value.slice(end);
+
+				// force preview to be updated
+				$(composerTextarea).trigger('propertychange');
+
+				composerTextarea.selectionStart = start;
+				composerTextarea.selectionEnd = end;
+			});
+
+			formatting.addButtonDispatch('eyedropper', function (textarea, selectionStart, selectionEnd) {
+				if (selectionStart === selectionEnd) {
+					controls.insertIntoTextarea(textarea, '%(#000000)[Colored Text Here]');
+					controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 9);
+				} else {
+					controls.wrapSelectionInTextareaWith(textarea, '%(#000000)[', ']');
+					controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 9);
+				}
+				composerTextarea = textarea;
+				colorInput.click();
+			});
+		});
+	});
+});