Tchanders has uploaded a new change for review.

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

Change subject: WIP Make new error element
......................................................................

WIP Make new error element

Change-Id: I5839ba62fe4b4708ff51dc549c5294189d7f8843
---
M extension.json
A modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js
M modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js
A modules/ve-mw/ui/styles/elements/ve.ui.MWExpandableErrorElement.css
4 files changed, 183 insertions(+), 57 deletions(-)


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

diff --git a/extension.json b/extension.json
index 90d3dfc..cfa844e 100644
--- a/extension.json
+++ b/extension.json
@@ -974,6 +974,7 @@
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWCommandHelpDialog.js",
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWCancelConfirmDialog.js",
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js",
+                               
"modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js",
                                
"modules/ve-mw/ui/tools/ve.ui.MWEditModeTool.js",
                                "modules/ve-mw/ui/tools/ve.ui.MWPopupTool.js",
                                
"modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js",
@@ -986,6 +987,7 @@
                                
"modules/ve-mw/ui/styles/inspectors/ve.ui.MWLiveExtensionInspector.css",
                                
"modules/ve-mw/ui/styles/dialogs/ve.ui.MWWelcomeDialog.css",
                                
"modules/ve-mw/ui/styles/dialogs/ve.ui.MWSaveDialog.css",
+                               
"modules/ve-mw/ui/styles/elements/ve.ui.MWExpandableErrorElement.css",
                                
"modules/ve-mw/ui/styles/tools/ve.ui.MWPopupTool.css",
                                
"modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css",
                                
"modules/ve-mw/ui/styles/tools/ve.ui.MWEducationPopupTool.css"
diff --git a/modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js 
b/modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js
new file mode 100644
index 0000000..8c68d4b
--- /dev/null
+++ b/modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js
@@ -0,0 +1,134 @@
+/*!
+ * VisualEditor UserInterface MWExpandableErrorElement class.
+ *
+ * @copyright 2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/*global ve, OO */
+
+/**
+ * MediaWiki expandable error element.
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+ve.ui.MWExpandableErrorElement = function VeUiMWExpandableErrorElement( config 
) {
+       // Parent constructor
+       ve.ui.MWExpandableErrorElement.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Interaction
+       this.expanded = false;
+       this.expandable = false;
+
+       this.$element.addClass( 'oo-ui-element-hidden' );
+       this.label = new OO.ui.LabelWidget( {
+               classes: [ 've-ui-mwExpandableErrorElement-label' ]
+       } );
+       this.button = new OO.ui.ButtonWidget( {
+               framed: false,
+               classes: [
+                       've-ui-mwExpandableErrorElement-button ' +
+                       'oo-ui-element-hidden' ],
+               icon: 'expand'
+       } );
+
+       this.$element.append(
+               this.button.$element,
+               this.label.$element
+       );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWExpandableErrorElement, OO.ui.Element );
+
+OO.mixinClass( ve.ui.MWExpandableErrorElement, OO.EventEmitter );
+
+/* Methods */
+
+/**
+ * Set this.expandable property
+ *
+ * @param {boolean} [expandable] Force expandable if true, force not
+ * expandable if false, determine based on label size if omitted
+ */
+ve.ui.MWExpandableErrorElement.prototype.setExpandable = function ( expandable 
) {
+       if ( expandable !== undefined ) {
+               this.expandable = expandable;
+       } else {
+               this.label.$element
+                       .addClass( 
've-ui-mwExpandableErrorElement-label-not-expandable' );
+               this.expandable = this.label.$element.prop( 'scrollWidth' ) >
+                       this.label.$element.innerWidth();
+       }
+       this.label.$element
+               .toggleClass( 
've-ui-mwExpandableErrorElement-label-not-expandable', !this.expandable );
+};
+
+/**
+ * Show the error and set the label to contain the error text.
+ *
+ * @param {jQuery} [$element] Element containing the error
+ */
+ve.ui.MWExpandableErrorElement.prototype.show = function ( $element ) {
+       this.label.setLabel( $element || null );
+       this.$element.removeClass( 'oo-ui-element-hidden' );
+       // Now decide whether you still want the button appended
+
+       this.setExpandable();
+
+       if ( this.expandable ) {
+               this.label.$element.addClass( 
've-ui-mwExpandableErrorElement-label-collapsed' );
+               this.button.$element.removeClass( 'oo-ui-element-hidden' );
+               this.button.connect( this, { click: 'toggleLabel' } );
+       }
+
+       this.emit( 'expandableErrorUpdate' );
+};
+
+/**
+ * Hide and collapse the error element, remove the label, and set expandable
+ * to false.
+ */
+ve.ui.MWExpandableErrorElement.prototype.hide = function () {
+       this.label.setLabel( null );
+       this.$element.addClass( 'oo-ui-element-hidden' );
+
+       this.button.$element.addClass( 'oo-ui-element-hidden' );
+       this.button.disconnect( this );
+       this.toggleLabel( false );
+
+       this.emit( 'expandableErrorUpdate' );
+};
+
+/**
+ * Toggles the label between collapsed and expanded.
+ *
+ * @param {boolean} [expand] Expand if true, collapse if false, toggle if
+ * omitted
+ */
+ve.ui.MWExpandableErrorElement.prototype.toggleLabel = function ( expand ) {
+       // Set this.expanded to the new state
+       this.expanded = expand === undefined ? !this.expanded : expand;
+
+       // Perform actions based on the new state of this.expanded
+       this.button.setIcon( this.expanded ? 'collapse' : 'expand' );
+       this.label.$element.removeClass(
+               've-ui-mwExpandableErrorElement-label-' +
+               ( this.expanded ? 'collapsed' : 'expanded' )
+       );
+       this.label.$element.addClass(
+               've-ui-mwExpandableErrorElement-label-' +
+               ( this.expanded ? 'expanded' : 'collapsed' )
+       );
+
+       this.emit( 'expandableErrorUpdate' );
+};
diff --git a/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js 
b/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js
index 4147d78..f744c40 100644
--- a/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js
+++ b/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js
@@ -36,26 +36,8 @@
        // Parent method
        ve.ui.MWLiveExtensionInspector.super.prototype.initialize.call( this );
 
