UNPKG

local-clipboard

Version:

On-site Clipboard using local storage API

146 lines (145 loc) 4.67 kB
"use strict"; var ls = require('local-storage'); var CLIPBOARD_KEY = 'LOCAL_CLIPBOARD'; var localListeners = []; function addLocalListener(listener) { if (typeof listener === 'function') { localListeners.push(listener); } } exports.addLocalListener = addLocalListener; function removeLocalListener(listener) { if (typeof listener === 'function') { var index = localListeners.indexOf(listener); if (index !== -1) { localListeners.splice(index, 1); } } } exports.removeLocalListener = removeLocalListener; function copy(data, options) { var payload = { content: data }; if (options) { if (options.description) { payload.description = options.description; } if (options.type) { payload.type = options.type; } if (options.metadata) { payload.metadata = options.metadata; } } if (localListeners.length > 0) { var old_1 = ls.get(CLIPBOARD_KEY); var url_1 = (window && window.location && window.location.href) || null; ls.set(CLIPBOARD_KEY, payload); localListeners.forEach(function (l) { return l(payload, old_1, url_1); }); } else { ls.set(CLIPBOARD_KEY, payload); } } exports.copy = copy; function hasData() { var data = ls.get(CLIPBOARD_KEY); return data && 'content' in data; } exports.hasData = hasData; function getType() { var data = ls.get(CLIPBOARD_KEY); if (data && data.type) { return data.type; } } exports.getType = getType; function getDescription() { var data = ls.get(CLIPBOARD_KEY); if (data && data.description) { return data.description; } } exports.getDescription = getDescription; function getMetadata() { var data = ls.get(CLIPBOARD_KEY); if (data && data.metadata) { return data.metadata; } } exports.getMetadata = getMetadata; function paste() { var data = ls.get(CLIPBOARD_KEY); if (data && data.content) { return data.content; } } exports.paste = paste; function clear() { ls.remove(CLIPBOARD_KEY); } exports.clear = clear; function listen(listener) { ls.on(CLIPBOARD_KEY, listener); } exports.listen = listen; function unlisten(listener) { ls.off(CLIPBOARD_KEY, listener); } exports.unlisten = unlisten; function onCopy(method, listenOnLocalChanges) { if (listenOnLocalChanges === void 0) { listenOnLocalChanges = false; } return { componentDidMountHook: function (props, context, state, child) { if (!child) { throw new Error('onCopy must be used on a class component.'); } function copyListener(v, o, u) { child[method](v, o, u); } state.listener = copyListener; listen(copyListener); if (listenOnLocalChanges) { function localCopyListener(v, o, u) { child[method](v, o, u); } state.localListener = localCopyListener; addLocalListener(localCopyListener); } }, componentWillUnmountHook: function (props, context, state) { unlisten(state.listener); if (listenOnLocalChanges) { removeLocalListener(state.localListener); } }, }; } exports.onCopy = onCopy; function forwardClipboard(prop, listenOnLocalChanges) { if (listenOnLocalChanges === void 0) { listenOnLocalChanges = false; } return { initialStateInjector: function (p, c, state, forceUpdater) { return state.update = forceUpdater; }, propInjector: function (setProp) { return setProp(prop, ls.get(CLIPBOARD_KEY)); }, componentDidMountHook: function (props, context, state) { function copyListener() { state.update(); } state.listener = copyListener; listen(copyListener); if (listenOnLocalChanges) { function localCopyListener() { state.update(); } state.localListener = localCopyListener; addLocalListener(localCopyListener); } }, componentWillUnmountHook: function (props, context, state) { unlisten(state.listener); if (listenOnLocalChanges) { removeLocalListener(state.localListener); } }, }; } exports.forwardClipboard = forwardClipboard;