Sitic has submitted this change and it was merged.

Change subject: Improved logevent support
......................................................................


Improved logevent support

* Added list filter, fixed design bugs.
* Added user and page directive.
* Refactored code from service to directives.
* Fixed complicated translation variables.
* Added de translations.

Bug: T100339
Change-Id: Idd01bed6705c9fae0b945a21f5e73b516a25d5d6
---
M frontend/src/app/index.css
M frontend/src/app/index.js
M frontend/src/app/translationProvider.js
M frontend/src/components/watchlist/edit.directive.html
M frontend/src/components/watchlist/edit.directive.js
M frontend/src/components/watchlist/entry.directive.html
M frontend/src/components/watchlist/logevent.directive.html
M frontend/src/components/watchlist/logevent.directive.js
A frontend/src/components/watchlist/page.directive.js
A frontend/src/components/watchlist/user.directive.js
M frontend/src/components/watchlist/watchlist.html
M frontend/src/i18n/locale-de.json
M frontend/src/i18n/locale-en.json
13 files changed, 199 insertions(+), 131 deletions(-)

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



diff --git a/frontend/src/app/index.css b/frontend/src/app/index.css
index a501dc1..57f3fd6 100644
--- a/frontend/src/app/index.css
+++ b/frontend/src/app/index.css
@@ -89,6 +89,10 @@
   overflow: hidden;
 }
 
+.watchlist a{
+  color:#0645ad;
+}
+
 .watchlist .left {
   float: left;
   width: 125px;
@@ -96,6 +100,7 @@
 
 .watchlist .right {
   width: auto;
+  overflow: hidden;
   word-break: break-all;
 }
 
diff --git a/frontend/src/app/index.js b/frontend/src/app/index.js
index 9a7fb4e..88c29da 100644
--- a/frontend/src/app/index.js
+++ b/frontend/src/app/index.js
@@ -16,6 +16,7 @@
   .config(storageConfig)
   .factory('socket', socketFactory)
   .filter('urlEncode', urlEncodeFilter)
+  .filter('list', listFiler)
   .service('authService', authService)
   .service('dataService', dataService)
   .run(runBlock)
@@ -59,11 +60,29 @@
   });
 }
 
