You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

notes_app.js 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. $(document).ready(function(){
  2. $("#addNoteDiv").on('click', function() {
  3. createForm();
  4. })
  5. $('#allNotesDiv').on('click', 'button', async function() {
  6. //
  7. console.log("Save")
  8. console.log(this)
  9. //
  10. let buttonId = (this.id).split("_")[1];
  11. let type = (this.id).split("_")[0];
  12. if (type == 'saveNoteButton'){
  13. await saveNoteObject(buttonId);
  14. } else if (type == 'editNoteButton'){
  15. await saveNoteObject(buttonId, true);
  16. }
  17. //
  18. console.log(buttonId)
  19. //
  20. })
  21. $('#noteStorage').on('click', 'button', async function() {
  22. //
  23. console.log("Delete")
  24. console.log(this)
  25. //
  26. let buttonId = (this.id).split("_")[1];
  27. //
  28. console.log(buttonId)
  29. //
  30. await removeBrowserItem(buttonId);
  31. })
  32. $("#refreshButton").on('click', async function() {
  33. //
  34. console.log("Refresh")
  35. //
  36. createLoadingSign(id="", append="noteStorage");
  37. enableLoadingSign(id="");
  38. await sleep(2000);
  39. disableLoadingSign(id="");
  40. await refreshBrowser();
  41. })
  42. })
  43. let id=1;
  44. function createForm(){
  45. id++;
  46. //
  47. console.log("createForm() "+id)
  48. //
  49. let wrapper = document.createElement("div");
  50. wrapper.setAttribute('id', "note"+id);
  51. wrapper.style.margin = '2.5px';
  52. let inputsWrapper = document.createElement("div");
  53. inputsWrapper.setAttribute('class', "noteDiv");
  54. let input = document.createElement("input");
  55. input.setAttribute('type', "text");
  56. input.setAttribute('name',"noteTitle");
  57. input.setAttribute('id', "inputTitle"+id);
  58. input.setAttribute('placeholder', "Enter title...");
  59. input.style.marginBottom='5px';
  60. let textAreaDiv = document.createElement("div");
  61. let textarea = document.createElement("textarea");
  62. textarea.setAttribute('name',"noteText");
  63. textarea.setAttribute('id', "noteText"+id);
  64. textarea.setAttribute('placeholder', "Enter notes...");
  65. textarea.style.width='300px';
  66. textarea.style.height='150px';
  67. textarea.style.boxSizing='border-box';
  68. textAreaDiv.appendChild(textarea);
  69. let saveNoteButton = document.createElement("button");
  70. saveNoteButton.setAttribute('type',"button");
  71. saveNoteButton.setAttribute('id',"saveNoteButton_"+id);
  72. saveNoteButton.innerHTML = 'Save';
  73. inputsWrapper.appendChild(input);
  74. inputsWrapper.appendChild(textAreaDiv);
  75. inputsWrapper.appendChild(saveNoteButton);
  76. wrapper.appendChild(inputsWrapper);
  77. document.getElementById('allNotesDiv').appendChild(wrapper);
  78. }
  79. function createFormWithSavedContent(item, id){
  80. //
  81. console.log("createFormWithSavedContent() "+id)
  82. console.log(item.title);
  83. console.log(item.text);
  84. //
  85. let wrapper = document.createElement("div")
  86. wrapper.setAttribute('id', "note"+id)
  87. let inputsWrapper = document.createElement("div")
  88. inputsWrapper.setAttribute('class', "noteDiv");
  89. let input = document.createElement("input");
  90. input.setAttribute('type', "text");
  91. input.setAttribute('name',"noteTitle");
  92. input.setAttribute('id', "inputTitle"+id);
  93. input.setAttribute('value', item.title);
  94. input.style.marginBottom='5px';
  95. let textAreaDiv = document.createElement("div");
  96. let textarea = document.createElement("textarea");
  97. textarea.setAttribute('name',"noteText");
  98. textarea.setAttribute('id', "noteText"+id);
  99. textarea.setAttribute('value', item.text);
  100. textarea.innerHTML = item.text;
  101. textarea.style.width='300px';
  102. textarea.style.height='150px';
  103. textarea.style.boxSizing='border-box';
  104. textAreaDiv.appendChild(textarea);
  105. let editNoteButton = document.createElement("button");
  106. editNoteButton.setAttribute('type',"button");
  107. editNoteButton.setAttribute('id',"editNoteButton_"+id);
  108. editNoteButton.innerHTML = 'Save';
  109. inputsWrapper.appendChild(input);
  110. inputsWrapper.appendChild(textAreaDiv);
  111. inputsWrapper.appendChild(editNoteButton);
  112. wrapper.appendChild(inputsWrapper);
  113. document.getElementById('allNotesDiv').appendChild(wrapper);
  114. }
  115. let ctr;
  116. async function sleep(ms) {
  117. try {
  118. return new Promise(resolve => setTimeout(resolve, ms));
  119. }
  120. catch (alert) {
  121. return alert(alert);
  122. }
  123. }
  124. async function removeNote(id){
  125. try {
  126. return new Promise(resolve => {
  127. localStorage.removeItem('noteObj' + id);
  128. removeBrowserItem(id);
  129. resolve();
  130. });
  131. }
  132. catch (alert) {
  133. return alert(alert);
  134. }
  135. }
  136. async function saveNote(id){
  137. try {
  138. return new Promise(resolve => {
  139. let noteTitle = document.getElementById('inputTitle' + id).value;
  140. let noteText = document.getElementById('noteText' + id).value;
  141. let noteObj = {
  142. idK: id,
  143. title: noteTitle,
  144. text: noteText
  145. };
  146. let noteObj_serialized = JSON.stringify(noteObj); //stringify noteObj so it is displayed properly when set to local Storage
  147. localStorage.setItem("noteObj" + id, noteObj_serialized);
  148. resolve(noteObj);
  149. });
  150. }
  151. catch (alert) {
  152. return alert(alert);
  153. }
  154. }
  155. async function refreshBrowser(){
  156. try {
  157. return new Promise(resolve => {
  158. let noteStorage = [];
  159. let keys = Object.keys(localStorage);
  160. let i = keys.length;
  161. while (i--) {
  162. noteStorage.push(localStorage.getItem(keys[i]));
  163. }
  164. let parentNode = document.getElementById('noteStorage');
  165. parentNode.innerHTML = '';
  166. noteStorage.forEach(element => {
  167. createBrowserItem(JSON.parse(element));
  168. });
  169. resolve();
  170. });
  171. }
  172. catch (alert) {
  173. return alert(alert);
  174. }
  175. }
  176. async function saveNoteObject(id, overwrite=false){
  177. //
  178. console.log("saveNoteObject() "+id)
  179. console.log(id)
  180. //
  181. createLoadingSign(id, append="note")
  182. enableLoadingSign(id);
  183. await sleep(10000) //sleep() simulates the delay that would occur when there is a remote server access or similar,
  184. //so instead of sleep would be e.g. saveToRemoteServer()...
  185. //the leftover code of the async function is executed after the delay
  186. disableLoadingSign(id);
  187. if (overwrite == true){
  188. await removeNote(id);
  189. }
  190. let obj = await saveNote(id);
  191. createBrowserItem(obj);
  192. document.getElementById("note"+id).remove();
  193. }
  194. function enableLoadingSign(id){
  195. console.log("id:"+id);
  196. let target = 'loadSign'+id;
  197. console.log("enableLoadingSign() "+id)
  198. document.getElementById(target).style.display = "block";
  199. }
  200. function disableLoadingSign(id){
  201. console.log("id:"+id);
  202. let target = 'loadSign'+id;
  203. let sign = document.getElementById(target);
  204. sign.style.display = "none";
  205. sign.parentNode.removeChild(sign);
  206. }
  207. function createLoadingSign(id, append){
  208. console.log("id:"+id);
  209. let target = 'loadSign'+id;
  210. let appendTo = append+id;
  211. console.log(appendTo);
  212. console.log("createLoadingSign() "+id)
  213. let loadingSign = document.createElement('div');
  214. let loadingSignWrapper = document.createElement('div');
  215. loadingSign.setAttribute('class', 'loader')
  216. loadingSign.setAttribute('id', target);
  217. loadingSignWrapper.appendChild(loadingSign);
  218. document.getElementById(appendTo).appendChild(loadingSignWrapper);
  219. }
  220. function createBrowserItem(item){
  221. console.log(item);
  222. let wrapperDiv = document.createElement('div');
  223. let browserItem = document.createElement('div');
  224. let deleteButton = document.createElement('button');
  225. wrapperDiv.setAttribute('class', 'browserElement');
  226. browserItem.innerHTML = item.title;
  227. deleteButton.style.marginLeft = '2px';
  228. deleteButton.innerHTML = "X";
  229. browserItem.setAttribute('id', "browserItem_"+item.idK);
  230. browserItem.setAttribute('onClick', "getSavedNote(this.id)");
  231. deleteButton.setAttribute('id', "deleteItem_" + item.idK);
  232. wrapperDiv.appendChild(browserItem);
  233. wrapperDiv.appendChild(deleteButton);
  234. document.getElementById('noteStorage').appendChild(wrapperDiv);
  235. }
  236. async function removeBrowserItem(id){
  237. try {
  238. return new Promise(resolve => {
  239. console.log("removeBrowserItem() " + id);
  240. localStorage.removeItem('noteObj' + id);
  241. document.getElementById("browserItem_" + id).remove();
  242. document.getElementById("deleteItem_" + id).remove();
  243. resolve();
  244. });
  245. }
  246. catch (alert) {
  247. return alert(alert);
  248. }
  249. }
  250. async function getSavedNote(id){
  251. console.log("getSavedNote() "+ id);
  252. createLoadingSign("", "allNotesDiv");
  253. enableLoadingSign("");
  254. await sleep(5000);
  255. disableLoadingSign("");
  256. console.log("id before split " + id);
  257. let idTmp = id.split("_")[1];
  258. console.log("idTmp " +idTmp);
  259. let item = await new Promise(resolve => {
  260. let item = JSON.parse(localStorage.getItem('noteObj'+idTmp));
  261. console.log("in promise "+item);
  262. resolve(item);
  263. })
  264. console.log(item);
  265. createFormWithSavedContent(item, idTmp);
  266. }