tiptapify 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +7 -1
  2. package/dist/tiptapify.css +1 -1
  3. package/dist/{tiptapify.es.js → tiptapify.mjs} +52867 -51790
  4. package/dist/tiptapify.umd.js +41 -43
  5. package/package.json +8 -8
  6. package/src/components/Footer.vue +5 -6
  7. package/src/components/MenuBubble.vue +61 -47
  8. package/src/components/MenuFloating.vue +38 -34
  9. package/src/components/Tiptapify.vue +139 -23
  10. package/src/components/Toolbar/Group.vue +43 -0
  11. package/src/components/Toolbar/GroupDropdown.vue +85 -0
  12. package/src/components/Toolbar/Index.vue +51 -79
  13. package/src/components/Toolbar/Toggle.vue +33 -0
  14. package/src/components/Toolbar/items/actions.ts +32 -0
  15. package/src/components/Toolbar/items/alignment.ts +60 -0
  16. package/src/components/Toolbar/items/format.ts +73 -0
  17. package/src/components/Toolbar/items/formatExtra.ts +73 -0
  18. package/src/components/Toolbar/items/list.ts +70 -0
  19. package/src/components/Toolbar/items/media.ts +202 -0
  20. package/src/components/Toolbar/items/misc.ts +59 -0
  21. package/src/components/Toolbar/items/style.ts +146 -0
  22. package/src/components/Toolbar/items.ts +73 -545
  23. package/src/components/editorExtensions.ts +6 -4
  24. package/src/components/index.ts +13 -0
  25. package/src/{components/extensions → extensions}/components/LinkDialog.vue +11 -8
  26. package/src/extensions/components/PreviewDialog.vue +45 -0
  27. package/src/{components/extensions/components/ShowSource.vue → extensions/components/ShowSourceDialog.vue} +11 -7
  28. package/src/extensions/components/TableBuilder.vue +138 -0
  29. package/src/extensions/preview.ts +53 -0
  30. package/src/{components/extensions → extensions}/view-source.ts +1 -3
  31. package/src/i18n/locales/de.json +64 -45
  32. package/src/i18n/locales/en.json +21 -2
  33. package/src/i18n/locales/es.json +27 -8
  34. package/src/i18n/locales/fr.json +26 -7
  35. package/src/i18n/locales/it.json +36 -17
  36. package/src/i18n/locales/pl.json +28 -9
  37. package/src/i18n/locales/ru.json +21 -2
  38. package/src/i18n/locales/ua.json +21 -2
  39. package/src/utils/helpers.ts +17 -0
  40. package/src/composable/useEditor.ts +0 -35
  41. /package/src/{components/extensions → extensions}/components/slashCommands/CommandsList.vue +0 -0
  42. /package/src/{components/extensions → extensions}/components/slashCommands/suggestion.ts +0 -0
  43. /package/src/{components/extensions → extensions}/slash-commands.ts +0 -0
@@ -0,0 +1,13 @@
1
+ import { Editor, useEditor } from "@tiptap/vue-3";
2
+ import { editorExtensions } from "@tiptapify/components/editorExtensions";
3
+ import { ShallowRef } from "vue";
4
+
5
+ export function getTiptapEditor (content: any, placeholder: string, slashCommands: boolean = true): ShallowRef<Editor | undefined> {
6
+ const extensions = editorExtensions(placeholder, slashCommands)
7
+ const editor: ShallowRef<Editor | undefined> = useEditor({
8
+ content,
9
+ extensions,
10
+ })
11
+
12
+ return editor
13
+ }
@@ -1,13 +1,17 @@
1
1
  <script setup lang="ts">
2
2
 
3
3
  import * as mdi from '@mdi/js'
4
- import { useEditor } from "@tiptapify/composable/useEditor";
4
+ import { Editor } from "@tiptap/vue-3";
5
5
 
6
6
  import { useI18n } from 'vue-i18n'
7
- import { computed, ref, watch } from 'vue'
7
+ import { computed, inject, Ref, ref, watch } from 'vue'
8
+
9
+ import helpers from '@tiptapify/utils/helpers'
8
10
 
9
11
  defineExpose({ open })
10
12
 
