PHP Classes

File: public/js/tinymce/src/plugins/paste/src/main/js/core/CutCopy.js

Recommend this page to a friend!
  Classes of Abed Nego Ragil Putra   GoLavaCMS   public/js/tinymce/src/plugins/paste/src/main/js/core/CutCopy.js   Download  
File: public/js/tinymce/src/plugins/paste/src/main/js/core/CutCopy.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: GoLavaCMS
Publish content on Web pages with SEO support
Author: By
Last change:
Date: 6 years ago
Size: 3,773 bytes
 

Contents

Class file image Download
/** * CutCopy.js * * Released under LGPL License. * Copyright (c) 1999-2017 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing */ define( 'tinymce.plugins.paste.core.CutCopy', [ 'global!setTimeout', 'tinymce.core.Env', 'tinymce.plugins.paste.core.InternalHtml', 'tinymce.plugins.paste.core.Utils' ], function (setTimeout, Env, InternalHtml, Utils) { var noop = function () { }; var hasWorkingClipboardApi = function (clipboardData) { // iOS supports the clipboardData API but it doesn't do anything for cut operations // Edge 15 has a broken HTML Clipboard API see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11780845/ return Env.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true; }; var setHtml5Clipboard = function (clipboardData, html, text) { if (hasWorkingClipboardApi(clipboardData)) { try { clipboardData.clearData(); clipboardData.setData('text/html', html); clipboardData.setData('text/plain', text); clipboardData.setData(InternalHtml.internalHtmlMime(), html); return true; } catch (e) { return false; } } else { return false; } }; var setClipboardData = function (evt, data, fallback, done) { if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) { evt.preventDefault(); done(); } else { fallback(data.html, done); } }; var fallback = function (editor) { return function (html, done) { var markedHtml = InternalHtml.mark(html); var outer = editor.dom.create('div', { contenteditable: "false", "data-mce-bogus": "all" }); var inner = editor.dom.create('div', { contenteditable: "true" }, markedHtml); editor.dom.setStyles(outer, { position: 'fixed', left: '-3000px', width: '1000px', overflow: 'hidden' }); outer.appendChild(inner); editor.dom.add(editor.getBody(), outer); var range = editor.selection.getRng(); inner.focus(); var offscreenRange = editor.dom.createRng(); offscreenRange.selectNodeContents(inner); editor.selection.setRng(offscreenRange); setTimeout(function () { outer.parentNode.removeChild(outer); editor.selection.setRng(range); done(); }, 0); }; }; var getData = function (editor) { return { html: editor.selection.getContent({ contextual: true }), text: editor.selection.getContent({ format: 'text' }) }; }; var cut = function (editor) { return function (evt) { if (editor.selection.isCollapsed() === false) { setClipboardData(evt, getData(editor), fallback(editor), function () { // Chrome fails to execCommand from another execCommand with this message: // "We don't execute document.execCommand() this time, because it is called recursively."" setTimeout(function () { // detach editor.execCommand('Delete'); }, 0); }); } }; }; var copy = function (editor) { return function (evt) { if (editor.selection.isCollapsed() === false) { setClipboardData(evt, getData(editor), fallback(editor), noop); } }; }; var register = function (editor) { editor.on('cut', cut(editor)); editor.on('copy', copy(editor)); }; return { register: register }; } );