Paweł "juen" Nowak se zaroven s prohlizecem pustil do dalsiho projektu – JavaScript runtime interpretru pro AmigaOS ve stylu Node.js
Nejde o zadny port, vse je napsano v od zacatku v C s ohledem na klasickou Amigu.
NodeAmiga podporuje nejpoužívanější podmnožinu funkci moderního JavaScriptu
NodeAmiga
Dokumentace
Kratky priklad
Nejde o zadny port, vse je napsano v od zacatku v C s ohledem na klasickou Amigu.
NodeAmiga podporuje nejpoužívanější podmnožinu funkci moderního JavaScriptu
- Full ES5 (everything from the original spec)
- Arrow functions, classes with extends and super, template literals, destructuring, spread/rest, default parameters
- let/const, for-of, labeled loops
- async/await and generators (function*, yield)
- Optional chaining ?., nullish coalescing ??
- Regex literals /pattern/flags
- BigInt, Symbol, Map/Set/WeakMap/WeakSet
- Typed arrays (Uint8Array, Int16Array, etc.), ArrayBuffer, DataView
- Modules (both require()/CommonJS and import/ESM)
NodeAmiga
Dokumentace
Kratky priklad
Code:
/*
* gui_translator.js - Google Translate with GadTools GUI
*
* Two text fields, two language selectors, two translate buttons.
* Type text in either field and translate in either direction.
*
* Run: NodeAmiga examples/gui_translator.js
* Requires: bsdsocket.library + AmiSSL (for HTTPS)
*/
var gui = require('gui');
var http = require('http');
var fromNames = ['Auto', 'English', 'Polski', 'Deutsch', 'Francais', 'Espanol', 'Italiano', 'Portugues', 'Russian', 'Czech', 'Dutch', 'Swedish', 'Ukrainian'];
var fromCodes = ['auto', 'en', 'pl', 'de', 'fr', 'es', 'it', 'pt', 'ru', 'cs', 'nl', 'sv', 'uk'];
var toNames = ['English', 'Polski', 'Deutsch', 'Francais', 'Espanol', 'Italiano', 'Portugues', 'Russian', 'Czech', 'Dutch', 'Swedish', 'Ukrainian'];
var toCodes = ['en', 'pl', 'de', 'fr', 'es', 'it', 'pt', 'ru', 'cs', 'nl', 'sv', 'uk'];
/* --- Create window with gadgets --- */
var win = gui.createWindow({
title: 'Translator',
width: 440,
height: 120,
left: 40,
top: 30,
gadgets: [
{ kind: 'cycle', id: 1, label: 'From:',
items: fromNames, left: 60, top: 5, width: 180, height: 14 },
{ kind: 'string', id: 2,
left: 10, top: 25, width: 420, height: 14, value: '' },
{ kind: 'button', id: 3, label: 'Translate v',
left: 60, top: 48, width: 140, height: 14 },
{ kind: 'button', id: 4, label: '^ Translate',
left: 210, top: 48, width: 140, height: 14 },
{ kind: 'cycle', id: 5, label: 'To:',
items: toNames, left: 60, top: 72, width: 180, height: 14 },
{ kind: 'string', id: 6,
left: 10, top: 92, width: 420, height: 14, value: '' }
]
});
/* --- Translation function --- */
function translate(text, from, to) {
var url = 'https://translate.googleapis.com/translate_a/single?client=gtx'
+ '&sl=' + encodeURIComponent(from)
+ '&tl=' + encodeURIComponent(to)
+ '&dt=t&q=' + encodeURIComponent(text);
try {
var res = http.get(url);
if (res && res.body) {
var data = JSON.parse(res.body);
if (data && data[0] && data[0][0] && data[0][0][0]) {
return data[0][0][0];
}
}
return 'Error: no response from server';
} catch (e) {
return 'Error: ' + e.message;
}
}
/* --- Main event loop --- */
console.log('Translator ready. Close window to exit.');
while (true) {
var ev = gui.waitEvent(win);
if (!ev || ev.type === 'close') break;
if (ev.type === 'gadgetup') {
if (ev.id === 3) {
/* Translate top -> bottom */
var text = gui.get(win, 2);
if (text && text.length > 0) {
var sl = fromCodes[gui.get(win, 1)];
var tl = toCodes[gui.get(win, 5)];
gui.setTitle(win, 'Translating...');
var result = translate(text, sl, tl);
gui.set(win, 6, result);
gui.setTitle(win, 'Translator');
}
} else if (ev.id === 4) {
/* Translate bottom -> top */
var text = gui.get(win, 6);
if (text && text.length > 0) {
var tl = fromCodes[gui.get(win, 1)];
var sl = toCodes[gui.get(win, 5)];
if (tl === 'auto') tl = 'en';
gui.setTitle(win, 'Translating...');
var result = translate(text, sl, tl);
gui.set(win, 2, result);
gui.setTitle(win, 'Translator');
}
}
}
}
gui.closeWindow(win);
console.log('Bye!');
Komentovat