file_versions.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <html>
  2. <head>
  3. <title locale="title/title">File Version History</title>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
  6. <link rel="stylesheet" href="../../script/semantic/semantic.css">
  7. <script type="text/javascript" src="../../script/jquery.min.js"></script>
  8. <script type="text/javascript" src="../../script/semantic/semantic.min.js"></script>
  9. <script type="text/javascript" src="../../script/ao_module.js"></script>
  10. <script type="text/javascript" src="../../script/applocale.js"></script>
  11. <style>
  12. </style>
  13. </head>
  14. <body id="filePropertiesWindow">
  15. <br>
  16. <div class="ui container">
  17. <h3 class="ui header">
  18. <span locale="title/title">File Version History</span>
  19. <div class="sub header" locale="title/desc">Any file versions that is more than 30 days old will be automatically removed from the system.</div>
  20. </h3>
  21. <button onclick="createSnapshot();" class="ui basic green button"><i class="ui add icon"></i> <span locale="button/newver">Create New Version</span></button>
  22. <div class="ui divider"></div>
  23. <div id="succ" style="display:none;" class="ui green message">
  24. <i class="ui checkmark icon"></i> <span id="msg">File Restore Succeed</span>
  25. </div>
  26. <div>
  27. <table class="ui very basic fluid celled table unstackable">
  28. <tbody id="versions">
  29. <tr>
  30. <td>
  31. <h4 class="ui header">
  32. <div class="content">
  33. <span locale="message/nofile/title">No File</span>
  34. <div locale="message/nofile/desc" class="sub header">Invalid usage</div>
  35. </div>
  36. </h4>
  37. </td>
  38. </tr>
  39. </tbody>
  40. </table>
  41. </div>
  42. <div class="ui divider"></div>
  43. <button class="ui red button" onclick="deleteAllVersions();"><i class="ui trash icon"></i> <span locale="button/removeAll">Remove All Version Histories</span></button>
  44. <br>
  45. </div>
  46. <script>
  47. var files = ao_module_loadInputFiles();
  48. var targetFile = "";
  49. var currentVersionList = [];
  50. if (files.length >= 1){
  51. targetFile = files[0];
  52. applocale.init("../../SystemAO/locale/file_versions.json", function(){
  53. applocale.translate();
  54. loadVersionHistory(targetFile);
  55. });
  56. setInterval(function(){
  57. checkHistoryListUpdate(targetFile);
  58. }, 3000)
  59. }else{
  60. //No file selected
  61. applocale.init("../../SystemAO/locale/file_versions.json", function(){
  62. applocale.translate();
  63. });
  64. }
  65. function checkHistoryListUpdate(vpath){
  66. $.ajax({
  67. url: "../../system/file_system/versionHistory",
  68. data: {path: vpath},
  69. method: "POST",
  70. success: function(data){
  71. if (data.error == undefined){
  72. if (currentVersionList.length != data.Versions.length){
  73. loadVersionHistory(vpath);
  74. }
  75. }
  76. }
  77. });
  78. }
  79. function loadVersionHistory(vpath){
  80. $("#versions").html("Loading...");
  81. $.ajax({
  82. url: "../../system/file_system/versionHistory",
  83. data: {path: vpath},
  84. method: "POST",
  85. success: function(data){
  86. if (data.error !== undefined){
  87. alert(data.error);
  88. }else{
  89. $("#versions").html("");
  90. currentVersionList = data.Versions;
  91. data.Versions.forEach(fileVersionEntry => {
  92. var filesize = ao_module_utils.formatBytes(fileVersionEntry.Filesize, 1);
  93. $("#versions").append(`<tr>
  94. <td>
  95. <h4 class="ui header">
  96. <div class="content">
  97. <span>${fileVersionEntry.Filename}</span>
  98. <div class="sub header">${fileVersionEntry.OverwriteTime} / ${filesize}</div>
  99. </div>
  100. </h4></td>
  101. <td>
  102. <div class="ui icon mini buttons">
  103. <button relpath="${fileVersionEntry.Relpath}" onclick="downloadVersion(this);" class="ui very basic icon button" title="${applocale.getString("title/download", "Download Version")}"><i class="ui blue download icon"></i></button>
  104. <button verid="${fileVersionEntry.HistoryID}" onclick="restoreVersion(this);" class="ui very basic icon button" title="${applocale.getString("title/restore", "Restore This Version")}"><i class="ui green history icon"></i></button>
  105. <button verid="${fileVersionEntry.HistoryID}" onclick="deleteVersion(this);" class="ui very basic icon button" title="${applocale.getString("title/delete", "Delete")}"><i class="ui red trash icon"></i></button>
  106. </div>
  107. </td>
  108. </tr>`);
  109. });
  110. if (data.Versions.length == 0){
  111. //This file has no version history
  112. $("#versions").html(`<tr>
  113. <td>
  114. <h4 class="ui header">
  115. <div class="content">
  116. <i class="ui history icon"></i><span> ${applocale.getString("message/nohist/title", "No History")}</span>
  117. <div class="sub header">${applocale.getString("message/nohist/desc", "This file has no previous version histories.")}</div>
  118. </div>
  119. </h4>
  120. </td>
  121. </tr>`);
  122. }
  123. }
  124. }
  125. });
  126. }
  127. function downloadVersion(object){
  128. var relpath = $(object).attr("relpath");
  129. var dirname = targetFile.split("/");
  130. dirname.pop();
  131. var accessPath = dirname.join("/") + "/" + relpath;
  132. window.open("../../media?file=" + accessPath + "&download=true")
  133. }
  134. function createSnapshot(){
  135. //Create a snapshot of the current object
  136. $.ajax({
  137. url: "../../system/file_system/versionHistory",
  138. data: {path: targetFile, opr: "new"},
  139. method: "POST",
  140. success: function(data){
  141. if (data.error != undefined){
  142. alert(data.error)
  143. }else{
  144. msgbox(applocale.getString("msgbox/created","New Version Created"));
  145. loadVersionHistory(targetFile);
  146. }
  147. }
  148. });
  149. }
  150. function restoreVersion(object){
  151. var versionID = $(object).attr("verid");
  152. if (confirm(applocale.getString("warning/restore", "Restoring this file will remove all newer version histories of this file. Confirm?"))){
  153. $.ajax({
  154. url: "../../system/file_system/versionHistory",
  155. data: {path: targetFile, opr: "restore", histid: versionID},
  156. method: "POST",
  157. success: function(data){
  158. if (data.error != undefined){
  159. alert(data.error)
  160. }else{
  161. loadVersionHistory(targetFile);
  162. msgbox(applocale.getString("msgbox/restored","Restore Succeed"));
  163. }
  164. }
  165. });
  166. }
  167. }
  168. function msgbox(message){
  169. $("#msg").text(message);
  170. $("#succ").stop().finish().fadeIn("fast").delay(3000).fadeOut("fast");
  171. }
  172. function deleteVersion(object){
  173. var versionID = $(object).attr("verid");
  174. $.ajax({
  175. url: "../../system/file_system/versionHistory",
  176. data: {path: targetFile, opr: "delete", histid: versionID},
  177. method: "POST",
  178. success: function(data){
  179. if (data.error != undefined){
  180. alert(data.error)
  181. }else{
  182. loadVersionHistory(targetFile);
  183. }
  184. }
  185. });
  186. }
  187. function deleteAllVersions(object){
  188. var versionID = $(object).attr("verid");
  189. if (confirm(applocale.getString("warning/deleteall", "This operation will **PERMANENTLY DELETE ALL** version history of this file. Confirm?"))){
  190. $.ajax({
  191. url: "../../system/file_system/versionHistory",
  192. data: {path: targetFile, opr: "deleteAll", histid: versionID},
  193. method: "POST",
  194. success: function(data){
  195. if (data.error != undefined){
  196. alert(data.error)
  197. }else{
  198. msgbox(applocale.getString("msgbox/deletedall","All version history deleted"));
  199. loadVersionHistory(targetFile);
  200. }
  201. }
  202. });
  203. }
  204. }
  205. </script>
  206. </body>
  207. </html>