index.js.coffee 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #s#= require json2
  2. #= require jquery
  3. #= require ./lib/spine/spine.coffee
  4. #= require ./lib/spine/ajax.coffee
  5. #= require ./lib/spine/route.coffee
  6. #not_userd= require ./lib/spine/manager.coffee
  7. #= require ./lib/bootstrap-dropdown.js
  8. #= require ./lib/bootstrap-tooltip.js
  9. #= require ./lib/bootstrap-popover.js
  10. #= require ./lib/bootstrap-modal.js
  11. #= require ./lib/bootstrap-tab.js
  12. #= require ./lib/underscore.coffee
  13. #= require ./lib/ba-linkify.js
  14. #= require ./lib/ui/jquery.ui.core.js
  15. #= require ./lib/ui/jquery.ui.widget.js
  16. #= require ./lib/ui/jquery.ui.position.js
  17. #= require ./lib/ui/jquery.ui.autocomplete.js
  18. #not_used= require_tree ./lib/uis
  19. #not_used= require ./lib/jquery.autocomplete.js
  20. #= require ./lib/jquery.tagsinput.js
  21. #= require ./lib/fileuploader.js
  22. #not_used= require_tree ./lib
  23. #= require_self
  24. #= require_tree ./models
  25. #= require_tree ./controllers
  26. #= require_tree ./views
  27. class App extends Spine.Controller
  28. @view: (name) ->
  29. JST["app/views/#{name}"]
  30. ###
  31. class App.Config extends Spine.Module
  32. constructor: ->
  33. super
  34. @config = {}
  35. set: (key, value) =>
  36. @config[key] = value
  37. get: (key) =>
  38. @config[key]
  39. append: (key, value) =>
  40. if !@config[key]
  41. @config[key] = []
  42. @config[key].push = value
  43. Config2 = new App.Config
  44. Config2.set( 'a', 123)
  45. console.log '1112222', Config2.get( 'a')
  46. ###
  47. class App.Ajax
  48. defaults:
  49. contentType: 'application/json'
  50. dataType: 'json'
  51. processData: false
  52. headers: {'X-Requested-With': 'XMLHttpRequest'}
  53. cache: false
  54. ajax: (params, defaults) ->
  55. $.ajax($.extend({}, @defaults, defaults, params))
  56. class App.Auth extends App.Ajax
  57. constructor: ->
  58. console.log 'auth'
  59. login: (params) ->
  60. console.log 'login(...)', params
  61. @ajax(
  62. # params,
  63. type: 'POST',
  64. url: '/signin',
  65. data: JSON.stringify(params.data),
  66. success: params.success,
  67. error: params.error,
  68. )
  69. loginCheck: ->
  70. console.log 'loginCheck(...)'
  71. @ajax(
  72. async: false,
  73. type: 'GET',
  74. url: '/signshow',
  75. success: (data, status, xhr) =>
  76. console.log 'logincheck:success', data
  77. # if session is not valid
  78. if data.error
  79. # update config
  80. for key, value of data.config
  81. window.Config[key] = value
  82. # empty session
  83. window.Session = {}
  84. # rebuild navbar with new navbar items
  85. Spine.trigger 'navrebuild'
  86. return false;
  87. # set avatar
  88. if !data.session.image
  89. data.session.image = 'http://placehold.it/48x48'
  90. # update config
  91. for key, value of data.config
  92. window.Config[key] = value
  93. # store user data
  94. for key, value of data.session
  95. window.Session[key] = value
  96. # refresh/load default collections
  97. for key, value of data.default_collections
  98. App[key].refresh( value, options: { clear: true } )
  99. # rebuild navbar with new navbar items
  100. Spine.trigger 'navrebuild', data.session
  101. # rebuild navbar with updated ticket count of overviews
  102. Spine.trigger 'navupdate_remote'
  103. error: (xhr, statusText, error) =>
  104. console.log 'loginCheck:error'#, error, statusText, xhr.statusCode
  105. # empty session
  106. window.Session = {}
  107. )
  108. logout: ->
  109. console.log 'logout(...)'
  110. @ajax(
  111. type: 'DELETE',
  112. url: '/signout',
  113. )
  114. class App.Run extends Spine.Controller
  115. constructor: ->
  116. super
  117. @log 'RUN app'#, @
  118. @el = $('#app')
  119. # start navigation controller
  120. new App.Navigation( el: @el.find('#navigation') );
  121. # check if session already exists/try to get session data from server
  122. auth = new App.Auth
  123. auth.loginCheck()
  124. # start notify controller
  125. new App.Notify( el: @el.find('#notify') );
  126. # start content
  127. new App.Content( el: @el.find('#content') );
  128. #class App.Content extends Spine.Stack
  129. class App.Content extends Spine.Controller
  130. className: 'container'
  131. constructor: ->
  132. # @controllers = {}
  133. # @routes = {}
  134. # @default = '/'
  135. # for route, controller of Config.Routes
  136. ## @log 'route,controller', route, controller
  137. # @controllers[route] = controller
  138. # @routes[route] = route
  139. super
  140. @log 'RUN content'#, @
  141. for route, callback of Config.Routes
  142. # @log 'route,controller', route#, controller
  143. do (route, callback) =>
  144. @route(route, (params) ->
  145. # @log 'routing...', route
  146. Config['ActiveController'] = route
  147. # unbind in controller area
  148. @el.unbind()
  149. @el.undelegate()
  150. params.el = @el
  151. params.auth = @auth
  152. new callback( params )
  153. # scroll to top
  154. # window.scrollTo(0,0)
  155. )
  156. # for name, object of Config.Controller
  157. ## @log 'new', object, @el
  158. # new object( el: @el, auth: @auth )
  159. Spine.Route.setup()
  160. window.App = App