shortcutCreator.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="mobile-web-app-capable" content="yes">
  5. <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
  6. <meta charset="UTF-8">
  7. <link rel="stylesheet" href="../../script/semantic/semantic.min.css">
  8. <script src="../../script/jquery.min.js"></script>
  9. <script src="../../script/semantic/semantic.min.js"></script>
  10. <script src="../../script/ao_module.js"></script>
  11. <style>
  12. .hidden{
  13. display:none;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <br>
  19. <div class="ui container">
  20. <div class="ui ordered fluid steps">
  21. <div id="stepOneState" class="active step">
  22. <div class="content">
  23. <div class="title">Select Type</div>
  24. <div class="description">Choose a shortcut type</div>
  25. </div>
  26. </div>
  27. <div id="stepTwoState" class="step">
  28. <div class="content">
  29. <div class="title">Select Path</div>
  30. <div class="description">Fill shortcut target path</div>
  31. </div>
  32. </div>
  33. <div id="stepThreeState" class="step">
  34. <div class="content">
  35. <div class="title">Create</div>
  36. <div class="description">Generate shortcut</div>
  37. </div>
  38. </div>
  39. </div>
  40. <div id="stepOne" class="ui segment">
  41. <p>Select a type of shortcut you want to create:</p>
  42. <div class="ui selection fluid dropdown">
  43. <input id="selectType" type="hidden" onchange="updateDesc();">
  44. <i class="dropdown icon"></i>
  45. <div class="default text">Shortcut Type</div>
  46. <div class="menu">
  47. <div class="item" data-value="0">WebApp Module</div>
  48. <div class="item" data-value="1">Folder / Directory</div>
  49. <div class="item" data-value="2">Website URL</div>
  50. </div>
  51. </div>
  52. <div id="typeExplain" class="ui segment" style="display:none;">
  53. <div class="ui feed">
  54. <div class="event">
  55. <div class="label">
  56. <img id="typeIcon" src="">
  57. </div>
  58. <div class="content">
  59. <div id="typeName" class="summary">
  60. </div>
  61. <div id="typeExplainText" class="extra text">
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. <br>
  68. <button class="ui primary button" onclick="moveToStepTwo();">
  69. Next
  70. </button>
  71. </button>
  72. <button class="ui button">
  73. Cancel
  74. </button>
  75. </div>
  76. <div id="stepTwoModule" class="ui segment stageTwo hidden">
  77. <p>Select a module to create the shortcut</p>
  78. <select id="moduleList" class="ui search fluid dropdown" onchange="updateModuleInfo(this.value);">
  79. <option value="">Select WebApp Module</option>
  80. </select>
  81. <small id="moduleInfo"></small>
  82. <br><br>
  83. <button class="ui primary button" onclick="createModuleShortcut();">
  84. Next
  85. </button>
  86. </button>
  87. <button class="ui button" onclick="backToStepOne();">
  88. Back
  89. </button>
  90. </div>
  91. <div id="stepTwoFolder" class="ui segment stageTwo hidden">
  92. <p>Open or Enter a valid path for folder shortcut</p>
  93. <div class="ui corner fluid labeled input">
  94. <input id="shortcutname" type="text" placeholder="Folder Shortcut Name" value="Folder Shortcut">
  95. </div>
  96. <br>
  97. <div class="ui action fluid input">
  98. <input id="folderpath" type="text" value="" placeholder="e.g. user:/Desktop">
  99. <button class="ui teal right labeled icon button" onclick="selectTargetFolder();">
  100. <i class="folder open icon"></i>
  101. Open
  102. </button>
  103. </div>
  104. <br><br>
  105. <button class="ui primary button" onclick="createFolderShortcut();">
  106. Next
  107. </button>
  108. </button>
  109. <button class="ui button" onclick="backToStepOne();">
  110. Back
  111. </button>
  112. </div>
  113. <div id="stepTwoURL" class="ui segment stageTwo hidden">
  114. <p>Enter the shortcut name in the input below</p>
  115. <div class="ui corner fluid labeled input">
  116. <input id="urlshortcutname" type="text" placeholder="Website Name" value="My Website">
  117. </div>
  118. <br>
  119. <p>Enter the target URL in the input below (including http:// or https://)</p>
  120. <div class="ui icon fluid input">
  121. <input id="urlShortcut" type="text" placeholder="Website URL">
  122. <i class="globe icon"></i>
  123. </div>
  124. <br><br>
  125. <button class="ui primary button" onclick="createURLShortcut();">
  126. Next
  127. </button>
  128. </button>
  129. <button class="ui button" onclick="backToStepOne();">
  130. Back
  131. </button>
  132. </div>
  133. <div id="stepThree" class="ui segment hidden">
  134. <br>
  135. <div style="width:100%;" align="center">
  136. <h2 class="ui icon header">
  137. <i class="green checkmark icon"></i>
  138. <div class="content">
  139. Shortcut Created
  140. <div class="sub header">Your shortcut has been created. You can now close this windows.</div>
  141. </div>
  142. </h2>
  143. </div>
  144. <br>
  145. <button class="ui positive button right floated" onclick="ao_module_close();">
  146. OK
  147. </button>
  148. <br><br>
  149. </div>
  150. <div id="stepThreeCrashed" class="ui segment hidden">
  151. <br>
  152. <div style="width:100%;" align="center">
  153. <h2 class="ui icon header">
  154. <i class="red remove icon"></i>
  155. <div class="content">
  156. Shortcut Creation Failed
  157. <div class="sub header" id="errmsg">Unable to create shortcut. Please try again later.</div>
  158. </div>
  159. </h2>
  160. </div>
  161. <br>
  162. <button class="ui negative button right floated" onclick="ao_module_close();">
  163. Exit
  164. </button>
  165. <br><br>
  166. </div>
  167. </div>
  168. <script>
  169. initModuleList();
  170. function initModuleList(){
  171. $.get("../../system/modules/list",function(data){
  172. if (data.error !== undefined){
  173. alert(data.error);
  174. }else{
  175. for (var i = 0 ;i < data.length; i++){
  176. var thisModule = data[i];
  177. if (thisModule.StartDir != ""){
  178. var moduleInfoEncoded = encodeURIComponent(JSON.stringify(thisModule));
  179. $("#moduleList").append(`<option value="${moduleInfoEncoded}">${thisModule.Name}</option>`);
  180. }
  181. }
  182. $('.ui.dropdown').dropdown();
  183. }
  184. });
  185. }
  186. function updateModuleInfo(moduleInfo){
  187. moduleInfo = JSON.parse(decodeURIComponent(moduleInfo));
  188. $("#moduleInfo").html(`
  189. <img class="ui avatar image" src="../../${moduleInfo.IconPath}">
  190. <span>${moduleInfo.StartDir} (version: ${moduleInfo.Version})</span>`);
  191. }
  192. function createModuleShortcut(){
  193. var moduleInfo = JSON.parse(decodeURIComponent($("#moduleList").val()));
  194. //Use the startup path for embeded > fw > default
  195. var moduleIcon = moduleInfo.IconPath;
  196. if (imageExists("../../" + moduleIcon.replace("small_icon","desktop_icon"))){
  197. moduleIcon = moduleIcon.replace("small_icon","desktop_icon");
  198. }
  199. generateShortcutFile("module",moduleInfo.Name, moduleInfo.Name, moduleIcon);
  200. $(".stageTwo").slideUp();
  201. $("#stepTwoState").addClass("completed");
  202. $("#stepThree").slideDown();
  203. }
  204. function backToStepOne(){
  205. $("#stepTwoState").removeClass("completed");
  206. $(".stageTwo").slideUp();
  207. $("#stepOne").slideDown();
  208. }
  209. function generateShortcutFile(shortcutType, shortcutText, shortCutPath, shortcutIcon){
  210. //Generate the shortcut file object
  211. $.ajax({
  212. url: "../../system/desktop/createShortcut",
  213. data: {"stype": shortcutType, "stext": shortcutText, "spath": shortCutPath, "sicon":shortcutIcon },
  214. method: "POST",
  215. success: function(data){
  216. if (data.error !== undefined){
  217. $("#errmsg").text(data.error);
  218. $("#stepThreeCrashed").slideDown();
  219. $("#stepThree").hide();
  220. }else{
  221. console.log(data);
  222. //Refresh desktop
  223. parent.refresh();
  224. }
  225. }
  226. })
  227. }
  228. function imageExists(image_url){
  229. var http = new XMLHttpRequest();
  230. http.open('HEAD', image_url, false);
  231. http.send();
  232. return http.status != 404;
  233. }
  234. function createURLShortcut(){
  235. var url = $("#urlShortcut").val();
  236. var shortcutname = $("#urlshortcutname").val();
  237. if (url == ""){
  238. return;
  239. }
  240. var urlchunk = url.split("/");
  241. var iconpath = urlchunk[0] + "//" + urlchunk[2] + "/favicon.ico";
  242. generateShortcutFile("url",shortcutname, url, iconpath);
  243. $(".stageTwo").slideUp();
  244. $("#stepTwoState").addClass("completed");
  245. $("#stepThree").slideDown();
  246. }
  247. function moveToStepTwo(){
  248. var selection = $("#selectType").val();
  249. if (selection == "0"){
  250. $("#stepTwoModule").slideDown();
  251. }else if (selection == "1"){
  252. $("#stepTwoFolder").slideDown();
  253. }else if (selection == "2"){
  254. $("#stepTwoURL").slideDown();
  255. }else{
  256. return;
  257. }
  258. $("#stepOneState").addClass("completed");
  259. $("#stepOne").slideUp();
  260. }
  261. function selectTargetFolder(){
  262. ao_module_openFileSelector(fileSelected, "user:/Desktop", "folder",true);
  263. }
  264. function fileSelected(filedata){
  265. console.log(filedata);
  266. for (var i=0; i < filedata.length; i++){
  267. var filename = filedata[i].filename;
  268. var filepath = filedata[i].filepath;
  269. $("#folderpath").val(filepath);
  270. //Filter / and : from the filename
  271. filename = filename.split(":").join("")
  272. filename = filename.split("/").join("")
  273. $("#shortcutname").val(filename);
  274. }
  275. }
  276. function createFolderShortcut(){
  277. var folderpath = $("#folderpath").val();
  278. var shortcutname = $("#shortcutname").val();
  279. if (folderpath == ""){
  280. return;
  281. }
  282. if (shortcutname == ""){
  283. shortcutname = folderpath.split("/").pop();
  284. if (shortcutname == ""){
  285. shortcutname = folderpath.split("/")[0];
  286. }
  287. }
  288. generateShortcutFile("folder",shortcutname, folderpath,"img/system/folder-shortcut.png");
  289. $(".stageTwo").slideUp();
  290. $("#stepTwoState").addClass("completed");
  291. $("#stepThree").slideDown();
  292. }
  293. function updateDesc(){
  294. var selection = $("#selectType").val();
  295. var src = "";
  296. var typeName = "";
  297. var typeDesc = "";
  298. if (selection == "0"){
  299. src = "img/a-module.png";
  300. typeName = "WebApp Modules";
  301. typeDesc = "The webapp / modules loaded onto the ArOZ Online System. You can start the module by double clicking the shortcut or drag files onto it on Desktop.";
  302. }else if (selection == "1"){
  303. src = "img/Directory.png";
  304. typeName = "Directory";
  305. typeDesc = "A folder shortcut that redirect you to another folder when launched.";
  306. }else if (selection == "2"){
  307. src = "img/Weburl.png";
  308. typeName = "Web URL";
  309. typeDesc = "A website or web resources that can be opened via double click.";
  310. }
  311. $("#typeIcon").attr('src', src);
  312. $("#typeName").text(typeName);
  313. $("#typeExplainText").text(typeDesc);
  314. $("#typeExplain").hide().slideDown();
  315. }
  316. </script>
  317. </body>
  318. </html>