jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/394373 )
Change subject: Use rel="noopener" on links targeted at new windows
......................................................................
Use rel="noopener" on links targeted at new windows
Bug: T180932
Change-Id: I9b7e32bf110e9a1b96b057242121b59b4c9c9513
---
M src/ui/contextitems/ve.ui.LinkContextItem.js
M src/ve.utils.js
M tests/ui/ve.ui.DiffElement.test.js
3 files changed, 26 insertions(+), 3 deletions(-)
Approvals:
Esanders: Looks good to me, approved
jenkins-bot: Verified
diff --git a/src/ui/contextitems/ve.ui.LinkContextItem.js
b/src/ui/contextitems/ve.ui.LinkContextItem.js
index ffc3c06..3fb1c51 100644
--- a/src/ui/contextitems/ve.ui.LinkContextItem.js
+++ b/src/ui/contextitems/ve.ui.LinkContextItem.js
@@ -61,7 +61,8 @@
.text( this.getDescription() )
.attr( {
href: ve.resolveUrl( this.model.getHref(),
htmlDoc ),
- target: '_blank'
+ target: '_blank',
+ rel: 'noopener'
} )
);
};
diff --git a/src/ve.utils.js b/src/ve.utils.js
index 72eb3dc..d094d25 100644
--- a/src/ve.utils.js
+++ b/src/ve.utils.js
@@ -1043,11 +1043,33 @@
ve.targetLinksToNewWindow = function ( container ) {
// Make all links open in a new window
Array.prototype.forEach.call( container.querySelectorAll( 'a[href]' ),
function ( el ) {
+ ve.appendToRel( el, 'noopener' );
el.setAttribute( 'target', '_blank' );
} );
};
/**
+ * Add a value to an element's rel attribute if it's not already present
+ *
+ * Rel is like class: it's actually a set, represented as a string. We don't
+ * want to add the same value to the attribute if this function is called
+ * repeatedly. This is mostly a placeholder for the relList property someday
+ * becoming widely supported.
+ *
+ * @param {HTMLElement} element DOM element whose attribute should be checked
+ * @param {string} value New rel value to be added
+ */
+ve.appendToRel = function ( element, value ) {
+ var rel = element.getAttribute( 'rel' );
+ if ( !rel ) {
+ // Avoid all that string-creation if it's not needed
+ element.setAttribute( 'rel', value );
+ } else if ( ( ' ' + rel + ' ' ).indexOf( ' ' + value + ' ' ) === -1 ) {
+ element.setAttribute( 'rel', rel + ' ' + value );
+ }
+};
+
+/**
* Check if a string is a valid URI component.
*
* A URI component is considered invalid if decodeURIComponent() throws an
exception.
diff --git a/tests/ui/ve.ui.DiffElement.test.js
b/tests/ui/ve.ui.DiffElement.test.js
index d8983a3..624888f 100644
--- a/tests/ui/ve.ui.DiffElement.test.js
+++ b/tests/ui/ve.ui.DiffElement.test.js
@@ -375,7 +375,7 @@
newDoc: '<p>foo <a
href="http://example.org/whee">bar</a> baz</p>',
expected:
'<div
class="ve-ui-diffElement-doc-child-change">' +
- '<p>foo <span
data-diff-action="change-remove"><a href="http://example.org/quuz"
target="_blank">bar</a></span><span data-diff-action="change-insert"
data-diff-id="0"><a href="http://example.org/whee"
target="_blank">bar</a></span> baz</p>' +
+ '<p>foo <span
data-diff-action="change-remove"><a href="http://example.org/quuz"
rel="noopener" target="_blank">bar</a></span><span
data-diff-action="change-insert" data-diff-id="0"><a
href="http://example.org/whee" rel="noopener" target="_blank">bar</a></span>
baz</p>' +
'</div>'
},
{
@@ -384,7 +384,7 @@
newDoc: '<p><a href="http://example.org/">foo
<b>bar</b> baz</a></p>',
expected:
'<div
class="ve-ui-diffElement-doc-child-change">' +
- '<p><a
href="http://example.org/" target="_blank">foo <del
data-diff-action="remove">bar</del><ins
data-diff-action="insert"><b>bar</b></ins> baz</a></p>' +
+ '<p><a
href="http://example.org/" rel="noopener" target="_blank">foo <del
data-diff-action="remove">bar</del><ins
data-diff-action="insert"><b>bar</b></ins> baz</a></p>' +
'</div>'
},
{
--
To view, visit https://gerrit.wikimedia.org/r/394373
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I9b7e32bf110e9a1b96b057242121b59b4c9c9513
Gerrit-PatchSet: 7
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: DLynch <[email protected]>
Gerrit-Reviewer: DLynch <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits