소스 검색

Fixed memo db islation issue

Toby Chui 3 년 전
부모
커밋
a10c7a913f
6개의 변경된 파일112개의 추가작업 그리고 4개의 파일을 삭제
  1. 1 1
      web/Memo/backend/addMemo.js
  2. 7 1
      web/Memo/backend/listmemo.js
  3. 1 1
      web/Memo/backend/removeMemo.js
  4. 73 0
      web/desktop.system
  5. 11 1
      web/script/ao_module.js
  6. 19 0
      web/script/html2canvas.min.js

+ 1 - 1
web/Memo/backend/addMemo.js

@@ -1,7 +1,7 @@
 //Require paramter: memo (JSON string)
 
 newDBTableIfNotExists("Memo");
-var succ = writeDBItem("Memo",Date.now(),memo);
+var succ = writeDBItem("Memo",USERNAME + "/" + Date.now(),memo);
 if (succ == false){
     sendJSONResp(JSON.stringify({"error":"Write to database failed"}));
 }else{

+ 7 - 1
web/Memo/backend/listmemo.js

@@ -2,7 +2,13 @@
 function main(){
     newDBTableIfNotExists("Memo");
     var entries = listDBTable("Memo");
-	sendJSONResp(JSON.stringify(entries));
+    var thisUserMemo = {};
+    for (var key in entries) {
+        if (key.indexOf(USERNAME + "/") >= 0){
+            thisUserMemo[key.replace(USERNAME+"/", "")] = entries[key];
+        }
+    }
+	sendJSONResp(JSON.stringify(thisUserMemo));
 }
 
 main();

+ 1 - 1
web/Memo/backend/removeMemo.js

@@ -1,3 +1,3 @@
 //Require paramter: memoid
-deleteDBItem("Memo", memoid);
+deleteDBItem("Memo", USERNAME + "/" + memoid);
 sendJSONResp(JSON.stringify("OK"));

+ 73 - 0
web/desktop.system

@@ -12,6 +12,7 @@
     <script type="text/javascript" src="./script/ao_module.js"></script>
     <script type="text/javascript" src="./SystemAO/desktop/script/jsCalendar/source/jsCalendar.js"></script>
     <script type="text/javascript" src="./script/applocale.js"></script>
+    <script type="text/javascript" src="./script/html2canvas.min.js"></script>
     <style>
         body {
             background-repeat: no-repeat;
@@ -6232,6 +6233,78 @@
             hideAllContextMenus();
         }
 
+        var screenshotBuf = [];
+        var totalFloatWindowsLeft = 0;
+        var baseCanvas = null;
+        function screenshot(){
+            totalFloatWindowsLeft = $(".floatWindow").length;
+            baseCanvas = null;
+            screenshotBuf = [];
+            //Get the base canvas
+            
+            html2canvas(document.querySelector("body")).then(basecanvas => {
+                //Set the base canvas
+                baseCanvas = basecanvas;
+
+                //Check if the other iframe screenshot done
+                if (totalFloatWindowsLeft == 0){
+                    mergeScreenshotCanvas();
+                }
+            });
+            
+
+            //Get a screenshot from each floatWindow
+            $(".floatWindow").each(function(){
+                let contentWindow = $(this).find("iframe")[0].contentWindow;
+                let offsets = [$(this).find("iframe").offset().left, $(this).find("iframe").offset().top];
+                let thisWindowId = $(this).attr("windowid");
+                if (contentWindow.ao_module_screenshot){
+                    contentWindow.ao_module_screenshot(function(capture){
+                        screenshotBuf.push([thisWindowId,offsets,capture]);
+                        totalFloatWindowsLeft--;
+
+                        if (totalFloatWindowsLeft == 0 && baseCanvas != null){
+                            //Merge the canvas
+                            mergeScreenshotCanvas();
+                        }
+                    })
+                }else{
+                    alert("Not Found");
+                }
+                
+            });
+        }
+
+        function mergeScreenshotCanvas(){
+            //Merge the screenshots
+            var baseCtx=baseCanvas.getContext('2d');
+            for (var i = 0; i < screenshotBuf.length; i++){
+                var thisWindowID = screenshotBuf[i][0];
+                var thisOffsets = screenshotBuf[i][1];
+                var thisCanvas = screenshotBuf[i][2];
+                var thisCtx = thisCanvas.getContext('2d');
+
+                //Draw thisCtx onto baseCtx at offsets thisOffsets
+                baseCtx.drawImage(thisCanvas, thisOffsets[0], thisOffsets[1]);
+            }
+
+            downloadCanvas(baseCanvas);
+
+            //Reset paramters
+            totalFloatWindowsLeft = 0;
+            baseCanvas = null;
+            screenshotBuf = [];
+        }
+
+
+
+        function downloadCanvas(canvas){
+            var aDownloadLink = document.createElement('a');
+            aDownloadLink.download = `screenshot_${new Date().toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'}).split(":").join("_").split("/").join("-")}.png`;
+            aDownloadLink.href = canvas.toDataURL();
+            aDownloadLink.click();
+        }
+
         //Function for converting bytes to human readable sizes
         function formatBytes(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][d]}
 

+ 11 - 1
web/script/ao_module.js

@@ -72,6 +72,12 @@ document.addEventListener("DOMContentLoaded", function() {
             }
         }
     }
+     //Load html2canvas
+     if ($){
+        $.getScript(ao_root + "script/html2canvas.min.js", function() {
+            console.log("Html2canvas loaded")
+        });
+    }
 });
 
 /*
@@ -86,7 +92,11 @@ function ao_module_bindCustomIMEEvents(object){
     parent.bindObjectToIMEEvents(object);
 }
 
-
+function ao_module_screenshot(callback){
+    html2canvas(document.querySelector("body")).then(screenshot => {
+        return callback(screenshot);
+    });
+}
 
 //Get the ao_root from script includsion path
 function ao_module_getAORootFromScriptPath(){

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 19 - 0
web/script/html2canvas.min.js


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.