|
@@ -11,6 +11,7 @@
|
|
|
<script src="../script/ao_module.js"></script>
|
|
|
<script src="script/lightpick/moment.min.js"></script>
|
|
|
<script src="script/lightpick/lightpick.js"></script>
|
|
|
+ <link rel="icon" type="image/png" href="img/small_icon.png"/>
|
|
|
<title>Memo</title>
|
|
|
<style>
|
|
|
body{
|
|
@@ -28,7 +29,7 @@
|
|
|
</nav>
|
|
|
<div class="box">
|
|
|
<button class="button is-warning" onclick="openMemoBox();">New Memo</button>
|
|
|
- <button class="button is-link is-light">Refresh</button>
|
|
|
+ <button class="button is-link is-light" onclick="listAllMemo();">Refresh</button>
|
|
|
</div>
|
|
|
<div id="memobox" class="box" style="display:none;">
|
|
|
<h2 class="title is-4">New Memo</h2>
|
|
@@ -60,12 +61,21 @@
|
|
|
<button class="button is-link is-light" onclick="cancelNewMemo();">Cancel</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
+ <div id="memolist">
|
|
|
+
|
|
|
</div>
|
|
|
<script>
|
|
|
let deadline = 0;
|
|
|
+ let memoBuf = {};
|
|
|
+ let removeMemoAfterSubmit = false;
|
|
|
+ let currentEditingMemoID = 0;
|
|
|
|
|
|
function openMemoBox(){
|
|
|
deadline = 0;
|
|
|
+ removeMemoAfterSubmit = false;
|
|
|
+ $("#title").val("");
|
|
|
+ $("#message").val("");
|
|
|
$("#deadline").val("");
|
|
|
$("#memobox").slideToggle("fast");
|
|
|
}
|
|
@@ -82,8 +92,106 @@
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ function timestampToDateString(key){
|
|
|
+ return new Date(parseInt(key)).toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'})
|
|
|
+ }
|
|
|
+
|
|
|
+ function listAllMemo(){
|
|
|
+ $("#memolist").html("");
|
|
|
+ memoBuf = {};
|
|
|
+ ao_module_agirun("Memo/backend/listmemo.js", {}, function(data){
|
|
|
+ let memos = [];
|
|
|
+ for (var [key, value] of Object.entries(data)) {
|
|
|
+ let content = JSON.parse(value);
|
|
|
+ console.log(key, content);
|
|
|
+ memoBuf[key] = content;
|
|
|
+ memos.push([key, content]);
|
|
|
+ }
|
|
|
+
|
|
|
+ memos.reverse();
|
|
|
+ memos.forEach(function(memo){
|
|
|
+ let key = memo[0];
|
|
|
+ let content = memo[1];
|
|
|
+ let deadline = timestampToDateString(content.deadline * 1000);
|
|
|
+ if (content.deadline == 0){
|
|
|
+ deadline = "No Deadline";
|
|
|
+ }
|
|
|
+ $("#memolist").append(`<div class="card">
|
|
|
+ <div class="card-content">
|
|
|
+ <div class="media">
|
|
|
+ <div class="media-left">
|
|
|
+ <figure class="image is-48x48">
|
|
|
+ <img src="img/small_icon.png">
|
|
|
+ </figure>
|
|
|
+ </div>
|
|
|
+ <div class="media-content">
|
|
|
+ <p class="title is-4">${content.title}</p>
|
|
|
+ <p class="subtitle is-6">${deadline}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
- function createNewMemo(){
|
|
|
+ <div class="content">
|
|
|
+ ${content.message}
|
|
|
+ <br>
|
|
|
+ <time>Creation Date: ${timestampToDateString(key)}</time>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <footer class="card-footer">
|
|
|
+ <a href="#" class="card-footer-item" memo="${key}" onclick="moveToTop(this)">Move to Top</a>
|
|
|
+ <a href="#" class="card-footer-item" memo="${key}" onclick="editMemo(this);">Edit</a>
|
|
|
+ <a href="#" class="card-footer-item" memo="${key}" onclick="removeMemoByButton(this);">Delete</a>
|
|
|
+ </footer>
|
|
|
+ </div><br>`);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ listAllMemo();
|
|
|
+
|
|
|
+ function editMemo(btn){
|
|
|
+ let memoID = $(btn).attr("memo");
|
|
|
+ loadMemoContentIntoNewMemoField(memoBuf[memoID]);
|
|
|
+ $("#memobox").slideDown("fast");
|
|
|
+ removeMemoAfterSubmit = true;
|
|
|
+ currentEditingMemoID = memoID;
|
|
|
+ }
|
|
|
+
|
|
|
+ function loadMemoContentIntoNewMemoField(content){
|
|
|
+ $("#title").val(content.title);
|
|
|
+ $("#message").val(content.message);
|
|
|
+ if (content.deadline > 0){
|
|
|
+ $("#deadline").val(new Date(content.deadline * 1000).toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}));
|
|
|
+ }
|
|
|
+ deadline = content.deadline;
|
|
|
+ }
|
|
|
+
|
|
|
+ function moveToTop(btn){
|
|
|
+ let memoID = $(btn).attr("memo");
|
|
|
+ loadMemoContentIntoNewMemoField(memoBuf[memoID]);
|
|
|
+ createNewMemo(function(){
|
|
|
+ removeMemo(memoID);
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function removeMemoByButton(btn){
|
|
|
+ let memoID = $(btn).attr("memo");
|
|
|
+ removeMemo(memoID);
|
|
|
+ }
|
|
|
+
|
|
|
+ function removeMemo(memoID, callback){
|
|
|
+ ao_module_agirun("Memo/backend/removeMemo.js", {
|
|
|
+ "memoid": memoID
|
|
|
+ }, function(data){
|
|
|
+ console.log(data);
|
|
|
+ listAllMemo();
|
|
|
+ if (callback){
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function createNewMemo(callback=undefined){
|
|
|
//Create AJAX request
|
|
|
let payload = {
|
|
|
"title": $("#title").val().replace(/<[^>]*>?/gm, ''),
|
|
@@ -92,7 +200,27 @@
|
|
|
}
|
|
|
|
|
|
console.log(payload);
|
|
|
- $("#memobox").slideUp("fast");
|
|
|
+ ao_module_agirun("Memo/backend/addMemo.js", {
|
|
|
+ "memo": JSON.stringify(payload)
|
|
|
+ }, function(data){
|
|
|
+ if (data.error == undefined){
|
|
|
+ $("#memobox").slideUp("fast");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (removeMemoAfterSubmit){
|
|
|
+ removeMemoAfterSubmit = false;
|
|
|
+ removeMemo(currentEditingMemoID, callback);
|
|
|
+ currentEditingMemoID = 0;
|
|
|
+ }else{
|
|
|
+ if (callback){
|
|
|
+ callback();
|
|
|
+ }else{
|
|
|
+ listAllMemo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|