jenkins-bot has submitted this change and it was merged.

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


Make new error element

Bug: T114754
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, 180 insertions(+), 57 deletions(-)

Approvals:
  Esanders: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/extension.json b/extension.json
index 4cb77f7..2dca8ac 100644
--- a/extension.json
+++ b/extension.json
@@ -983,6 +983,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",
@@ -995,6 +996,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.MWAceEditorWidget.css",
                                
"modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.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..6766185
--- /dev/null
+++ b/modules/ve-mw/ui/elements/ve.ui.MWExpandableErrorElement.js
@@ -0,0 +1,131 @@
+/*!
+ * VisualEditor UserInterface MWExpandableErrorElement class.
+ *
+ * @copyright 2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * 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.toggle( false );
+       this.label = new OO.ui.LabelWidget( {
+               classes: [ 've-ui-mwExpandableErrorElement-label' ]
+       } );
+       this.button = new OO.ui.ButtonWidget( {
+               framed: false,
+               classes: [ 've-ui-mwExpandableErrorElement-button' ],
+               icon: 'expand'
+       } ).toggle( false );
+
+       this.$element.append(
+               this.button.$element,
+               this.label.$element
+       ).addClass( 've-ui-mwExpandableErrorElement' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWExpandableErrorElement, OO.ui.Element );
+
+OO.mixinClass( ve.ui.MWExpandableErrorElement, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * @event update
+ */
+
+/* Methods */
+
+/**
+ * Set the expandability of the error.
+ *
+ * @param {boolean} [expandable] Value to set the expandability to,
+ * determine based on label size if omitted
+ */
+ve.ui.MWExpandableErrorElement.prototype.setExpandable = function ( expandable 
) {
+       if ( expandable !== undefined ) {
+               this.expandable = expandable;
+       } else {
+               // Check if error fits when in not-expandable mode
+               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.toggle( true );
+
+       this.setExpandable();
+
+       if ( this.expandable ) {
+               this.label.$element.addClass( 
've-ui-mwExpandableErrorElement-label-collapsed' );
+               this.button.toggle( true );
+               this.button.connect( this, { click: 'toggleLabel' } );
+       }
+
+       this.emit( 'update' );
+};
+
+/**
+ * Hide and collapse the error element, remove the label, and set expandable
+ * to false.
+ */
+ve.ui.MWExpandableErrorElement.prototype.clear = function () {
+       this.label.setLabel( null );
+       this.toggle( false );
+
+       this.button.toggle( false );
+       this.button.disconnect( this );
+       this.toggleLabel( false );
+
+       this.emit( 'update' );
+};
+
+/**
+ * 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;
+
+       // Update DOM based on the new state of this.expanded
+       this.button.setIcon( this.expanded ? 'collapse' : 'expand' );
+       this.label.$element
+               .toggleClass( 've-ui-mwExpandableErrorElement-label-expanded', 
this.expanded )
+               .toggleClass( 've-ui-mwExpandableErrorElement-label-collapsed', 
!this.expanded );
+
+       this.emit( 'update' );
+};
diff --git a/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js 
b/modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js
index 4147d78..7073dd7 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, {
+                               update: '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.clear();
+                       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.clear();
 };
 
 /**
@@ -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: merged
Gerrit-Change-Id: I5839ba62fe4b4708ff51dc549c5294189d7f8843
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Tchanders <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: DLynch <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Tchanders <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to