Files
typecho/admin/js/paste.js
T
joyqi 38f959890d replace compass with node-sass.
create new build tools.
2020-05-14 14:30:19 +08:00

1 line
6.8 KiB
JavaScript

(function(){var s,a,r,l,n;function o(t,e){var x;this._container=t,this._target=e,this._container=s(this._container),this._target=s(this._target).addClass("pastable"),this._container.on("paste",(x=this,function(t){var e,n,a,r,i,o,l,s,u,g,c,f,p,d,h,_,m,v,b,y;if(x.originalEvent=null!==t.originalEvent?t.originalEvent:null,x._paste_event_fired=!0,null!=(null!=(d=t.originalEvent)?d.clipboardData:void 0))if((n=t.originalEvent.clipboardData).items){for(f=null,x.originalEvent.pastedTypes=[],o=0,u=(h=n.items).length;o<u;o++)(i=h[o]).type.match(/^text\/(plain|rtf|html)/)&&x.originalEvent.pastedTypes.push(i.type);for(e=l=0,g=(_=n.items).length;l<g;e=++l){if((i=_[e]).type.match(/^image\//)){(p=new FileReader).onload=function(t){return x._handleImage(t.target.result,x.originalEvent,f)};try{p.readAsDataURL(i.getAsFile())}catch(t){}t.preventDefault();break}"text/plain"===i.type&&(0===e&&1<n.items.length&&n.items[1].type.match(/^image\//)&&(b=!0,r=n.items[1].type),i.getAsString(function(t){return b?(f=t,x._target.trigger("pasteText",{text:t,isFilename:!0,fileType:r,originalEvent:x.originalEvent})):x._target.trigger("pasteText",{text:t,originalEvent:x.originalEvent})})),"text/rtf"===i.type&&i.getAsString(function(t){return x._target.trigger("pasteTextRich",{text:t,originalEvent:x.originalEvent})}),"text/html"===i.type&&i.getAsString(function(t){return x._target.trigger("pasteTextHtml",{text:t,originalEvent:x.originalEvent})})}}else-1!==Array.prototype.indexOf.call(n.types,"text/plain")&&(y=n.getData("Text"),setTimeout(function(){return x._target.trigger("pasteText",{text:y,originalEvent:x.originalEvent})},1)),x._checkImagesInContainer(function(t){return x._handleImage(t,x.originalEvent)});if(n=window.clipboardData)if(null!=(m=y=n.getData("Text"))&&m.length)setTimeout(function(){return x._target.trigger("pasteText",{text:y,originalEvent:x.originalEvent}),x._target.trigger("_pasteCheckContainerDone")},1);else{for(s=0,c=(v=n.files).length;s<c;s++)a=v[s],x._handleImage(URL.createObjectURL(a),x.originalEvent);x._checkImagesInContainer(function(t){})}return null}))}(s=window.jQuery).paste=function(t){return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),a.mountNonInputable(t)._container},s.fn.pastableNonInputable=function(){for(var t,e=0,n=this.length;e<n;e++)(t=this[e])._pastable||s(t).is("textarea, input:text, [contenteditable]")||(a.mountNonInputable(t),t._pastable=!0);return this},s.fn.pastableTextarea=function(){for(var t,e=0,n=this.length;e<n;e++)(t=this[e])._pastable||s(t).is(":not(textarea, input:text)")||(a.mountTextarea(t),t._pastable=!0);return this},s.fn.pastableContenteditable=function(){for(var t,e=0,n=this.length;e<n;e++)(t=this[e])._pastable||s(t).is(":not([contenteditable])")||(a.mountContenteditable(t),t._pastable=!0);return this},l=function(t,e){var n,a,r,i,o,l,s,u,g,c,f;if(null==e&&(e=512),!(u=t.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(u=(c=u)[0],l=c[1],n=c[2],i=atob(n),r=[],g=0;g<i.length;){for(f=i.slice(g,g+e),o=new Array(f.length),s=0;s<f.length;)o[s]=f.charCodeAt(s),s++;a=new Uint8Array(o),r.push(a),g+=e}return new Blob(r,{type:l})},r=function(){return s(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden",opacity:1e-17})},n=function(t,e){var n=void 0,a=void 0,r=void 0,i=void 0,o=void 0,l=t.nodeName.toLowerCase();return"area"===l?(a=(n=t.parentNode).name,!(!t.href||!a||"map"!==n.nodeName.toLowerCase())&&(0<(r=s("img[usemap='#"+a+"']")).length&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(i=!t.disabled)&&(o=s(t).closest("fieldset")[0])&&(i=!o.disabled):i="a"===l&&t.href||e,(i=i||s(t).is("[contenteditable]"))&&s(t).is(":visible"))},o.prototype._target=null,o.prototype._container=null,o.mountNonInputable=function(t){var e=new o(r().appendTo(t),t);return s(t).on("click",function(t){if(!n(t.target,!1)&&!window.getSelection().toString())return e._container.focus()}),e._container.on("focus",function(){return s(t).addClass("pastable-focus")}),e._container.on("blur",function(){return s(t).removeClass("pastable-focus")})},o.mountTextarea=function(i){var n,a,t,e;return"undefined"!=typeof DataTransfer&&null!==DataTransfer&&DataTransfer.prototype&&null!=(t=Object.getOwnPropertyDescriptor)&&null!=(e=t.call(Object,DataTransfer.prototype,"items"))&&e.get?this.mountContenteditable(i):(a=new o(r().insertBefore(i),i),n=!1,s(i).on("keyup",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(n=!1),null}),s(i).on("keydown",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(n=!0),null!=t.ctrlKey&&null!=t.metaKey&&(n=t.ctrlKey||t.metaKey),n&&86===t.keyCode&&(a._textarea_focus_stolen=!0,a._container.focus(),a._paste_event_fired=!1,setTimeout(function(){if(!a._paste_event_fired)return s(i).focus(),a._textarea_focus_stolen=!1},1)),null}),s(i).on("paste",function(){}),s(i).on("focus",function(){if(!a._textarea_focus_stolen)return s(i).addClass("pastable-focus")}),s(i).on("blur",function(){if(!a._textarea_focus_stolen)return s(i).removeClass("pastable-focus")}),s(a._target).on("_pasteCheckContainerDone",function(){return s(i).focus(),a._textarea_focus_stolen=!1}),s(a._target).on("pasteText",function(t,e){var n=s(i).prop("selectionStart"),a=s(i).prop("selectionEnd"),r=s(i).val();return s(i).val(""+r.slice(0,n)+e.text+r.slice(a)),s(i)[0].setSelectionRange(n+e.text.length,n+e.text.length),s(i).trigger("change")}))},o.mountContenteditable=function(t){return new o(t,t),s(t).on("focus",function(){return s(t).addClass("pastable-focus")}),s(t).on("blur",function(){return s(t).removeClass("pastable-focus")})},o.prototype._handleImage=function(t,a,r){var i,o,e;return t.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),(i=new Image).crossOrigin="anonymous",i.onload=(o=this,function(){var t,e,n=document.createElement("canvas");n.width=i.width,n.height=i.height,n.getContext("2d").drawImage(i,0,0,n.width,n.height),e=null;try{e=n.toDataURL("image/png"),t=l(e)}catch(t){}return e&&o._target.trigger("pasteImage",{blob:t,dataURL:e,width:i.width,height:i.height,originalEvent:a,name:r}),o._target.trigger("pasteImageEnd")}),i.onerror=(e=this,function(){return e._target.trigger("pasteImageError",{message:"Failed to get image from: "+t,url:t}),e._target.trigger("pasteImageEnd")}),i.src=t)},o.prototype._checkImagesInContainer=function(a){for(var r,i,o=Math.floor(1e3*Math.random()),t=this._container.find("img"),e=0,n=t.length;e<n;e++)(r=t[e])["_paste_marked_"+o]=!0;return setTimeout((i=this,function(){for(var t=i._container.find("img"),e=0,n=t.length;e<n;e++)(r=t[e])["_paste_marked_"+o]||(a(r.src),s(r).remove());return i._target.trigger("_pasteCheckContainerDone")}),1)},a=o}).call(this);