From 004d262004e7aac9f956d412dcb0c7dd9e4fda0a Mon Sep 17 00:00:00 2001 From: Michael Murtaugh Date: Mon, 22 Jul 2019 15:35:19 +0200 Subject: [PATCH] special/recentfiles --- dist/app.js | 96 ++- dist/index.js | 49 +- img/Ateliers_pluridisciplinaires.png | Bin 471 -> 948 bytes img/Cours_de_soutien_specifique.png | Bin 582 -> 1162 bytes img/Cours_techniques.png | Bin 847 -> 1654 bytes img/Cours_theoriques.png | Bin 519 -> 1311 bytes img/Enseignants.png | Bin 476 -> 879 bytes img/Main.png | Bin 461 -> 340 bytes img/Orientations.png | Bin 724 -> 1558 bytes index.html | 14 +- special/recentfiles/Makefile | 6 + special/recentfiles/dist/recentfiles.js | 942 ++++++++++++++++++++++++ special/recentfiles/package.json | 16 + special/recentfiles/recentfiles.html | 27 + special/recentfiles/rollup.config.js | 17 + special/recentfiles/src/recentfiles.js | 87 +++ src/legend.json | 7 +- src/wikimap.js | 86 ++- style.css | 211 +++--- symbols.svg | 139 ++-- 20 files changed, 1511 insertions(+), 186 deletions(-) create mode 100644 special/recentfiles/Makefile create mode 100644 special/recentfiles/dist/recentfiles.js create mode 100644 special/recentfiles/package.json create mode 100644 special/recentfiles/recentfiles.html create mode 100644 special/recentfiles/rollup.config.js create mode 100644 special/recentfiles/src/recentfiles.js diff --git a/dist/app.js b/dist/app.js index 90264aa..920268a 100644 --- a/dist/app.js +++ b/dist/app.js @@ -4483,7 +4483,7 @@ var app = (function (exports) { seconds = date.getUTCSeconds(), milliseconds = date.getUTCMilliseconds(); return isNaN(date) ? "Invalid Date" - : formatYear(date.getUTCFullYear(), 4) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2) + : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2) + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z" : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z" : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z" @@ -5169,7 +5169,8 @@ var app = (function (exports) { constructor (opts) { var width = 600, height = 600; - + this.width = width; + this.height = height; this.zoom_level = opts.zoom || 1.5; this.apiurl = opts.apiurl; this.categorylabel = opts.categorylabel || "Category"; @@ -5244,10 +5245,31 @@ var app = (function (exports) { }); cat.append("span").attr("class", "count").html(d => d.tcount); + var set_active_url_from_window = () => { + var title = this.wiki.unescapeTitle(window.location.hash.substring(1)), + page = this.wiki.get_page_by_title(title), + url = page.url(); + console.log("wikimap init", page.title, url); + this.set_active_url(url); + }; + this.loaded = true; - if (this.active_url) { + if (window.location.hash) { + set_active_url_from_window(); + } else if (this.active_url) { this.set_active_url(this.active_url); } + + window.addEventListener("hashchange", e => { + console.log("hashchange"); + set_active_url_from_window(); + }); + /* + window.addEventListener("popstate", e => { + // console.log("popstate", e); + console.log("popstate: " + document.location + ", state: " + JSON.stringify(e.state)); + }) + */ } on (message, callback, context) { @@ -5279,10 +5301,20 @@ var app = (function (exports) { .attr("class", "links"); this.nodesg = this.content.append("g") .attr("class", "nodes"); + + // DEBUGGING + this.svg.on("click", x => { + // console.log("svg click", event.target); + if (event.target == this.svg.node()) { + console.log("(debug) BACKGROUND CLICK", this.active_page.x, this.active_page.y); + this.centerOnItem(this.active_page); + } + }); } dragstarted (d) { - // if (!event.active) this.simulation.alphaTarget(0.3).restart(); + if (!event.active) this.simulation.alphaTarget(0.3).restart(); + // this.simulation.restart(); d.fx = d.x; d.fy = d.y; } @@ -5293,7 +5325,7 @@ var app = (function (exports) { } dragended(d) { - // if (!event.active) this.simulation.alphaTarget(0); + if (!event.active) this.simulation.alphaTarget(0); d.fx = null; d.fy = null; } @@ -5322,11 +5354,16 @@ var app = (function (exports) { return ret; } + // function called on iframe load async set_active_url (url) { - this.active_url = url; + console.log("wikimap.set_active_url", url); + this.active_url = url; if (this.loaded) { var page = this.wiki.get_page(this.active_url); if (page) { + // console.log("calling replaceState", page.title); + window.history.replaceState (null, null, "#"+this.wiki.escapeTitle(page.title)); + // window.location.hash = this.wiki.escapeTitle(page.title); this.set_active_page(page); } else { console.log("wikimap: set_active_url: NO PAGE FOR", url); @@ -5378,9 +5415,12 @@ var app = (function (exports) { // console.log("page is already the active page", page, this.active_page); return; } - + // window.location.hash = this.wiki.escapeTitle(page.title); + // window.history.pushState ({pagetitle: page.title}, page.title, "/m/"+this.wiki.escapeTitle(page.title)); // cleanup old if (this.active_page) { + this.active_page.fx = undefined; + this.active_page.fy = undefined; this.active_page.active = false; // deactivate linked links/nodes this.linked_nodes_set_active(this.active_page, false); @@ -5421,10 +5461,10 @@ var app = (function (exports) { // LOAD/ENSURE PAGE LINKS var links_out = await page.get_links(); links_out = links_out.filter(p => (!p.redirect && p.ns == 0)); - console.log("links_out", links_out); + // console.log("links_out", links_out); var links_in = await page.get_linkshere(); links_in = links_in.filter(p => (!p.redirect && p.ns == 0)); - console.log("links_in", links_in); + // console.log("links_in", links_in); links_out.forEach(p => { this.ensure_link(page, p).wiki = true; }); @@ -5435,12 +5475,19 @@ var app = (function (exports) { } this.active_page = page; + // console.log("fixing active page", this.active_page); + if (this.active_page.x === undefined) { + this.active_page.x = this.width/2; + this.active_page.y = this.height/2; + } + this.active_page.fx = this.active_page.x; + this.active_page.fy = this.active_page.y; this.active_page.active = true; this.linked_nodes_set_active(this.active_page, true); - setTimeout(() => { - this.centerOnItem(page, 1000); - }, 1000); + //setTimeout(() => { + this.centerOnItem(page, 1000); + //}, 1000); this.events.emit("page", this.active_page); var data = {nodes: this.get_nodes(), links: values(this.all_links_by_key)}; @@ -5497,7 +5544,7 @@ var app = (function (exports) { } update_graph (graph) { - console.log("UPDATE GRAPH", graph.nodes.length, graph.links.length); + // console.log("UPDATE GRAPH", graph.nodes.length, graph.links.length); var link = this.linksg.selectAll("line") .data(graph.links, d => { return this.link_key(d.source.title, d.target.title) }); var link_enter = link.enter() @@ -5528,11 +5575,15 @@ var app = (function (exports) { }) .on("mouseover", function (d) { // console.log("mouseover", this); + // d.mouse = true; select(this).classed("mouse", true); + // that.update_nodes(); }) .on("mouseout", function (d) { // console.log("mouseout", this); + // d.mouse = false; select(this).classed("mouse", false); + // that.update_nodes(); }) .call(drag() .on("start", this.dragstarted.bind(this)) @@ -5603,13 +5654,14 @@ var app = (function (exports) { update_nodes () { var nodes = this.nodesg.selectAll("g.page"); // console.log("update_nodes", nodes.size()); + nodes.classed("mouse", d=>d.mouse); nodes.classed("active", d=>d.active); nodes.classed("active2", d=>d.active2); nodes.classed("highlight", d=>d.highlight); nodes.sort((a, b) => { // console.log("sort", a, b); - var x = a.active ? 10 : (a.active2 ? 5 : 0), - y = b.active ? 10 : (b.active2 ? 5 : 0); + var x = a.mouse ? 10 : (a.active ? 8 : (a.active2 ? 5 : 0)), + y = b.mouse ? 10 : (b.active ? 8 : (b.active2 ? 5 : 0)); return x - y; }); var links = this.linksg.selectAll("line"); @@ -5641,20 +5693,24 @@ var app = (function (exports) { centerOnItem(item, duration) { var bounds = this.svg.node().getBoundingClientRect(); var curt = transform(this.rect.node()); - console.log("centerOnItem", this.zoom_level, "item", item); + // console.log("centerOnItem", this.zoom_level, "item", item); var zoom_level = this.zoom_level ? this.zoom_level : curt.k; if (item && item.x !== undefined) { - var transform$1 = function () { - return identity$1 + this.zoom.translateTo(duration ? this.rect.transition().duration(duration) : this.rect, item.x, item.y); + // this.zoom.translateTo(this.rect, item.x, item.y); + /* + var transform = function () { + return zoomIdentity .translate(bounds.width / 2, bounds.height / 2) .scale(zoom_level) .translate(-item.x, -item.y); }; if (duration) { - this.rect.transition().duration(duration).call(this.zoom.transform, transform$1); + this.rect.transition().duration(duration).call(this.zoom.transform, transform); } else { - this.rect.call(this.zoom.transform, transform$1); + this.rect.call(this.zoom.transform, transform); } + */ } else { console.log("NO ITEM"); var transform$1 = function () { diff --git a/dist/index.js b/dist/index.js index 6f1ddf8..04ec175 100644 --- a/dist/index.js +++ b/dist/index.js @@ -58,4 +58,51 @@ iframe.addEventListener("load", function () { cats.addEventListener("click", e => { cats.classList.toggle("expanded"); -}) \ No newline at end of file +}); + +var specialselect = document.querySelector("select#special"), + // specialselectdiv = document.getElementById("specialselectdiv"), + specialiframediv = document.getElementById("specialiframediv"), + specialiframe = null, + specialsrc = null, + specialclosediv = document.getElementById("specialclosediv"), + specialclosebutton = document.getElementById("specialclosebutton"); + +function set_special (v) { + if (specialsrc !== v) { + specialsrc = v; + specialselect.value = v; + if (specialsrc !== "") { + if (specialiframe == null) { + // + specialiframe = document.createElement('iframe'); + specialiframediv.appendChild(specialiframe); + } + // console.log("specialiframe.src", specialiframe.src) + if (specialiframe.getAttribute("src") != specialsrc) { + console.log("setAttribute iframe src", specialsrc); + specialiframe.setAttribute("src", specialsrc); + } + specialiframediv.style.display = "block"; + specialclosediv.style.display = "block"; + } else { + // show map + // if (specialiframe) { + // specialiframe.src = ""; + // specialiframediv.removeChild(specialiframe); + // specialiframe = null; + // } + specialiframediv.style.display = "none"; + specialclosediv.style.display = "none"; + } + } +} +set_special(specialselect.value); +specialclosebutton.addEventListener("click", function (e) { + e.preventDefault(); + set_special(""); +}); +specialselect.addEventListener("input", function (e) { + console.log("specialselect", specialselect.value); + set_special(specialselect.value); +}); \ No newline at end of file diff --git a/img/Ateliers_pluridisciplinaires.png b/img/Ateliers_pluridisciplinaires.png index 7af95f0ddcc1c10beefd5e4136d6b40beb5c26c6..5c69cfef0e9c336ffe0137b1c1f7d6018c4113fc 100644 GIT binary patch delta 902 zcmV;119|+{1GEPriBL{Q4GJ0x0000DNk~Le0000n0000n2nGNE0CSu{9FZX!3l7l$ z01nXs@r8RQkwzzf12IWNK~!jg)!JKcR8Uo;9>j0zt@ zjX`7lIGUO?5qUrn5u%PzMaPbl^(2K@PS{_!9nc_@m&faI{jQ?b1lF6*K z{{MYu@4fcgXG}e4;Yl3AW7v%y*n<18h-F;I0_JfBXYo&eO&pR?;0Qjz64nxI5hrnY zJ>JmJ!clyaNW7a}#w!>fw163WRWte9?OVJs2=aI17*+=?ptM!YVWKVp58>jF$lq?~ zF_|l13RfEvP}=vHP8BeX-x?NB+OODKRlvhy1ezw_Zr4=!Yfa$G5g^^kE{H{@C*BzW zvYXjlF99=uhPRBS+A5yyCZHvD&8A8AV;6PV*^iC@xhnQ@NqlVmv%n?n>7*_ZKZ+9K zFWiMku)W6km&LNXT7GdvJ)^UXH$^$#36J9~tkjfmLydK+hJYVqXV38qJcv(f$oYO5 zuqFLGP}(WgOXwC(XXd?G<~@)Z=%WMy?Lu;&$kT;?I8vr!1+Pj!V*V{w#XmAQ94bVm znu>RECBq-S!|@FNDfmMAqwKZ{RmHvx4rhrDM2hndH3=a0tDh2iTrF^KV&a7?+8eQ! z5pQdOdlH?O6aBhjDba6Bf!`CIw2|xK|Gw70*eh;mnkK)7Ut}~iro;#| zDd4*9n`hsc)Z837hX-;6l$a2!)-dm}XH}TQRq%|sHyfmY3!=3;P>hQUj=FD^=JAqE zO?KizpuqE@y?!&1_zk?b9w+%No3Y+M=?mj{LNuqRMCW3MXv}RBBA3M7_=0%J<&0>d cX20)r3kQ(psKa`k;Q#;t07*qoM6N<$f_18)_ zQxoe(ghC~5+=!@E{{}525d=jSey?2AXi-62NEHROF+^?Chze>nek6@Fxh^JGF6Yj< z_uO;Ny^Rmd=FI!?3^Vhdcix#E8}=)qrq_!TEGg-`H4W=iCc8{6?X zj-i^feT^qE*k$fuCtksFMzUGjGTy+I-59`TJYDhtV(l$#?bINKFqebWDJNGxTw2>sNq^6wMp`s!-dThUx+AG zG2A(>Es?fDo=;QQiIs@LSf`n0z?eo}D+1>Ryc!XIp4FM?)Gqq*y+(d7Cj|#^IwDwV zick>uYUFoX$RPg1!HCebkXEb}tP`?`B+tj{g(f2cBVDDL4I>(Pep&0>7U^6PLh)L| zW+6FE^4(g&%@KtUgkxzL*dqMg%D@~xjC|iy!Bvrt_eyX&DjdLmT6JEFf<?Par0`_-A>`fE)Lb79h0Y}Zw z6!k4HHbiXwOo&j)1hEKWQ6<){FW@7|`BWLFyCnX}D0iZOkA@ko2x)RX&Q@$`O=pl< z!4Em@Z&+>h__Kofi10-@oxmMh?}6tE*pG34o3G%zNXMlG9Q}xgqz~qEp>mQJmqosP zTM-hmBw|0wcJPewM?Z=`gv~jF2NW-f?uvYyg8QZXVAd!mH1fTV@bgP{EDFW5wT4aN z;eDVcFcs-6vW`220~&cAs~31GA~30(Dq>lv;0ujB57r9}ieDA9tRHm|!y5T5i(C+Y zy%`ZaX>AlA&JhyLB)`{V!n?%FL5I4*v;|`I;1x|m`AZRns!)qPQ@AsQ(~HfNwuskT z7jR<-$)@2N@sjC0E^ei~FQQl#23XeFI}5H8KPy$WQEwYhF|eRJb>O@3cM6B`b`153 zpXF<9)S0>HIU>h>V!v?Rm1cBSC}Wm?b@etZg!?pqM{#am2OBk?nW~W9JSbmfWRs8) zx4H~HQe+S{WWAnV5^i4~#ce{hqc>q^0JjQP*b}my@1Iq|^>jV*J{VZaNH`WHJ9Zn; zttT9>3IDW?;|l-tM>R%V&zyRSC?{}4)MyZCv(dB+R>Nk0Es*P40tVkQ*an@TNa95E zJl9j?d9F#EXwV4?23rQ-RwiJu?Va~*nx^_1(lpiHdCxM~3goKfcxTxB2s%OWH-Zw& z zHD1R9fU{R8@jJf$@{C$*EB&w^s*tQepoeCoS*wYv>U=)0t)FVb1p2bwZs~4zS8Kv< zw_97EO=sBcc0{1B0MIgQ*8k~~HOeggt79+TUsN1i`$u+s&oAO}tXY;-G>FHs`kr5A z=X32n1#)$o;;>%f1Vr()U@W}G&AaqljDOXVS-2~q$s{s zno~_Ag&1g;$4JvIubCA=LJ$>&nbd={P6egd{46EWtP54;bI#1uBpa}DT3Rx~ljC9Gc$YzH1L&^8O40J?!* z;4JWOo;ESxz73d*OhzVxM-G{!XMnzh^2I_2&`)?Khk(7nTHxjc{B8l-fqlT$2)-AA z2U3z9fC<2VTM->y23|&Hxm+{=uK)uP{p`%kP!=Wv2P2qw0@I7Mt3tNWa^SxFvmBTW zj4#seR%BacU4NegHUP8WVK_%pNV5Yt*g@jd|ZO?g`Pdg z*3zg2j=Oqq#vMevYuF1+b9Gh$=OTo;f@rW!z#^aynZc@jc@gjgqN$>`Umvj2^;Lry zO|p-J8r(+2iw@`?c?Km0_7d-xR{33QU@Kq zQ_;GEk2A5OU#l9lU=_gD3JD&C7gfJmtUL1{R^}#vN7aXGSXW$cxho{I6Xl`?Yc#hw znm*I(GT4ah1hS+7wEF8pw$@nTJmT*KSm|ip>iy0PFh_kjsmfJ|OA$ab9V;ACSV!hnWidKzvQ62%&&DsHL zR}Gr6PUE(Uif-`|)@jtKs1B^mjR8StDfT&rU5Ykp(4P`~66AoR?^iVKs+cW*bQK9+ z0xZFf-bZYefR9KQD_SEGYDaB3nz4Ishhyv`wvDNaejQJ`zI;Ubnxc&mk%QL44x;uQ zvO;~1!J1UX7u=6cKAgoS2d5+VEdl+*C?mUGV#lHqt7(KOSL;A}#^ycpR+`-#48 zJBwThY19(FHI98gce;kh3EPi)!a3V=o?V0|td8)t!W(f10TQokLzqK<{2A|!f+Wul zQu;;Dr&v1?U^WtZ>-q;sc+mqAn;dbB`YF7uEx>cYS4irpknmTKKOQy{zOo3=jy)4O z;9KNQvm{JJX2A>7iOabm8IAoUr4%_n@v82hN}dQ>i#snu$c z=Xum>wP<&DmvmjfWsLOzeEV6os;a+o&WH7SouVir+qTIxOi3-Ueb;r>FbrXuCerCN*4NjO%jFOR0ZvX%(ChVZaBzThI*nqn zI2sHFKLU7v2LO^W_OV{C)7jY>2_dLjtx_Dv^l#!gCd;x&2tkcTgKD)JJ&cwDfVaA? z-$qeHnx;{;TBVn;EQ{vm<|v9HT3lR=0Q?LorCTnS$+m4;T3UM6!BgTmrhGn6`}_N} zv$I1|$`8u@{r%U=%gbmsn=lLmiA3UQ=AV#ABw!eS2Aa(#3WWm3$E z=^&TO{oe@y05nZQ7>3AXG8hhrQelkUbh}+-vsnZ|@I@xR?<1SdA`C+?#{N_$Cnvpj zyN#8V6*!IqB6`svj$=5EgVohlTwGjWVq)SC0C=P8`fb18r`g$AvMlSxU@Mgh&CkzM z6h)MO&*vimuK^&%80*z)HEJ{(B!nQ#vYu^eJRVb}QXwG(ou8l6(a{kllgTcC)Z;2% zC6mb`*LBtF>uYRmY+!nN8irv&(=_O`%jOjqdL5egN=Zc`$hw z$MNsQVsR9PAw18+*47q+Ai(MADXy-ru)V!!4bSu7`#wsg(kPDO-vGP^{`s9pUUAN= z3kwVC=H{j-6bi^>GU#+VXt&$2ZTt4}@^UyB41Rhv_%BibUP~!I2qC(PqKt$PT`6Vj eA;hnq3jPLyHNr?vw*4#s0000gYs}`_)s3=L*ngS1!w$H_x zhtqlI&YXMSy!TJeX6Br8|7Y&Ux%b>@qB!&b>w!L?7gzy*EC-eVW#BY02^VC_e$)fGZnIU9cAT0GKrpwaP586S%$+0dxX8fVlz#(BxyFt6o72 z08;^^&c@xPC)z^B0Dzy_cjSdj3uAbz$n*4Z1|kyOo~t8fI@e9GwF0E{b&q`jG^xad_40^(b;e=7oia!iGEx-k-XVVce`l4BmU zg=i`QeooI|bzthk5pdhl-S$Au2`^6U9cr&j5E)FTj(L)f%u5N}bv z0%c*V;^RP4;Ymf|5YX%y%qrvy=LIlH88nF@J-AAgQ#3Z1b?8@pb4cDY;bp}^ zrDqy3%m#2@%MJTDYC*47RAf6fT!m$z9erX~4k( e1WV;47ykhtUH6iA*K-B{0000y!%!5)kGUP1=77YCX`(Nn)lC$i!cBB2h<_2E zK}6`#xx0f8&_(Dw1VSCU3wqmPN-AyC+;(XB9Q;Eo!D@cVH$Q<8Vy|2-mjFBhKoA5_N}<_oVl*0m0l;Ig*E8xXb9ThcmlFcVapv-04Bp^=F4KScsEVpx-P5*D>6;;Iomv!0TZbr{U01g2itmEUJ=s)M*0R(}@ipZdF;s5{u M07*qoM6N<$f-jxSC;$Ke diff --git a/img/Enseignants.png b/img/Enseignants.png index db5458d25616f17810d6743090ce3299d80a13b0..ab1b4aecce8d9286767515a189aa875221e53f8d 100644 GIT binary patch delta 833 zcmV-H1HSy+1MdbQiBL{Q4GJ0x0000DNk~Le0000p0000i2nGNE0LUSLWRW2n3l7l$ z01nXs@r8RQkwzzf0_;gdK~!jg)tF6)jZqlKf0r2_V+{GarQ|avg$5OIfAw|mZc&wbySU!BE$ z?|J^u|9QLjeV_9{I-Cb4q?D_wYygIULs=V1N)7M^Rm>lMV0N~4lF^DPM6a9K+VN*5 z@DsC`L10amrhK`IS%_ZGfn0{ZoM{63i7#ddXvxl+8#$l@)BIEM`4ccHBY#fpz%<^4 zGX6+hKc1CATk3#LOw-#--z^3HMXvt^=4as1nv6n$xpr&s|KDm&)vuFVfe**fb29z~qD}i*&64!q%52QT@C`7ae zfK`FCW0C#W#lZTy z?Z13~hA@U}khRQqC3(QR_YDpgT^3=Hp zf%U#(alhRo$vrx8P~?A!YJZ$*5kg7&FJHz1AB7L+X=pvrEkuGp?=9IPeDnYfE&`{8 zz~jIMU6Iq!6Sjf!I2*G6@n47%bx4Nar}@+EE>x~bgeTGWv> zx_QJ5=Su9uvaLEGHojtnjZLXA4b^9bJn#XS5((@EKF0_aP&2MHD54I7Q5u0|kd?4#V}X>Jm@vC`G3>sB zHn5s7`2x1=O?(2kjx5FpU^0yhaUdZYYI}QJfEWb|{^yh5a6W*BIOq2OfK7LML&T7C zPKbE@UqflF^H!@xj^n%oz}d+H=ls@n-C{nUlkfX0%d+l&PBlEG)W>8pAtItQO-Tq* z0DynAAcROdozAMNDk37P>zaDKUSZpIdaTh!M3ZG1{cJj&5+c?BaM36@j+2F9_(eM! z3#N8p^_ zxUO3)7K=l11}&FM@;tAwEGznLcuJ{{BuNeeo8mYoDdi^soNomoMBHw-x05zyjG-V1 zR!XS{SbsS{#Fx=%#QXhz<9eI2EQ9fQTpMG$j4}2orMzT}F(Tq+Svp5c06;`f-~I?O U?o3f6y8r+H07*qoM6N<$f^G}B4FCWD diff --git a/img/Main.png b/img/Main.png index 6e683970f42d56d659fbcbbb74d6550dd383488f..7918b52bb4e67a2d75991d468e748a8107dfca68 100644 GIT binary patch delta 289 zcmV++0p9-21JnW`iBL{Q4GJ0x0000DNk~Le0000K0000K2nGNE0F8+q4Ur)l3l7l$ z01nXs@r8RQkwzzf0MSWAK~y-6t<}L!0x=YY;g6DW<*T8C36CTs_!Pnm@E~j<8Hron zt7~vEorH`7bex{#?Akx4x3{-+tH2Z1*yB5Tj}@kIO_Cl^;dH|lCf7g#a~u<3jgNSa zd;e(B1Jw4s4J&&l>q`3AzzVz#fHi){9n3Po8qdOc)C?+UNo$c*S0i=9-e*eq)7d`* zbPD*$2>cA#W&~~nHW`5%>c&18e!~Z66KI+NShnLX2f&tH=O5$cpRn=p9~N`2v0c5mL&(Z1@my00000NkvXXu0mjfK5uvl delta 411 zcmV;M0c8Hv0?h* z)i+fQ1Lp-ej|ABvJ_08IX`14_CrJ{P%O&&qoYiU-IiH(<&E^_-2hgZ!W}&L8&~;td zMb~wqEX!bKp?~)bC}uW|->RxA4528Btpzi?r4J`$S@uWqH`=xh&bgqfK}7CVM6Lk5 z_l!oPLtz3i9*^BXl&Sd->_4FBuSV|COGG4nuf(< zaj;<#XJ+<1)a_pJ>`<6$X15}8uc~#wRkeuBdXIZs^$mJMADfr95M zN@`=Q1riO$s1Ll5MpHGus4tpo4A`g-s8xdU0tx|@#DMVvNJ6W$UZ7%&Mp~Pv&8E&vkZY&Y3e?Kyp|J+zd1TbwCY&Pzjs?q=6H_G2k%J3+w@Q z0>30^Lu}LlPa}qcc;*kViQ zZdL{SsW6@Zu8(Ly1+W}=7ubc&``>~6NPK7q7DtqSwFH?3ragZF=eQWV6s8o>rqiMf z|AZn#Yu&&ypddtUlZF3n8$*MI;pGrTg}@8Icti)x_61NIqT>~XFNGzY*`yHnBRh!= zbAfFRBd35t;Ah;y?+>8Sp=UO5Na5RP64s(8fXhOJ?@@S0fwf320gnU!lKo|BEIb9k0YztfkVqS$haHAI zq|iS@_`)@DHE`6Bv&%uhO3{1Je_5-%9L1hHl>kQ!`j>KaAc(8T4u1DqXv@j|ifQC@ zs*dg!hvL-+?Ki-TJRAXd!jO5uLAzD4ccq7ajEISy4nfUEe+{ze^1(V}diz)mTx_BJ zOnFxC0T(JS_F9C@1Fi}558`$@DkhLKPY`!oX!j}4>OAyd)TcZHNg0AW*=DDCxxtjR z#6s7rJX_=;3n+**k{f9_*XVb~nse(YHAq2Ps2; zUX_Jz60tFeGA-b_V!@cvpXIhKX9N#xrm;boHl{r!O%9@j?9{@?QKNrexNVV9f}G)P zx_lIoJ%ImsNZG}NZGQF}{ToBgi;f#Ob);>jRCApIjCjCL%8NRSkS~G11N}RZkxT++ zg1X&8r-h3jJ@oCY!6IZFiL5@#k*J)1FBSkR1N{l4My5fttruVg*&%0hBpMYSazr)@;x9UQ9#iZ*CBb}3A@~7zR=Zr`8Ag)GunpiA^eW~j*thOr>9Ih~)j{$c8pGS0P7E-%ih|J+)B>g^u zEb_sKavG7CX69ByNQ579G22R%BgmqiE;OQF^`)>EC$jLGA|Q<{>ZsE!AGBcKKss^} zRD@ow@Y_1_xC(Qi41Hny?W2rsIiVET?GXAaGIIHrg2>2dMc-omwww5WX%MAI7V6qU zdy&+^+#sT$5-FW(mCj(>LIPKPMY!+v{5Fonk~ZKrWXB5L_sv9p)3_aY5=lp*Tt#$X zPg`Q43EA#)4SI2Z7&wOeHXtulAS0CIKPcMvx*myXryZ99?qgd0E@zo6f{_&=*Xj?DW*$WFHx`6*!_3FZF*?uE-Q+EB27+CDw#~``uh5D{A#tT>FH_3<8j^I-l|wE%FH6*6VADxJm#00rq z4uA*FD+dro5dfa&QLEMd5skm7)oOHfbkM?yaL$E)K@dcebaHYc&+~MCe%>abQmLq` zt4jw52a=?*v9ZWG_k)M%8iG<4KvLtD4Zcb)a2L_w+J_A}`Uw?e{`1n|BYin9r zS<&HZ;h`Fhh9qfqb+s9!?N)z$Gy4i?etuq8S66Kw6bc2+&dxTY`~`RcPd}3nd@!@O zfF%-%=Bfz8P-kan0Fk6!;63o)bqxYr&bhpE?$<-*fsd`4oA?7v?x(KR&}umV0000< KMNUMnLSTXub3k|i diff --git a/index.html b/index.html index f242c7a..2ee469f 100644 --- a/index.html +++ b/index.html @@ -18,12 +18,22 @@
+ - - +
+
+ × +
+
+ +
+
- +
diff --git a/special/recentfiles/Makefile b/special/recentfiles/Makefile new file mode 100644 index 0000000..1b03c31 --- /dev/null +++ b/special/recentfiles/Makefile @@ -0,0 +1,6 @@ + +all: dist/app.js + +dist/app.js: src/*.js + # node_modules/.bin/rollup src/index.js --file dist/index.js --format iife + node_modules/.bin/rollup -c diff --git a/special/recentfiles/dist/recentfiles.js b/special/recentfiles/dist/recentfiles.js new file mode 100644 index 0000000..7100e62 --- /dev/null +++ b/special/recentfiles/dist/recentfiles.js @@ -0,0 +1,942 @@ +(function () { + 'use strict'; + + var xhtml = "http://www.w3.org/1999/xhtml"; + + var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + + function namespace(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; + } + + function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml + ? document.createElement(name) + : document.createElementNS(uri, name); + }; + } + + function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; + } + + function creator(name) { + var fullname = namespace(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); + } + + function none() {} + + function selector(selector) { + return selector == null ? none : function() { + return this.querySelector(selector); + }; + } + + function selection_select(select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection(subgroups, this._parents); + } + + function empty() { + return []; + } + + function selectorAll(selector) { + return selector == null ? empty : function() { + return this.querySelectorAll(selector); + }; + } + + function selection_selectAll(select) { + if (typeof select !== "function") select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection(subgroups, parents); + } + + function matcher(selector) { + return function() { + return this.matches(selector); + }; + } + + function selection_filter(match) { + if (typeof match !== "function") match = matcher(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection(subgroups, this._parents); + } + + function sparse(update) { + return new Array(update.length); + } + + function selection_enter() { + return new Selection(this._enter || this._groups.map(sparse), this._parents); + } + + function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; + } + + EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } + }; + + function constant(x) { + return function() { + return x; + }; + } + + var keyPrefix = "$"; // Protect against keys like “__proto__”. + + function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; + + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } + } + + function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = {}, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; + + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); + if (keyValue in nodeByKeyValue) { + exit[i] = node; + } else { + nodeByKeyValue[keyValue] = node; + } + } + } + + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = keyPrefix + key.call(parent, data[i], i, data); + if (node = nodeByKeyValue[keyValue]) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue[keyValue] = null; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { + exit[i] = node; + } + } + } + + function selection_data(value, key) { + if (!value) { + data = new Array(this.size()), j = -1; + this.each(function(d) { data[++j] = d; }); + return data; + } + + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + + if (typeof value !== "function") value = constant(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = value.call(parent, parent && parent.__data__, j, parents), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); + + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } + } + + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; + } + + function selection_exit() { + return new Selection(this._exit || this._groups.map(sparse), this._parents); + } + + function selection_join(onenter, onupdate, onexit) { + var enter = this.enter(), update = this, exit = this.exit(); + enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); + if (onupdate != null) update = onupdate(update); + if (onexit == null) exit.remove(); else onexit(exit); + return enter && update ? enter.merge(update).order() : update; + } + + function selection_merge(selection) { + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection(merges, this._parents); + } + + function selection_order() { + + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; + } + + function selection_sort(compare) { + if (!compare) compare = ascending; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } + + return new Selection(sortgroups, this._parents).order(); + } + + function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + + function selection_call() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; + } + + function selection_nodes() { + var nodes = new Array(this.size()), i = -1; + this.each(function() { nodes[++i] = this; }); + return nodes; + } + + function selection_node() { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; + } + + function selection_size() { + var size = 0; + this.each(function() { ++size; }); + return size; + } + + function selection_empty() { + return !this.node(); + } + + function selection_each(callback) { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; + } + + function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; + } + + function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; + } + + function attrConstant(name, value) { + return function() { + this.setAttribute(name, value); + }; + } + + function attrConstantNS(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; + } + + function attrFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; + } + + function attrFunctionNS(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; + } + + function selection_attr(name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } + + return this.each((value == null + ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction) + : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); + } + + function defaultView(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document + } + + function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; + } + + function styleConstant(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; + } + + function styleFunction(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; + } + + function selection_style(name, value, priority) { + return arguments.length > 1 + ? this.each((value == null + ? styleRemove : typeof value === "function" + ? styleFunction + : styleConstant)(name, value, priority == null ? "" : priority)) + : styleValue(this.node(), name); + } + + function styleValue(node, name) { + return node.style.getPropertyValue(name) + || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); + } + + function propertyRemove(name) { + return function() { + delete this[name]; + }; + } + + function propertyConstant(name, value) { + return function() { + this[name] = value; + }; + } + + function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; + } + + function selection_property(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; + } + + function classArray(string) { + return string.trim().split(/^|\s+/); + } + + function classList(node) { + return node.classList || new ClassList(node); + } + + function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); + } + + ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; + } + }; + + function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); + } + + function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); + } + + function classedTrue(names) { + return function() { + classedAdd(this, names); + }; + } + + function classedFalse(names) { + return function() { + classedRemove(this, names); + }; + } + + function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; + } + + function selection_classed(name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; + } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); + } + + function textRemove() { + this.textContent = ""; + } + + function textConstant(value) { + return function() { + this.textContent = value; + }; + } + + function textFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; + } + + function selection_text(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction + : textConstant)(value)) + : this.node().textContent; + } + + function htmlRemove() { + this.innerHTML = ""; + } + + function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; + } + + function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; + } + + function selection_html(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; + } + + function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); + } + + function selection_raise() { + return this.each(raise); + } + + function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); + } + + function selection_lower() { + return this.each(lower); + } + + function selection_append(name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); + } + + function constantNull() { + return null; + } + + function selection_insert(name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); + } + + function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + } + + function selection_remove() { + return this.each(remove); + } + + function selection_cloneShallow() { + return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); + } + + function selection_cloneDeep() { + return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); + } + + function selection_clone(deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); + } + + function selection_datum(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; + } + + var filterEvents = {}; + + if (typeof document !== "undefined") { + var element = document.documentElement; + if (!("onmouseenter" in element)) { + filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + } + } + + function filterContextListener(listener, index, group) { + listener = contextListener(listener, index, group); + return function(event) { + var related = event.relatedTarget; + if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { + listener.call(this, event); + } + }; + } + + function contextListener(listener, index, group) { + return function(event1) { + try { + listener.call(this, this.__data__, index, group); + } finally { + } + }; + } + + function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); + } + + function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; + } + + function onAdd(typename, value, capture) { + var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; + return function(d, i, group) { + var on = this.__on, o, listener = wrap(value, i, group); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + this.addEventListener(o.type, o.listener = listener, o.capture = capture); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, capture); + o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; + if (!on) this.__on = [o]; + else on.push(o); + }; + } + + function selection_on(typename, value, capture) { + var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; + + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + if (capture == null) capture = false; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); + return this; + } + + function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; + + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); + } + + function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; + } + + function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; + } + + function selection_dispatch(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); + } + + var root = [null]; + + function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; + } + + function selection() { + return new Selection([[document.documentElement]], root); + } + + Selection.prototype = selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + join: selection_join, + merge: selection_merge, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + clone: selection_clone, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch + }; + + function select(selector) { + return typeof selector === "string" + ? new Selection([[document.querySelector(selector)]], [document.documentElement]) + : new Selection([[selector]], root); + } + + /* + + Uses the Mediawiki API to display a list of recent images and a link to + the page where the image has been used/placed. + + Makes use of the following API calls: + + * https://www.mediawiki.org/wiki/API:Allimages + * https://www.mediawiki.org/wiki/API:Imageinfo + * https://www.mediawiki.org/wiki/API:Imageusage + + */ + var NUM_FILES = 10; /* how many files to show */ + + async function get_json (url) { + var resp = await fetch(url); + return await resp.json(); + } + + function url_for_title (title) { + return "/w/"+encodeURI(title.replace(/ /g, "_")); + } + + async function load () { + var main = select("#content"), + baseurl = "/mw/api.php?action=query&list=allimages&ailimit=1&format=json&formatversion=2&aisort=timestamp&aidir=older&aiprop=timestamp|user|url|mime|size", + url = baseurl, + count = 0; + while (count < NUM_FILES) { + // console.log("starting loop", debugloopcount, "count", count, "url", url); + let resp = await fetch(url), + data = await resp.json(), + allimages = data.query.allimages, + useimages = []; + // console.log("got data", data.query.allimages.length); + // For each image: + // Use API:Imageinfo request/get the URL to a thumbnail image + // + for (var i=0, l=allimages.length; id.imageinfo.thumburl && (d.imageusage.length > 0)); + let items = main.selectAll("div.file") + .data(useimages, d=>d.title) + .enter() + .append("div") + .attr("class", "file") + .append("a") + .attr("href", d=>url_for_title(d.imageusage[d.imageusage.length-1].title)) + .attr("target", "wikiframe") + .append("img") + .attr('src', d=>d.imageinfo.thumburl); + + count += useimages.length; + if (data.continue) { + url = baseurl+"&aicontinue="+data.continue.aicontinue; + } + // if (debugloopcount >= 5) break; + } + + } + document.addEventListener("DOMContentLoaded", load); + +}()); diff --git a/special/recentfiles/package.json b/special/recentfiles/package.json new file mode 100644 index 0000000..012e95d --- /dev/null +++ b/special/recentfiles/package.json @@ -0,0 +1,16 @@ +{ + "name": "recentfiles", + "version": "1.0.0", + "description": "", + "main": "rollup.config.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "d3-selection": "^1.4.0", + "rollup": "^1.17.0" + } +} diff --git a/special/recentfiles/recentfiles.html b/special/recentfiles/recentfiles.html new file mode 100644 index 0000000..a78ec21 --- /dev/null +++ b/special/recentfiles/recentfiles.html @@ -0,0 +1,27 @@ + + + +recent files + + + + +
+ + + diff --git a/special/recentfiles/rollup.config.js b/special/recentfiles/rollup.config.js new file mode 100644 index 0000000..13bbf30 --- /dev/null +++ b/special/recentfiles/rollup.config.js @@ -0,0 +1,17 @@ +// rollup.config.js +// https://github.com/rollup/rollup-plugin-commonjs +import commonjs from 'rollup-plugin-commonjs'; +import resolve from 'rollup-plugin-node-resolve'; + +export default [{ + input: 'src/recentfiles.js', + output: { + file: 'dist/recentfiles.js', + format: 'iife', + name: 'app' + }, + plugins: [ + resolve(), + commonjs() + ] +}]; \ No newline at end of file diff --git a/special/recentfiles/src/recentfiles.js b/special/recentfiles/src/recentfiles.js new file mode 100644 index 0000000..843d5df --- /dev/null +++ b/special/recentfiles/src/recentfiles.js @@ -0,0 +1,87 @@ +import { selectAll, select } from 'd3-selection'; + +/* + +Uses the Mediawiki API to display a list of recent images and a link to +the page where the image has been used/placed. + +Makes use of the following API calls: + +* https://www.mediawiki.org/wiki/API:Allimages +* https://www.mediawiki.org/wiki/API:Imageinfo +* https://www.mediawiki.org/wiki/API:Imageusage + +*/ +var NUM_FILES = 10; /* how many files to show */ + +async function get_json (url) { + var resp = await fetch(url); + return await resp.json(); +} + +function url_for_title (title) { + return "/w/"+encodeURI(title.replace(/ /g, "_")); +} + +async function load () { + var main = select("#content"), + baseurl = "/mw/api.php?action=query&list=allimages&ailimit=1&format=json&formatversion=2&aisort=timestamp&aidir=older&aiprop=timestamp|user|url|mime|size", + url = baseurl, + count = 0; + let debugloopcount = 0; + while (count < NUM_FILES) { + // console.log("starting loop", debugloopcount, "count", count, "url", url); + let resp = await fetch(url), + data = await resp.json(), + allimages = data.query.allimages, + useimages = []; + // console.log("got data", data.query.allimages.length); + // For each image: + // Use API:Imageinfo request/get the URL to a thumbnail image + // + for (var i=0, l=allimages.length; id.imageinfo.thumburl && (d.imageusage.length > 0)); + let items = main.selectAll("div.file") + .data(useimages, d=>d.title) + .enter() + .append("div") + .attr("class", "file") + .append("a") + .attr("href", d=>url_for_title(d.imageusage[d.imageusage.length-1].title)) + .attr("target", "wikiframe") + .append("img") + .attr('src', d=>d.imageinfo.thumburl); + + count += useimages.length; + if (data.continue) { + url = baseurl+"&aicontinue="+data.continue.aicontinue; + } + debugloopcount += 1; + // if (debugloopcount >= 5) break; + } + +} +document.addEventListener("DOMContentLoaded", load); + + diff --git a/src/legend.json b/src/legend.json index 2a1a59d..209fb17 100644 --- a/src/legend.json +++ b/src/legend.json @@ -11,7 +11,7 @@ }, { "key" : "Cours de soutien à l'orientation", - "symbol" : "symbols.svg#Cours_de_soutien_a_l'orientation", + "symbol" : "symbols.svg#Cours_de_soutien_a_l_orientation", "icon" : "img/Cours_de_soutien_a_lorientation.png" }, { @@ -34,6 +34,11 @@ "symbol" : "symbols.svg#Enseignants", "icon" : "img/Enseignants.png" }, + { + "key" : "Actualités", + "symbol" : "symbols.svg#Actualites", + "icon" : "img/Actualites.png" + }, { "key" : "default", "symbol" : "symbols.svg#Main", diff --git a/src/wikimap.js b/src/wikimap.js index 2a876e0..c6ff5b2 100644 --- a/src/wikimap.js +++ b/src/wikimap.js @@ -14,7 +14,8 @@ export class Map { constructor (opts) { var width = 600, height = 600; - + this.width = width; + this.height = height; this.zoom_level = opts.zoom || 1.5; this.apiurl = opts.apiurl; this.categorylabel = opts.categorylabel || "Category"; @@ -89,10 +90,31 @@ export class Map { }) cat.append("span").attr("class", "count").html(d => d.tcount) + var set_active_url_from_window = () => { + var title = this.wiki.unescapeTitle(window.location.hash.substring(1)), + page = this.wiki.get_page_by_title(title), + url = page.url(); + console.log("wikimap init", page.title, url); + this.set_active_url(url); + }; + this.loaded = true; - if (this.active_url) { + if (window.location.hash) { + set_active_url_from_window(); + } else if (this.active_url) { this.set_active_url(this.active_url); } + + window.addEventListener("hashchange", e => { + console.log("hashchange"); + set_active_url_from_window() + }); + /* + window.addEventListener("popstate", e => { + // console.log("popstate", e); + console.log("popstate: " + document.location + ", state: " + JSON.stringify(e.state)); + }) + */ } on (message, callback, context) { @@ -124,10 +146,20 @@ export class Map { .attr("class", "links"); this.nodesg = this.content.append("g") .attr("class", "nodes"); + + // DEBUGGING + this.svg.on("click", x => { + // console.log("svg click", event.target); + if (event.target == this.svg.node()) { + console.log("(debug) BACKGROUND CLICK", this.active_page.x, this.active_page.y); + this.centerOnItem(this.active_page); + } + }) } dragstarted (d) { - // if (!event.active) this.simulation.alphaTarget(0.3).restart(); + if (!event.active) this.simulation.alphaTarget(0.3).restart(); + // this.simulation.restart(); d.fx = d.x; d.fy = d.y; } @@ -138,7 +170,7 @@ export class Map { } dragended(d) { - // if (!event.active) this.simulation.alphaTarget(0); + if (!event.active) this.simulation.alphaTarget(0); d.fx = null; d.fy = null; } @@ -167,11 +199,16 @@ export class Map { return ret; } + // function called on iframe load async set_active_url (url) { - this.active_url = url; + console.log("wikimap.set_active_url", url); + this.active_url = url; if (this.loaded) { var page = this.wiki.get_page(this.active_url); if (page) { + // console.log("calling replaceState", page.title); + window.history.replaceState (null, null, "#"+this.wiki.escapeTitle(page.title)); + // window.location.hash = this.wiki.escapeTitle(page.title); this.set_active_page(page); } else { console.log("wikimap: set_active_url: NO PAGE FOR", url); @@ -223,9 +260,12 @@ export class Map { // console.log("page is already the active page", page, this.active_page); return; } - + // window.location.hash = this.wiki.escapeTitle(page.title); + // window.history.pushState ({pagetitle: page.title}, page.title, "/m/"+this.wiki.escapeTitle(page.title)); // cleanup old if (this.active_page) { + this.active_page.fx = undefined; + this.active_page.fy = undefined; this.active_page.active = false; // deactivate linked links/nodes this.linked_nodes_set_active(this.active_page, false); @@ -266,10 +306,10 @@ export class Map { // LOAD/ENSURE PAGE LINKS var links_out = await page.get_links(); links_out = links_out.filter(p => (!p.redirect && p.ns == 0)); - console.log("links_out", links_out); + // console.log("links_out", links_out); var links_in = await page.get_linkshere(); links_in = links_in.filter(p => (!p.redirect && p.ns == 0)); - console.log("links_in", links_in); + // console.log("links_in", links_in); links_out.forEach(p => { this.ensure_link(page, p).wiki = true; }); @@ -280,12 +320,19 @@ export class Map { } this.active_page = page; + // console.log("fixing active page", this.active_page); + if (this.active_page.x === undefined) { + this.active_page.x = this.width/2; + this.active_page.y = this.height/2; + } + this.active_page.fx = this.active_page.x; + this.active_page.fy = this.active_page.y; this.active_page.active = true; this.linked_nodes_set_active(this.active_page, true); - setTimeout(() => { - this.centerOnItem(page, 1000); - }, 1000); + //setTimeout(() => { + this.centerOnItem(page, 1000); + //}, 1000); this.events.emit("page", this.active_page); var data = {nodes: this.get_nodes(), links: values(this.all_links_by_key)}; @@ -342,7 +389,7 @@ export class Map { } update_graph (graph) { - console.log("UPDATE GRAPH", graph.nodes.length, graph.links.length); + // console.log("UPDATE GRAPH", graph.nodes.length, graph.links.length); var link = this.linksg.selectAll("line") .data(graph.links, d => { return this.link_key(d.source.title, d.target.title) }); var link_enter = link.enter() @@ -375,11 +422,15 @@ export class Map { }) .on("mouseover", function (d) { // console.log("mouseover", this); + // d.mouse = true; select(this).classed("mouse", true); + // that.update_nodes(); }) .on("mouseout", function (d) { // console.log("mouseout", this); + // d.mouse = false; select(this).classed("mouse", false); + // that.update_nodes(); }) .call(drag() .on("start", this.dragstarted.bind(this)) @@ -450,13 +501,14 @@ export class Map { update_nodes () { var nodes = this.nodesg.selectAll("g.page"); // console.log("update_nodes", nodes.size()); + nodes.classed("mouse", d=>d.mouse); nodes.classed("active", d=>d.active); nodes.classed("active2", d=>d.active2); nodes.classed("highlight", d=>d.highlight); nodes.sort((a, b) => { // console.log("sort", a, b); - var x = a.active ? 10 : (a.active2 ? 5 : 0), - y = b.active ? 10 : (b.active2 ? 5 : 0); + var x = a.mouse ? 10 : (a.active ? 8 : (a.active2 ? 5 : 0)), + y = b.mouse ? 10 : (b.active ? 8 : (b.active2 ? 5 : 0)); return x - y; }); var links = this.linksg.selectAll("line"); @@ -488,10 +540,13 @@ export class Map { centerOnItem(item, duration) { var bounds = this.svg.node().getBoundingClientRect(); var curt = zoomTransform(this.rect.node()); - console.log("centerOnItem", this.zoom_level, "item", item); + // console.log("centerOnItem", this.zoom_level, "item", item); var zoom_level = this.zoom_level ? this.zoom_level : curt.k; var ITEM_SIZE = 36; if (item && item.x !== undefined) { + this.zoom.translateTo(duration ? this.rect.transition().duration(duration) : this.rect, item.x, item.y); + // this.zoom.translateTo(this.rect, item.x, item.y); + /* var transform = function () { return zoomIdentity .translate(bounds.width / 2, bounds.height / 2) @@ -503,6 +558,7 @@ export class Map { } else { this.rect.call(this.zoom.transform, transform); } + */ } else { console.log("NO ITEM"); var transform = function () { diff --git a/style.css b/style.css index 75c7034..8de9d08 100644 --- a/style.css +++ b/style.css @@ -1,84 +1,38 @@ +:root { + --color-a: #A700FF; + --color-a-shadow: rgba(167, 0, 255, 0.44); + --color-b: #00AB6B; +} + /* F O N T E S */ @font-face { font-family: "Combined"; - src: url('/typo/Combined/combined.otf'); + src: url('/mw/skins/foreground/assets/fonts/combined.otf'); + font-style: normal; + font-weight: normal; +} +@font-face { + font-family: "Vega"; + src: url('/mw/skins/foreground/assets/fonts/Vega-regular.otf'); font-style: normal; font-weight: normal; } @font-face { - font-family: 'combinedregular'; - src: url('/typo/Combined/web/combined.eot'); - src: url('/typo/Combined/web/combined.eot?#iefix') format('embedded-opentype'), - url('/typo/Combined/web/combined.woff2') format('woff2'), - url('/typo/Combined/web/combined.woff') format('woff'), - url('/typo/Combined/web/combined.ttf') format('truetype'), - url('/typo/Combined/web/combined.svg#combinedregular') format('svg'); - font-weight: normal; - font-style: normal; + font-family:'FontAwesome'; + src:url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.eot?32400); + src:url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.eot?32400) format('embedded-opentype'),url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.woff2?db812) format('woff2'),url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.woff?a3572) format('woff'),url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.ttf?a3de2) format('truetype'),url(/mw/skins/foreground/assets/fonts/fontawesome-webfont.svg?f775f) format('svg'); + font-weight:normal; + font-style:normal } -@font-face { - font-family: 'wremena'; - src: url('typo/Wremema/webfont/wremena_bold-webfont.woff2') format('woff2'), - url('typo/Wremema/webfont/wremena_bold-webfont.woff') format('woff'), - url('typo/Wremema/webfont/wremena_bold-webfont.ttf') format('truetype'), - url('typo/Wremema/webfont/wremena_bold-webfont.svg#wremenabold') format('svg'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'wremena'; - src: url('typo/Wremema/webfont/wremena_regular-webfont.woff2') format('woff2'), - url('typo/Wremema/webfont/wremena_regular-webfont.woff') format('woff'), - url('typo/Wremema/webfont/wremena_regular-webfont.ttf') format('truetype'), - url('typo/Wremema/webfont/wremena_regular-webfont.svg#wremenaregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'wremena'; - src: url('typo/Wremema/webfont/wremena_light-webfont.woff2') format('woff2'), - url('typo/Wremema/webfont/wremena_light-webfont.woff') format('woff'), - url('typo/Wremema/webfont/wremena_light-webfont.ttf') format('truetype'), - url('typo/Wremema/webfont/wremena_light-webfont.svg#wremenalight') format('svg'); - font-weight: normal; - font-style: 200; -} - -@font-face { - font-family: 'Coupeur Monospace Bold'; - src: url('/typo/Coupeur/webfont/CoupeurMonospace-Bold.eot'); /* IE9 Compat Modes */ - src: url('/typo/Coupeur/webfont/CoupeurMonospace-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Bold.woff') format('woff'), /* Modern Browsers */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Bold.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Bold.svg#fcf36b8f65c0f0737cd36a2be6922659') format('svg'); /* Legacy iOS */ - - font-style: normal; - font-weight: 700; -} - -@font-face { - font-family: 'Coupeur Monospace Normal'; - src: url('/typo/Coupeur/webfont/CoupeurMonospace-Normal.eot'); /* IE9 Compat Modes */ - src: url('/typo/Coupeur/webfont/CoupeurMonospace-Normal.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Normal.woff') format('woff'), /* Modern Browsers */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Normal.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/typo/Coupeur/webfont/CoupeurMonospace-Normal.svg#4b219f539d302a6ffd9fd41e2da16172') format('svg'); /* Legacy iOS */ - - font-style: normal; - font-weight: 400; -} - - body { margin: 0; padding: 0; background: #f1f2f3; overflow: hidden; + font-family: Vega; } .links line { @@ -87,7 +41,7 @@ body { } .links line.active2 { - stroke: magenta; + stroke: var(--color-a); } .links line.history { @@ -95,11 +49,11 @@ body { } .active { - stroke: magenta; + stroke: var(--color-a); } .category circle { - fill: cyan; + fill: var(--color-b); } .web circle { @@ -133,7 +87,7 @@ svg g.page { svg g.page text { visibility: hidden; fill: #222; - font: 9px sans-serif; + font: 12px Vega; } svg g.active text { @@ -151,7 +105,7 @@ use { .highlight use { fill: #FFF; - stroke: cyan; + stroke: var(--color-b); } .active use { @@ -175,7 +129,7 @@ use { .active use { fill: #FFF; - stroke: magenta; + stroke: var(--color-a); } .active text { @@ -184,7 +138,7 @@ use { .active2 use { fill: #FFF; - stroke: magenta; + stroke: var(--color-a); } @@ -192,15 +146,14 @@ use { /* Categories */ #cats .body { - display: none; + /*display: none;*/ } #cats .placeholder { min-width: 100%; text-align: center; - color: gray; - font-weight: bold; - font-size: 12px; + position: relative; + top: 3px; } #cats.expanded .body { display: block; @@ -221,7 +174,7 @@ use { font-size: 12px; min-width: 16px; min-height: 16px; - box-shadow: 0 3px 3px 3px rgba(255, 0, 255, 0.44); + box-shadow: 0 3px 3px 3px var(--color-a-shadow); } #cats div.cat span.icon { @@ -233,13 +186,17 @@ use { background-repeat: no-repeat; margin-right: 4px; background-position: center center; + background-size: contain; +} +#cats div.cat:last-child span.icon { + background-size: 50%; } #cats div.cat span.count { display: none; padding: 0px 3px; background: #DDD; color: #444; - font-size: 10px; + font-size: 12px; margin-left: 4px; } #cats div.cat a { @@ -247,7 +204,7 @@ use { text-decoration: none; } #cats div.cat.highlight a { - color: cyan; + color: var(--color-b); } #cats hr { color: white; @@ -289,10 +246,6 @@ a.talk { } - - - - /* control positioning */ .leaflet-control { @@ -333,8 +286,11 @@ a.talk { .leaflet-bar a:hover { background-color: #f4f4f4; } -.leaflet-bar a:first-child { - } +.leaflet-bar a:first-child:before { + content: " "; + height: 2px; + display: block; + } .leaflet-bar a:last-child { border-bottom: none; } @@ -351,16 +307,38 @@ a.talk { position: absolute; left: 10px; top: 10px; - z-index: 10000; + z-index: 10; } +#specialclosediv { + position: absolute; + left: 10px; + top: 10px; + z-index: 10000; + box-shadow: 0 3px 3px 3px var(--color-a-shadow); + background-color: #ffffff; + display: none; +} +#specialclosediv a, #specialclosediv a:hover { + font-size: 24px; + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; +} + + .leaflet-control-zoom-in, .leaflet-control-zoom-out { font: Combined; - font-size: 24px; + font-size: 17px; line-height: 20px; text-indent: 1px; - box-shadow: 0 3px 3px 3px rgba(255, 0, 255, 0.44); + box-shadow: 0 3px 3px 3px var(--color-a-shadow); background-color: #ffffff; } @@ -373,21 +351,52 @@ a.talk { position: absolute; left: 0; top: 0; right: 0; - height: 160vh; + height: 150vh; } -#page { - position: absolute; - left: 0; top: 0; - height: 60vh; - width: 100vw; -} - -#wikiframediv { + #page { position: absolute; - left: 0; top: 60vh; - height: 100vh; - width: 100vw; -} + left: 0; top: 0; + height: 50vh; + width: 100vw; + } + + #wikiframediv { + position: absolute; + left: 0; top: 50vh; + height: 100vh; + width: 100vw; + } } + +#specialselectdiv { + position: absolute; + bottom: 10px; + right: 10px; + z-index: 10000; +} +#specialselectdiv select { + box-shadow: 0 3px 3px 3px var(--color-a-shadow); + background-color: white; + font-family: Vega; + font-size: 12px; + padding: 6px 2px; + text-transform: uppercase; +} + + +#specialiframediv { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: none; + z-index: 100; +} +#specialiframediv iframe { + width: 100%; + height: 100%; + border: none; +} diff --git a/symbols.svg b/symbols.svg index 71e3184..a2a52c0 100644 --- a/symbols.svg +++ b/symbols.svg @@ -14,7 +14,7 @@ viewBox="0 0 32.3875 32.356251" version="1.1" id="svg5507" - inkscape:version="0.92.1 r15371" + inkscape:version="0.92.4 5da689c313, 2019-01-14" sodipodi:docname="symbols.svg" enable-background="new"> + inkscape:window-width="1362" + inkscape:window-height="718" + inkscape:window-x="2" + inkscape:window-y="48" + inkscape:window-maximized="1" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-intersection-paths="true" + inkscape:object-paths="true" + inkscape:snap-midpoints="true" + inkscape:snap-smooth-nodes="true" + inkscape:snap-center="true" + inkscape:snap-object-midpoints="true" + showguides="true" + inkscape:guide-bbox="true"> + + + @@ -49,7 +73,7 @@ image/svg+xml - + @@ -58,13 +82,12 @@ id="layer2" inkscape:label="Main" style="display:none"> - + d="m 0.05427516,-1.0836044 c -0.3145139,0 -0.6143881,0.069209 -0.886913,0.18447807 -0.27252616,0.11526864 -0.51761266,0.2834672 -0.72372176,0.48957617 -0.2061091,0.2061091 -0.3743076,0.4511958 -0.4895767,0.7237215 -0.1152682,0.2725256 -0.1773827,0.5723994 -0.1773827,0.88691326 0,0.3145142 0.062114,0.6072926 0.1773827,0.8798184 0.1152691,0.2725256 0.2834676,0.5247077 0.4895767,0.7308165 0.2061091,0.2061091 0.4511956,0.3672123 0.72372176,0.4824809 0.2725249,0.1152689 0.5723991,0.1844781 0.886913,0.1844781 0.314514,0 0.614388,-0.069209 0.886913,-0.1844781 C 1.2137144,3.1789318 1.4588008,3.0178286 1.6649099,2.8117195 1.871019,2.6056107 2.0392175,2.3534286 2.1544867,2.080903 2.2697548,1.8083772 2.3318695,1.5155988 2.3318695,1.2010846 2.3318695,0.88657074 2.2697548,0.58669694 2.1544867,0.31417134 2.0392175,0.04164564 1.871019,-0.20344106 1.6649099,-0.40955016 1.4588008,-0.61565913 1.2137144,-0.78385769 0.94118816,-0.89912633 0.66866316,-1.014395 0.36878916,-1.0836044 0.05427516,-1.0836044 Z" + style="display:inline;fill-opacity:1;stroke-width:0.72655946;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99615389;marker-start:none" + inkscape:connector-curvature="0" + inkscape:label="#path6386-5-5" /> + transform="matrix(0.40423298,0,0,0.40423298,35.516699,1.0220982)"> @@ -91,10 +114,11 @@ inkscape:groupmode="layer" id="layer3" inkscape:label="Ateliers_pluridisciplinaires" - style="display:none;"> + style="display:none"> + transform="matrix(0.65256016,0,0,0.65256016,58.839197,-27.116613)" + id="Ateliers_pluridisciplinaires" + style=""> + id="path8174" + inkscape:connector-curvature="0" /> @@ -145,7 +169,7 @@ + transform="matrix(0.40361541,0,0,0.40361541,36.375644,35.301905)">