Lungo.Boot.Events.js 3.2 KB

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