organizrnginxsonarrradarrplexdashboardcouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallemby
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1653 lines
55 KiB
1653 lines
55 KiB
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, {
|
|
/******/ configurable: false,
|
|
/******/ enumerable: true,
|
|
/******/ get: getter
|
|
/******/ });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./node_modules/ev-emitter/ev-emitter.js":
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
|
|
* EvEmitter v1.1.0
|
|
* Lil' event emitter
|
|
* MIT License
|
|
*/
|
|
|
|
/* jshint unused: true, undef: true, strict: true */
|
|
|
|
( function( global, factory ) {
|
|
// universal module definition
|
|
/* jshint strict: false */ /* globals define, module, window */
|
|
if ( true ) {
|
|
// AMD - RequireJS
|
|
!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
|
(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
|
|
__WEBPACK_AMD_DEFINE_FACTORY__),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
} else if ( typeof module == 'object' && module.exports ) {
|
|
// CommonJS - Browserify, Webpack
|
|
module.exports = factory();
|
|
} else {
|
|
// Browser globals
|
|
global.EvEmitter = factory();
|
|
}
|
|
|
|
}( typeof window != 'undefined' ? window : this, function() {
|
|
|
|
"use strict";
|
|
|
|
function EvEmitter() {}
|
|
|
|
var proto = EvEmitter.prototype;
|
|
|
|
proto.on = function( eventName, listener ) {
|
|
if ( !eventName || !listener ) {
|
|
return;
|
|
}
|
|
// set events hash
|
|
var events = this._events = this._events || {};
|
|
// set listeners array
|
|
var listeners = events[ eventName ] = events[ eventName ] || [];
|
|
// only add once
|
|
if ( listeners.indexOf( listener ) == -1 ) {
|
|
listeners.push( listener );
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
proto.once = function( eventName, listener ) {
|
|
if ( !eventName || !listener ) {
|
|
return;
|
|
}
|
|
// add event
|
|
this.on( eventName, listener );
|
|
// set once flag
|
|
// set onceEvents hash
|
|
var onceEvents = this._onceEvents = this._onceEvents || {};
|
|
// set onceListeners object
|
|
var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
|
|
// set flag
|
|
onceListeners[ listener ] = true;
|
|
|
|
return this;
|
|
};
|
|
|
|
proto.off = function( eventName, listener ) {
|
|
var listeners = this._events && this._events[ eventName ];
|
|
if ( !listeners || !listeners.length ) {
|
|
return;
|
|
}
|
|
var index = listeners.indexOf( listener );
|
|
if ( index != -1 ) {
|
|
listeners.splice( index, 1 );
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
proto.emitEvent = function( eventName, args ) {
|
|
var listeners = this._events && this._events[ eventName ];
|
|
if ( !listeners || !listeners.length ) {
|
|
return;
|
|
}
|
|
// copy over to avoid interference if .off() in listener
|
|
listeners = listeners.slice(0);
|
|
args = args || [];
|
|
// once stuff
|
|
var onceListeners = this._onceEvents && this._onceEvents[ eventName ];
|
|
|
|
for ( var i=0; i < listeners.length; i++ ) {
|
|
var listener = listeners[i]
|
|
var isOnce = onceListeners && onceListeners[ listener ];
|
|
if ( isOnce ) {
|
|
// remove listener
|
|
// remove before trigger to prevent recursion
|
|
this.off( eventName, listener );
|
|
// unset once flag
|
|
delete onceListeners[ listener ];
|
|
}
|
|
// trigger listener
|
|
listener.apply( this, args );
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
proto.allOff = function() {
|
|
delete this._events;
|
|
delete this._onceEvents;
|
|
};
|
|
|
|
return EvEmitter;
|
|
|
|
}));
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/huebee/huebee.js":
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
|
|
* Huebee v2.0.0
|
|
* 1-click color picker
|
|
* MIT license
|
|
* http://huebee.buzz
|
|
* Copyright 2018 Metafizzy
|
|
*/
|
|
|
|
/*jshint browser: true, unused: true, undef: true */
|
|
|
|
( function( window, factory ) {
|
|
// universal module definition
|
|
/* globals define, module, require */
|
|
if ( true ) {
|
|
// AMD
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
|
__webpack_require__("./node_modules/ev-emitter/ev-emitter.js"),
|
|
__webpack_require__("./node_modules/unipointer/unipointer.js"),
|
|
], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter, Unipointer ) {
|
|
return factory( window, EvEmitter, Unipointer );
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
} else if ( typeof module == 'object' && module.exports ) {
|
|
// CommonJS
|
|
module.exports = factory(
|
|
window,
|
|
require('ev-emitter'),
|
|
require('unipointer')
|
|
);
|
|
} else {
|
|
// browser global
|
|
window.Huebee = factory(
|
|
window,
|
|
window.EvEmitter,
|
|
window.Unipointer
|
|
);
|
|
}
|
|
|
|
}( window, function factory( window, EvEmitter, Unipointer ) {
|
|
|
|
function Huebee( anchor, options ) {
|
|
// anchor
|
|
anchor = getQueryElement( anchor );
|
|
if ( !anchor ) {
|
|
throw 'Bad element for Huebee: ' + anchor;
|
|
}
|
|
this.anchor = anchor;
|
|
// options
|
|
this.options = {};
|
|
this.option( Huebee.defaults );
|
|
this.option( options );
|
|
// kick things off
|
|
this.create();
|
|
}
|
|
|
|
Huebee.defaults = {
|
|
hues: 12,
|
|
hue0: 0,
|
|
shades: 5,
|
|
saturations: 3,
|
|
notation: 'shortHex',
|
|
setText: true,
|
|
setBGColor: true,
|
|
};
|
|
|
|
var proto = Huebee.prototype = Object.create( EvEmitter.prototype );
|
|
|
|
proto.option = function( options ) {
|
|
this.options = extend( this.options, options );
|
|
};
|
|
|
|
// globally unique identifiers
|
|
var GUID = 0;
|
|
// internal store of all Colcade intances
|
|
var instances = {};
|
|
|
|
proto.create = function() {
|
|
// add guid for Colcade.data
|
|
var guid = this.guid = ++GUID;
|
|
this.anchor.huebeeGUID = guid;
|
|
instances[ guid ] = this; // associate via id
|
|
// properties
|
|
this.setBGElems = this.getSetElems( this.options.setBGColor );
|
|
this.setTextElems = this.getSetElems( this.options.setText );
|
|
// events
|
|
// HACK: this is getting ugly
|
|
this.outsideCloseIt = this.outsideClose.bind( this );
|
|
this.onDocKeydown = this.docKeydown.bind( this );
|
|
this.closeIt = this.close.bind( this );
|
|
this.openIt = this.open.bind( this );
|
|
this.onElemTransitionend = this.elemTransitionend.bind( this );
|
|
// open events
|
|
this.isInputAnchor = this.anchor.nodeName == 'INPUT';
|
|
if ( !this.options.staticOpen ) {
|
|
this.anchor.addEventListener( 'click', this.openIt );
|
|
this.anchor.addEventListener( 'focus', this.openIt );
|
|
}
|
|
// change event
|
|
if ( this.isInputAnchor ) {
|
|
this.anchor.addEventListener( 'input', this.inputInput.bind( this ) );
|
|
}
|
|
// create element
|
|
var element = this.element = document.createElement('div');
|
|
element.className = 'huebee ';
|
|
element.className += this.options.staticOpen ? 'is-static-open ' :
|
|
'is-hidden ';
|
|
element.className += this.options.className || '';
|
|
// create container
|
|
var container = this.container = document.createElement('div');
|
|
container.className = 'huebee__container';
|
|
// do not blur if padding clicked
|
|
function onContainerPointerStart( event ) {
|
|
if ( event.target == container ) {
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
container.addEventListener( 'mousedown', onContainerPointerStart );
|
|
container.addEventListener( 'touchstart', onContainerPointerStart );
|
|
// create canvas
|
|
this.createCanvas();
|
|
// create cursor
|
|
this.cursor = document.createElement('div');
|
|
this.cursor.className = 'huebee__cursor is-hidden';
|
|
container.appendChild( this.cursor );
|
|
// create close button
|
|
this.createCloseButton();
|
|
|
|
element.appendChild( container );
|
|
// set relative position on parent
|
|
if ( !this.options.staticOpen ) {
|
|
var parentStyle = getComputedStyle( this.anchor.parentNode );
|
|
if ( parentStyle.position != 'relative' && parentStyle.position != 'absolute' ) {
|
|
this.anchor.parentNode.style.position = 'relative';
|
|
}
|
|
}
|
|
|
|
// satY
|
|
var hues = this.options.hues;
|
|
var customColors = this.options.customColors;
|
|
var customLength = customColors && customColors.length;
|
|
// y position where saturation grid starts
|
|
this.satY = customLength ? Math.ceil( customLength/hues ) + 1 : 0;
|
|
// colors
|
|
this.updateColors();
|
|
this.setAnchorColor();
|
|
if ( this.options.staticOpen ) {
|
|
this.open();
|
|
}
|
|
};
|
|
|
|
proto.getSetElems = function( option ) {
|
|
if ( option === true ) {
|
|
return [ this.anchor ];
|
|
} else if ( typeof option == 'string' ) {
|
|
return document.querySelectorAll( option );
|
|
}
|
|
};
|
|
|
|
proto.createCanvas = function() {
|
|
var canvas = this.canvas = document.createElement('canvas');
|
|
canvas.className = 'huebee__canvas';
|
|
this.ctx = canvas.getContext('2d');
|
|
// canvas pointer events
|
|
var canvasPointer = this.canvasPointer = new Unipointer();
|
|
canvasPointer._bindStartEvent( canvas );
|
|
canvasPointer.on( 'pointerDown', this.canvasPointerDown.bind( this ) );
|
|
canvasPointer.on( 'pointerMove', this.canvasPointerMove.bind( this ) );
|
|
this.container.appendChild( canvas );
|
|
};
|
|
|
|
var svgURI = 'http://www.w3.org/2000/svg';
|
|
|
|
proto.createCloseButton = function() {
|
|
if ( this.options.staticOpen ) {
|
|
return;
|
|
}
|
|
var svg = document.createElementNS( svgURI, 'svg');
|
|
svg.setAttribute( 'class', 'huebee__close-button' );
|
|
svg.setAttribute( 'viewBox', '0 0 24 24' );
|
|
svg.setAttribute( 'width', '24' );
|
|
svg.setAttribute( 'height', '24' );
|
|
var path = document.createElementNS( svgURI, 'path');
|
|
path.setAttribute( 'd', 'M 7,7 L 17,17 M 17,7 L 7,17' );
|
|
path.setAttribute( 'class', 'huebee__close-button__x' );
|
|
svg.appendChild( path );
|
|
svg.addEventListener( 'click', this.closeIt );
|
|
this.container.appendChild( svg );
|
|
};
|
|
|
|
proto.updateColors = function() {
|
|
// hash of color, h, s, l according to x,y grid position
|
|
// [x,y] = { color, h, s, l }
|
|
this.swatches = {};
|
|
// hash of gridX,gridY position according to color
|
|
// [#09F] = { x, y }
|
|
this.colorGrid = {};
|
|
this.updateColorModer();
|
|
|
|
var shades = this.options.shades;
|
|
var sats = this.options.saturations;
|
|
var hues = this.options.hues;
|
|
var customColors = this.options.customColors;
|
|
|
|
// render custom colors
|
|
if ( customColors && customColors.length ) {
|
|
var customI = 0;
|
|
customColors.forEach( function( color ) {
|
|
var x = customI % hues;
|
|
var y = Math.floor( customI/hues );
|
|
var swatch = getSwatch( color );
|
|
if ( swatch ) {
|
|
this.addSwatch( swatch, x, y );
|
|
customI++;
|
|
}
|
|
}.bind( this ) );
|
|
}
|
|
|
|
// render saturation grids
|
|
for ( var i=0; i < sats; i++ ) {
|
|
var sat = 1 - i/sats;
|
|
var yOffset = shades*i + this.satY;
|
|
this.updateSaturationGrid( i, sat, yOffset );
|
|
}
|
|
|
|
// render grays
|
|
for ( i=0; i < shades+2; i++ ) {
|
|
var lum = 1 - i/(shades+1);
|
|
var color = this.colorModer( 0, 0, lum );
|
|
var swatch = getSwatch( color );
|
|
this.addSwatch( swatch, hues+1, i );
|
|
}
|
|
};
|
|
|
|
proto.updateSaturationGrid = function( i, sat, yOffset ) {
|
|
var shades = this.options.shades;
|
|
var hues = this.options.hues;
|
|
var hue0 = this.options.hue0;
|
|
for ( var row = 0; row < shades; row++ ) {
|
|
for ( var col = 0; col < hues; col++ ) {
|
|
var hue = Math.round( col * 360/hues + hue0 ) % 360;
|
|
var lum = 1 - (row+1) / (shades+1);
|
|
var color = this.colorModer( hue, sat, lum );
|
|
var swatch = getSwatch( color );
|
|
var gridY = row + yOffset;
|
|
this.addSwatch( swatch, col, gridY );
|
|
}
|
|
}
|
|
};
|
|
|
|
proto.addSwatch = function( swatch, gridX, gridY ) {
|
|
// add swatch color to hash
|
|
this.swatches[ gridX + ',' + gridY ] = swatch;
|
|
// add color to colorGrid
|
|
this.colorGrid[ swatch.color.toUpperCase() ] = {
|
|
x: gridX,
|
|
y: gridY,
|
|
};
|
|
};
|
|
|
|
var colorModers = {
|
|
hsl: function( h, s, l ) {
|
|
s = Math.round( s * 100 );
|
|
l = Math.round( l * 100 );
|
|
return 'hsl(' + h + ', ' + s + '%, ' + l + '%)';
|
|
},
|
|
hex: hsl2hex,
|
|
shortHex: function( h, s, l ) {
|
|
var hex = hsl2hex( h, s, l );
|
|
return roundHex( hex );
|
|
}
|
|
};
|
|
|
|
proto.updateColorModer = function() {
|
|
this.colorModer = colorModers[ this.options.notation ] || colorModers.shortHex;
|
|
};
|
|
|
|
proto.renderColors = function() {
|
|
var gridSize = this.gridSize*2;
|
|
for ( var position in this.swatches ) {
|
|
var swatch = this.swatches[ position ];
|
|
var duple = position.split(',');
|
|
var gridX = duple[0];
|
|
var gridY = duple[1];
|
|
this.ctx.fillStyle = swatch.color;
|
|
this.ctx.fillRect( gridX*gridSize, gridY*gridSize, gridSize, gridSize );
|
|
}
|
|
};
|
|
|
|
proto.setAnchorColor = function() {
|
|
if ( this.isInputAnchor ) {
|
|
this.setColor( this.anchor.value );
|
|
}
|
|
};
|
|
|
|
// ----- events ----- //
|
|
|
|
var docElem = document.documentElement;
|
|
|
|
proto.open = function() {
|
|
/* jshint unused: false */
|
|
if ( this.isOpen ) {
|
|
return;
|
|
}
|
|
var anchor = this.anchor;
|
|
var elem = this.element;
|
|
if ( !this.options.staticOpen ) {
|
|
elem.style.left = anchor.offsetLeft + 'px';
|
|
elem.style.top = anchor.offsetTop + anchor.offsetHeight + 'px';
|
|
}
|
|
this.bindOpenEvents( true );
|
|
elem.removeEventListener( 'transitionend', this.onElemTransitionend );
|
|
// add huebee to DOM
|
|
anchor.parentNode.insertBefore( elem, anchor.nextSibling );
|
|
// measurements
|
|
var duration = getComputedStyle( elem ).transitionDuration;
|
|
this.hasTransition = duration && duration != 'none' && parseFloat( duration );
|
|
|
|
this.isOpen = true;
|
|
this.updateSizes();
|
|
this.renderColors();
|
|
this.setAnchorColor();
|
|
|
|
// trigger reflow for transition
|
|
var h = elem.offsetHeight;
|
|
elem.classList.remove('is-hidden');
|
|
};
|
|
|
|
proto.bindOpenEvents = function( isAdd ) {
|
|
if ( this.options.staticOpen ) {
|
|
return;
|
|
}
|
|
var method = ( isAdd ? 'add' : 'remove' ) + 'EventListener';
|
|
docElem[ method]( 'mousedown', this.outsideCloseIt );
|
|
docElem[ method]( 'touchstart', this.outsideCloseIt );
|
|
document[ method ]( 'focusin', this.outsideCloseIt );
|
|
document[ method ]( 'keydown', this.onDocKeydown );
|
|
this.anchor[ method ]( 'blur', this.closeIt );
|
|
};
|
|
|
|
proto.updateSizes = function() {
|
|
var hues = this.options.hues;
|
|
var shades = this.options.shades;
|
|
var sats = this.options.saturations;
|
|
|
|
this.cursorBorder = parseInt( getComputedStyle( this.cursor ).borderTopWidth, 10 );
|
|
this.gridSize = Math.round( this.cursor.offsetWidth - this.cursorBorder*2 );
|
|
this.canvasOffset = {
|
|
x: this.canvas.offsetLeft,
|
|
y: this.canvas.offsetTop,
|
|
};
|
|
var height = Math.max( shades*sats + this.satY, shades+2 );
|
|
var width = this.gridSize * (hues+2);
|
|
this.canvas.width = width * 2;
|
|
this.canvas.style.width = width + 'px';
|
|
this.canvas.height = this.gridSize * height * 2;
|
|
};
|
|
|
|
// close if target is not anchor or element
|
|
proto.outsideClose = function( event ) {
|
|
var isAnchor = this.anchor.contains( event.target );
|
|
var isElement = this.element.contains( event.target );
|
|
if ( !isAnchor && !isElement ) {
|
|
this.close();
|
|
}
|
|
};
|
|
|
|
var closeKeydowns = {
|
|
13: true, // enter
|
|
27: true, // esc
|
|
};
|
|
|
|
proto.docKeydown = function( event ) {
|
|
if ( closeKeydowns[ event.keyCode ] ) {
|
|
this.close();
|
|
}
|
|
};
|
|
|
|
var supportsTransitions = typeof docElem.style.transform == 'string';
|
|
|
|
proto.close = function() {
|
|
if ( !this.isOpen ) {
|
|
return;
|
|
}
|
|
|
|
if ( supportsTransitions && this.hasTransition ) {
|
|
this.element.addEventListener( 'transitionend', this.onElemTransitionend );
|
|
} else {
|
|
this.remove();
|
|
}
|
|
this.element.classList.add('is-hidden');
|
|
|
|
this.bindOpenEvents( false );
|
|
this.isOpen = false;
|
|
};
|
|
|
|
proto.remove = function() {
|
|
var parent = this.element.parentNode;
|
|
if ( parent.contains( this.element ) ) {
|
|
parent.removeChild( this.element );
|
|
}
|
|
};
|
|
|
|
proto.elemTransitionend = function( event ) {
|
|
if ( event.target != this.element ) {
|
|
return;
|
|
}
|
|
this.element.removeEventListener( 'transitionend', this.onElemTransitionend );
|
|
this.remove();
|
|
};
|
|
|
|
proto.inputInput = function() {
|
|
this.setColor( this.anchor.value );
|
|
};
|
|
|
|
// ----- canvas pointer ----- //
|
|
|
|
proto.canvasPointerDown = function( event, pointer ) {
|
|
event.preventDefault();
|
|
this.updateOffset();
|
|
this.canvasPointerChange( pointer );
|
|
};
|
|
|
|
proto.updateOffset = function() {
|
|
var boundingRect = this.canvas.getBoundingClientRect();
|
|
this.offset = {
|
|
x: boundingRect.left + window.pageXOffset,
|
|
y: boundingRect.top + window.pageYOffset,
|
|
};
|
|
};
|
|
|
|
proto.canvasPointerMove = function( event, pointer ) {
|
|
this.canvasPointerChange( pointer );
|
|
};
|
|
|
|
proto.canvasPointerChange = function( pointer ) {
|
|
var x = Math.round( pointer.pageX - this.offset.x );
|
|
var y = Math.round( pointer.pageY - this.offset.y );
|
|
var gridSize = this.gridSize;
|
|
var sx = Math.floor( x/gridSize );
|
|
var sy = Math.floor( y/gridSize );
|
|
|
|
var swatch = this.swatches[ sx + ',' + sy ];
|
|
this.setSwatch( swatch );
|
|
};
|
|
|
|
// ----- select ----- //
|
|
|
|
proto.setColor = function( color ) {
|
|
var swatch = getSwatch( color );
|
|
this.setSwatch( swatch );
|
|
};
|
|
|
|
proto.setSwatch = function( swatch ) {
|
|
var color = swatch && swatch.color;
|
|
if ( !swatch ) {
|
|
return;
|
|
}
|
|
var wasSameColor = color == this.color;
|
|
// color properties
|
|
this.color = color;
|
|
this.hue = swatch.hue;
|
|
this.sat = swatch.sat;
|
|
this.lum = swatch.lum;
|
|
// estimate if color can have dark or white text
|
|
var lightness = this.lum - Math.cos( (this.hue+70) / 180*Math.PI ) * 0.15;
|
|
this.isLight = lightness > 0.5;
|
|
// cursor
|
|
var gridPosition = this.colorGrid[ color.toUpperCase() ];
|
|
this.updateCursor( gridPosition );
|
|
// set texts & backgrounds
|
|
this.setTexts();
|
|
this.setBackgrounds();
|
|
// event
|
|
if ( !wasSameColor ) {
|
|
this.emitEvent( 'change', [ color, swatch.hue, swatch.sat, swatch.lum ] );
|
|
}
|
|
};
|
|
|
|
proto.setTexts = function() {
|
|
if ( !this.setTextElems ) {
|
|
return;
|
|
}
|
|
for ( var i=0; i < this.setTextElems.length; i++ ) {
|
|
var elem = this.setTextElems[i];
|
|
var property = elem.nodeName == 'INPUT' ? 'value' : 'textContent';
|
|
elem[ property ] = this.color;
|
|
}
|
|
};
|
|
|
|
proto.setBackgrounds = function() {
|
|
if ( !this.setBGElems ) {
|
|
return;
|
|
}
|
|
var textColor = this.isLight ? '#222' : 'white';
|
|
for ( var i=0; i < this.setBGElems.length; i++ ) {
|
|
var elem = this.setBGElems[i];
|
|
elem.style.backgroundColor = this.color;
|
|
elem.style.color = textColor;
|
|
}
|
|
};
|
|
|
|
proto.updateCursor = function( position ) {
|
|
if ( !this.isOpen ) {
|
|
return;
|
|
}
|
|
// show cursor if color is on the grid
|
|
var classMethod = position ? 'remove' : 'add';
|
|
this.cursor.classList[ classMethod ]('is-hidden');
|
|
|
|
if ( !position ) {
|
|
return;
|
|
}
|
|
var gridSize = this.gridSize;
|
|
var offset = this.canvasOffset;
|
|
var border = this.cursorBorder;
|
|
this.cursor.style.left = position.x*gridSize + offset.x - border + 'px';
|
|
this.cursor.style.top = position.y*gridSize + offset.y - border + 'px';
|
|
};
|
|
|
|
// -------------------------- htmlInit -------------------------- //
|
|
|
|
var console = window.console;
|
|
|
|
function htmlInit() {
|
|
var elems = document.querySelectorAll('[data-huebee]');
|
|
for ( var i=0; i < elems.length; i++ ) {
|
|
var elem = elems[i];
|
|
var attr = elem.getAttribute('data-huebee');
|
|
var options;
|
|
try {
|
|
options = attr && JSON.parse( attr );
|
|
} catch ( error ) {
|
|
// log error, do not initialize
|
|
if ( console ) {
|
|
console.error( 'Error parsing data-huebee on ' + elem.className +
|
|
': ' + error );
|
|
}
|
|
continue;
|
|
}
|
|
// initialize
|
|
new Huebee( elem, options );
|
|
}
|
|
}
|
|
|
|
var readyState = document.readyState;
|
|
if ( readyState == 'complete' || readyState == 'interactive' ) {
|
|
htmlInit();
|
|
} else {
|
|
document.addEventListener( 'DOMContentLoaded', htmlInit );
|
|
}
|
|
|
|
// -------------------------- Huebee.data -------------------------- //
|
|
|
|
Huebee.data = function( elem ) {
|
|
elem = getQueryElement( elem );
|
|
var id = elem && elem.huebeeGUID;
|
|
return id && instances[ id ];
|
|
};
|
|
|
|
// -------------------------- getSwatch -------------------------- //
|
|
|
|
// proxy canvas used to check colors
|
|
var proxyCanvas = document.createElement('canvas');
|
|
proxyCanvas.width = proxyCanvas.height = 1;
|
|
var proxyCtx = proxyCanvas.getContext('2d');
|
|
|
|
function getSwatch( color ) {
|
|
// check that color value is valid
|
|
proxyCtx.clearRect( 0, 0, 1, 1 );
|
|
proxyCtx.fillStyle = '#010203'; // reset value
|
|
proxyCtx.fillStyle = color;
|
|
proxyCtx.fillRect( 0, 0, 1, 1 );
|
|
var data = proxyCtx.getImageData( 0, 0, 1, 1 ).data;
|
|
// convert to array, imageData not array, #10
|
|
data = [ data[0], data[1], data[2], data[3] ];
|
|
if ( data.join(',') == '1,2,3,255' ) {
|
|
// invalid color
|
|
return;
|
|
}
|
|
// convert rgb to hsl
|
|
var hsl = rgb2hsl.apply( this, data );
|
|
return {
|
|
color: color.trim(),
|
|
hue: hsl[0],
|
|
sat: hsl[1],
|
|
lum: hsl[2],
|
|
};
|
|
}
|
|
|
|
// -------------------------- utils -------------------------- //
|
|
|
|
function extend( a, b ) {
|
|
for ( var prop in b ) {
|
|
a[ prop ] = b[ prop ];
|
|
}
|
|
return a;
|
|
}
|
|
|
|
function getQueryElement( elem ) {
|
|
if ( typeof elem == 'string' ) {
|
|
elem = document.querySelector( elem );
|
|
}
|
|
return elem;
|
|
}
|
|
|
|
function hsl2hex( h, s, l ) {
|
|
var rgb = hsl2rgb( h, s, l );
|
|
return rgb2hex( rgb );
|
|
}
|
|
|
|
// thx jfsiii
|
|
// https://github.com/jfsiii/chromath/blob/master/src/static.js#L312
|
|
function hsl2rgb(h, s, l) {
|
|
|
|
var C = (1 - Math.abs(2*l-1)) * s;
|
|
var hp = h/60;
|
|
var X = C * (1-Math.abs(hp%2-1));
|
|
var rgb, m;
|
|
|
|
switch ( Math.floor(hp) ) {
|
|
case 0: rgb = [C,X,0]; break;
|
|
case 1: rgb = [X,C,0]; break;
|
|
case 2: rgb = [0,C,X]; break;
|
|
case 3: rgb = [0,X,C]; break;
|
|
case 4: rgb = [X,0,C]; break;
|
|
case 5: rgb = [C,0,X]; break;
|
|
default: rgb = [0,0,0];
|
|
}
|
|
|
|
m = l - (C/2);
|
|
rgb = rgb.map( function( v ) {
|
|
return v + m;
|
|
});
|
|
|
|
return rgb;
|
|
}
|
|
|
|
function rgb2hsl(r, g, b) {
|
|
r /= 255; g /= 255; b /= 255;
|
|
|
|
var M = Math.max(r, g, b);
|
|
var m = Math.min(r, g, b);
|
|
var C = M - m;
|
|
var L = 0.5*(M + m);
|
|
var S = (C === 0) ? 0 : C/(1-Math.abs(2*L-1));
|
|
|
|
var h;
|
|
if (C === 0) h = 0; // spec'd as undefined, but usually set to 0
|
|
else if (M === r) h = ((g-b)/C) % 6;
|
|
else if (M === g) h = ((b-r)/C) + 2;
|
|
else if (M === b) h = ((r-g)/C) + 4;
|
|
|
|
var H = 60 * h;
|
|
|
|
return [H, parseFloat(S), parseFloat(L)];
|
|
}
|
|
|
|
function rgb2hex( rgb ) {
|
|
var hex = rgb.map( function( value ) {
|
|
value = Math.round( value * 255 );
|
|
var hexNum = value.toString(16).toUpperCase();
|
|
// left pad 0
|
|
hexNum = hexNum.length < 2 ? '0' + hexNum : hexNum;
|
|
return hexNum;
|
|
});
|
|
|
|
return '#' + hex.join('');
|
|
}
|
|
|
|
// #123456 -> #135
|
|
// grab first digit from hex
|
|
// not mathematically accurate, but makes for better palette
|
|
function roundHex( hex ) {
|
|
return '#' + hex[1] + hex[3] + hex[5];
|
|
}
|
|
|
|
// -------------------------- -------------------------- //
|
|
|
|
return Huebee;
|
|
|
|
}));
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/unipointer/unipointer.js":
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
|
|
* Unipointer v2.3.0
|
|
* base class for doing one thing with pointer event
|
|
* MIT license
|
|
*/
|
|
|
|
/*jshint browser: true, undef: true, unused: true, strict: true */
|
|
|
|
( function( window, factory ) {
|
|
// universal module definition
|
|
/* jshint strict: false */ /*global define, module, require */
|
|
if ( true ) {
|
|
// AMD
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
|
__webpack_require__("./node_modules/ev-emitter/ev-emitter.js")
|
|
], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter ) {
|
|
return factory( window, EvEmitter );
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
} else if ( typeof module == 'object' && module.exports ) {
|
|
// CommonJS
|
|
module.exports = factory(
|
|
window,
|
|
require('ev-emitter')
|
|
);
|
|
} else {
|
|
// browser global
|
|
window.Unipointer = factory(
|
|
window,
|
|
window.EvEmitter
|
|
);
|
|
}
|
|
|
|
}( window, function factory( window, EvEmitter ) {
|
|
|
|
'use strict';
|
|
|
|
function noop() {}
|
|
|
|
function Unipointer() {}
|
|
|
|
// inherit EvEmitter
|
|
var proto = Unipointer.prototype = Object.create( EvEmitter.prototype );
|
|
|
|
proto.bindStartEvent = function( elem ) {
|
|
this._bindStartEvent( elem, true );
|
|
};
|
|
|
|
proto.unbindStartEvent = function( elem ) {
|
|
this._bindStartEvent( elem, false );
|
|
};
|
|
|
|
/**
|
|
* Add or remove start event
|
|
* @param {Boolean} isAdd - remove if falsey
|
|
*/
|
|
proto._bindStartEvent = function( elem, isAdd ) {
|
|
// munge isAdd, default to true
|
|
isAdd = isAdd === undefined ? true : isAdd;
|
|
var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';
|
|
|
|
// default to mouse events
|
|
var startEvent = 'mousedown';
|
|
if ( window.PointerEvent ) {
|
|
// Pointer Events
|
|
startEvent = 'pointerdown';
|
|
} else if ( 'ontouchstart' in window ) {
|
|
// Touch Events. iOS Safari
|
|
startEvent = 'touchstart';
|
|
}
|
|
elem[ bindMethod ]( startEvent, this );
|
|
};
|
|
|
|
// trigger handler methods for events
|
|
proto.handleEvent = function( event ) {
|
|
var method = 'on' + event.type;
|
|
if ( this[ method ] ) {
|
|
this[ method ]( event );
|
|
}
|
|
};
|
|
|
|
// returns the touch that we're keeping track of
|
|
proto.getTouch = function( touches ) {
|
|
for ( var i=0; i < touches.length; i++ ) {
|
|
var touch = touches[i];
|
|
if ( touch.identifier == this.pointerIdentifier ) {
|
|
return touch;
|
|
}
|
|
}
|
|
};
|
|
|
|
// ----- start event ----- //
|
|
|
|
proto.onmousedown = function( event ) {
|
|
// dismiss clicks from right or middle buttons
|
|
var button = event.button;
|
|
if ( button && ( button !== 0 && button !== 1 ) ) {
|
|
return;
|
|
}
|
|
this._pointerDown( event, event );
|
|
};
|
|
|
|
proto.ontouchstart = function( event ) {
|
|
this._pointerDown( event, event.changedTouches[0] );
|
|
};
|
|
|
|
proto.onpointerdown = function( event ) {
|
|
this._pointerDown( event, event );
|
|
};
|
|
|
|
/**
|
|
* pointer start
|
|
* @param {Event} event
|
|
* @param {Event or Touch} pointer
|
|
*/
|
|
proto._pointerDown = function( event, pointer ) {
|
|
// dismiss right click and other pointers
|
|
// button = 0 is okay, 1-4 not
|
|
if ( event.button || this.isPointerDown ) {
|
|
return;
|
|
}
|
|
|
|
this.isPointerDown = true;
|
|
// save pointer identifier to match up touch events
|
|
this.pointerIdentifier = pointer.pointerId !== undefined ?
|
|
// pointerId for pointer events, touch.indentifier for touch events
|
|
pointer.pointerId : pointer.identifier;
|
|
|
|
this.pointerDown( event, pointer );
|
|
};
|
|
|
|
proto.pointerDown = function( event, pointer ) {
|
|
this._bindPostStartEvents( event );
|
|
this.emitEvent( 'pointerDown', [ event, pointer ] );
|
|
};
|
|
|
|
// hash of events to be bound after start event
|
|
var postStartEvents = {
|
|
mousedown: [ 'mousemove', 'mouseup' ],
|
|
touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],
|
|
pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],
|
|
};
|
|
|
|
proto._bindPostStartEvents = function( event ) {
|
|
if ( !event ) {
|
|
return;
|
|
}
|
|
// get proper events to match start event
|
|
var events = postStartEvents[ event.type ];
|
|
// bind events to node
|
|
events.forEach( function( eventName ) {
|
|
window.addEventListener( eventName, this );
|
|
}, this );
|
|
// save these arguments
|
|
this._boundPointerEvents = events;
|
|
};
|
|
|
|
proto._unbindPostStartEvents = function() {
|
|
// check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)
|
|
if ( !this._boundPointerEvents ) {
|
|
return;
|
|
}
|
|
this._boundPointerEvents.forEach( function( eventName ) {
|
|
window.removeEventListener( eventName, this );
|
|
}, this );
|
|
|
|
delete this._boundPointerEvents;
|
|
};
|
|
|
|
// ----- move event ----- //
|
|
|
|
proto.onmousemove = function( event ) {
|
|
this._pointerMove( event, event );
|
|
};
|
|
|
|
proto.onpointermove = function( event ) {
|
|
if ( event.pointerId == this.pointerIdentifier ) {
|
|
this._pointerMove( event, event );
|
|
}
|
|
};
|
|
|
|
proto.ontouchmove = function( event ) {
|
|
var touch = this.getTouch( event.changedTouches );
|
|
if ( touch ) {
|
|
this._pointerMove( event, touch );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* pointer move
|
|
* @param {Event} event
|
|
* @param {Event or Touch} pointer
|
|
* @private
|
|
*/
|
|
proto._pointerMove = function( event, pointer ) {
|
|
this.pointerMove( event, pointer );
|
|
};
|
|
|
|
// public
|
|
proto.pointerMove = function( event, pointer ) {
|
|
this.emitEvent( 'pointerMove', [ event, pointer ] );
|
|
};
|
|
|
|
// ----- end event ----- //
|
|
|
|
|
|
proto.onmouseup = function( event ) {
|
|
this._pointerUp( event, event );
|
|
};
|
|
|
|
proto.onpointerup = function( event ) {
|
|
if ( event.pointerId == this.pointerIdentifier ) {
|
|
this._pointerUp( event, event );
|
|
}
|
|
};
|
|
|
|
proto.ontouchend = function( event ) {
|
|
var touch = this.getTouch( event.changedTouches );
|
|
if ( touch ) {
|
|
this._pointerUp( event, touch );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* pointer up
|
|
* @param {Event} event
|
|
* @param {Event or Touch} pointer
|
|
* @private
|
|
*/
|
|
proto._pointerUp = function( event, pointer ) {
|
|
this._pointerDone();
|
|
this.pointerUp( event, pointer );
|
|
};
|
|
|
|
// public
|
|
proto.pointerUp = function( event, pointer ) {
|
|
this.emitEvent( 'pointerUp', [ event, pointer ] );
|
|
};
|
|
|
|
// ----- pointer done ----- //
|
|
|
|
// triggered on pointer up & pointer cancel
|
|
proto._pointerDone = function() {
|
|
this._pointerReset();
|
|
this._unbindPostStartEvents();
|
|
this.pointerDone();
|
|
};
|
|
|
|
proto._pointerReset = function() {
|
|
// reset properties
|
|
this.isPointerDown = false;
|
|
delete this.pointerIdentifier;
|
|
};
|
|
|
|
proto.pointerDone = noop;
|
|
|
|
// ----- pointer cancel ----- //
|
|
|
|
proto.onpointercancel = function( event ) {
|
|
if ( event.pointerId == this.pointerIdentifier ) {
|
|
this._pointerCancel( event, event );
|
|
}
|
|
};
|
|
|
|
proto.ontouchcancel = function( event ) {
|
|
var touch = this.getTouch( event.changedTouches );
|
|
if ( touch ) {
|
|
this._pointerCancel( event, touch );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* pointer cancel
|
|
* @param {Event} event
|
|
* @param {Event or Touch} pointer
|
|
* @private
|
|
*/
|
|
proto._pointerCancel = function( event, pointer ) {
|
|
this._pointerDone();
|
|
this.pointerCancel( event, pointer );
|
|
};
|
|
|
|
// public
|
|
proto.pointerCancel = function( event, pointer ) {
|
|
this.emitEvent( 'pointerCancel', [ event, pointer ] );
|
|
};
|
|
|
|
// ----- ----- //
|
|
|
|
// utility function for getting x/y coords from event
|
|
Unipointer.getPointerPoint = function( pointer ) {
|
|
return {
|
|
x: pointer.pageX,
|
|
y: pointer.pageY
|
|
};
|
|
};
|
|
|
|
// ----- ----- //
|
|
|
|
return Unipointer;
|
|
|
|
}));
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/assets/js/app.js":
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_huebee__ = __webpack_require__("./node_modules/huebee/huebee.js");
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_huebee___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_huebee__);
|
|
|
|
window.Huebee = __WEBPACK_IMPORTED_MODULE_0_huebee___default.a;
|
|
|
|
$.when($.ready).then(function () {
|
|
|
|
if ($('.message-container').length) {
|
|
setTimeout(function () {
|
|
$('.message-container').fadeOut();
|
|
}, 3500);
|
|
}
|
|
|
|
if ($('.livestats-container').length) {
|
|
$('.livestats-container').each(function (index) {
|
|
var id = $(this).data('id');
|
|
var dataonly = $(this).data('dataonly');
|
|
var increaseby = dataonly == 1 ? 20000 : 1000;
|
|
var container = $(this);
|
|
var max_timer = 30000;
|
|
var timer = 5000;
|
|
(function worker() {
|
|
$.ajax({
|
|
url: '/get_stats/' + id,
|
|
dataType: 'json',
|
|
success: function success(data) {
|
|
container.html(data.html);
|
|
if (data.status == 'active') timer = increaseby;else {
|
|
if (timer < max_timer) timer += 2000;
|
|
}
|
|
},
|
|
complete: function complete() {
|
|
// Schedule the next request when the current one's complete
|
|
setTimeout(worker, timer);
|
|
}
|
|
});
|
|
})();
|
|
});
|
|
}
|
|
|
|
function readURL(input) {
|
|
|
|
if (input.files && input.files[0]) {
|
|
var reader = new FileReader();
|
|
|
|
reader.onload = function (e) {
|
|
$('#appimage img').attr('src', e.target.result);
|
|
};
|
|
|
|
reader.readAsDataURL(input.files[0]);
|
|
}
|
|
}
|
|
|
|
$('#upload').change(function () {
|
|
readURL(this);
|
|
});
|
|
/*$(".droppable").droppable({
|
|
tolerance: "intersect",
|
|
drop: function( event, ui ) {
|
|
var tag = $( this ).data('id');
|
|
var item = $( ui.draggable ).data('id');
|
|
$.get('tag/add/'+tag+'/'+item, function(data) {
|
|
if(data == 1) {
|
|
$( ui.draggable ).remove();
|
|
} else {
|
|
alert('not added');
|
|
}
|
|
});
|
|
}
|
|
});*/
|
|
|
|
$('#sortable').sortable({
|
|
stop: function stop(event, ui) {
|
|
var idsInOrder = $('#sortable').sortable('toArray', {
|
|
attribute: 'data-id'
|
|
});
|
|
$.post('/order', { order: idsInOrder });
|
|
}
|
|
|
|
});
|
|
$('#sortable').sortable('disable');
|
|
|
|
$('#app').on('click', '#config-button', function (e) {
|
|
e.preventDefault();
|
|
var app = $('#app');
|
|
var active = app.hasClass('header');
|
|
app.toggleClass('header');
|
|
if (active) {
|
|
$('.add-item').hide();
|
|
$('.item-edit').hide();
|
|
$('#app').removeClass('sidebar');
|
|
$('#sortable').sortable('disable');
|
|
} else {
|
|
$('#sortable').sortable('enable');
|
|
setTimeout(function () {
|
|
$('.add-item').fadeIn();
|
|
$('.item-edit').fadeIn();
|
|
}, 350);
|
|
}
|
|
}).on('click', '#add-item, #pin-item', function (e) {
|
|
e.preventDefault();
|
|
var app = $('#app');
|
|
var active = app.hasClass('sidebar');
|
|
app.toggleClass('sidebar');
|
|
}).on('click', '.close-sidenav', function (e) {
|
|
e.preventDefault();
|
|
var app = $('#app');
|
|
app.removeClass('sidebar');
|
|
}).on('click', '#test_config', function (e) {
|
|
e.preventDefault();
|
|
var apiurl = $('#create input[name=url]').val();
|
|
|
|
var override_url = $('#create input[name="config[override_url]"').val();
|
|
if (override_url.length && override_url != '') {
|
|
apiurl = override_url;
|
|
}
|
|
|
|
var data = {};
|
|
data['url'] = apiurl;
|
|
$('input.config-item').each(function (index) {
|
|
var config = $(this).data('config');
|
|
data[config] = $(this).val();
|
|
});
|
|
|
|
$.post('/test_config', { data: data }, function (data) {
|
|
alert(data);
|
|
});
|
|
});
|
|
$('#pinlist').on('click', 'a', function (e) {
|
|
e.preventDefault();
|
|
var current = $(this);
|
|
var id = current.data('id');
|
|
$.get('items/pintoggle/' + id + '/true', function (data) {
|
|
var inner = $(data).filter('#sortable').html();
|
|
$('#sortable').html(inner);
|
|
current.toggleClass('active');
|
|
});
|
|
});
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/assets/js/huebee.js":
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_LOCAL_MODULE_0__, __WEBPACK_LOCAL_MODULE_0__factory, __WEBPACK_LOCAL_MODULE_0__module;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_LOCAL_MODULE_1__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
|
|
/**
|
|
* Huebee PACKAGED v2.0.0
|
|
* 1-click color picker
|
|
* MIT license
|
|
* http://huebee.buzz
|
|
* Copyright 2018 Metafizzy
|
|
*/
|
|
|
|
!function (t, e) {
|
|
true ? !(__WEBPACK_LOCAL_MODULE_0__factory = (e), (__WEBPACK_LOCAL_MODULE_0__module = { id: "ev-emitter/ev-emitter", exports: {}, loaded: false }), __WEBPACK_LOCAL_MODULE_0__ = (typeof __WEBPACK_LOCAL_MODULE_0__factory === 'function' ? (__WEBPACK_LOCAL_MODULE_0__factory.call(__WEBPACK_LOCAL_MODULE_0__module.exports, __webpack_require__, __WEBPACK_LOCAL_MODULE_0__module.exports, __WEBPACK_LOCAL_MODULE_0__module)) : __WEBPACK_LOCAL_MODULE_0__factory), (__WEBPACK_LOCAL_MODULE_0__module.loaded = true), __WEBPACK_LOCAL_MODULE_0__ === undefined && (__WEBPACK_LOCAL_MODULE_0__ = __WEBPACK_LOCAL_MODULE_0__module.exports)) : "object" == (typeof module === "undefined" ? "undefined" : _typeof(module)) && module.exports ? module.exports = e() : t.EvEmitter = e();
|
|
}("undefined" != typeof window ? window : this, function () {
|
|
function t() {}var e = t.prototype;return e.on = function (t, e) {
|
|
if (t && e) {
|
|
var n = this._events = this._events || {},
|
|
i = n[t] = n[t] || [];return i.indexOf(e) == -1 && i.push(e), this;
|
|
}
|
|
}, e.once = function (t, e) {
|
|
if (t && e) {
|
|
this.on(t, e);var n = this._onceEvents = this._onceEvents || {},
|
|
i = n[t] = n[t] || {};return i[e] = !0, this;
|
|
}
|
|
}, e.off = function (t, e) {
|
|
var n = this._events && this._events[t];if (n && n.length) {
|
|
var i = n.indexOf(e);return i != -1 && n.splice(i, 1), this;
|
|
}
|
|
}, e.emitEvent = function (t, e) {
|
|
var n = this._events && this._events[t];if (n && n.length) {
|
|
var i = 0,
|
|
o = n[i];e = e || [];for (var s = this._onceEvents && this._onceEvents[t]; o;) {
|
|
var r = s && s[o];r && (this.off(t, o), delete s[o]), o.apply(this, e), i += r ? 0 : 1, o = n[i];
|
|
}return this;
|
|
}
|
|
}, t;
|
|
}), function (t, e) {
|
|
true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__WEBPACK_LOCAL_MODULE_0__], __WEBPACK_LOCAL_MODULE_1__ = ((function (n) {
|
|
return e(t, n);
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__))) : "object" == (typeof module === "undefined" ? "undefined" : _typeof(module)) && module.exports ? module.exports = e(t, require("ev-emitter")) : t.Unipointer = e(t, t.EvEmitter);
|
|
}(window, function (t, e) {
|
|
function n() {}function i() {}var o = i.prototype = Object.create(e.prototype);o.bindStartEvent = function (t) {
|
|
this._bindStartEvent(t, !0);
|
|
}, o.unbindStartEvent = function (t) {
|
|
this._bindStartEvent(t, !1);
|
|
}, o._bindStartEvent = function (e, n) {
|
|
n = void 0 === n || !!n;var i = n ? "addEventListener" : "removeEventListener";t.navigator.pointerEnabled ? e[i]("pointerdown", this) : t.navigator.msPointerEnabled ? e[i]("MSPointerDown", this) : (e[i]("mousedown", this), e[i]("touchstart", this));
|
|
}, o.handleEvent = function (t) {
|
|
var e = "on" + t.type;this[e] && this[e](t);
|
|
}, o.getTouch = function (t) {
|
|
for (var e = 0; e < t.length; e++) {
|
|
var n = t[e];if (n.identifier == this.pointerIdentifier) return n;
|
|
}
|
|
}, o.onmousedown = function (t) {
|
|
var e = t.button;e && 0 !== e && 1 !== e || this._pointerDown(t, t);
|
|
}, o.ontouchstart = function (t) {
|
|
this._pointerDown(t, t.changedTouches[0]);
|
|
}, o.onMSPointerDown = o.onpointerdown = function (t) {
|
|
this._pointerDown(t, t);
|
|
}, o._pointerDown = function (t, e) {
|
|
this.isPointerDown || (this.isPointerDown = !0, this.pointerIdentifier = void 0 !== e.pointerId ? e.pointerId : e.identifier, this.pointerDown(t, e));
|
|
}, o.pointerDown = function (t, e) {
|
|
this._bindPostStartEvents(t), this.emitEvent("pointerDown", [t, e]);
|
|
};var s = { mousedown: ["mousemove", "mouseup"], touchstart: ["touchmove", "touchend", "touchcancel"], pointerdown: ["pointermove", "pointerup", "pointercancel"], MSPointerDown: ["MSPointerMove", "MSPointerUp", "MSPointerCancel"] };return o._bindPostStartEvents = function (e) {
|
|
if (e) {
|
|
var n = s[e.type];n.forEach(function (e) {
|
|
t.addEventListener(e, this);
|
|
}, this), this._boundPointerEvents = n;
|
|
}
|
|
}, o._unbindPostStartEvents = function () {
|
|
this._boundPointerEvents && (this._boundPointerEvents.forEach(function (e) {
|
|
t.removeEventListener(e, this);
|
|
}, this), delete this._boundPointerEvents);
|
|
}, o.onmousemove = function (t) {
|
|
this._pointerMove(t, t);
|
|
}, o.onMSPointerMove = o.onpointermove = function (t) {
|
|
t.pointerId == this.pointerIdentifier && this._pointerMove(t, t);
|
|
}, o.ontouchmove = function (t) {
|
|
var e = this.getTouch(t.changedTouches);e && this._pointerMove(t, e);
|
|
}, o._pointerMove = function (t, e) {
|
|
this.pointerMove(t, e);
|
|
}, o.pointerMove = function (t, e) {
|
|
this.emitEvent("pointerMove", [t, e]);
|
|
}, o.onmouseup = function (t) {
|
|
this._pointerUp(t, t);
|
|
}, o.onMSPointerUp = o.onpointerup = function (t) {
|
|
t.pointerId == this.pointerIdentifier && this._pointerUp(t, t);
|
|
}, o.ontouchend = function (t) {
|
|
var e = this.getTouch(t.changedTouches);e && this._pointerUp(t, e);
|
|
}, o._pointerUp = function (t, e) {
|
|
this._pointerDone(), this.pointerUp(t, e);
|
|
}, o.pointerUp = function (t, e) {
|
|
this.emitEvent("pointerUp", [t, e]);
|
|
}, o._pointerDone = function () {
|
|
this.isPointerDown = !1, delete this.pointerIdentifier, this._unbindPostStartEvents(), this.pointerDone();
|
|
}, o.pointerDone = n, o.onMSPointerCancel = o.onpointercancel = function (t) {
|
|
t.pointerId == this.pointerIdentifier && this._pointerCancel(t, t);
|
|
}, o.ontouchcancel = function (t) {
|
|
var e = this.getTouch(t.changedTouches);e && this._pointerCancel(t, e);
|
|
}, o._pointerCancel = function (t, e) {
|
|
this._pointerDone(), this.pointerCancel(t, e);
|
|
}, o.pointerCancel = function (t, e) {
|
|
this.emitEvent("pointerCancel", [t, e]);
|
|
}, i.getPointerPoint = function (t) {
|
|
return { x: t.pageX, y: t.pageY };
|
|
}, i;
|
|
}), function (t, e) {
|
|
true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__WEBPACK_LOCAL_MODULE_0__, __WEBPACK_LOCAL_MODULE_1__], __WEBPACK_AMD_DEFINE_RESULT__ = (function (n, i) {
|
|
return e(t, n, i);
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : "object" == (typeof module === "undefined" ? "undefined" : _typeof(module)) && module.exports ? module.exports = e(t, require("ev-emitter"), require("unipointer")) : t.Huebee = e(t, t.EvEmitter, t.Unipointer);
|
|
}(window, function (t, e, n) {
|
|
function i(t, e) {
|
|
if (t = h(t), !t) throw "Bad element for Huebee: " + t;this.anchor = t, this.options = {}, this.option(i.defaults), this.option(e), this.create();
|
|
}function o() {
|
|
for (var t = document.querySelectorAll("[data-huebee]"), e = 0; e < t.length; e++) {
|
|
var n,
|
|
o = t[e],
|
|
s = o.getAttribute("data-huebee");try {
|
|
n = s && JSON.parse(s);
|
|
} catch (t) {
|
|
C && C.error("Error parsing data-huebee on " + o.className + ": " + t);continue;
|
|
}new i(o, n);
|
|
}
|
|
}function s(t) {
|
|
_.clearRect(0, 0, 1, 1), _.fillStyle = "#010203", _.fillStyle = t, _.fillRect(0, 0, 1, 1);var e = _.getImageData(0, 0, 1, 1).data;if (e = [e[0], e[1], e[2], e[3]], "1,2,3,255" != e.join(",")) {
|
|
var n = u.apply(this, e);return { color: t.trim(), hue: n[0], sat: n[1], lum: n[2] };
|
|
}
|
|
}function r(t, e) {
|
|
for (var n in e) {
|
|
t[n] = e[n];
|
|
}return t;
|
|
}function h(t) {
|
|
return "string" == typeof t && (t = document.querySelector(t)), t;
|
|
}function a(t, e, n) {
|
|
var i = c(t, e, n);return d(i);
|
|
}function c(t, e, n) {
|
|
var i,
|
|
o,
|
|
s = (1 - Math.abs(2 * n - 1)) * e,
|
|
r = t / 60,
|
|
h = s * (1 - Math.abs(r % 2 - 1));switch (Math.floor(r)) {case 0:
|
|
i = [s, h, 0];break;case 1:
|
|
i = [h, s, 0];break;case 2:
|
|
i = [0, s, h];break;case 3:
|
|
i = [0, h, s];break;case 4:
|
|
i = [h, 0, s];break;case 5:
|
|
i = [s, 0, h];break;default:
|
|
i = [0, 0, 0];}return o = n - s / 2, i = i.map(function (t) {
|
|
return t + o;
|
|
});
|
|
}function u(t, e, n) {
|
|
t /= 255, e /= 255, n /= 255;var i,
|
|
o = Math.max(t, e, n),
|
|
s = Math.min(t, e, n),
|
|
r = o - s,
|
|
h = .5 * (o + s),
|
|
a = 0 === r ? 0 : r / (1 - Math.abs(2 * h - 1));0 === r ? i = 0 : o === t ? i = (e - n) / r % 6 : o === e ? i = (n - t) / r + 2 : o === n && (i = (t - e) / r + 4);var c = 60 * i;return [c, parseFloat(a), parseFloat(h)];
|
|
}function d(t) {
|
|
var e = t.map(function (t) {
|
|
t = Math.round(255 * t);var e = t.toString(16).toUpperCase();return e = e.length < 2 ? "0" + e : e;
|
|
});return "#" + e.join("");
|
|
}function p(t) {
|
|
return "#" + t[1] + t[3] + t[5];
|
|
}i.defaults = { hues: 12, hue0: 0, shades: 5, saturations: 3, notation: "shortHex", setText: !0, setBGColor: !0 };var f = i.prototype = Object.create(e.prototype);f.option = function (t) {
|
|
this.options = r(this.options, t);
|
|
};var v = 0,
|
|
l = {};f.create = function () {
|
|
function t(t) {
|
|
t.target == i && t.preventDefault();
|
|
}var e = this.guid = ++v;this.anchor.huebeeGUID = e, l[e] = this, this.setBGElems = this.getSetElems(this.options.setBGColor), this.setTextElems = this.getSetElems(this.options.setText), this.outsideCloseIt = this.outsideClose.bind(this), this.onDocKeydown = this.docKeydown.bind(this), this.closeIt = this.close.bind(this), this.openIt = this.open.bind(this), this.onElemTransitionend = this.elemTransitionend.bind(this), this.isInputAnchor = "INPUT" == this.anchor.nodeName, this.options.staticOpen || (this.anchor.addEventListener("click", this.openIt), this.anchor.addEventListener("focus", this.openIt)), this.isInputAnchor && this.anchor.addEventListener("input", this.inputInput.bind(this));var n = this.element = document.createElement("div");n.className = "huebee ", n.className += this.options.staticOpen ? "is-static-open " : "is-hidden ", n.className += this.options.className || "";var i = this.container = document.createElement("div");if (i.className = "huebee__container", i.addEventListener("mousedown", t), i.addEventListener("touchstart", t), this.createCanvas(), this.cursor = document.createElement("div"), this.cursor.className = "huebee__cursor is-hidden", i.appendChild(this.cursor), this.createCloseButton(), n.appendChild(i), !this.options.staticOpen) {
|
|
var o = getComputedStyle(this.anchor.parentNode);"relative" != o.position && "absolute" != o.position && (this.anchor.parentNode.style.position = "relative");
|
|
}var s = this.options.hues,
|
|
r = this.options.customColors,
|
|
h = r && r.length;this.satY = h ? Math.ceil(h / s) + 1 : 0, this.updateColors(), this.setAnchorColor(), this.options.staticOpen && this.open();
|
|
}, f.getSetElems = function (t) {
|
|
return t === !0 ? [this.anchor] : "string" == typeof t ? document.querySelectorAll(t) : void 0;
|
|
}, f.createCanvas = function () {
|
|
var t = this.canvas = document.createElement("canvas");t.className = "huebee__canvas", this.ctx = t.getContext("2d");var e = this.canvasPointer = new n();e._bindStartEvent(t), e.on("pointerDown", this.canvasPointerDown.bind(this)), e.on("pointerMove", this.canvasPointerMove.bind(this)), this.container.appendChild(t);
|
|
};var m = "http://www.w3.org/2000/svg";f.createCloseButton = function () {
|
|
if (!this.options.staticOpen) {
|
|
var t = document.createElementNS(m, "svg");t.setAttribute("class", "huebee__close-button"), t.setAttribute("viewBox", "0 0 24 24"), t.setAttribute("width", "24"), t.setAttribute("height", "24");var e = document.createElementNS(m, "path");e.setAttribute("d", "M 7,7 L 17,17 M 17,7 L 7,17"), e.setAttribute("class", "huebee__close-button__x"), t.appendChild(e), t.addEventListener("click", this.closeIt), this.container.appendChild(t);
|
|
}
|
|
}, f.updateColors = function () {
|
|
this.swatches = {}, this.colorGrid = {}, this.updateColorModer();var t = this.options.shades,
|
|
e = this.options.saturations,
|
|
n = this.options.hues,
|
|
i = this.options.customColors;if (i && i.length) {
|
|
var o = 0;i.forEach(function (t) {
|
|
var e = o % n,
|
|
i = Math.floor(o / n),
|
|
r = s(t);r && (this.addSwatch(r, e, i), o++);
|
|
}.bind(this));
|
|
}for (var r = 0; r < e; r++) {
|
|
var h = 1 - r / e,
|
|
a = t * r + this.satY;this.updateSaturationGrid(r, h, a);
|
|
}for (r = 0; r < t + 2; r++) {
|
|
var c = 1 - r / (t + 1),
|
|
u = this.colorModer(0, 0, c),
|
|
d = s(u);this.addSwatch(d, n + 1, r);
|
|
}
|
|
}, f.updateSaturationGrid = function (t, e, n) {
|
|
for (var i = this.options.shades, o = this.options.hues, r = this.options.hue0, h = 0; h < i; h++) {
|
|
for (var a = 0; a < o; a++) {
|
|
var c = Math.round(360 * a / o + r) % 360,
|
|
u = 1 - (h + 1) / (i + 1),
|
|
d = this.colorModer(c, e, u),
|
|
p = s(d),
|
|
f = h + n;this.addSwatch(p, a, f);
|
|
}
|
|
}
|
|
}, f.addSwatch = function (t, e, n) {
|
|
this.swatches[e + "," + n] = t, this.colorGrid[t.color.toUpperCase()] = { x: e, y: n };
|
|
};var E = { hsl: function hsl(t, e, n) {
|
|
return e = Math.round(100 * e), n = Math.round(100 * n), "hsl(" + t + ", " + e + "%, " + n + "%)";
|
|
}, hex: a, shortHex: function shortHex(t, e, n) {
|
|
var i = a(t, e, n);return p(i);
|
|
} };f.updateColorModer = function () {
|
|
this.colorModer = E[this.options.notation] || E.shortHex;
|
|
}, f.renderColors = function () {
|
|
var t = 2 * this.gridSize;for (var e in this.swatches) {
|
|
var n = this.swatches[e],
|
|
i = e.split(","),
|
|
o = i[0],
|
|
s = i[1];this.ctx.fillStyle = n.color, this.ctx.fillRect(o * t, s * t, t, t);
|
|
}
|
|
}, f.setAnchorColor = function () {
|
|
this.isInputAnchor && this.setColor(this.anchor.value);
|
|
};var g = document.documentElement;f.open = function () {
|
|
if (!this.isOpen) {
|
|
var t = this.anchor,
|
|
e = this.element;this.options.staticOpen || (e.style.left = t.offsetLeft + "px", e.style.top = t.offsetTop + t.offsetHeight + "px"), this.bindOpenEvents(!0), e.removeEventListener("transitionend", this.onElemTransitionend), t.parentNode.insertBefore(e, t.nextSibling);var n = getComputedStyle(e).transitionDuration;this.hasTransition = n && "none" != n && parseFloat(n), this.isOpen = !0, this.updateSizes(), this.renderColors(), this.setAnchorColor();e.offsetHeight;e.classList.remove("is-hidden");
|
|
}
|
|
}, f.bindOpenEvents = function (t) {
|
|
if (!this.options.staticOpen) {
|
|
var e = (t ? "add" : "remove") + "EventListener";g[e]("mousedown", this.outsideCloseIt), g[e]("touchstart", this.outsideCloseIt), document[e]("focusin", this.outsideCloseIt), document[e]("keydown", this.onDocKeydown), this.anchor[e]("blur", this.closeIt);
|
|
}
|
|
}, f.updateSizes = function () {
|
|
var t = this.options.hues,
|
|
e = this.options.shades,
|
|
n = this.options.saturations;this.cursorBorder = parseInt(getComputedStyle(this.cursor).borderTopWidth, 10), this.gridSize = Math.round(this.cursor.offsetWidth - 2 * this.cursorBorder), this.canvasOffset = { x: this.canvas.offsetLeft, y: this.canvas.offsetTop };var i = Math.max(e * n + this.satY, e + 2),
|
|
o = this.gridSize * (t + 2);this.canvas.width = 2 * o, this.canvas.style.width = o + "px", this.canvas.height = this.gridSize * i * 2;
|
|
}, f.outsideClose = function (t) {
|
|
var e = this.anchor.contains(t.target),
|
|
n = this.element.contains(t.target);e || n || this.close();
|
|
};var b = { 13: !0, 27: !0 };f.docKeydown = function (t) {
|
|
b[t.keyCode] && this.close();
|
|
};var w = "string" == typeof g.style.transform;f.close = function () {
|
|
this.isOpen && (w && this.hasTransition ? this.element.addEventListener("transitionend", this.onElemTransitionend) : this.remove(), this.element.classList.add("is-hidden"), this.bindOpenEvents(!1), this.isOpen = !1);
|
|
}, f.remove = function () {
|
|
var t = this.element.parentNode;t.contains(this.element) && t.removeChild(this.element);
|
|
}, f.elemTransitionend = function (t) {
|
|
t.target == this.element && (this.element.removeEventListener("transitionend", this.onElemTransitionend), this.remove());
|
|
}, f.inputInput = function () {
|
|
this.setColor(this.anchor.value);
|
|
}, f.canvasPointerDown = function (t, e) {
|
|
t.preventDefault(), this.updateOffset(), this.canvasPointerChange(e);
|
|
}, f.updateOffset = function () {
|
|
var e = this.canvas.getBoundingClientRect();this.offset = { x: e.left + t.pageXOffset, y: e.top + t.pageYOffset };
|
|
}, f.canvasPointerMove = function (t, e) {
|
|
this.canvasPointerChange(e);
|
|
}, f.canvasPointerChange = function (t) {
|
|
var e = Math.round(t.pageX - this.offset.x),
|
|
n = Math.round(t.pageY - this.offset.y),
|
|
i = this.gridSize,
|
|
o = Math.floor(e / i),
|
|
s = Math.floor(n / i),
|
|
r = this.swatches[o + "," + s];this.setSwatch(r);
|
|
}, f.setColor = function (t) {
|
|
var e = s(t);this.setSwatch(e);
|
|
}, f.setSwatch = function (t) {
|
|
var e = t && t.color;if (t) {
|
|
var n = e == this.color;this.color = e, this.hue = t.hue, this.sat = t.sat, this.lum = t.lum;var i = this.lum - .15 * Math.cos((this.hue + 70) / 180 * Math.PI);this.isLight = i > .5;var o = this.colorGrid[e.toUpperCase()];this.updateCursor(o), this.setTexts(), this.setBackgrounds(), n || this.emitEvent("change", [e, t.hue, t.sat, t.lum]);
|
|
}
|
|
}, f.setTexts = function () {
|
|
if (this.setTextElems) for (var t = 0; t < this.setTextElems.length; t++) {
|
|
var e = this.setTextElems[t],
|
|
n = "INPUT" == e.nodeName ? "value" : "textContent";e[n] = this.color;
|
|
}
|
|
}, f.setBackgrounds = function () {
|
|
if (this.setBGElems) for (var t = this.isLight ? "#222" : "white", e = 0; e < this.setBGElems.length; e++) {
|
|
var n = this.setBGElems[e];n.style.backgroundColor = this.color, n.style.color = t;
|
|
}
|
|
}, f.updateCursor = function (t) {
|
|
if (this.isOpen) {
|
|
var e = t ? "remove" : "add";if (this.cursor.classList[e]("is-hidden"), t) {
|
|
var n = this.gridSize,
|
|
i = this.canvasOffset,
|
|
o = this.cursorBorder;this.cursor.style.left = t.x * n + i.x - o + "px", this.cursor.style.top = t.y * n + i.y - o + "px";
|
|
}
|
|
}
|
|
};var C = t.console,
|
|
S = document.readyState;"complete" == S || "interactive" == S ? o() : document.addEventListener("DOMContentLoaded", o), i.data = function (t) {
|
|
t = h(t);var e = t && t.huebeeGUID;return e && l[e];
|
|
};var y = document.createElement("canvas");y.width = y.height = 1;var _ = y.getContext("2d");return i;
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/assets/sass/app.scss":
|
|
/***/ (function(module, exports) {
|
|
|
|
// removed by extract-text-webpack-plugin
|
|
|
|
/***/ }),
|
|
|
|
/***/ 0:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
__webpack_require__("./resources/assets/js/huebee.js");
|
|
__webpack_require__("./resources/assets/js/app.js");
|
|
module.exports = __webpack_require__("./resources/assets/sass/app.scss");
|
|
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|