Ssmith has submitted this change and it was merged.

Change subject: Add log out button
......................................................................


Add log out button

~*stylez by pizzzacat*~

Change-Id: I29b69d735ff411cf50e507812df1f4d8c8b34052
---
M dist/index.html
M dist/js.manifest.json
R dist/scripts-59c9511f.js
M routes/data.js
M server.js
M src/components/nav-bar/nav-bar.html
6 files changed, 12 insertions(+), 7 deletions(-)

Approvals:
  Ssmith: Looks good to me, approved



diff --git a/dist/index.html b/dist/index.html
index a803c4f..ee48aad 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -3,7 +3,7 @@
 <head>
         <link rel="stylesheet" href="style-60b26a8d.css">
 
-        <script src="scripts-6ddfc5ac.js"></script>
+        <script src="scripts-59c9511f.js"></script>
     </head>
 
 <body>
diff --git a/dist/js.manifest.json b/dist/js.manifest.json
index 2738de5..0655c2e 100755
--- a/dist/js.manifest.json
+++ b/dist/js.manifest.json
@@ -1,4 +1,4 @@
 {
   "date-pickers.js": "date-pickers-d41d8cd9.js",
-  "scripts.js": "scripts-6ddfc5ac.js"
+  "scripts.js": "scripts-59c9511f.js"
 }
