From 5fc6a88e4c1d9c7562acb26ba085bc9f2d39d937 Mon Sep 17 00:00:00 2001 From: Fomafix Date: Thu, 13 Sep 2018 20:38:09 +0200 Subject: [PATCH] Change `.forEach()` to `for ()` loop with break Follow-up to change 1edba8029, which replaced: $.each( array, function ( index, value ) { ... } ) by: array.forEach( function ( value, index ) { ... } ) `jQuery.each` makes a break of the loop on a `return false`. `Array.prototype.forEach` ignores the return value and there is no way to stop or break a `forEach()` loop other than by throwing an exception. [1] A `$.each` with a `return false` could be replaced by `Array.prototype.find`, but `find()` is not part of ES5. [2] return this.getItems().find( function ( filterItem ) { return filterItem.isSelected() && filterItem.isConflicted(); } ); So a simple `for ()` loop with a `break` or a `return` is used in these cases. Also explicitly specify `undefined` as possible return value in FiltersViewModel.prototype.getFirstConflictedItem. [1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach [2] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find Change-Id: I0af89d39ed789f49e06b25cac14ecd995ba58cbd --- .../src/jquery.tablesorter/jquery.tablesorter.js | 10 ++++++---- .../mediawiki.rcfilters/dm/FiltersViewModel.js | 15 ++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/resources/src/jquery.tablesorter/jquery.tablesorter.js b/resources/src/jquery.tablesorter/jquery.tablesorter.js index 4882e9e3da..57fd3ab536 100644 --- a/resources/src/jquery.tablesorter/jquery.tablesorter.js +++ b/resources/src/jquery.tablesorter/jquery.tablesorter.js @@ -431,7 +431,8 @@ headerToColumns.forEach( function ( columns, headerIndex ) { columns.forEach( function ( columnIndex, i ) { - var header = $headers[ headerIndex ], + var j, sortColumn, + header = $headers[ headerIndex ], $header = $( header ); if ( !isValueInArray( columnIndex, sortList ) ) { @@ -442,15 +443,16 @@ } ); } else { // Column shall be sorted: Apply designated count and order. - sortList.forEach( function ( sortColumn ) { + for ( j = 0; j < sortList.length; j++ ) { + sortColumn = sortList[ j ]; if ( sortColumn[ 0 ] === i ) { $header.data( { order: sortColumn[ 1 ], count: sortColumn[ 1 ] + 1 } ); - return false; + break; } - } ); + } } } ); diff --git a/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js b/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js index d89bb288f6..2e6ababf68 100644 --- a/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js @@ -186,19 +186,16 @@ /** * Get the first item with a current conflict * - * @return {mw.rcfilters.dm.FilterItem} Conflicted item + * @return {mw.rcfilters.dm.FilterItem|undefined} Conflicted item or undefined when not found */ FiltersViewModel.prototype.getFirstConflictedItem = function () { - var conflictedItem; - - this.getItems().forEach( function ( filterItem ) { + var i, filterItem, items = this.getItems(); + for ( i = 0; i < items.length; i++ ) { + filterItem = items[ i ]; if ( filterItem.isSelected() && filterItem.isConflicted() ) { - conflictedItem = filterItem; - return false; + return filterItem; } - } ); - - return conflictedItem; + } }; /** -- 2.20.1