-/*
+/**
  * Filter for encoding strings for use in URL query strings
  */
 function urlEncodeFilter () {
   return window.encodeURIComponent;
+}
+
+/**
+ * Formats lists:
+ *   ["a", "b", "c"] -> "(a, b, c)"
+ *   [] -> "(–)"
+ */
+function listFiler () {
+  return function (list) {
+    list = list || [];
+    var result = list.join(', ');
+    if (result.length === 0) {
+      result = "–";
+    }
+    result = "(" + result + ")";
+
+    return result;
+  }
 }
 
 function authService (localStorageService, $rootScope, $log) {
@@ -143,53 +162,7 @@
    * @param entries
    */
   vm.addWatchlistEntries = function (entries) {
-    for (var i = 0; i < entries.length; i++) {
-      if (entries[i].type === 'edit') {
-        var byte_change = entries[i].newlen - entries[i].oldlen;
-        entries[i].bytes = vm.numberFormat(byte_change);
-        entries[i].bytestyle = vm.byteStyle(byte_change);
-        entries[i].titlestyle = 
vm.titleStyle(entries[i].notificationtimestamp);
-      } else {
-        /*
-         * Make html partials used by the translation templates
-         */
-        entries[i].username = vm.usernameHTML(entries[i].projecturl, 
entries[i].user);
-        entries[i].page = vm.titleHTML(entries[i].projecturl, 
entries[i].title);
-
-        if (entries[i].logtype === 'move') {
-          entries[i].target_title = vm.titleHTML(entries[i].projecturl, 
entries[i].target_title);
-        } else if (entries[i].logaction === 'move_prot') {
-          entries[i].target_title = vm.titleHTML(entries[i].projecturl, 
entries[i].logparams['0']);
-        } else if (entries[i].logtype === 'protect') {
-          entries[i].protection_level = entries[i].logparams['0'];
-        }
-      }
-    }
     vm.watchlist.push.apply(vm.watchlist, entries);
-  };
-
-  /**
-   * Build <a href> tag for a username
-   * TODO: Make a directive out of it?
-   * @param projecturl
-   * @param user
-   * @returns {string}
-   */
-  vm.usernameHTML = function (projecturl, user) {
-    var html = "<a href=\"" + projecturl + "/wiki/User:" + user + "\" 
target=\"_blank\">" + user + "</a>";
-    return html;
-  };
-
-  /**
-   * Build <a href> tag for a page
-   * TODO: Make a directive out of it?
-   * @param projecturl
-   * @param title
-   * @returns {string}
-   */
-  vm.titleHTML = function (projecturl, title) {
-    var html = "<a href=\"" + projecturl + "/wiki/" + title +"\" 
target=\"_blank\">" + title + "</a>";
-    return html;
   };
 
   /**
@@ -206,53 +179,6 @@
    */
   vm.saveConfig = function() {
     localStorageService.set('config', vm.config);
-  };
-
-  /**
-   * Formats the string for the number of changed bytes in a edit.
-   * @param x
-   * @returns human readable number
-   */
-  vm.numberFormat =  function (x) {
-    var result = $filter('number')(x);
-    if (x > 0) {
-      result = '+' + result;
-    }
-    return result;
-  };
-
-  /**
-   * Get span class name from the number of changed bytes in a edit.
-   * @param byte_change
-   * @returns span class name
-   */
-  vm.byteStyle = function (byte_change) {
-    var result;
-    if (byte_change <= -500) {
-      result = 'text-danger strong';
-    } else if (byte_change < 0) {
-      result = 'text-danger';
-    } else if (byte_change === 0) {
-      result = 'text-muted';
-    } else if (byte_change >= 500) {
-      result = 'text-success strong';
-    } else { // 0 < byte_change <= 500
-      result = 'text-success';
-    }
-    return result;
-  };
-
-  /**
-   * Returns style for the page title based on the notificationtimestamp
-   * @param timestamp
-   * @returns {*}
-   */
-  vm.titleStyle = function(timestamp) {
-    if (timestamp) {
-      return 'mw-title';
-    } else {
-      return '';
-    }
   };
 
   /**
diff --git a/frontend/src/app/translationProvider.js 
b/frontend/src/app/translationProvider.js
index 3df9735..06d6881 100644
--- a/frontend/src/app/translationProvider.js
+++ b/frontend/src/app/translationProvider.js
@@ -26,6 +26,7 @@
     // translation config
     $translateProvider
       .useSanitizeValueStrategy('sanitizeParameters')
+      .usePostCompiling(true)
       .useStaticFilesLoader({
         prefix: 'i18n/locale-',
         suffix: '.json'
diff --git a/frontend/src/components/watchlist/edit.directive.html 
b/frontend/src/components/watchlist/edit.directive.html
index e262046..0c6929a 100644
--- a/frontend/src/components/watchlist/edit.directive.html
+++ b/frontend/src/components/watchlist/edit.directive.html
@@ -1,10 +1,10 @@
-<span class="newpage" ng-if="::event.new" translate="NEWPAGE_FLAG"></span>
-<span class="minoredit" ng-if="::event.minor" 
translate="MINOREDIT_FLAG"></span>
-<span class="botedit" ng-if="::event.bot" translate="BOTEDIT_FLAG"></span>
+<span class="newpage" ng-if="::event.new" translate="NEWPAGE_FLAG"></span
+><span class="minoredit" ng-if="::event.minor" 
translate="MINOREDIT_FLAG"></span
+><span class="botedit" ng-if="::event.bot" translate="BOTEDIT_FLAG"></span>
 <a 
href="{{::event.projecturl}}/w/index.php?oldid={{::event.old_revid}}&diff={{::event.revid}}"
    ng-class="::event.titlestyle"  target="_blank">{{::event.title}}</a>
 <span ng-class="::event.bytestyle">({{::event.bytes}})</span>
 <div>
-  <a href="{{::event.projecturl}}/wiki/User:{{::event.user | urlEncode}}"  
target="_blank">{{::event.user}}</a>
+  <user></user>
   <span ng-if="::event.parsedcomment" class="comment">(<span 
ng-bind-html="::event.parsedcomment"></span>)</span>
 </div>
diff --git a/frontend/src/components/watchlist/edit.directive.js 
b/frontend/src/components/watchlist/edit.directive.js
index d8a503e..6ce2eb2 100644
--- a/frontend/src/components/watchlist/edit.directive.js
+++ b/frontend/src/components/watchlist/edit.directive.js
@@ -5,12 +5,63 @@
 function watchlistEdit() {
   var directive = {
     link: link,
+    scope: true,
     templateUrl: 'components/watchlist/edit.directive.html',
-    restrict: 'EA'
+    restrict: 'E'
   };
   return directive;
 
-  function link(scope, element, attrs) {
-    /* */
+  function link(scope, element, attrs, ctrl) {
+    var byte_change = scope.event.newlen - scope.event.oldlen;
+    scope.event.bytes = numberFormat(byte_change);
+    scope.event.bytestyle = byteStyle(byte_change);
+    scope.event.titlestyle = titleStyle(scope.event.notificationtimestamp);
+
+    /**
+     * Formats the string for the number of changed bytes in a edit.
+     * @param x
+     * @returns human readable number
+     */
+    function numberFormat (x) {
+      var result = x.toLocaleString();
+      if (x > 0) {
+        result = '+' + result;
+      }
+      return result;
+    }
+
+    /**
+     * Get span class name from the number of changed bytes in a edit.
+     * @param byte_change
+     * @returns span class name
+     */
+    function byteStyle (byte_change) {
+      var result;
+      if (byte_change <= -500) {
+        result = 'text-danger strong';
+      } else if (byte_change < 0) {
+        result = 'text-danger';
+      } else if (byte_change === 0) {
+        result = 'text-muted';
+      } else if (byte_change >= 500) {
+        result = 'text-success strong';
+      } else { // 0 < byte_change <= 500
+        result = 'text-success';
+      }
+      return result;
+    }
+
+    /**
+     * Returns style for the page title based on the notificationtimestamp
+     * @param timestamp
+     * @returns {*}
+     */
+    function titleStyle (timestamp) {
+      if (timestamp) {
+        return 'mw-title';
+      } else {
+        return '';
+      }
+    }
   }
 }
