reverseqr

qr codes working in both directions
git clone https://tongong.net/git/reverseqr.git
Log | Files | Refs | README

main.js (1678B)


      1 const m = require("mithril");
      2 const y = require("yjs");
      3 const { WebrtcProvider } = require("y-webrtc");
      4 
      5 const store = require("./modules/store.js");
      6 const editView = require("./components/edit-view.js");
      7 const qrView = require("./components/qr-view.js");
      8 const navigation = require("./modules/navigation.js");
      9 
     10 store.subscribe(s => s, () => m.redraw());
     11 
     12 const main = () => {
     13     let qrDelay = store().qr;
     14     store.subscribe(s => s.qr, qrn => window.setTimeout(
     15         () => { qrDelay = qrn; m.redraw(); }, 1000
     16     ));
     17     return {
     18         view: () => m(".pagewrap", {
     19             class: [
     20                 store().qr? "" : "scroll-down",
     21                 qrDelay? "" : "scroll-down-finished",
     22             ].join(" "),
     23         },
     24             m(qrView),
     25             m(editView),
     26         ),
     27     }
     28 }
     29 
     30 document.body.onclick = store().qrClose;
     31 
     32 if (!window.crypto.subtle) {
     33     console.log("no crypto :(");
     34 }
     35 
     36 store.subscribe(s => s.id, (id) => {
     37     store().ydocSet(new y.Doc());
     38     let sp = navigation.splitId(id);
     39     let provider = new WebrtcProvider(sp[0], store().ydoc, {password: sp[1]});
     40     provider.awareness.on("change", () => {
     41         store.setState({users: provider.awareness.getStates().size });
     42     });
     43     /* useless edit. only important to propagate the info that a user joined */
     44     provider.awareness.setLocalStateField("user", { "update": 1 });
     45 });
     46 
     47 store.subscribe(s => s.users, (unew, uold) => {
     48     if (unew == 2 && uold == 1) {
     49         store().qrClose();
     50     }
     51 });
     52 
     53 store.subscribe(s => s.id, id => m.route.set("/" + id));
     54 m.route(document.body, "/-", {
     55     "/:id": { onmatch: (args) => {
     56         store().idSet(args.id);
     57         return main;
     58     }},
     59 });