diff --git a/wire/core/Pagefile.php b/wire/core/Pagefile.php index c33d87f3..9a73cf42 100644 --- a/wire/core/Pagefile.php +++ b/wire/core/Pagefile.php @@ -248,7 +248,9 @@ class Pagefile extends WireData { if(ctype_digit("$id")) { $id = (int) $id; if(!$id) $id = ''; - $name = $n > 0 ? "description$id" : "description"; + $name = $n > 0 ? "description$id" : "description"; + } else if($id === 'default') { + $name = 'description'; } else if($languages) { $language = $languages->get($id); // i.e. "default" or "es" if(!$language->id) continue; diff --git a/wire/core/Pagefiles.php b/wire/core/Pagefiles.php index dea91bb9..91de533c 100644 --- a/wire/core/Pagefiles.php +++ b/wire/core/Pagefiles.php @@ -75,6 +75,14 @@ class Pagefiles extends WireArray implements PageFieldValueInterface { * */ protected $unlinkQueue = array(); + + /** + * Items to be renamed when Page is saved (oldName => newName) + * + * @var array + * + */ + protected $renameQueue = array(); /** * IDs of any hooks added in this instance, used by the destructor @@ -338,10 +346,21 @@ class Pagefiles extends WireArray implements PageFieldValueInterface { foreach($this->unlinkQueue as $item) { $item->unlink(); } + foreach($this->renameQueue as $item) { + $name = $item->get('_rename'); + if(!$name) continue; + $item->rename($name); + } $this->unlinkQueue = array(); $this->removeHooks(); return $this; } + + protected function addSaveHook() { + if(!count($this->unlinkQueue) && !count($this->renameQueue)) { + $this->hookIDs[] = $this->page->filesManager->addHookBefore('save', $this, 'hookPageSave'); + } + } /** * Delete a pagefile item @@ -375,9 +394,7 @@ class Pagefiles extends WireArray implements PageFieldValueInterface { public function remove($item) { if(is_string($item)) $item = $this->get($item); if(!$this->isValidItem($item)) throw new WireException("Invalid type to {$this->className}::remove(item)"); - if(!count($this->unlinkQueue)) { - $this->hookIDs[] = $this->page->filesManager->addHookBefore('save', $this, 'hookPageSave'); - } + $this->addSaveHook(); $this->unlinkQueue[] = $item; parent::remove($item); return $this; @@ -401,6 +418,28 @@ class Pagefiles extends WireArray implements PageFieldValueInterface { return $this; } + /** + * Queue a rename of a Pagefile + * + * This only queues a rename. Rename actually occurs when page is saved. + * Note this differs from the behavior of `Pagefile::rename()`. + * + * #pw-group-manipulation + * + * @param Pagefile $item + * @param string $name + * @return Pagefiles + * @see Pagefile::rename() + * + */ + public function rename(Pagefile $item, $name) { + $item->set('_rename', $name); + $this->renameQueue[] = $item; + $this->trackChange('renameQueue', $item->name, $name); + $this->addSaveHook(); + return $this; + } + /** * Return the full disk path where files are stored * diff --git a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module index 28e88868..f107700e 100644 --- a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module +++ b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module @@ -786,6 +786,9 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel $replaceFile = $this->value->getFile($replace); if($replaceFile && $replaceFile instanceof Pagefile) { $this->processInputDeleteFile($replaceFile); + if(strtolower($pagefile->ext()) == strtolower($replaceFile->ext())) { + $this->value->rename($pagefile, $replaceFile->name); + } $changed = true; } } diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js index b5095767..ed25fc0a 100755 --- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js +++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js @@ -1517,8 +1517,23 @@ function InputfieldImage($) { if($progressItem.length) $progressItem.remove(); if(uploadReplace.item && maxFiles != 1) { - // re-open replaced item + // indicate replacement for processing $markup.find(".InputfieldFileReplace").val(uploadReplace.file); + // update replaced file name (visually) if extensions are the same + var $imageEditName = $markup.find(".InputfieldImageEdit__name"); + var uploadNewName = $imageEditName.text(); + var uploadNewExt = uploadNewName.substring(uploadNewName.lastIndexOf('.')+1).toLowerCase(); + uploadNewName = uploadNewName.substring(0, uploadNewName.lastIndexOf('.')); // remove ext + var uploadReplaceName = uploadReplace.file; + if(uploadReplaceName.indexOf('?') > -1) { + uploadReplaceName = uploadReplaceName.substring(0, uploadReplaceName.indexOf('?')); + } + var uploadReplaceExt = uploadReplaceName.substring(uploadReplaceName.lastIndexOf('.')+1).toLowerCase(); + uploadReplaceName = uploadReplaceName.substring(0, uploadReplaceName.lastIndexOf('.')); // remove ext + if(uploadReplaceExt == uploadNewExt) { + $imageEditName.children('span').text(uploadReplaceName).removeAttr('contenteditable'); + } + // re-open replaced item $markup.find(".gridImage__edit").click(); } @@ -1567,6 +1582,7 @@ function InputfieldImage($) { xhr.open("POST", postUrl, true); xhr.setRequestHeader("X-FILENAME", encodeURIComponent(file.name)); xhr.setRequestHeader("X-FIELDNAME", fieldName); + if(uploadReplace.item) xhr.setRequestHeader("X-REPLACENAME", uploadReplace.file); xhr.setRequestHeader("Content-Type", "application/octet-stream"); // fix issue 96-Pete xhr.setRequestHeader("X-" + postTokenName, postTokenValue); xhr.setRequestHeader("X-REQUESTED-WITH", 'XMLHttpRequest'); diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js index b270441c..ed83144d 100644 --- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js +++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js @@ -1 +1 @@ -function InputfieldImage(v){var k=null;var b={file:"",item:null,edit:null};var F={type:"image",closeOnContentClick:true,closeBtnInside:true};var c=null;var r=[];function s(){var M=window.File&&window.FileList&&window.FileReader;var L=v(".InputfieldAllowAjaxUpload").length>0;var N=v("#PageIDIndicator").length>0;return(M&&(N||L))}function y(N,L,M){L||(L=250);var O,P;return function(){var S=M||this;var R=+new Date(),Q=arguments;if(O&&R .gridImage",start:function(Q,P){var O=E(M.closest(".Inputfield"),"size");P.placeholder.append(v("
").css({display:"block",height:O+"px",width:O+"px"}));N=window.setTimeout(function(){G(M,null)},100);M.addClass("InputfieldImageSorting")},stop:function(Q,O){var P=v(this);if(N!==null){O.item.find(".InputfieldImageEdit__edit").click();clearTimeout(N)}P.children("li").each(function(S){var R=v(this).find(".InputfieldFileSort");if(R.val()!=S){R.val(S).change()}});M.removeClass("InputfieldImageSorting")},cancel:".InputfieldImageEdit"};M.sortable(L)}function p(M){var L=v.extend(true,{},F);L.callbacks={elementParse:function(N){var O=v(N.el).attr("data-original");if(typeof O=="undefined"||!O){O=v(N.el).attr("src")}N.src=O}};L.gallery={enabled:true};M.find("img").magnificPopup(L)}function t(M){var L=v.extend(true,{},F);L.callbacks={elementParse:function(N){N.src=v(N.el).attr("src")}};L.gallery={enabled:false};M.find("img").magnificPopup(L)}function C(L){return L.find(".InputfieldImageEdit--active")}function u(L){return v("#"+L.find(".InputfieldImageEdit__edit").attr("data-current"))}function D(N){var L=N.is(":checked");var M=N.parents(".gridImages").find(".gridImage__deletebox");if(L){M.prop("checked","checked").change()}else{M.removeAttr("checked").change()}}function J(M){if(typeof M=="undefined"){var L=v(".gridImages")}else{var L=M.find(".gridImages")}L.each(function(){var N=v(this),O=C(N);if(O.length){i(u(O),O)}})}function w(R){var N=[];var Q=[];var P=0,L=0;var O;if(typeof R=="undefined"){O=v(".InputfieldImage.Inputfield")}else{O=R}O.removeClass("InputfieldImageNarrow");O.each(function(){var T=v(this);var U=T.width();if(U<1){return}if(U<=500){N[P]=T;P++}});for(var S=0;S=Q){O.css("max-height","100%").css("max-width","none");O.attr("height",M).removeAttr("width")}else{if(Q>L){O.css("max-height","none").css("max-width","100%");O.attr("width",M).removeAttr("height")}else{O.css("max-height","100%").css("max-width","none");O.removeAttr("width").attr("height",M)}}}var L=O.width();if(L){N.css({width:(P?L+"px":M+"px"),height:M+"px"})}else{var R=N.attr("data-tries");if(!R){R=0}if(typeof R=="undefined"){R=0}R=parseInt(R);if(R>3){N.css({width:M+"px",height:M+"px"})}else{r.push(N);N.attr("data-tries",R+1)}}}function A(M){if(M.find(".InputfieldImageListToggle").length){return}var P=v("").append("");var R=v("").append("");var L=v("").append("");var Q="InputfieldImageListToggle--active";var O="";var N=function(W){var V=v(this);var U=V.closest(".Inputfield");var S=V.attr("href");var T;V.parent().children("."+Q).removeClass(Q);V.addClass(Q);if(S=="list"){if(!U.hasClass("InputfieldImageEditAll")){U.find(".InputfieldImageEdit--active .InputfieldImageEdit__close").click();U.addClass("InputfieldImageEditAll")}T=E(U,"listSize");l(U,T);e(U,"mode","list")}else{if(S=="left"){U.removeClass("InputfieldImageEditAll");T=E(U,"size");j(U,T,true);e(U,"mode","left");J()}else{if(S=="grid"){U.removeClass("InputfieldImageEditAll");T=E(U,"size");j(U,T,false);e(U,"mode","grid")}}}B(U.find(".gridImages"));V.blur();return false};P.click(N);R.click(N);L.click(N);if(M.hasClass("InputfieldImage")){M.find(".InputfieldHeader").append(P).append(R).append(L);O=E(M,"mode")}else{v(".InputfieldImage .InputfieldHeader",M).append(P).append(R).append(L)}if(O=="list"){P.click()}else{if(O=="left"){R.click()}else{}}}function z(Q){var N=Q.children(".InputfieldHeader");if(N.children(".InputfieldImageSizeSlider").length){return}var P=Q.find(".gridImages");var M=P.attr("data-gridsize");var O=M/2;var L=M*2;var R=v('');N.append(R);R.slider({min:O,max:L,value:E(Q,"size"),range:"min",slide:function(U,W){var V=W.value;var X=15;var Y=Math.floor(M/X);var S=V-O;var T=Math.floor(X+(S/Y));if(Q.hasClass("InputfieldImageEditAll")){e(Q,"size",V);l(Q,T)}else{e(Q,"listSize",T);j(Q,V)}},start:function(S,T){if(Q.find(".InputfieldImageEdit:visible").length){Q.find(".InputfieldImageEdit__close").click()}},stop:function(S,T){J(Q)}})}function e(M,P,O){var N=E(M);var Q=M.attr("id");var L=Q?Q.replace("wrap_Inputfield_",""):"";if(!L.length||typeof O=="undefined"){return}if(N[L][P]==O){return}N[L][P]=O;v.cookie("InputfieldImage",N);c=N}function E(M,P){if(c&&typeof P=="undefined"){return c}var Q=M.attr("id");var L=Q?Q.replace("wrap_Inputfield_",""):"na";var O=c?c:v.cookie("InputfieldImage");var N=null;if(!O){var O={}}if(typeof O[L]=="undefined"){O[L]={}}if(typeof O[L].size=="undefined"){O[L].size=parseInt(M.find(".gridImages").attr("data-size"))}if(typeof O[L].listSize=="undefined"){O[L].listSize=23}if(typeof O[L].mode=="undefined"){O[L].mode=M.find(".gridImages").attr("data-gridMode")}if(c==null){c=O}if(typeof P=="undefined"){N=O}else{if(P===true){N=O[L]}else{if(typeof O[L][P]!="undefined"){N=O[L][P]}}}return N}function a(P){if(P.hasClass("InputfieldStateCollapsed")){return}var Q=parseInt(P.find(".InputfieldImageMaxFiles").val());var O=P.find(".gridImages");var N=E(P,"size");var R=E(P,"mode");var M=R=="left"?true:false;if(!N){N=O.attr("data-gridsize")}N=parseInt(N);j(P,N,M);if(P.hasClass("InputfieldImageEditAll")||R=="list"){var L=E(P,"listSize");l(P,L)}if(!P.hasClass("InputfieldImageInit")){P.addClass("InputfieldImageInit");if(P.hasClass("InputfieldRenderValueMode")){return p(P)}else{if(Q==1){P.addClass("InputfieldImageMax1");t(P)}else{B(O)}}A(P);z(P)}w(P)}function I(){v("body").addClass("ie-no-drop");v(".InputfieldImage.InputfieldFileMultiple").each(function(){var M=v(this),O=parseInt(M.find(".InputfieldFileMaxFiles").val()),L=M.find(".gridImages"),N=M.find(".InputfieldImageUpload");N.on("change","input[type=file]",function(){var S=v(this),Q=S.parent(".InputMask");if(S.val().length>1){Q.addClass("ui-state-disabled")}else{Q.removeClass("ui-state-disabled")}if(S.next("input.InputfieldFile").length>0){return}var P=L.children("li").length+N.find("input[type=file]").length+1;if(O>0&&P>=O){return}N.find(".InputMask").not(":last").each(function(){var T=v(this);if(T.find("input[type=file]").val()<1){T.remove()}});var R=Q.clone().removeClass("ui-state-disabled");R.children("input[type=file]").val("");R.insertAfter(Q)})})}function K(N){var M;if(N.length>0){M=N.find(".InputfieldImageUpload")}else{M=v(".InputfieldImageUpload")}M.each(function(Q){var R=v(this);var P=R.closest(".InputfieldContent");if(R.hasClass("InputfieldImageInitUpload")){return}O(P,Q);R.addClass("InputfieldImageInitUpload")});function O(Y,aj){var X=Y.parents("form");var P=Y.closest(".InputfieldRepeaterItem");var T=P.length?P.attr("data-editUrl"):X.attr("action");T+=(T.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var ao=X.find("input._post_token");var W=ao.attr("name");var ab=ao.val();var aa=Y.find(".InputfieldImageErrors").first();var S=Y.find(".InputfieldImageUpload").data("fieldname");S=S.slice(0,-2);var ai=Y.closest(".Inputfield.InputfieldImage");var an=Y.find(".InputfieldImageUpload").data("extensions").toLowerCase();var ah=Y.find(".InputfieldImageUpload").data("maxfilesize");var Z=Y.find("input[type=file]").get(0);var R=Y.find(".gridImages");var ak=R.get(0);var ad=R.data("gridsize");var ae=null;var ac=parseInt(Y.find(".InputfieldImageMaxFiles").val());var am=n(ai);al(Y);if(ac!=1){ag(R)}R.children().addClass("InputfieldFileItemExisting");function V(aq,ap){if(typeof ap!=="undefined"){aq=""+ap+": "+aq}return"
  • "+aq+"
  • "}function Q(aq){var ap=new String(aq).substring(aq.lastIndexOf("/")+1);if(ap.lastIndexOf(".")!=-1){ap=ap.substring(0,ap.lastIndexOf("."))}return ap}function al(aq){if(aq.hasClass("InputfieldImageDropzoneInit")){return}var au=aq.get(0);var at=aq.closest(".Inputfield");function ap(){if(at.hasClass("pw-drag-in-file")){return}aq.addClass("ui-state-hover");at.addClass("pw-drag-in-file")}function ar(){if(!at.hasClass("pw-drag-in-file")){return}aq.removeClass("ui-state-hover");at.removeClass("pw-drag-in-file")}au.addEventListener("dragleave",function(){ar()},false);au.addEventListener("dragenter",function(){ap()},false);au.addEventListener("dragover",function(av){if(!aq.is("ui-state-hover")){ap()}av.preventDefault();av.stopPropagation();return false},false);au.addEventListener("drop",function(av){af(av.dataTransfer.files);ar();av.preventDefault();av.stopPropagation();return false},false);aq.addClass("InputfieldImageDropzoneInit")}function ag(ay){var aC=null;var aA=false;var aq=null;var ap=ay.closest(".Inputfield");function av(){ap.addClass("pw-drag-in-file")}function aB(){ap.removeClass("pw-drag-in-file")}function au(aE){var aI=aE.offset();var aF=aE.width();var aD=aE.height();var aH=aI.left+aF/2;var aG=aI.top+aD/2;return{clientX:aH,clientY:aG}}function ax(){return ay.find(".InputfieldImageEdit--active").length>0}function aw(aE){if(ax()){return}aE.preventDefault();aE.stopPropagation();av();aA=false;if(aC==null){var aD=ay.attr("data-size")+"px";var aF=v("
    ").addClass("gridImage__overflow");if(ay.closest(".InputfieldImageEditAll").length){aF.css({width:"100%",height:aD})}else{aF.css({width:aD,height:aD})}aC=v("
  • ").addClass("ImageOuter gridImage gridImagePlaceholder").append(aF);ay.append(aC)}var aG=au(aC);aC.simulate("mousedown",aG)}function az(aD){if(ax()){return}aD.preventDefault();aD.stopPropagation();av();aA=false;if(aC==null){return}var aE={clientX:aD.originalEvent.clientX,clientY:aD.originalEvent.clientY};aC.simulate("mousemove",aE)}function at(aD){if(ax()){return}aD.preventDefault();aD.stopPropagation();if(aC==null){return false}aA=true;if(aq){clearTimeout(aq)}aq=setTimeout(function(){if(!aA||aC==null){return}aC.remove();aC=null;aB()},1000)}function ar(aD){if(ax()){return}aB();aA=false;var aE={clientX:aD.clientX,clientY:aD.clientY};aC.simulate("mouseup",aE);k=aC.next(".gridImage");aC.remove();aC=null}if(ay.length&&!ay.hasClass("gridImagesInitDropInPlace")){ay.on("dragenter",aw);ay.on("dragover",az);ay.on("dragleave",at);ay.on("drop",ar);ay.addClass("gridImagesInitDropInPlace")}}function U(aN,aB){var aK=ProcessWire.config.InputfieldImage.labels;var aw=parseInt(aN.size/1024,10)+" kB";var aM='
    '+aK.dimensions+''+aK.na+"
    "+aK.filesize+""+aw+"
    "+aK.variations+"0
    ";var aP=v('
  • '),aH=v(aM),ax=v('
    '),ap=v('
    '),aE=v("
    "),aG=v(""),aJ=v(' '),aI=v('
    '),aq,az,aO,aC=URL.createObjectURL(aN),ar=ai.find(".gridImages"),au=ac==1,aF=E(ai,"size"),av=E(ai,"listSize"),at=ai.hasClass("InputfieldImageEditAll"),ay=v('');ax.append(ay);aE.find(".gridImage__inner").append(aJ);aE.find(".gridImage__inner").append(aI.css("display","none"));aE.find(".gridImage__inner").append(aG);ap.append(v('

    '+aN.name+'

    '+aw+""));if(at){ax.css("width",av+"%");ap.css("width",(100-av)+"%")}else{ax.css({width:aF+"px",height:aF+"px"})}aP.append(aH).append(ax).append(aE).append(ap);ay.attr({src:aC,"data-original":aC});img=new Image();img.addEventListener("load",function(){aH.find(".dimensions").html(this.width+" × "+this.height);var aQ=Math.min(this.width,this.height)/aF;ay.attr({width:this.width/aQ,height:this.height/aQ})},false);img.src=aC;az=new XMLHttpRequest();function aA(aQ){if(typeof aQ!="undefined"){if(!aQ.lengthComputable){return}aG.attr("value",parseInt((aQ.loaded/aQ.total)*100))}v("body").addClass("pw-uploading");aI.css("display","block")}az.upload.addEventListener("progress",aA,false);az.addEventListener("load",function(){az.getAllResponseHeaders();var aR=v.parseJSON(az.responseText),aU=aR.length>1;if(aR.error!==undefined){aR=[aR]}for(var aW=0;aW1){ai.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}aA();if(am.maxWidth>0||am.maxHeight>0||am.maxSize>0){var aD=new PWImageResizer(am);aI.addClass("pw-resizing");aD.resize(aN,function(aQ){aI.removeClass("pw-resizing");aL(aN,aQ)})}else{aL(aN)}}function af(au){var aq=function(ay){return parseInt(ay/1024,10)};if(typeof au==="undefined"){ak.innerHTML="No support for the File API in this web browser";return}for(var ar=0,ap=au.length;arah&&ah>2000000){var aw=aq(au[ar].size),av=aq(ah);at="Filesize "+aw+" kb is too big. Maximum allowed is "+av+" kb";aa.append(V(at,au[ar].name))}else{U(au[ar],ax)}}if(ac==1){break}}}Z.addEventListener("change",function(ap){af(this.files);ap.preventDefault();ap.stopPropagation();this.value=""},false)}function L(){var P=".InputfieldImageEdit__imagewrapper img";v(document).on("dragenter",P,function(){var S=v(this);if(S.closest(".InputfieldImageMax1").length){return}var T=S.attr("src");var Q=S.closest(".InputfieldImageEdit");var R=S.closest(".InputfieldImageEdit__imagewrapper");R.addClass("InputfieldImageEdit__replace");b.file=new String(T).substring(T.lastIndexOf("/")+1);b.item=v("#"+Q.attr("data-for"));b.edit=Q}).on("dragleave",P,function(){var R=v(this);if(R.closest(".InputfieldImageMax1").length){return}var Q=R.closest(".InputfieldImageEdit__imagewrapper");Q.removeClass("InputfieldImageEdit__replace");b.file="";b.item=null;b.edit=null})}L()}function n(M){var L={maxWidth:0,maxHeight:0,maxSize:0,quality:1,autoRotate:true,debug:ProcessWire.config.debug};var N=M.attr("data-resize");if(typeof N!="undefined"&&N.length){N=N.split(";");L.maxWidth=parseInt(N[0]);L.maxHeight=parseInt(N[1]);L.maxSize=parseFloat(N[2]);L.quality=parseFloat(N[3])}return L}function H(){v(".InputfieldImage.Inputfield").each(function(){a(v(this))});x();if(s()){K("")}else{I()}v(document).on("reloaded",".InputfieldImage",function(){var L=v(this);a(L);K(L)}).on("wiretabclick",function(N,M,L){M.find(".InputfieldImage").each(function(){a(v(this))})}).on("opened",".InputfieldImage",function(){a(v(this))})}H()}jQuery(document).ready(function(a){InputfieldImage(a)}); \ No newline at end of file +function InputfieldImage(v){var k=null;var b={file:"",item:null,edit:null};var F={type:"image",closeOnContentClick:true,closeBtnInside:true};var c=null;var r=[];function s(){var M=window.File&&window.FileList&&window.FileReader;var L=v(".InputfieldAllowAjaxUpload").length>0;var N=v("#PageIDIndicator").length>0;return(M&&(N||L))}function y(N,L,M){L||(L=250);var O,P;return function(){var S=M||this;var R=+new Date(),Q=arguments;if(O&&R .gridImage",start:function(Q,P){var O=E(M.closest(".Inputfield"),"size");P.placeholder.append(v("
    ").css({display:"block",height:O+"px",width:O+"px"}));N=window.setTimeout(function(){G(M,null)},100);M.addClass("InputfieldImageSorting")},stop:function(Q,O){var P=v(this);if(N!==null){O.item.find(".InputfieldImageEdit__edit").click();clearTimeout(N)}P.children("li").each(function(S){var R=v(this).find(".InputfieldFileSort");if(R.val()!=S){R.val(S).change()}});M.removeClass("InputfieldImageSorting")},cancel:".InputfieldImageEdit"};M.sortable(L)}function p(M){var L=v.extend(true,{},F);L.callbacks={elementParse:function(N){var O=v(N.el).attr("data-original");if(typeof O=="undefined"||!O){O=v(N.el).attr("src")}N.src=O}};L.gallery={enabled:true};M.find("img").magnificPopup(L)}function t(M){var L=v.extend(true,{},F);L.callbacks={elementParse:function(N){N.src=v(N.el).attr("src")}};L.gallery={enabled:false};M.find("img").magnificPopup(L)}function C(L){return L.find(".InputfieldImageEdit--active")}function u(L){return v("#"+L.find(".InputfieldImageEdit__edit").attr("data-current"))}function D(N){var L=N.is(":checked");var M=N.parents(".gridImages").find(".gridImage__deletebox");if(L){M.prop("checked","checked").change()}else{M.removeAttr("checked").change()}}function J(M){if(typeof M=="undefined"){var L=v(".gridImages")}else{var L=M.find(".gridImages")}L.each(function(){var N=v(this),O=C(N);if(O.length){i(u(O),O)}})}function w(R){var N=[];var Q=[];var P=0,L=0;var O;if(typeof R=="undefined"){O=v(".InputfieldImage.Inputfield")}else{O=R}O.removeClass("InputfieldImageNarrow");O.each(function(){var T=v(this);var U=T.width();if(U<1){return}if(U<=500){N[P]=T;P++}});for(var S=0;S=Q){O.css("max-height","100%").css("max-width","none");O.attr("height",M).removeAttr("width")}else{if(Q>L){O.css("max-height","none").css("max-width","100%");O.attr("width",M).removeAttr("height")}else{O.css("max-height","100%").css("max-width","none");O.removeAttr("width").attr("height",M)}}}var L=O.width();if(L){N.css({width:(P?L+"px":M+"px"),height:M+"px"})}else{var R=N.attr("data-tries");if(!R){R=0}if(typeof R=="undefined"){R=0}R=parseInt(R);if(R>3){N.css({width:M+"px",height:M+"px"})}else{r.push(N);N.attr("data-tries",R+1)}}}function A(M){if(M.find(".InputfieldImageListToggle").length){return}var P=v("").append("");var R=v("").append("");var L=v("").append("");var Q="InputfieldImageListToggle--active";var O="";var N=function(W){var V=v(this);var U=V.closest(".Inputfield");var S=V.attr("href");var T;V.parent().children("."+Q).removeClass(Q);V.addClass(Q);if(S=="list"){if(!U.hasClass("InputfieldImageEditAll")){U.find(".InputfieldImageEdit--active .InputfieldImageEdit__close").click();U.addClass("InputfieldImageEditAll")}T=E(U,"listSize");l(U,T);e(U,"mode","list")}else{if(S=="left"){U.removeClass("InputfieldImageEditAll");T=E(U,"size");j(U,T,true);e(U,"mode","left");J()}else{if(S=="grid"){U.removeClass("InputfieldImageEditAll");T=E(U,"size");j(U,T,false);e(U,"mode","grid")}}}B(U.find(".gridImages"));V.blur();return false};P.click(N);R.click(N);L.click(N);if(M.hasClass("InputfieldImage")){M.find(".InputfieldHeader").append(P).append(R).append(L);O=E(M,"mode")}else{v(".InputfieldImage .InputfieldHeader",M).append(P).append(R).append(L)}if(O=="list"){P.click()}else{if(O=="left"){R.click()}else{}}}function z(Q){var N=Q.children(".InputfieldHeader");if(N.children(".InputfieldImageSizeSlider").length){return}var P=Q.find(".gridImages");var M=P.attr("data-gridsize");var O=M/2;var L=M*2;var R=v('');N.append(R);R.slider({min:O,max:L,value:E(Q,"size"),range:"min",slide:function(U,W){var V=W.value;var X=15;var Y=Math.floor(M/X);var S=V-O;var T=Math.floor(X+(S/Y));if(Q.hasClass("InputfieldImageEditAll")){e(Q,"size",V);l(Q,T)}else{e(Q,"listSize",T);j(Q,V)}},start:function(S,T){if(Q.find(".InputfieldImageEdit:visible").length){Q.find(".InputfieldImageEdit__close").click()}},stop:function(S,T){J(Q)}})}function e(M,P,O){var N=E(M);var Q=M.attr("id");var L=Q?Q.replace("wrap_Inputfield_",""):"";if(!L.length||typeof O=="undefined"){return}if(N[L][P]==O){return}N[L][P]=O;v.cookie("InputfieldImage",N);c=N}function E(M,P){if(c&&typeof P=="undefined"){return c}var Q=M.attr("id");var L=Q?Q.replace("wrap_Inputfield_",""):"na";var O=c?c:v.cookie("InputfieldImage");var N=null;if(!O){var O={}}if(typeof O[L]=="undefined"){O[L]={}}if(typeof O[L].size=="undefined"){O[L].size=parseInt(M.find(".gridImages").attr("data-size"))}if(typeof O[L].listSize=="undefined"){O[L].listSize=23}if(typeof O[L].mode=="undefined"){O[L].mode=M.find(".gridImages").attr("data-gridMode")}if(c==null){c=O}if(typeof P=="undefined"){N=O}else{if(P===true){N=O[L]}else{if(typeof O[L][P]!="undefined"){N=O[L][P]}}}return N}function a(P){if(P.hasClass("InputfieldStateCollapsed")){return}var Q=parseInt(P.find(".InputfieldImageMaxFiles").val());var O=P.find(".gridImages");var N=E(P,"size");var R=E(P,"mode");var M=R=="left"?true:false;if(!N){N=O.attr("data-gridsize")}N=parseInt(N);j(P,N,M);if(P.hasClass("InputfieldImageEditAll")||R=="list"){var L=E(P,"listSize");l(P,L)}if(!P.hasClass("InputfieldImageInit")){P.addClass("InputfieldImageInit");if(P.hasClass("InputfieldRenderValueMode")){return p(P)}else{if(Q==1){P.addClass("InputfieldImageMax1");t(P)}else{B(O)}}A(P);z(P)}w(P)}function I(){v("body").addClass("ie-no-drop");v(".InputfieldImage.InputfieldFileMultiple").each(function(){var M=v(this),O=parseInt(M.find(".InputfieldFileMaxFiles").val()),L=M.find(".gridImages"),N=M.find(".InputfieldImageUpload");N.on("change","input[type=file]",function(){var S=v(this),Q=S.parent(".InputMask");if(S.val().length>1){Q.addClass("ui-state-disabled")}else{Q.removeClass("ui-state-disabled")}if(S.next("input.InputfieldFile").length>0){return}var P=L.children("li").length+N.find("input[type=file]").length+1;if(O>0&&P>=O){return}N.find(".InputMask").not(":last").each(function(){var T=v(this);if(T.find("input[type=file]").val()<1){T.remove()}});var R=Q.clone().removeClass("ui-state-disabled");R.children("input[type=file]").val("");R.insertAfter(Q)})})}function K(N){var M;if(N.length>0){M=N.find(".InputfieldImageUpload")}else{M=v(".InputfieldImageUpload")}M.each(function(Q){var R=v(this);var P=R.closest(".InputfieldContent");if(R.hasClass("InputfieldImageInitUpload")){return}O(P,Q);R.addClass("InputfieldImageInitUpload")});function O(Y,aj){var X=Y.parents("form");var P=Y.closest(".InputfieldRepeaterItem");var T=P.length?P.attr("data-editUrl"):X.attr("action");T+=(T.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var ao=X.find("input._post_token");var W=ao.attr("name");var ab=ao.val();var aa=Y.find(".InputfieldImageErrors").first();var S=Y.find(".InputfieldImageUpload").data("fieldname");S=S.slice(0,-2);var ai=Y.closest(".Inputfield.InputfieldImage");var an=Y.find(".InputfieldImageUpload").data("extensions").toLowerCase();var ah=Y.find(".InputfieldImageUpload").data("maxfilesize");var Z=Y.find("input[type=file]").get(0);var R=Y.find(".gridImages");var ak=R.get(0);var ad=R.data("gridsize");var ae=null;var ac=parseInt(Y.find(".InputfieldImageMaxFiles").val());var am=n(ai);al(Y);if(ac!=1){ag(R)}R.children().addClass("InputfieldFileItemExisting");function V(aq,ap){if(typeof ap!=="undefined"){aq=""+ap+": "+aq}return"
  • "+aq+"
  • "}function Q(aq){var ap=new String(aq).substring(aq.lastIndexOf("/")+1);if(ap.lastIndexOf(".")!=-1){ap=ap.substring(0,ap.lastIndexOf("."))}return ap}function al(aq){if(aq.hasClass("InputfieldImageDropzoneInit")){return}var au=aq.get(0);var at=aq.closest(".Inputfield");function ap(){if(at.hasClass("pw-drag-in-file")){return}aq.addClass("ui-state-hover");at.addClass("pw-drag-in-file")}function ar(){if(!at.hasClass("pw-drag-in-file")){return}aq.removeClass("ui-state-hover");at.removeClass("pw-drag-in-file")}au.addEventListener("dragleave",function(){ar()},false);au.addEventListener("dragenter",function(){ap()},false);au.addEventListener("dragover",function(av){if(!aq.is("ui-state-hover")){ap()}av.preventDefault();av.stopPropagation();return false},false);au.addEventListener("drop",function(av){af(av.dataTransfer.files);ar();av.preventDefault();av.stopPropagation();return false},false);aq.addClass("InputfieldImageDropzoneInit")}function ag(ay){var aC=null;var aA=false;var aq=null;var ap=ay.closest(".Inputfield");function av(){ap.addClass("pw-drag-in-file")}function aB(){ap.removeClass("pw-drag-in-file")}function au(aE){var aI=aE.offset();var aF=aE.width();var aD=aE.height();var aH=aI.left+aF/2;var aG=aI.top+aD/2;return{clientX:aH,clientY:aG}}function ax(){return ay.find(".InputfieldImageEdit--active").length>0}function aw(aE){if(ax()){return}aE.preventDefault();aE.stopPropagation();av();aA=false;if(aC==null){var aD=ay.attr("data-size")+"px";var aF=v("
    ").addClass("gridImage__overflow");if(ay.closest(".InputfieldImageEditAll").length){aF.css({width:"100%",height:aD})}else{aF.css({width:aD,height:aD})}aC=v("
  • ").addClass("ImageOuter gridImage gridImagePlaceholder").append(aF);ay.append(aC)}var aG=au(aC);aC.simulate("mousedown",aG)}function az(aD){if(ax()){return}aD.preventDefault();aD.stopPropagation();av();aA=false;if(aC==null){return}var aE={clientX:aD.originalEvent.clientX,clientY:aD.originalEvent.clientY};aC.simulate("mousemove",aE)}function at(aD){if(ax()){return}aD.preventDefault();aD.stopPropagation();if(aC==null){return false}aA=true;if(aq){clearTimeout(aq)}aq=setTimeout(function(){if(!aA||aC==null){return}aC.remove();aC=null;aB()},1000)}function ar(aD){if(ax()){return}aB();aA=false;var aE={clientX:aD.clientX,clientY:aD.clientY};aC.simulate("mouseup",aE);k=aC.next(".gridImage");aC.remove();aC=null}if(ay.length&&!ay.hasClass("gridImagesInitDropInPlace")){ay.on("dragenter",aw);ay.on("dragover",az);ay.on("dragleave",at);ay.on("drop",ar);ay.addClass("gridImagesInitDropInPlace")}}function U(aN,aB){var aK=ProcessWire.config.InputfieldImage.labels;var aw=parseInt(aN.size/1024,10)+" kB";var aM='
    '+aK.dimensions+''+aK.na+"
    "+aK.filesize+""+aw+"
    "+aK.variations+"0
    ";var aP=v('
  • '),aH=v(aM),ax=v('
    '),ap=v('
    '),aE=v("
    "),aG=v(""),aJ=v(' '),aI=v('
    '),aq,az,aO,aC=URL.createObjectURL(aN),ar=ai.find(".gridImages"),au=ac==1,aF=E(ai,"size"),av=E(ai,"listSize"),at=ai.hasClass("InputfieldImageEditAll"),ay=v('');ax.append(ay);aE.find(".gridImage__inner").append(aJ);aE.find(".gridImage__inner").append(aI.css("display","none"));aE.find(".gridImage__inner").append(aG);ap.append(v('

    '+aN.name+'

    '+aw+""));if(at){ax.css("width",av+"%");ap.css("width",(100-av)+"%")}else{ax.css({width:aF+"px",height:aF+"px"})}aP.append(aH).append(ax).append(aE).append(ap);ay.attr({src:aC,"data-original":aC});img=new Image();img.addEventListener("load",function(){aH.find(".dimensions").html(this.width+" × "+this.height);var aQ=Math.min(this.width,this.height)/aF;ay.attr({width:this.width/aQ,height:this.height/aQ})},false);img.src=aC;az=new XMLHttpRequest();function aA(aQ){if(typeof aQ!="undefined"){if(!aQ.lengthComputable){return}aG.attr("value",parseInt((aQ.loaded/aQ.total)*100))}v("body").addClass("pw-uploading");aI.css("display","block")}az.upload.addEventListener("progress",aA,false);az.addEventListener("load",function(){az.getAllResponseHeaders();var aT=v.parseJSON(az.responseText),aR=aT.length>1;if(aT.error!==undefined){aT=[aT]}for(var aS=0;aS-1){aW=aW.substring(0,aW.indexOf("?"))}var aU=aW.substring(aW.lastIndexOf(".")+1).toLowerCase();aW=aW.substring(0,aW.lastIndexOf("."));if(aU==a0){a1.children("span").text(aW).removeAttr("contenteditable")}aV.find(".gridImage__edit").click()}b.file="";b.item=null;b.edit=null}if(ae){clearTimeout(ae)}k=null;ae=setTimeout(function(){if(ac!=1){B(ar)}else{t(ai)}v("body").removeClass("pw-uploading");ar.trigger("AjaxUploadDone")},500);ai.trigger("change").removeClass("InputfieldFileEmpty")},false);if(b.edit){b.edit.find(".InputfieldImageEdit__close").click()}else{if(ai.find(".InputfieldImageEdit:visible").length){ai.find(".InputfieldImageEdit__close").click()}}if(b.item){b.item.replaceWith(aP);b.item=aP}else{if(k&&k.length){k.before(aP)}else{ar.append(aP)}}function aL(aQ,aS){az.open("POST",T,true);az.setRequestHeader("X-FILENAME",encodeURIComponent(aQ.name));az.setRequestHeader("X-FIELDNAME",S);if(b.item){az.setRequestHeader("X-REPLACENAME",b.file)}az.setRequestHeader("Content-Type","application/octet-stream");az.setRequestHeader("X-"+W,ab);az.setRequestHeader("X-REQUESTED-WITH","XMLHttpRequest");if(typeof aS!="undefined"&&aS!=false){az.send(aS)}else{az.send(aQ)}J();ai.trigger("change");var aR=ai.find(".InputfieldFileItem").length;if(aR==1){ai.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple").addClass("InputfieldFileSingle")}else{if(aR>1){ai.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}aA();if(am.maxWidth>0||am.maxHeight>0||am.maxSize>0){var aD=new PWImageResizer(am);aI.addClass("pw-resizing");aD.resize(aN,function(aQ){aI.removeClass("pw-resizing");aL(aN,aQ)})}else{aL(aN)}}function af(au){var aq=function(ay){return parseInt(ay/1024,10)};if(typeof au==="undefined"){ak.innerHTML="No support for the File API in this web browser";return}for(var ar=0,ap=au.length;arah&&ah>2000000){var aw=aq(au[ar].size),av=aq(ah);at="Filesize "+aw+" kb is too big. Maximum allowed is "+av+" kb";aa.append(V(at,au[ar].name))}else{U(au[ar],ax)}}if(ac==1){break}}}Z.addEventListener("change",function(ap){af(this.files);ap.preventDefault();ap.stopPropagation();this.value=""},false)}function L(){var P=".InputfieldImageEdit__imagewrapper img";v(document).on("dragenter",P,function(){var S=v(this);if(S.closest(".InputfieldImageMax1").length){return}var T=S.attr("src");var Q=S.closest(".InputfieldImageEdit");var R=S.closest(".InputfieldImageEdit__imagewrapper");R.addClass("InputfieldImageEdit__replace");b.file=new String(T).substring(T.lastIndexOf("/")+1);b.item=v("#"+Q.attr("data-for"));b.edit=Q}).on("dragleave",P,function(){var R=v(this);if(R.closest(".InputfieldImageMax1").length){return}var Q=R.closest(".InputfieldImageEdit__imagewrapper");Q.removeClass("InputfieldImageEdit__replace");b.file="";b.item=null;b.edit=null})}L()}function n(M){var L={maxWidth:0,maxHeight:0,maxSize:0,quality:1,autoRotate:true,debug:ProcessWire.config.debug};var N=M.attr("data-resize");if(typeof N!="undefined"&&N.length){N=N.split(";");L.maxWidth=parseInt(N[0]);L.maxHeight=parseInt(N[1]);L.maxSize=parseFloat(N[2]);L.quality=parseFloat(N[3])}return L}function H(){v(".InputfieldImage.Inputfield").each(function(){a(v(this))});x();if(s()){K("")}else{I()}v(document).on("reloaded",".InputfieldImage",function(){var L=v(this);a(L);K(L)}).on("wiretabclick",function(N,M,L){M.find(".InputfieldImage").each(function(){a(v(this))})}).on("opened",".InputfieldImage",function(){a(v(this))})}H()}jQuery(document).ready(function(a){InputfieldImage(a)}); \ No newline at end of file diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.module b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.module index 8f2693cb..6f137387 100755 --- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.module +++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.module @@ -559,6 +559,23 @@ class InputfieldImage extends InputfieldFile implements InputfieldItemList, Inpu return $a; } + /** + * Get Pagefile to pull description and tags from + * + * @param Pagefile $pagefile + * @return Pageimage + * + */ + protected function getMetaPagefile(Pagefile $pagefile) { + if(!$this->isAjax || !isset($_SERVER['HTTP_X_REPLACENAME'])) return $pagefile; + $metaFilename = $_SERVER['HTTP_X_REPLACENAME']; + if(strpos($metaFilename, '?')) list($metaFilename,) = explode('?', $metaFilename); + $metaFilename = $this->wire('sanitizer')->name($metaFilename); + $metaPagefile = $this->attr('value')->get($metaFilename); + if(!$metaPagefile instanceof Pagefile) $metaPagefile = $pagefile; + return $metaPagefile; + } + /** * Render a Pageimage item * @@ -593,8 +610,9 @@ class InputfieldImage extends InputfieldFile implements InputfieldItemList, Inpu "; } else { $buttons = $pagefile->ext() == 'svg' ? '' : $this->renderButtons($pagefile, $id, $n); - $description = $this->renderItemDescriptionField($pagefile, $id, $n); - $additional = $this->renderAdditionalFields($pagefile, $id, $n); + $metaPagefile = $this->getMetaPagefile($pagefile); + $description = $this->renderItemDescriptionField($metaPagefile, $id, $n); + $additional = $this->renderAdditionalFields($metaPagefile, $id, $n); $error = ''; if($thumb['error']) { $error = str_replace('{out}', $sanitizer->entities($thumb['error']), $this->themeSettings['error']); @@ -654,8 +672,9 @@ class InputfieldImage extends InputfieldFile implements InputfieldItemList, Inpu if($editable) { $buttons = $this->renderButtons($pagefile, $id, $n); - $descriptionField = $this->renderItemDescriptionField($pagefile, $id, $n); - $additional = $this->renderAdditionalFields($pagefile, $id, $n); + $metaPagefile = $this->getMetaPagefile($pagefile); + $descriptionField = $this->renderItemDescriptionField($metaPagefile, $id, $n); + $additional = $this->renderAdditionalFields($metaPagefile, $id, $n); $editableOut = "
    $buttons
    $descriptionField