diff --git a/frontend/src/components/watchlist/entry.directive.html 
b/frontend/src/components/watchlist/entry.directive.html
index bc18f13..88907b0 100644
--- a/frontend/src/components/watchlist/entry.directive.html
+++ b/frontend/src/components/watchlist/entry.directive.html
@@ -10,6 +10,6 @@
   </a>
 </div>
 <div class="right">
-  <watchlist-edit ng-if="event.type === 'edit'">{{::event}}</watchlist-edit>
-  <watchlist-logevent ng-if="event.type === 
'log'">{{::event}}</watchlist-logevent>
+  <watchlist-edit ng-if="event.type === 'edit'"></watchlist-edit>
+  <watchlist-logevent ng-if="event.type === 'log'"></watchlist-logevent>
 </div>
diff --git a/frontend/src/components/watchlist/logevent.directive.html 
b/frontend/src/components/watchlist/logevent.directive.html
index 344faad..d9d867f 100644
--- a/frontend/src/components/watchlist/logevent.directive.html
+++ b/frontend/src/components/watchlist/logevent.directive.html
@@ -20,7 +20,6 @@
 </span>
 <span ng-if="::event.logtype === 'block'">
   <span ng-switch="::event.logaction">
-    <!--{{event.logparams['expiry'] | amCalendar}}-->
     <span ng-switch-when="block" translate="LOGEVENT_BLOCK_BLOCK" 
translate-values="{{::event}}"></span>
     <span ng-switch-when="reblock" translate="LOGEVENT_BLOCK_REBLOCK" 
translate-values="{{::event}}"></span>
     <span ng-switch-when="unblock" translate="LOGEVENT_BLOCK_UNBLOCK" 
translate-values="{{::event}}"></span>
diff --git a/frontend/src/components/watchlist/logevent.directive.js 
b/frontend/src/components/watchlist/logevent.directive.js
index f3e33f0..b519b68 100644
--- a/frontend/src/components/watchlist/logevent.directive.js
+++ b/frontend/src/components/watchlist/logevent.directive.js
@@ -5,12 +5,35 @@
 function watchlistLogevent() {
   var directive = {
     link: link,
+    scope: true,
     templateUrl: 'components/watchlist/logevent.directive.html',
-    restrict: 'EA'
+    restrict: 'E'
   };
   return directive;
 
   function link(scope, element, attrs) {
-    /* */
+    /*
+     * copy event.logparams properties to event
+     */
+    for (var prop in scope.event.logparams) {
+      if (scope.event.logparams.hasOwnProperty(prop)) {
+        if ((isNumber(prop)) || (scope.event.hasOwnProperty(prop))) {
+          console.log(prop);
+        } else {
+          scope.event[prop] = scope.event.logparams[prop];
+        }
+      }
+    }
+
+    /*
+     * Rename badly named logparams properties
+     */
+    if (scope.event.logaction === 'move_prot') {
+      scope.event.target_title = scope.event.logparams['0'];
+    } else if (scope.event.logtype === 'protect') {
+      scope.event.protection_level = scope.event.logparams['0'];
+    }
+
+    function isNumber(obj) { return !isNaN(parseFloat(obj)) }
   }
 }
diff --git a/frontend/src/components/watchlist/page.directive.js 
b/frontend/src/components/watchlist/page.directive.js
new file mode 100644
index 0000000..043f6d4
--- /dev/null
+++ b/frontend/src/components/watchlist/page.directive.js
@@ -0,0 +1,19 @@
+angular
+  .module('crosswatch')
+  .directive('page', page);
+
+function page() {
+  var directive = {
+    link: link,
+    scope: true,
+    template: '<a href="{{::event.projecturl}}/wiki/{{::event.title | 
urlEncode}}"  target="_blank">{{::event.title}}</a>',
+    restrict: 'E'
+  };
+  return directive;
+
+  function link(scope, element, attrs) {
+    if (typeof attrs.title !== 'undefined') {
+      scope.event.title = attrs.title;
+    }
+  }
+}
diff --git a/frontend/src/components/watchlist/user.directive.js 
b/frontend/src/components/watchlist/user.directive.js
new file mode 100644
index 0000000..cd21010
--- /dev/null
+++ b/frontend/src/components/watchlist/user.directive.js
@@ -0,0 +1,21 @@
+angular
+  .module('crosswatch')
+  .directive('user', user);
+
+function user() {
+  var directive = {
+    link: link,
+    scope: true,
+    template: '<a href="{{::event.projecturl}}/wiki/User:{{::event.user | 
urlEncode}}"  target="_blank">{{::event.user}}</a>',
+    restrict: 'E'
+  };
+  return directive;
+
+  function link(scope, element, attrs) {
+    if (typeof attrs.name !== 'undefined') {
+      scope.event.user = attrs.name;
+    }
+
+    scope.event.user = scope.event.user.replace("User:", "");
+  }
+}
diff --git a/frontend/src/components/watchlist/watchlist.html 
b/frontend/src/components/watchlist/watchlist.html
index f9f4d3c..583b145 100644
--- a/frontend/src/components/watchlist/watchlist.html
+++ b/frontend/src/components/watchlist/watchlist.html
@@ -38,7 +38,7 @@
   <ul class="example-animate-container">
     <li class="watchlist"
         ng-repeat="event in ctrl.watchlist| orderBy:'-timestamp' | 
filter:ctrl.searchText">
-      <watchlist-entry>{{event}}</watchlist-entry>
+      <watchlist-entry></watchlist-entry>
     </li>
   </ul>
 </div>
diff --git a/frontend/src/i18n/locale-de.json b/frontend/src/i18n/locale-de.json
index a98b473..70d1711 100644
--- a/frontend/src/i18n/locale-de.json
+++ b/frontend/src/i18n/locale-de.json
@@ -15,5 +15,28 @@
   "LASTREVONLY": "Zeige nur die letzte Änderung pro Seite",
   "TIMEPERIOD": "Zeige letzte",
   "HOURS": "{{number}} Stunden",
