diff --git a/README.md b/README.md deleted file mode 100644 index 629e29c..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# ola5doc - diff --git a/content/.stfolder b/content/.stfolder new file mode 100644 index 0000000..e69de29 diff --git a/content/.stignore b/content/.stignore new file mode 100644 index 0000000..6c1d144 --- /dev/null +++ b/content/.stignore @@ -0,0 +1,4 @@ +.git +.gitignore +sys +.DS_Store diff --git a/content/.stversions/Elie_Partouche/.sync-conflict-20160719-120236~20170626-110948.DS_Store b/content/.stversions/Elie_Partouche/.sync-conflict-20160719-120236~20170626-110948.DS_Store new file mode 100644 index 0000000..5ee4ab8 Binary files /dev/null and b/content/.stversions/Elie_Partouche/.sync-conflict-20160719-120236~20170626-110948.DS_Store differ diff --git a/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/module_1~20170626-110948.pde b/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/module_1~20170626-110948.pde new file mode 100644 index 0000000..6507562 --- /dev/null +++ b/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/module_1~20170626-110948.pde @@ -0,0 +1,62 @@ +void module() { + + if ( hu >= 0) { + hu +=0.1; + } + if ( hu > 360) { + hu = 0; + } + if ( ha >= 0) { + hu +=0.1; + } + if ( ha > 10) { + hu = 0; + } + if ( hi >= 0) { + hi +=0.005; + } + if ( hi > 100) { + hi = 0; + } + fill(0); + stroke(200, 0, hi); + strokeWeight(50); + + beginShape(); + vertex(x1, y1, 0); + vertex(x2, y2, 0); + vertex(x3, y3, 0); + vertex(x4, y4, 0); + vertex(x1, y1, 0); + + float r2 = random(100); + if (r2 > 0 && r2 < 25 ) { + x1+=d; + x2+=d; + x3-=d; + x4-=d; + s-=0.0005; + } else if (r2 > 25 && r2 < 50 ) { + x1-=d; + x2-=d; + x3+=d; + x4+=d; + s+=0.0005; + } else if (r2 > 50 && r2 < 75) { + y1+=d; + y2+=d; + y3+=d; + y4+=d; + s-=0.0005; + } else { + y1-=d; + y2-=d; + y3-=d; + y4-=d; + s+=0.0005; + } + endShape(); + println(hu, ha, hi); + + +} \ No newline at end of file diff --git a/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/projet_2_1~20170626-110948.pde b/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/projet_2_1~20170626-110948.pde new file mode 100644 index 0000000..d71474f --- /dev/null +++ b/content/.stversions/Elie_Partouche/P5/projet_2_1 2/projet_2_1/projet_2_1~20170626-110948.pde @@ -0,0 +1,155 @@ +float x1 = 0; +float y1 = 0; +float x2 = 500; +float y2 = 0; +float x3 = 500; +float y3 = 500; +float x4 = 0; +float y4 = 500; +float z= 500; +float hu = random(360); +float hi = random(25, 75); +float ha = random(25, 75); +float d = 5; // déplacement des points du carré +float s = 0.2; + +void setup() { + colorMode(HSB, 360, 100, 100); + size(1665, 1665, P3D); + fill(0); + rect(0, 0, width, height); + smooth(); + noStroke(); +} + +void draw() { + pushMatrix(); + translate(width/(6*-2), (height/(6*-2))); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/6, (height/(6*-2))); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/6, height/6); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/(6*-2), height/6); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/6, (height/6)*2.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/6, (height/6)*4); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/6, (height/6)*5.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/(6*-2), (height/6)*2.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/(6*-2), (height/6)*4); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate(width/(6*-2), (height/6)*5.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*2.5, height/6); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*2.5, height/(6*-2)); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*4, height/(6*-2)); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*5.5, height/(6*-2)); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*2.5, (height/6)*2.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*2.5, (height/6)*4); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*2.5, (height/6)*5.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*4, (height/6)); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*4, (height/6)*2.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*4, (height/6)*4); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*4, (height/6)*5.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*5.5, (height/6)); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*5.5, (height/6)*2.5); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*5.5, (height/6)*4); + scale(s); + module(); + popMatrix(); + pushMatrix(); + translate((width/6)*5.5, (height/6)*5.5); + scale(s); + module(); + popMatrix(); + if (keyPressed) { + if (key == 's') + saveFrame("imag_####.png"); + } +} \ No newline at end of file diff --git a/content/.stversions/Elie_Partouche/readme~20170626-110948.textile b/content/.stversions/Elie_Partouche/readme~20170626-110948.textile new file mode 100644 index 0000000..3b8f0f9 --- /dev/null +++ b/content/.stversions/Elie_Partouche/readme~20170626-110948.textile @@ -0,0 +1,14 @@ +h1. coucoux + +h2. Elie Partouche + +Mon projet n'a pas commencé + +/!images/tutorial-getting-started-krita_part1_14_net.jpg! + + + +bc. !images/nomdemonimage.jpeg! + + diff --git a/content/.stversions/PierreYves/images/20170625_175613~20170625-183016.jpg b/content/.stversions/PierreYves/images/20170625_175613~20170625-183016.jpg new file mode 100644 index 0000000..d993a56 Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_175613~20170625-183016.jpg differ diff --git a/content/.stversions/PierreYves/images/20170625_175617~20170625-183415.jpg b/content/.stversions/PierreYves/images/20170625_175617~20170625-183415.jpg new file mode 100644 index 0000000..42cdfa5 Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_175617~20170625-183415.jpg differ diff --git a/content/.stversions/PierreYves/images/20170625_175807~20170625-183616.jpg b/content/.stversions/PierreYves/images/20170625_175807~20170625-183616.jpg new file mode 100644 index 0000000..0bcdb57 Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_175807~20170625-183616.jpg differ diff --git a/content/.stversions/PierreYves/images/20170625_175930~20170625-183535.jpg b/content/.stversions/PierreYves/images/20170625_175930~20170625-183535.jpg new file mode 100644 index 0000000..d41760a Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_175930~20170625-183535.jpg differ diff --git a/content/.stversions/PierreYves/images/20170625_180000~20170625-182915.jpg b/content/.stversions/PierreYves/images/20170625_180000~20170625-182915.jpg new file mode 100644 index 0000000..1d4c0a3 Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_180000~20170625-182915.jpg differ diff --git a/content/.stversions/PierreYves/images/20170625_180037~20170625-183016.jpg b/content/.stversions/PierreYves/images/20170625_180037~20170625-183016.jpg new file mode 100644 index 0000000..4c59ab0 Binary files /dev/null and b/content/.stversions/PierreYves/images/20170625_180037~20170625-183016.jpg differ diff --git a/content/.stversions/PierreYves/images/test01~20170625-183016.jpg b/content/.stversions/PierreYves/images/test01~20170625-183016.jpg new file mode 100644 index 0000000..6d6fae9 Binary files /dev/null and b/content/.stversions/PierreYves/images/test01~20170625-183016.jpg differ diff --git a/content/.stversions/PierreYves/readme~20170625-182819.textile b/content/.stversions/PierreYves/readme~20170625-182819.textile new file mode 100644 index 0000000..2d01988 --- /dev/null +++ b/content/.stversions/PierreYves/readme~20170625-182819.textile @@ -0,0 +1,11 @@ +h1. 1er projet + +h2. Pierre-Yves Fave + +Je vais faire quelques tests + +!images/test01.jpg! + +Bonjour + +bc. !images/nomdemonimage.jpeg! diff --git a/content/.stversions/alex/readme~20170625-190457.textile b/content/.stversions/alex/readme~20170625-190457.textile new file mode 100644 index 0000000..9929edf --- /dev/null +++ b/content/.stversions/alex/readme~20170625-190457.textile @@ -0,0 +1,5 @@ +h1. Le nom de mon projet + +h2. Alex + +Salut diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-06-22~20170625-183535.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-06-22~20170625-183535.png new file mode 100644 index 0000000..9044259 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-06-22~20170625-183535.png differ diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-09-43~20170625-183535.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-09-43~20170625-183535.png new file mode 100644 index 0000000..b43b0f0 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_12-09-43~20170625-183535.png differ diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-54-14~20170625-183535.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-54-14~20170625-183535.png new file mode 100644 index 0000000..9d07657 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-54-14~20170625-183535.png differ diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-56-01~20170625-183616.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-56-01~20170625-183616.png new file mode 100644 index 0000000..7a3fa15 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_16-56-01~20170625-183616.png differ diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_17-00-23~20170625-183616.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_17-00-23~20170625-183616.png new file mode 100644 index 0000000..7c8a561 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_17-00-23~20170625-183616.png differ diff --git a/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_18-26-59~20170625-191547.png b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_18-26-59~20170625-191547.png new file mode 100644 index 0000000..ca992d5 Binary files /dev/null and b/content/.stversions/gabriel/images/Capture d’écran_2017-06-25_18-26-59~20170625-191547.png differ diff --git a/content/.stversions/gabriel/images/Screenshot_2017-06-24_12-36-20~20170625-183029.png b/content/.stversions/gabriel/images/Screenshot_2017-06-24_12-36-20~20170625-183029.png new file mode 100644 index 0000000..9ec5c2a Binary files /dev/null and b/content/.stversions/gabriel/images/Screenshot_2017-06-24_12-36-20~20170625-183029.png differ diff --git a/content/.stversions/gabriel/images/Screenshot_2017-06-24_15-32-03~20170625-191543.png b/content/.stversions/gabriel/images/Screenshot_2017-06-24_15-32-03~20170625-191543.png new file mode 100644 index 0000000..93ec153 Binary files /dev/null and b/content/.stversions/gabriel/images/Screenshot_2017-06-24_15-32-03~20170625-191543.png differ diff --git a/content/.stversions/gabriel/images/pandocbconf~20170625-185105.png b/content/.stversions/gabriel/images/pandocbconf~20170625-185105.png new file mode 100644 index 0000000..7c8a561 Binary files /dev/null and b/content/.stversions/gabriel/images/pandocbconf~20170625-185105.png differ diff --git a/content/.stversions/gabriel/readme~20170625-183718.textile b/content/.stversions/gabriel/readme~20170625-183718.textile new file mode 100644 index 0000000..8cc30e6 --- /dev/null +++ b/content/.stversions/gabriel/readme~20170625-183718.textile @@ -0,0 +1,35 @@ +h1. README.intern + +h2. Gabriel Vaury + +Premier test d'un rapport de stage sous forme de "README" revisité et commenté + +h3. Matière première + +* *-3 flux de texte* : +** -_log_ initial sous forme de carnet de bord +** -_commentaires_ post-rédaction amenant un recul et un 'décryptage' des activités faites +** -_commandes_ apprises recontextualisées + +* *-2 flux d'images* : +** -Screenshots pris pendant le stage +** -Photos prises "en dehors" du stage + +h3. Objectif + +* -Explorer la perméabilité entre la hiérarchie du contenu et du code et comment celle-ci peut nourrir visuellement la mise en page du rapport +* -Mettre en relation les rapports fait _à chaud_ lors du stage et les prises de conscience _à froid_ +* -[Optionel] Réaliser une version print et une version web de ce rapport + +h3. To Do + +* -Intégrer un système de "CMS" pour appeler le contenu dans la structure HTML +* -Mise en forme gérée par Markdown ou autre (?) + + +Pour insérer des images, comme des shoot écrans de votre travail, commencez par les déposer dans le dossier images de votre dossier perso +puis ajouter cette ligne: + +bc. !images/nomdemonimage.jpeg! + +Toutes les images seront insérez automatiquement a la fin de votre description dans la documentation finale, sauf celle ajouté manuellement dans le texte. diff --git a/content/.stversions/gabriel/sources/fonts/PropCourierSans~20170626-103724.otf b/content/.stversions/gabriel/sources/fonts/PropCourierSans~20170626-103724.otf new file mode 100644 index 0000000..3c9d1be Binary files /dev/null and b/content/.stversions/gabriel/sources/fonts/PropCourierSans~20170626-103724.otf differ diff --git a/content/.stversions/gabriel/sources/fonts/terminal-grotesque_open~20170626-103724.otf b/content/.stversions/gabriel/sources/fonts/terminal-grotesque_open~20170626-103724.otf new file mode 100644 index 0000000..41e3de6 Binary files /dev/null and b/content/.stversions/gabriel/sources/fonts/terminal-grotesque_open~20170626-103724.otf differ diff --git a/content/.stversions/gabriel/sources/fonts/terminal-grotesque~20170626-103724.ttf b/content/.stversions/gabriel/sources/fonts/terminal-grotesque~20170626-103724.ttf new file mode 100644 index 0000000..3786710 Binary files /dev/null and b/content/.stversions/gabriel/sources/fonts/terminal-grotesque~20170626-103724.ttf differ diff --git a/content/.stversions/gabriel/sources/html2print~20170626-103724.css b/content/.stversions/gabriel/sources/html2print~20170626-103724.css new file mode 100644 index 0000000..611444f --- /dev/null +++ b/content/.stversions/gabriel/sources/html2print~20170626-103724.css @@ -0,0 +1,91 @@ +/** + * Defines and loads the rules that set the geometry of the page and its + * representation on screen. This is the core of html2print. + * + * Customize the variables to your needs. + */ + +:root { + /* the geometry of the page */ + --page-width: 148.5mm; + --page-height: 210mm; +} + + +/** + * DEFINITION OF THE PAPER SHEET + */ + +/** + * The @page CSS at-rule is used to define some properties of printed + * documents. We make it the size of the elements with the .page class and + * remove any margins. + */ +@page { + /* + * 1. we would have liked to use + * `size: var(--page-width) var(--page-height);` + * but the page it does not work with css variables it seems. + * 2. the 1pt addition is to fix a rounding bug that makes the content + * overflow + */ + margin: 0; + size: 148.5mm calc(210mm + 1pt); /* [1] [2] */ + /*Format cible ^ changer cette valeur et la variable pour changer de format*/ +} + + +/** + * CANVAS + */ + +@media all { + /* 1. allows for absolutely positioned elements as settings the position */ + /* property to relative as the side effect of making this elements */ + /* top-left corner the reference point */ + /* 2. defines the page size */ + body { margin: 0; } + + .page { + position: relative; /* [1] */ + + width: var(--page-width); /* [2] */ + height: var(--page-height); /* [2] */ + } + + /*ICI les styles du poster*/ + + + +} +/*Gère le rendu visuel de HTML2print*/ +@media screen { + /* 1. defines the background color of the workspace */ + /* 2. makes the page centered on screen */ + body { background-color: #f0f0f0; } + + #pages { + width: var(--page-width); /* [1] */ + height: var(--page-height); /* [1] */ + margin-right: auto; /* [2] */ + margin-left: auto; /* [2] */ + } + + .page { + margin-top: 1em; + margin-bottom: 1em; + + background-color: white; + } +} + +@media print { + /* 1. allows for background colors printing */ + html { width: var(--page-width); } + + body { + background-color: transparent; /* [1] */ + -webkit-print-color-adjust: exact; /* [1] */ + print-color-adjust: exact; /* [1] */ + } +} diff --git a/content/.stversions/gabriel/sources/log~20170626-103724.OSP b/content/.stversions/gabriel/sources/log~20170626-103724.OSP new file mode 100644 index 0000000..91b8447 --- /dev/null +++ b/content/.stversions/gabriel/sources/log~20170626-103724.OSP @@ -0,0 +1,150 @@ +############################################################################## + +Ce fichier écrit sur l'éditeur de texte GNU nano 2.5.3 retracera sous forme de log semaines après semaines; les rencontres, les découvertes et les expériences menées lors de ces 3 mois chez OSP. + +Le choix de ce programme pour le retranscrire a plusieurs intérêts; le premier étant de me familiariser avec le terminal et ses multiples fonctions telle que celle-ci, le deuxième étant de m'extraire de toute considérations esthétiques pour me focaliser sur le contenu de ce log et le troisième étant que malgrès l'aspect sommaire de cet éditeur il contient de puissants outils tels que le rechercher/remplacer, divers outils de justification, etc. De plus l'utilisation du terminal me permet de plus facilement aller rechercher les diverses commandes executées lors de mon stage pour ainsi les récuperer, les archiver et les commenter. + +- notes config: +..M-$ pl lignes +..M-J justif all + +############################################################################## + +## Semaine 1 du lun 03.04 au dim 09.04 + +### Jour 1 + +Découverte de mon nouveau lieu de travail:le 25e étage de la World Trade Center de ce qui semble être le quartier des affaires belge. Lieu intriguant qui semble n'avoir jamais vraiment vu passé ses heures de gloires, des photos aeriennes du quartier datant des années septantes (comme on dit ici) montrent des vues utopiques qui peuvent faire doucement sourir quand on regarde l'inventaire des activités actuelles répertoriées dans l'ascenceur.Les derniers étages sembles abandonés mais ils ont enfait occupés par une multitudes de studios de design (graphique ou autre) qui louent ces open space délaissé pour une bouché de pain. Le nom officiel de la pratique résume tout: bail précaire. Le studio est composé d'un noyeau d'actifs moteurs et d'autres personnes qui gravitent plus ou moins activement autours des projets/commandes.Stéphanie est la personne qui me gère pour l'instant et m'apprend les ficelles de leur système de travail, elle a laissé l'aspect design et création de côté pour se focaliser sur la gestion et l'optimisation des projets en cours. Mon arrivée tombe apparement parfaitement puisque fin avril OSP participera avec d'autres asbl(=loi 1901)/coopératives/studio au lancement d'un nouveau lieu culturel dans Bruxelles: le MAD (Mode Art and Design). La commande tombe effectivement bien puisque c'est pour moi l'occasion de me faire la main sur les logiciels et de renouer avec linux que j'avais laissé dans les cartons depuis quelques années. Au programme: + +- Réalisation de normographes en découpe laser pour certaines des fontes d'OSP +- Mise en page trilingue (FR/EN/NL) d'un de leurs manifeste "Relearn" +- Correction du spécimen du caractère Univers Else renommé Fluxisch Else pour des raisons de droit d'auteur +- Découpe de stickers au plotter avec les typos d'OSP reprennant leurs mottos +- Réaliser un plan de la table d'expo avec les objets à l'echelle + +Du dessin vectoriel, du dessin et de la génération de caractères, de la mise en page et l'utilisation de divers périphériques externes qui ont très souvents 10 voire 20 ans de plus que moi et bien évidemment le tout avec des logiciels libres qui ont des interfaces graphiques souvent peu ergonomiques et intuitives ou (ça arrive) pas du tout d'interface graphique. + +Le lundi est aussi le jour de l'OSP meet, on prend des notes sur un etherpad (prise de notes en ligne en direct) afin de constater de l'avancement des projets de chacun et de se répartir les tâches pour la semaine. A ce meet j'ai rencontré une partie de l'équipe: Hiej, Pierre (maître de stage de Daphné) et Sarah + +#### Commandes apprises ce jour ci: + +- `git init ` initie un dépot git +- `git add .` ajoute tt le dir dans lequel on est au dépot +- `git commit` ajoute un commentaire dans log +- `git remote -v` visualiser le dépot dans Git +- `git push` ajouter son travail au Git +- `git pull` mettre à jour son dépot +- `git log` visualiser le log du dépot +- `git clone` clone un dépot sur le disque local + +### Jour 2 + +Je continue d'avancer dans la liste des tâches qui m'ont été confiée hier. Alors qu'hier j'ai passé une journée entière à réaliser un normograph, aujourd'hui fort d'une maîtrise légèrement plus avancée de inkscape je me lance dans le plan à l'échelle de la table d'exposition et je reprend le normograph en fonction des retours de Stéphanie et des contraintes techniques exposées par FabLab dans lequel on va les réaliser + +#### Commandes apprises: + +- `sudo usermod -g lp ` permet de s'ajouter au groupe d'impression linux nécessaire pour pouvoir imprimer +- `xrandr` permet la gestion des affichages history permet d'acceder à l'historique des commandes du Term + +### Jour 3 + +Ce matin nous sommes allez chez Roland Deuriez, un imprimeur riso qui va nous réimprimer des exemplaires d'un des objets qu'OSP veut présenter au MAD:16 case stories. Cet ouvrage regroupe 16 problématiques de mise en page ou de création graphique qui n'ont pas encore de vrai outils numériques ou qui si ils existent sont difficilement accessibles ou ne répondent que partiellement au problèmes. On y parle de mise en page liquide, d'"artisanat numérique", de collisions de textes et autres. Cette matinée était pour moi le moment de renouer avec ma pratique de graveur/imprimeur à une échelle intermédiaire entre artisanal et numérique, entre petits tirages et tirages industriels. Plus tard j'aurais à plotter différentes couvertures pour ces fascicules. + +### Jour 4 + +Aujourd'hui réalisation des stickers en utilisant la CRICKX, un caractère crée par Pierre d'après un stock lettres autocollantes rachetés à Mme. Christelle Crickx héritière du magasin de son père qui était peintre en lettre. Même si au premier abord cette typo ne me disait rien, j'ai beaucoup aimé le process créatif qui visait sans prétention à immortaliser un travail typographique énorme. En effet madame Crickx découpait TOUTES ses lettres à la main d'après un gabarit en carton qu'elle avait crée. Le plus intéressant dans ce projet et la réflexion que ce projet ouvre sur le positionnement du typographe en tant que créateur et la mise en abîme crée par la création de Pierre. Dans le dossier relatif à ce caractère sur le site d'OSP on peut découvrir que les lettres de madames Crickx si elles paraissent maladroite pour un oeil de typographe sont issue d'un aller retour constant entre forme/fonction/usage. + +Le gabarit en carton porte la trace de toutes les modification apportées au caractère pour que son placement sur une vitrine soit simplifié, pour le découpage à la main soit optimisé, etc. On aboutit ainsi sur un caractère hybride: un italique redresssé dont les contreformes sont toutes ouvertes pour faciliter la découpe et où tout les accents et points sont attachés pour faciliter la pose par les clients néophites. Le travail de Pierre permet de voire qu'au dela d'une mise en forme qui parait maladroite et naïve les caractères de madame Crickx sont enfait formé par un réel souci de coller (pardonnez le jeu de mot) problèmes qu'induit l'usage de ceux-ci et de la clientèle à laquelle elle était confrontée. A l'époque du projet Pierre lui avait demandé de dessiner un bas de casse pour son caractère. + +Cela à donné naissance à la CRICKX Blobby qui témoigne de la totale non connaissance des "règles typographiques" et des logiques formelles qui peuvent construire un caractère. Le bas de casse finale à été redessiné par madame Crickx après quelques explications de Pierre sur les attendus. Le resultat final donne cette famille de caractère étrange et touchante (à mon sens) mais qui soulève des questions auquel tout bon designer (typographique ou autre) doit à mon sens se confronter dans sa vie. Le positionement vis à vis du rapport entre forme et fonction mais aussi notre capacité à sortir des carcans dans lesquels nous avons été formés et qui conditionnent notre façon de créer et de percevoir le beau. L'avantage de la lenteur du plotter c'est qu'on a le temps de réfléchir. + +### Jour 5 + +Ce matin avec Stéphanie nous aviens rendez-vous au MAD afin de régler quelques détails d'organisation pour l'évênement. J'y ai rencontré Annelys de Vet qui s'occupe de la scénographie de l'évènement. Après cela retour à l'atelier à pied, l'occasion pour Stéphanie de me parler un peu de Bruxelles, des endroits connus et moins connus, des bars et des musées. L'après midi sentait le week-end, Stéphanie partait en vacance en Suisse ce soir même et je m'apprête donc à me retrouver "seul" sur le projet MAD puisque en 1 semaine de temps je n'ai vu personne d'autre qu'elle et moi s'occuper de celui-ci. J'appréhende lundi mais j'ai confiance en cette organisation du dernier moment/toute épreuve. Cet après midi là j'ai commencé la mise en page du projet "Relearn" en commençant par les + +modifications de la version française pour me familiariser avec Scrius; le logiciel de PAO libre. Puis j'ai enchainé sur la version anglaise. Ce micro projet et très intéressant dans la mesure ou la cohabitation (approximative puisque je réalise trois livrets séparés) des trois langues me permet de prendre conscience des enjeux typographiques spécifiques à chaque langue, notamment vis à vis de l'encombrement qui n'est par exemple pas du tout le même entre le français et l'anglais mais aussi vis à vis de la micro typo puisque le texte malgré sa taille est bourré de références et de renvois de notes. + +## Semaine 2 du lun 10.04 au dim 16.04 + +### Jour 1 + +Aujourd'hui était le jour de mon second OSP meet, Stéphanie étant partie en vacance en vacance il a fallu que j'explique l'avancement du projet MAD au reste de l'équipe (le tout en anglais) afin que nous puissions nous redistribuer les tâches. Comme je le soupconnais, le reste de l'équipe n'était pas vraiment mobilisé sur ce projet et je m'en retrouve donc quasiment en charge après seulement une semaine dans l'équipe. C'est l'occasion pour moi de m'insérer dans un workflow professionel mais aussi de trouver mes marques et de faire valloir mon approche et mes pratiques sur une base qui tient plus de l'échange entre collègues que de l'apprentissage auprès du "maître". Cette journée (et je pense que la semaine sera du même acabit) à été riche de par l'immersion dans les process de création de l'équipe notament vis à vis de l'utilisation des divers outils numériques mis en place sur le serveur d'OSP comme leur Git ou leur cloud. Sarah travail avec un clavier dont la disposition des touches ne correspond pas à celle interprété par son ordinateur "j'ai changé de clavier pas mal de fois au début et j'ai préféré m'habituer à ne plus le regarder pour travailer, ça me permet de rester focalisée sur ce que je fais à l'écran". Gijs m'as quand à lui appris à utiliser des scripts pour faire une imposition en cahier puisqu'il n'y a pas moyen de le faire depuis Scribus le logiciel de mise en page libre sur lequel je travaile depuis le début de mon stage. + +#### Commandes apprise + +- `pdftops -paper match .pdf .ps` convertit un pdf en ps +- `psbook -s12 .ps .ps` fais une impo en cahiers pour 12 pages d'un ps +- `pdfbook --short-edge .pdf` fais une impo en cahiers avec reliure bord gauche + +### Jour 2 11.04 + +Aujourd'hui j'ai retrouvé Gijs, Sarah, Stéphanie et sa petite fille Elli (3 ans et demi) pour commencer à installer les premières productions au MAD, organiser la dispostion de la table et réfléchir à une potentielle mise en espace de ces éléments. En effet nous sommes les seuls à exposer des objets imprimés et sans une disposition particulière il serai fort probable que le public ne remarque pas notre travail parmis la foule d'objets qui vont garnir ces tables. C'est en plus l'occasioàn de promouvoir une autre initiative open source : Libre objet. Ce sont des meubles crée entre autre par Mathieu Gabiot et dont les plans sont tous accessibles sur gratuitement sur son site, leur conception est modulaire afin d'assurer la plus grande adaptabilité et compatibilité entre toutes les gammes d'objets crées. + +### Jour 3 12.40 + +Aujourd'hui je me suis retrouvé seul à l'atelier, les autres étant soit partis en vacances soit occupés dans d'autres studios, très probablement celui de Speculoos où ma camarade Daphné fait son stage. Etrange journée qui m'a donné le sentiment de faire partie prenante de l'équipe; j'ai mes clés, mes objectifs et je me familiarise avec le fait de travailler et d'échanger avec un groupe de travail en utilisant le panel d'outils mis à ma disposition. + +J'opère des mises à jour des objectifs sur le pad, je met à jour les dépôts Git avec mes modifications et réclame des feedbacks par mails afin de valider la finalisations des projets. à la fin de la journée je me sentais fière et léger; nouvelement armé pour la vie de travail colaboratifs à distance que je voulais construire. + +############################### RUPTURE TOTALE ################################### + +## Semaine 4 du 24.04 au 28.04 + +### Jour 1 24.04 + +Premier vrai OSP meet ce matin, également pour moi l'occasion de rencontrer Alexandre, un des membres pilier d'OSP. Nous faisons un debrief du MAD, quels en sont les retours du public? Notre travail était il valorisé par cette exposition? Les gens ont ils pris la peine de comprendre la démarche? Le bilan est mitigé, d'une part, comme dit précédement nous sommes les seuls à opérer dans le domaine du design graphique et le public étant confronté pour la majeur partie de l'exposition à des objets, ils n'osait pas venir manipuler nos ouvrages ou venir nous poser des questions. De plus la maigre partie des visiteurs qui l'ont fait étaient eux-même des designers graphiques ce qui nous confirme que notre pratique est encore trop hermétique. Impression confirmée par leurs questions, le plus souvent relatives aux logiciels qui démontrait une drôle de posture qui nous faisait sentir dans un zoo plus qu'un musée. "C'est bien qu'il y ai des gens comme vous pour faire ce genre de choses". Cependant j'ai quand même de mon coté profiter de l'événement pour montrer mon travail à mes amis de belgique et ouvrir l'esprit sur ce monde méconnu +qu'est le design open source (mais aussi la pratique dans son ensemble(?)). Le reste de la journée à été plutôt calme puisque le rush du MAD étant fini nous passons à d'autres projets et c'est donc pour moi le moments d'installer de nouveaux outils tels du l'ospkit: un browser modifié pour faire tourner leur software Html2Print que j'utiliserai pour la plupart des travaux d'édition avec eux et qui je pense sera aussi à l'origine de la mise en page finale de ce rapport. Cet outils leur permet de mettre en page et de créer des fichiers imprimables sur une base de html. L'un des intérs de cette pratique et bien entendu la cohabition et l'économie de travail lors d'une production commme "The riddle of the real city" sur laquelle travail en ce moment Gijs et qui comprend une version imprimée et une version ebook. D'autres nombreux avantages que je ne comprend pas encore sont listés sur leur site. + +### Jour 2 25.04 + +Aujourd'hui j'été sensé travailler seul sur le nettoyage des dépôts Git créés pour le MAD et créer des fichiers README pour ceux-ci afin de faciliter leur usage par un tier. Cependant Stéphanie m'a rejoin l'après midi afin de (m'aider à) résoude les conflits avec ma version de GNU/Linux afin de compiler le browser. Ce fut l'occasion pour moi de toucher du doigt l'une des pratiques fondamentales de l'approche Open Source: la documentation. Plus tard je compris d'ailleurs que c'était la fonction principale des fameux fichiers README. En effet au cours des recherches pour "compatibiliser" ma distribution avec leur outils, Stéphanie m'a expliqué que Sarah avait également eu ces problèmes mais qu'en les réglant ils n'avaient pas pensé à bien documenter la solution qu'ils avaient trouvé et que nous devions donc rechercher nous même les paquets manquants afin de finaliser la compilation. C'est donc la commande qui m'a sauvé la vie puisque me permettant de rechercher toute les commandes préallablement éxécutées et de mettre à jour le README de leur browser. Ce genre d'expériences sont devenues mon quotidien et son très gratifiantes puisque me font sentir un membre à part entière de l'équipe. En cela je reconnais une mentalité "d'artisan" comme je peux la retrouver dans mon enseignemnet typographique uù la part du "faire" et aussi importante que celle du "savoir" et qu'elle forme à devenir autonome dans son "hygiène" de travail. J'ai également appris à utiliser les les chats IRC afin de communiquer en instantané avec le reste de l'équipe et l'usage d'outils tels que "dpaste" afin de passer des portions de code pour aider au débuggage à distance. + +### Jour 2 26.04 + +Aujourd'hui j'ai commencé à travailler avec Alex sur la refonte du site internet du théatre de la Balsamine. C'est un théâtre qui travail depuis maintemant 3 ans avec OSP qui réalise leur identité visuelle. J'ai à charge de réaliser une page explicative pour les usagers du site, une sorte de méta-exercice puisque que pour cela il à fallu que moi même je comprenne comment marchait le site, quels étaient les outils mis en place et quels était la relation entre l'interface de l'utilisateur et ce qui apparaissait à l'écran. En effet, pour ce site OSP utilise GitLab comme serveur pour générer les pages du site en suivant une convention Markdown qui sera ensuite processée par un moteur en python appelé Pelican. Ce travail me permit également de mettre à l'épreuve mes toutes récentes compétences de documentation et de rentrer doucement dans le projet. + +### Jour 3 27.04 + +Second jour sur la page du manuel, je commence à comprendre les tenants et les aboutissants du projet qui se met en perspective de mon apprentissage du code depuis le début de l'année. Je commence également à discerner quels sont les choix d'ergonomie de travail des choix dûs aux supports de developpement. Leur serveur Git ayant quelques problèmes de cache depuis mon arrivée, je n'arrive toujours pas à "pusher" mes modifications, Alexandre m'a donc aujourd'hui appris à leur faire en local via SSH. Sont également revenus aujourd'hui les étudiants en anthropologie de l'ULB. Ce fût l'occasion de parler de nos pratiques personnelles et de constater des similitudes entre notre pratique et celle de permacultivateur. L'idée principale étant d'avoir une connaissance suffisament étendue de la chaîne de production (voire de devenir cette chaîne) afin de réduire au maximum une potentielle dépendance en cas de problèmes, mais aussi de pouvoir transmettre un savoir sans entraves et de la façon la plus perenne possible. Les étudiants ayant une connaissance très limitée de la programmation, Alex leur à fait un petit topo/démontration/explication du système linux et du potentiel du terminal. Celà me permis d'avoir un petit cour sur le terminal et de grapiller un script rigolo (vidéogrep) qui permet d'après un fichier vidéo et son fichier de sous-titres d'extraire toutes les séquences qui contiennent une "expression régulière" (regex) recherchée. + +## Semaine 5 du mar 02.05 au jeu 04.05(w-e de retour en france) + +### Jour 2 02.05 + +Aujourd'hui je démarre Médor tout seul, Alexandre est en retard sur le projet du site pour la Balsamine. Une journée assez molle puisque peu de travail pour moi. J'ai réalisé l'architecture des fichiers des articles afin qu'on puisse y acceder facilement depuis l'interface d'OSPKit et préparé le terrain à la mesure de ma conaissance de l'outils. Donc cela veut dire caler les premiers gabarits et gérer le nombre de pages en fonction des articles. L'intérêt de cet exercice à été pour moi d'avoir accès à tout l'envers du décors de l'équipe de Médor et aussi de me rendre compte des outils mis en place par OSP pour faciliter le dialogue de touts les interlocuteurs. Sinon depuis que Alex m'a parlé de vimtutor, je m'entraine et je pense bientot faire migrer ce log sur celui-ci. Afin de parfaire mon entrainement, je m'entraine de plus en plus à la tapuscription à l'aveugle. + +### Jour 3 03.05 + +Premier travail typographique, réalisation de kerning pour la typo de titrage de Médor, la Erbarre. Je m'étais déjà confronté à l'interface rebutante de FontForge lors de la réalisation des normographes. Cet exercice était pour moi l'occasion d'apprendre à programmer des kernings et plus globalment d'envisager une transition vers FontForge à l'avenir. + +### Jour 4 04.05 + +Aujourd'hui je suis seul à l'atelier, n'ayant pas de nouvelles j'en déduit qu'ils pensaient que je serai déjà partit au matin. Je décide donc de finir le travail qui m'a été confié et commence à couler le texte dans les rubriques que j'ai créé mardi. Je me familiarise doucement avec cet outils de mise en page qui met mes neuronnes à rude épreuve. L'un des avantages du HTML est que la structure du texte y est explicite puisqu'il est organisé avec des balises comme les header, div, p... Une telle structure de la matière textuelle force à une rigueur de travail qui si elle n'est pas un passage obligé dans des logiciels tel que InDesign (elle l'est implicitement) est un des fondements incontournables de leur système de travail. + +## Semaine 6 du 09.05 au 12.05 + +### Jour 1 09.05 + +Dure reprise après une week-end de 4 jours gracieusement offert par mes maîtres de stage. L'équipe de Médor rencontré auparavant dans un café dans une optique de planning est de nouveau réunie mais cette fois ci dans une optique de bouclage. Une journée fort complexe puisque les rouages de l'OSPKit me sont très loin d'étre connu et la moindre demande de la part du rédacteur en chef me prend 2h... Une expérience assez frustrante mais qui s'allègera au fil de la journée et je pense de la semaine. + +### Jour 2 10.05 + +Approfondissement de mon travail sur Médor, je suis en charge de couler le texte d'une des deux grandes enquêtes du journal. Pour l'instant me travail se limite au structurel, je m'assure que le texte se dispose bien dans les colones et fait des propositions de compositions avec les illustrations. En effet l'outils utilisé pour le mise en page du texte rend assez ardue et complexe la gestion des "petits conflits" typographiques tels que le gestion des césures ou des drapeaux. De plus j'étais encore un peu traumatisé de mon expérience de la veille et étais plutôt content de m'atteler à un travail qui ne nécéssitait pas une conaissance pousée du code et cela me permettait de familiariser avec la gestions des blocs de contenu, ce qui reste une base incontournable de tout projet de mise en page et de surcroit d'un journal. + +### Jour 3 11.05 + +Petit point avec l'équipe de pilotage du numéro, une partie de l'équipe de mise en page pense qu'on ne se met pas assez la pression et que ça risque de finir en nuit blanche. On me propose de changer de contenu, j'ai fini de couler le texte de l'article sur lequel je travaillais jusqu'ici, j'accepte. Je suis donc maintenant en charge de la mise en page de la partie portfolio de Médor + +### Jour 4 12.05 + +Fin de la premiere semaine de travail sur Médor, je suis assez fière de ma progression avec l'outils OSPkit + +## Semaine 7 15.05 au 19.05 + +### Jour 4 18.05 + +Deuxième grosse soirée sur Médor avec Antoine et cette fois ci Céline et Chloë. J'aime beaucoup ces moments + +### Jour 5 19.05 + +Soirée tentative de bouclage de Médor avec l'équipe composée de Alex, Antoine, Sarah, Ludi, Steph et moi pour la partie graphique, Céline, Chloë et Eddy pour la partie correction et contenu et Stéphane en tant que pilote punk du numéro. Les heures passent et les articles avancent mais vers 22h le constat tombe; nous n'aurons pas fini ce numéro avant le week-end. Il est l'heure de commamder une pizza et de mettre les bouchées doubles pour limiter les dêgats sur la vie sociale. Une fois la pizza arrivée nous nous permettons une pause, c'est égalememt l'occasion d'échanger ses appréhemsions/ressentis. Il en ressort que le principe du pilote punk, si il est interessant, doit être plus cadré et notament vis à vis de l'échéance donnée aux illustrateurs et aux journalistes, car effet étant en bas de la 'chaîne graphique' nous (et par extension la qualité de la mise en page) patissons du retard du contenu. Ce moment d'échange avec l'équipe me permet de comprendre ce genre de projet à échelle humaine et les implications dans le quotidien que cela nécéssite. La journée se terminera vers 1h du matin avec des bières et de la musique éléctronique. Au premier jour de travail sur ce journal j'avais mis deux jours sur un article sur lequel on avait du retravailler après pour finir à la fin de la semaine à pouvoir boucler deux article en seule journée (de 9h), fièr de mon progrès et de la solidification de savoir aquis jusqu'ici. diff --git a/content/.stversions/kenji/.sync-conflict-20160719-120236~20170626-110325.DS_Store b/content/.stversions/kenji/.sync-conflict-20160719-120236~20170626-110325.DS_Store new file mode 100644 index 0000000..5ee4ab8 Binary files /dev/null and b/content/.stversions/kenji/.sync-conflict-20160719-120236~20170626-110325.DS_Store differ diff --git a/content/.stversions/kenji/images/2~20170626-110325.png b/content/.stversions/kenji/images/2~20170626-110325.png new file mode 100644 index 0000000..ebe1159 Binary files /dev/null and b/content/.stversions/kenji/images/2~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/3~20170626-110325.png b/content/.stversions/kenji/images/3~20170626-110325.png new file mode 100644 index 0000000..01d2a2b Binary files /dev/null and b/content/.stversions/kenji/images/3~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/4~20170626-110325.png b/content/.stversions/kenji/images/4~20170626-110325.png new file mode 100644 index 0000000..845d826 Binary files /dev/null and b/content/.stversions/kenji/images/4~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/5~20170626-110325.png b/content/.stversions/kenji/images/5~20170626-110325.png new file mode 100644 index 0000000..eb0c489 Binary files /dev/null and b/content/.stversions/kenji/images/5~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/6~20170626-110325.png b/content/.stversions/kenji/images/6~20170626-110325.png new file mode 100644 index 0000000..7e434c7 Binary files /dev/null and b/content/.stversions/kenji/images/6~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/7~20170626-110325.png b/content/.stversions/kenji/images/7~20170626-110325.png new file mode 100644 index 0000000..b35117a Binary files /dev/null and b/content/.stversions/kenji/images/7~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/8~20170626-110325.png b/content/.stversions/kenji/images/8~20170626-110325.png new file mode 100644 index 0000000..be97ecd Binary files /dev/null and b/content/.stversions/kenji/images/8~20170626-110325.png differ diff --git a/content/.stversions/kenji/images/9~20170626-110325.png b/content/.stversions/kenji/images/9~20170626-110325.png new file mode 100644 index 0000000..ebe1159 Binary files /dev/null and b/content/.stversions/kenji/images/9~20170626-110325.png differ diff --git a/content/.stversions/timothee_goguely/sources/arena2print/content~20170625-184418.js b/content/.stversions/timothee_goguely/sources/arena2print/content~20170625-184418.js new file mode 100644 index 0000000..3fd08ac --- /dev/null +++ b/content/.stversions/timothee_goguely/sources/arena2print/content~20170625-184418.js @@ -0,0 +1,61 @@ +var pageUrl = window.location.href; +var username = $(".path__username > a").eq(0).text(); +var channelId = $(".channel > span").eq(0).attr("id").slice(16); +var channelName = $(".channel > span").eq(0).text(); + +// $.ajax({ +// //type: 'GET', +// url: 'https://api.are.na/v2/channels/' + channelId + '/contents', +// data: { get_param: 'value' }, +// dataType: 'json', +// success: function (data) { +// console.log(data.contents); +// // $.each(data, function(index, element) { +// // console.log(element.contents.title); +// // }); +// } +// }); + +var blocks = []; + +var firstPage = $('
').addClass("page").append("

