| @@ -31,66 +31,66 @@ h1{ | |||
| /* MOTS */ | |||
| /*// — Mot - Accronyme*/ | |||
| .acronym{ | |||
| span[data-type=acronym]{ | |||
| color: pink; | |||
| } | |||
| /*// — Mot - Etranger*/ | |||
| .foreign{ | |||
| span[data-type=foreign]{ | |||
| color: red; | |||
| } | |||
| /* NOMS */ | |||
| /*// — Nom - Auteur - Citation*/ | |||
| .author-quotation{ | |||
| span[data-type=author-quotation]{ | |||
| color : yellow; | |||
| } | |||
| /*// — Nom - Auteur - Œuvre*/ | |||
| .author-work{ | |||
| span[data-type=author-work]{ | |||
| color: orange; | |||
| } | |||
| /*// — Nom - Marque*/ | |||
| .brand{ | |||
| span[data-type=brand]{ | |||
| color: coral; | |||
| } | |||
| .work{ | |||
| span[data-type=work]{ | |||
| color: brown; | |||
| } | |||
| /*// — Nom - Propre*/ | |||
| .proper-noun{ | |||
| span[data-type=proper-noun]{ | |||
| color: darkorange; | |||
| } | |||
| /* NOMBRES */ | |||
| /*// — Numeral - Chapitre*/ | |||
| .chapter{ | |||
| span[data-type=chapter]{ | |||
| color: blue; | |||
| } | |||
| /*// — Numeral - Date*/ | |||
| .date{ | |||
| span[data-type=date]{ | |||
| color: aqua; | |||
| } | |||
| /*// — Numeral - Siecle*/ | |||
| .century{ | |||
| span[data-type=century]{ | |||
| color: cornflowerblue; | |||
| } | |||
| /*TYPO */ | |||
| /*// — Typo - Exposant*/ | |||
| .superscript{ | |||
| span[data-type=superscript]{ | |||
| color: green; | |||
| font-variant-position: super; | |||
| } | |||
| /*// — Typo - Indice*/ | |||
| .subscript{ | |||
| span[data-type=subscript]{ | |||
| color:chartreuse; | |||
| font-variant-position: sub; | |||
| } | |||
| .emphasis{ | |||
| span[data-type=emphasis]{ | |||
| font-style: italic; | |||
| } | |||
| @@ -105,5 +105,3 @@ h1{ | |||
| } | |||
| } | |||
| @@ -67,8 +67,8 @@ | |||
| <a v-for="style in opt.styles" v-bind:key="style.label"> | |||
| <button | |||
| class="menubar__button" | |||
| :class="{ 'is-active': isActive.customstyle({ type: style.class }) }" | |||
| @click="commands.customstyle({ type: style.class })"> | |||
| :class="{ 'is-active': isActive[style.type]() }" | |||
| @click="commands[style.type]({ type: style.type })"> | |||
| {{style.label | capitalize}} | |||
| </button> | |||
| </a> | |||
| @@ -188,7 +188,7 @@ | |||
| import AboutPane from './AboutPane'; | |||
| import Environment from "../environments/Environement" | |||
| import CustomStyle from "./extensions/CustomStyle" | |||
| import CustomStyle from "../extensions/CustomStyle" | |||
| export default { | |||
| @@ -201,6 +201,8 @@ | |||
| AboutPane | |||
| }, | |||
| data() { | |||
| return { | |||
| nbWords: 0, | |||
| nbParagraphs: 0, | |||
| @@ -213,29 +215,7 @@ | |||
| isPreviewMode: false, | |||
| environment: new Environment(), | |||
| keepInBounds: true, | |||
| editor: new Editor({ | |||
| extensions: [ | |||
| new Blockquote(), | |||
| new BulletList(), | |||
| new Heading({levels: [1, 2, 3]}), | |||
| new ListItem(), | |||
| new OrderedList(), | |||
| new BulletList(), | |||
| new Link(), | |||
| new CustomStyle() | |||
| ], | |||
| content: ``, | |||
| onInit: () => { | |||
| }, | |||
| onUpdate: () => { | |||
| Countable.count(document.getElementById('dedediteur'), counter => this.updateCountInfos(counter), {stripTags: false}); | |||
| } | |||
| }), | |||
| editor: null, | |||
| linkUrl: null, | |||
| linkMenuIsActive: false, | |||
| } | |||
| @@ -249,7 +229,34 @@ | |||
| fetch('/dedediteur/sample-mounier.html').then(function (response) { | |||
| return response.text(); | |||
| }).then(function (html) { | |||
| self.editor.setContent(html); | |||
| let extensions = [ | |||
| new Blockquote(), | |||
| new BulletList(), | |||
| new Heading({levels: [1, 2, 3]}), | |||
| new ListItem(), | |||
| new OrderedList(), | |||
| new BulletList(), | |||
| new Link()]; | |||
| for(let i = 0; i < self.environment.getCharacterOptions().length; i++){ | |||
| let styles = (self.environment.getCharacterOptions()[i]).styles | |||
| for(let j = 0; j < styles.length; j++){ | |||
| extensions.push(new CustomStyle(styles[j].type)); | |||
| } | |||
| } | |||
| self.editor = new Editor({ | |||
| extensions: extensions, | |||
| content: html, | |||
| onInit: () => { | |||
| }, | |||
| onUpdate: () => { | |||
| Countable.count(document.getElementById('dedediteur'), counter => self.updateCountInfos(counter), {stripTags: false}); | |||
| } | |||
| }), | |||
| self.$nextTick().then(() => { | |||
| Countable.count(document.getElementById('dedediteur'), counter => self.updateCountInfos(counter), {stripTags: false}) | |||
| }) | |||
| @@ -1,64 +0,0 @@ | |||
| import {Mark} from "tiptap"; | |||
| import {updateMark} from "tiptap-commands"; | |||
| // — Mot - Accronyme | |||
| // — Mot - Etranger | |||
| // — Nom - Auteur - Citation | |||
| // — Nom - Auteur - Œuvre | |||
| // — Nom - Marque | |||
| // — Nom - Propre | |||
| // — Numeral - Chapitre | |||
| // — Numeral - Date | |||
| // — Numeral - Siecle | |||
| // — Typo - Particulier | |||
| export default class CustomStyle extends Mark { | |||
| get name() { | |||
| return "customstyle"; | |||
| } | |||
| get defaultOptions() { | |||
| return { | |||
| types: [ | |||
| // "acronym", | |||
| // "foreign", | |||
| // "author-quotation", | |||
| // "author-work", | |||
| // "brand", | |||
| // "proper-noun", | |||
| // "century", | |||
| // "date", | |||
| // "chapter" | |||
| ] | |||
| }; | |||
| } | |||
| get schema() { | |||
| return { | |||
| attrs: { | |||
| type: { | |||
| default: "" | |||
| } | |||
| }, | |||
| parseDOM: [ | |||
| { | |||
| tag: "span.dede-style", | |||
| getAttrs(dom) { | |||
| return {type: dom.classList}; | |||
| } | |||
| } | |||
| ], | |||
| toDOM: mark => { | |||
| return ["span", {class: `dede-style ${mark.attrs.type}`}, 0]; | |||
| } | |||
| }; | |||
| } | |||
| commands({type}) { | |||
| return attrs => { return updateMark(type, attrs);} | |||
| } | |||
| } | |||
| @@ -25,37 +25,37 @@ export default class Environment { | |||
| styles: [ | |||
| { | |||
| "label": "étranger", | |||
| "class": "foreign" | |||
| "type": "foreign" | |||
| }, | |||
| { | |||
| "label": "accronyme", | |||
| "class": "acronym" | |||
| "type": "acronym" | |||
| } | |||
| ] | |||
| }, | |||
| // | |||
| { | |||
| label: "nom", | |||
| styles: [ | |||
| { | |||
| "label": "Auteur - Citation", | |||
| "class": "author-quotation" | |||
| "type": "author-quotation" | |||
| }, | |||
| { | |||
| "label": "Auteur - Œuvre", | |||
| "class": "author-work" | |||
| "type": "author-work" | |||
| }, | |||
| { | |||
| "label": "Marque", | |||
| "class": "brand" | |||
| "type": "brand" | |||
| }, | |||
| { | |||
| "label": "Nom œuvre", | |||
| "class": "work" | |||
| "type": "work" | |||
| }, | |||
| { | |||
| "label": "Nom propre", | |||
| "class": "proper-noun" | |||
| "type": "proper-noun" | |||
| } | |||
| ] | |||
| }, | |||
| @@ -65,15 +65,15 @@ export default class Environment { | |||
| styles: [ | |||
| { | |||
| "label": "siècle", | |||
| "class": "century" | |||
| "type": "century" | |||
| }, | |||
| { | |||
| "label": "date", | |||
| "class": "date" | |||
| "type": "date" | |||
| }, | |||
| { | |||
| "label": "chapitre", | |||
| "class": "chapter" | |||
| "type": "chapter" | |||
| } | |||
| ] | |||
| }, | |||
| @@ -82,15 +82,15 @@ export default class Environment { | |||
| styles: [ | |||
| { | |||
| "label": "italique", | |||
| "class": "emphasis" | |||
| "type": "emphasis" | |||
| }, | |||
| { | |||
| "label": "indice", | |||
| "class": "subscript" | |||
| "type": "subscript" | |||
| }, | |||
| { | |||
| "label": "exposant", | |||
| "class": "superscript" | |||
| "type": "superscript" | |||
| } | |||
| ] | |||
| @@ -0,0 +1,55 @@ | |||
| import {Mark} from "tiptap"; | |||
| import {toggleMark} from "tiptap-commands"; | |||
| // — Mot - Accronyme | |||
| // — Mot - Etranger | |||
| // — Nom - Auteur - Citation | |||
| // — Nom - Auteur - Œuvre | |||
| // — Nom - Marque | |||
| // — Nom - Propre | |||
| // — Numeral - Chapitre | |||
| // — Numeral - Date | |||
| // — Numeral - Siecle | |||
| // — Typo - Particulier | |||
| export default class CustomStyle extends Mark { | |||
| constructor(type){ | |||
| super(); | |||
| this.customType = type; | |||
| } | |||
| get name() { | |||
| return this.customType; | |||
| } | |||
| get schema() { | |||
| return { | |||
| attrs: { | |||
| type: { | |||
| default: "" | |||
| } | |||
| }, | |||
| parseDOM: [ | |||
| { | |||
| tag: "span[data-type="+this.customType+"]", | |||
| getAttrs(dom) { | |||
| return {type: dom.dataset.type}; | |||
| } | |||
| } | |||
| ], | |||
| toDOM: () => { | |||
| return ["span", {'data-type': this.customType}, 0]; | |||
| } | |||
| }; | |||
| } | |||
| commands({type}) { | |||
| return attrs => { return toggleMark(type, attrs);} | |||
| } | |||
| } | |||