13
+ const { ucFirst } = helpers
14
+
11
15
  interface Props {
12
16
  value?: string
13
17
  target?: '_self' | '_blank'
@@ -20,8 +24,7 @@ const props = withDefaults(defineProps<Props>(), {
20
24
  destroy: undefined
21
25
  })
22
26
 
23
- const editor = useEditor().editor
24
- const editorInstance = editor.getInstance()
27
+ const editor = inject('tiptapifyEditor') as Ref<Editor>
25
28
 
26
29
  const { t } = useI18n()
27
30
 
@@ -45,7 +48,7 @@ function apply() {
45
48
  const { href, target } = attrs.value
46
49
 
47
50
  if (href) {
48
- editorInstance.value.chain().focus().extendMarkRange('link').setLink({ href, target }).run()
51
+ editor.value.chain().focus().extendMarkRange('link').setLink({ href, target }).run()
49
52
  }
50
53
  close()
51
54
  }
@@ -75,7 +78,7 @@ watch(dialog, val => {
75
78
  <VDialog v-model="dialog" max-width="400" absolute @click:outside="close">
76
79
  <VCard>
77
80
  <VToolbar class="px-6" density="compact">
78
- <span class="headline">{{ t('dialog.link.title') }}</span>
81
+ <span class="headline">{{ ucFirst(t('dialog.link.title')) }}</span>
79
82
 
80
83
  <VSpacer />
81
84
 
@@ -85,12 +88,12 @@ watch(dialog, val => {
85
88
  </VToolbar>
86
89
 
87
90
  <VCardText>
88
- <VTextField v-model="attrs.href" :label="t('dialog.link.placeholder')" autofocus />
91
+ <VTextField v-model="attrs.href" :label="ucFirst(t('dialog.link.placeholder'))" autofocus />
89
92
  </VCardText>
90
93
 
91
94
  <VCardActions>
92
95
  <VBtn :disabled="isDisabled" @click="apply">
93
- {{ t('dialog.apply') }}
96
+ {{ ucFirst(t('dialog.apply')) }}
94
97
  </VBtn>
95
98
  </VCardActions>
96
99
  </VCard>
@@ -0,0 +1,45 @@
1
+ <script setup lang="ts">
2
+ import { ref, onMounted, onUnmounted } from 'vue'
3
+ import { useI18n } from "vue-i18n";
4
+ import * as mdi from '@mdi/js'
5
+
6
+ const { t } = useI18n();
7
+
8
+ const content = ref()
9
+
10
+ const dialog = ref(false)
11
+
12
+ const showDialog = (event: CustomEvent) => {
13
+ console.log('preview event', event)
14
+ content.value = event.detail.html
15
+ dialog.value = true;
16
+ }
17
+
18
+ onMounted(() => {
19
+ window.addEventListener('tiptapify-show-preview', showDialog as EventListener)
20
+ })
21
+
22
+ onUnmounted(() => {
23
+ window.removeEventListener('tiptapify-show-preview', showDialog as EventListener)
24
+ })
25
+ </script>
26
+
27
+ <template>
28
+ <VDialog v-model="dialog" fullscreen>
29
+ <VCard>
30
+ <VToolbar>
31
+ <VBtn :icon="mdi.mdiClose" @click="dialog = false" />
32
+
33
+ <VToolbarTitle>Preview</VToolbarTitle>
34
+ </VToolbar>
35
+
36
+ <VCardItem>
37
+ <div class="tiptap" v-html="content"></div>
38
+ </VCardItem>
39
+ </VCard>
40
+ </VDialog>
41
+ </template>
42
+
43
+ <style lang="scss">
44
+
45
+ </style>
@@ -1,15 +1,19 @@
1
1
  <script setup lang="ts">
2
- import { useEditor } from "@tiptapify/composable/useEditor";
3
- import { ref, onMounted, onUnmounted, watch } from 'vue'
2
+ import { Editor } from "@tiptap/vue-3";
3
+ import { ref, onMounted, onUnmounted, watch, inject, Ref } from 'vue'
4
4
  import { useI18n } from "vue-i18n";
5
5
 
6
+ import helpers from "@tiptapify/utils/helpers";
7
+
6
8
  const props = defineProps({
7
9
  indent: { type: Number, default: 2 },
8
10
  })
9
11
 
12
+ const { ucFirst } = helpers;
13
+
10
14
  const { t } = useI18n();
11
15
 
12
- const editor = useEditor().editor.getInstance()
16
+ const editor = inject('tiptapifyEditor') as Ref<Editor>
13
17
 
14
18
  const dialog = ref(false)
15
19
  const formatted = ref(false)
@@ -76,14 +80,14 @@ watch(() => formatted.value, () => {
76
80
  <template>
77
81
  <VDialog v-model="dialog" max-width="1500">
78
82
  <VCard>
79
- <VCardTitle>{{ t('dialog.source.title') }}</VCardTitle>
83
+ <VCardTitle>{{ ucFirst(t('dialog.source.title')) }}</VCardTitle>
80
84
 
81
85
  <VCardText>
82
86
  <VContainer fluid class="pt-0 pl-0 pr-0">
83
87
  <VRow>
84
88
  <VCol>
85
89
  <VBtn v-model="formatted" :color="`${formatted ? 'primary' : ''}`" @click="formatted = !formatted">
86
- {{ t('dialog.source.prettify') }}
90
+ {{ ucFirst(t('dialog.source.prettify')) }}
87
91
  </VBtn>
88
92
  </VCol>
89
93
  </VRow>
@@ -101,10 +105,10 @@ watch(() => formatted.value, () => {
101
105
  <VCardActions>
102
106
  <VSpacer></VSpacer>
103
107
  <VBtn color="primary" @click="dialog = false">
104
- {{ t('dialog.close') }}
108
+ {{ ucFirst(t('dialog.close')) }}
105
109
  </VBtn>
106
110
  <VBtn color="primary" @click="saveChanges">
107
- {{ t('dialog.apply') }}
111
+ {{ ucFirst(t('dialog.apply')) }}
108
112
  </VBtn>
109
113
  </VCardActions>
110
114
  </VCard>
@@ -0,0 +1,138 @@
1
+ <script setup lang="ts">
2
+
3
+ import { Editor } from "@tiptap/vue-3";
4
+ import helpers from '@tiptapify/utils/helpers'
5
+ import { useI18n } from 'vue-i18n'
6
+
7
+ import { inject, Ref, ref } from 'vue'
8
+
9
+ const { t } = useI18n()
10
+
11
+ const { ucFirst } = helpers
12
+
13
+ defineExpose({ open })
14
+
15
+ defineProps({
16
+ show: { type: Boolean, default: false },
17
+ maxCols: { type: Number, default: 10 },
18
+ maxRows: { type: Number, default: 10 },
19
+ })
20
+
21
+ const emit = defineEmits(['close'])
22
+
23
+ const editor = inject('tiptapifyEditor') as Ref<Editor>
24
+
25
+ const withHeaderRow = ref(false)
26
+
27
+ const colHover = ref(0)
28
+ const rowHover = ref(0)
29
+
30
+ function hoverCell(elm: Element, row: number, col: number) {
31
+ rowHover.value = row
32
+ colHover.value = col
33
+ elm.classList.add('tiptapify-insert-table-col-hover')
34
+ }
35
+
36
+ function leaveCell(elm: Element) {
37
+ rowHover.value = 0
38
+ colHover.value = 0
39
+ elm.classList.remove('tiptapify-insert-table-col-hover')
40
+ }
41
+
42
+ function insertTable(rows: number, cols: number) {
43
+ editor.value.chain().focus().insertTable({ rows, cols, withHeaderRow: withHeaderRow.value }).run()
44
+
45
+ emit('close')
46
+ }
47
+
48
+ function printSelection() {
49
+ return rowHover.value && colHover.value ? `${rowHover.value} x ${colHover.value}` : ''
50
+ }
51
+ </script>
52
+
53
+ <template>
54
+ <VSheet class="pa-2">
55
+ <VCheckbox
56
+ v-model="withHeaderRow"
57
+ density="compact"
58
+ color="primary"
59
+ :label="ucFirst(t('format.tables.insertWithHeaderRow'))" hide-details
60
+ />
61
+
62
+ <div v-for="rowNum in maxRows" :key="`row-${rowNum}`" class="tiptapify-insert-table-row">
63
+ <div
64
+ v-for="colNum in maxCols"
65
+ class="tiptapify-insert-table-col"
66
+ :class="{'tiptapify-insert-table-col-hovered': rowNum <= rowHover && colNum <= colHover}"
67
+ @click="insertTable(rowNum, colNum)"
68
+ @mouseover="hoverCell($el.querySelector('.tiptapify-insert-table-col'), rowNum, colNum)"
69
+ @mouseout="leaveCell($el.querySelector('.tiptapify-insert-table-col'))"
70
+ >
71
+ <div class="tiptapify-insert-table-col-button"></div>
72
+ </div>
73
+ </div>
74
+
75
+ <div class="tiptapify-table-builder-info">
76
+ <span>
77
+ {{ ucFirst(t('format.tables.rows')) }}: {{ rowHover }}
78
+ {{ ucFirst(t('format.tables.cols')) }}: {{ colHover }}
79
+ </span>
80
+ <span>
81
+ {{ printSelection() }}
82
+ </span>
83
+ </div>
84
+ </VSheet>
85
+ </template>
86
+
87
+ <style lang="scss">
88
+ :root {
89
+ --tiptapify-table-builder-col-hover: #5454ff88;
90
+ }
91
+
92
+ $primaryColor: var(--v-theme-primary-color, var(--tiptapify-table-builder-col-hover));
93
+ $mutedColor: var(--v-theme-muted-color, #888888);
94
+
95
+ .tiptapify-insert-table-row {
96
+ display: flex;
97
+ justify-content: center;
98
+ }
99
+
100
+ .tiptapify-insert-table-col {
101
+ width: 30px;
102
+ height: 30px;
103
+ background: #fff;
104
+ padding: 2px 0;
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ }
109
+
110
+ .tiptapify-insert-table-col-button {
111
+ margin: 2px;
112
+ width: 100%;
113
+ height: 100%;
114
+ border: 1px solid #888;
115
+ background: #fff;
116
+ border-radius: 4px;
117
+ filter: drop-shadow(2px 2px 4px #88888888);
118
+ }
119
+
120
+ .tiptapify-insert-table-col-hovered {
121
+ cursor: pointer;
122
+ }
123
+
124
+ .tiptapify-insert-table-col-hovered > .tiptapify-insert-table-col-button, .tiptapify-insert-table-col-button:hover {
125
+ background: $primaryColor;
126
+ border: 1px solid $primaryColor;
127
+ filter: drop-shadow(2px 2px 4px $primaryColor);
128
+ cursor: pointer;
129
+ }
130
+
131
+ .tiptapify-table-builder-info {
132
+ display: flex;
133
+ justify-content: space-between;
134
+ margin-top: 10px;
135
+ font-size: 12px;
136
+ color: $mutedColor;
137
+ }
138
+ </style>
@@ -0,0 +1,53 @@
1
+ import { Extension } from '@tiptap/core'
2
+ import { Plugin, PluginKey } from '@tiptap/pm/state'
3
+
4
+ const name: string = 'preview'
5
+
6
+ export interface ViewSourceOptions {
7
+ HTMLAttributes: Record<string, any>
8
+ }
9
+
10
+ declare module '@tiptap/core' {
11
+ interface Commands<ReturnType> {
12
+ preview: {
13
+ /**
14
+ * Показать исходный HTML-код
15
+ */
16
+ showPreview: () => ReturnType
17
+ }
18
+ }
19
+ }
20
+
21
+ export const Preview = Extension.create<ViewSourceOptions>({
22
+ name,
23
+
24
+ addOptions() {
25
+ return {
26
+ HTMLAttributes: {},
27
+ }
28
+ },
29
+
30
+ addCommands() {
31
+ return {
32
+ showPreview: () => ({ editor }) => {
33
+ const event = new CustomEvent('tiptapify-show-preview', {
34
+ detail: {
35
+ html: editor.getHTML()
36
+ }
37
+ })
38
+
39
+ window.dispatchEvent(event)
40
+
41
+ return true
42
+ },
43
+ }
44
+ },
45
+
46
+ addProseMirrorPlugins() {
47
+ return [
48
+ new Plugin({
49
+ key: new PluginKey(name),
50
+ }),
51
+ ]
52
+ },
53
+ })
@@ -30,9 +30,7 @@ export const ViewSource = Extension.create<ViewSourceOptions>({
30
30
  showSource: () => ({ editor }) => {
31
31
  const event = new CustomEvent('tiptapify-show-source', {
32
32
  detail: {
33
- // html: editor.getHTML()
34
- html: editor.getHTML({ blockSeparator: '\n\n' })
35
- // html: editor.getText({ blockSeparator: '\n\n' })
33
+ html: editor.getHTML()
36
34
  }
37
35
  })
38
36
 
@@ -1,67 +1,86 @@
1
1
  {
2
2
  "style": {
3
- "paragraph": "Absatz",
4
- "heading": "Überschrift",
3
+ "paragraph": "absatz",
4
+ "heading": "überschrift",
5
5
  "headings": {
6
- "h1": "Überschrift Ebene 1",
7
- "h2": "Überschrift Ebene 2",
8
- "h3": "Überschrift Ebene 3",
9
- "h4": "Überschrift Ebene 4",
10
- "h5": "Überschrift Ebene 5",
11
- "h6": "Überschrift Ebene 6"
6
+ "h1": "überschrift ebene 1",
7
+ "h2": "überschrift ebene 2",
8
+ "h3": "überschrift ebene 3",
9
+ "h4": "überschrift ebene 4",
10
+ "h5": "überschrift ebene 5",
11
+ "h6": "überschrift ebene 6"
12
12
  },
13
- "fontFamily": "Schriftart",
14
- "fontSize": "Schriftgröße",
15
- "lineHeight": "Zeilenhöhe"
13
+ "fontFamily": "schriftart",
14
+ "fontSize": "schriftgröße",
15
+ "lineHeight": "zeilenhöhe"
16
16
  },
17
17
  "format": {
18
- "bold": "Fett",
19
- "italic": "Kursiv",
20
- "strike": "Durchgestrichen",
21
- "underline": "Unterstrichen",
22
- "sup": "Hochgestellt",
23
- "sub": "Tiefgestellt",
24
- "break": "Zeilenumbruch",
25
- "highlight": "Hervorheben",
26
- "line": "Horizontale Linie",
27
- "blockquote": "Zitat",
28
- "code": "Code",
29
- "codeblock": "Codeblock",
30
- "link": "Externer Link",
31
- "formatClear": "Formatierung löschen"
18
+ "bold": "fett",
19
+ "italic": "kursiv",
20
+ "strike": "durchgestrichen",
21
+ "underline": "unterstrichen",
22
+ "sup": "hochgestellt",
23
+ "sub": "tiefgestellt",
24
+ "break": "zeilenumbruch",
25
+ "highlight": "hervorheben",
26
+ "line": "horizontale linie",
27
+ "blockquote": "zitat",
28
+ "code": "code",
29
+ "codeblock": "codeblock",
30
+ "link": "externer link",
31
+ "formatClear": "formatierung löschen",
32
+ "tables": {
33
+ "table": "tabelle",
34
+ "insertTable": "tabelle einfügen",
35
+ "deleteTable": "tabelle löschen",
36
+ "insertWithHeaderRow": "tabelle mit kopfzeile einfügen",
37
+ "rows": "zeilen",
38
+ "row": "zeile",
39
+ "insertRowBefore": "zeile oberhalb einfügen",
40
+ "insertRowAfter": "zeile unterhalb einfügen",
41
+ "deleteRow": "zeile löschen",
42
+ "cols": "spalten",
43
+ "col": "spalte",
44
+ "insertColBefore": "spalte links einfügen",
45
+ "insertColAfter": "spalte rechts einfügen",
46
+ "deleteCol": "spalte löschen",
47
+ "mergeCells": "zellen verbinden",
48
+ "splitCell": "zelle teilen"
49
+ }
32
50
  },
33
51
  "action": {
34
- "undo": "Rückgängig",
35
- "redo": "Wiederherstellen"
52
+ "undo": "rückgängig",
53
+ "redo": "wiederherstellen"
36
54
  },
37
- "alignment": "Ausrichtung",
55
+ "alignment": "ausrichtung",
38
56
  "alignments": {
39
- "left": "Linksbündig",
40
- "center": "Zentriert",
41
- "right": "Rechtsbündig",
42
- "justify": "Blocksatz"
57
+ "left": "linksbündig",
58
+ "center": "zentriert",
59
+ "right": "rechtsbündig",
60
+ "justify": "blocksatz"
43
61
  },
44
- "list": "Liste",
62
+ "list": "liste",
45
63
  "lists": {
46
- "bullet": "Aufzählungsliste",
47
- "numbered": "Nummerierte Liste",
48
- "task": "Aufgabenliste",
49
- "indent": "Einzug vergrößern",
50
- "outdent": "Einzug verkleinern"
64
+ "bullet": "aufzählungsliste",
65
+ "numbered": "nummerierte liste",
66
+ "task": "aufgabenliste",
67
+ "indent": "einzug vergrößern",
68
+ "outdent": "einzug verkleinern"
51
69
  },
52
70
  "dialog": {
53
- "close": "Schließen",
54
- "apply": "Anwenden",
71
+ "close": "schließen",
72
+ "apply": "anwenden",
55
73
  "link": {
56
- "title": "Link hinzufügen/bearbeiten",
57
- "placeholder": "Linkadresse"
74
+ "title": "link hinzufügen/bearbeiten",
75
+ "placeholder": "linkadresse"
58
76
  },
59
77
  "source": {
60
- "title": "Quellcode anzeigen",
61
- "prettify": "prettify"
78
+ "title": "quellcode anzeigen",
79
+ "prettify": "formatieren"
62
80
  }
63
81
  },
64
82
  "misc": {
65
- "source": "Quellcode anzeigen"
83
+ "source": "quellcode anzeigen",
84
+ "preview": "vorschau"
66
85
  }
67
86
  }
@@ -28,7 +28,25 @@
28
28
  "code": "code",
29
29
  "codeblock": "code block",
30
30
  "link": "external link",
31
- "formatClear": "format clear"
31
+ "formatClear": "format clear",
32
+ "tables": {
33
+ "table": "table",
34
+ "insertTable": "insert table",
35
+ "deleteTable": "delete table",
36
+ "insertWithHeaderRow": "insert table with header row",
37
+ "rows": "rows",
38
+ "row": "row",
39
+ "insertRowBefore": "insert row before",
40
+ "insertRowAfter": "insert row after",
41
+ "deleteRow": "delete row",
42
+ "cols": "columns",
43
+ "col": "column",
44
+ "insertColBefore": "insert column before",
45
+ "insertColAfter": "insert column after",
46
+ "deleteCol": "delete column",
47
+ "mergeCells": "merge cells",
48
+ "splitCell": "split cell"
49
+ }
32
50
  },
33
51
  "action": {
34
52
  "undo": "undo",
@@ -62,6 +80,7 @@
62
80
  }
63
81
  },
64
82
  "misc": {
65
- "source": "view source code"
83
+ "source": "view source code",
84
+ "preview": "preview"
66
85
  }
67
86
  }
@@ -22,13 +22,31 @@
22
22
  "sup": "superíndice",
23
23
  "sub": "subíndice",
24
24
  "break": "salto de línea",
25
- "highlight": "resaltado",
25
+ "highlight": "resaltar",
26
26
  "line": "línea horizontal",
27
27
  "blockquote": "cita",
28
28
  "code": "código",
29
29
  "codeblock": "bloque de código",
30
30
  "link": "enlace externo",
31
- "formatClear": "limpiar formato"
31
+ "formatClear": "borrar formato",
32
+ "tables": {
33
+ "table": "tabla",
34
+ "insertTable": "insertar tabla",
35
+ "deleteTable": "eliminar tabla",
36
+ "insertWithHeaderRow": "insertar tabla con fila de encabezado",
37
+ "rows": "filas",
38
+ "row": "fila",
39
+ "insertRowBefore": "insertar fila antes",
40
+ "insertRowAfter": "insertar fila después",
41
+ "deleteRow": "eliminar fila",
42
+ "cols": "columnas",
43
+ "col": "columna",
44
+ "insertColBefore": "insertar columna antes",
45
+ "insertColAfter": "insertar columna después",
46
+ "deleteCol": "eliminar columna",
47
+ "mergeCells": "combinar celdas",
48
+ "splitCell": "dividir celda"
49
+ }
32
50
  },
33
51
  "action": {
34
52
  "undo": "deshacer",
@@ -43,25 +61,26 @@
43
61
  },
44
62
  "list": "lista",
45
63
  "lists": {
46
- "bullet": "lista con viñetas",
64
+ "bullet": "lista sin orden",
47
65
  "numbered": "lista numerada",
48
66
  "task": "lista de tareas",
49
- "indent": "aumentar sangría",
50
- "outdent": "disminuir sangría"
67
+ "indent": "sangría de elemento",
68
+ "outdent": "reducir sangría"
51
69
  },
52
70
  "dialog": {
53
71
  "close": "cerrar",
54
72
  "apply": "aplicar",
55
73
  "link": {
56
- "title": "añadir/editar enlace",
74
+ "title": "agregar/editar enlace",
57
75
  "placeholder": "dirección del enlace"
58
76
  },
59
77
  "source": {
60
78
  "title": "ver código fuente",
61
- "prettify": "prettify"
79
+ "prettify": "embellecer"
62
80
  }
63
81
  },
64
82
  "misc": {
65
- "source": "ver código fuente"
83
+ "source": "ver código fuente",
84
+ "preview": "vista previa"
66
85
  }
67
86
  }
@@ -22,13 +22,31 @@
22
22
  "sup": "exposant",
23
23
  "sub": "indice",
24
24
  "break": "saut de ligne",
25
- "highlight": "surbrillance",
25
+ "highlight": "surligner",
26
26
  "line": "ligne horizontale",
27
27
  "blockquote": "citation",
28
28
  "code": "code",
29
29
  "codeblock": "bloc de code",
30
30
  "link": "lien externe",
31
- "formatClear": "effacer le formatage"
31
+ "formatClear": "effacer le format",
32
+ "tables": {
33
+ "table": "tableau",
34
+ "insertTable": "insérer un tableau",
35
+ "deleteTable": "supprimer le tableau",
36
+ "insertWithHeaderRow": "insérer un tableau avec ligne d'en-tête",
37
+ "rows": "lignes",
38
+ "row": "ligne",
39
+ "insertRowBefore": "insérer une ligne avant",
40
+ "insertRowAfter": "insérer une ligne après",
41
+ "deleteRow": "supprimer la ligne",
42
+ "cols": "colonnes",
43
+ "col": "colonne",
44
+ "insertColBefore": "insérer une colonne avant",
45
+ "insertColAfter": "insérer une colonne après",
46
+ "deleteCol": "supprimer la colonne",
47
+ "mergeCells": "fusionner les cellules",
48
+ "splitCell": "diviser la cellule"
49
+ }
32
50
  },
33
51
  "action": {
34
52
  "undo": "annuler",
@@ -46,22 +64,23 @@
46
64
  "bullet": "liste à puces",
47
65
  "numbered": "liste numérotée",
48
66
  "task": "liste de tâches",
49
- "indent": "augmenter l'indentation",
50
- "outdent": "diminuer l'indentation"
67
+ "indent": "retrait d'élément",
68
+ "outdent": "réduire le retrait"
51
69
  },
52
70
  "dialog": {
53
71
  "close": "fermer",
54
72
  "apply": "appliquer",
55
73
  "link": {
56
- "title": "ajouter/modifier un lien",
74
+ "title": "ajouter/modifier le lien",
57
75
  "placeholder": "adresse du lien"
58
76
  },
59
77
  "source": {
60
78
  "title": "voir le code source",
61
- "prettify": "prettify"
79
+ "prettify": "embellir"
62
80
  }
63
81
  },
64
82
  "misc": {
65
- "source": "voir le code source"
83
+ "source": "voir le code source",
84
+ "preview": "aperçu"
66
85
  }
67
86
  }