Index.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <Layout>
  3. <!-- Titre, sous-titre -->
  4. <div class="blank-page no-folio fill-green" />
  5. <div class="v-center grow no-folio">
  6. <p class="intro">Créée en 2019, la collection « Les cahiers POPSU » de la Plateforme</br>
d’observation des projets et stratégies urbaines rassemble les connaissances produites au fil des travaux de recherche-action menés dans le cadre du programme POPSU Métropoles, pour en assurer la diffusion dans les milieux
  7. de la recherche et auprès des élus, des professionnels des territoires ainsi que
du grand public.</br></br>
  8. Ces travaux sont menés, dans chacune des métropoles partenaires, par un consortium de chercheurs, d’élus, de praticiens et de tiers parties-prenantes,
qui réalisent ensemble des recherches permettant d’éclairer les politiques publiques et les évolutions des métropoles. Il s’agit en particulier d’interroger les interdépendances entre celles-ci et d’autres territoires et d’étudier la manière dont elles engagent les transitions écologiques, sociales et démocratiques.
  9. </p>
  10. <!-- <h1 class="pre-title center" v-html="$static.metaData.titreDuProjet" /> -->
  11. <!-- <h2 class="pre-sub-title center" v-html="$static.metaData.sousTitre" /> -->
  12. </div>
  13. <div class="blank-page no-folio fill-motif-cross-left" />
  14. <!-- Auteurs, titre, sous-titre -->
  15. <div class="column no-folio">
  16. <div class="fill-motif-cross-right layer-1">
  17. </div>
  18. <div class="column layer-2">
  19. <div
  20. class="bold center"
  21. v-for="auteur in $static.metaData.auteurs"
  22. >
  23. {{auteur}}
  24. </div>
  25. <div class="v-center grow">
  26. <h1
  27. class="main-title center highlight-white"
  28. v-html="$static.metaData.titreDuProjet"
  29. />
  30. <h2
  31. class="main-pre-title center highlight-white"
  32. v-html="$static.metaData.sousTitre"
  33. />
  34. </div>
  35. <div class="center">
  36. <img src="/logo_popsu.png" alt="" style="width:2cm;">
  37. </div>
  38. </div>
  39. </div>
  40. <!-- Page de fond -->
  41. <div
  42. class="column image-cover image-bleed"
  43. v-bind:style='{ backgroundImage: "url(https://popsu.strapi.figli.io/" + $page.fonds.edges[1].node.url + ")", }'
  44. />
  45. <!-- Sommaire -->
  46. <div class="column no-folio">
  47. <div class="section-title">
  48. Sommaire
  49. </div>
  50. <div class="column justify-end table-of-content">
  51. <span
  52. v-for="edge in $page.chapters.edges.slice().reverse()"
  53. :key="'content'+edge.node.id"
  54. >
  55. <a :href="'#chapter'+edge.node.id">{{ edge.node.titre }}</a>
  56. </span>
  57. </div>
  58. </div>
  59. <!-- Page blanche -->
  60. <div class="blank-page no-folio" />
  61. <!-- Chapitres -->
  62. <div
  63. class="hyphen"
  64. v-for="(edge,index) in $page.chapters.edges.slice().reverse()"
  65. :key="'chapter'+edge.node.id"
  66. >
  67. <h2
  68. v-bind:data-rubrique="edge.node.rubrique"
  69. v-bind:id="'chapter'+edge.node.id" class="chapter-title"
  70. v-bind:class="{ canbreak: isNotFirst(index) }"
  71. >
  72. {{ edge.node.titre }}
  73. </h2>
  74. <VueMarkdown
  75. lang="fr"
  76. class="chapter-content justify"
  77. >{{ edge.node.contenu }}</VueMarkdown>
  78. </div>
  79. <!-- Notes de fin de document -->
  80. <h3 class="section-title canbreak">NOTES</h3>
  81. <ol v-for="note in footnote">
  82. <li>
  83. <VueMarkdown
  84. lang="fr"
  85. >{{note}}</VueMarkdown>
  86. </li>
  87. </ol>
  88. <!-- Pleine pages avant les sections -->
  89. <div
  90. class="column image-cover cover-left green image-bleed"
  91. v-bind:style='{ backgroundImage: "url(https://popsu.strapi.figli.io/" + $page.fonds.edges[0].node.url + ")", }'
  92. />
  93. <div
  94. class="column image-cover cover-right green image-bleed"
  95. v-bind:style='{ backgroundImage: "url(https://popsu.strapi.figli.io/" + $page.fonds.edges[0].node.url + ")", }'
  96. />
  97. <!-- Page blanche -->
  98. <div class="blank-page no-folio" />
  99. <!-- Sections -->
  100. <div
  101. class="hyphen"
  102. v-for="(edge,index) in $page.sections.edges.slice().reverse()"
  103. :key="'section'+edge.node.id"
  104. >
  105. <h3
  106. class="section-title"
  107. v-bind:class="{ canbreak: isNotFirst(index) }"
  108. >
  109. {{ edge.node.titre }}
  110. </h3>
  111. <VueMarkdown lang="fr" class="section-content justify">{{ edge.node.contenu }}</VueMarkdown>
  112. </div>
  113. <!-- Credits -->
  114. <div class="credits canbreak">
  115. <h3 class="section-title">Crédits</h3>
  116. <div
  117. class="credit"
  118. v-for="(edge,index) in $page.credits.edges.slice().reverse()"
  119. :key="'credits'+edge.node.id"
  120. >
  121. <h4>{{ edge.node.role }}</h4>
  122. <VueMarkdown lang="fr" class="section-content">{{ edge.node.nom }}</VueMarkdown>
  123. </div>
  124. </div>
  125. <div class="blank-page no-folio fill-green" />
  126. </Layout>
  127. </template>
  128. <page-query>
  129. {
  130. chapters : allchapitres{
  131. edges{node{id,titre,contenu,rubrique}}
  132. }
  133. sections : allsections{
  134. edges{node{id,titre,contenu}}
  135. }
  136. fonds : allfonds{
  137. edges{node{id,url}}
  138. }
  139. credits : allcredits{
  140. edges{node{id,nom,role}}
  141. }
  142. }
  143. </page-query>
  144. <static-query>
  145. query {
  146. metaData {
  147. titreDuProjet
  148. sousTitre
  149. auteurs
  150. }
  151. }
  152. </static-query>
  153. <script>
  154. import VueMarkdown from 'vue-markdown'
  155. import { Previewer } from 'pagedjs'
  156. export default {
  157. data:function(){
  158. return{
  159. footnote:[],
  160. }
  161. },
  162. components: {
  163. VueMarkdown
  164. },
  165. metaInfo: {
  166. title: 'HTML2print',
  167. },
  168. methods:{
  169. isNotFirst: function(index){
  170. if(index != 0) return true;
  171. return false;
  172. }
  173. },
  174. mounted() {
  175. Array.from(document.querySelectorAll("span[data-note]")).forEach(note=>{
  176. this.footnote.push(note.getAttribute("data-note"));
  177. });
  178. this.$nextTick(function () {
  179. // let hyphenopoly = document.createElement('script'),
  180. // hyph = document.createElement('script');
  181. // hyphenopoly.setAttribute('src', 'lib/Hyphenopoly-master/Hyphenopoly_Loader.js')
  182. // hyph.setAttribute('src', 'lib/hyph.js')
  183. // document.head.appendChild(hyph)
  184. // document.head.appendChild(hyphenopoly)
  185. // hyph.onload = ()=>{
  186. // Hyphenopoly.handleEvent = {
  187. // hyphenopolyEnd:(e)=>{
  188. let previewer = new Previewer();
  189. console.log('previewer', previewer);
  190. previewer.preview();
  191. document.documentElement.style.cssText = 'visibility:visible !important';
  192. // }
  193. // }
  194. // }
  195. })
  196. }
  197. }
  198. </script>