var _cutOrCopyCommand = function (cut) { return os.hasKeyboardFocus() .bind(this) .then(function (cefHasFocus) { var el = window.document.activeElement, data; if (cefHasFocus && _isInput(el)) { if (_isTextInput(el)) { data = el.value.substring(el.selectionStart, el.selectionEnd); if (cut) { el.setRangeText(""); } } else { data = el.value; } } else { // Even if CEF doesn't have focus, a disabled input could have a selection var selection = window.document.getSelection(); if (selection.type === "Range") { data = selection.toString(); } } if (typeof data === "string") { var cutCopyEvent = new window.Event(cut ? "cut" : "copy", { bubbles: true }); el.dispatchEvent(cutCopyEvent); return os.clipboardWrite(data); } // If we're on modal state (type edit), we should go with native copy/cut if (this.flux.store("tool").getModalToolState()) { if (cut) { this.flux.actions.edit.nativeCut(); } else { this.flux.actions.edit.nativeCopy(); } } else if (!cut) { var applicationStore = this.flux.store("application"), document = applicationStore.getCurrentDocument(); if (!document || document.unsupported) { return; } var layerIDs = collection.pluck(document.layers.selectedNormalized, "id"), payload = { document: document.id, layers: layerIDs }, rawPayload = JSON.stringify(payload); headlights.logEvent("edit", "layers", "copy_layers"); return os.clipboardWrite(rawPayload, LAYER_CLIPBOARD_FORMAT); } }); };
var selectAllCommand = function () { return os.hasKeyboardFocus() .bind(this) .then(function (cefHasFocus) { var el = window.document.activeElement; if (cefHasFocus && _isInput(el)) { if (_isTextInput(el)) { el.setSelectionRange(0, el.value.length); } } else { var toolStore = this.flux.store("tool"); if (toolStore.getModalToolState()) { this.flux.actions.edit.nativeSelectAll(); } else { this.flux.actions.layers.selectAll(); } } }); };
var pasteCommand = function () { return os.hasKeyboardFocus() .bind(this) .then(function (cefHasFocus) { var el = window.document.activeElement; if (cefHasFocus && _isInput(el)) { return os.clipboardRead() .then(function (result) { var data = result.data, format = result.format; if (format !== "string") { return; } if (_isTextInput(el)) { var selectionStart = el.selectionStart; el.setRangeText(data); el.setSelectionRange(selectionStart + data.length, selectionStart + data.length); } else { el.value = data; } var pasteEvent = new window.Event("paste", { bubbles: true }); el.dispatchEvent(pasteEvent); }); } else { return os.clipboardRead([LAYER_CLIPBOARD_FORMAT]) .bind(this) .then(function (result) { var format = result.format; if (format !== LAYER_CLIPBOARD_FORMAT) { this.flux.actions.edit.nativePaste(); return Promise.resolve(); } var applicationStore = this.flux.store("application"), document = applicationStore.getCurrentDocument(); if (!document || document.unsupported) { return; } var data = result.data, payload = JSON.parse(data), documentID = payload.document, documentStore = this.flux.store("document"), fromDocument = documentStore.getDocument(documentID); if (!fromDocument || fromDocument.unsupported) { return; } var layerIDs = payload.layers, fromLayers = Immutable.List(layerIDs.reduce(function (layers, layerID) { var layer = fromDocument.layers.byID(layerID); if (layer) { layers.push(layer); } return layers; }, [])); headlights.logEvent("edit", "layers", "paste_layers"); return this.transfer(layers.duplicate, document, fromDocument, fromLayers); }); } }); };