Are.na /
" + username + " /
" + channelName + "

\n"); + +$.getJSON(chrome.extension.getURL('contents.json'), function(data) { + //console.log(data); + var channelContents = data.contents; + $.each(channelContents, function( index, block ) { + var datetime = new Date(block.created_at).toLocaleDateString(); + blocks[index] = "
\n" + + "
\n" + + "
\n" + + ( block.title == null ? "

"+ block.generated_title + "

\n" : "

" + block.title + "

\n" ) + + "

URLhttps://www.are.na/block/"+ block.id + "
\n" + + "User " + block.user.full_name + "
\n" + + "Date

\n" + + "
\n" + + ( block.content_html ? "
"+ block.content_html + "
\n" : "" ) + + ( block.image ? "
\n\n" + ( block.description_html ? "
" + block.description_html + ( block.source ? "Source: "+ block.source.url + "\n" : "" ) + ( block.attachment ? "PDF: "+ block.attachment.url + "\n" : "" ) + "
\n" : "") + "
\n" : "" ) + + "\n" + + "
\n" + + "
"; + }); +}); + +//console.log(blocks); + +$.get(chrome.extension.getURL('head.html'), function( head ) { + $( "head" ).html( head ); +}); + +$.get(chrome.extension.getURL('body.html'), function( pages ) { + $( "body" ).html( pages ); + $( "#pages" ).append(firstPage); + $.each(blocks, function( index, block ) { + $( "#pages" ).append(block); + }); +}); + + +// Print +//window.print(); + diff --git a/content/model/.sync-conflict-20160719-120236.DS_Store b/content/model/.sync-conflict-20160719-120236.DS_Store new file mode 100644 index 0000000..5ee4ab8 Binary files /dev/null and b/content/model/.sync-conflict-20160719-120236.DS_Store differ diff --git a/content/model/images/tutorial-getting-started-krita_part1_14_net.jpg b/content/model/images/tutorial-getting-started-krita_part1_14_net.jpg new file mode 100644 index 0000000..4ccab52 Binary files /dev/null and b/content/model/images/tutorial-getting-started-krita_part1_14_net.jpg differ diff --git a/content/model/images/tutorial-getting-started-krita_part3_03.jpg b/content/model/images/tutorial-getting-started-krita_part3_03.jpg new file mode 100644 index 0000000..53f3049 Binary files /dev/null and b/content/model/images/tutorial-getting-started-krita_part3_03.jpg differ diff --git a/content/model/readme.textile b/content/model/readme.textile new file mode 100644 index 0000000..ad24bbf --- /dev/null +++ b/content/model/readme.textile @@ -0,0 +1,14 @@ +h1. Le nom de mon projet + +h2. Monprenom Monnom + +à partir d'ici vous pouvez écrire le texte de description de votre projet + +!images/tutorial-getting-started-krita_part1_14_net.jpg! + +Pour insérer des images, comme des shoot écrans de votre travail, commencez par les déposer dans le dossier images de votre dossier perso +puis ajouter cette ligne: + +bc. !images/nomdemonimage.jpeg! + +Toutes les images seront insérez automatiquement a la fin de votre description dans la documentation finale, sauf celle ajouté manuellement dans le texte. diff --git a/output/.keepme b/output/.keepme new file mode 100644 index 0000000..e69de29 diff --git a/output/bower_components/jquery/.bower.json b/output/bower_components/jquery/.bower.json new file mode 100644 index 0000000..7370bc4 --- /dev/null +++ b/output/bower_components/jquery/.bower.json @@ -0,0 +1,26 @@ +{ + "name": "jquery", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "package.json" + ], + "keywords": [ + "jquery", + "javascript", + "browser", + "library" + ], + "homepage": "https://github.com/jquery/jquery-dist", + "version": "3.1.0", + "_release": "3.1.0", + "_resolution": { + "type": "version", + "tag": "3.1.0", + "commit": "6f02bc382c0529d3b4f68f6b2ad21876642dbbfe" + }, + "_source": "https://github.com/jquery/jquery-dist.git", + "_target": "^3.1.0", + "_originalSource": "jquery", + "_direct": true +} \ No newline at end of file diff --git a/output/bower_components/jquery/AUTHORS.txt b/output/bower_components/jquery/AUTHORS.txt new file mode 100644 index 0000000..0e22886 --- /dev/null +++ b/output/bower_components/jquery/AUTHORS.txt @@ -0,0 +1,295 @@ +Authors ordered by first contribution. + +John Resig +Gilles van den Hoven +Michael Geary +Stefan Petre +Yehuda Katz +Corey Jewett +Klaus Hartl +Franck Marcia +Jörn Zaefferer +Paul Bakaus +Brandon Aaron +Mike Alsup +Dave Methvin +Ed Engelhardt +Sean Catchpole +Paul Mclanahan +David Serduke +Richard D. Worth +Scott González +Ariel Flesler +Jon Evans +TJ Holowaychuk +Michael Bensoussan +Robert Katić +Louis-Rémi Babé +Earle Castledine +Damian Janowski +Rich Dougherty +Kim Dalsgaard +Andrea Giammarchi +Mark Gibson +Karl Swedberg +Justin Meyer +Ben Alman +James Padolsey +David Petersen +Batiste Bieler +Alexander Farkas +Rick Waldron +Filipe Fortes +Neeraj Singh +Paul Irish +Iraê Carvalho +Matt Curry +Michael Monteleone +Noah Sloan +Tom Viner +Douglas Neiner +Adam J. Sontag +Dave Reed +Ralph Whitbeck +Carl Fürstenberg +Jacob Wright +J. Ryan Stinnett +unknown +temp01 +Heungsub Lee +Colin Snover +Ryan W Tenney +Pinhook +Ron Otten +Jephte Clain +Anton Matzneller +Alex Sexton +Dan Heberden +Henri Wiechers +Russell Holbrook +Julian Aubourg +Gianni Alessandro Chiappetta +Scott Jehl +James Burke +Jonas Pfenniger +Xavi Ramirez +Jared Grippe +Sylvester Keil +Brandon Sterne +Mathias Bynens +Timmy Willison +Corey Frang +Digitalxero +Anton Kovalyov +David Murdoch +Josh Varner +Charles McNulty +Jordan Boesch +Jess Thrysoee +Michael Murray +Lee Carpenter +Alexis Abril +Rob Morgan +John Firebaugh +Sam Bisbee +Gilmore Davidson +Brian Brennan +Xavier Montillet +Daniel Pihlstrom +Sahab Yazdani +avaly +Scott Hughes +Mike Sherov +Greg Hazel +Schalk Neethling +Denis Knauf +Timo Tijhof +Steen Nielsen +Anton Ryzhov +Shi Chuan +Berker Peksag +Toby Brain +Matt Mueller +Justin +Daniel Herman +Oleg Gaidarenko +Richard Gibson +Rafaël Blais Masson +cmc3cn <59194618@qq.com> +Joe Presbrey +Sindre Sorhus +Arne de Bree +Vladislav Zarakovsky +Andrew E Monat +Oskari +Joao Henrique de Andrade Bruni +tsinha +Matt Farmer +Trey Hunner +Jason Moon +Jeffery To +Kris Borchers +Vladimir Zhuravlev +Jacob Thornton +Chad Killingsworth +Nowres Rafid +David Benjamin +Uri Gilad +Chris Faulkner +Elijah Manor +Daniel Chatfield +Nikita Govorov +Wesley Walser +Mike Pennisi +Markus Staab +Dave Riddle +Callum Macrae +Benjamin Truyman +James Huston +Erick Ruiz de Chávez +David Bonner +Akintayo Akinwunmi +MORGAN +Ismail Khair +Carl Danley +Mike Petrovich +Greg Lavallee +Daniel Gálvez +Sai Lung Wong +Tom H Fuertes +Roland Eckl +Jay Merrifield +Allen J Schmidt Jr +Jonathan Sampson +Marcel Greter +Matthias Jäggli +David Fox +Yiming He +Devin Cooper +Paul Ramos +Rod Vagg +Bennett Sorbo +Sebastian Burkhard +Zachary Adam Kaplan +nanto_vi +nanto +Danil Somsikov +Ryunosuke SATO +Jean Boussier +Adam Coulombe +Andrew Plummer +Mark Raddatz +Isaac Z. Schlueter +Karl Sieburg +Pascal Borreli +Nguyen Phuc Lam +Dmitry Gusev +Michał Gołębiowski +Li Xudong +Steven Benner +Tom H Fuertes +Renato Oliveira dos Santos +ros3cin +Jason Bedard +Kyle Robinson Young +Chris Talkington +Eddie Monge +Terry Jones +Jason Merino +Jeremy Dunck +Chris Price +Guy Bedford +Amey Sakhadeo +Mike Sidorov +Anthony Ryan +Dominik D. Geyer +George Kats +Lihan Li +Ronny Springer +Chris Antaki +Marian Sollmann +njhamann +Ilya Kantor +David Hong +John Paul +Jakob Stoeck +Christopher Jones +Forbes Lindesay +S. Andrew Sheppard +Leonardo Balter +Roman Reiß +Benjy Cui +Rodrigo Rosenfeld Rosas +John Hoven +Philip Jägenstedt +Christian Kosmowski +Liang Peng +TJ VanToll +Senya Pugach +Aurelio De Rosa +Nazar Mokrynskyi +Amit Merchant +Jason Bedard +Arthur Verschaeve +Dan Hart +Bin Xin +David Corbacho +Veaceslav Grimalschi +Daniel Husar +Frederic Hemberger +Ben Toews +Aditya Raghavan +Victor Homyakov +Shivaji Varma +Nicolas HENRY +Anne-Gaelle Colom +George Mauer +Leonardo Braga +Stephen Edgar +Thomas Tortorini +Winston Howes +Jon Hester +Alexander O'Mara +Bastian Buchholz +Arthur Stolyar +Calvin Metcalf +Mu Haibao +Richard McDaniel +Chris Rebert +Gabriel Schulhof +Gilad Peleg +Martin Naumann +Marek Lewandowski +Bruno Pérel +Reed Loden +Daniel Nill +Yongwoo Jeon +Sean Henderson +Richard Kraaijenhagen +Connor Atherton +Gary Ye +Christian Grete +Liza Ramo +Julian Alexander Murillo +Joelle Fleurantin +Jae Sung Park +Jun Sun +Josh Soref +Henry Wong +Jon Dufresne +Martijn W. van der Lee +Devin Wilson +Steve Mao +Zack Hall +Bernhard M. Wiedemann +Todor Prikumov +Jha Naman +William Robinet +Alexander Lisianoi +Vitaliy Terziev +Joe Trumbull +Alexander K +Damian Senn +Ralin Chimev +Felipe Sateler +Christophe Tafani-Dereeper diff --git a/output/bower_components/jquery/LICENSE.txt b/output/bower_components/jquery/LICENSE.txt new file mode 100644 index 0000000..5312a4c --- /dev/null +++ b/output/bower_components/jquery/LICENSE.txt @@ -0,0 +1,36 @@ +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/output/bower_components/jquery/README.md b/output/bower_components/jquery/README.md new file mode 100644 index 0000000..ba3174a --- /dev/null +++ b/output/bower_components/jquery/README.md @@ -0,0 +1,65 @@ +# jQuery + +> jQuery is a fast, small, and feature-rich JavaScript library. + +For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/). +For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery). + +## Including jQuery + +Below are some of the most common ways to include jQuery. + +### Browser + +#### Script tag + +```html + +``` + +#### Babel + +[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively. + +```js +import $ from "jquery"; +``` + +#### Browserify/Webpack + +There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this... + +```js +var $ = require("jquery"); +``` + +#### AMD (Asynchronous Module Definition) + +AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html). + +```js +define(["jquery"], function($) { + +}); +``` + +### Node + +To include jQuery in [Node](nodejs.org), first install with npm. + +```sh +npm install jquery +``` + +For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes. + +```js +require("jsdom").env("", function(err, window) { + if (err) { + console.error(err); + return; + } + + var $ = require("jquery")(window); +}); +``` diff --git a/output/bower_components/jquery/bower.json b/output/bower_components/jquery/bower.json new file mode 100644 index 0000000..95798d5 --- /dev/null +++ b/output/bower_components/jquery/bower.json @@ -0,0 +1,14 @@ +{ + "name": "jquery", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "package.json" + ], + "keywords": [ + "jquery", + "javascript", + "browser", + "library" + ] +} \ No newline at end of file diff --git a/output/bower_components/jquery/dist/core.js b/output/bower_components/jquery/dist/core.js new file mode 100644 index 0000000..c93c2d9 --- /dev/null +++ b/output/bower_components/jquery/dist/core.js @@ -0,0 +1,481 @@ +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + +define( [ + "./var/arr", + "./var/document", + "./var/getProto", + "./var/slice", + "./var/concat", + "./var/push", + "./var/indexOf", + "./var/class2type", + "./var/toString", + "./var/hasOwn", + "./var/fnToString", + "./var/ObjectFunctionString", + "./var/support", + "./core/DOMEval" +], function( arr, document, getProto, slice, concat, push, indexOf, + class2type, toString, hasOwn, fnToString, ObjectFunctionString, + support, DOMEval ) { + +"use strict"; + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} + +return jQuery; +} ); diff --git a/output/bower_components/jquery/dist/jquery.js b/output/bower_components/jquery/dist/jquery.js new file mode 100644 index 0000000..f2fc274 --- /dev/null +++ b/output/bower_components/jquery/dist/jquery.js @@ -0,0 +1,10074 @@ +/*eslint-disable no-unused-vars*/ +/*! + * jQuery JavaScript Library v3.1.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-07-07T21:44Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-