',
+ 'allowed_html' => '
',
],
],
],
@@ -150,12 +150,12 @@ class UpgradePathTest extends SmartDefaultSettingsTest {
],
],
],
- 'expected_superset' => '',
+ 'expected_superset' => '',
'expected_fundamental_compatibility_violations' => [],
'expected_db_logs' => [],
'expected_messages' => [
'warning' => [
- 'Updating to CKEditor 5 added support for some previously unsupported tags/attributes. A plugin introduced support for the following: These attributes: data-entity-type (for <a>), data-entity-uuid (for <a>), data-entity-substitution (for <a>); Additional details are available in your logs.',
+ 'Updating to CKEditor 5 added support for some previously unsupported tags/attributes. A plugin introduced support for the following: These attributes: data-entity-type (for <a>), data-entity-bundle (for <a>), data-entity-uuid (for <a>), data-entity-substitution (for <a>); Additional details are available in your logs.',
],
],
];
diff --git a/tests/src/Kernel/LinkitEditorLinkDialogTest.php b/tests/src/Kernel/LinkitEditorLinkDialogTest.php
index 619ac028..6a7bd397 100644
--- a/tests/src/Kernel/LinkitEditorLinkDialogTest.php
+++ b/tests/src/Kernel/LinkitEditorLinkDialogTest.php
@@ -137,10 +137,12 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
$form_state->setValue(['attributes', 'href'], 'https://example.com/');
$form_state->setValue('href_dirty_check', '');
$form_state->setValue(['attributes', 'data-entity-type'], $this->randomString());
+ $form_state->setValue(['attributes', 'data-entity-bundle'], $this->randomString())
$form_state->setValue(['attributes', 'data-entity-uuid'], $this->randomString());
$form_state->setValue(['attributes', 'data-entity-substitution'], $this->randomString());
$form_builder->submitForm($form_object, $form_state);
$this->assertEmpty($form_state->getValue(['attributes', 'data-entity-type']));
+ $this->assertEmpty($form_state->getValue(['attributes', 'data-entity-bundle']));
$this->assertEmpty($form_state->getValue(['attributes', 'data-entity-uuid']));
$this->assertEmpty($form_state->getValue([
'attributes',
@@ -150,6 +152,7 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
$form_state->setValue(['attributes', 'href'], $entity_url);
$form_state->setValue('href_dirty_check', $entity_url);
$form_state->setValue(['attributes', 'data-entity-type'], $entity->getEntityTypeId());
+ $form_state->setValue(['attributes', 'data-entity-bundle'], $entity->bundle());
$form_state->setValue(['attributes', 'data-entity-uuid'], $entity->uuid());
$form_state->setValue(['attributes', 'data-entity-substitution'], SubstitutionManagerInterface::DEFAULT_SUBSTITUTION);
$form_builder->submitForm($form_object, $form_state);
@@ -158,6 +161,10 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
'attributes',
'data-entity-type',
]), 'Attribute "data-entity-type" exists and has the correct value.');
+ $this->assertEquals($entity->bundle(), $form_state->getValue([
+ 'attributes',
+ 'data-entity-bundle',
+ ]), 'Attribute "data-entity-bundle" exists and has the correct value.');
$this->assertEquals($entity->uuid(), $form_state->getValue([
'attributes',
'data-entity-uuid',
@@ -184,6 +191,7 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
'editor_object' => [
'href' => $entity_url,
'data-entity-type' => $entity->getEntityTypeId(),
+ 'data-entity-bundle' => $entity->bundle(),
'data-entity-uuid' => $entity->uuid(),
'data-entity-substitution' => SubstitutionManagerInterface::DEFAULT_SUBSTITUTION,
],
@@ -217,6 +225,10 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
'attributes',
'data-entity-type',
]), 'Attribute "data-entity-type" exists and has the correct value.');
+ $this->assertEquals($entity->bundle(), $form_state->getValue([
+ 'attributes',
+ 'data-entity-tbundle',
+ ]), 'Attribute "data-entity-bundle" exists and has the correct value.');
$this->assertEquals($entity->uuid(), $form_state->getValue([
'attributes',
'data-entity-uuid',
@@ -264,6 +276,7 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
$this->assertEquals('linkit.autocomplete', $form['attributes']['href']['#autocomplete_route_name'], 'Linkit is enabled on the href field.');
$this->assertEquals('http://example.com/', $form['attributes']['href']['#default_value'], 'The href field default value is the external URI.');
$this->assertEmpty($form['attributes']['data-entity-type']['#default_value']);
+ $this->assertEmpty($form['attributes']['data-entity-bundle']['#default_value']);
$this->assertEmpty($form['attributes']['data-entity-uuid']['#default_value']);
$this->assertEmpty($form['attributes']['data-entity-substitution']['#default_value']);
}
diff --git a/tests/src/Kernel/LinkitFilterEntityTest.php b/tests/src/Kernel/LinkitFilterEntityTest.php
index 149e2c90..322efcdb 100644
--- a/tests/src/Kernel/LinkitFilterEntityTest.php
+++ b/tests/src/Kernel/LinkitFilterEntityTest.php
@@ -86,7 +86,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$this->filter->setConfiguration(['settings' => ['title' => 1]]);
// Make sure the title is not included.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertFalse(strpos($this->process($input)->getProcessedText(), 'title'), 'The link does not contain a title attribute.');
$this->assertLinkitFilterWithTitle($entity_with_access);
@@ -161,7 +161,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$this->filter->setConfiguration(['settings' => ['title' => 1]]);
// Make sure the title is not overwritten.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertTrue(strpos($this->process($input)->getProcessedText(), 'Do not override') !== FALSE, 'The filer is not overwrite the provided title attribute value.');
}
@@ -174,7 +174,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$entity->save();
// Make sure original query and fragment are preserved.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertStringContainsString('?query=string', $this->process($input)->getProcessedText());
$this->assertStringContainsString('#fragment', $this->process($input)->getProcessedText());
}
--
GitLab
From 38e42e153a14bb3ac6f82d666ed8c5bf80dc3f01 Mon Sep 17 00:00:00 2001
From: kensae <55401-kensae@users.noreply.drupalcode.org>
Date: Thu, 17 Oct 2024 14:45:11 +0000
Subject: [PATCH 2/6] build file
---
js/build/linkit.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/build/linkit.js b/js/build/linkit.js
index 7ca0c3e3..33aa59d2 100644
--- a/js/build/linkit.js
+++ b/js/build/linkit.js
@@ -1 +1 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CKEditor5=e():(t.CKEditor5=t.CKEditor5||{},t.CKEditor5.linkit=e())}(self,(()=>(()=>{var t={"ckeditor5/src/core.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/typing.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/typing.js")},"dll-reference CKEditor5.dll":t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";i.d(n,{default:()=>u});var t=i("ckeditor5/src/core.js"),e=i("ckeditor5/src/typing.js");class s extends t.Plugin{init(){this.attrs=["linkDataEntityType","linkDataEntityUuid","linkDataEntitySubstitution"],this.attrsView=["data-entity-type","data-entity-uuid","data-entity-substitution"],this._allowAndConvertExtraAttributes(),this._removeExtraAttributesOnUnlinkCommandExecute(),this._refreshExtraAttributeValues(),this._addExtraAttributesOnLinkCommandExecute()}_allowAndConvertExtraAttributes(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:this.attrs}),this.attrs.forEach(((e,i)=>{t.conversion.for("downcast").attributeToElement({model:e,view:(t,{writer:e})=>{const n=e.createAttributeElement("a",{[this.attrsView[i]]:t},{priority:5});return e.setCustomProperty("link",!0,n),n}}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{[this.attrsView[i]]:!0}},model:{key:e,value:t=>t.getAttribute(this.attrsView[i])}})}))}_addExtraAttributesOnLinkCommandExecute(){const t=this.editor,e=t.commands.get("link");let i=!1;e.on("execute",((e,n)=>{if(n.length<3)return;if(i)return void(i=!1);e.stop(),i=!0;const s=n[n.length-1],o=this.editor.model,r=o.document.selection;o.change((e=>{t.execute("link",...n);const i=r.getFirstPosition();this.attrs.forEach((t=>{if(r.isCollapsed){const n=i.textNode||i.nodeBefore;s[t]?e.setAttribute(t,s[t],e.createRangeOn(n)):e.removeAttribute(t,e.createRangeOn(n)),e.removeSelectionAttribute(t)}else{const i=o.schema.getValidRanges(r.getRanges(),t);for(const n of i)s[t]?e.setAttribute(t,s[t],n):e.removeAttribute(t,n)}}))}))}),{priority:"high"})}_removeExtraAttributesOnUnlinkCommandExecute(){const t=this.editor,i=t.commands.get("unlink"),n=this.editor.model,s=n.document.selection;let o=!1;i.on("execute",(i=>{o||(i.stop(),n.change((()=>{o=!0,t.execute("unlink"),o=!1,n.change((t=>{let i;this.attrs.forEach((o=>{i=s.isCollapsed?[(0,e.findAttributeRange)(s.getFirstPosition(),o,s.getAttribute(o),n)]:n.schema.getValidRanges(s.getRanges(),o);for(const e of i)t.removeAttribute(o,e)}))}))})))}),{priority:"high"})}_refreshExtraAttributeValues(){const t=this.editor,e=this.attrs,i=t.commands.get("link"),n=this.editor.model,s=n.document.selection;e.forEach((t=>{i.set(t,null)})),n.document.on("change",(()=>{e.forEach((t=>{i[t]=s.getAttribute(t)}))}))}static get pluginName(){return"LinkitEditing"}}const o=jQuery;function r(t,e){var i=o("").addClass("linkit-result-line"),n=o("").addClass("linkit-result-line-wrapper");return n.addClass(e.status),n.append(o("
").html(e.label).addClass("linkit-result-line--title")),e.hasOwnProperty("description")&&n.append(o("").html(e.description).addClass("linkit-result-line--description")),i.append(n).appendTo(t)}function a(t,e){var i=this.element.autocomplete("instance"),n={};e.forEach((function(t){const e=t.hasOwnProperty("group")?t.group:"";n.hasOwnProperty(e)||(n[e]=[]),n[e].push(t)})),o.each(n,(function(e,n){e.length&&t.append('"),o.each(n,(function(e,n){i._renderItemData(t,n)}))}))}class l extends t.Plugin{static get requires(){return[s]}init(){this._state={};const t=this.editor;t.config.get("linkit");t.plugins.get("LinkUI")._createViews(),this._enableLinkAutocomplete(),this._handleExtraFormFieldSubmit(),this._handleDataLoadingIntoExtraFormField()}_enableLinkAutocomplete(){const t=this.editor,e=t.config.get("linkit"),i=t.plugins.get("LinkUI").formView;let n=!1;i.extendTemplate({attributes:{class:["ck-vertical-form","ck-link-form_layout-vertical"]}}),t.plugins.get("ContextualBalloon").on("set:visibleView",((t,s,l,u)=>{if(l!==i||n)return;let d;!function(t,e){const{autocompleteUrl:i,selectHandler:n,closeHandler:s,openHandler:l}=e,u={cache:{},ajax:{dataType:"json",jsonp:!1}},d={appendTo:t.closest(".ck-labeled-field-view"),source:function(t,e){const{cache:n}=u;var s=t.term;n.hasOwnProperty(s)?e(n[s]):o.ajax(i,{success:function(t){n[s]=t.suggestions,e(t.suggestions)},data:{q:s},...u.ajax})},select:n,focus:()=>!1,search:()=>!d.isComposing,close:s,open:l,minLength:1,isComposing:!1},c=o(t).autocomplete(d),p=c.data("ui-autocomplete");p.widget().menu("option","items","> :not(.linkit-result-line--group)"),p._renderMenu=a,p._renderItem=r,c.autocomplete("widget").addClass("linkit-ui-autocomplete ck-reset_all-excluded"),c.on("click",(function(){c.autocomplete("search",c.val())})),c.on("compositionstart.autocomplete",(function(){d.isComposing=!0})),c.on("compositionend.autocomplete",(function(){d.isComposing=!1}))}(i.urlInputView.fieldView.element,{...e,selectHandler:(t,{item:e})=>{if(!e.path)throw"Missing path param."+JSON.stringify(e);if(e.entity_type_id||e.entity_uuid||e.substitution_id){if(!e.entity_type_id||!e.entity_uuid||!e.substitution_id)throw"Missing path param."+JSON.stringify(e);this.set("entityType",e.entity_type_id),this.set("entityUuid",e.entity_uuid),this.set("entitySubstitution",e.substitution_id)}else this.set("entityType",null),this.set("entityUuid",null),this.set("entitySubstitution",null);return i.urlInputView.fieldView.set("value",e.path),d=!0,!1},openHandler:t=>{d=!1},closeHandler:t=>{d=!1}}),n=!0,i.urlInputView.fieldView.template.attributes.class.push("form-linkit-autocomplete")}))}_handleExtraFormFieldSubmit(){const t=this.editor,e=t.plugins.get("LinkUI").formView,i=t.commands.get("link"),n=t.plugins.get("Linkit");e.urlInputView.fieldView.element.addEventListener("input",(function(t){n.set("entityType",null),n.set("entityUuid",null),n.set("entitySubstitution",null)})),this.listenTo(e,"submit",(()=>{const t={linkDataEntityType:this.entityType,linkDataEntityUuid:this.entityUuid,linkDataEntitySubstitution:this.entitySubstitution};i.once("execute",((e,i)=>{if(i.length<3)i.push(t);else{if(3!==i.length)throw Error("The link command has more than 3 arguments.");Object.assign(i[2],t)}}),{priority:"highest"})}),{priority:"high"})}_handleDataLoadingIntoExtraFormField(){const t=this.editor.commands.get("link");this.bind("entityType").to(t,"linkDataEntityType"),this.bind("entityUuid").to(t,"linkDataEntityUuid"),this.bind("entitySubstitution").to(t,"linkDataEntitySubstitution")}static get pluginName(){return"Linkit"}}const u={Linkit:l}})(),n=n.default})()));
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CKEditor5=e():(t.CKEditor5=t.CKEditor5||{},t.CKEditor5.linkit=e())}(self,(()=>(()=>{var t={"ckeditor5/src/core.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/typing.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/typing.js")},"dll-reference CKEditor5.dll":t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";i.d(n,{default:()=>u});var t=i("ckeditor5/src/core.js"),e=i("ckeditor5/src/typing.js");class s extends t.Plugin{init(){this.attrs=["linkDataEntityType","linkDataEntityBundle","linkDataEntityUuid","linkDataEntitySubstitution"],this.attrsView=["data-entity-type","data-entity-uuid","data-entity-substitution"],this._allowAndConvertExtraAttributes(),this._removeExtraAttributesOnUnlinkCommandExecute(),this._refreshExtraAttributeValues(),this._addExtraAttributesOnLinkCommandExecute()}_allowAndConvertExtraAttributes(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:this.attrs}),this.attrs.forEach(((e,i)=>{t.conversion.for("downcast").attributeToElement({model:e,view:(t,{writer:e})=>{const n=e.createAttributeElement("a",{[this.attrsView[i]]:t},{priority:5});return e.setCustomProperty("link",!0,n),n}}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{[this.attrsView[i]]:!0}},model:{key:e,value:t=>t.getAttribute(this.attrsView[i])}})}))}_addExtraAttributesOnLinkCommandExecute(){const t=this.editor,e=t.commands.get("link");let i=!1;e.on("execute",((e,n)=>{if(n.length<3)return;if(i)return void(i=!1);e.stop(),i=!0;const s=n[n.length-1],o=this.editor.model,r=o.document.selection;o.change((e=>{t.execute("link",...n);const i=r.getFirstPosition();this.attrs.forEach((t=>{if(r.isCollapsed){const n=i.textNode||i.nodeBefore;s[t]?e.setAttribute(t,s[t],e.createRangeOn(n)):e.removeAttribute(t,e.createRangeOn(n)),e.removeSelectionAttribute(t)}else{const i=o.schema.getValidRanges(r.getRanges(),t);for(const n of i)s[t]?e.setAttribute(t,s[t],n):e.removeAttribute(t,n)}}))}))}),{priority:"high"})}_removeExtraAttributesOnUnlinkCommandExecute(){const t=this.editor,i=t.commands.get("unlink"),n=this.editor.model,s=n.document.selection;let o=!1;i.on("execute",(i=>{o||(i.stop(),n.change((()=>{o=!0,t.execute("unlink"),o=!1,n.change((t=>{let i;this.attrs.forEach((o=>{i=s.isCollapsed?[(0,e.findAttributeRange)(s.getFirstPosition(),o,s.getAttribute(o),n)]:n.schema.getValidRanges(s.getRanges(),o);for(const e of i)t.removeAttribute(o,e)}))}))})))}),{priority:"high"})}_refreshExtraAttributeValues(){const t=this.editor,e=this.attrs,i=t.commands.get("link"),n=this.editor.model,s=n.document.selection;e.forEach((t=>{i.set(t,null)})),n.document.on("change",(()=>{e.forEach((t=>{i[t]=s.getAttribute(t)}))}))}static get pluginName(){return"LinkitEditing"}}const o=jQuery;function r(t,e){var i=o("").addClass("linkit-result-line"),n=o("").addClass("linkit-result-line-wrapper");return n.addClass(e.status),n.append(o("
").html(e.label).addClass("linkit-result-line--title")),e.hasOwnProperty("description")&&n.append(o("").html(e.description).addClass("linkit-result-line--description")),i.append(n).appendTo(t)}function a(t,e){var i=this.element.autocomplete("instance"),n={};e.forEach((function(t){const e=t.hasOwnProperty("group")?t.group:"";n.hasOwnProperty(e)||(n[e]=[]),n[e].push(t)})),o.each(n,(function(e,n){e.length&&t.append('"),o.each(n,(function(e,n){i._renderItemData(t,n)}))}))}class l extends t.Plugin{static get requires(){return[s]}init(){this._state={};const t=this.editor;t.config.get("linkit");t.plugins.get("LinkUI")._createViews(),this._enableLinkAutocomplete(),this._handleExtraFormFieldSubmit(),this._handleDataLoadingIntoExtraFormField()}_enableLinkAutocomplete(){const t=this.editor,e=t.config.get("linkit"),i=t.plugins.get("LinkUI").formView;let n=!1;i.extendTemplate({attributes:{class:["ck-vertical-form","ck-link-form_layout-vertical"]}}),t.plugins.get("ContextualBalloon").on("set:visibleView",((t,s,l,u)=>{if(l!==i||n)return;let d;!function(t,e){const{autocompleteUrl:i,selectHandler:n,closeHandler:s,openHandler:l}=e,u={cache:{},ajax:{dataType:"json",jsonp:!1}},d={appendTo:t.closest(".ck-labeled-field-view"),source:function(t,e){const{cache:n}=u;var s=t.term;n.hasOwnProperty(s)?e(n[s]):o.ajax(i,{success:function(t){n[s]=t.suggestions,e(t.suggestions)},data:{q:s},...u.ajax})},select:n,focus:()=>!1,search:()=>!d.isComposing,close:s,open:l,minLength:1,isComposing:!1},c=o(t).autocomplete(d),p=c.data("ui-autocomplete");p.widget().menu("option","items","> :not(.linkit-result-line--group)"),p._renderMenu=a,p._renderItem=r,c.autocomplete("widget").addClass("linkit-ui-autocomplete ck-reset_all-excluded"),c.on("click",(function(){c.autocomplete("search",c.val())})),c.on("compositionstart.autocomplete",(function(){d.isComposing=!0})),c.on("compositionend.autocomplete",(function(){d.isComposing=!1}))}(i.urlInputView.fieldView.element,{...e,selectHandler:(t,{item:e})=>{if(!e.path)throw"Missing path param."+JSON.stringify(e);if(e.entity_type_id||e.entity_uuid||e.substitution_id){if(!e.entity_type_id||!e.entity_uuid||!e.substitution_id)throw"Missing path param."+JSON.stringify(e);this.set("entityType",e.entity_type_id),this.set("entityBundle", e.entity_bundle),this.set("entityUuid",e.entity_uuid),this.set("entitySubstitution",e.substitution_id)}else this.set("entityType",null),this.set("entityBundle", null),this.set("entityUuid",null),this.set("entitySubstitution",null);return i.urlInputView.fieldView.set("value",e.path),d=!0,!1},openHandler:t=>{d=!1},closeHandler:t=>{d=!1}}),n=!0,i.urlInputView.fieldView.template.attributes.class.push("form-linkit-autocomplete")}))}_handleExtraFormFieldSubmit(){const t=this.editor,e=t.plugins.get("LinkUI").formView,i=t.commands.get("link"),n=t.plugins.get("Linkit");e.urlInputView.fieldView.element.addEventListener("input",(function(t){n.set("entityType",null),n.set("entityBundle",null),n.set("entityUuid",null),n.set("entitySubstitution",null)})),this.listenTo(e,"submit",(()=>{const t={linkDataEntityType:this.entityType,linkDataEntityBundle:this.entityBundle,linkDataEntityUuid:this.entityUuid,linkDataEntitySubstitution:this.entitySubstitution};i.once("execute",((e,i)=>{if(i.length<3)i.push(t);else{if(3!==i.length)throw Error("The link command has more than 3 arguments.");Object.assign(i[2],t)}}),{priority:"highest"})}),{priority:"high"})}_handleDataLoadingIntoExtraFormField(){const t=this.editor.commands.get("link");this.bind("entityType").to(t,"linkDataEntityType"),this.bind("entityBundle").to(t,"linkDataEntityBundle"),this.bind("entityUuid").to(t,"linkDataEntityUuid"),this.bind("entitySubstitution").to(t,"linkDataEntitySubstitution")}static get pluginName(){return"Linkit"}}const u={Linkit:l}})(),n=n.default})()));
\ No newline at end of file
--
GitLab
From 1bdadecb4d9ec43ae7ed015015a78bdc420071fc Mon Sep 17 00:00:00 2001
From: kensae <55401-kensae@users.noreply.drupalcode.org>
Date: Thu, 17 Oct 2024 14:47:32 +0000
Subject: [PATCH 3/6] data-entity-type
---
js/build/linkit.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/build/linkit.js b/js/build/linkit.js
index 33aa59d2..486d1304 100644
--- a/js/build/linkit.js
+++ b/js/build/linkit.js
@@ -1 +1 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CKEditor5=e():(t.CKEditor5=t.CKEditor5||{},t.CKEditor5.linkit=e())}(self,(()=>(()=>{var t={"ckeditor5/src/core.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/typing.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/typing.js")},"dll-reference CKEditor5.dll":t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";i.d(n,{default:()=>u});var t=i("ckeditor5/src/core.js"),e=i("ckeditor5/src/typing.js");class s extends t.Plugin{init(){this.attrs=["linkDataEntityType","linkDataEntityBundle","linkDataEntityUuid","linkDataEntitySubstitution"],this.attrsView=["data-entity-type","data-entity-uuid","data-entity-substitution"],this._allowAndConvertExtraAttributes(),this._removeExtraAttributesOnUnlinkCommandExecute(),this._refreshExtraAttributeValues(),this._addExtraAttributesOnLinkCommandExecute()}_allowAndConvertExtraAttributes(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:this.attrs}),this.attrs.forEach(((e,i)=>{t.conversion.for("downcast").attributeToElement({model:e,view:(t,{writer:e})=>{const n=e.createAttributeElement("a",{[this.attrsView[i]]:t},{priority:5});return e.setCustomProperty("link",!0,n),n}}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{[this.attrsView[i]]:!0}},model:{key:e,value:t=>t.getAttribute(this.attrsView[i])}})}))}_addExtraAttributesOnLinkCommandExecute(){const t=this.editor,e=t.commands.get("link");let i=!1;e.on("execute",((e,n)=>{if(n.length<3)return;if(i)return void(i=!1);e.stop(),i=!0;const s=n[n.length-1],o=this.editor.model,r=o.document.selection;o.change((e=>{t.execute("link",...n);const i=r.getFirstPosition();this.attrs.forEach((t=>{if(r.isCollapsed){const n=i.textNode||i.nodeBefore;s[t]?e.setAttribute(t,s[t],e.createRangeOn(n)):e.removeAttribute(t,e.createRangeOn(n)),e.removeSelectionAttribute(t)}else{const i=o.schema.getValidRanges(r.getRanges(),t);for(const n of i)s[t]?e.setAttribute(t,s[t],n):e.removeAttribute(t,n)}}))}))}),{priority:"high"})}_removeExtraAttributesOnUnlinkCommandExecute(){const t=this.editor,i=t.commands.get("unlink"),n=this.editor.model,s=n.document.selection;let o=!1;i.on("execute",(i=>{o||(i.stop(),n.change((()=>{o=!0,t.execute("unlink"),o=!1,n.change((t=>{let i;this.attrs.forEach((o=>{i=s.isCollapsed?[(0,e.findAttributeRange)(s.getFirstPosition(),o,s.getAttribute(o),n)]:n.schema.getValidRanges(s.getRanges(),o);for(const e of i)t.removeAttribute(o,e)}))}))})))}),{priority:"high"})}_refreshExtraAttributeValues(){const t=this.editor,e=this.attrs,i=t.commands.get("link"),n=this.editor.model,s=n.document.selection;e.forEach((t=>{i.set(t,null)})),n.document.on("change",(()=>{e.forEach((t=>{i[t]=s.getAttribute(t)}))}))}static get pluginName(){return"LinkitEditing"}}const o=jQuery;function r(t,e){var i=o("").addClass("linkit-result-line"),n=o("").addClass("linkit-result-line-wrapper");return n.addClass(e.status),n.append(o("
").html(e.label).addClass("linkit-result-line--title")),e.hasOwnProperty("description")&&n.append(o("").html(e.description).addClass("linkit-result-line--description")),i.append(n).appendTo(t)}function a(t,e){var i=this.element.autocomplete("instance"),n={};e.forEach((function(t){const e=t.hasOwnProperty("group")?t.group:"";n.hasOwnProperty(e)||(n[e]=[]),n[e].push(t)})),o.each(n,(function(e,n){e.length&&t.append('"),o.each(n,(function(e,n){i._renderItemData(t,n)}))}))}class l extends t.Plugin{static get requires(){return[s]}init(){this._state={};const t=this.editor;t.config.get("linkit");t.plugins.get("LinkUI")._createViews(),this._enableLinkAutocomplete(),this._handleExtraFormFieldSubmit(),this._handleDataLoadingIntoExtraFormField()}_enableLinkAutocomplete(){const t=this.editor,e=t.config.get("linkit"),i=t.plugins.get("LinkUI").formView;let n=!1;i.extendTemplate({attributes:{class:["ck-vertical-form","ck-link-form_layout-vertical"]}}),t.plugins.get("ContextualBalloon").on("set:visibleView",((t,s,l,u)=>{if(l!==i||n)return;let d;!function(t,e){const{autocompleteUrl:i,selectHandler:n,closeHandler:s,openHandler:l}=e,u={cache:{},ajax:{dataType:"json",jsonp:!1}},d={appendTo:t.closest(".ck-labeled-field-view"),source:function(t,e){const{cache:n}=u;var s=t.term;n.hasOwnProperty(s)?e(n[s]):o.ajax(i,{success:function(t){n[s]=t.suggestions,e(t.suggestions)},data:{q:s},...u.ajax})},select:n,focus:()=>!1,search:()=>!d.isComposing,close:s,open:l,minLength:1,isComposing:!1},c=o(t).autocomplete(d),p=c.data("ui-autocomplete");p.widget().menu("option","items","> :not(.linkit-result-line--group)"),p._renderMenu=a,p._renderItem=r,c.autocomplete("widget").addClass("linkit-ui-autocomplete ck-reset_all-excluded"),c.on("click",(function(){c.autocomplete("search",c.val())})),c.on("compositionstart.autocomplete",(function(){d.isComposing=!0})),c.on("compositionend.autocomplete",(function(){d.isComposing=!1}))}(i.urlInputView.fieldView.element,{...e,selectHandler:(t,{item:e})=>{if(!e.path)throw"Missing path param."+JSON.stringify(e);if(e.entity_type_id||e.entity_uuid||e.substitution_id){if(!e.entity_type_id||!e.entity_uuid||!e.substitution_id)throw"Missing path param."+JSON.stringify(e);this.set("entityType",e.entity_type_id),this.set("entityBundle", e.entity_bundle),this.set("entityUuid",e.entity_uuid),this.set("entitySubstitution",e.substitution_id)}else this.set("entityType",null),this.set("entityBundle", null),this.set("entityUuid",null),this.set("entitySubstitution",null);return i.urlInputView.fieldView.set("value",e.path),d=!0,!1},openHandler:t=>{d=!1},closeHandler:t=>{d=!1}}),n=!0,i.urlInputView.fieldView.template.attributes.class.push("form-linkit-autocomplete")}))}_handleExtraFormFieldSubmit(){const t=this.editor,e=t.plugins.get("LinkUI").formView,i=t.commands.get("link"),n=t.plugins.get("Linkit");e.urlInputView.fieldView.element.addEventListener("input",(function(t){n.set("entityType",null),n.set("entityBundle",null),n.set("entityUuid",null),n.set("entitySubstitution",null)})),this.listenTo(e,"submit",(()=>{const t={linkDataEntityType:this.entityType,linkDataEntityBundle:this.entityBundle,linkDataEntityUuid:this.entityUuid,linkDataEntitySubstitution:this.entitySubstitution};i.once("execute",((e,i)=>{if(i.length<3)i.push(t);else{if(3!==i.length)throw Error("The link command has more than 3 arguments.");Object.assign(i[2],t)}}),{priority:"highest"})}),{priority:"high"})}_handleDataLoadingIntoExtraFormField(){const t=this.editor.commands.get("link");this.bind("entityType").to(t,"linkDataEntityType"),this.bind("entityBundle").to(t,"linkDataEntityBundle"),this.bind("entityUuid").to(t,"linkDataEntityUuid"),this.bind("entitySubstitution").to(t,"linkDataEntitySubstitution")}static get pluginName(){return"Linkit"}}const u={Linkit:l}})(),n=n.default})()));
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CKEditor5=e():(t.CKEditor5=t.CKEditor5||{},t.CKEditor5.linkit=e())}(self,(()=>(()=>{var t={"ckeditor5/src/core.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/typing.js":(t,e,i)=>{t.exports=i("dll-reference CKEditor5.dll")("./src/typing.js")},"dll-reference CKEditor5.dll":t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";i.d(n,{default:()=>u});var t=i("ckeditor5/src/core.js"),e=i("ckeditor5/src/typing.js");class s extends t.Plugin{init(){this.attrs=["linkDataEntityType","linkDataEntityBundle","linkDataEntityUuid","linkDataEntitySubstitution"],this.attrsView=["data-entity-type","data-entity-bundle","data-entity-uuid","data-entity-substitution"],this._allowAndConvertExtraAttributes(),this._removeExtraAttributesOnUnlinkCommandExecute(),this._refreshExtraAttributeValues(),this._addExtraAttributesOnLinkCommandExecute()}_allowAndConvertExtraAttributes(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:this.attrs}),this.attrs.forEach(((e,i)=>{t.conversion.for("downcast").attributeToElement({model:e,view:(t,{writer:e})=>{const n=e.createAttributeElement("a",{[this.attrsView[i]]:t},{priority:5});return e.setCustomProperty("link",!0,n),n}}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{[this.attrsView[i]]:!0}},model:{key:e,value:t=>t.getAttribute(this.attrsView[i])}})}))}_addExtraAttributesOnLinkCommandExecute(){const t=this.editor,e=t.commands.get("link");let i=!1;e.on("execute",((e,n)=>{if(n.length<3)return;if(i)return void(i=!1);e.stop(),i=!0;const s=n[n.length-1],o=this.editor.model,r=o.document.selection;o.change((e=>{t.execute("link",...n);const i=r.getFirstPosition();this.attrs.forEach((t=>{if(r.isCollapsed){const n=i.textNode||i.nodeBefore;s[t]?e.setAttribute(t,s[t],e.createRangeOn(n)):e.removeAttribute(t,e.createRangeOn(n)),e.removeSelectionAttribute(t)}else{const i=o.schema.getValidRanges(r.getRanges(),t);for(const n of i)s[t]?e.setAttribute(t,s[t],n):e.removeAttribute(t,n)}}))}))}),{priority:"high"})}_removeExtraAttributesOnUnlinkCommandExecute(){const t=this.editor,i=t.commands.get("unlink"),n=this.editor.model,s=n.document.selection;let o=!1;i.on("execute",(i=>{o||(i.stop(),n.change((()=>{o=!0,t.execute("unlink"),o=!1,n.change((t=>{let i;this.attrs.forEach((o=>{i=s.isCollapsed?[(0,e.findAttributeRange)(s.getFirstPosition(),o,s.getAttribute(o),n)]:n.schema.getValidRanges(s.getRanges(),o);for(const e of i)t.removeAttribute(o,e)}))}))})))}),{priority:"high"})}_refreshExtraAttributeValues(){const t=this.editor,e=this.attrs,i=t.commands.get("link"),n=this.editor.model,s=n.document.selection;e.forEach((t=>{i.set(t,null)})),n.document.on("change",(()=>{e.forEach((t=>{i[t]=s.getAttribute(t)}))}))}static get pluginName(){return"LinkitEditing"}}const o=jQuery;function r(t,e){var i=o("").addClass("linkit-result-line"),n=o("").addClass("linkit-result-line-wrapper");return n.addClass(e.status),n.append(o("
").html(e.label).addClass("linkit-result-line--title")),e.hasOwnProperty("description")&&n.append(o("").html(e.description).addClass("linkit-result-line--description")),i.append(n).appendTo(t)}function a(t,e){var i=this.element.autocomplete("instance"),n={};e.forEach((function(t){const e=t.hasOwnProperty("group")?t.group:"";n.hasOwnProperty(e)||(n[e]=[]),n[e].push(t)})),o.each(n,(function(e,n){e.length&&t.append('"),o.each(n,(function(e,n){i._renderItemData(t,n)}))}))}class l extends t.Plugin{static get requires(){return[s]}init(){this._state={};const t=this.editor;t.config.get("linkit");t.plugins.get("LinkUI")._createViews(),this._enableLinkAutocomplete(),this._handleExtraFormFieldSubmit(),this._handleDataLoadingIntoExtraFormField()}_enableLinkAutocomplete(){const t=this.editor,e=t.config.get("linkit"),i=t.plugins.get("LinkUI").formView;let n=!1;i.extendTemplate({attributes:{class:["ck-vertical-form","ck-link-form_layout-vertical"]}}),t.plugins.get("ContextualBalloon").on("set:visibleView",((t,s,l,u)=>{if(l!==i||n)return;let d;!function(t,e){const{autocompleteUrl:i,selectHandler:n,closeHandler:s,openHandler:l}=e,u={cache:{},ajax:{dataType:"json",jsonp:!1}},d={appendTo:t.closest(".ck-labeled-field-view"),source:function(t,e){const{cache:n}=u;var s=t.term;n.hasOwnProperty(s)?e(n[s]):o.ajax(i,{success:function(t){n[s]=t.suggestions,e(t.suggestions)},data:{q:s},...u.ajax})},select:n,focus:()=>!1,search:()=>!d.isComposing,close:s,open:l,minLength:1,isComposing:!1},c=o(t).autocomplete(d),p=c.data("ui-autocomplete");p.widget().menu("option","items","> :not(.linkit-result-line--group)"),p._renderMenu=a,p._renderItem=r,c.autocomplete("widget").addClass("linkit-ui-autocomplete ck-reset_all-excluded"),c.on("click",(function(){c.autocomplete("search",c.val())})),c.on("compositionstart.autocomplete",(function(){d.isComposing=!0})),c.on("compositionend.autocomplete",(function(){d.isComposing=!1}))}(i.urlInputView.fieldView.element,{...e,selectHandler:(t,{item:e})=>{if(!e.path)throw"Missing path param."+JSON.stringify(e);if(e.entity_type_id||e.entity_uuid||e.substitution_id){if(!e.entity_type_id||!e.entity_uuid||!e.substitution_id)throw"Missing path param."+JSON.stringify(e);this.set("entityType",e.entity_type_id),this.set("entityBundle", e.entity_bundle),this.set("entityUuid",e.entity_uuid),this.set("entitySubstitution",e.substitution_id)}else this.set("entityType",null),this.set("entityBundle", null),this.set("entityUuid",null),this.set("entitySubstitution",null);return i.urlInputView.fieldView.set("value",e.path),d=!0,!1},openHandler:t=>{d=!1},closeHandler:t=>{d=!1}}),n=!0,i.urlInputView.fieldView.template.attributes.class.push("form-linkit-autocomplete")}))}_handleExtraFormFieldSubmit(){const t=this.editor,e=t.plugins.get("LinkUI").formView,i=t.commands.get("link"),n=t.plugins.get("Linkit");e.urlInputView.fieldView.element.addEventListener("input",(function(t){n.set("entityType",null),n.set("entityBundle",null),n.set("entityUuid",null),n.set("entitySubstitution",null)})),this.listenTo(e,"submit",(()=>{const t={linkDataEntityType:this.entityType,linkDataEntityBundle:this.entityBundle,linkDataEntityUuid:this.entityUuid,linkDataEntitySubstitution:this.entitySubstitution};i.once("execute",((e,i)=>{if(i.length<3)i.push(t);else{if(3!==i.length)throw Error("The link command has more than 3 arguments.");Object.assign(i[2],t)}}),{priority:"highest"})}),{priority:"high"})}_handleDataLoadingIntoExtraFormField(){const t=this.editor.commands.get("link");this.bind("entityType").to(t,"linkDataEntityType"),this.bind("entityBundle").to(t,"linkDataEntityBundle"),this.bind("entityUuid").to(t,"linkDataEntityUuid"),this.bind("entitySubstitution").to(t,"linkDataEntitySubstitution")}static get pluginName(){return"Linkit"}}const u={Linkit:l}})(),n=n.default})()));
\ No newline at end of file
--
GitLab
From 89f5da4cf5a9181a12a77a83cc6045ac5bfa2236 Mon Sep 17 00:00:00 2001
From: kensae <55401-kensae@users.noreply.drupalcode.org>
Date: Fri, 18 Oct 2024 08:45:41 +0000
Subject: [PATCH 4/6] Fix typos
---
tests/src/Kernel/LinkitEditorLinkDialogTest.php | 2 +-
tests/src/Kernel/LinkitFilterEntityTest.php | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/src/Kernel/LinkitEditorLinkDialogTest.php b/tests/src/Kernel/LinkitEditorLinkDialogTest.php
index 6a7bd397..adba9c72 100644
--- a/tests/src/Kernel/LinkitEditorLinkDialogTest.php
+++ b/tests/src/Kernel/LinkitEditorLinkDialogTest.php
@@ -137,7 +137,7 @@ class LinkitEditorLinkDialogTest extends LinkitKernelTestBase {
$form_state->setValue(['attributes', 'href'], 'https://example.com/');
$form_state->setValue('href_dirty_check', '');
$form_state->setValue(['attributes', 'data-entity-type'], $this->randomString());
- $form_state->setValue(['attributes', 'data-entity-bundle'], $this->randomString())
+ $form_state->setValue(['attributes', 'data-entity-bundle'], $this->randomString());
$form_state->setValue(['attributes', 'data-entity-uuid'], $this->randomString());
$form_state->setValue(['attributes', 'data-entity-substitution'], $this->randomString());
$form_builder->submitForm($form_object, $form_state);
diff --git a/tests/src/Kernel/LinkitFilterEntityTest.php b/tests/src/Kernel/LinkitFilterEntityTest.php
index 322efcdb..2a5432eb 100644
--- a/tests/src/Kernel/LinkitFilterEntityTest.php
+++ b/tests/src/Kernel/LinkitFilterEntityTest.php
@@ -161,7 +161,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$this->filter->setConfiguration(['settings' => ['title' => 1]]);
// Make sure the title is not overwritten.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertTrue(strpos($this->process($input)->getProcessedText(), 'Do not override') !== FALSE, 'The filer is not overwrite the provided title attribute value.');
}
@@ -174,7 +174,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$entity->save();
// Make sure original query and fragment are preserved.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertStringContainsString('?query=string', $this->process($input)->getProcessedText());
$this->assertStringContainsString('#fragment', $this->process($input)->getProcessedText());
}
--
GitLab
From dcd2370fcc9f8d4b4d1f393c3703626cafb9020e Mon Sep 17 00:00:00 2001
From: kensae <55401-kensae@users.noreply.drupalcode.org>
Date: Fri, 18 Oct 2024 08:57:05 +0000
Subject: [PATCH 5/6] typo
---
src/Plugin/Field/FieldWidget/LinkitWidget.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Plugin/Field/FieldWidget/LinkitWidget.php b/src/Plugin/Field/FieldWidget/LinkitWidget.php
index 8441aec5..c0db811e 100644
--- a/src/Plugin/Field/FieldWidget/LinkitWidget.php
+++ b/src/Plugin/Field/FieldWidget/LinkitWidget.php
@@ -202,7 +202,7 @@ class LinkitWidget extends LinkWidget {
$element['attributes']['data-entity-bundle'] = [
'#type' => 'hidden',
'#default_value' => $entity ? $entity->bundle() : '',
- ]
+ ];
$element['attributes']['data-entity-uuid'] = [
'#type' => 'hidden',
'#default_value' => $entity ? $entity->uuid() : '',
--
GitLab
From c812adbcd734cc7294528c08cb476ac23e516279 Mon Sep 17 00:00:00 2001
From: kensae <55401-kensae@users.noreply.drupalcode.org>
Date: Fri, 18 Oct 2024 09:01:18 +0000
Subject: [PATCH 6/6] another typo
---
tests/src/Kernel/LinkitFilterEntityTest.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/src/Kernel/LinkitFilterEntityTest.php b/tests/src/Kernel/LinkitFilterEntityTest.php
index 2a5432eb..a6fa773f 100644
--- a/tests/src/Kernel/LinkitFilterEntityTest.php
+++ b/tests/src/Kernel/LinkitFilterEntityTest.php
@@ -86,7 +86,7 @@ class LinkitFilterEntityTest extends LinkitKernelTestBase {
$this->filter->setConfiguration(['settings' => ['title' => 1]]);
// Make sure the title is not included.
- $input = 'Link text';
+ $input = 'Link text';
$this->assertFalse(strpos($this->process($input)->getProcessedText(), 'title'), 'The link does not contain a title attribute.');
$this->assertLinkitFilterWithTitle($entity_with_access);
--
GitLab