]> source.dussan.org Git - sonarqube.git/commitdiff
Background processes UI
authorStas Vilchik <vilchiks@gmail.com>
Fri, 24 Oct 2014 10:37:01 +0000 (12:37 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Fri, 24 Oct 2014 15:28:53 +0000 (17:28 +0200)
Conflicts:
server/sonar-web/src/main/coffee/issues/app.coffee

server/sonar-web/Gruntfile.coffee
server/sonar-web/src/main/coffee/common/processes.coffee [new file with mode: 0644]
server/sonar-web/src/main/less/ui.less

index f73abf3c7fa75c889b5fa37684ca292a4f22aa97..69b39a66782612cdce64cb793a403502d315f7e5 100644 (file)
@@ -97,6 +97,7 @@ module.exports = (grunt) ->
             '<%= pkg.assets %>js/sortable.js'
             '<%= pkg.assets %>js/common/inputs.js'
             '<%= pkg.assets %>js/common/dialogs.js'
+            '<%= pkg.assets %>js/common/processes.js'
             '<%= pkg.assets %>js/application.js'
             '<%= pkg.assets %>js/csv.js'
             '<%= pkg.assets %>js/dashboard.js'
@@ -131,6 +132,7 @@ module.exports = (grunt) ->
             '<%= pkg.assets %>js/sortable.js'
             '<%= pkg.assets %>js/common/inputs.js'
             '<%= pkg.assets %>js/common/dialogs.js'
+            '<%= pkg.assets %>js/common/processes.js'
             '<%= pkg.assets %>js/application.js'
             '<%= pkg.assets %>js/csv.js'
             '<%= pkg.assets %>js/dashboard.js'
diff --git a/server/sonar-web/src/main/coffee/common/processes.coffee b/server/sonar-web/src/main/coffee/common/processes.coffee
new file mode 100644 (file)
index 0000000..e99a2e4
--- /dev/null
@@ -0,0 +1,42 @@
+$ = jQuery
+
+process = {}
+process.queue = {}
+process.timeout = 300
+
+_.extend process,
+
+  addBackgroundProcess: ->
+    uid = _.uniqueId 'process'
+    @queue[uid] = new Date()
+    setTimeout (=> @showSpinner uid if @isBackgroundProcessAlive uid), @timeout
+    uid
+
+
+  isBackgroundProcessAlive: (uid) ->
+    @queue[uid]?
+
+
+  finishBackgroundProcess: (uid) ->
+    delete @queue[uid]
+    @removeSpinner uid
+
+
+  showSpinner: (uid) ->
+    id = "spinner-#{uid}"
+    spinner = $ '<div></div>'
+    spinner.addClass 'process-spinner'
+    spinner.prop 'id', id
+    spinner.text 'still working... ' + uid
+    spinner.appendTo $('body')
+    setTimeout (-> spinner.addClass 'shown'), 100
+
+
+  removeSpinner: (uid) ->
+    id = "spinner-#{uid}"
+    $('#' + id).remove()
+
+
+_.extend window, process: process
+
+
index 89ecef1598bedeaf18a2288d0510a588475ba4f7..8b7296c28a0c46ca8653a941868d9ccfaa2507a4 100644 (file)
@@ -390,3 +390,20 @@ input[type=button] {
   background-color: #EE0000;
   a & { border-bottom-color: #EE0000; }
 }
+
+
+
+.process-spinner {
+  position: fixed;
+  top: 0; left: 50%;
+  width: 300px;
+  margin-left: -150px;
+  padding: 3px 0;
+  background-color: #f0e8ac;
+  border-radius: 0 0 3px 3px;
+  text-align: center;
+  opacity: 0;
+  .trans;
+
+  &.shown { opacity: 1; }
+}