Sitic has submitted this change and it was merged.

Change subject: Add support for subdivided watchlists
......................................................................


Add support for subdivided watchlists

Bug: T109188
Change-Id: Ie304ae098488c00a8fe924f6b30f254983d1a1c5
---
M frontend/src/app/filters.js
M frontend/src/app/main/main.controller.js
M frontend/src/app/main/main.html
M frontend/src/app/services.js
M frontend/src/components/notifications/notifications.html
M frontend/src/components/settings/settings.html
A frontend/src/components/watchlist/seperated.html
R frontend/src/components/watchlist/unified.html
M frontend/src/i18n/de.json
M frontend/src/i18n/en.json
M frontend/src/i18n/qqq.json
11 files changed, 89 insertions(+), 18 deletions(-)

Approvals:
  Sitic: Verified; Looks good to me, approved



diff --git a/frontend/src/app/filters.js b/frontend/src/app/filters.js
index 48a9021..8f3376f 100644
--- a/frontend/src/app/filters.js
+++ b/frontend/src/app/filters.js
@@ -4,7 +4,7 @@
   .filter('urlEncode', urlEncodeFilter)
   .filter('list', listFilter)
   .filter('watchlist', watchlistFilter)
-  .filter('projects', projectsFilter)
+  .filter('projectList', projectsFilter)
 ;
 
 /**
@@ -99,7 +99,11 @@
 }
 
 function projectsFilter () {
-  return function (items, projects) {
-    return items.filter(projectsFilterFunc, projects)
+  return function (items, config) {
+    return items.filter(projectListFilterFunc, config)
   };
 }
+
+function projectListFilterFunc (items) {
+  return (this.projectsSelected.indexOf(items) > -1);
+}
diff --git a/frontend/src/app/main/main.controller.js 
b/frontend/src/app/main/main.controller.js
index 373ac21..ac0db54 100644
--- a/frontend/src/app/main/main.controller.js
+++ b/frontend/src/app/main/main.controller.js
@@ -1,7 +1,8 @@
 'use strict';
 
 angular.module('crosswatch')
-  .controller('MainCtrl', function (textDirection) {
+  .controller('MainCtrl', function (textDirection, dataService) {
     var vm = this;
     vm.textDirection = textDirection;
+    vm.config = dataService.config;
   });
diff --git a/frontend/src/app/main/main.html b/frontend/src/app/main/main.html
index 01e1c92..7565173 100644
--- a/frontend/src/app/main/main.html
+++ b/frontend/src/app/main/main.html
@@ -3,7 +3,8 @@
   <div layout="column" flex class="md-padding" role="main">
     <div ng-include="'components/settings/settings.html'"></div>
     <div ng-include="'components/notifications/notifications.html'"></div>
-    <div ng-include="'components/watchlist/watchlist.html'"></div>
+    <div ng-if="!ctrl.config.subdivided" 
ng-include="'components/watchlist/unified.html'"></div>
+    <div ng-if="ctrl.config.subdivided" 
ng-include="'components/watchlist/seperated.html'"></div>
   </div>
 
   <ng-include src="'components/footer/footer.html'"></ng-include>
diff --git a/frontend/src/app/services.js b/frontend/src/app/services.js
index 1859ce2..3156bda 100644
--- a/frontend/src/app/services.js
+++ b/frontend/src/app/services.js
@@ -44,6 +44,10 @@
    */
   vm.watchlist.active = [];
   /**
+   * Watchlist sorted as array per project
+   */
+  vm.watchlist.perProject = {};
+  /**
    * loading spinner
    */
   vm.watchlist.loading = true;
@@ -106,7 +110,12 @@
     /**
      * Automatically show diff, if edit is unreviewed and user has review right
      */
-    flaggedrevsDiff: true
+    flaggedrevsDiff: true,
+    /**
+     * true: show subdivided wikis watchlist
+     * false: show unified wikis watchlist
+     */
+    subdivided: false
   };
   // Get config from localstorage or create from defaultconfig
   if (localStorageService.get('config') !== null) {
@@ -176,6 +185,12 @@
     for (var i=0; i < entries.length; i++) {
       vm.watchlist.dict[entries[i].id] = entries[i];
     }
+
+    if (!Array.isArray(vm.watchlist.perProject[project])) {
+      vm.watchlist.perProject[project] = entries;
+    } else {
+      Array.prototype.push.apply(vm.watchlist.perProject[project], entries);
+    }
   };
 
   /**
@@ -215,10 +230,11 @@
   vm.resetWatchlist = function () {
     vm.watchlist.original = [];
     vm.watchlist.filtered = [];
-    vm.watchlist.dict = [];
+    vm.watchlist.dict = {};
     vm.watchlist.active.length = 0; /* preserve pointer, slow due to GC */
     vm.notifications.length = 0;
     vm.watchlist.loading = true;
