Guest User

Untitled

a guest
Jan 24th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. var s$ = {};
  2.  
  3. var snail = function(config) {
  4. s$.config = config;
  5.  
  6. var _readyCallbacks = [];
  7.  
  8. $(function() {
  9. $.each(_readyCallbacks, function(i, func) {
  10. func();
  11. });
  12. });
  13.  
  14. s$.ready = function(func) {
  15. _readyCallbacks.unshift(func);
  16. }
  17.  
  18. s$.bind = function(path, event, callback) {
  19. $('div[data-path="' + path + '"]').live(event, callback);
  20. }
  21.  
  22. s$.data = (new function() {
  23. function _request() {
  24. }
  25.  
  26. function _updateIndex() {
  27. }
  28.  
  29. this.each = function() {
  30. }
  31.  
  32. this.load = function() {
  33. }
  34. }());
  35.  
  36. s$.page = (new function() {
  37. var self = this;
  38. var _stack = [];
  39.  
  40. function _getPage(path) {
  41. return $('div[data-path="' + path + '"]');
  42. }
  43.  
  44. function _pushStack(path) {
  45. _stack.push(path);
  46. }
  47.  
  48. function _popStack() {
  49. return _stack.pop();
  50. }
  51.  
  52. this.show = function(path) {
  53. function _show(path) {
  54. $('div[data-role=page]').hide();
  55. var $page = _getPage(path);
  56. $page.trigger('pageshow');
  57. $page.show();
  58. }
  59.  
  60. $page = _getPage(path);
  61. if($page.length) {
  62. if(!$page.attr('data-loaded')) {
  63. $page.trigger('pageload');
  64. $page.attr('data-loaded', true);
  65. }
  66. _show(path);
  67. } else {
  68. $.ajax({
  69. url: 'app/' + _splitPath(path).file + '.html',
  70. dataType: 'html',
  71. cache: false,
  72. success: function(html) {
  73. $('body').append(html);
  74. $.each($('div:not([data-path])'), function(i, p) {
  75. $(p).attr('data-path', _splitPath(path).file + '/' + $(p).attr('data-name'));
  76. });
  77. $page = _getPage(path);
  78. $page.trigger('pageload');
  79. $page.attr('data-loaded', true);
  80. _show(path);
  81. }
  82. });
  83. }
  84. }
  85.  
  86. s$.ready(function() {
  87. $('a').live('click', function(e) {
  88. e.preventDefault();
  89. var action = $(this).attr('data-action');
  90. if(action) {
  91. if(action === 'back') {
  92. _popStack();
  93. self.show(_stack[_stack.length-1]);
  94. }
  95. } else {
  96. var path = $(this).attr('href');
  97. self.show(path);
  98. _pushStack(path);
  99. }
  100. });
  101. self.show(s$.config.root);
  102. _pushStack(s$.config.root);
  103. });
  104. }());
  105.  
  106. function _splitPath(path) {
  107. var parts = path.split('/');
  108. var file;
  109. var target;
  110.  
  111. if(parts.length === 2) {
  112. file = parts[0];
  113. target = parts[1];
  114. } else {
  115. target = parts[0];
  116. }
  117.  
  118. return {file: file, target: target};
  119. }
  120. }
Add Comment
Please, Sign In to add comment