srijeda, 11. novembar 2026. · Godina I · Broj 15 · Cijena: 0 dinara
JUGOSLOVENSKI FORUM

Glasilo YU mreže · NEMA GRANICA ZA ZNANJE

Prijava Upis
Pravo na uvid u kod. Otvoren protokol omogućava nezavisne operatere i interoperabilnost. Manifest

Izvor

4d7883a894b3

   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