Esanders has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/358928 )
Change subject: Keep TOC in correct place in document
......................................................................
Keep TOC in correct place in document
Change-Id: I6ad8cd8cbd7ef902204408673eb096b7405abd24
---
M extension.json
M modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
M modules/ve-mw/init/ve.init.mw.ArticleTarget.js
A modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css
M modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js
5 files changed, 29 insertions(+), 11 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/28/358928/1
diff --git a/extension.json b/extension.json
index ebcd257..8ed2591 100644
--- a/extension.json
+++ b/extension.json
@@ -1611,6 +1611,7 @@
"modules/ve-mw/ui/styles/widgets/ve.ui.MWCategoryItemWidget.css",
"modules/ve-mw/ui/styles/widgets/ve.ui.MWCategoryPopupWidget.css",
"modules/ve-mw/ui/styles/widgets/ve.ui.MWCategoryWidget.css",
+
"modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css",
"modules/ve-mw/ui/styles/dialogs/ve.ui.MWMetaDialog.css"
],
"dependencies": [
diff --git a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
index e78f212..229b501 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
@@ -760,7 +760,6 @@
// TODO: mwTocWidget should probably live in a ve.ui.MWSurface subclass
if ( mw.config.get( 'wgVisualEditorConfig' ).enableTocWidget ) {
surface.mwTocWidget = new ve.ui.MWTocWidget( this.getSurface()
);
- surface.$element.before( surface.mwTocWidget.$element );
}
this.transformCategoryLinks( $( '#catlinks' ) );
diff --git a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
index eae257b..2493492 100644
--- a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
+++ b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
@@ -1989,7 +1989,13 @@
section = this.section.toString().indexOf( 'T-' ) === 0
? +this.section.slice( 2 ) : this.section;
surfaceView = surface.getView();
$documentNode =
surfaceView.getDocument().getDocumentNode().$element;
- $section = $documentNode.find( 'h1, h2, h3, h4, h5, h6'
).eq( section - 1 );
+ // Find all headings including those inside templates,
not just HeadingNodes
+ $section = $documentNode.find( 'h1, h2, h3, h4, h5, h6'
)
+ // Ignore headings inside TOC
+ .filter( function () {
+ return $( this ).closest(
'.ve-ui-mwTocWidget' ).length === 0;
+ } )
+ .eq( section - 1 );
headingNode = $section.data( 'view' );
if ( $section.length && new mw.Uri().query.summary ===
undefined ) {
diff --git a/modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css
b/modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css
new file mode 100644
index 0000000..5aca944
--- /dev/null
+++ b/modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css
@@ -0,0 +1,6 @@
+.ve-ui-mwTocWidget {
+ cursor: default;
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js
index 4913b79..804a36d 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWTocWidget.js
@@ -32,12 +32,12 @@
this.mwTOCDisable = false;
this.$tocList = $( '<ul>' );
- this.$element.addClass( 'toc ve-ui-mwTocWidget' ).append(
+ this.$element.addClass( 'toc ve-ui-mwTocWidget ve-ce-focusableNode'
).append(
$( '<div>' ).addClass( 'toctitle' ).append(
$( '<h2>' ).text( ve.msg( 'toc' ) )
),
this.$tocList
- );
+ ).prop( 'contentEditable', 'false' );
// Setup toggle link
mw.hook( 'wikipage.content' ).fire( this.$element );
@@ -146,19 +146,22 @@
* Based on generateTOC in Linker.php
*/
ve.ui.MWTocWidget.prototype.build = function () {
- var i, l, level, levelDiff, tocNumber, modelNode, viewNode,
+ var i, l, level, levelDiff, tocNumber, modelNode, viewNode,
tocBeforeNode,
$list, $text, $item, $link,
$newTocList = $( '<ul>' ),
nodes = this.doc.getNodesByType( 'mwHeading', true ),
- documentView = this.surface.getView().getDocument(),
+ surfaceView = this.surface.getView(),
+ documentView = surfaceView.getDocument(),
lastLevel = 0,
- stack = [];
+ stack = [],
+ uri = new mw.Uri();
function getItemIndex( $list, n ) {
return $list.children( 'li' ).length + ( n === stack.length - 1
? 1 : 0 );
}
function linkClickHandler( heading ) {
+ surfaceView.focus();
ve.init.target.goToHeading( heading );
return false;
}
@@ -185,8 +188,10 @@
tocNumber = stack.map( getItemIndex ).join( '.' );
viewNode = documentView.getBranchNodeFromOffset(
modelNode.getRange().start );
+ uri.query.section = ( i + 1 ).toString();
$item = $( '<li>' ).addClass( 'toclevel-' + stack.length
).addClass( 'tocsection-' + ( i + 1 ) );
- $link = $( '<a href="#">' ).append( '<span class="tocnumber">'
+ tocNumber + '</span> ' );
+ $link = $( '<a>' ).attr( 'href', uri )
+ .append( '<span class="tocnumber">' + tocNumber +
'</span> ' );
$text = $( '<span>' ).addClass( 'toctext' );
viewNode.$tocText = $text;
@@ -198,11 +203,12 @@
lastLevel = level;
}
- this.$tocList.replaceWith( $newTocList );
- this.$tocList = $newTocList;
+ this.$tocList.empty().append( $newTocList.children() );
if ( nodes.length ) {
- this.rootLength = stack[ 0 ].children().length;
+ this.rootLength = this.$tocList.children().length;
+ tocBeforeNode = documentView.getBranchNodeFromOffset( nodes[ 0
].getRange().start );
+ tocBeforeNode.$element.before( this.$element );
} else {
this.rootLength = 0;
}
--
To view, visit https://gerrit.wikimedia.org/r/358928
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6ad8cd8cbd7ef902204408673eb096b7405abd24
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits