Skip to content

Commit

Permalink
feat: flashlight & i18n & notify
Browse files Browse the repository at this point in the history
  • Loading branch information
Dachao Chen committed Sep 25, 2022
1 parent f6128ca commit e289dae
Show file tree
Hide file tree
Showing 16 changed files with 356 additions and 79 deletions.
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
- [Image Squoosh](https://squoosh.app/)
- [Smart PNG and JPEG compression](https://tinypng.com/)🏅
- [微图](https://www.zachleat.com/web/vector-raster-split/)
- [自动替换图像的背景](https://bgsub.cn/)
- [SVG Compressor](https://jakearchibald.github.io/svgomg/)
- [Convert Font to SVG](https://onlinefontconverter.com/)
- [Pixel Perfect Icon Solutions && Custom Font](https://icomoon.io/)
Expand Down Expand Up @@ -64,6 +65,7 @@
## References
- https://web.dev/tags/performance/
- https://formito.com/tools/favicon
- (Favicon Generator)[https://favicon.io/]
- https://simpleicons.org/
- https://www.cssscript.com/customizable-interactive-tooltips-pure-javascript-tippy-js/
- https://codepen.io/Metty/pen/KrvLQx
Expand Down Expand Up @@ -114,12 +116,13 @@
- [The Open Graph protocol](https://ogp.me/)
- https://xsgames.co/animatiss/
- [Security Headers](https://securityheaders.com/?q=https%3A%2F%2Flarrychen.tech%2F&followRedirects=on)
- https://webcode.tools
- [Image Maps](https://pictogon.com/?ref=usniemvuilaptrinh)

PS:
- [JSON description](https://chendachao.netlify.app/assets/data/en/chendachao.json)
- [JSON description Local](http://localhost:8088/assets/data/en/chendachao.json)

Push with `yarn deploy:patch` not ps
> **Note**
> - [JSON description](https://chendachao.netlify.app/assets/data/en/chendachao.json)
> - [JSON description Local](http://localhost:8088/assets/data/en/chendachao.json)
> Push with `yarn deploy:patch` not ps
## Commit Message
type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
"sw-offline-google-analytics": "0.0.25",
"tippy.js": "6.3.7",
"toastifier": "1.2.2",
"toastify-js": "^1.11.2",
"toastr": "2.1.4"
},
"repository": {
Expand Down
16 changes: 10 additions & 6 deletions src/app/components/dialog.css
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,23 @@ only screen and (device-width: 767px) {
}
}

.qrcode-dialog .close-icon {
position: absolute;
top: 0;
right: 0;
.qrcode-dialog .dialog-title-container {
display: flex;
align-items: center;
}

/* transform: translateY(-100%); */
.qrcode-dialog .dialog-title {
flex-grow: 1;
}

padding: 16px 8px;
.qrcode-dialog .close-icon {
background: transparent;
border: none;
outline: none;
font-weight: bold;
color: gray;
height: 0;
margin-left: 5px;
}

.qrcode-dialog .close-icon:hover {
Expand Down
54 changes: 39 additions & 15 deletions src/app/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ import 'lazysizes';
// import a plugin
import 'lazysizes/plugins/parent-fit/ls.parent-fit';
// import * as Sentry from '@sentry/browser';
import notify from './utils/notify';
// import notify from './utils/notify';
// import notify3 from './utils/notify3';
import notify4 from './utils/notify4';
// import notify4 from './utils/notify4';
import notify from './utils/notify5';
import { isIE, setEscapedHTML, initAnalytics } from './utils';
import { scrollToTop } from './utils/scroll';

Expand Down Expand Up @@ -121,19 +122,25 @@ if (isIE()) {

// const test = document.querySelector('.test');
// test.addEventListener('click', () => {
// notify.info(i18n.format({id: 'APP.NEW_VERSION_BODY'}), i18n.format({id: 'APP.NEW_VERSION_TITLE'}), {
// timeOut: 0,
// onclick: () => {
// window.location.reload();
// },
// });
// // notify.warning(i18n.format({id: 'APP.NEW_VERSION_BODY'}), i18n.format({id: 'APP.NEW_VERSION_TITLE'}), {
// // timeOut: 0,
// // onclick: () => {
// // window.location.reload();
// // },
// // });
// // notify3('test', {type: 'error'});
// // notify4.success('一条普通通知', '通知内容', {
// // duration: 0,
// // onclick: () => {
// // window.location.reload();
// // },
// // });
// notify.warning(i18n.format({id: 'APP.NEW_VERSION_BODY'}), i18n.format({id: 'APP.NEW_VERSION_TITLE'}), {
// // duration: -1,
// onClick: function(){
// window.location.reload();
// } // Callback after click
// });
// });

window.addEventListener('load', function () { // page is fully loaded
Expand Down Expand Up @@ -165,15 +172,18 @@ document.addEventListener('DOMContentLoaded', function () { // DOM fully loaded
let url = document.location.href;
const canonicalElement = document.querySelector('link[rel=canonical]');
if (canonicalElement !== null) {
url = canonicalElement.href;
url = canonicalElement.href; // location.href
}
navigator
.share({
title: 'Larry Chen\' Homepage',
text: 'Welcome to visit Larry\'s homepage',
url,
// files, // array of File objects representing files to be shared.
})
.then(() => {
notify.success('Successful shared!');
})
.then(() => console.log('Successful share!'))
.catch(error => console.log('Error sharing', error));
});
}
Expand Down Expand Up @@ -223,14 +233,16 @@ document.addEventListener('DOMContentLoaded', function () { // DOM fully loaded
var message = navigator.onLine ? '' : i18n.format({id: 'APP.OFFLINE'});
if (message) {
errorToasted = notify.error(message.toUpperCase(), '', {
timeOut: 0,
positionClass: 'toast-top-full-width',
duration: -1,
// timeOut: 0,
// positionClass: 'toast-top-full-width',
});
} else {
if (errorToasted) {
errorToasted.remove();
notify.success(i18n.format({id: 'APP.ONLINE'}), '', {
timeOut: 800,
// timeOut: 800,
duration: 800,
});
}
}
Expand Down Expand Up @@ -276,7 +288,7 @@ window.addEventListener('unhandledrejection', globalErrorHandler); // Capture pr
// };

// trigger
// window.setInterval(function() {throw new Error('Test global error catch')}, 2000);
// window.setInterval(function() {throw new Error('Test global error catch')}, 10000);

// var width=300;
// var height=200;
Expand All @@ -297,9 +309,12 @@ window.addEventListener('unhandledrejection', globalErrorHandler); // Capture pr
// window.open(url,‘win_name’,s atts);

// window.addEventListener('unload', () => {
// const endpoint = '/log';
// // Collect RUM data like before
// let rumData = new FormData();
// rumData.append('entries', JSON.stringify(performance.getEntries()));
// // rumData.append('entries', JSON.stringify(performance.getEntries()));
// const blob = new Blob([JSON.stringify(performance.getEntries())], { type: 'application/json; charset=UTF-8' });
// rumData.append('entries', blob, );
// // Check for sendBeacon support
// if ('sendBeacon' in navigator) {
// // Beacon requested
Expand All @@ -310,6 +325,15 @@ window.addEventListener('unhandledrejection', globalErrorHandler); // Capture pr
// }
// } else {
// console.log('sendBeacon not available! Use XHR or fetch instead');
// fetch(endpoint, {
// method: 'POST',
// headers: {
// "Content-Type": "application/json"
// },
// // body: JSON.stringify({some: "data"}),
// body: JSON.stringify(performance.getEntries()),
// keepalive: true
// });
// }
// }, false);

Expand Down
29 changes: 29 additions & 0 deletions src/app/utils/flashlight.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#flashlight {
position: fixed;
z-index: 1;
pointer-events: none;
width: 250px;
height: 250px;
border-radius: 100%;
}

#flashlight.grayscale {
background-color: gray;
mix-blend-mode: saturation;
}

#flashlight.white {
background-color: white;
mix-blend-mode: overlay;
}

#flashlight.soft-light {
background-color: white;
mix-blend-mode: soft-light;
filter: blur(20px);
}

#flashlight.invert {
background-color: white;
mix-blend-mode: difference;
}
28 changes: 28 additions & 0 deletions src/app/utils/flashlight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@


import './flashlight.css';

export function initFlashlight () {
const flashlightSelection = document.querySelector('#flashlight_selection');

flashlightSelection.addEventListener('change', (e) => {
const mode = e.target.value;
const light = document.getElementById('flashlight');
light.className = mode;
flashlightSelection.blur();
});
}

export function removeFlashlight () {
const flashlightSelection = document.querySelector('#flashlight_selection');
flashlightSelection.value = '';
flashlightSelection.dispatchEvent(new Event('change'));
}

export function moveFlashlight(event) {
const light = document.getElementById('flashlight');
if (light.className) {
light.style.left = `${event.clientX - 125}px`;
light.style.top = `${event.clientY - 125}px`;
}
}
1 change: 0 additions & 1 deletion src/app/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,6 @@ export function createElementFromHTMLStr(htmlString) {
const templateTag = isIE() ? 'div' : 'template';
const template = document.createElement(templateTag);
template.innerHTML = htmlString.trim();

// Change this to div.childNodes to support multiple top-level nodes.
return isIE() ? template.firstElementChild : template.content.firstChild;
}
118 changes: 118 additions & 0 deletions src/app/utils/notify5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import Toastify from 'toastify-js';
import 'toastify-js/src/toastify.css';
import './toastify.css';

import { createElementFromHTMLStr } from '.';

const defaultOptions = {
text: 'This is a toast',
// avatar: './assets/images/icons/favicon.ico',
// node: document.querySelector('.node'),
// duration: -1,
// destination: "https://github.com/apvarun/toastify-js",
// newWindow: true,
close: true,
gravity: 'top', // `top` or `bottom`
position: 'center', // `left`, `center` or `right`
stopOnFocus: true, // Prevents dismissing of toast on hover
style: {
},
};

const getTemplateStr = (message, title, avatar) => {
const img = avatar ? `<img src="${avatar}" class="toastify-avatar" style="align-self: center;margin-right: 1rem;">`
: '';

return `
<span style="display: flex;">
${img}
<span style="display: flex; flex-direction: column;">
<span class="toastify-title" style="font-weight: 700;margin-bottom: 5px;">${title}</span>
<span class="toastify-message">${message}</span>
</span>
</span>
`;
};

const notify = {
Toastify,
custom: (message, title, overrides={}) => {
const avatar = overrides.avatar;
const templateStr = getTemplateStr(message, title, avatar);

return Toastify({
...defaultOptions,
...overrides,
...{
node: createElementFromHTMLStr(templateStr),
style: {
background: 'linear-gradient(to right, #00b09b, #96c93d)',
...defaultOptions.style,
...overrides.style,
}
}
}).showToast();
},
info: (message, title, overrides) => {
const avatar = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=';
const templateStr = getTemplateStr(message, title, avatar);

return notify.custom(message, title, {
...overrides,
className: 'info',
avatar,
node: createElementFromHTMLStr(templateStr),
style: {
...defaultOptions.style,
background: '#2F96B4',
}
});
},
warning: (message, title, overrides) => {
const avatar = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=';
const templateStr = getTemplateStr(message, title, avatar);

return notify.custom(message, title, {
...overrides,
className: 'warning',
avatar,
node: createElementFromHTMLStr(templateStr),
style: {
...defaultOptions.style,
background: '#F89406',
}
});
},
success: (message, title, overrides) => {
const avatar = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==';
const templateStr = getTemplateStr(message, title, avatar);

return notify.custom(message, title, {
...overrides,
className: 'success',
avatar,
node: createElementFromHTMLStr(templateStr),
style: {
...defaultOptions.style,
background: '#51A351',
}
});
},
error: (message, title, overrides) => {
const avatar = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=';
const templateStr = getTemplateStr(message, title, avatar);

return notify.custom(message, title, {
...overrides,
className: 'error',
avatar,
node: createElementFromHTMLStr(templateStr),
style: {
...defaultOptions.style,
background: '#BD362F',
}
});
},
};

export default notify;
Loading

1 comment on commit e289dae

@vercel
Copy link

@vercel vercel bot commented on e289dae Sep 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

homepage – ./

homepage-chendachao.vercel.app
homepage-git-main-chendachao.vercel.app
chendachao.vercel.app

Please sign in to comment.