Bartosz Dziewoński has uploaded a new change for review.

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

Change subject: mediawiki.htmlform: Simplify parsing of 'hide-if' expressions
......................................................................

mediawiki.htmlform: Simplify parsing of 'hide-if' expressions

I'm actually not sure if this is an improvement.

Change-Id: I5dfb3d3331eb3407d8e450a73bd3a55c59067ea0
---
M resources/src/mediawiki/mediawiki.htmlform.js
1 file changed, 18 insertions(+), 45 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/41/301141/1

diff --git a/resources/src/mediawiki/mediawiki.htmlform.js 
b/resources/src/mediawiki/mediawiki.htmlform.js
index 4cc7f09..c08afe7 100644
--- a/resources/src/mediawiki/mediawiki.htmlform.js
+++ b/resources/src/mediawiki/mediawiki.htmlform.js
@@ -51,7 +51,7 @@
         * @return {Function} return.1 Test function
         */
        function hideIfParse( $el, spec ) {
-               var op, i, l, v, $field, $fields, fields, func, funcs, getVal;
+               var op, i, l, v, $field, $fields, fields, method, negate, func, 
funcs, getVal;
 
                op = spec[ 0 ];
                l = spec.length;
@@ -72,57 +72,30 @@
                                }
                                $fields = $( fields );
 
-                               l = funcs.length;
+                               negate = false;
                                switch ( op ) {
-                                       case 'AND':
-                                               func = function () {
-                                                       var i;
-                                                       for ( i = 0; i < l; i++ 
) {
-                                                               if ( !funcs[ i 
]() ) {
-                                                                       return 
false;
-                                                               }
-                                                       }
-                                                       return true;
-                                               };
-                                               break;
-
-                                       case 'OR':
-                                               func = function () {
-                                                       var i;
-                                                       for ( i = 0; i < l; i++ 
) {
-                                                               if ( funcs[ i 
]() ) {
-                                                                       return 
true;
-                                                               }
-                                                       }
-                                                       return false;
-                                               };
-                                               break;
-
                                        case 'NAND':
-                                               func = function () {
-                                                       var i;
-                                                       for ( i = 0; i < l; i++ 
) {
-                                                               if ( !funcs[ i 
]() ) {
-                                                                       return 
true;
-                                                               }
-                                                       }
-                                                       return false;
-                                               };
+                                               negate = true;
+                                               /* falls through */
+                                       case 'AND':
+                                               method = 'every';
                                                break;
-
                                        case 'NOR':
-                                               func = function () {
-                                                       var i;
-                                                       for ( i = 0; i < l; i++ 
) {
-                                                               if ( funcs[ i 
]() ) {
-                                                                       return 
false;
-                                                               }
-                                                       }
-                                                       return true;
-                                               };
+                                               negate = true;
+                                               /* falls through */
+                                       case 'OR':
+                                               method = 'some';
                                                break;
                                }
 
+                               func = function () {
+                                       // This calls funcs.some() or 
funcs.every()
+                                       var result = funcs[ method ]( function 
( f ) {
+                                               return f();
+                                       } );
+                                       return negate ? !result : result;
+                               };
+
                                return [ $fields, func ];
 
                        case 'NOT':

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5dfb3d3331eb3407d8e450a73bd3a55c59067ea0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

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

Reply via email to