Lungo.Boot.Events.coffee 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. ###
  8. Lungo.Boot.Events = do(lng = Lungo) ->
  9. C = lng.Constants
  10. ATTRIBUTE = lng.Constants.ATTRIBUTE
  11. CLASS = lng.Constants.CLASS
  12. ELEMENT = lng.Constants.ELEMENT
  13. QUERY = lng.Constants.QUERY
  14. SELECTORS = INPUT_CHECKBOX: "input[type=range].checkbox"
  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.ARTICLE_ROUTER_TOUCH).touch _onArticle
  22. lng.dom(C.QUERY.SECTION_ROUTER_TAP).tap _onSection
  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. lng.dom(QUERY.INPUT_CHECKBOX).touch _changeCheckboxValue
  28. _onSection = (event) ->
  29. event.preventDefault()
  30. el = lng.dom @
  31. if el.data "async"
  32. _onAsyncResource el, C.ELEMENT.SECTION
  33. else
  34. section_id = el.data "view-section"
  35. if section_id isnt "back" then lng.Router.section(section_id) else lng.Router.back()
  36. _onArticle = (event) ->
  37. event.preventDefault()
  38. el = lng.dom @
  39. if el.data "async"
  40. _onAsyncResource el, C.ELEMENT.ARTICLE
  41. else
  42. lng.Router.article lng.Router.history(), el.data("view-article"), el
  43. lng.Aside.hide()
  44. _onAsyncResource = (el, type) ->
  45. url = el.data "async"
  46. id = el.data "view-#{type}"
  47. lng.Notification.show()
  48. if type is C.ELEMENT.ARTICLE
  49. section_id = lng.Element.Cache.section.attr(C.ATTRIBUTE.ID)
  50. lng.Resource.load url, C.ELEMENT.SECTION + "#" + section_id
  51. else
  52. lng.Resource.load url
  53. lng.Boot.Data.init "##{id}"
  54. link.removeAttribute("data-async") for link in lng.dom "[data-async='#{url}']"
  55. setTimeout (->
  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. ), lng.Constants.TRANSITION.DURATION * 2
  63. _onAside = (event) ->
  64. event.preventDefault()
  65. lng.Aside.toggle()
  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)
  74. lng.dom("[data-router=menu] > .icon").attr "class", "icon " + el.data("icon")
  75. _changeCheckboxValue = (event) ->
  76. event.preventDefault()
  77. el = lng.dom(this)
  78. current_value = (if el.val() > 0 then 0 else 1)
  79. el.toggleClass("active").attr "value", current_value
  80. init: init