Stiglo je novo izdanje. Osvježi stranu.
Pravo na uvid u kod. Otvoren protokol omogućava nezavisne operatere i interoperabilnost. Manifest
Izvor
4d7883a894b3
- server.js
- lib/auth.js
- lib/build.js
- lib/cards.js
- lib/db.js
- lib/gradovi.js
- lib/icons.js
- lib/imena.js
- lib/jezik.js
- lib/kartapodaci.js
- lib/lekcije.js
- lib/md.js
- lib/mehanika.js
- lib/mreza.js
- lib/pages.js
- lib/registar.js
- lib/routes.js
- lib/schema2.js
- lib/views.js
- seed/content.mjs
- seed/seed.mjs
- public/app.js
- public/style.css
1 import {preslovi} from './jezik.js';
2 export const SISTEMSKA=new Set('hello registry registar id market pijaca'.split(' '));
3 export const ZASTICENA=new Set('bank banka gov vlada policija milicija hitna sud posta porez jugoslavija yugoslavia slovenija hrvatska bosna bosna-i-hercegovina srbija crna-gora makedonija severna-makedonija sjeverna-makedonija kosovo vojvodina slovenia croatia bosnia serbia montenegro north-macedonia tejl'.split(' '));
4 const look={'а':'a','е':'e','о':'o','р':'p','с':'c','х':'x','ј':'j','у':'y','к':'k','м':'m','т':'t','в':'b','н':'h'};
5 export const skeleton=s=>s.normalize('NFKC').toLowerCase().replace(/[аеорсхјукмтвн]/g,c=>look[c]);
6 export function normalName(value){
7 const s=String(value).normalize('NFKC').toLowerCase().trim().replace(/\.yu$/,'');
8 if(s.length<2||s.length>40||!/^[\p{Script=Latin}\p{Script=Cyrillic}\d_-]+$/u.test(s)||(/\p{Script=Latin}/u.test(s)&&/\p{Script=Cyrillic}/u.test(s)))throw Error('Ime mora biti napisano jednim pismom.');
9 return s+'.yu';
10 }
11 export function checkName(db,value,system=false){const name=normalName(value),label=name.slice(0,-3);
12 if(!system&&(SISTEMSKA.has(label)||ZASTICENA.has(label)))throw Error('ZAŠTIĆENO: ime je namijenjeno zajedničkim službama.');
13 const sk=skeleton(label),cir=preslovi(label);
14 for(const row of db.all('SELECT name,skeleton FROM names'))if(row.name===name||row.skeleton===sk||preslovi(row.name.slice(0,-3))===cir||skeleton(preslovi(row.name.slice(0,-3)))===sk)throw Error('Slično ime već postoji.');
15 return {name,skeleton:sk};}
16 export function validOrigin(value){try{const u=new URL(value);if(u.protocol!=='https:'||u.username||u.password||u.port||!u.hostname.includes('.')||/^[\d.]+$|:|(?:^|\.)(?:localhost|local|internal)$/.test(u.hostname)||u.hostname.endsWith('.localhost'))return false;return true;}catch{return false;}}
17