lacona-osx
Version:
Lacona Extensions for OSX, tied into the global-context hosted API
121 lines (87 loc) • 4.51 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ClipboardDirectory = exports.ClipboardFile = exports.ClipboardURL = exports.ClipboardString = undefined;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _elliptical = require('elliptical');
var _laconaPhrases = require('lacona-phrases');
var _laconaApi = require('lacona-api');
var _laconaSourceHelpers = require('lacona-source-helpers');
var _path = require('path');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @jsx createElement */
const CLIPBOARD_ICON = (0, _path.join)(__dirname, '../img/Cut-48.png');
const ClipboardSource = (0, _laconaSourceHelpers.onActivate)(_laconaApi.fetchClipboard, {});
const ClipboardString = exports.ClipboardString = {
extends: [_laconaPhrases.String],
describe({ config, observe }) {
if (!config.enableClipboardText) return;
const clipboard = observe((0, _elliptical.createElement)(ClipboardSource, null));
if (clipboard.strings && clipboard.strings.length > 0) {
const items = _lodash2.default.chain(clipboard.strings).map(string => {
const noNewlinesString = string.replace(/(?:\r\n|\r|\n)/g, ' ');
const qualifier = string.length < 50 ? string : `${noNewlinesString.slice(0, 47)}...`;
const items = [{ text: 'clipboard string', value: string, qualifier, category: 'symbol' }, { text: 'clipboard contents', value: string, qualifier, category: 'symbol' }, { text: 'clipboard', value: string, qualifier, category: 'symbol' }];
if (string.length < 50) {
items.unshift({ text: noNewlinesString, value: string });
}
return items;
}).flatten().value();
return (0, _elliptical.createElement)(
'placeholder',
{ argument: 'clipboard string', suppressEmpty: false },
(0, _elliptical.createElement)('list', { items: items, unique: true, annotation: { type: 'image', value: CLIPBOARD_ICON }, limit: 1 })
);
}
}
};
const ClipboardURL = exports.ClipboardURL = {
extends: [_laconaPhrases.URL],
describe({ config, observe }) {
if (!config.enableClipboardURLs) return;
const clipboard = observe((0, _elliptical.createElement)(ClipboardSource, null));
if (clipboard.urls && clipboard.urls.length > 0) {
const items = _lodash2.default.chain(clipboard.urls).map(url => {
const items = [{ text: 'clipboard url', value: url, qualifier: url, category: 'symbol' }, { text: 'clipboard contents', value: url, qualifier: url, category: 'symbol' }, { text: 'clipboard', value: url, qualifier: url, category: 'symbol' }];
if (url.length < 50) {
items.unshift({ text: url, value: url });
}
return items;
}).flatten().value();
return (0, _elliptical.createElement)(
'placeholder',
{ argument: 'clipboard url', suppressEmpty: false },
(0, _elliptical.createElement)('list', { items: items, unique: true, annotation: { type: 'image', value: CLIPBOARD_ICON }, limit: 1 })
);
}
}
};
function describeClipboardFS(observe, config, filter, argument) {
if (!config.enableClipboardFiles) return;
const clipboard = observe((0, _elliptical.createElement)(ClipboardSource, null));
let items = [];
if (clipboard.files && clipboard.files.length > 0) {
items = _lodash2.default.chain(clipboard.files).filter(file => filter(file)).map(file => [{ text: file, value: file }, { text: argument, value: file, category: 'symbol' }, { text: 'clipboard contents', value: file, category: 'symbol' }, { text: 'clipboard', value: file, category: 'symbol' }]).flatten().value();
}
if (items.length > 0) {
return (0, _elliptical.createElement)(
'placeholder',
{ argument: argument, suppressEmpty: false },
(0, _elliptical.createElement)('list', { items: items, unique: true, annotation: { type: 'image', value: CLIPBOARD_ICON }, limit: 1 })
);
}
}
const ClipboardFile = exports.ClipboardFile = {
extends: [_laconaPhrases.File],
describe({ config, observe }) {
return describeClipboardFS(observe, config, file => !_lodash2.default.endsWith(file, '/'), 'clipboard file');
}
};
const ClipboardDirectory = exports.ClipboardDirectory = {
extends: [_laconaPhrases.Directory],
describe({ config, observe }) {
return describeClipboardFS(observe, config, file => _lodash2.default.endsWith(file, '/'), 'clipboard directory');
}
};