-  "DAYS": "{{number}} Tage"
+  "DAYS": "{{number}} Tage",
+  "LOGEVENT_DELETE_DELETE": "<user></user> löschte Seite <page></page>",
+  "LOGEVENT_DELETE_REVISION": "<user></user> änderte die Sichtbarkeit von 
Versionen der Seite <page></page>",
+  "LOGEVENT_DELETE_RESTORE": "<user></user> stellte Seite <page></page> wieder 
her",
+  "LOGEVENT_PROTECT_PROTECT": "<user></user> schütze die Seite <page></page> 
mit {{protection_level}}",
+  "LOGEVENT_PROTECT_MODIFY": "<user></user> änderte den Schutz der Seite 
<page></page> auf {{protection_level}}",
+  "LOGEVENT_PROTECT_UNPROTECT": "<user></user> hob den Schutz der Seite 
<page></page> auf",
+  "LOGEVENT_PROTECT_MOVE": "<user></user> übertrug den Seitenschutz von 
<page></page> auf <page title={{target_title}}></page>",
+  "LOGEVENT_MOVE": "<user></user> verschob <page></page> nach <page 
title={{target_title}}></page>",
+  "LOGEVENT_BLOCK_BLOCK": "<user></user> sperrte <user name={{title}}></user> 
für den Zeitraum {{duration}} mit den Parametern {{flags | list}}",
+  "LOGEVENT_BLOCK_REBLOCK": "<user></user> änderte die Sperre von <user 
name={{title}}></user> für den Zeitraum {{duration}} mit den Parametern {{flags 
| list}}",
+  "LOGEVENT_BLOCK_UNBLOCK": "<user></user> hob die Sperre von <user 
name={{title}}></user> auf",
+  "LOGEVENT_RIGHTS_AUTOPROMOTE": "<user></user> wurde automatisch von 
{{oldgroups | list}} zu {{newgroups | list}} zugeordnet",
+  "LOGEVENT_RIGHTS_RIGHTS": "<user></user> änderte die Gruppenzugehörigkeit 
für <user name={{title}}></user> von {{oldgroups | list}} zu {{newgroups | 
list}}",
+  "LOGEVENT_UPLOAD_OVERWRITE": "<user></user> lud eine neue Version von 
<page></page> hoch",
+  "LOGEVENT_UPLOAD_REVERT": "<user></user> lud <page></page> hoch",
+  "LOGEVENT_UPLOAD_UPLOAD": "<user></user> lud <page></page> hoch",
+  "LOGEVENT_IMPORT_INTERWIKI": "<user></user> importierte <page></page> aus 
einem anderen wiki",
+  "LOGEVENT_IMPORT_UPLOAD": "<user></user> importierte <page></page> durch das 
hochladen einer Datei",
+  "LOGEVENT_MERGE": "<user></user> vereinigte <page></page> in die Seite <page 
title={{dest_title}}></page> (Versionen bis zum {{mergepoint | amCalendar}})",
+  "LOGEVENT_NEWUSERS_CREATE": "Benutzerkonto <user name={{title}}></user> 
wurde erstellt",
+  "LOGEVENT_NEWUSERS_CREATE2": "Benutzerkonto <user name={{title}}></user> 
wurde von <user></user> erstellt",
+  "LOGEVENT_NEWUSERS_BYEMAIL": "Benutzerkonto <user name={{title}}></user> 
wurde von <user></user> erstellt und das Passwort wurde per E-Mail zugesandt",
+  "LOGEVENT_RENAMEUSER": "<user></user> hat <user name={{olduser}}></user> 
(mit {{edits}} Bearbeitungen) nach <user name={{newuser}}></user> umbennant"
 }
diff --git a/frontend/src/i18n/locale-en.json b/frontend/src/i18n/locale-en.json
index 339fc45..4ab9d9f 100644
--- a/frontend/src/i18n/locale-en.json
+++ b/frontend/src/i18n/locale-en.json
@@ -16,27 +16,27 @@
   "TIMEPERIOD": "Show last",
   "HOURS": "{{number}} hours",
   "DAYS": "{{number}} days",
