Compare commits

...

2 commits

13 changed files with 181 additions and 376 deletions

133
package-lock.json generated
View file

@ -5,7 +5,7 @@
"packages": {
"": {
"dependencies": {
"@swc/core": "^1.4.0",
"@swc/core": "^1.4.2",
"autoprefixer": "^10.4.17",
"cssnano": "^6.0.3",
"html-minifier-terser": "^7.2.0",
@ -26,9 +26,9 @@
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"engines": {
"node": ">=6.0.0"
}
@ -65,12 +65,12 @@
}
},
"node_modules/@swc/core": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.0.tgz",
"integrity": "sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz",
"integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==",
"hasInstallScript": true,
"dependencies": {
"@swc/counter": "^0.1.1",
"@swc/counter": "^0.1.2",
"@swc/types": "^0.1.5"
},
"engines": {
@ -81,16 +81,16 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.4.0",
"@swc/core-darwin-x64": "1.4.0",
"@swc/core-linux-arm-gnueabihf": "1.4.0",
"@swc/core-linux-arm64-gnu": "1.4.0",
"@swc/core-linux-arm64-musl": "1.4.0",
"@swc/core-linux-x64-gnu": "1.4.0",
"@swc/core-linux-x64-musl": "1.4.0",
"@swc/core-win32-arm64-msvc": "1.4.0",
"@swc/core-win32-ia32-msvc": "1.4.0",
"@swc/core-win32-x64-msvc": "1.4.0"
"@swc/core-darwin-arm64": "1.4.2",
"@swc/core-darwin-x64": "1.4.2",
"@swc/core-linux-arm-gnueabihf": "1.4.2",
"@swc/core-linux-arm64-gnu": "1.4.2",
"@swc/core-linux-arm64-musl": "1.4.2",
"@swc/core-linux-x64-gnu": "1.4.2",
"@swc/core-linux-x64-musl": "1.4.2",
"@swc/core-win32-arm64-msvc": "1.4.2",
"@swc/core-win32-ia32-msvc": "1.4.2",
"@swc/core-win32-x64-msvc": "1.4.2"
},
"peerDependencies": {
"@swc/helpers": "^0.5.0"
@ -102,9 +102,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz",
"integrity": "sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz",
"integrity": "sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==",
"cpu": [
"arm64"
],
@ -117,9 +117,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz",
"integrity": "sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz",
"integrity": "sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==",
"cpu": [
"x64"
],
@ -132,9 +132,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz",
"integrity": "sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz",
"integrity": "sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==",
"cpu": [
"arm"
],
@ -147,9 +147,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz",
"integrity": "sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz",
"integrity": "sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==",
"cpu": [
"arm64"
],
@ -162,9 +162,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz",
"integrity": "sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz",
"integrity": "sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==",
"cpu": [
"arm64"
],
@ -177,9 +177,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz",
"integrity": "sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz",
"integrity": "sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==",
"cpu": [
"x64"
],
@ -192,9 +192,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz",
"integrity": "sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz",
"integrity": "sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==",
"cpu": [
"x64"
],
@ -207,9 +207,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz",
"integrity": "sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz",
"integrity": "sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==",
"cpu": [
"arm64"
],
@ -222,9 +222,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz",
"integrity": "sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz",
"integrity": "sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==",
"cpu": [
"ia32"
],
@ -237,9 +237,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz",
"integrity": "sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz",
"integrity": "sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==",
"cpu": [
"x64"
],
@ -322,9 +322,9 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/browserslist": {
"version": "4.22.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz",
"integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
"version": "4.23.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
"funding": [
{
"type": "opencollective",
@ -340,8 +340,8 @@
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
"caniuse-lite": "^1.0.30001587",
"electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
@ -378,9 +378,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001585",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz",
"integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==",
"version": "1.0.30001588",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz",
"integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==",
"funding": [
{
"type": "opencollective",
@ -643,9 +643,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.4.665",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz",
"integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw=="
"version": "1.4.677",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz",
"integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q=="
},
"node_modules/entities": {
"version": "4.5.0",
@ -699,11 +699,14 @@
}
},
"node_modules/lilconfig": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
"integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
"integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lodash.memoize": {
@ -1307,9 +1310,9 @@
}
},
"node_modules/terser": {
"version": "5.27.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
"integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
"version": "5.27.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz",
"integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",

View file

@ -1,6 +1,6 @@
{
"dependencies": {
"@swc/core": "^1.4.0",
"@swc/core": "^1.4.2",
"autoprefixer": "^10.4.17",
"cssnano": "^6.0.3",
"html-minifier-terser": "^7.2.0",

View file

@ -1,136 +0,0 @@
.domaintrans {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9001;
font-family: Verdana, Tahoma, Geneva, Arial, Helvetica, sans-serif;
font-size: 16px;
line-height: 20px;
background-color: #222;
color: #ddd;
text-shadow: 0 0 5px #000;
box-shadow: inset 0 0 1em #000;
overflow-y: auto;
overflow-x: hidden;
}
.domaintrans-body {
max-width: 500px;
margin: 20px auto;
}
.domaintrans-domain {
margin: 10px 0;
width: 100%;
}
.domaintrans-domain-main {
font-size: 1.2em;
line-height: 1.5em;
}
.domaintrans-domain-compat {
font-size: .8em;
line-height: 1.5em;
opacity: .8;
}
.domaintrans-domain-header {
font-size: 1.4em;
line-height: 1.5em;
text-align: center;
}
.domaintrans-domain-display {
width: 100%;
font-size: 1.2em;
line-height: 1.4em;
text-align: center;
}
.domaintrans-domain-display div {
margin: 2px;
display: block;
}
.domaintrans-domain-text div {
display: inline-block;
border: 1px solid #444;
background: #333;
border-radius: 5px;
padding: 2px 5px;
}
.domaintrans-text {
font-size: .8em;
line-height: 1.3em;
margin: 10px auto;
}
.domaintrans-text p {
margin: 1em 10px;
}
.domaintrans-options {
text-align: center;
}
.domaintrans-options > div {
margin: 2px;
display: inline-block;
max-width: 300px;
width: 100%;
}
.domaintrans-option {
display: block;
width: 100%;
color: #fff;
background: #333;
border-radius: 5px;
font-size: 16px;
text-shadow: initial;
text-align: left;
font-family: Verdana, Tahoma, Geneva, Arial, Helvetica, sans-serif;
padding: 7px 15px;
border: 1px solid #444;
box-sizing: border-box;
transition: background .2s;
}
.domaintrans-option .sprite {
margin: 2px;
}
.domaintrans-option-icon {
display: inline-block;
border: 2px solid #aaa;
border-radius: 100%;
vertical-align: middle;
transform: scale(1);
transition: transform .2s;
}
.domaintrans-option-text {
display: inline-block;
vertical-align: middle;
margin-left: 10px;
}
.domaintrans-option:focus {
outline: 2px solid #9475b2;
}
.domaintrans-option:hover,
.domaintrans-option:focus {
background: #3d3d3d;
text-decoration: none;
}
.domaintrans-option:hover .domaintrans-option-icon,
.domaintrans-option:focus .domaintrans-option-icon {
transform: scale(1.2);
}
.domaintrans-option:active {
background: #383838;
}
.domaintrans-option:active .domaintrans-option-icon {
transform: scale(.9);
}

View file

@ -516,7 +516,7 @@ body {
@include sprite.css;
@include noscript.css;
@include domaintrans.css;
@include colpick.css;
@include themes/beige.css;
@include themes/black.css;

View file

@ -6,7 +6,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="format-detection" content="telephone=no">
<link href="{ami.css}" rel="stylesheet" type="text/css">
<link href="/picker.css" rel="stylesheet" type="text/css">
</head>
<body>
<noscript>
@ -24,7 +23,6 @@
</div>
</div>
</noscript>
<script src="/picker.js" type="text/javascript" charset="utf-8"></script>
<script src="{ami.js}" type="text/javascript" charset="utf-8"></script>
</body>
</html>

85
src/ami.js/colour.js Normal file
View file

@ -0,0 +1,85 @@
const AmiColour = (() => {
const readThres = 168;
const lumiRed = .299;
const lumiGreen = .587;
const lumiBlue = .114;
const pub = {};
const extractRGB = raw => [
(raw >> 16) & 0xFF,
(raw >> 8) & 0xFF,
raw & 0xFF,
];
const luminance = raw => {
const rgb = extractRGB(raw);
return rgb[0] * lumiRed
+ rgb[1] * lumiGreen
+ rgb[2] * lumiBlue;
};
const weightedNumber = (num1, num2, weight) => {
weight = Math.min(1, Math.max(0, weight));
return Math.round((num1 * weight) + (num2 * (1 - weight)));
};
const weighted = (raw1, raw2, weight) => {
const rgb1 = extractRGB(raw1),
rgb2 = extractRGB(raw2);
return (weightedNumber(rgb1[0], rgb2[0], weight) << 16)
| (weightedNumber(rgb1[1], rgb2[1], weight) << 8)
| weightedNumber(rgb1[2], rgb2[2], weight);
};
pub.extractRGB = extractRGB;
pub.weightedNumber = weightedNumber;
pub.luminance = luminance;
pub.weighted = weighted;
pub.text = raw => luminance(raw) > readThres ? 0 : 0xFFFFFF;
pub.shaded = (raw, offset) => {
if(offset == 0)
return raw;
let dir = 0xFFFFFF;
if(offset < 0) {
dir = 0;
offset *= -1;
}
return weighted(dir, raw, offset);
};
pub.hexByte = raw => {
let str = raw.toString(16).substring(0, 2);
return str.length < 2
? `0${str}` : str;
};
pub.hex = raw => {
let str = raw.toString(16).substring(0, 6);
if(str.length < 6)
str = '000000'.substring(str.length) + str;
return `#${str}`;
};
pub.fromHex = str => {
while(str.substring(0, 1) === '#')
str = str.substring(1);
str = str.substring(0, 6);
if(str.length === 3)
str = str.substring(0, 1) + str.substring(0, 1)
+ str.substring(1, 2) + str.substring(1, 2)
+ str.substring(2, 3) + str.substring(2, 3);
if(str.length !== 6)
throw 'not a valid hex string';
return parseInt(str, 16);
};
return pub;
})();

View file

@ -1,4 +1,6 @@
#include colour.js
#include utility.js
#include colpick/picker.jsx
var AmiColourPicker = function(parent) {
var container = $e({ attrs: { id: 'pickerNew', className: 'hidden' } }),
@ -12,7 +14,7 @@ var AmiColourPicker = function(parent) {
callback.call(picker, {
raw: result,
hex: FwColourPicker.hexFormat(result),
hex: AmiColour.hex(result),
});
callback = undefined;
},

View file

@ -1,3 +1,5 @@
#include colour.js
var FwColourPicker = function(callback, options, colour, onClose) {
if(typeof callback !== 'function')
return;
@ -6,58 +8,6 @@ var FwColourPicker = function(callback, options, colour, onClose) {
if(typeof options !== 'object')
options = {};
var readThres = 168,
lumiRed = .299,
lumiGreen = .587,
lumiBlue = .114;
var extractRGB = function(raw) {
return [
(raw >> 16) & 0xFF,
(raw >> 8) & 0xFF,
raw & 0xFF,
];
};
var calcLumi = function(raw) {
var rgb = extractRGB(raw);
return rgb[0] * lumiRed
+ rgb[1] * lumiGreen
+ rgb[2] * lumiBlue;
};
var textColour = function(raw) {
return calcLumi(raw) > readThres ? 0 : 0xFFFFFF;
};
var weightNum = function(n1, n2, w) {
w = Math.min(1, Math.max(0, w));
return Math.round((n1 * w) + (n2 * (1 - w)));
};
var weightColour = function(c1, c2, w) {
c1 = extractRGB(c1);
c2 = extractRGB(c2);
return (weightNum(c1[0], c2[0], w) << 16)
| (weightNum(c1[1], c2[1], w) << 8)
| weightNum(c1[2], c2[2], w);
};
var shadeColour = function(raw, offset) {
if(offset == 0)
return raw;
var dir = 0xFFFFFF;
if(offset < 0) {
dir = 0;
offset *= -1;
}
return weightColour(dir, raw, offset);
};
var hexFormat = FwColourPicker.hexFormat;
var verifyOption = function(name, type, def) {
if(typeof options[name] !== type)
options[name] = def;
@ -75,7 +25,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var onColourChange = [];
var runOnColourChange = function() {
var text = textColour(colour);
var text = AmiColour.text(colour);
for(var i = 0; i < onColourChange.length; ++i)
onColourChange[i](colour, text);
};
@ -108,7 +58,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var container = document.createElement('div');
container.className = 'fw-colour-picker';
onColourChange.push(function(colour) {
container.style.borderColor = hexFormat(colour);
container.style.borderColor = AmiColour.hex(colour);
});
var form = document.createElement('form');
@ -125,9 +75,9 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var activeTab = undefined;
onColourChange.push(function(colour, text) {
if(activeTab) {
activeTab.b.style.background = hexFormat(colour);
activeTab.b.style.borderColor = hexFormat(colour);
activeTab.b.style.color = hexFormat(text);
activeTab.b.style.background = AmiColour.hex(colour);
activeTab.b.style.borderColor = AmiColour.hex(colour);
activeTab.b.style.color = AmiColour.hex(text);
}
});
@ -138,7 +88,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
tabbedContainer.className = 'fw-colour-picker-tabbed-container';
tabbed.appendChild(tabbedContainer);
onColourChange.push(function(colour) {
tabbedContainer.style.borderColor = hexFormat(colour);
tabbedContainer.style.borderColor = AmiColour.hex(colour);
});
var tabbedList = document.createElement('div');
@ -162,9 +112,9 @@ var FwColourPicker = function(callback, options, colour, onClose) {
if(activeTab) {
activeTab.c.classList.add('fw-colour-picker-tab-container-active');
activeTab.b.classList.add('fw-colour-picker-tab-button-active');
activeTab.b.style.background = hexFormat(colour);
activeTab.b.style.borderColor = hexFormat(colour);
activeTab.b.style.color = hexFormat(textColour(colour));
activeTab.b.style.background = AmiColour.hex(colour);
activeTab.b.style.borderColor = AmiColour.hex(colour);
activeTab.b.style.color = AmiColour.hex(AmiColour.text(colour));
}
};
@ -199,7 +149,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var option = document.createElement('a');
option.href = 'javascript:void(0);';
option.className = 'fw-colour-picker-presets-option';
option.style.background = hexFormat(preset.c);
option.style.background = AmiColour.hex(preset.c);
option.title = preset.n;
option.onclick = function() {
setColour(preset.c);
@ -226,7 +176,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var option = document.createElement('a');
option.href = 'javascript:void(0);';
option.className = 'fw-colour-picker-grid-option';
option.style.background = hexFormat(grey);
option.style.background = AmiColour.hex(grey);
option.onclick = function() {
setColour(grey);
};
@ -242,7 +192,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var option = document.createElement('a');
option.href = 'javascript:void(0);';
option.className = 'fw-colour-picker-grid-option';
option.style.background = hexFormat(colour);
option.style.background = AmiColour.hex(colour);
option.onclick = function() {
setColour(colour);
};
@ -250,7 +200,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
option.classList[(value === colour ? 'add' : 'remove')]('fw-colour-picker-grid-option-active');
});
cont.appendChild(option);
})(shadeColour(colours[j], shades[i]));
})(AmiColour.shaded(colours[j], shades[i]));
return cont;
});
@ -272,7 +222,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
var sValue = document.createElement('div');
sValue.className = 'fw-colour-picker-slider-value';
sCont.appendChild(sValue);
var sValueSliderCont = document.createElement('div');
sValueSliderCont.className = 'fw-colour-picker-slider-value-slider-container';
sValue.appendChild(sValueSliderCont);
@ -318,7 +268,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
sValueSlider.value = update(colour);
sValueInput.value = update(colour);
var gradient = 'linear-gradient(to right, ' + hexFormat(apply(colour, 0)) + ', ' + hexFormat(apply(colour, 0xFF)) + ')';
var gradient = 'linear-gradient(to right, ' + AmiColour.hex(apply(colour, 0)) + ', ' + AmiColour.hex(apply(colour, 0xFF)) + ')';
sGradient.style.background = '';
sGradient.style.background = gradient;
if(!sGradient.style.background)
@ -361,7 +311,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
colourPreview.className = 'fw-colour-picker-colour-preview';
colourPreviewContainer.appendChild(colourPreview);
onColourChange.push(function(colour) {
colourPreview.style.background = hexFormat(colour);
colourPreview.style.background = AmiColour.hex(colour);
});
var values = {};
@ -397,7 +347,7 @@ var FwColourPicker = function(callback, options, colour, onClose) {
if(options.showHexValue)
addValue('hex', 'Hex', 'text', function(value) {
return hexFormat(value);
return AmiColour.hex(value);
}, function(value) {
while(value.substring(0, 1) === '#')
value = value.substring(1);
@ -434,8 +384,8 @@ var FwColourPicker = function(callback, options, colour, onClose) {
if(action === null) {
button.className += ' fw-colour-picker-buttons-button-submit';
onColourChange.push(function(colour, text) {
button.style.background = hexFormat(colour);
button.style.color = hexFormat(text);
button.style.background = AmiColour.hex(colour);
button.style.color = AmiColour.hex(text);
});
button.type = 'submit';
} else {
@ -497,9 +447,3 @@ var FwColourPicker = function(callback, options, colour, onClose) {
return pub;
};
FwColourPicker.hexFormat = function(raw) {
var str = raw.toString(16).substring(0, 6);
if(str.length < 6)
str = '000000'.substring(str.length) + str;
return '#' + str;
};

View file

@ -49,8 +49,6 @@ var AmiContext = function(title, auth, loading) {
settings.define('bbPersistSjis', 'boolean');
settings.define('bbPersistColour', 'string');
settings.define('tmpSkipDomainPopUpThing', 'boolean', false);
settings.define('migrated', 'boolean', false);
if(!settings.get('migrated')) {

View file

@ -6,7 +6,6 @@
#include loadoverlay.js
#include mszauth.js
#include ts_chat.js
#include mami/domaintrans.jsx
#include mami/settings.js
(function() {
@ -36,26 +35,12 @@
var ami = new AmiContext(futami.get('title'), auth, loading);
window.ami = ami;
const actuallyLoadChat = function() {
setInterval(refreshInfo, 600000);
refreshInfo(function() {
Chat.Main(auth);
ami.sockChat.open();
window.addEventListener('beforeunload', () => ami.sockChat.close());
};
setInterval(refreshInfo, 600000);
refreshInfo(function() {
if(!ami.settings.get('tmpSkipDomainPopUpThing')) {
const adt = AmiDomainTransition(
MamiSettings.isSupported() ? () => MamiSettings.exportFile() : undefined,
() => {
ami.settings.set('tmpSkipDomainPopUpThing', true);
adt.remove();
actuallyLoadChat();
}
);
adt.appendTo(document.body);
} else actuallyLoadChat();
});
});
})();

View file

@ -1,69 +0,0 @@
#include common.js
#include utility.js
const AmiDomainTransition = function(onExport, onDismiss) {
if(typeof onDismiss !== 'function')
throw 'onDismiss must be a function';
let exportTidbit, modernButton, exportButton;
let arrowsTarget1, arrowsTarget2;
const html = <div class="domaintrans">
<div class="domaintrans-body">
<div class="domaintrans-domain domaintrans-domain-main">
<div class="domaintrans-domain-header">
Compatibility Chat
</div>
<div class="domaintrans-domain-display">
<div class="domaintrans-domain-text domaintrans-domain-orig"><div>sockchat.flashii.net/legacy</div></div>
{arrowsTarget1 = <div class="domaintrans-domain-arrow" />}
<div class="domaintrans-domain-text domaintrans-domain-new"><div>sockchat.flashii.net</div></div>
</div>
</div>
<div class="domaintrans-domain domaintrans-domain-compat">
<div class="domaintrans-domain-header">
Flashii Chat
</div>
<div class="domaintrans-domain-display">
<div class="domaintrans-domain-text domaintrans-domain-orig"><div>sockchat.flashii.net</div></div>
{arrowsTarget2 = <div class="domaintrans-domain-arrow" />}
<div class="domaintrans-domain-text domaintrans-domain-new"><div>chat.flashii.net</div></div>
</div>
</div>
<div class="domaintrans-text">
<p>At long last, modern chat is being moved back to its proper subdomain. This means the original client can have the sockchat subdomain all to itself like the AJAX Chat!</p>
{exportTidbit = <p>You can use this screen to export your settings for the modern client. Pressing "Export settings" will let you save your settings for the modern client, you can then import this file using the "Import settings" button within the modern client.</p>}
<p>This screen won't show up again after you press "Continue to chat".</p>
</div>
<div class="domaintrans-options">
{modernButton = <div><a class="domaintrans-option" href={MAMI_URL} target="_blank">
<div class="domaintrans-option-icon"><div class="sprite sprite-autoscroll" /></div>
<div class="domaintrans-option-text">Open modern client</div>
</a></div>}
{exportButton = <div><button class="domaintrans-option" onclick={onExport}>
<div class="domaintrans-option-icon"><div class="sprite sprite-autoscroll" /></div>
<div class="domaintrans-option-text">Export settings</div>
</button></div>}
<div><button class="domaintrans-option" onclick={onDismiss}>
<div class="domaintrans-option-icon"><div class="sprite sprite-autoscroll" /></div>
<div class="domaintrans-option-text">Continue to chat</div>
</button></div>
</div>
</div>
</div>;
for(let i = 0; i < 5; ++i)
arrowsTarget1.appendChild(<span></span>);
for(let i = 0; i < 5; ++i)
arrowsTarget2.appendChild(<span></span>);
if(typeof onExport !== 'function') {
$r(exportTidbit);
$r(modernButton);
$r(exportButton);
}
return {
appendTo: parent => parent.appendChild(html),
remove: () => $r(html),
};
};

View file

@ -102,11 +102,6 @@ var Chat = (function () {
name: 'bbAutoEmbedV1',
type: "checkbox",
},
{
id: "skipdomainpopupthing",
name: 'tmpSkipDomainPopUpThing',
type: "checkbox",
},
];
var userMenu = [