From a76e54193e01315e3e5c44b63992fa5d5d618c41 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Thu, 18 May 2023 11:50:29 -0400 Subject: [PATCH] Fix issue processwire/processwire-issues#1735 --- .../ProcessPageEditLink.js | 42 ++++++++++--------- .../ProcessPageEditLink.min.js | 2 +- .../ProcessPageEditLink.module | 4 +- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.js b/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.js index 96706d12..5d8587ba 100644 --- a/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.js +++ b/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.js @@ -258,35 +258,39 @@ $(document).ready(function() { var extLinkIcon = 'fa-external-link'; var emailIcon = 'fa-envelope-o'; var anchorIcon = 'fa-flag-o'; - var allIcons = primaryIcon + ' ' + extLinkIcon + ' ' + emailIcon + ' ' + anchorIcon; + var allIcons = primaryIcon + ' ' + extLinkIcon + ' ' + emailIcon + ' ' + anchorIcon; + var extLinkClass = cfg.extLinkClass; + var extLinkClassAll = extLinkClass.replace(' ', '_'); + var extLinkClasses = extLinkClass.indexOf(' ') > -1 ? extLinkClass.split(' ') : [ extLinkClass ]; + var extLinkRel = cfg.extLinkRel; + var extLinkTarget = cfg.extLinkTarget; if(external) { - if (!$this.hasClass('external-link')) { + if(!$this.hasClass('external-link')) { icon().removeClass(allIcons).addClass(extLinkIcon); $this.addClass('external-link'); - var extLinkTarget = cfg.extLinkTarget; - if(extLinkTarget.length > 0) { - $("#link_target").val(extLinkTarget); - } - var extLinkRel = cfg.extLinkRel; - if(extLinkRel.length > 0) { - $("#link_rel").val(extLinkRel); - } - var extLinkClass = cfg.extLinkClass; - if(extLinkClass.length > 0) { - if(extLinkClass.indexOf(' ') > -1) { - var extLinkClassAll = extLinkClass.replace(' ', '_'); + if(extLinkTarget.length > 0) $("#link_target").val(extLinkTarget); + if(extLinkRel.length > 0) $("#link_rel").val(extLinkRel); + if(extLinkClasses.length > 0) { + if(extLinkClasses.length > 1) { $("#link_class_" + extLinkClassAll).prop('checked', true); // all classes in 1 option - extLinkClass = extLinkClass.split(' '); } - for(n = 0; n < extLinkClass.length; n++) { - // $("#link_class_" + extLinkClass[n]).attr('checked', 'checked'); // JQM - $("#link_class_" + extLinkClass[n]).prop('checked', true); + for(n = 0; n < extLinkClasses.length; n++) { + $("#link_class_" + extLinkClasses[n]).prop('checked', true); } } } } else { - $this.removeClass('external-link'); + if($this.hasClass('external-link')) { + // was previously an external link but no longer is + $this.removeClass('external-link'); + if(extLinkRel.length) $('#link_rel').val(''); + if(extLinkTarget.length) $('#link_target').val(''); + $("#link_class_" + extLinkClassAll).prop('checked', false); // all classes in 1 option + for(n = 0; n < extLinkClasses.length; n++) { + $("#link_class_" + extLinkClasses[n]).prop('checked', false); + } + } var $icon = icon(); if($this.hasClass('email')) { if(!$icon.hasClass(emailIcon)) $icon.removeClass(allIcons).addClass(emailIcon); diff --git a/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.min.js b/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.min.js index e7c888f8..c60f2d02 100644 --- a/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.min.js +++ b/wire/modules/Process/ProcessPageEditLink/ProcessPageEditLink.min.js @@ -1 +1 @@ -$(document).ready(function(){if(!ProcessWire.config.ProcessPageEditLink)return;var cfg=ProcessWire.config.ProcessPageEditLink;var options={selectStartLabel:cfg.selectStartLabel,selectSelectLabel:cfg.selectStartLabel,langID:cfg.langID};var options2={selectStartLabel:options.selectStartLabel,selectSelectLabel:options.selectStartLabel,langID:options.langID,rootPageID:cfg.pageID};var selectedPageData={id:0,title:"",url:""};var $fileSelect=$("#link_page_file");var $anchorSelect=$("#link_page_anchor");var $linkPageURL=$("#link_page_url_input");var $linkText=$("#link_text");$linkPageURL.val($("#link_page_url").val());function populateFileSelect(selectedPageData){var $wrap=$("#wrap_link_page_file");$.getJSON("./files?id="+selectedPageData.id,function(data){$fileSelect.empty();$fileSelect.append("");$.each(data,function(key,val){var $option=$("");$fileSelect.append($option)});$wrap.find("p.notes strong").text(selectedPageData.url);if($fileSelect.is(":visible")){$wrap.children().effect("highlight",{},500);$fileSelect.effect("bounce",{},50)}})}function absoluteToRelativePath(path){if(cfg.urlType==0)return path;function slashesToRelative(url){url=url.replace(/\//g,"../");url=url.replace(/[^.\/]/g,"");return url}var url;if(path===cfg.pageUrl){path="./";if(!cfg.slashUrls)path+=cfg.pageName}else if(path.indexOf(cfg.pageUrl)===0){path=path.substring(cfg.pageUrl.length);if(!cfg.slashUrls)path=cfg.pageName+path}else if(cfg.pageUrl.indexOf(path)===0){url=cfg.pageUrl.substring(path.length);if(url.indexOf("/")!=-1){url=slashesToRelative(url)}else{url="./"}path=url}else if(path.indexOf(cfg.rootParentUrl)===0){url=path.substring(cfg.rootParentUrl.length);var url2=url;url=slashesToRelative(url)+url2;path=url}else if(cfg.urlType==2){url=cfg.pageUrl.substring(ProcessWire.config.urls.root.length);url=slashesToRelative(url);path=path.substring(ProcessWire.config.urls.root.length);path=url+path}return path}function pageSelected(event,data){if(data.url&&data.url.length){selectedPageData=data;selectedPageData.url=ProcessWire.config.urls.root+data.url.substring(1);selectedPageData.url=absoluteToRelativePath(selectedPageData.url);$linkPageURL.val(selectedPageData.url).trigger("change");populateFileSelect(selectedPageData)}$(this).parents(".InputfieldInteger").children(".InputfieldHeader").trigger("click").parent().find(".PageListSelectHeader").removeClass("hidden").show()}$("#link_page_id").ProcessPageList(options).hide().on("pageSelected",pageSelected);$("#child_page_id").ProcessPageList(options2).hide().on("pageSelected",pageSelected);$fileSelect.on("change",function(){var $t=$(this);var src=$t.val();if(src.length)$linkPageURL.val(src).trigger("change")});if($anchorSelect.length){var anchorPreviousValue=$anchorSelect.val();$anchorSelect.on("change",function(){var val=$(this).val();if(val.length){$linkPageURL.val(val);anchorPreviousValue=val}else{if($linkPageURL.val()==anchorPreviousValue)$linkPageURL.val("")}$linkPageURL.trigger("change")})}function updateLinkPreview(){if(!$linkPageURL.val().length){$("#link_markup").text("");return}var $link=$("");$link.attr("href",$linkPageURL.val());var $linkTitle=$("#link_title");if($linkTitle.length&&$linkTitle.val().length){var val=$("
").text($linkTitle.val()).html();$link.attr("title",val)}if(cfg.noLinkTextEdit){}else if($linkText.length&&$linkText.val().length){$link.text($linkText.val())}var $linkRel=$("#link_rel");if($linkRel.length&&$linkRel.val()&&$linkRel.val().length){$link.attr("rel",$linkRel.val())}var $linkTarget=$("#link_target");if($linkTarget.length&&$linkTarget.val().length){$link.attr("target",$linkTarget.val())}var $linkClass=$("#wrap_link_class").find("input:checked");if($linkClass.length){$linkClass.each(function(){$link.addClass($(this).val())})}$("#link_markup").text($link[0].outerHTML)}function urlKeydown(){var $this=$linkPageURL;var val=ProcessWire.trim($this.val());var dotpos=val.indexOf(".");var slashespos=val.indexOf("//");var hasScheme=slashespos>-1&&slashespos-1?val.indexOf("/",slashespos+2):val.indexOf("/");var httpHost;var n;if(dotpos>-1&&val.indexOf("..")==-1&&val.indexOf("./")==-1&&(slashpos>dotpos&&!hasScheme||slashpos==-1&&dotpos>1&&val.match(/^[a-z][-a-z.0-9]+\.[a-z]{2,}($|\/)/i))){var domain=val.substring(0,slashpos>0?slashpos:val.length);hasScheme=true;if($this.attr("data-ignore")==domain){}else{$this.val("http://"+val);$this.closest(".InputfieldContent").find(".notes").text("http://"+val);$this.attr("data-ignore",domain)}}else if(dotpos>0&&val.indexOf("@")>0&&val.indexOf(":")==-1&&val.match(/^[^@]+@[-.a-z0-9]{2,}\.[a-z]{2,}$/i)){$this.val("mailto:"+val);$this.addClass("email")}else if(val.indexOf("@")==-1&&$this.hasClass("email")){$this.removeClass("email")}if(val.substring(0,1)=="#"){$this.addClass("anchor")}else if($this.hasClass("anchor")){$this.removeClass("anchor")}if(hasScheme){if(slashpos==-1)slashpos=val.length;httpHost=slashespos>-1?val.substring(slashespos+2,slashpos):val.substring(0,slashpos);$this.attr("data-httphost",httpHost)}else{$this.removeAttr("data-httphost")}function icon(){return $this.closest(".Inputfield").children(".InputfieldHeader").children("i").eq(0)}var external=false;httpHost=$this.attr("data-httphost");if(httpHost&&httpHost.length){external=true;for(n=0;n0){$("#link_target").val(extLinkTarget)}var extLinkRel=cfg.extLinkRel;if(extLinkRel.length>0){$("#link_rel").val(extLinkRel)}var extLinkClass=cfg.extLinkClass;if(extLinkClass.length>0){if(extLinkClass.indexOf(" ")>-1){var extLinkClassAll=extLinkClass.replace(" ","_");$("#link_class_"+extLinkClassAll).prop("checked",true);extLinkClass=extLinkClass.split(" ")}for(n=0;n");$.each(data,function(key,val){var $option=$("");$fileSelect.append($option)});$wrap.find("p.notes strong").text(selectedPageData.url);if($fileSelect.is(":visible")){$wrap.children().effect("highlight",{},500);$fileSelect.effect("bounce",{},50)}})}function absoluteToRelativePath(path){if(cfg.urlType==0)return path;function slashesToRelative(url){url=url.replace(/\//g,"../");url=url.replace(/[^.\/]/g,"");return url}var url;if(path===cfg.pageUrl){path="./";if(!cfg.slashUrls)path+=cfg.pageName}else if(path.indexOf(cfg.pageUrl)===0){path=path.substring(cfg.pageUrl.length);if(!cfg.slashUrls)path=cfg.pageName+path}else if(cfg.pageUrl.indexOf(path)===0){url=cfg.pageUrl.substring(path.length);if(url.indexOf("/")!=-1){url=slashesToRelative(url)}else{url="./"}path=url}else if(path.indexOf(cfg.rootParentUrl)===0){url=path.substring(cfg.rootParentUrl.length);var url2=url;url=slashesToRelative(url)+url2;path=url}else if(cfg.urlType==2){url=cfg.pageUrl.substring(ProcessWire.config.urls.root.length);url=slashesToRelative(url);path=path.substring(ProcessWire.config.urls.root.length);path=url+path}return path}function pageSelected(event,data){if(data.url&&data.url.length){selectedPageData=data;selectedPageData.url=ProcessWire.config.urls.root+data.url.substring(1);selectedPageData.url=absoluteToRelativePath(selectedPageData.url);$linkPageURL.val(selectedPageData.url).trigger("change");populateFileSelect(selectedPageData)}$(this).parents(".InputfieldInteger").children(".InputfieldHeader").trigger("click").parent().find(".PageListSelectHeader").removeClass("hidden").show()}$("#link_page_id").ProcessPageList(options).hide().on("pageSelected",pageSelected);$("#child_page_id").ProcessPageList(options2).hide().on("pageSelected",pageSelected);$fileSelect.on("change",function(){var $t=$(this);var src=$t.val();if(src.length)$linkPageURL.val(src).trigger("change")});if($anchorSelect.length){var anchorPreviousValue=$anchorSelect.val();$anchorSelect.on("change",function(){var val=$(this).val();if(val.length){$linkPageURL.val(val);anchorPreviousValue=val}else{if($linkPageURL.val()==anchorPreviousValue)$linkPageURL.val("")}$linkPageURL.trigger("change")})}function updateLinkPreview(){if(!$linkPageURL.val().length){$("#link_markup").text("");return}var $link=$("");$link.attr("href",$linkPageURL.val());var $linkTitle=$("#link_title");if($linkTitle.length&&$linkTitle.val().length){var val=$("
").text($linkTitle.val()).html();$link.attr("title",val)}if(cfg.noLinkTextEdit){}else if($linkText.length&&$linkText.val().length){$link.text($linkText.val())}var $linkRel=$("#link_rel");if($linkRel.length&&$linkRel.val()&&$linkRel.val().length){$link.attr("rel",$linkRel.val())}var $linkTarget=$("#link_target");if($linkTarget.length&&$linkTarget.val().length){$link.attr("target",$linkTarget.val())}var $linkClass=$("#wrap_link_class").find("input:checked");if($linkClass.length){$linkClass.each(function(){$link.addClass($(this).val())})}$("#link_markup").text($link[0].outerHTML)}function urlKeydown(){var $this=$linkPageURL;var val=ProcessWire.trim($this.val());var dotpos=val.indexOf(".");var slashespos=val.indexOf("//");var hasScheme=slashespos>-1&&slashespos-1?val.indexOf("/",slashespos+2):val.indexOf("/");var httpHost;var n;if(dotpos>-1&&val.indexOf("..")==-1&&val.indexOf("./")==-1&&(slashpos>dotpos&&!hasScheme||slashpos==-1&&dotpos>1&&val.match(/^[a-z][-a-z.0-9]+\.[a-z]{2,}($|\/)/i))){var domain=val.substring(0,slashpos>0?slashpos:val.length);hasScheme=true;if($this.attr("data-ignore")==domain){}else{$this.val("http://"+val);$this.closest(".InputfieldContent").find(".notes").text("http://"+val);$this.attr("data-ignore",domain)}}else if(dotpos>0&&val.indexOf("@")>0&&val.indexOf(":")==-1&&val.match(/^[^@]+@[-.a-z0-9]{2,}\.[a-z]{2,}$/i)){$this.val("mailto:"+val);$this.addClass("email")}else if(val.indexOf("@")==-1&&$this.hasClass("email")){$this.removeClass("email")}if(val.substring(0,1)=="#"){$this.addClass("anchor")}else if($this.hasClass("anchor")){$this.removeClass("anchor")}if(hasScheme){if(slashpos==-1)slashpos=val.length;httpHost=slashespos>-1?val.substring(slashespos+2,slashpos):val.substring(0,slashpos);$this.attr("data-httphost",httpHost)}else{$this.removeAttr("data-httphost")}function icon(){return $this.closest(".Inputfield").children(".InputfieldHeader").children("i").eq(0)}var external=false;httpHost=$this.attr("data-httphost");if(httpHost&&httpHost.length){external=true;for(n=0;n-1?extLinkClass.split(" "):[extLinkClass];var extLinkRel=cfg.extLinkRel;var extLinkTarget=cfg.extLinkTarget;if(external){if(!$this.hasClass("external-link")){icon().removeClass(allIcons).addClass(extLinkIcon);$this.addClass("external-link");if(extLinkTarget.length>0)$("#link_target").val(extLinkTarget);if(extLinkRel.length>0)$("#link_rel").val(extLinkRel);if(extLinkClasses.length>0){if(extLinkClasses.length>1){$("#link_class_"+extLinkClassAll).prop("checked",true)}for(n=0;n 'Page Edit Link', 'summary' => 'Provides a link capability as used by some Fieldtype modules (like rich text editors).', - 'version' => 111, + 'version' => 112, 'permanent' => true, 'permission' => 'page-edit', 'icon' => 'link', @@ -662,7 +662,7 @@ class ProcessPageEditLink extends Process implements ConfigurableModule { /** @var InputfieldFieldset $fieldset */ $fieldset = $modules->get('InputfieldFieldset'); $fieldset->label = $this->_('External link attributes'); - $fieldset->description = $this->_('Specify the default selected attributed that will be automatically populated when an external link is detected.'); + $fieldset->description = $this->_('Specify the default selected attributes that will be automatically populated when an external link is detected.'); $fieldset->description .= ' ' . $this->_('If used, the value must be one you have predefined above.'); $fieldset->icon = 'external-link'; $fieldset->collapsed = Inputfield::collapsedBlank;