-       // Elements for displaying errors
-       this.$generatedContentsErrorContainer = $( '<div>', {
-               'class': 've-ui-mwLiveExtensionInspector-error-container-hidden'
-       } );
-       this.generatedContentsErrorLabel = new OO.ui.LabelWidget( {
-               classes: [
-                       've-ui-mwLiveExtensionInspector-error 
ve-ui-mwLiveExtensionInspector-error-collapsed'
-               ]
-       } );
-       this.generatedContentsErrorButton = new OO.ui.ButtonWidget( {
-               framed: false,
-               classes: [ 've-ui-mwLiveExtensionInspector-error-button' ],
-               icon: 'expand'
-       } );
-
-       this.$generatedContentsErrorContainer.append(
-               this.generatedContentsErrorButton.$element,
-               this.generatedContentsErrorLabel.$element
-       );
-       this.form.$element.append( this.$generatedContentsErrorContainer );
+       this.generatedContentsError = new ve.ui.MWExpandableErrorElement();
+       this.form.$element.append( this.generatedContentsError.$element );
 };
 
 /**
@@ -84,8 +66,11 @@
                                this.selectedNode = 
this.getFragment().getSelectedNode();
                        }
                        this.input.on( 'change', this.onChangeHandler );
+                       this.generatedContentsError.connect( this, {
+                               expandableErrorUpdate: 'updateSize'
+                       } );
                        this.selectedNode.connect( this, {
-                               generatedContentsError: 
this.renderGeneratedContentsError
+                               generatedContentsError: 
'showGeneratedContentsError'
                        } );
                }, this );
 };
@@ -96,8 +81,9 @@
 ve.ui.MWLiveExtensionInspector.prototype.getTeardownProcess = function ( data 
) {
        return 
ve.ui.MWLiveExtensionInspector.super.prototype.getTeardownProcess.call( this, 
data )
                .first( function () {
-                       this.removeGeneratedContentsError();
                        this.input.off( 'change', this.onChangeHandler );
+                       this.generatedContentsError.hide();
+                       this.generatedContentsError.disconnect( this );
                        this.selectedNode.disconnect( this );
                        if ( data === undefined ) { // cancel
                                this.getFragment().getSurface().popStaging();
@@ -135,7 +121,7 @@
 
        this.updateMwData( mwData );
 
-       this.removeGeneratedContentsError();
+       this.hideGeneratedContentsError();
 
        if ( this.visible ) {
                this.getFragment().changeAttributes( { mw: mwData } );
@@ -147,25 +133,15 @@
  *
  * @param {jQuery} $element Element containing the error
  */