\ No newline at end of file
diff --git a/dist/scripts-6ddfc5ac.js b/dist/scripts-59c9511f.js
similarity index 99%
rename from dist/scripts-6ddfc5ac.js
rename to dist/scripts-59c9511f.js
index 3ab9798..96e3a72 100755
--- a/dist/scripts-6ddfc5ac.js
+++ b/dist/scripts-59c9511f.js
@@ -61,7 +61,7 @@
  * see: http://github.com/requirejs/text for details
  */
 define("text",["module"],function(t){var 
e,n,i,r,o,s=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],a=/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,l=/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,u="undefined"!=typeof
 
location&&location.href,c=u&&location.protocol&&location.protocol.replace(/\:/,""),d=u&&location.hostname,h=u&&(location.port||void
 0),p={},f=t.config&&t.config()||{};return 
e={version:"2.0.12",strip:function(t){if(t){t=t.replace(a,"");var 
e=t.match(l);e&&(t=e[1])}else t="";return t},jsEscape:function(t){return 
t.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:f.createXhr||function(){var
 t,e,n;if("undefined"!=typeof XMLHttpRequest)return new 
XMLHttpRequest;if("undefined"!=typeof 
ActiveXObject)for(e=0;3>e;e+=1){n=s[e];try{t=new 
ActiveXObject(n)}catch(i){}if(t){s=[n];break}}return 
t},parseName:function(t){var 
e,n,i,r=!1,o=t.indexOf("."),s=0===t.indexOf("./")||0===t.indexOf("../");return-1!==o&&(!s||o>1)?(e=t.substring(0,o),n=t.substring(o+1,t.length)):e=t,i=n||e,o=i.indexOf("!"),-1!==o&&(r="strip"===i.substring(o+1),i=i.substring(0,o),n?n=i:e=i),{moduleName:e,ext:n,strip:r}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(t,n,i,r){var
 o,s,a,l=e.xdRegExp.exec(t);return 
l?(o=l[2],s=l[3],s=s.split(":"),a=s[1],s=s[0],!(o&&o!==n||s&&s.toLowerCase()!==i.toLowerCase()||(a||s)&&a!==r)):!0},finishLoad:function(t,n,i,r){i=n?e.strip(i):i,f.isBuild&&(p[t]=i),r(i)},load:function(t,n,i,r){if(r&&r.isBuild&&!r.inlineText)return
 void i();f.isBuild=r&&r.isBuild;var 
o=e.parseName(t),s=o.moduleName+(o.ext?"."+o.ext:""),a=n.toUrl(s),l=f.useXhr||e.useXhr;//!strip
 part to avoid file system issues.
-return 0===a.indexOf("empty:")?void 
i():void(!u||l(a,c,d,h)?e.get(a,function(n){e.finishLoad(t,o.strip,n,i)},function(t){i.error&&i.error(t)}):n([s],function(t){e.finishLoad(o.moduleName+"."+o.ext,o.strip,t,i)}))},write:function(t,n,i){if(p.hasOwnProperty(n)){var
 r=e.jsEscape(p[n]);i.asModule(t+"!"+n,"define(function () { return 
'"+r+"';});\n")}},writeFile:function(t,n,i,r,o){var 
s=e.parseName(n),a=s.ext?"."+s.ext:"",l=s.moduleName+a,u=i.toUrl(s.moduleName+a)+".js";e.load(l,i,function(){var
 n=function(t){return r(u,t)};n.asModule=function(t,e){return 
r.asModule(t,u,e)},e.write(t,l,n,o)},o)}},"node"===f.env||!f.env&&"undefined"!=typeof
 
process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(n=require.nodeRequire("fs"),e.get=function(t,e,i){try{var
 
r=n.readFileSync(t,"utf8");0===r.indexOf("")&&(r=r.substring(1)),e(r)}catch(o){i&&i(o)}}):"xhr"===f.env||!f.env&&e.createXhr()?e.get=function(t,n,i,r){var
 o,s=e.createXhr();if(s.open("GET",t,!0),r)for(o in 
r)r.hasOwnProperty(o)&&s.setRequestHeader(o.toLowerCase(),r[o]);f.onXhr&&f.onXhr(s,t),s.onreadystatechange=function(){var
 e,r;4===s.readyState&&(e=s.status||0,e>399&&600>e?(r=new Error(t+" HTTP 
status: 
"+e),r.xhr=s,i&&i(r)):n(s.responseText),f.onXhrComplete&&f.onXhrComplete(s,t))},s.send(null)}:"rhino"===f.env||!f.env&&"undefined"!=typeof
 Packages&&"undefined"!=typeof java?e.get=function(t,e){var n,i,r="utf-8",o=new 
java.io.File(t),s=java.lang.System.getProperty("line.separator"),a=new 
java.io.BufferedReader(new java.io.InputStreamReader(new 
java.io.FileInputStream(o),r)),l="";try{for(n=new 
java.lang.StringBuffer,i=a.readLine(),i&&i.length()&&65279===i.charAt(0)&&(i=i.substring(1)),null!==i&&n.append(i);null!==(i=a.readLine());)n.append(s),n.append(i);l=String(n.toString())}finally{a.close()}e(l)}:("xpconnect"===f.env||!f.env&&"undefined"!=typeof
 
Components&&Components.classes&&Components.interfaces)&&(i=Components.classes,r=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),o="@mozilla.org/windows-registry-key;1"in
 i,e.get=function(t,e){var n,s,a,l={};o&&(t=t.replace(/\//g,"\\")),a=new 
FileUtils.File(t);try{n=i["@mozilla.org/network/file-input-stream;1"].createInstance(r.nsIFileInputStream),n.init(a,1,0,!1),s=i["@mozilla.org/intl/converter-input-stream;1"].createInstance(r.nsIConverterInputStream),s.init(n,"utf-8",n.available(),r.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),s.readString(n.available(),l),s.close(),n.close(),e(l.value)}catch(u){throw
 new Error((a&&a.path||"")+": 
"+u)}}),e}),define("text!components/nav-bar/nav-bar.html",[],function(){return'<div
 id="navContainer">\n        <div class="boxedIcon" id="showNavMenu" 
data-bind="click: showNav"><i class="fa fa-th-list"></i></div>\n        <div 
class="navWrapper">\n              <div class="row text-center">\n              
   <h2 class=\'titlebrand\'>Dash</h2>\n            </div>\n\n              <div 
class="row sidebar-nav">\n                 <div class="col-md-12">\n            
                   <div class="row-fluid">\n                                    
   <ul>\n                                          <li><span 
id="navDefaultBoard"><i class="fa fa-dashboard"></span></i></li>\n              
                              <li><span id="navProfileSettings"><i class="fa 
fa-user"></span></i></li>\n                                      </ul>\n        
                 </div>\n                                <div 
class="row-fluid">\n                                       <ul>\n               
                           <li><span id="navFavorites"><i class="fa 
fa-star-o"></span></i></li>\n                                          
<li><span id="navLibrary"><i class="fa fa-book"></span></i></li>\n              
                        </ul>\n                         </div>\n                
                <div class="row-fluid">\n                                       
<ul class="text-center" id="collapseNavMenu" data-bind="click: hideNav">\n      
                                        <span id="navCollapseArrows"><i 
class="fa fa-angle-double-left"></i></span>\n                                   
</ul>\n                         </div>\n                                <div>\n 
                                <a href="/auth/drupal" data-bind="visible: 
showLogIn">Log in</a>\n                                      <span 
data-bind="text: welcome"></span>\n                               </div>\n      
                  </div>\n                </div>\n        
</div>\n</div>\n'}),define("components/nav-bar/nav-bar",["knockout","text!components/nav-bar/nav-bar.html"],function(t,e){function
 n(e){var n=this;n.route=e.route,n.hideNav=function(){$("#navContainer 
.navWrapper").toggleClass("hide"),$("#showNavMenu").css("display","inline"),$("#dashApp").css("padding","0
 0 0 55px")},n.showNav=function(){window.setTimeout(function(){$("#navContainer 
.navWrapper").toggleClass("hide"),$("#dashApp").css("padding-left","175px")},200)},n.showLogIn=t.observable(!1),n.welcome=t.observable(""),$.get("/user/info",function(t){t?n.welcome("Welcome,
 
"+t.name):n.showLogIn(!0)})}return{viewModel:n,template:e}}),define("text!components/home/home.html",[],function(){return'<input
 data-bind="value: dashboardTitle" style="width: 200px;"/>\n 
<p>hi</p>\n<dashboard params="url: 
dashboardUrl"></dashboard>'}),define("components/home/home",["knockout","text!./home.html"],function(t,e){function
 n(e){var 
n=this;n.action=e&&e.action||"view",n.dashboardTitle=t.observable("Dashboard:test"),n.dashboardUrl=t.computed(function(){return"http://meta.wikimedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles="+n.dashboardTitle()},n)}return{viewModel:n,template:e}}),define("text!components/app-content/app-content.html",[],function(){return'<div
 class="container">\n <div class="row">\n             <div 
data-bind="component: \'fraud-gauge\'" class="col-md-4"></div>\n   
</div>\n</div>\n'}),define("components/app-content/app-content",["jquery","knockout","text!./app-content.html"],function(t,e,n){function
 i(t){var 
n=this;n.url=t.url||"hi",n.name=e.observable(),n.content=e.observable("this is 
the 
content"),n.description=e.observable(),n.graphs=e.observableArray([])}return{viewModel:i,template:n}}),define("text!components/utils/date-pickers/date-pickers.html",[],function(){return'<div
 class="form-group">\n        <div>\n\n            <label>Choose Preset Time 
Period:</label>\n            <div>\n                <label>\n                   
 <select class="form-control" id="timePeriodDropdown" data-bind="options: 
availableTimePresets, selectedOptions: chosenTimePeriodPresetDate"></select>\n  
              </label>\n            </div>\n\n            <!-- <label>Or Custom 
Date & Time:</label>\n            <div class="input-group" 
id="customTimepicker">\n                <input type="text" class="input-sm 
form-control" id="customDate" placeholder="Date" data-bind="value: 
chosenTimePeriodDate" data-provide="datepicker" name="start" />\n\n             
   <div class="input-group" id="customTimepickerRange">\n                    
<div class="bootstrap-timepicker">\n                        <input 
id="queryTimepickerFrom" type="text" class="input-sm form-control" 
placeholder="From Time" data-bind="value: chosenTimePeriodFromTime" 
data-bind="click: setupTimepicker(event)">\n                    </div>\n        
            <span class="input-group-addon">to</span>\n                    <div 
class="bootstrap-timepicker">\n                        <input 
id="queryTimepickerTo" type="text" class="input-sm form-control" 
placeholder="Time" data-bind="value: chosenTimePeriodToTime" data-bind="click: 
setupTimepicker(event)">\n                    </div>\n                </div>\n  
          </div>\n\n            <div>\n                <label>Or Custom 
Range:</label>\n                <div class="input-group" 
id="customDatepicker">\n                    <input type="text" class="input-sm 
form-control" placeholder="Date" data-bind="value: dateBeginRange" 
id="customDateFrom" data-provide="datepicker" name="start" />\n                 
   <span class="input-group-addon">to</span>\n                    <input 
type="text" class="input-sm form-control" placeholder="Date" data-bind="value: 
dateEndRange" data-provide="datepicker" name="end" />\n                </div>\n 
           </div> -->\n        </div>\n\n        </div>\n    
</div>\n</div>'}),/*!
+return 0===a.indexOf("empty:")?void 
i():void(!u||l(a,c,d,h)?e.get(a,function(n){e.finishLoad(t,o.strip,n,i)},function(t){i.error&&i.error(t)}):n([s],function(t){e.finishLoad(o.moduleName+"."+o.ext,o.strip,t,i)}))},write:function(t,n,i){if(p.hasOwnProperty(n)){var
 r=e.jsEscape(p[n]);i.asModule(t+"!"+n,"define(function () { return 
'"+r+"';});\n")}},writeFile:function(t,n,i,r,o){var 
s=e.parseName(n),a=s.ext?"."+s.ext:"",l=s.moduleName+a,u=i.toUrl(s.moduleName+a)+".js";e.load(l,i,function(){var
 n=function(t){return r(u,t)};n.asModule=function(t,e){return 
r.asModule(t,u,e)},e.write(t,l,n,o)},o)}},"node"===f.env||!f.env&&"undefined"!=typeof
 
process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(n=require.nodeRequire("fs"),e.get=function(t,e,i){try{var
 
r=n.readFileSync(t,"utf8");0===r.indexOf("")&&(r=r.substring(1)),e(r)}catch(o){i&&i(o)}}):"xhr"===f.env||!f.env&&e.createXhr()?e.get=function(t,n,i,r){var
 o,s=e.createXhr();if(s.open("GET",t,!0),r)for(o in 
r)r.hasOwnProperty(o)&&s.setRequestHeader(o.toLowerCase(),r[o]);f.onXhr&&f.onXhr(s,t),s.onreadystatechange=function(){var
 e,r;4===s.readyState&&(e=s.status||0,e>399&&600>e?(r=new Error(t+" HTTP 
status: 
"+e),r.xhr=s,i&&i(r)):n(s.responseText),f.onXhrComplete&&f.onXhrComplete(s,t))},s.send(null)}:"rhino"===f.env||!f.env&&"undefined"!=typeof
 Packages&&"undefined"!=typeof java?e.get=function(t,e){var n,i,r="utf-8",o=new 
java.io.File(t),s=java.lang.System.getProperty("line.separator"),a=new 
java.io.BufferedReader(new java.io.InputStreamReader(new 
java.io.FileInputStream(o),r)),l="";try{for(n=new 
java.lang.StringBuffer,i=a.readLine(),i&&i.length()&&65279===i.charAt(0)&&(i=i.substring(1)),null!==i&&n.append(i);null!==(i=a.readLine());)n.append(s),n.append(i);l=String(n.toString())}finally{a.close()}e(l)}:("xpconnect"===f.env||!f.env&&"undefined"!=typeof
 
Components&&Components.classes&&Components.interfaces)&&(i=Components.classes,r=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),o="@mozilla.org/windows-registry-key;1"in
 i,e.get=function(t,e){var n,s,a,l={};o&&(t=t.replace(/\//g,"\\")),a=new 
FileUtils.File(t);try{n=i["@mozilla.org/network/file-input-stream;1"].createInstance(r.nsIFileInputStream),n.init(a,1,0,!1),s=i["@mozilla.org/intl/converter-input-stream;1"].createInstance(r.nsIConverterInputStream),s.init(n,"utf-8",n.available(),r.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),s.readString(n.available(),l),s.close(),n.close(),e(l.value)}catch(u){throw
 new Error((a&&a.path||"")+": 
"+u)}}),e}),define("text!components/nav-bar/nav-bar.html",[],function(){return'<div
 id="navContainer">\n        <div class="boxedIcon" id="showNavMenu" 
data-bind="click: showNav"><i class="fa fa-th-list"></i></div>\n        <div 
class="navWrapper">\n              <div class="row text-center">\n              
   <h2 class=\'titlebrand\'>Dash</h2>\n            </div>\n\n              <div 
class="row sidebar-nav">\n                 <div class="col-md-12">\n            
                   <div class="row-fluid">\n                                    
   <ul>\n                                          <li><span 
id="navDefaultBoard"><i class="fa fa-dashboard"></span></i></li>\n              
                              <li><span id="navProfileSettings"><i class="fa 
fa-user"></span></i></li>\n                                      </ul>\n        
                 </div>\n                                <div 
class="row-fluid">\n                                       <ul>\n               
                           <li><span id="navFavorites"><i class="fa 
fa-star-o"></span></i></li>\n                                          
<li><span id="navLibrary"><i class="fa fa-book"></span></i></li>\n              
                        </ul>\n                         </div>\n                
                <div class="row-fluid">\n                                       
<ul class="text-center" id="collapseNavMenu" data-bind="click: hideNav">\n      
                                        <span id="navCollapseArrows"><i 
class="fa fa-angle-double-left"></i></span>\n                                   
</ul>\n                         </div>\n                                <div>\n 
                                <a href="/auth/drupal" data-bind="visible: 
showLogIn">Log in</a>\n                                      <p 
data-bind="text: welcome"></p>\n                                     <a 
href="/logout" data-bind="visible: !showLogIn()">Log out</a>\n                  
             </div>\n                        </div>\n                </div>\n   
     
</div>\n</div>\n'}),define("components/nav-bar/nav-bar",["knockout","text!components/nav-bar/nav-bar.html"],function(t,e){function
 n(e){var n=this;n.route=e.route,n.hideNav=function(){$("#navContainer 
.navWrapper").toggleClass("hide"),$("#showNavMenu").css("display","inline"),$("#dashApp").css("padding","0
 0 0 55px")},n.showNav=function(){window.setTimeout(function(){$("#navContainer 
.navWrapper").toggleClass("hide"),$("#dashApp").css("padding-left","175px")},200)},n.showLogIn=t.observable(!1),n.welcome=t.observable(""),$.get("/user/info",function(t){t?n.welcome("Welcome,
 
"+t.name):n.showLogIn(!0)})}return{viewModel:n,template:e}}),define("text!components/home/home.html",[],function(){return'<input
 data-bind="value: dashboardTitle" style="width: 200px;"/>\n 
<p>hi</p>\n<dashboard params="url: 
dashboardUrl"></dashboard>'}),define("components/home/home",["knockout","text!./home.html"],function(t,e){function
 n(e){var 
n=this;n.action=e&&e.action||"view",n.dashboardTitle=t.observable("Dashboard:test"),n.dashboardUrl=t.computed(function(){return"http://meta.wikimedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles="+n.dashboardTitle()},n)}return{viewModel:n,template:e}}),define("text!components/app-content/app-content.html",[],function(){return'<div
 class="container">\n <div class="row">\n             <div 
data-bind="component: \'fraud-gauge\'" class="col-md-4"></div>\n   
</div>\n</div>\n'}),define("components/app-content/app-content",["jquery","knockout","text!./app-content.html"],function(t,e,n){function
 i(t){var 
n=this;n.url=t.url||"hi",n.name=e.observable(),n.content=e.observable("this is 
the 
content"),n.description=e.observable(),n.graphs=e.observableArray([])}return{viewModel:i,template:n}}),define("text!components/utils/date-pickers/date-pickers.html",[],function(){return'<div
 class="form-group">\n        <div>\n\n            <label>Choose Preset Time 
Period:</label>\n            <div>\n                <label>\n                   
 <select class="form-control" id="timePeriodDropdown" data-bind="options: 
availableTimePresets, selectedOptions: chosenTimePeriodPresetDate"></select>\n  
              </label>\n            </div>\n\n            <!-- <label>Or Custom 
Date & Time:</label>\n            <div class="input-group" 
id="customTimepicker">\n                <input type="text" class="input-sm 
form-control" id="customDate" placeholder="Date" data-bind="value: 
chosenTimePeriodDate" data-provide="datepicker" name="start" />\n\n             
   <div class="input-group" id="customTimepickerRange">\n                    
<div class="bootstrap-timepicker">\n                        <input 
id="queryTimepickerFrom" type="text" class="input-sm form-control" 
placeholder="From Time" data-bind="value: chosenTimePeriodFromTime" 
data-bind="click: setupTimepicker(event)">\n                    </div>\n        
            <span class="input-group-addon">to</span>\n                    <div 
class="bootstrap-timepicker">\n                        <input 
id="queryTimepickerTo" type="text" class="input-sm form-control" 
placeholder="Time" data-bind="value: chosenTimePeriodToTime" data-bind="click: 
setupTimepicker(event)">\n                    </div>\n                </div>\n  
          </div>\n\n            <div>\n                <label>Or Custom 
Range:</label>\n                <div class="input-group" 
id="customDatepicker">\n                    <input type="text" class="input-sm 
form-control" placeholder="Date" data-bind="value: dateBeginRange" 
id="customDateFrom" data-provide="datepicker" name="start" />\n                 
   <span class="input-group-addon">to</span>\n                    <input 
type="text" class="input-sm form-control" placeholder="Date" data-bind="value: 
dateEndRange" data-provide="datepicker" name="end" />\n                </div>\n 
           </div> -->\n        </div>\n\n        </div>\n    
</div>\n</div>'}),/*!
  * Timepicker Component for Twitter Bootstrap
  *
  * Copyright 2013 Joris de Wit
diff --git a/routes/data.js b/routes/data.js
index 2ffba5d..e0ce18b 100644
--- a/routes/data.js
+++ b/routes/data.js
@@ -173,7 +173,7 @@
                i;
 
        if ( !req.session || !req.session.passport || 
!req.session.passport.user ) {
-               res.json( 'Error: Not logged in' );
+               res.json( { error: 'Error: Not logged in' } );
                return;
        }
 
diff --git a/server.js b/server.js
index 0ac5392..3ecf4be 100644
--- a/server.js
+++ b/server.js
@@ -81,6 +81,10 @@
        function( req, res ) {
                res.redirect( '/' );
        });
+app.get( '/logout', function( req, res ) {
+       req.logout();
+       res.redirect( '/' );
+});
 
 server = app.listen(
                serverConfig[3],
diff --git a/src/components/nav-bar/nav-bar.html 
b/src/components/nav-bar/nav-bar.html
index 55f65ae..f6967a0 100644
--- a/src/components/nav-bar/nav-bar.html
+++ b/src/components/nav-bar/nav-bar.html
@@ -24,9 +24,10 @@
                                                <span id="navCollapseArrows"><i 
class="fa fa-angle-double-left"></i></span>
                                        </ul>
                                </div>
-                               <div>
-                                       <a href="/auth/drupal" 
data-bind="visible: showLogIn">Log in</a>
-                                       <span data-bind="text: welcome"></span>
+                               <div class="row-fluid text-center logoutBtn">
+                                       <a href="/auth/drupal" 
data-bind="visible: showLogIn"><button class="btn btn-block btn-info">Log 
in</button></a>
+                                       <p data-bind="text: welcome"></p>
+                                       <a href="/logout" data-bind="visible: 
!showLogIn()"><button class="btn btn-block btn-info">Log out</button></a>
                                </div>
                        </div>
                </div>

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I29b69d735ff411cf50e507812df1f4d8c8b34052
Gerrit-PatchSet: 2
Gerrit-Project: wikimedia/fundraising/dash
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: Ssmith <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to