Seditio Source
Root |
./othercms/xenForo 2.2.8/js/xf/attachment_manager.min.js
'use strict';!function(g,l,p,q){XF.AttachmentManager=XF.Element.newHandler({options:{uploadButton:".js-attachmentUpload",manageUrl:null,container:".js-attachmentUploads",filesContainer:".js-attachmentFiles",fileRow:".js-attachmentFile",insertMultiRow:".js-attachmentInsertMultiRow",insertRow:".js-attachmentInsert",selectToggleButton:".js-attachmentSelect",selectActionButton:".js-attachmentSelectAction",actionButton:".js-attachmentAction",uploadTemplate:".js-attachmentUploadTemplate",templateProgress:".js-attachmentProgress",
templateError:".js-attachmentError",templateThumb:".js-attachmentThumb",templateView:".js-attachmentView",allowDrop:!1,checkVideoSize:!0},$container:null,$filesContainer:null,template:null,$form:null,legacyMode:!1,supportsVideoAudioUploads:null,manageUrl:null,flow:null,fileMap:{},isUploading:!1,lastScroll:0,editor:null,init:function(){var b=this,a=this.options,c=this.$target;if(l.Flow){var d=navigator.userAgent,e=d.match(/Android ([0-9]+)/);if(e&&5>parseInt(e[1],10)&&(d=d.match(/Chrome\/([0-9]+)/),
!d||33>parseInt(d[1],10))){console.warn("Old Android WebView detected. Must fallback to basic uploader.");return}d=c.find(a.uploadButton);if(this.options.manageUrl)this.manageUrl=this.options.manageUrl;else{if(!d.length){console.error("No manage URL specified and no uploaders available.");return}e=d.first();this.manageUrl=e.data("upload-href")||e.attr("href")}this.$container=c.find(a.container);this.$filesContainer=c.find(a.filesContainer);if(this.$container.length)this.$container.on("click",a.actionButton,
XF.proxy(this,"actionButtonClick")).on("click","input:checkbox",XF.proxy(this,"checkboxClick")).on("click",a.selectToggleButton,XF.proxy(this,"selectToggleClick")).on("click",a.selectActionButton,XF.proxy(this,"selectActionClick"));else this.legacyMode=!0,this.$filesContainer.on("click",a.actionButton,XF.proxy(this,"actionButtonClick"));(this.template=c.find(a.uploadTemplate).html())||console.error("No attached file template found.");(a=this.setupFlow())?(this.flow=a,this.setupUploadButtons(d,a),
this.options.allowDrop&&a.assignDrop([c[0]]),setTimeout(function(){b.editor=XF.getEditorInContainer(b.$target,"[data-attachment-target=false]");b.editor||b.removeInsertButtons(b.$container);b.toggleInsertMultiRow()},50),this.$form=this.$target.closest("form"),this.$form.length&&(this.$form.on("ajax-submit:before",function(f,h){b.isUploading&&!confirm(XF.phrase("files_being_uploaded_are_you_sure"))&&(h.preventSubmit=!0)}),this.$form.on("attachment-manager:reset",XF.proxy(this,"resetAttachments")))):
console.error("No flow uploader support")}else console.error("flow.js must be loaded")},setupFlow:function(){var b=this.getFlowOptions(),a=new Flow(b),c=this;if(!a.support){if(!l.FustyFlow)return null;b.matchJSON=!0;a=new FustyFlow(b)}a.on("fileAdded",XF.proxy(this,"fileAdded"));a.on("filesSubmitted",function(){c.setUploading(!0);a.upload()});a.on("fileProgress",XF.proxy(this,"uploadProgress"));a.on("fileSuccess",XF.proxy(this,"uploadSuccess"));a.on("fileError",XF.proxy(this,"uploadError"));return a},
getFlowOptions:function(){return{target:this.manageUrl,allowDuplicateUploads:!0,fileParameterName:"upload",query:XF.proxy(this,"uploadQueryParams"),simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:100,chunkSize:4294967296,readFileFn:function(b,a,c,d,e){var f="slice";b.file.slice?f="slice":b.file.mozSlice?f="mozSlice":b.file.webkitSlice&&(f="webkitSlice");d||(d="");e.readFinished(b.file[f](a,c,d))}}},setupUploadButtons:function(b,a){var c=this;b.each(function(){var d=g(this),e=d.data("accept")||
"",f=g('<span class="js-attachButton" />').insertAfter(d).append(d);"."==e&&(e="");d.click(function(n){n.preventDefault()});a.assignBrowse(f[0],!1,!1,{accept:e});if(null===c.supportsVideoAudioUploads){d=XF.config.allowedVideoExtensions;var h=XF.config.allowedAudioExtensions;e=e.split(",");for(var k in e){var m=e[k].substr(1);if(-1!==d.indexOf(m)||-1!==h.indexOf(m)){c.supportsVideoAudioUploads=!0;break}}}f=f.find("input[type=file]");f.attr("title",XF.htmlspecialchars(XF.phrase("attach")));f.css("overflow",
"hidden");f.css(XF.isRtl()?"right":"left",-1E3)})},fileAdded:function(b){var a=this.applyUploadTemplate({filename:b.name,uploading:!0});this.resizeProgress(a,0);a.data("file",b);this.legacyMode?this.$filesContainer.addClass("is-active"):this.$container.addClass("is-active");a.appendTo(this.$filesContainer);this.fileMap[b.uniqueIdentifier]=a;var c=this.$filesContainer.closest('[data-xf-init="h-scroller"]');if(c.length&&(c=XF.Element.getHandler(c,"h-scroller"))){var d=Date.now();this.lastScroll<d-500&&
(this.lastScroll=d,c.scrollTo(a.position().left-50))}this.$target.find(this.options.uploadButton).blur();a=this.$target.find(this.options.uploadButton).first().data("video-size");if(this.options.checkVideoSize&&this.supportsVideoAudioUploads&&this.isVideoOrAudio(b)&&0<a&&b.size>a)return this.uploadError(b,this.addErrorToJson({},XF.phrase("file_too_large_to_upload"))),!1;if(0<XF.config.uploadMaxFilesize&&b.size>XF.config.uploadMaxFilesize)return this.uploadError(b,this.addErrorToJson({},XF.phrase("uploaded_file_is_too_large_for_server_to_process"))),
!1},isVideoOrAudio:function(b){var a=b.name.split(".");b=XF.config.allowedVideoExtensions;var c=XF.config.allowedAudioExtensions;if(1===a.length||""===a[0]&&a.length)return!1;a=a.pop();return-1!==b.indexOf(a)||-1!==c.indexOf(a)},uploadProgress:function(b){var a=this.fileMap[b.uniqueIdentifier];a&&(this.setUploading(!0),this.resizeProgress(a,b.progress()))},resizeProgress:function(b,a){a=Math.floor(100*a);b=b.find(this.options.templateProgress);var c=b.find("i");c.length||(c=g("<i />"),b.html("&nbsp;").append(c));
c.text(a+"%").css("width",a+"%")},uploadSuccess:function(b,a,c){a=this.getObjectFromMessage(a);this.setUploading(!1);a.status&&"error"==a.status?this.uploadError(b,a,c):a.attachment?this.insertUploadedRow(a.attachment,this.fileMap[b.uniqueIdentifier]):(a=this.addErrorToJson(a),this.uploadError(b,a,c))},setUploading:function(b){b=b?!0:!1;b!==this.isUploading&&((this.isUploading=b)?this.$target.trigger("attachment-manager:upload-start"):this.$target.trigger("attachment-manager:upload-end"))},getObjectFromMessage:function(b){if(b instanceof
Object)return b;try{return g.parseJSON(b)}catch(a){return this.addErrorToJson({})}},addErrorToJson:function(b,a){b.status="error";b.errors=[null===a?XF.phrase("oops_we_ran_into_some_problems"):a];return b},insertUploadedRow:function(b,a){b=this.applyUploadTemplate(b);this.editor||this.removeInsertButtons(b);a?a.replaceWith(b):(this.legacyMode?this.$filesContainer.addClass("is-active"):this.$container.addClass("is-active"),b.appendTo(this.$filesContainer));XF.activate(b);XF.layoutChange();a=g.Event("attachment:row-inserted");
b.trigger(a,[b,this]);this.toggleInsertMultiRow()},uploadError:function(b,a,c){a=this.getObjectFromMessage(a);this.setUploading(!1);var d=this.fileMap[b.uniqueIdentifier];if(d&&a.errors){c=a.errors[0];if(!c)for(var e in a.errors){c=a.errors[e];break}d.find(this.options.templateProgress).remove();d.find(this.options.templateError).text(c);d.addClass("is-uploadError");delete this.fileMap[b.uniqueIdentifier];d.removeData("file")}else XF.defaultAjaxSuccessError(a,200,c.xhr),this.removeFileRow(d)},actionButtonClick:function(b){b.preventDefault();
var a=g(b.currentTarget);b=a.attr("data-action");var c=a.attr("data-type");a=a.closest(this.options.fileRow);switch(b){case "thumbnail":case "full":this.insertAttachment(a,b,c);break;case "delete":this.deleteAttachment(a,c);break;case "cancel":this.cancelUpload(a)}},checkboxClick:function(){var b=this.$filesContainer.find("input:checkbox").filter(":checked").length;g(this.options.selectActionButton).prop("disabled",b?!1:!0)},selectToggleClick:function(b){b.preventDefault();this.setSelectActionState(!this.$container.hasClass("is-selecting"));
g(b.currentTarget).blur()},setSelectActionState:function(b){var a=this.$container;a.hasClass("is-selecting")!==b&&(a.find(this.options.selectToggleButton).each(function(){var c=g(this),d=c.attr("data-toggle"),e=c.text();c.text(d).attr("data-toggle",e)}),a[b?"addClass":"removeClass"]("is-selecting"))},selectActionClick:function(b){b.preventDefault();var a=g(b.currentTarget).attr("data-action"),c=this.options.fileRow,d=this.options.actionButton,e=this.$filesContainer.find(c+" input[type=checkbox]:checked");
e.each(function(){g(this).closest(c).find(d).filter(function(){var f=g(this),h=f.attr("data-type");return"video"!==h&&"audio"!==h||"thumbnail"!==a?f.attr("data-action")===a:"full"===f.attr("data-action")}).first().click();e.prop("checked",!1)});this.$container.find(this.options.insertMultiRow).find('input[data-xf-init="check-all"]').prop("checked",!1);this.setSelectActionState(!1)},insertAttachment:function(b,a,c){c=c||"image";var d=b.data("attachment-id");if(d&&this.editor){var e=b.find(this.options.templateThumb).attr("src");
b=b.find(this.options.templateView).attr("href");var f,h={id:d,img:e};if("video"==c||"audio"==c)a="full";if("full"==a)a="[ATTACH=full]"+d+"[/ATTACH]","image"==c?f='<img src="{{img}}" data-attachment="full:{{id}}" alt="" />':"video"==c?f='<span contenteditable="false" draggable="true" class="fr-video fr-dvi fr-draggable fr-deletable"><video data-xf-init="video-init" data-attachment="full:{{id}}" src="{{img}}" controls></video></span>':"audio"==c&&(f='<span contenteditable="false" draggable="true" class="fr-audio fr-dvi fr-draggable fr-deletable"><audio data-attachment="full:{{id}}" src="{{img}}" controls></audio></span>&nbsp;'),
h.img=b;else{if(!e||"image"!==c)return;a="[ATTACH]"+d+"[/ATTACH]";f='<img src="{{img}}" data-attachment="thumb:{{id}}" alt="" />'}f=Mustache.render(f,h);XF.insertIntoEditor(this.$target,f,a,"[data-attachment-target=false]")}},deleteAttachment:function(b,a){a=a||"image";var c=b.data("attachment-id");if(c){var d=this;XF.ajax("post",this.manageUrl,{delete:c},function(h){h.delete&&d.removeFileRow(b)},{skipDefaultSuccess:!0});var e=new RegExp("^[a-z]+:"+c+"$","i"),f=new RegExp("\\[attach[^\\]]*\\]"+c+
"\\[/attach\\]","gi");XF.modifyEditorContent(this.$target,function(h){var k=h.ed;"image"==a||"file"==a?k.$el.find("img[data-attachment]").filter(function(){return e.test(g(this).attr("data-attachment"))}).each(function(){k.image.remove(g(this))}):("video"==a||"audio"==a)&&k.$el.find(a+"[data-attachment]").filter(function(){return e.test(g(this).attr("data-attachment"))}).each(function(){g(this).parent().remove()})},function(h){var k=h.val();k=k.replace(f,"");h.val(k)},"[data-attachment-target=false]")}},
cancelUpload:function(b){var a=b.data("file");b.data("attachment-id")||a&&1==a.progress()||(this.flow.removeFile(a),this.flow.isUploading()||this.setUploading(!1),this.removeFileRow(b))},uploadQueryParams:function(){return{_xfToken:XF.config.csrf,_xfResponseType:"json",_xfWithData:1}},applyUploadTemplate:function(b){b=g(g.parseHTML(Mustache.render(this.template,b)));var a=this.options.fileRow;return b.filter(function(){return g(this).is(a)})},removeFileRow:function(b){b.remove();this.toggleInsertMultiRow();
this.getFileRows().length||(this.legacyMode?this.$filesContainer.removeClass("is-active"):this.$container.removeClass("is-active"),XF.layoutChange())},removeInsertButtons:function(b){b.find(this.options.insertRow+","+this.options.insertMultiRow).remove();XF.layoutChange()},toggleInsertMultiRow:function(){this.checkboxClick();var b=this.$filesContainer.find(this.options.actionButton).filter(":not([data-action=delete])").closest(this.options.fileRow),a=this.$container.find(this.options.insertMultiRow);
1<b.length?a.addClass("is-active"):a.removeClass("is-active");XF.layoutChange()},resetAttachments:function(){var b=this;b.getFileRows().each(function(){b.removeFileRow(g(this))})},getFileRows:function(){return this.$filesContainer.find(this.options.fileRow)}});XF.AttachmentOnInsert=XF.Element.newHandler({options:{fileRow:".js-attachmentFile",href:null,linkData:null},loading:!1,init:function(){var b=this.$target.closest(this.options.fileRow);b.length&&this.options.href||console.error("Cannot find inserted row or action to perform.");
b.on("attachment:row-inserted",XF.proxy(this,"onAttachmentInsert"))},onAttachmentInsert:function(b,a,c){if(!this.loading){var d=this;XF.ajax("post",this.options.href,this.options.linkData||{},XF.proxy(this,"onLoad")).always(function(){d.loading=!1})}},onLoad:function(b){if(b.html){var a=this;XF.setupHtmlInsert(b.html,function(c,d,e){a.$target.replaceWith(c).xfFadeDown(XF.config.speed.xfast,function(){e(!0);XF.layoutChange()})})}}});XF.Element.register("attachment-manager","XF.AttachmentManager");
XF.Element.register("attachment-on-insert","XF.AttachmentOnInsert")}(jQuery,window,document);