ustore.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. //delete = delets from DB
  2. //remove = removes from HTML
  3. //save = save to DB
  4. //add = changes HTML
  5. //get = get from DB
  6. //new = changes HTML
  7. //CrossSiteReference needed for WAS
  8. var test = {};
  9. var ref = $(test);
  10. $(document).on('change', '#selectfolders', function(e) {
  11. //getFolders(this.options[e.target.selectedIndex].text);
  12. listFolders(this.options[e.target.selectedIndex].text);
  13. });
  14. function showitems(anzahl){
  15. listData($( "#selectfolders option:selected" ).text(), anzahl);
  16. }
  17. function listFolders(folder = ""){
  18. $('#Folders').text("");
  19. $('#CurFolder').text("");
  20. toggleRemoveLinks(true);
  21. getAllFolders();
  22. if(folder != "" && folder != "." && folder != ".."){
  23. $("#selectfolders").val(folder);
  24. }
  25. else{
  26. $("#selectfolders").val(".");
  27. }
  28. $.ajax({
  29. type: "GET",
  30. url: "../server/folders/" + folder,
  31. dataType: "json",
  32. success: function(data) {
  33. if(folder != "" && folder != "." && folder != ".."){
  34. var clone = document.importNode(document.querySelector('#cpyFolder').content,true);
  35. $('[data-class=text]',clone).text("..");
  36. $('[data-class=link]',clone).attr('onclick','listFolders("' + folder.substr(0, folder.lastIndexOf("/")) + '")');
  37. // dont show remove link on .. folder
  38. $('[data-class=removefolder]',clone).remove()
  39. $('#Folders').append(clone);
  40. }
  41. $.each( data, function( key, value ) {
  42. var clone = document.importNode(document.querySelector('#cpyFolder').content,true);
  43. //remove /
  44. value = value.slice(0,-1)
  45. $('[data-class=text]',clone).text(value);
  46. if(folder == ""){
  47. $('[data-class=link]',clone).attr('onclick','listFolders("' + value + '")');
  48. $('[data-class=removefolder]',clone).attr('onclick','deleteFolder("' + value + '")');
  49. }
  50. else{
  51. $('[data-class=link]',clone).attr('onclick','listFolders("' + folder + "/" + value + '")');
  52. $('[data-class=removefolder]',clone).attr('onclick','deleteFolder("' + folder + "/" + value + '")');
  53. }
  54. $('#Folders').append(clone);
  55. });
  56. //new Folder
  57. var clone = document.importNode(document.querySelector('#cpyFolderNew').content,true);
  58. $('[data-class=text]',clone).text("+");
  59. $('[data-class=link]',clone).attr('onclick','createFolder("' + folder + '")');
  60. $('#Folders').append(clone);
  61. }
  62. });
  63. listData(folder)
  64. }
  65. function createFolder(folder = ""){
  66. var newFolder = window.prompt("Please enter a folder name.","");
  67. if (newFolder != null && newFolder != "") {
  68. $.ajax({
  69. type: "Post",
  70. url: "../server/folders/" + folder + "/" + newFolder,
  71. success: function(res) {
  72. listFolders(folder)
  73. }
  74. });
  75. }
  76. }
  77. function deleteFolder(datalink) {
  78. if (datalink != "" && datalink != "." && datalink != ".." && confirm('Deleting ' + datalink)) {
  79. $.ajax({
  80. type: "DELETE",
  81. url: "../server/folders/" + datalink,
  82. success: function(res) {
  83. listFolders(datalink.substr(0, datalink.lastIndexOf("/")))
  84. }
  85. });
  86. }
  87. }
  88. function listData(folder = "", anzahl = 100){
  89. $('#Data').text("");
  90. const imageext = ["png", "jpg", "svg", "JPG", "PNG", "SVG"]
  91. const movieext = ["mp4"]
  92. $('#imgUpload').attr("action", "../server/data/" + folder);
  93. $.ajax({
  94. type: "GET",
  95. url: "../server/images/" + folder + "?anzahl=" + anzahl,
  96. dataType: "json",
  97. success: function(data) {
  98. $.each( data, function( key, value ) {
  99. var ext = value.substr(value.lastIndexOf('.') + 1);
  100. if(folder == ""){
  101. fullfolder = value
  102. }
  103. else{
  104. fullfolder = folder + "/" + value;
  105. }
  106. var clone = document.importNode(document.querySelector('#DataItem').content,true);
  107. $('[data-class=name]',clone).text(value);
  108. $('[data-class=name]',clone).attr('title', value);
  109. //Image
  110. if(imageext.includes(ext)){
  111. $('[data-class=image]',clone).append("<img src='./../storage/"+ fullfolder + "' alt=''>")
  112. }
  113. else if(movieext.includes(ext)){
  114. $('[data-class=image]',clone).append("<div class='imageAlternative' style='padding-top: 0.12em;'>▶</div>")
  115. }
  116. else{
  117. $('[data-class=image]',clone).append("<div class='imageAlternative'>🗎</div>")
  118. }
  119. $('[data-class=image]',clone).attr('onclick',"overlayOn('" + fullfolder + "')");
  120. $('[data-class=inspect]',clone).attr('href','../storage/' + fullfolder + '');
  121. $('[data-class=delete]',clone).attr('href','javascript:deleteData("' + fullfolder + '");');
  122. $('[data-class=multiRemovelink]',clone).attr('name', fullfolder );
  123. $('[data-class=getLink]',clone).attr('href','javascript:copy2Clipboard("' + fullfolder + '");');
  124. $('[data-class=rename]',clone).attr('href','javascript:rename("' + fullfolder + '", "' + value.slice(0, - (ext.length +1)) +'");');
  125. $('[data-class=createSymlink]',clone).attr('href','javascript:createSymlink("' + fullfolder + '", "' + value.slice(0, - (ext.length +1)) +'");');
  126. var queryString = window.location.search;
  127. var urlParams = new URLSearchParams(queryString);
  128. if(urlParams.has('iframe')){
  129. $('[data-class=eventTrigger]',clone).css("visibility", "visible")
  130. $('[data-class=eventTrigger]',clone).attr('href','javascript:triggerEvent("' + fullfolder + '");');
  131. console.log("I am an Iframe")
  132. }
  133. $('#Data').append(clone);
  134. });
  135. }
  136. });
  137. if(folder != "" && folder != "." && folder != ".."){
  138. $('#RemoveFolder').css("display", "block")
  139. $('#removeFolderLink').attr('href','javascript:deleteFolder("' + folder + '");');
  140. }
  141. else{
  142. $('#RemoveFolder').css("display", "none")
  143. }
  144. }
  145. function triggerEvent(data) {
  146. //get url
  147. var datalink = new URL("../storage/" + data, document.baseURI).href;
  148. ref = $(test);
  149. setTimeout(function(){
  150. ref.triggerHandler('getUrl', {"url": datalink});
  151. },500);
  152. }
  153. function overlayOn(data) {
  154. var url = new URL("../storage/" + data, document.baseURI).href
  155. document.getElementById("overlay").style.display = "block";
  156. const imageext = ["png", "jpg", "svg", "PNG", "JPG", "SVG"]
  157. const movieext = ["mp4"]
  158. var ext = url.substr(url.lastIndexOf('.') + 1);
  159. if(imageext.includes(ext)){
  160. $('#overlaycontentsize').append("<img id='overlaycontent' src=" + url + "></img>");
  161. }
  162. else if(movieext.includes(ext)){
  163. $('#overlaycontentsize').append("<video id='overlaycontent' controls> <source src=" + url + " type=\"video/mp4\">Your browser does not support the video tag.</video>");
  164. }
  165. else{
  166. $('#overlaycontentsize').append("<iframe id='overlaycontent' src=" + url + "></iframe>");
  167. }
  168. }
  169. function overlayOff() {
  170. document.getElementById("overlay").style.display = "none";
  171. $('#overlaycontentsize').text("");
  172. }
  173. function toggleRemoveLinks(setoff = false) {
  174. if(setoff || $(".showremoveitems").is(":visible")){
  175. $(".showremoveitems").css("display", "none")
  176. $(".showremoveitemsNot").css("display", "inline")
  177. }
  178. else{
  179. $(".showremoveitems").css("display", "inline")
  180. $(".showremoveitemsNot").css("display", "none")
  181. }
  182. }
  183. function selectRemoveItems() {
  184. toggleRemoveLinks()
  185. }
  186. function unselectAll(){
  187. $(':input','#Data')
  188. .not(':button, :submit, :reset, :hidden')
  189. .val('')
  190. .prop('checked', false)
  191. .prop('selected', false);
  192. toggleRemoveLinks()
  193. }
  194. function selectAll(){
  195. $(':input','#Data')
  196. .not(':button, :submit, :reset, :hidden')
  197. .val('')
  198. .prop('checked', true)
  199. .prop('selected', true);
  200. }
  201. function removeSelectedItems(){
  202. var removedItems = [];
  203. $("#Data input[type=checkbox]:checked").each(function(index, data){
  204. removedItems.push($(data).attr("name"));
  205. });
  206. if (confirm('Deleting: ' + removedItems)) {
  207. $("#Data input[type=checkbox]:checked").each(function(index, data){
  208. //only refresh item list when last item is removed
  209. deleteDataItem($(data).attr("name"), index === ($("#Data input[type=checkbox]:checked").length -1))
  210. });
  211. toggleRemoveLinks()
  212. }
  213. }
  214. function deleteData(datalink) {
  215. if (confirm('Deleting ' + datalink)) {
  216. deleteDataItem(datalink)
  217. }
  218. }
  219. function deleteDataItem(datalink, refresh = true) {
  220. $.ajax({
  221. type: "DELETE",
  222. url: "../server/data/" + encodeURIComponent(datalink),
  223. success: function(res) {
  224. if(refresh)
  225. listFolders(datalink.substr(0, datalink.lastIndexOf("/")))
  226. }
  227. });
  228. }
  229. function copy2Clipboard(datalink) {
  230. new URL("../storage/" + datalink, document.baseURI).href
  231. datalink = new URL("../storage/" + datalink, document.baseURI).href;
  232. const el = document.createElement('textarea');
  233. el.value = datalink;
  234. document.body.appendChild(el);
  235. el.select();
  236. document.execCommand('copy');
  237. document.body.removeChild(el);
  238. }
  239. function createSymlink(datalink, oldfilename) {
  240. var filename = prompt("Please enter symlink filename");
  241. if (filename != null && filename != "") {
  242. var sendfilename = {"filename": filename, "oldfilename": oldfilename}
  243. $.ajax({
  244. type: "POST",
  245. data: JSON.stringify(sendfilename),
  246. headers: {"content-id": "list"},
  247. contentType: "application/json",
  248. url: "../server/data/" + datalink,
  249. success: function(res) {
  250. },
  251. error: function (request, status, error) {
  252. alert(request.responseText + status + error);
  253. }
  254. });
  255. }
  256. }
  257. function rename(datalink, oldfilename) {
  258. var filename = prompt("Please enter new filename, without file extension.", oldfilename);
  259. if (filename != null && filename != "") {
  260. var sendfilename = {"link": datalink, "oldfilename": oldfilename, "newfilename": filename}
  261. $.ajax({
  262. type: "PUT",
  263. data: JSON.stringify(sendfilename),
  264. headers: {"content-id": "list"},
  265. contentType: "application/json",
  266. url: "../server/data/" + datalink,
  267. success: function(res) {
  268. listFolders(datalink.substr(0, datalink.lastIndexOf("/")))
  269. },
  270. error: function (request, status, error) {
  271. alert(request.responseText + status + error);
  272. }
  273. });
  274. }
  275. }
  276. function getAllFolders(folder = ""){ //Get DB 2 HTML //has to be synchronus in order to update before loading the rest
  277. $('#selectfolders').find('option').remove()
  278. $('#selectfolders').append("<option>.</option>")
  279. $.ajax({
  280. type: "GET",
  281. url: "../server/allfolders/" + folder,
  282. async: false,
  283. dataType: "json",
  284. success: function(data) {
  285. $.each( data, function( key, value ) {
  286. $('#selectfolders').append("<option>" + value.slice(0,-1) +"</option>")
  287. });
  288. }
  289. });
  290. }
  291. function saveexternalfolder(folder = ""){
  292. var newFolder = window.prompt("Please enter URL","");
  293. if (newFolder != null && newFolder != "") {
  294. $.ajax({
  295. type: "Post",
  296. data: JSON.stringify({"folder": newFolder}),
  297. contentType: "application/json; charset=utf-8",
  298. dataType: "json",
  299. async:true,
  300. url: "../server/externalFolder/",
  301. success: function(res) {
  302. }
  303. });
  304. }
  305. }
  306. function listExternalFolders(folder = ""){
  307. $('#ExternalFolders').text("");
  308. if(folder == ""){
  309. $.ajax({
  310. type: "GET",
  311. url: "../server/externalFolder",
  312. dataType: "json",
  313. success: function(data) {
  314. $.each( data, function( key, value ) {
  315. var clone = document.importNode(document.querySelector('#cpyFolder').content,true);
  316. //remove /
  317. value = value.slice(0,-1)
  318. $('[data-class=text]',clone).text(value);
  319. $('[data-class=link]',clone).attr('onclick','listExternalFolders("' + value + '")');
  320. $('#ExternalFolders').append(clone);
  321. });
  322. }
  323. });
  324. }
  325. else{
  326. $('#Folders').text("");
  327. //alert($.get(folder));
  328. /*
  329. $.ajax({
  330. type: "GET",
  331. url: folder,
  332. crossDomain: true,
  333. success: function(data) {
  334. alert(data);
  335. }
  336. });
  337. */
  338. }
  339. //listData(folder)
  340. }
  341. var getUrlParameter = function getUrlParameter(sParam) {
  342. var sPageURL = window.location.search.substring(1),
  343. sURLVariables = sPageURL.split('&'),
  344. sParameterName,
  345. i;
  346. for (i = 0; i < sURLVariables.length; i++) {
  347. sParameterName = sURLVariables[i].split('=');
  348. if (sParameterName[0] === sParam) {
  349. return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
  350. }
  351. }
  352. return false;
  353. };
  354. $(document).ready(function() {
  355. var path = getUrlParameter('path');
  356. if(!path){
  357. path = "";
  358. }
  359. listFolders(path);
  360. //listExternalFolders();
  361. getAllFolders(path);
  362. });