'<%= 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'
'<%= 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'
--- /dev/null
+$ = 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
+
+
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; }
+}