Lungo.Boot.Events.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /**
  2. * Initialize the automatic DOM UI events
  3. *
  4. * @namespace Lungo.Boot
  5. * @class Events
  6. *
  7. * @author Javier Jimenez Villar <javi@tapquo.com> || @soyjavi
  8. * @author Guillermo Pascual <pasku@tapquo.com> || @pasku1
  9. */
  10. Lungo.Boot.Events = (function(lng, undefined) {
  11. var ATTRIBUTE = lng.Constants.ATTRIBUTE;
  12. var CLASS = lng.Constants.CLASS;
  13. var ELEMENT = lng.Constants.ELEMENT;
  14. var SELECTORS = {
  15. HREF_ASIDE: 'header a[href][data-router=aside]',
  16. HREF_TARGET: 'a[href][data-router]',
  17. HREF_TARGET_FROM_ASIDE: 'aside a[href][data-router]',
  18. INPUT_CHECKBOX: 'input[type=range].checkbox',
  19. HREF_TARGET_FROM_MENU: "[data-control=menu] a[href]"
  20. };
  21. /**
  22. * Initializes the automatic subscription events by markup of the project.
  23. *
  24. * @method init
  25. *
  26. */
  27. var init = function() {
  28. lng.dom(SELECTORS.HREF_TARGET_FROM_ASIDE).tap(_hideAsideIfNecesary);
  29. lng.dom(SELECTORS.HREF_TARGET).tap(_loadTarget);
  30. lng.dom(SELECTORS.INPUT_CHECKBOX).tap(_changeCheckboxValue);
  31. lng.dom(SELECTORS.HREF_TARGET_FROM_MENU).tap(_closeMenu);
  32. lng.View.Aside.suscribeEvents(lng.dom(SELECTORS.HREF_ASIDE));
  33. };
  34. var _loadTarget = function(event) {
  35. event.preventDefault();
  36. var link = lng.dom(this);
  37. if (link.data("async")) {
  38. _loadAsyncTarget(link);
  39. } else {
  40. _selectTarget(link);
  41. }
  42. };
  43. var _hideAsideIfNecesary = function(event) {
  44. event.preventDefault();
  45. lng.View.Aside.hide();
  46. };
  47. var _changeCheckboxValue = function(event) {
  48. event.preventDefault();
  49. var el = lng.dom(this);
  50. var current_value = el.val() > 0 ? 0 : 1;
  51. el.toggleClass("active").attr('value', current_value);
  52. };
  53. var _closeMenu = function(event) {
  54. event.preventDefault();
  55. var el = lng.dom(this);
  56. var parent = el.parent('[data-control=menu]').removeClass(CLASS.SHOW);
  57. lng.dom("[data-router=menu] > .icon").attr("class", "icon " + el.data("icon"));
  58. };
  59. var _selectTarget = function(link) {
  60. var target_type = link.data(ATTRIBUTE.ROUTER);
  61. var target_id = link.attr(ATTRIBUTE.HREF);
  62. switch(target_type) {
  63. case ELEMENT.SECTION:
  64. _goSection(target_id);
  65. break;
  66. case ELEMENT.ARTICLE:
  67. _goArticle(link);
  68. break;
  69. case ELEMENT.ASIDE:
  70. _goAside(link);
  71. break;
  72. case ELEMENT.MENU:
  73. _goMenu(target_id);
  74. break;
  75. }
  76. };
  77. var _loadAsyncTarget = function(link) {
  78. lng.Notification.show();
  79. lng.Resource.load(link.data("async"));
  80. link[0].removeAttribute("data-async");
  81. lng.Boot.Data.init( link.attr(ATTRIBUTE.HREF) );
  82. setTimeout(function() {
  83. _selectTarget(link);
  84. lng.Notification.hide();
  85. }, lng.Constants.TRANSITION.DURATION * 2);
  86. };
  87. var _goSection = function(id) {
  88. id = lng.Core.parseUrl(id);
  89. if (id === '#back') {
  90. lng.Router.back();
  91. } else {
  92. lng.Router.section(id);
  93. }
  94. };
  95. var _goArticle = function(element) {
  96. var section_id = lng.Router.History.current();
  97. var article_id = element.attr(ATTRIBUTE.HREF);
  98. lng.Router.article(section_id, article_id, element);
  99. };
  100. var _goAside = function(element) {
  101. var section_id = lng.Router.History.current();
  102. var aside_id = element.attr(ATTRIBUTE.HREF);
  103. lng.Router.aside(section_id, aside_id);
  104. };
  105. var _goMenu = function(id) {
  106. lng.dom("[data-control=menu]" + id).toggleClass(CLASS.SHOW);
  107. };
  108. return {
  109. init: init
  110. };
  111. })(Lungo);