(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.pell = {})));
}(this, (function (exports) { 'use strict';
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var actions = {
bold: {
icon: 'B',
title: 'Bold',
state: function state() {
return queryCommandState('bold');
},
result: function result() {
return exec('bold');
}
},
italic: {
icon: 'I',
title: 'Italic',
state: function state() {
return queryCommandState('italic');
},
result: function result() {
return exec('italic');
}
},
underline: {
icon: 'U',
title: 'Underline',
state: function state() {
return queryCommandState('underline');
},
result: function result() {
return exec('underline');
}
},
strikethrough: {
icon: 'S',
title: 'Strike-through',
state: function state() {
return queryCommandState('strikeThrough');
},
result: function result() {
return exec('strikeThrough');
}
},
heading1: {
icon: 'H1',
title: 'Heading 1',
result: function result() {
return exec('formatBlock', '
'); } }, quote: { icon: '“ ”', title: 'Quote', result: function result() { return exec('formatBlock', '
'); } }, olist: { icon: '#', title: 'Ordered List', result: function result() { return exec('insertOrderedList'); } }, ulist: { icon: '•', title: 'Unordered List', result: function result() { return exec('insertUnorderedList'); } }, code: { icon: '</>', title: 'Code', result: function result() { return exec('formatBlock', ''); } }, line: { icon: '―', title: 'Horizontal Line', result: function result() { return exec('insertHorizontalRule'); } }, link: { icon: '🔗', title: 'Link', result: function result() { var url = window.prompt('Enter the link URL'); if (url) exec('createLink', url); } }, image: { icon: '📷', title: 'Image', result: function result() { var url = window.prompt('Enter the image URL'); if (url) exec('insertImage', url); } } }; var classes = { actionbar: 'pell-actionbar', button: 'pell-button', content: 'pell-content', selected: 'pell-button-selected' }; var queryCommandState = function queryCommandState(command) { return document.queryCommandState(command); }; var preventTab = function preventTab(event) { if (event.which === 9) event.preventDefault(); }; var exec = function exec(command) { var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; document.execCommand(command, false, value); }; var init = function init(settings) { settings.actions = settings.actions ? settings.actions.map(function (action) { if (typeof action === 'string') return actions[action];else if (actions[action.name]) return _extends({}, actions[action.name], action); return action; }) : Object.keys(actions).map(function (action) { return actions[action]; }); settings.classes = _extends({}, classes, settings.classes); var actionbar = document.createElement('div'); actionbar.className = settings.classes.actionbar; settings.element.appendChild(actionbar); settings.element.content = document.createElement('div'); settings.element.content.contentEditable = true; settings.element.content.className = settings.classes.content; settings.element.content.oninput = function (event) { return settings.onChange(event.target.innerHTML); }; settings.element.content.onkeydown = preventTab; settings.element.appendChild(settings.element.content); settings.actions.forEach(function (action) { var button = document.createElement('button'); button.className = settings.classes.button; button.innerHTML = action.icon; button.title = action.title; button.setAttribute('type', 'button'); button.onclick = function () { return action.result() || settings.element.content.focus(); }; if (action.state) { var handler = function handler() { return button.classList[action.state() ? 'add' : 'remove'](settings.classes.selected); }; settings.element.content.addEventListener('keyup', handler); settings.element.content.addEventListener('mouseup', handler); button.addEventListener('click', handler); } actionbar.appendChild(button); }); if (settings.defaultParagraphSeparator) exec('defaultParagraphSeparator', settings.defaultParagraphSeparator); if (settings.styleWithCSS) exec('styleWithCSS'); return settings.element; }; var pell = { exec: exec, init: init }; exports.exec = exec; exports.init = init; exports['default'] = pell; Object.defineProperty(exports, '__esModule', { value: true }); })));