-  "LOGEVENT_DELETE_DELETE": "{{username}} deleted page {{page}}",
-  "LOGEVENT_DELETE_REVISION": "{{username}} changed visibility of a revision 
on page {{page}}",
-  "LOGEVENT_DELETE_RESTORE": "{{username}} restored {{page}}",
-  "LOGEVENT_PROTECT_PROTECT": "{{username}} protected page {{page}} 
{{protection_level}}",
-  "LOGEVENT_PROTECT_MODIFY": "{{username}} modified protection on page 
{{page}} with parameters {{protection_level}}",
-  "LOGEVENT_PROTECT_UNPROTECT": "{{username}} unprotected page {{page}} with 
parameters {{protection_level}}",
-  "LOGEVENT_PROTECT_MOVE": "{{username}} moved protection settings from 
{{page}} to {{target_title}}",
-  "LOGEVENT_MOVE": "{{username}} moved page {{page}} to {{target_title}}",
-  "LOGEVENT_BLOCK_BLOCK": "{{username}} blocked {{page}} with an expiry time 
of {{logparams['duration']}} with parameters {{logparams['flags']}}",
-  "LOGEVENT_BLOCK_REBLOCK": "{{username}} changed block settings for {{page}} 
with an expiry time of {{logparams['duration']}} with parameters 
{{logparams['flags']}}",
-  "LOGEVENT_BLOCK_UNBLOCK": "{{username}} unblocked {{page}}",
-  "LOGEVENT_RIGHTS_AUTOPROMOTE": "{{username}} was automatically promoted from 
{{logparams['oldgroups']}} to {{logparams['newgroups']}}",
-  "LOGEVENT_RIGHTS_RIGHTS": "{{username}} changed group membership for 
{{page}} from {{logparams['oldgroups']}} to {{logparams['newgroups']}}",
-  "LOGEVENT_UPLOAD_OVERWRITE": "{{username}} uploaded a new version of 
{{page}}",
-  "LOGEVENT_UPLOAD_REVERT": "{{username}} uploaded {{page}}",
-  "LOGEVENT_UPLOAD_UPLOAD": "{{username}} uploaded {{page}}",
-  "LOGEVENT_IMPORT_INTERWIKI": "{{username}} imported {{page}} from another 
wiki",
-  "LOGEVENT_IMPORT_UPLOAD": "{{username}} imported {{page}} by file upload",
-  "LOGEVENT_MERGE": "{{username}} merged {{page}} into 
{{logparams['dest_title']}} (revisions up to {{logparams['mergepoint'] | 
amCalendar}})",
-  "LOGEVENT_NEWUSERS_CREATE": "User account {{page}} was created",
-  "LOGEVENT_NEWUSERS_CREATE2": "User account {{page}} was created by 
{{username}}",
-  "LOGEVENT_NEWUSERS_BYEMAIL": "User account {{page}} was created by 
{{username}} and password was sent by email",
-  "LOGEVENT_RENAMEUSER": "{{username}} renamed user {{logparams['olduser']}} 
({{logparams['edits']}} edits) to {{logparams['newuser']}}"
+  "LOGEVENT_DELETE_DELETE": "<user></user> deleted page <page></page>",
+  "LOGEVENT_DELETE_REVISION": "<user></user> changed visibility of a revision 
on page <page></page>",
+  "LOGEVENT_DELETE_RESTORE": "<user></user> restored <page></page>",
+  "LOGEVENT_PROTECT_PROTECT": "<user></user> protected page <page></page> with 
parameters {{protection_level}}",
+  "LOGEVENT_PROTECT_MODIFY": "<user></user> modified protection on page 
<page></page> with parameters {{protection_level}}",
+  "LOGEVENT_PROTECT_UNPROTECT": "<user></user> unprotected page <page></page>",
+  "LOGEVENT_PROTECT_MOVE": "<user></user> moved protection settings from 
<page></page> to <page title={{target_title}}></page>",
+  "LOGEVENT_MOVE": "<user></user> moved page <page></page> to <page 
title={{target_title}}></page>",
+  "LOGEVENT_BLOCK_BLOCK": "<user></user> blocked <user name={{title}}></user> 
with an expiry time of {{duration}} with parameters {{flags | list}}",
+  "LOGEVENT_BLOCK_REBLOCK": "<user></user> changed block settings for <user 
name={{title}}></user> with an expiry time of {{duration}} with parameters 
{{flags | list}}",
+  "LOGEVENT_BLOCK_UNBLOCK": "<user></user> unblocked <user 
name={{title}}></user>",
+  "LOGEVENT_RIGHTS_AUTOPROMOTE": "<user></user> was automatically promoted 
from {{oldgroups | list}} to {{newgroups | list}}",
+  "LOGEVENT_RIGHTS_RIGHTS": "<user></user> changed group membership for <user 
name={{title}}></user> from {{oldgroups | list}} to {{newgroups | list}}",
+  "LOGEVENT_UPLOAD_OVERWRITE": "<user></user> uploaded a new version of 
<page></page>",
+  "LOGEVENT_UPLOAD_REVERT": "<user></user> uploaded <page></page>",
+  "LOGEVENT_UPLOAD_UPLOAD": "<user></user> uploaded <page></page>",
+  "LOGEVENT_IMPORT_INTERWIKI": "<user></user> imported <page></page> from 
another wiki",
+  "LOGEVENT_IMPORT_UPLOAD": "<user></user> imported <page></page> by file 
upload",
+  "LOGEVENT_MERGE": "<user></user> merged <page></page> into <page 
title={{dest_title}}></page> (revisions up to {{mergepoint | amCalendar}})",
+  "LOGEVENT_NEWUSERS_CREATE": "User account <user name={{title}}></user> was 
created",
+  "LOGEVENT_NEWUSERS_CREATE2": "User account <user name={{title}}></user> was 
created by <user></user>",
+  "LOGEVENT_NEWUSERS_BYEMAIL": "User account <user name={{title}}></user> was 
created by <user></user> and password was sent by email",
+  "LOGEVENT_RENAMEUSER": "<user></user> renamed user <user 
name={{olduser}}></user> ({{edits}} edits) to <user name={{newuser}}></user>"
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Idd01bed6705c9fae0b945a21f5e73b516a25d5d6
Gerrit-PatchSet: 3
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