Lungo.Boot.Events.coffee 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. ###
  2. Initialize the automatic DOM UI events
  3. @namespace Lungo.Boot
  4. @class Events
  5. @author Javier Jimenez Villar <javi@tapquo.com> || @soyjavi
  6. @author Guillermo Pascual <pasku@tapquo.com> || @pasku1
  7. @author Ignacio Olalde <ina@tapquo.com> || @piniphone
  8. ###
  9. Lungo.Boot.Events = do (lng = Lungo) ->
  10. C = lng.Constants
  11. ATTRIBUTE = lng.Constants.ATTRIBUTE
  12. CLASS = lng.Constants.CLASS
  13. ELEMENT = lng.Constants.ELEMENT
  14. QUERY = lng.Constants.QUERY
  15. ###
  16. Initializes the automatic subscription events by markup of the project.
  17. @method init
  18. ###
  19. init = ->
  20. lng.dom(C.QUERY.SECTION_ROUTER_TOUCH).touch _onSection
  21. lng.dom(C.QUERY.SECTION_ROUTER_TAP).tap _onSection
  22. lng.dom(C.QUERY.ARTICLE_ROUTER_TOUCH).touch _onArticle
  23. lng.dom(C.QUERY.ARTICLE_ROUTER_TAP).tap _onArticle
  24. lng.dom(C.QUERY.ASIDE_ROUTER).touch _onAside
  25. lng.dom(C.QUERY.MENU_ROUTER).touch _onMenu
  26. lng.dom(QUERY.MENU_HREF).touch _closeMenu
  27. for transition in C.EVENT.TRANSITION_END
  28. lng.dom("body").delegate C.ELEMENT.SECTION, transition, _transitionEnd
  29. lng.dom("body").delegate C.ELEMENT.ASIDE, transition, _transitionEnd
  30. _onSection = (event) ->
  31. event.preventDefault()
  32. el = lng.dom @
  33. if el.data "async"
  34. _onAsyncResource el, C.ELEMENT.SECTION
  35. else
  36. section_id = el.data "view-section"
  37. if section_id isnt "back" then lng.Router.section(section_id) else lng.Router.back()
  38. _onArticle = (event) ->
  39. event.preventDefault()
  40. el = lng.dom @
  41. if el.data "async"
  42. _onAsyncResource el, C.ELEMENT.ARTICLE
  43. else
  44. lng.Router.article lng.Router.history(), el.data("view-article"), el
  45. _onAsyncResource = (el, type) ->
  46. url = el.data "async"
  47. id = el.data "view-#{type}"
  48. lng.Notification.show()
  49. if type is C.ELEMENT.ARTICLE
  50. section_id = lng.Element.Cache.section.attr(C.ATTRIBUTE.ID)
  51. lng.Resource.load url, C.ELEMENT.SECTION + "#" + section_id
  52. else
  53. lng.Resource.load url
  54. lng.Boot.Data.init "##{id}"
  55. link.removeAttribute("data-async") for link in lng.dom "[data-async='#{url}']"
  56. if type is C.ELEMENT.ARTICLE
  57. lng.Router.article section_id, id
  58. lng.Aside.hide()
  59. else
  60. lng.Router.section id
  61. do lng.Notification.hide
  62. _onAside = (event) ->
  63. do event.preventDefault
  64. aside_id = lng.dom(event.target).closest(C.QUERY.ASIDE_ROUTER).data "view-aside"
  65. lng.Aside.toggle aside_id
  66. _onMenu = (event) ->
  67. event.preventDefault()
  68. menu_id = lng.dom(@).data("view-menu")
  69. lng.dom("[data-control=menu]##{menu_id}").toggleClass CLASS.SHOW
  70. _closeMenu = (event) ->
  71. event.preventDefault()
  72. el = lng.dom(this)
  73. parent = el.parent("[data-control=menu]").removeClass(CLASS.SHOW).attr C.ATTRIBUTE.ID
  74. lng.dom("[data-view-menu=#{parent}] > .icon").attr "class", "icon " + el.data("icon")
  75. _transitionEnd = (event) ->
  76. section = lng.dom(event.target)
  77. hasDirection = section.data("direction")
  78. asideRelated = section.hasClass("asideHidding") or section.hasClass("asideShowing")
  79. shadowRelated = section.hasClass("shadowing") or section.hasClass("unshadowing")
  80. if hasDirection or asideRelated or shadowRelated then lng.Router.animationEnd event
  81. else lng.Aside.animationEnd event
  82. init: init