Pablo Grass (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/367410 )

Change subject: FormState: Add dedicated view class and initialize
......................................................................

FormState: Add dedicated view class and initialize

Add class that encapsulates the form field containing the advanced search
form state and the synchronization of data between JavaScript and DOM for it.

Bug: T171036
Change-Id: I84a08e52ffdb9345e216061d391db3e4bebadd61
---
M extension.json
M modules/ext.advancedSearch.init.js
A modules/ui/ext.advancedSearch.FormState.js
3 files changed, 48 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/AdvancedSearch 
refs/changes/10/367410/1

diff --git a/extension.json b/extension.json
index 63c8fc5..2697ac0 100644
--- a/extension.json
+++ b/extension.json
@@ -83,6 +83,7 @@
                                "ext.advancedSearch.dm.SearchModel",
                                "ext.advancedSearch.ui.ArbitraryWordInput",
                                "ext.advancedSearch.ui.FileTypeSelection",
+                               "ext.advancedSearch.ui.FormState",
                                "ext.advancedSearch.ui.ExpandablePane",
                                "ext.advancedSearch.ui.ImageDimensionInput",
                                "ext.advancedSearch.ui.MenuedInput",
@@ -102,6 +103,14 @@
                                "oojs-ui"
                        ]
                },
+               "ext.advancedSearch.ui.FormState": {
+                       "scripts": [
+                               "modules/ui/ext.advancedSearch.FormState.js"
+                       ],
+                       "dependencies": [
+                               "oojs-ui"
+                       ]
+               },
                "ext.advancedSearch.ui.FileTypeSelection": {
                        "scripts": [
                                
"modules/ui/ext.advancedSearch.FileTypeSelection.js"
diff --git a/modules/ext.advancedSearch.init.js 
b/modules/ext.advancedSearch.init.js
index f115cb2..21a8966 100644
--- a/modules/ext.advancedSearch.init.js
+++ b/modules/ext.advancedSearch.init.js
@@ -18,20 +18,12 @@
                return false;
        }
 
-       function initializeCurrentSearch( state ) {
-               if ( mw.libs.advancedSearch.initializedFromUrl ) {
-                       return;
-               }
-               state.setAllFromJSON( mw.util.getParamValue( 
'advancedSearch-current' ) || '' );
-               mw.libs.advancedSearch.initializedFromUrl = true;
-       }
-
        if ( isLoaded() ) {
                return;
        }
 
        var state = new mw.libs.advancedSearch.dm.SearchModel();
-       initializeCurrentSearch( state );
+       state.setAllFromJSON( mw.util.getParamValue( 'advancedSearch-current' ) 
|| '' );
 
        // TODO initialize with API call instead
        var templateModel = new mw.libs.advancedSearch.dm.MenuDataModel( {
@@ -489,16 +481,11 @@
                        .after( $compiledSearchField );
        } );
 
-       // TODO Move this element into an OOUI component with the state as 
constructor param
-       var $currentSearch = $( '<input>' ).prop( {
-               name: 'advancedSearch-current',
-               type: 'hidden'
+       var currentSearch = new mw.libs.advancedSearch.ui.FormState( state, {
+               name: 'advancedSearch-current'
        } );
 
-       state.on( 'update', function () {
-               $currentSearch.val( state.toJSON() );
-       } );
-       $search.append( $currentSearch );
+       $search.append( currentSearch.$element );
 
        var namespaceSelection = new 
mw.libs.advancedSearch.ui.NamespaceFilters( state, {
                        namespaces: prepareNamespaces()
diff --git a/modules/ui/ext.advancedSearch.FormState.js 
b/modules/ui/ext.advancedSearch.FormState.js
new file mode 100644
index 0000000..742b220
--- /dev/null
+++ b/modules/ui/ext.advancedSearch.FormState.js
@@ -0,0 +1,35 @@
+( function ( mw ) {
+       'use strict';
+
+       mw.libs = mw.libs || {};
+       mw.libs.advancedSearch = mw.libs.advancedSearch || {};
+       mw.libs.advancedSearch.ui = mw.libs.advancedSearch.ui || {};
+
+       /**
+        * @class
+        * @extends {OO.ui.HiddenInputWidget}
+        * @constructor
+        *
+        * @param  {ext.advancedSearch.dm.SearchModel} store
+        * @param  {Object} config
+        */
+       mw.libs.advancedSearch.ui.FormState = function ( store, config ) {
+               this.store = store;
+               mw.libs.advancedSearch.ui.FormState.parent.call( this, config );
+
+               this.store.connect( this, { update: 'onStoreUpdate' } );
+
+               this.populateFromStore();
+       };
+
+       OO.inheritClass( mw.libs.advancedSearch.ui.FormState, 
OO.ui.HiddenInputWidget );
+
+       mw.libs.advancedSearch.ui.FormState.prototype.onStoreUpdate = function 
() {
+               this.populateFromStore();
+       };
+
+       mw.libs.advancedSearch.ui.FormState.prototype.populateFromStore = 
function () {
+               this.$element.val( this.store.toJSON() );
+       };
+
+}( mediaWiki ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I84a08e52ffdb9345e216061d391db3e4bebadd61
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AdvancedSearch
Gerrit-Branch: master
Gerrit-Owner: Pablo Grass (WMDE) <pablo.gr...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to