page.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. "use strict";
  2. /* global DesignerOfflineDB */
  3. // js/designer/database.js
  4. // eslint-disable-next-line no-unused-vars
  5. /* global db, selectedPage:writable */
  6. // js/designer/init.js
  7. /* global DesignerMove */
  8. // js/designer/move.js
  9. /* global DesignerObjects */
  10. // js/designer/objects.js
  11. var DesignerPage = {};
  12. DesignerPage.showTablesInLandingPage = function (db) {
  13. DesignerPage.loadFirstPage(db, function (page) {
  14. if (page) {
  15. DesignerPage.loadHtmlForPage(page.pgNr);
  16. selectedPage = page.pgNr;
  17. } else {
  18. DesignerPage.showNewPageTables(true);
  19. }
  20. });
  21. };
  22. DesignerPage.saveToNewPage = function (db, pageName, tablePositions, callback) {
  23. DesignerPage.createNewPage(db, pageName, function (page) {
  24. if (page) {
  25. var tblCords = [];
  26. var saveCallback = function saveCallback(id) {
  27. tblCords.push(id);
  28. if (tablePositions.length === tblCords.length) {
  29. page.tblCords = tblCords;
  30. DesignerOfflineDB.addObject('pdf_pages', page);
  31. }
  32. };
  33. for (var pos = 0; pos < tablePositions.length; pos++) {
  34. tablePositions[pos].pdfPgNr = page.pgNr;
  35. DesignerPage.saveTablePositions(tablePositions[pos], saveCallback);
  36. }
  37. if (typeof callback !== 'undefined') {
  38. callback(page);
  39. }
  40. }
  41. });
  42. };
  43. DesignerPage.saveToSelectedPage = function (db, pageId, pageName, tablePositions, callback) {
  44. DesignerPage.deletePage(pageId);
  45. DesignerPage.saveToNewPage(db, pageName, tablePositions, function (page) {
  46. if (typeof callback !== 'undefined') {
  47. callback(page);
  48. }
  49. selectedPage = page.pgNr;
  50. });
  51. };
  52. DesignerPage.createNewPage = function (db, pageName, callback) {
  53. var newPage = new DesignerObjects.PdfPage(db, pageName);
  54. DesignerOfflineDB.addObject('pdf_pages', newPage, function (pgNr) {
  55. newPage.pgNr = pgNr;
  56. if (typeof callback !== 'undefined') {
  57. callback(newPage);
  58. }
  59. });
  60. };
  61. DesignerPage.saveTablePositions = function (positions, callback) {
  62. DesignerOfflineDB.addObject('table_coords', positions, callback);
  63. };
  64. DesignerPage.createPageList = function (db, callback) {
  65. DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) {
  66. var html = '';
  67. for (var p = 0; p < pages.length; p++) {
  68. var page = pages[p];
  69. if (page.dbName === db) {
  70. html += '<option value="' + page.pgNr + '">';
  71. html += Functions.escapeHtml(page.pageDescr) + '</option>';
  72. }
  73. }
  74. if (typeof callback !== 'undefined') {
  75. callback(html);
  76. }
  77. });
  78. };
  79. DesignerPage.deletePage = function (pageId, callback) {
  80. DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) {
  81. if (page) {
  82. for (var i = 0; i < page.tblCords.length; i++) {
  83. DesignerOfflineDB.deleteObject('table_coords', page.tblCords[i]);
  84. }
  85. DesignerOfflineDB.deleteObject('pdf_pages', pageId, callback);
  86. }
  87. });
  88. };
  89. DesignerPage.loadFirstPage = function (db, callback) {
  90. DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) {
  91. var firstPage = null;
  92. for (var i = 0; i < pages.length; i++) {
  93. var page = pages[i];
  94. if (page.dbName === db) {
  95. // give preference to a page having same name as the db
  96. if (page.pageDescr === db) {
  97. callback(page);
  98. return;
  99. }
  100. if (firstPage === null) {
  101. firstPage = page;
  102. }
  103. }
  104. }
  105. callback(firstPage);
  106. });
  107. };
  108. DesignerPage.showNewPageTables = function (check) {
  109. var allTables = $('#id_scroll_tab').find('td input:checkbox');
  110. allTables.prop('checked', check);
  111. for (var tab = 0; tab < allTables.length; tab++) {
  112. var input = allTables[tab];
  113. if (input.value) {
  114. var element = document.getElementById(input.value);
  115. element.style.top = DesignerPage.getRandom(550, 20) + 'px';
  116. element.style.left = DesignerPage.getRandom(700, 20) + 'px';
  117. DesignerMove.visibleTab(input, input.value);
  118. }
  119. }
  120. selectedPage = -1;
  121. $('#page_name').text(Messages.strUntitled);
  122. DesignerMove.markUnsaved();
  123. };
  124. DesignerPage.loadHtmlForPage = function (pageId) {
  125. DesignerPage.showNewPageTables(true);
  126. DesignerPage.loadPageObjects(pageId, function (page, tblCords) {
  127. $('#name-panel').find('#page_name').text(page.pageDescr);
  128. var tableMissing = false;
  129. for (var t = 0; t < tblCords.length; t++) {
  130. var tbId = db + '.' + tblCords[t].tableName;
  131. var table = document.getElementById(tbId);
  132. if (table === null) {
  133. tableMissing = true;
  134. continue;
  135. }
  136. table.style.top = tblCords[t].y + 'px';
  137. table.style.left = tblCords[t].x + 'px';
  138. var checkbox = document.getElementById('check_vis_' + tbId);
  139. checkbox.checked = true;
  140. DesignerMove.visibleTab(checkbox, checkbox.value);
  141. }
  142. DesignerMove.markSaved();
  143. if (tableMissing === true) {
  144. DesignerMove.markUnsaved();
  145. Functions.ajaxShowMessage(Messages.strSavedPageTableMissing);
  146. }
  147. selectedPage = page.pgNr;
  148. });
  149. };
  150. DesignerPage.loadPageObjects = function (pageId, callback) {
  151. DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) {
  152. var tblCords = [];
  153. var count = page.tblCords.length;
  154. for (var i = 0; i < count; i++) {
  155. DesignerOfflineDB.loadObject('table_coords', page.tblCords[i], function (tblCord) {
  156. tblCords.push(tblCord);
  157. if (tblCords.length === count) {
  158. if (typeof callback !== 'undefined') {
  159. callback(page, tblCords);
  160. }
  161. }
  162. });
  163. }
  164. });
  165. };
  166. DesignerPage.getRandom = function (max, min) {
  167. var val = Math.random() * (max - min) + min;
  168. return Math.floor(val);
  169. };