Trevor Parscal has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/67465


Change subject: Insert Reference (WIP, thou shalt not merge)
......................................................................

Insert Reference (WIP, thou shalt not merge)

Objective:

* Allow opening reference dialog with arbitrary selection
* Auto-insert reference when selection is not a reference node

Changes:

ve.init.mw.ViewPageTarget.js
* Added reference button to toolbar

ve.ui.MWReferenceDialog.js
* Stop storing referenceNode (not needed)
* Only store internalItem on open if there's a focused node that's a reference
* Use empty document when creating a new reference

TODO:

Someone (Ed or Roan) should finish this commit for me.

Change-Id: I839ae165c299248484ce93d4ab087318a95fbb94
---
M modules/ve/init/mw/targets/ve.init.mw.ViewPageTarget.js
M modules/ve/ui/dialogs/ve.ui.MWReferenceDialog.js
2 files changed, 31 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/65/67465/1

diff --git a/modules/ve/init/mw/targets/ve.init.mw.ViewPageTarget.js 
b/modules/ve/init/mw/targets/ve.init.mw.ViewPageTarget.js
index cab71c5..8eabb88 100644
--- a/modules/ve/init/mw/targets/ve.init.mw.ViewPageTarget.js
+++ b/modules/ve/init/mw/targets/ve.init.mw.ViewPageTarget.js
@@ -169,7 +169,7 @@
 ve.init.mw.ViewPageTarget.static.toolbarTools = [
        { 'items': ['undo', 'redo'] },
        { 'items': ['mwFormat'] },
-       { 'items': ['bold', 'italic', 'mwLink', 'clear', 'mwMediaInsert'] },
+       { 'items': ['bold', 'italic', 'mwLink', 'clear', 'mwMediaInsert', 
'mwReference'] },
        { 'items': ['number', 'bullet', 'outdent', 'indent'] }
 ];
 
diff --git a/modules/ve/ui/dialogs/ve.ui.MWReferenceDialog.js 
b/modules/ve/ui/dialogs/ve.ui.MWReferenceDialog.js
index 99db37d..8705826 100644
--- a/modules/ve/ui/dialogs/ve.ui.MWReferenceDialog.js
+++ b/modules/ve/ui/dialogs/ve.ui.MWReferenceDialog.js
@@ -20,7 +20,6 @@
        ve.ui.Dialog.call( this, surface, config );
 
        // Properties
-       this.referenceNode = null;
        this.internalItem = null;
 };
 
@@ -57,25 +56,26 @@
  * @method
  */
 ve.ui.MWReferenceDialog.prototype.onOpen = function () {
-       var doc = this.surface.getModel().getDocument();
+       var focusedNode, doc, data;
 
        // Parent method
        ve.ui.Dialog.prototype.onOpen.call( this );
 
-       this.referenceNode = this.surface.getView().getFocusedNode();
-       this.internalItem = this.referenceNode.getModel().getInternalItem();
+       // Get data from selection
+       focusedNode = this.surface.getView().getFocusedNode();
+       if ( focusedNode instanceof ve.ce.MWReferenceNode ) {
+               this.internalItem = focusedNode.getModel().getInternalItem();
+               doc = this.surface.getModel().getDocument();
+               data = doc.getStore(), doc.getData( 
this.internalItem.getRange(), true );
+       } else {
+               data = [];
+       }
 
        // Properties
        this.referenceSurface = new ve.ui.Surface(
-               // TODO: Move these details into something like 
ve.dm.SurfaceFragment
-               new ve.dm.ElementLinearData(
-                       doc.getStore(), doc.getData( 
this.internalItem.getRange(), true )
-               ),
-               { '$$': this.frame.$$ }
+               new ve.dm.ElementLinearData( data ), { '$$': this.frame.$$ }
        );
-       this.referenceToolbar = new ve.ui.Toolbar(
-               this.referenceSurface, { '$$': this.frame.$$ }
-       );
+       this.referenceToolbar = new ve.ui.Toolbar( this.referenceSurface, { 
'$$': this.frame.$$ } );
 
        // Initialization
        this.referenceToolbar.$.addClass( 've-ui-mwReferenceDialog-toolbar' );
@@ -92,23 +92,32 @@
  * @param {string} action Action that caused the window to be closed
  */
 ve.ui.MWReferenceDialog.prototype.onClose = function ( action ) {
-       var tx,
-               doc = this.surface.getModel().getDocument();
+       var data, doc,
+               txs = [];
 
        // Parent method
        ve.ui.Dialog.prototype.onOpen.call( this );
 
-       // TODO: Make this actually work
+       // Save changes
        if ( action === 'apply' ) {
-               tx = ve.dm.Transaction.newFromNodeReplacement(
-                       doc,
-                       this.internalItem.getRange(),
-                       this.referenceSurface.getModel().getDocument().getData()
-               );
-               this.surface.getModel().change( tx );
+               data = this.referenceSurface.getModel().getDocument().getData();
+               doc = this.surface.getModel().getDocument();
+               if ( this.internalItem ) {
+                       txs.push(
+                               ve.dm.Transaction.newFromNodeReplacement(
+                                       doc, this.internalItem.getRange(), data
+                               )
+                       );
+               } else {
+                       // TODO: Implement
+                       // Insert new reference internal item at the end of the 
current selection
+                       // Insert new reference node that uses internal item
+               }
+               this.surface.getModel().change( txs );
        }
 
        // Cleanup
+       this.internalItem = null;
        this.referenceSurface.destroy();
        this.referenceToolbar.destroy();
 };

-- 
To view, visit https://gerrit.wikimedia.org/r/67465
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I839ae165c299248484ce93d4ab087318a95fbb94
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to