+    vm.watchlist.perProject = {};
     vm.queryWatchlist();
     vm.saveConfig();
   };
diff --git a/frontend/src/components/notifications/notifications.html 
b/frontend/src/components/notifications/notifications.html
index 9153d1f..4409e9d 100644
--- a/frontend/src/components/notifications/notifications.html
+++ b/frontend/src/components/notifications/notifications.html
@@ -1,6 +1,6 @@
-<div ng-controller="NotificationsCtrl as ctrl" layout="row" 
layout-align="center center" class="md-padding">
-  <md-whiteframe class="md-whiteframe-z5" ng-class="(ctrl.config.oneline) ? 
'whitebox-oneline' : 'whitebox'"
-                 ng-if="ctrl.notifications.length">
+<div ng-controller="NotificationsCtrl as ctrl" layout="row" 
layout-align="center center" class="md-padding"
+     ng-if="ctrl.notifications.length">
+  <md-whiteframe class="md-whiteframe-z5" ng-class="(ctrl.config.oneline) ? 
'whitebox-oneline' : 'whitebox'">
     <md-toolbar class='md-small-tall'>
       <div class="md-toolbar-tools">
         <h1>
diff --git a/frontend/src/components/settings/settings.html 
b/frontend/src/components/settings/settings.html
index 2f4f1b2..4cf99d7 100644
--- a/frontend/src/components/settings/settings.html
+++ b/frontend/src/components/settings/settings.html
@@ -54,6 +54,10 @@
                 <p translate="ONELINE"></p>
                 <md-checkbox ng-model="ctrl.config.oneline" 
ng-change="ctrl.saveConfig()"></md-checkbox>
               </md-list-item>
+              <md-list-item>
+                <p translate="SUBDIVIDED"></p>
+                <md-checkbox ng-model="ctrl.config.subdivided" 
ng-change="ctrl.saveConfig()"></md-checkbox>
+              </md-list-item>
             </div>
           </md-list>
         </div>
@@ -85,16 +89,20 @@
           <div flex="50">
             <md-list layout="column" class="md-padding">
               <md-list-item>
-                <p translate="FLAGS"></p>
-                <md-checkbox ng-model="ctrl.config.flagsenable" 
ng-change="ctrl.saveConfig()"></md-checkbox>
+                <p translate="SUBDIVIDED"></p>
+                <md-checkbox ng-model="ctrl.config.subdivided" 
ng-change="ctrl.saveConfig()"></md-checkbox>
+              </md-list-item>
+              <md-list-item title="{{'FLAGGEDREVS_TOOLTIP' | translate}}">
+                <p translate="FLAGGEDREVS_OPTION"></p>
+                <md-checkbox ng-model="ctrl.config.flaggedrevsDiff" 
ng-change="ctrl.resetWatchlist()"></md-checkbox>
               </md-list-item>
               <md-list-item title="{{'ORES_TOOLTIP' | translate}}">
                 <p translate="ORES_OPTION"></p>
                 <md-checkbox ng-model="ctrl.config.oresDiff" 
ng-change="ctrl.resetWatchlist()"></md-checkbox>
               </md-list-item>
-              <md-list-item title="{{'FLAGGEDREVS_TOOLTIP' | translate}}">
-                <p translate="FLAGGEDREVS_OPTION"></p>
-                <md-checkbox ng-model="ctrl.config.flaggedrevsDiff" 
ng-change="ctrl.resetWatchlist()"></md-checkbox>
+              <md-list-item>
+                <p translate="FLAGS"></p>
+                <md-checkbox ng-model="ctrl.config.flagsenable" 
ng-change="ctrl.saveConfig()"></md-checkbox>
               </md-list-item>
             </md-list>
           </div>
