Décompte du temps de parole
parent
42a5629c42
commit
6bea1ee4a1
|
|
@ -26,6 +26,8 @@ console_error_panic_hook = { version = "0.1.6", optional = true }
|
||||||
# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
|
# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
|
||||||
wee_alloc = { version = "0.4.5", optional = true }
|
wee_alloc = { version = "0.4.5", optional = true }
|
||||||
|
|
||||||
|
js-sys = "0.3"
|
||||||
|
|
||||||
[dependencies.web-sys]
|
[dependencies.web-sys]
|
||||||
version = "0.3"
|
version = "0.3"
|
||||||
features = [
|
features = [
|
||||||
|
|
|
||||||
16
default.nix
16
default.nix
|
|
@ -1,22 +1,6 @@
|
||||||
{ pkgs ? (import <nixpkgs> {}) }:
|
{ pkgs ? (import <nixpkgs> {}) }:
|
||||||
|
|
||||||
let
|
|
||||||
date = "2020-03-31";
|
|
||||||
in
|
|
||||||
let
|
|
||||||
rust-channel = pkgs.callPackage ./rust-channel.nix { inherit date; };
|
|
||||||
rustPlatform = pkgs.makeRustPlatform {
|
|
||||||
cargo = rust-channel.rust;
|
|
||||||
rustc = rust-channel.rust;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
let
|
|
||||||
buildRustCrate = pkgs.buildRustCrate.override {
|
|
||||||
cargo = rust-channel.rust;
|
|
||||||
rustc = rust-channel.rust;};
|
|
||||||
in
|
|
||||||
pkgs.callPackage ./Cargo.nix {
|
pkgs.callPackage ./Cargo.nix {
|
||||||
inherit buildRustCrate;
|
|
||||||
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
|
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
|
||||||
lixiangyuan = attrs: {
|
lixiangyuan = attrs: {
|
||||||
buildInputs = [ pkgs.wasm-pack ];
|
buildInputs = [ pkgs.wasm-pack ];
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
<title>Kikikoz</title>
|
<title>Kikikoz</title>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import {default as init, ajoute, ajoute_kp, next} from './pkg/kikikoz.js';
|
import {default as init, ajoute, ajoute_kp, next, intervalle_orateurice} from './pkg/kikikoz.js';
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
await init()
|
await init()
|
||||||
|
|
@ -13,13 +13,14 @@
|
||||||
window.ajoute = ajoute;
|
window.ajoute = ajoute;
|
||||||
window.ajoute_kp = ajoute_kp;
|
window.ajoute_kp = ajoute_kp;
|
||||||
window.next = next;
|
window.next = next;
|
||||||
|
window.setInterval(intervalle_orateurice, 1000);
|
||||||
</script>
|
</script>
|
||||||
<link rel="stylesheet" href="kikikoz.css"/>
|
<link rel="stylesheet" href="kikikoz.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Kikikoz</h1>
|
<h1>Kikikoz</h1>
|
||||||
<p class="prochain">
|
<p class="orateurice">
|
||||||
<span id="prochain" class="personne">Personne</span> <button onclick="next()">Hop!</button>
|
<span id="orateurice" class="personne" onclick="intervalle_orateurice()">Personne</span> <span id="compte"></span> <button onclick="next()">Hop!</button>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<section id="queues">
|
<section id="queues">
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ body {
|
||||||
background-color: aliceblue;
|
background-color: aliceblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.prochain {
|
p.orateurice {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
{ nixpkgs ? <nixpkgs> }:
|
|
||||||
|
|
||||||
with (import nixpkgs {});
|
|
||||||
|
|
||||||
let
|
|
||||||
mozillaOverlay = fetchFromGitHub {
|
|
||||||
owner = "mozilla";
|
|
||||||
repo = "nixpkgs-mozilla";
|
|
||||||
rev = "4521bc61c2332f41e18664812a808294c8c78580";
|
|
||||||
sha256 = "sha256:0lyzzfb6malnvnlvc2p5r895qxwp6p1h8vjvxbk0p8qk9cjl1j2p";
|
|
||||||
};
|
|
||||||
mozilla = callPackage "${mozillaOverlay.out}/package-set.nix" {};
|
|
||||||
in
|
|
||||||
mozilla.latest.rustChannels.stable
|
|
||||||
|
|
||||||
14
shell.nix
14
shell.nix
|
|
@ -1,9 +1,10 @@
|
||||||
{ pkgs ? (import <nixpkgs> {}) }:
|
|
||||||
let
|
let
|
||||||
date = "2020-06-01";
|
sources = import ./nix/sources.nix;
|
||||||
in
|
nixpkgs-mozilla = import sources.nixpkgs-mozilla;
|
||||||
let
|
pkgs = import sources.nixpkgs {
|
||||||
rust-channel = pkgs.callPackage ./rust-channel.nix { };
|
overlays = [ nixpkgs-mozilla ];
|
||||||
|
};
|
||||||
|
rust-channel = pkgs.latest.rustChannels.stable;
|
||||||
in
|
in
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
|
@ -17,9 +18,6 @@ pkgs.mkShell {
|
||||||
pkgs.pkg-config
|
pkgs.pkg-config
|
||||||
pkgs.wasm-pack
|
pkgs.wasm-pack
|
||||||
pkgs.cargo-generate
|
pkgs.cargo-generate
|
||||||
pkgs.sqlitebrowser
|
|
||||||
pkgs.sqlite
|
|
||||||
pkgs.diesel-cli
|
|
||||||
pkgs.zlib
|
pkgs.zlib
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
73
src/lib.rs
73
src/lib.rs
|
|
@ -1,9 +1,9 @@
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
use wasm_bindgen::prelude::*;
|
use js_sys::Date;
|
||||||
use web_sys;
|
|
||||||
use wasm_bindgen::JsCast;
|
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
use wasm_bindgen::JsCast;
|
||||||
|
|
||||||
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
|
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
|
||||||
// allocator.
|
// allocator.
|
||||||
|
|
@ -12,18 +12,46 @@ use rand::prelude::*;
|
||||||
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
extern {
|
extern "C" {
|
||||||
fn alert(s: &str);
|
fn alert(s: &str);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn next() {
|
pub fn intervalle_orateurice() {
|
||||||
let window = web_sys::window().expect("no global `window` exists");
|
let document = le_document();
|
||||||
let document = window.document().expect("should have a document on window");
|
let now: f64 = Date::new_0().get_time();
|
||||||
|
let prochain = document.get_element_by_id("orateurice").expect("blu");
|
||||||
|
let compte = document.get_element_by_id("compte").expect("blaou");
|
||||||
|
match js_sys::Reflect::get(&prochain, &JsValue::from("debut")) {
|
||||||
|
Err(_) => return,
|
||||||
|
Ok(date_debut) => {
|
||||||
|
let date_debut = date_debut.as_f64().expect("tut tut");
|
||||||
|
let diff = ((now - date_debut) / 1000.0) as u64;
|
||||||
|
let sec = diff % 60;
|
||||||
|
let min = diff / 60;
|
||||||
|
compte.set_inner_html(&format!("{}:{:02}", min, sec));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let prochain = document.get_element_by_id("prochain").expect("blu");
|
fn le_document() -> web_sys::Document {
|
||||||
let queue_prio = document.get_elements_by_class_name("courante").item(0).expect("bla");
|
let window = web_sys::window().expect("no global `window` exists");
|
||||||
let queue_non_prio = document.get_elements_by_class_name("attente").item(0).expect("bla");
|
window.document().expect("should have a document on window")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn next() {
|
||||||
|
let document = le_document();
|
||||||
|
|
||||||
|
let prochain = document.get_element_by_id("orateurice").expect("blu");
|
||||||
|
let queue_prio = document
|
||||||
|
.get_elements_by_class_name("courante")
|
||||||
|
.item(0)
|
||||||
|
.expect("bla");
|
||||||
|
let queue_non_prio = document
|
||||||
|
.get_elements_by_class_name("attente")
|
||||||
|
.item(0)
|
||||||
|
.expect("bla");
|
||||||
let lis_prio = queue_prio.get_elements_by_tag_name("li");
|
let lis_prio = queue_prio.get_elements_by_tag_name("li");
|
||||||
let queue = if lis_prio.length() == 0 {
|
let queue = if lis_prio.length() == 0 {
|
||||||
&queue_non_prio
|
&queue_non_prio
|
||||||
|
|
@ -36,15 +64,22 @@ pub fn next() {
|
||||||
match lis.item(0) {
|
match lis.item(0) {
|
||||||
Some(li) => {
|
Some(li) => {
|
||||||
let nom_prochain = li.text_content().expect("");
|
let nom_prochain = li.text_content().expect("");
|
||||||
|
let temps_debut = Date::new_0().get_time();
|
||||||
prochain.set_text_content(Some(nom_prochain.as_str()));
|
prochain.set_text_content(Some(nom_prochain.as_str()));
|
||||||
|
js_sys::Reflect::set(
|
||||||
|
&prochain,
|
||||||
|
&JsValue::from("debut"),
|
||||||
|
&JsValue::from(temps_debut),
|
||||||
|
);
|
||||||
li.parent_element().expect("").remove_child(&li);
|
li.parent_element().expect("").remove_child(&li);
|
||||||
prochain.set_class_name("");
|
prochain.set_class_name("");
|
||||||
},
|
}
|
||||||
None => {
|
None => {
|
||||||
prochain.set_text_content(Some("Personne"));
|
prochain.set_text_content(Some("Personne"));
|
||||||
prochain.set_class_name("personne");
|
prochain.set_class_name("personne");
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
intervalle_orateurice();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
|
|
@ -61,11 +96,19 @@ pub fn ajoute(id: &str) {
|
||||||
|
|
||||||
let section = document.get_element_by_id(id).expect("bla");
|
let section = document.get_element_by_id(id).expect("bla");
|
||||||
let inputs = section.get_elements_by_tag_name("input");
|
let inputs = section.get_elements_by_tag_name("input");
|
||||||
let input = inputs.item(0).unwrap().dyn_into::<web_sys::HtmlInputElement>().unwrap();
|
let input = inputs
|
||||||
|
.item(0)
|
||||||
|
.unwrap()
|
||||||
|
.dyn_into::<web_sys::HtmlInputElement>()
|
||||||
|
.unwrap();
|
||||||
let content = input.value();
|
let content = input.value();
|
||||||
|
|
||||||
let ols = section.get_elements_by_tag_name("ol");
|
let ols = section.get_elements_by_tag_name("ol");
|
||||||
let ol = ols.item(0).unwrap().dyn_into::<web_sys::HtmlOListElement>().unwrap();
|
let ol = ols
|
||||||
|
.item(0)
|
||||||
|
.unwrap()
|
||||||
|
.dyn_into::<web_sys::HtmlOListElement>()
|
||||||
|
.unwrap();
|
||||||
let lis = ol.get_elements_by_tag_name("li");
|
let lis = ol.get_elements_by_tag_name("li");
|
||||||
let n = lis.length();
|
let n = lis.length();
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
|
|
@ -78,6 +121,4 @@ pub fn ajoute(id: &str) {
|
||||||
let li = lis.item(k).unwrap();
|
let li = lis.item(k).unwrap();
|
||||||
li.after_with_node_1(&new_li);
|
li.after_with_node_1(&new_li);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue