// http server and directory where the ogg files are var videoURL = "videos/"; // list of categories with names, each with a list of videos var categories = [ { en: "Opening", fr: "Vernissage", videos: [ { url: "makeart2010_-_2010-11-04_-_visitors.ogg", en: "Exhibition visitors", fr: "Exposition visiteurs" }, { url: "makeart2010_-_2010-11-04_-_opening.ogg", en: "Welcome to make art", fr: "Bienvenue à make art" }, { url: "makeart2010_-_2010-11-04_-_mcld.ogg", en: "MCLD \"CODEBOX\" performance", fr: "MCLD \"CODEBOX\" performance" } ]}, { en: "Planetarium", fr: "Planétarium", videos: [ { url: "makeart2010_-_2010-11-05_-_doebereiner_and_morimoto.ogg", en: "döbereiner & morimoto", fr: "döbereiner & morimoto" } ]}, { en: "Outlooks", fr: "Perspectives", videos: [ { url: "makeart2010_-_2010-11-06_-_gabriel_menotti.ogg", en: "Gabriel Menotti \"Gambiarra and The Prototyping Perspective\"", fr: "Gabriel Menotti \"Gambiarra and The Prototyping Perspective\"" }, { url: "makeart2010_-_2010-11-06_-_vito_campanelli_1.ogg", en: "Vito Campanelli \"remix it yourself\" (part 1)", fr: "Vito Campanelli \"remix it yourself\" (part 1)" }, { url: "makeart2010_-_2010-11-06_-_vito_campanelli_2.ogg", en: "Vito Campanelli \"remix it yourself\" (part 2)", fr: "Vito Campanelli \"remix it yourself\" (part 2)" }, { url: "makeart2010_-_2010-11-06_-_stdin_brainch.ogg", en: " \"Brainch\"", fr: " \"Brainch\"" } ]}, { en: "Workbench", fr: "Plan de travail", videos: [ { url: "makeart2010_-_2010-11-06_-_loredana_bontempi.ogg", en: "Loredana Bontempi \"Digital dump\"", fr: "Loredana Bontempi \"Digital dump\"" }, { url: "makeart2010_-_2010-11-06_-_emanuele_bonetti.ogg", en: "Emanuele Bonetti \"Peer-to-peer design strategies\"", fr: "Emanuele Bonetti \"Peer-to-peer design strategies\"" }, { url: "makeart2010_-_2010-11-06_-_calcyum.ogg", en: "Calcyum \"FLOSS issues in graphic design\"", fr: "Calcyum \"FLOSS issues in graphic design\"" }, { url: "makeart2010_-_2010-11-06_-_open_source_publishing.ogg", en: "Open Source Publishing \"Dingbat Liberation Fest 0.4\"", fr: "Open Source Publishing \"Dingbat Liberation Fest 0.4\"" } ]}, { en: "Savoir-faire", fr: "Savoir-faire", videos: [ { url: "makeart2010_-_2010-11-06_-_aditya_mandayam.ogg", en: "Aditya Mandayam \"laptopograms\"", fr: "Aditya Mandayam \"laptopograms\"" }, { url: "makeart2010_-_2010-11-06_-_alberto_de_campo.ogg", en: "Alberto de Campo \"Varia Zoosystematica Profundorum\"", fr: "Alberto de Campo \"Varia Zoosystematica Profundorum\"" }, { url: "makeart2010_-_2010-11-06_-_dorothe_depeauw_and_simon_yuill.ogg", en: "Dorothé Depeauw & Simon Yuill \"objscrs / Kaleidoscope\"", fr: "Dorothé Depeauw & Simon Yuill \"objscrs / Kaleidoscope\"" }, { url: "makeart2010_-_2010-11-06_-_ginger_coons.ogg", en: "ginger coons \"Libre Graphics Magazine\"", fr: "ginger coons \"Libre Graphics Magazine\"" } ]}, { en: "Placard concerts", fr: "Placard concerts", videos: [ { url: "makeart2010_-_2010-11-06_-_benjamin_cadon_-_2013.ogg", en: "Benjamin Cadon \"2013\"", fr: "Benjamin Cadon \"2013\"" }, { url: "makeart2010_-_2010-11-06_-_marije_baalman.ogg", en: "Marije Baalman \"Code LiveCode Live\"", fr: "Marije Baalman \"Code LiveCode Live\"" }, { url: "makeart2010_-_2010-11-06_-_noish_vs_automata_v001.ogg", en: "Noish Vs Automata_v001", fr: "Noish Vs Automata_v001" }, { url: "makeart2010_-_2010-11-06_-_alberto_de_campo_1.ogg", en: "Alberto de Campo (part 1)", fr: "Alberto de Campo (part 1)" }, { url: "makeart2010_-_2010-11-06_-_alberto_de_campo_2.ogg", en: "Alberto de Campo (part 2)", fr: "Alberto de Campo (part 2)" }, { url: "makeart2010_-_2010-11-06_-_segmentation_fault.ogg", en: "Segmentation Fault", fr: "Segmentation Fault" } ]}, { en: "Brunch club", fr: "Brunch club", videos: [ { url: "makeart2010_-_2010-11-07_-_brunch_club.ogg", en: "Brunch club", fr: "Brunch club" } ]} ]; // return a closure that adds a video with the right url and fallback text function addvideo(url, text) { return function(evt) { var download = { en: "download", fr: "download" }; // TODO FIXME TRANSLATE var doc = document; var eh3 = evt.target; var ediv = eh3.parentNode; var edivv = doc.createElement("div"); var ev = doc.createElement("video"); ev.setAttribute("autoplay", "autoplay"); ev.setAttribute("controls", "controls"); ev.setAttribute("src", url); // ev.setAttribute("poster", url + ".jpg"); // do any browsers support this yet? var ea = doc.createElement("a"); ea.setAttribute("href", url); ea.setAttribute("title", text); var edown = doc.createTextNode(download[lang]); ea.appendChild(edown); ev.appendChild(ea); edivv.appendChild(ev); ediv.appendChild(edivv); eh3.onclick = removevideo(url, text); // behaviour change: toggle }; } // return a closure that removes the neighbouring video function removevideo(url, text) { return function(evt) { var doc = document; var eh3 = evt.target; var ediv = eh3.parentNode; var ev = eh3.nextSibling; ediv.removeChild(ev); eh3.onclick = addvideo(url, text); // behaviour change: toggle }; } // called on body load function init() { var doc = document; var evs = doc.getElementById("videos"); if (evs) { // if this page is the videos page var c; for (c = 0; c < categories.length; c = c + 1) { // add a heading for each category that has a non-empty video inside var videos = categories[c].videos; var nonempty = false; var v; for (v = 0; v < videos.length; v = v + 1) { nonempty = nonempty || videos[v].url != ""; } if (nonempty) { var eh3 = doc.createElement("h3"); var ehead = doc.createTextNode(categories[c][lang]); eh3.appendChild(ehead); evs.appendChild(eh3); var i; for (i = 0; i < videos.length; i = i + 1) { // add a link for each video that has a non-empty url.. var video = videos[i]; if (video.url != "") { var url = videoURL + video.url; var hash = video.url; var text = video[lang]; var ediv = doc.createElement("div"); ediv.setAttribute("class", "video"); ediv.setAttribute("id", hash); var ea = doc.createElement("a"); ea.setAttribute("href", "#" + hash); // link to self ea.setAttribute("class", "videolink"); var ehead = doc.createTextNode(text); ea.appendChild(ehead); ediv.appendChild(ea); ea.onclick = addvideo(url, text); // link behaviour evs.appendChild(ediv); } } } } } }