// 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: "Exhibition", fr: "Exposition", videos: [ { url: "", en: "Opening", fr: "Vernissage" }, { url: "", en: "Exhibition", fr: "Exposition" } ]}, { en: "\"Placard\"", fr: "\"Placard\"", videos: [ { url: "", en: "No Copy Paste", fr: "No Copy Paste" }, { url: "", en: "Wesley Smith \"Descent\"", fr: "Wesley Smith \"Descent\"" }, { url: "", en: "Noyade", fr: "Noyade" }, { url: "", en: "Taku Unami & Mattin", fr: "Taku Unami & Mattin" } ]}, { en: "Galactic", fr: "Galactique", videos: [ { url: "", en: "IOhannes Zmölnig \"Do sinusoids dream of electric sweeps?\"", fr: "IOhannes Zmölnig \"Do sinusoids dream of electric sweeps?\"" }, { url: "", en: "Koray Tahiroğlu \"LiveImprovS~\"", fr: "Koray Tahiroğlu \"LiveImprovS~\"" } ]}, { en: "Hardware", fr: "Hardware", videos: [ { url: "", en: "Anne Laforet", fr: "Anne Laforet" }, { url: "makeart-concerts-renihofmuller.ogg", en: "Reni Hoffmüller", fr: "Reni Hoffmüller" }, { url: "", en: "Mattin", fr: "Mattin" } ]}, { en: "Workshop", fr: "Atelier", videos: [ { url: "", en: "Fork a house!", fr: "Fork une maison!" } ]}, { en: "Secret agents, expressive programming and virtual machines", fr: "Agents secrets, programmation expressive et machines virtuelles", videos: [ { url: "", en: "Wesley Smith \"LuaAV\"", fr: "Wesley Smith \"LuaAV\"" }, { url: "", en: "IOhannes Zmölnig \"iemguts\"", fr: "IOhannes Zmölnig \"iemguts\"" }, { url: "", en: "Agoston Nagy \"Pure-data\"", fr: "Agoston Nagy \"Pure-data\"" }, { url: "", en: "Gábor Papp \"Fluxus\"", fr: "Gábor Papp \"Fluxus\"" } ]}, { en: "Totally f*rked", fr: "Complètement f*rké", videos: [ { url: "makeart-whatthefork-simonyuill.ogg", en: "Simon Yuill", fr: "Simon Yuill" }, { url: "makeart-whatthefork-wayneclemens.ogg", en: "Wayne Clements \"love2\"", fr: "Wayne Clements \"love2\"" }, { url: "makeart-whatthefork-deptfordtv.ogg", en: "Adnan Hadzi & Lisa Haskel \"Deptford.TV\"", fr: "Adnan Hadzi & Lisa Haskel \"Deptford.TV\"" }, { url: "makeart-whatthefork-robmayers.ogg", en: "Rob Myers \"FooCorp\"", fr: "Rob Myers \"FooCorp\"" } ]}, { en: "Hadopi", fr: "Hadopi", videos: [ { url: "makeart-whatthefork-milovann-yanatchkov.ogg", en: "Cities and architectures: towards open artworks?", fr: "Villes et architectures: vers des œuvres ouvertes?" }, { url: "", en: "Internet, Freedom and Creation", fr: "Internet, Freedom and Creation" } // FIXME TODO TRANSLATION ]}, { en: "Bottom-up! scriptable design", fr: "Bottom-up! le design en scriptant", videos: [ { url: "makeart-whatthefork-bottom-up-lafkon.ogg", en: "LAFKON", fr: "LAFKON" }, { url: "makeart-whatthefork-bottom-up-milovann.ogg", en: "Milovann Yanatchkov", fr: "Milovann Yanatchkov" }, { url: "makeart-whatthefork-bottom-up-olivierlaruelle.ogg", en: "Olivier Laruelle", fr: "Olivier Laruelle" } ]}, { en: "Breakfast Club with Nathalie Magnan", fr: "Breakfast Club avec Nathalie Magnan", videos: [ { url: "", en: "Puredyne forking", fr: "Puredyne forking" }, // FIXME TODO TRANSLATION { url: "makeart-whatthefork-morningtalk-simon-nathalie.ogg", en: "Simon Yuill explains", fr: "Simon Yuill explains" } // FIXME TODO TRANSLATION ]} ]; // 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("controls", "controls"); // should this be set? at least in firefox with it set it's annoying to mouse over and out to remove visible controls on load, but unsetting it makes it a pain to pause later (have to right-click to show controls...) ev.setAttribute("autoplay", "autoplay"); 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"); var ea = doc.createElement("a"); ea.setAttribute("href", "#"); // link to nowhere 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); } } } } } }