diff --git a/frontend/src/components/watchlist/seperated.html 
b/frontend/src/components/watchlist/seperated.html
new file mode 100644
index 0000000..e06a340
--- /dev/null
+++ b/frontend/src/components/watchlist/seperated.html
@@ -0,0 +1,38 @@
+<div ng-controller="WatchlistCtrl as ctrl" class="md-padding">
+  <div layout="row" layout-align="center center" class="md-padding" 
ng-if="ctrl.watchlist.loading">
+    <md-whiteframe class="md-whiteframe-z5 whitebox">
+      <md-toolbar class='md-small-tall'>
+        <div class="md-toolbar-tools">
+          <h1>
+            {{'WATCHLIST' | translate}}
+          </h1>
+        </div>
+      </md-toolbar>
+      <md-list>
+        <md-list-item layout="row" layout-align="center center">
+          <md-progress-circular md-mode="indeterminate"></md-progress-circular>
+        </md-list-item>
+      </md-list>
+    </md-whiteframe>
+  </div>
+  <div ng-repeat="project in ctrl.config.projectsSelected | 
projectList:ctrl.config" class="md-padding"
+       layout="row" layout-align="center center" 
ng-if="(ctrl.watchlist.perProject[project] | watchlist:ctrl.config).length">
+    <md-whiteframe class="md-whiteframe-z5" ng-class="(ctrl.config.oneline) ? 
'whitebox-oneline' : 'whitebox'">
+      <md-toolbar class='md-small-tall'>
+        <div class="md-toolbar-tools">
+          <h1>
+            {{project}}
+          </h1>
+        </div>
+      </md-toolbar>
+      <md-list class="watchlist-container">
+        <md-list-item layout="row" class="watchlist"
+                      ng-class="[{'watchlist-list-item-oneline': 
ctrl.config.oneline}, ctrl.config.projectColors[event.project]]"
+                      ng-repeat="event in ctrl.watchlist.perProject[project] | 
watchlist:ctrl.config track by event.id">
+          <watchlist-entry ng-click="ctrl.clicked(event)" 
md-ink-ripple></watchlist-entry>
+          <md-divider></md-divider>
+        </md-list-item>
+      </md-list>
+    </md-whiteframe>
+  </div>
+</div>
diff --git a/frontend/src/components/watchlist/watchlist.html 
b/frontend/src/components/watchlist/unified.html
similarity index 100%
rename from frontend/src/components/watchlist/watchlist.html
rename to frontend/src/components/watchlist/unified.html
diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json
index 0534c7b..4afc13a 100644
--- a/frontend/src/i18n/de.json
+++ b/frontend/src/i18n/de.json
@@ -74,5 +74,6 @@
   "WATCHLIST_ADD": "Diese Seite zu meiner Beobachtungsliste hinzufügen",
   "ORES_OPTION": "Zeige Versionsänderungen für ORES vorhergesagten Reverts",
   "PENDING_EDITS": "sichten",
-  "FLAGGEDREVS_OPTION": "Zeige Versionsänderungen für ungesichtete 
Bearbeitungen"
+  "FLAGGEDREVS_OPTION": "Zeige Versionsänderungen für ungesichtete 
Bearbeitungen",
+  "SUBDIVIDED": "Zeige die Beobachtungsliste für jedes wiki seperat"
 }
diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json
index 8ffad14..c03facc 100644
--- a/frontend/src/i18n/en.json
+++ b/frontend/src/i18n/en.json
@@ -92,5 +92,6 @@
   "FLAGGEDREVS_OPTION": "Show diff for pending changes needing review",
   "FLAGGEDREVS_TOOLTIP": "Show diff for unreviewed changes, if you have the 
review permission for a wiki which uses the FlaggedRevs extension.",
   "SHOW_DIFF": "show diff",
-  "COLLAPSE": "collapse"
+  "COLLAPSE": "collapse",
+  "SUBDIVIDED": "Show individual watchlist for each wiki"
 }
diff --git a/frontend/src/i18n/qqq.json b/frontend/src/i18n/qqq.json
index a60c829..5386e89 100644
--- a/frontend/src/i18n/qqq.json
+++ b/frontend/src/i18n/qqq.json
@@ -60,5 +60,6 @@
   "FLAGGEDREVS_OPTION": "Checkbox to enable the option, pending changes are 
edits needing review (for 
[[:mw:Help:Extension:FlaggedRevs|Extension:FlaggedRevs]])",
   "FLAGGEDREVS_TOOLTIP": "Tooltip for \"FLAGGEDREVS_OPTION\"",
   "SHOW_DIFF": "Tooltip for button to show diff preview",
-  "COLLAPSE": "Tooltip for button to collapse the expanded view"
+  "COLLAPSE": "Tooltip for button to collapse the expanded view",
+  "SUBDIVIDED": "Checkbox to switch to a subdiveded watchlist (shows the 
watchlist for each wiki separately), instead of a combined watchlist"
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie304ae098488c00a8fe924f6b30f254983d1a1c5
Gerrit-PatchSet: 5
Gerrit-Project: labs/tools/crosswatch
Gerrit-Branch: master
Gerrit-Owner: Sitic <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: Sitic <[email protected]>

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

Reply via email to