-ve.ui.MWLiveExtensionInspector.prototype.renderGeneratedContentsError = 
function ( $element ) {
-       // Display the error
-       this.$generatedContentsErrorContainer
-               .removeClass( 
've-ui-mwLiveExtensionInspector-error-container-hidden' );
-       this.generatedContentsErrorLabel.setLabel( 
this.formatGeneratedContentsError( $element ) );
-       this.updateSize();
-
-       this.generatedContentsErrorButton.connect( this, { click: 
'toggleGeneratedContentsError' } );
+ve.ui.MWLiveExtensionInspector.prototype.showGeneratedContentsError = function 
( $element ) {
+       this.generatedContentsError.show( this.formatGeneratedContentsError( 
$element ) );
 };
 
 /**
  * Hide the error and collapse the error container.
  */
-ve.ui.MWLiveExtensionInspector.prototype.removeGeneratedContentsError = 
function () {
-       this.$generatedContentsErrorContainer
-               .addClass( 
've-ui-mwLiveExtensionInspector-error-container-hidden' );
-       this.generatedContentsErrorButton.setIcon( 'expand' ).disconnect( this 
);
-       this.generatedContentsErrorLabel.setLabel( null );
-       this.toggleGeneratedContentsError( true );
+ve.ui.MWLiveExtensionInspector.prototype.hideGeneratedContentsError = function 
() {
+       this.generatedContentsError.hide();
 };
 
 /**
@@ -178,24 +154,4 @@
  */
 ve.ui.MWLiveExtensionInspector.prototype.formatGeneratedContentsError = 
function ( $element ) {
        return $element;
-};
-
-/**
- * Toggle the error between collapsed and expanded.
- *
- * @param {boolean} expanded Treat the error as expanded without checking
- */
-ve.ui.MWLiveExtensionInspector.prototype.toggleGeneratedContentsError = 
function ( expanded ) {
-       // Set the correct icon on the expand/collapse button
-       expanded = expanded || this.generatedContentsErrorButton.getIcon() === 
'collapse';
-       this.generatedContentsErrorButton.setIcon( expanded ? 'expand' : 
'collapse' );
-
-       // Expand or collapse the error message
-       this.generatedContentsErrorLabel.$element
-               .removeClass(
-                       've-ui-mwLiveExtensionInspector-error-expanded 
ve-ui-mwLiveExtensionInspector-error-collapsed'
-               )
-               .addClass( 've-ui-mwLiveExtensionInspector-error-' + ( expanded 
? 'collapsed' : 'expanded' ) );
-
-       this.updateSize();
 };
diff --git 
a/modules/ve-mw/ui/styles/elements/ve.ui.MWExpandableErrorElement.css 
b/modules/ve-mw/ui/styles/elements/ve.ui.MWExpandableErrorElement.css
new file mode 100644
index 0000000..df3b457
--- /dev/null
+++ b/modules/ve-mw/ui/styles/elements/ve.ui.MWExpandableErrorElement.css
@@ -0,0 +1,34 @@
+/*!
+ * VisualEditor MediaWiki UserInterface expandable error element styles.
+ *
+ * @copyright 2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.ve-ui-mwExpandableErrorElement-label {
+       display: block;
+       margin-right: 2.5em;
+       color: #c00;
+}
+
+.ve-ui-mwExpandableErrorElement-label-collapsed {
+       white-space: nowrap;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+
+.ve-ui-mwExpandableErrorElement-label-expanded {
+       white-space: pre-wrap;
+}
+
+.ve-ui-mwExpandableErrorElement-label-not-expandable {
+       white-space: nowrap;
+       overflow: visible;
+       text-overflow: clip;
+       margin-right: 0;
+}
+
+.ve-ui-mwExpandableErrorElement-button {
+       float: right;
+       margin-top: -0.3em;
+}

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

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

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

Reply via email to