Lungo.Boot.Events.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 QUERY = lng.Constants.QUERY;
  15. var SELECTORS = {
  16. INPUT_CHECKBOX: 'input[type=range].checkbox'
  17. };
  18. /**
  19. * Initializes the automatic subscription events by markup of the project.
  20. *
  21. * @method init
  22. *
  23. */
  24. var init = function() {
  25. lng.dom(QUERY.HREF_ROUTER).tap(_loadTarget);
  26. lng.dom(QUERY.MENU_HREF).tap(_closeMenu);
  27. lng.dom(QUERY.INPUT_CHECKBOX).tap(_changeCheckboxValue);
  28. };
  29. var _loadTarget = function(event) {
  30. event.preventDefault();
  31. var link = lng.dom(this);
  32. if (link.data("async")) {
  33. _loadAsyncTarget(link);
  34. } else {
  35. _selectTarget(link);
  36. }
  37. };
  38. var _changeCheckboxValue = function(event) {
  39. event.preventDefault();
  40. var el = lng.dom(this);
  41. var current_value = el.val() > 0 ? 0 : 1;
  42. el.toggleClass("active").attr('value', current_value);
  43. };
  44. var _closeMenu = function(event) {
  45. event.preventDefault();
  46. var el = lng.dom(this);
  47. var parent = el.parent('[data-control=menu]').removeClass(CLASS.SHOW);
  48. lng.dom("[data-router=menu] > .icon").attr("class", "icon " + el.data("icon"));
  49. };
  50. var _loadAsyncTarget = function(link) {
  51. lng.Notification.show();
  52. lng.Resource.load(link.data("async"));
  53. link[0].removeAttribute("data-async");
  54. lng.Boot.Data.init( link.attr(ATTRIBUTE.HREF) );
  55. setTimeout(function() {
  56. _selectTarget(link);
  57. lng.Notification.hide();
  58. }, lng.Constants.TRANSITION.DURATION * 2);
  59. };
  60. var _selectTarget = function(link) {
  61. if (link.closest(ELEMENT.ASIDE).length > 0) {
  62. lng.View.Aside.hide();
  63. }
  64. var target_type = link.data(ATTRIBUTE.ROUTER);
  65. var target_id = link.attr(ATTRIBUTE.HREF);
  66. switch(target_type) {
  67. case ELEMENT.SECTION:
  68. _goSection(target_id);
  69. break;
  70. case ELEMENT.ARTICLE:
  71. _goArticle(link);
  72. break;
  73. case ELEMENT.ASIDE:
  74. lng.View.Aside.toggle();
  75. break;
  76. case ELEMENT.MENU:
  77. _goMenu(target_id);
  78. break;
  79. }
  80. };
  81. var _goSection = function(id) {
  82. id = lng.Core.parseUrl(id);
  83. if (id === '#back') {
  84. lng.Router.back();
  85. } else {
  86. lng.Router.section(id);
  87. }
  88. };
  89. var _goArticle = function(element) {
  90. var section_id = lng.Router.History.current();
  91. var article_id = element.attr(ATTRIBUTE.HREF);
  92. lng.Router.article(section_id, article_id, element);
  93. };
  94. var _goMenu = function(id) {
  95. lng.dom("[data-control=menu]" + id).toggleClass(CLASS.SHOW);
  96. };
  97. return {
  98. init: init
  99. };
  100. })(Lungo);