ctrl k
  • ■ ■ ■ ■ ■ ■
    client/src/pages/scrape.js
    skipped 32 lines
    33 33   await initButtons(buttonPanel);
    34 34   
    35 35   // cleanupBody(postBody);
     36 + 
     37 + section.querySelectorAll('.scrape__content a').forEach(anchor => {
     38 + anchor.onclick = (event) => {
     39 + const confirmation = localStorage.getItem("unsafe_confirm");
     40 + if ((!confirmation && confirm("Are you sure you want to continue?\nThis url can lead to malicious content\nWe can't ensure your safety outside Nekohouse.su")) || confirmation === "true") {
     41 + localStorage.setItem("unsafe_confirm", "true")
     42 + return
     43 + }
     44 + 
     45 + event.preventDefault()
     46 + }
     47 + })
    36 48  }
    37 49   
    38 50  /**
    skipped 239 lines
  • ■ ■ ■ ■ ■ ■
    schema.sql
    skipped 294 lines
    295 295   source_metadata jsonb not null,
    296 296   title text,
    297 297   content text,
     298 + links text[] default '{}',
    298 299   added timestamptz not null default CURRENT_TIMESTAMP,
    299 300   published timestamptz,
    300 301   complete boolean not null default true,
    skipped 7 lines
    308 309   source_metadata jsonb not null,
    309 310   title text,
    310 311   content text,
     312 + links text[] default '{}',
    311 313   added timestamptz not null default CURRENT_TIMESTAMP,
    312 314   published timestamptz,
    313 315   complete boolean not null default true,
    skipped 315 lines
  • ■ ■ ■ ■
    src/pages/post.py
    skipped 133 lines
    134 134   'ul', 'ol', 'li'
    135 135   ]
    136 136   allowed_attributes = {
    137  - 'a': ['href', 'title'],
     137 + 'a': ['href', 'title', 'rel', 'referrerpolicy', 'target'],
    138 138   'acronym': ['title'],
    139 139   'abbr': ['title'],
    140 140   'img': ['src']
    skipped 22 lines
Please wait...
Page is in error, reload to recover