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

Reply via email to