diff --git a/.gitignore b/.gitignore index dffb9737b6fd72effea07792d83540de045d1498..915960991788fb5f1707a36d8d2b01aab6af74a9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ tmp/ sample/ckeditor.dist.js /package-lock.json *~ +indiscale-ckeditor5-complexitywiki-plugins-*.tgz diff --git a/sample/ckeditor.js b/sample/ckeditor.js index 4748288a3b3a25d76b1d94cb5a3fc1183ef242f8..ef68eef5ae43c81c066b6b647b2f0b1488d542cd 100644 --- a/sample/ckeditor.js +++ b/sample/ckeditor.js @@ -104,7 +104,8 @@ ClassicEditor 'codeBlock', '|', 'inlineMathButton', - 'displayMathButton' + 'displayMathButton', + 'inlineReferenceButton' ], image: { toolbar: [ 'imageStyle:inline', 'imageStyle:block', 'imageStyle:side', '|', 'imageTextAlternative' ] diff --git a/src/complexitywiki_plugins.js b/src/complexitywiki_plugins.js index e99c785d60c396b0cae76be3c4ae1a4a94019ff8..d98084d1c5a5ad2815b72fe46c409eafcbcded26 100644 --- a/src/complexitywiki_plugins.js +++ b/src/complexitywiki_plugins.js @@ -31,6 +31,7 @@ import { import Code from '@ckeditor/ckeditor5-basic-styles/src/code'; import Markdown from '@ckeditor/ckeditor5-markdown-gfm/src/markdown.js'; +import caosdbIcon from '../theme/icons/caosdb_icon.svg'; import displayIcon from '../theme/icons/display.svg'; import inlineIcon from '../theme/icons/inline.svg'; @@ -101,5 +102,31 @@ export default class ComplexitywikiPlugins extends Plugin { return view; } ); + + // Add the inline-link button + editor.ui.componentFactory.add( 'inlineReferenceButton', locale => { + const view = new ButtonView( locale ); + + view.set( { + label: t( 'Insert an inlne-reference link to another CaosDB entity' ), + icon: caosdbIcon, + tooltip: true, + isToggleable: true + } ); + + this.listenTo( view, 'execute', () => { + // const entityId = prompt( 'Entity Id' ); + // const propName = prompt( 'Property name (optional)' ); + // const linkName = prompt( 'Link text (alt text in case of images, optional)' ); + // const idAndProp = propName ? `${entityId}.${propName}` : `${entityId}`; + + model.change( writer => { + const textNode = writer.createText( '[<link text (optional)>](entity:<id or id.propertyName>', { 'code': true } ); + model.insertContent( textNode ); + } ); + } ); + + return view; + } ); } } diff --git a/theme/icons/caosdb_icon.svg b/theme/icons/caosdb_icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..9322afdb7704d885ec77f478a98ccef939189207 --- /dev/null +++ b/theme/icons/caosdb_icon.svg @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="5.6886401mm" + height="5.6886401mm" + viewBox="0 0 5.6886402 5.6886402" + version="1.1" + id="svg1380" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="caosdb_icon.svg" + inkscape:export-filename="/home/daniel/indiscale/management/internal/docs/grafiken.2018-10-23/logo/caosdb_logo.2019-08-05/caosdb_icon.512.png" + inkscape:export-xdpi="2286.1001" + inkscape:export-ydpi="2286.1001"> + <defs + id="defs1374" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7.9195959" + inkscape:cx="51.429643" + inkscape:cy="-1.736402" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1135" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata1377"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(133.29358,119.81429)"> + <g + transform="matrix(1.9221593,0,0,1.9221593,-234.19285,-614.98811)" + id="g10471"> + <path + id="path3054" + style="fill:none;stroke:#abc837;stroke-width:0.13006206;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1" + sodipodi:type="arc" + sodipodi:cx="53.972397" + sodipodi:cy="259.6973" + sodipodi:rx="1.4368194" + sodipodi:ry="0.47309005" + sodipodi:start="5.8755288" + sodipodi:end="3.5501368" + sodipodi:open="true" + d="m 55.291472,259.50974 a 1.4368194,0.47309005 0 0 1 -0.439058,0.56153 1.4368194,0.47309005 0 0 1 -1.761042,-2.6e-4 1.4368194,0.47309005 0 0 1 -0.437545,-0.56166" /> + <path + id="path3054-3" + style="fill:none;stroke:#abc837;stroke-width:0.13006206;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1" + sodipodi:type="arc" + sodipodi:cx="53.972397" + sodipodi:cy="259.29422" + sodipodi:rx="1.4368194" + sodipodi:ry="0.47309005" + sodipodi:start="5.8773562" + sodipodi:end="3.5475948" + sodipodi:open="true" + d="m 55.292511,259.10745 a 1.4368194,0.47309005 0 0 1 -0.440519,0.56085 1.4368194,0.47309005 0 0 1 -1.759387,-5e-5 1.4368194,0.47309005 0 0 1 -0.440224,-0.56087" /> + <path + id="path3054-3-7" + style="fill:none;stroke:#abc837;stroke-width:0.13006206;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1" + sodipodi:type="arc" + sodipodi:cx="53.972397" + sodipodi:cy="258.8912" + sodipodi:rx="1.4368194" + sodipodi:ry="0.47309005" + sodipodi:start="5.9082337" + sodipodi:end="3.5426036" + sodipodi:open="true" + d="m 55.309394,258.71795 a 1.4368194,0.47309005 0 0 1 -0.479055,0.55275 1.4368194,0.47309005 0 0 1 -1.745625,-0.007 1.4368194,0.47309005 0 0 1 -0.435149,-0.55668" /> + <ellipse + id="path3054-3-7-8" + style="fill:none;fill-opacity:1;stroke:#abc837;stroke-width:0.13006206;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1" + cx="53.972397" + cy="258.48816" + rx="1.4368194" + ry="0.47309005" /> + </g> + </g> +</svg>