fix html5 clipboard on ie

pull/312/head
nightwing 2016-05-25 20:49:24 +04:00
rodzic 9973c0ea35
commit d2c77b4f42
1 zmienionych plików z 21 dodań i 11 usunięć

Wyświetl plik

@ -51,21 +51,19 @@ define(function(require, exports, module) {
function set(type, data, list) { function set(type, data, list) {
if (notSupported(type)) if (notSupported(type))
return; return;
type = convertType(type);
if (nativeObject) { if (nativeObject) {
nativeObject.setData(type, data); handleClipboardData(nativeObject, type, data);
return true; return true;
} }
var setData = function(e) { var setData = function(e) {
if (list) { if (list) {
list.forEach(function(type) { list.forEach(function(type) {
e.clipboardData.setData(type, data); handleClipboardData(e.clipboardData, type, data);
}); });
} }
e.clipboardData.setData(type, data); handleClipboardData(e.clipboardData, type, data);
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -82,17 +80,15 @@ define(function(require, exports, module) {
function get(type, full) { function get(type, full) {
if (notSupported(type)) if (notSupported(type))
return; return;
type = convertType(type);
if (!full && nativeObject) if (!full && nativeObject)
return nativeObject.getData(type); return handleClipboardData(nativeObject, type);
var data; var data;
var getData = function(e) { var getData = function(e) {
data = full data = full
? e.clipboardData ? e.clipboardData
: e.clipboardData.getData(type); : handleClipboardData(nativeObject, type);
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
}; };
@ -120,8 +116,22 @@ define(function(require, exports, module) {
return !/text($|\/)/.test(type); return !/text($|\/)/.test(type);
} }
function convertType(type) { function handleClipboardData(clipboardData, type, data, forceIEMime) {
return document.all ? "Text" : type; if (!clipboardData)
return;
// using "Text" doesn't work on old webkit but ie needs it
var mime = forceIEMime ? "Text" : type;
try {
if (data) {
// Safari 5 has clipboardData object, but does not handle setData()
return clipboardData.setData(mime, data) !== false;
} else {
return clipboardData.getData(mime);
}
} catch(e) {
if (!forceIEMime)
return handleClipboardData(clipboardData, type, data, true);
}
} }
function wrap(obj) { function wrap(obj) {