upfront-editable
Version:
Friendly contenteditable API
87 lines (63 loc) • 2.36 kB
JavaScript
;
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;
};
}