選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

129 行
2.8 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. // library to mange assets (js, css, models, html) etc in the app.
  4. // will try and get from localStorge if latest are available
  5. // depends on wn.versions to manage versioning
  6. wn.require = function(items) {
  7. if(typeof items === "string") {
  8. items = [items];
  9. }
  10. var l = items.length;
  11. for(var i=0; i< l; i++) {
  12. var src = items[i];
  13. wn.assets.execute(src);
  14. }
  15. };
  16. wn.assets = {
  17. // keep track of executed assets
  18. executed_ : {},
  19. check: function() {
  20. // if version is different then clear localstorage
  21. if(window._version_number != localStorage.getItem("_version_number")) {
  22. localStorage.clear();
  23. console.log("Cleared App Cache.");
  24. }
  25. if(localStorage._last_load) {
  26. var not_updated_since = new Date() - new Date(localStorage._last_load);
  27. if(not_updated_since < 10000 || not_updated_since > 86400000) {
  28. localStorage.clear();
  29. console.log("Cleared localstorage");
  30. }
  31. } else {
  32. localStorage.clear();
  33. console.log("Cleared localstorage");
  34. }
  35. wn.assets.init_local_storage();
  36. },
  37. init_local_storage: function() {
  38. localStorage._last_load = new Date();
  39. localStorage._version_number = window._version_number;
  40. if(wn.boot) localStorage.metadata_version = wn.boot.metadata_version;
  41. },
  42. // check if the asset exists in
  43. // localstorage
  44. exists: function(src) {
  45. if('localStorage' in window
  46. && localStorage.getItem(src) && (wn.boot ? !wn.boot.developer_mode : true))
  47. return true;
  48. },
  49. // add the asset to
  50. // localstorage
  51. add: function(src, txt) {
  52. if('localStorage' in window) {
  53. try {
  54. localStorage.setItem(src, txt);
  55. } catch(e) {
  56. // if quota is exceeded, clear local storage and set item
  57. localStorage.clear();
  58. console.log("Local Storage cleared");
  59. localStorage.setItem(src, txt);
  60. }
  61. }
  62. },
  63. get: function(src) {
  64. return localStorage.getItem(src);
  65. },
  66. extn: function(src) {
  67. if(src.indexOf('?')!=-1) {
  68. src = src.split('?').slice(-1)[0];
  69. }
  70. return src.split('.').slice(-1)[0];
  71. },
  72. // load an asset via
  73. load: function(src) {
  74. // this is virtual page load, only get the the source
  75. // *without* the template
  76. wn.set_loading();
  77. wn.call({
  78. method:"webnotes.client.get_js",
  79. args: {
  80. "src": src
  81. },
  82. callback: function(r) {
  83. wn.assets.add(src, r.message);
  84. },
  85. async: false
  86. })
  87. wn.done_loading();
  88. },
  89. // pass on to the handler to set
  90. execute: function(src) {
  91. if(!wn.assets.exists(src)) {
  92. wn.assets.load(src);
  93. }
  94. var type = wn.assets.extn(src);
  95. if(wn.assets.handler[type]) {
  96. wn.assets.handler[type](wn.assets.get(src), src);
  97. wn.assets.executed_[src] = 1;
  98. }
  99. },
  100. // handle types of assets
  101. // and launch them in the
  102. // app
  103. handler: {
  104. js: function(txt, src) {
  105. wn.dom.eval(txt);
  106. },
  107. css: function(txt, src) {
  108. wn.dom.set_style(txt);
  109. }
  110. }
  111. };