Milimetric has uploaded a new change for review.

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


Change subject: basic alert and info support
......................................................................

basic alert and info support

Change-Id: Ib2112b611cda5067c39274cd5f4271900b733342
---
M wikimetrics/static/js/jobCreate.js
A wikimetrics/static/js/site.js
M wikimetrics/templates/layout.html
3 files changed, 94 insertions(+), 34 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/analytics/wikimetrics 
refs/changes/12/73112/1

diff --git a/wikimetrics/static/js/jobCreate.js 
b/wikimetrics/static/js/jobCreate.js
index 08271ed..2c1e071 100644
--- a/wikimetrics/static/js/jobCreate.js
+++ b/wikimetrics/static/js/jobCreate.js
@@ -6,9 +6,11 @@
             // fetch wikiusers
             if (cohort && !cohort.wikiusers) {
                 cohort.wikiusers = ko.observableArray([]);
-                $.get('/cohorts/detail/' + cohort.id, function(data){
-                    cohort.wikiusers(data.wikiusers);
-                }).fail(failure);
+                $.get('/cohorts/detail/' + cohort.id)
+                    .done(site.handleWith(function(data){
+                        cohort.wikiusers(data.wikiusers);
+                    }))
+                    .fail(site.failure);
             }
             return true;
         },
@@ -19,9 +21,11 @@
             if (metric) {
                 if (metric.selected()){
                     // fetch form to configure metric with
-                    $.get('/metrics/configure/' + metric.name, 
function(configureForm){
-                        metric.configure(configureForm);
-                    }).fail(failure);
+                    $.get('/metrics/configure/' + metric.name)
+                        .done(site.handleWith(function(configureForm){
+                            metric.configure(configureForm);
+                        }))
+                        .fail(site.failure);
                 } else {
                     metric.configure('');
                 }
@@ -40,13 +44,12 @@
             });
             data = JSON.stringify(data);
             
-            $.ajax({
-                type: 'post',
-                url: form.attr('action'),
-                data: {responses: data},
-            }).done(function(response){
-                alert(response);
-            }).fail(failure);
+            $.ajax({ type: 'post', url: form.attr('action'), data: {responses: 
data} })
+                .done(site.handleWith(function(response){
+                    // should redirect to the jobs page, so show an error 
otherwise
+                    site.showError('unexpected response: ' + response);
+                }))
+                .fail(site.failure);
         },
         
         saveMetricConfiguration: function(formElement){
@@ -55,29 +58,31 @@
             var data = ko.toJS(metric);
             delete data.configure;
             
-            $.ajax({
-                type: 'post',
-                url: form.attr('action'),
-                data: data,
-            }).done(function(htmlToReplaceWith){
-                metric.configure(htmlToReplaceWith);
-            }).fail(failure);
+            $.ajax({ type: 'post', url: form.attr('action'), data: data })
+                .done(site.handleWith(function(response){
+                    metric.configure(htmlToReplaceWith);
+                }))
+                .fail(site.failure);
         },
     };
     
     // fetch this user's cohorts
-    $.get('/cohorts/list/', function(data){
-        setSelected(data.cohorts);
-        viewModel.cohorts(data.cohorts);
-    }).fail(failure);
+    $.get('/cohorts/list/')
+        .done(site.handleWith(function(data){
+            setSelected(data.cohorts);
+            viewModel.cohorts(data.cohorts);
+        }))
+        .fail(site.failure);
     
     // fetch the list of available metrics
-    $.get('/metrics/list/', function(data){
-        setTabIds(data.metrics, 'metric');
-        setSelected(data.metrics);
-        setConfigure(data.metrics);
-        viewModel.metrics(data.metrics);
-    }).fail(failure);
+    $.get('/metrics/list/')
+        .done(site.handleWith(function(data){
+            setTabIds(data.metrics, 'metric');
+            setSelected(data.metrics);
+            setConfigure(data.metrics);
+            viewModel.metrics(data.metrics);
+        }))
+        .fail(site.failure);
     
     // computed pieces of the viewModel
     viewModel.request = ko.observable({
@@ -142,10 +147,6 @@
                 return '#' + prefix + '-' + this.id;
             }, item);
         });
-    };
-    
-    function failure(error){
-        alert('TODO: report this error in a nicer way ' + error);
     };
     
     
diff --git a/wikimetrics/static/js/site.js b/wikimetrics/static/js/site.js
new file mode 100644
index 0000000..dd085ec
--- /dev/null
+++ b/wikimetrics/static/js/site.js
@@ -0,0 +1,42 @@
+var site = {
+    handleWith: function(callback){
+        return function(response){
+            if (site.isNormalResponse(response)){
+                callback.call(this, response);
+            }
+        };
+    },
+    
+    isNormalResponse: function(response){
+        if (response.isError){
+            site.showError(response.message);
+            return false;
+        } else if (response.isRedirect){
+            site.redirect(response.redirectTo);
+            return false;
+        } else {
+            return true;
+        }
+    },
+    
+    showError: function (message){
+        if (!site.errorTemplate){
+            site.errorTemplate = $('.errorTemplate').html();
+        }
+        $('.site-messages').append(site.errorTemplate.replace('#####', 
message));
+    },
+    showInfo: function (message){
+        if (!site.infoTemplate){
+            site.infoTemplate = $('.infoTemplate').html();
+        }
+        $('.site-messages').append(site.infoTemplate.replace('#####', 
message));
+    },
+    
+    redirect: function (url){
+        location.href = url;
+    },
+    
+    failure: function (error){
+        site.showError(error);
+    },
+};
diff --git a/wikimetrics/templates/layout.html 
b/wikimetrics/templates/layout.html
index 50eb443..852df5e 100644
--- a/wikimetrics/templates/layout.html
+++ b/wikimetrics/templates/layout.html
@@ -52,12 +52,29 @@
         
         #}
     </ul>
+    <div class="site-messages">
+    </div>
     <section class="container">
         {% block body %}{% endblock %}
     </section>
     
     <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
     <script src="{{ url_for('static', filename='js/bootstrap.js') }}"></script>
+    <script src="{{ url_for('static', filename='js/site.js') }}"></script>
     {% block scripts %}{% endblock %}
+    
+    <script type="text/html" class="errorTemplate">
+        <div class="alert alert-error">
+            <button type="button" class="close" 
data-dismiss="alert">&times;</button>
+            <strong>Error!</strong> #####
+        </div>
+    </script>
+    <script type="text/html" class="infoTemplate">
+        <div class="alert alert-info">
+            <button type="button" class="close" 
data-dismiss="alert">&times;</button>
+            <strong>Info</strong> #####
+        </div>
+    </script>
+</div>
 </body>
 </html>

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib2112b611cda5067c39274cd5f4271900b733342
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>

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

Reply via email to