Skip to content

Commit

Permalink
Merge pull request #41 from ZhengLinLei/feature_task_share_record
Browse files Browse the repository at this point in the history
New Feature Share With Friends #39
  • Loading branch information
Sankeyr3 authored Oct 14, 2023
2 parents d81864a + 36c1182 commit ca67025
Show file tree
Hide file tree
Showing 9 changed files with 325 additions and 21 deletions.
2 changes: 1 addition & 1 deletion css/style.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion css/style.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 12 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width; initial-scale=1.0; viewport-fit=cover">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<!-- OPT -->
<link rel="shortcut icon" href="./source/ico.ico" type="image/x-icon">
<meta name="theme-color" content="#e6a755" />
Expand Down Expand Up @@ -45,6 +45,9 @@ <h3 class="score">BEST SCORE</h3>
</footer>
</main>

<!-- Click Event Layer -->
<section id="click-event" class="click-event"></section>

<!-- PWA installer -->
<section id="pwa-install" class="pwa-install">
<div class="pwa-install-icon">
Expand All @@ -61,9 +64,16 @@ <h3 class="score">BEST SCORE</h3>
</div>
</section>

<!-- Record Share -->
<section id="record-share" class="record-share">
<img src="">
<small>Tap to share picture</small>
</section>

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js" integrity="sha512-dLxUelApnYxpLt6K2iomGngnHO83iUvZytA3YjDUCjT0HDOHKXnVYdf3hU4JjM8uEhxf9nD1/ey98U3t2vZ0qQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/cannon.js/0.6.2/cannon.min.js" integrity="sha512-avLcnGxl5mqAX/wIKERdb1gFNkOLHh2W5JNCfJm5OugpEPBz7LNXJJ3BDjjwO00AxEY1MqdNjtEmiYhKC0ld7g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/party-js@latest/bundle/party.min.js"></script>
<script src="./js/lib/png2share.js"></script>
<script src="./js/script.js"></script>
<script>
const V = "1.0.5";
Expand All @@ -80,7 +90,7 @@ <h3 class="score">BEST SCORE</h3>
});
}
</script>
<script src="./js/pwa.min.js"></script>
<script src="./js/pwa/pwa.js"></script>
<!-- <script src="./js/script.js"></script> -->
</body>
</html>
118 changes: 118 additions & 0 deletions js/lib/png2share.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// ================================================================================

// Github: https://github.com/hughsk/canvas-pixels
//
// Get Pixel amount in a 3D canvas
function getPixels3d(gl) {
var canvas = gl.canvas
var height = canvas.height
var width = canvas.width
var buffer = new Uint8Array(width * height * 4)

gl.readPixels(0, 0
, canvas.width
, canvas.height
, gl.RGBA
, gl.UNSIGNED_BYTE
, buffer
);

return buffer
}

// Get Pixel amount in a 2D canvas
function getPixels2d(ctx) {
var canvas = ctx.canvas
var height = canvas.height
var width = canvas.width

return ctx.getImageData(0, 0, width, height).data
}



// ================================================================================


// WebGL to 2D CANVAS
// Github: https://github.com/Experience-Monks/webgl-to-canvas2d
const Webgl2canvas = (webgl, canvas2D) => {

var outCanvas = canvas2D ? canvas2D.canvas || canvas2D : document.createElement('canvas');
var outContext = outCanvas.getContext('2d');
var outImageData;

webgl = (webgl instanceof WebGLRenderingContext) ? webgl : (webgl.getContext('webgl2') || webgl.getContext('webgl') || webgl.getContext('experimental-webgl'));

outCanvas.width = webgl.canvas.width;
outCanvas.height = webgl.canvas.height;

outImageData = outContext.getImageData(0, 0, outCanvas.width, outCanvas.height);

outImageData.data.set(new Uint8ClampedArray(getPixels3d(webgl).buffer));
outContext.putImageData(outImageData, 0, 0);
outContext.translate(0, outCanvas.height);
outContext.scale(1, -1);
outContext.drawImage(outCanvas, 0, 0);
outContext.setTransform(1, 0, 0, 1, 0, 0);

return outCanvas;
};


// ================================================================================

// Stackoverflow: https://stackoverflow.com/a/17906462
// Stackoverflow: https://stackoverflow.com/questions/17906169/how-to-copy-from-one-canvas-to-other-canvas
//
// Convert WebGL Canvas to Image
// Canvas(WebGL) -> Canvas(2D){Do changes} -> Image(JPG, PNG)
const DrawCanvasCopy = (canvas, callback, callbackBlob) => {
let c = Webgl2canvas(canvas);
// Prepare new canvas
callback(c.getContext('2d'));
// Export
c.toBlob(callbackBlob);
// Delete
c.remove();
}

// ================================================================================

// Stackblock: https://stackoverflow.com/questions/68362603/share-image-via-social-media-from-pwa
//
// Convert blob to image share
const Blob2Share = async(blob) => {
if (!('share' in navigator) || !('canShare' in navigator)) {
return false;
}
const files = [new File([blob], 'newRecord.png', { type: blob.type })];
const shareData = {
text: 'Play with me. In Stackblock.io',
title: 'Stackblock.io',
files,
};
if (navigator.canShare(shareData)) {
try {
await navigator.share(shareData);
} catch (err) {
if (err.name !== 'AbortError') {
console.error(err.name, err.message);
return false;
}
}
} else {
console.warn('Sharing not supported', shareData);
return false;
}
};

const Blob2Download = (blob) => {
let a = document.createElement('a');
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "StackBlock_newRecord.png";
a.click();
window.URL.revokeObjectURL(url);
a.remove();
}
5 changes: 4 additions & 1 deletion js/pwa.js → js/pwa/pwa.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ window.addEventListener("load", () => {
if (window.matchMedia('(display-mode: standalone)').matches || window.matchMedia('(display-mode: fullscreen)').matches || window.navigator.standalone === true || localStorage.getItem('PWA_installed') === "true") {
localStorage.setItem("PWA_installed", 'true');
activeDownload = localStorage.getItem("PWA_installed");
} else {
localStorage.removeItem("PWA_installed");
activeDownload = false;
}
}

if(activeDownload || activeDownload == 'true') {
if(!activeDownload || activeDownload == 'false') {
enableDownload = true;

installBtn.addEventListener("click", () => {
Expand Down
File renamed without changes.
Loading

0 comments on commit ca67025

Please sign in to comment.