UNPKG

upfront-editable

Version:
87 lines (63 loc) 2.36 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.previous = exports.next = undefined; exports.init = init; exports.disable = disable; exports.setBlockId = setBlockId; exports.getState = getState; exports.setState = setState; var _jquery = require('jquery'); var _jquery2 = _interopRequireDefault(_jquery); var _config = require('./config'); var config = _interopRequireWildcard(_config); var _content = require('./content'); var content = _interopRequireWildcard(_content); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var nextBlockId = 1; var state = {}; var next = exports.next = getSibling('nextElementSibling'); var previous = exports.previous = getSibling('previousElementSibling'); function init(elem, _ref) { var normalize = _ref.normalize, shouldSpellcheck = _ref.shouldSpellcheck; setBlockId(elem); elem.setAttribute('contenteditable', true); elem.setAttribute('spellcheck', Boolean(shouldSpellcheck)); (0, _jquery2.default)(elem).removeClass(config.editableDisabledClass).addClass(config.editableClass); if (normalize) content.tidyHtml(elem); } function disable(elem) { elem.removeAttribute('contenteditable'); elem.removeAttribute('spellcheck'); setState(elem, undefined); (0, _jquery2.default)(elem).removeClass(config.editableClass).addClass(config.editableDisabledClass); } function setBlockId(elem) { if (!elem.hasAttribute('data-editable')) { elem.setAttribute('data-editable', 'id-' + nextBlockId); nextBlockId += 1; } } function getState(elem) { if (elem.hasAttribute('data-editable')) { var id = elem.getAttribute('data-editable'); return state[id]; } } function setState(elem, data) { if (elem.hasAttribute('data-editable')) { var id = elem.getAttribute('data-editable'); state[id] = data; } } // Helpers // ------- function getSibling(type) { return function (element) { var sibling = element[type]; return sibling && sibling.getAttribute('contenteditable') ? sibling : null; }; }