PageRenderTime 53ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/www/js/views/folders-abstract.js

https://gitlab.com/aparle/golf2016Android
JavaScript | 161 lines | 151 code | 0 blank | 10 comment | 25 complexity | 7cdd50babb79239433d8cb6d3b2b0f51 MD5 | raw file
  1. app.FolderAbstractView = Backbone.View.extend({
  2. writeToFile: function (fileName, data, successCallback, errorCallback) {
  3. data = JSON.stringify(data, null, "\t");
  4. window.resolveLocalFileSystemURL(
  5. cordova.file.syncedDataDirectory || cordova.file.dataDirectory,
  6. function (de) {
  7. de.getFile(fileName, {create: true}, function (fe) {
  8. fe.createWriter(function (fw) {
  9. fw.onwriteend = successCallback;
  10. fw.onerror = errorCallback || logger;
  11. fw.write(new Blob([data], {type: 'text/plain'}));
  12. }, errorCallback || logger);
  13. }, errorCallback || logger);
  14. }, errorCallback || logger);
  15. },
  16. readFromFile: function (fileName, successCallback, errorCallback) {
  17. window.resolveLocalFileSystemURL(
  18. (cordova.file.syncedDataDirectory || cordova.file.dataDirectory) + fileName,
  19. function (fe) {
  20. fe.file(function (f) {
  21. var r = new FileReader();
  22. r.onloadend = function () {
  23. if ($.isFunction(successCallback)) {
  24. successCallback(JSON.parse(this.result));
  25. }
  26. };
  27. r.readAsText(f);
  28. }, errorCallback || logger);
  29. }, errorCallback || logger);
  30. },
  31. storeFoldersData: function () {
  32. //logger(window.foldersData, "folder list, data");
  33. this.writeToFile(window.foldersDataFileName, window.foldersData);
  34. },
  35. storeUndoCopyOfFoldersData: function () {
  36. window.foldersData.undoCopy = {};
  37. window.foldersData.undoCopy.folders = $.extend(true, {}, window.foldersData.folders);
  38. window.foldersData.undoCopy.sort_order = $.extend(true, {}, window.foldersData.sort_order);
  39. window.foldersData.undoCopy.folder_data = $.extend(true, {}, window.foldersData.folder_data);
  40. this.storeFoldersData();
  41. },
  42. retrieveFolderData: function (callback) {
  43. var self = this,
  44. createNew = function () {
  45. self.addNewFolder("Folder 1");
  46. //for (var i = 2; i < 16; i++) {
  47. // self.addNewFolder("Folder " + i.toString());
  48. //}
  49. };
  50. self.readFromFile(window.foldersDataFileName, function (data) {
  51. //logger(data, "folder list, data");
  52. if (data && !$.isEmptyObject(data)) {
  53. window.foldersData = data;
  54. } else {
  55. createNew();
  56. }
  57. if ($.isFunction(callback)) {
  58. callback();
  59. }
  60. }, function () {
  61. createNew();
  62. if ($.isFunction(callback)) {
  63. callback();
  64. }
  65. });
  66. },
  67. generateUniqueFolderId: function () {
  68. return "f" + (crc32(Date.now() + Math.random().toString()) >>> 0).toString(16);
  69. },
  70. addNewFolder: function (name, sortOrder) {
  71. var fid = this.generateUniqueFolderId(),
  72. data = $.isEmptyObject(window.foldersData)
  73. ? {folders: {}, sort_order: {}, folder_data: {}}
  74. : window.foldersData;
  75. logger(fid, "new folder id");
  76. data.folders[fid] = name;
  77. data.sort_order[fid] = sortOrder || 0;
  78. data.folder_data[fid] = {};
  79. window.foldersData = data;
  80. this.storeFoldersData();
  81. return fid;
  82. },
  83. deleteFolder: function (id) {
  84. delete(window.foldersData.folders[id]);
  85. delete(window.foldersData.sort_order[id]);
  86. delete(window.foldersData.folder_data[id]);
  87. this.storeFoldersData();
  88. },
  89. updateFolderName: function (id, name) {
  90. window.foldersData.folders[id] = name;
  91. },
  92. updateFolderSortOrder: function (id, sortOrder) {
  93. window.foldersData.sort_order[id] = sortOrder;
  94. },
  95. updateFolderData: function (id, type, key, value) {
  96. if (window.foldersData.folder_data[id] === undefined) {
  97. window.foldersData.folder_data[id] = {};
  98. }
  99. if (window.foldersData.folder_data[id][type] === undefined) {
  100. window.foldersData.folder_data[id][type] = {};
  101. }
  102. window.foldersData.folder_data[id][type][key] = value;
  103. },
  104. removeFolderData: function (id, type, key) {
  105. if (window.foldersData.folder_data[id]
  106. && window.foldersData.folder_data[id][type]
  107. && window.foldersData.folder_data[id][type][key]) {
  108. delete(window.foldersData.folder_data[id][type][key]);
  109. }
  110. },
  111. addFolderItem: function (id, rute) {
  112. this.updateFolderData(id, "items", rute, app.main.makeSortableDecisionId(rute));
  113. },
  114. removeFolderItem: function (id, rute) {
  115. this.removeFolderData(id, "items", rute);
  116. },
  117. getFolderName: function (id) {
  118. return window.foldersData.folders[id];
  119. },
  120. getFolderItemsCount: function (id) {
  121. //logger(window.foldersData.folder_data[id]["items"], "getFolderItemsCount, items of " + id);
  122. return (window.foldersData.folder_data[id] && window.foldersData.folder_data[id]["items"])
  123. ? _.size(window.foldersData.folder_data[id]["items"])
  124. : 0;
  125. },
  126. isRutePresentInFolder: function (id, rute) {
  127. //logger(window.foldersData.folder_data[id]["items"][rute], "isRutePresentInFolder, " + id + ", " + rute);
  128. return (
  129. window.foldersData.folder_data[id]
  130. && window.foldersData.folder_data[id]["items"]
  131. && window.foldersData.folder_data[id]["items"][rute]
  132. );
  133. },
  134. getSortedFolderIds: function () {
  135. var out = [],
  136. list = _.pairs(window.foldersData.sort_order);
  137. if (_.size(list)) {
  138. list.sort(function (a, b) {
  139. return a[1] - b[1];
  140. });
  141. _.each(list, function (e) {
  142. out.push(e[0]);
  143. });
  144. }
  145. return out;
  146. },
  147. getSortedFolderItemsIds: function (folderId) {
  148. var out = [],
  149. list = _.pairs(window.foldersData.folder_data[folderId]["items"]);
  150. if (_.size(list)) {
  151. //logger(list, "getSortedFolderItemsIds, list");
  152. var res = _.sortBy(list, 1);
  153. _.each(res, function (e) {
  154. out.push(e[0]);
  155. });
  156. //logger(res, "getSortedFolderItemsIds, res");
  157. //logger(out, "getSortedFolderItemsIds, out");
  158. }
  159. return out;
  160. }
  161. });