diff --git a/apps/web/src/components/content/license/exercise-license-notice.tsx b/apps/web/src/components/content/license/exercise-license-notice.tsx index 56bcb507c2..409e9eda1d 100644 --- a/apps/web/src/components/content/license/exercise-license-notice.tsx +++ b/apps/web/src/components/content/license/exercise-license-notice.tsx @@ -55,9 +55,10 @@ export function ExerciseLicenseNotice({ strings.license.appliesTo }: ${typeString})` - const tooltipExplanation = isCreativeCommons - ? explanation - : `${explanation} –– ${strings.license.nonFree}` + const tooltipExplanation = + isCreativeCommons || explanation.includes('---') + ? explanation + : `${explanation} --- ${strings.license.nonFree}` return ( <> diff --git a/apps/web/src/data/de/license-data-short.ts b/apps/web/src/data/de/license-data-short.ts index 5d62d7649b..efe3448c19 100644 --- a/apps/web/src/data/de/license-data-short.ts +++ b/apps/web/src/data/de/license-data-short.ts @@ -84,4 +84,12 @@ export const licenses: LicenseData[] = [ agreement: `Mit dem Speichern dieser Seite versichere ich, dass ich die Veränderung des Inhalts selbst verfasst habe bzw. dass meine Änderungen keine fremden Rechte verletzen. Ich willige ein, meinen Beitrag unter der Creative Commons Attribution/Share-Alike Lizenz 4.0 und/oder unter einer gleichwertigen Lizenz zu veröffentlichen, welche der Serlo Education e. V. entsprechend der Regelungen in den Nutzungsbedingungen festlegen darf. Let's go 🤘`, }, + { + id: 26, + title: + 'Dieses Werk wurde vom Kultusministerium Niedersachsen zur Verfügung gestellt --- Die Lösungsvorschläge dagegen sind NICHT vom Land Niedersachsen.', + shortTitle: 'Niedersächsisches Kultusministerium', + url: 'https://aba-aufgaben.nibis.de', + agreement: `Mit dem Speichern dieser Seite versicherst du, dass du in deinem Beitrag (damit sind auch Änderungen gemeint) die Aufgabenstellung vom Land Niedersachsen nicht inhaltlich verändert hast, keine Rechte Dritter verletzt und dich an die Nutzungsbedingungen gehalten hast.`, + }, ] diff --git a/apps/web/src/data/licenses/licenses-content.ts b/apps/web/src/data/licenses/licenses-content.ts index 83e9afc5e1..f1edf5a32f 100644 --- a/apps/web/src/data/licenses/licenses-content.ts +++ b/apps/web/src/data/licenses/licenses-content.ts @@ -44,6 +44,11 @@ export const licensesContent = [ content: '{"plugin":"rows","state":[{"plugin":"text","state":[{"type":"p","children":[{"text":"Dieser Inhalt wurde vom "},{"type":"a","href":"https://chancenwerk.de/","children":[{"text":"Chancenwerk"}]},{"text":" erstellt und ggf in Zusammenarbeit mit Serlo Autor*innen weiterentwickelt. Der Chancenwerk e.V. hält das Urheberrecht an diesem Inhalt. Serlo dankt für die freundliche Genehmigung zur Veröffentlichung."}]},{"type":"p","children":[{"text":"Der Lerninhalt steht unter der "},{"text":"Lizenz CC BY SA 4.0.","strong":true},{"text":"Du darfst das Werk kopieren, vervielfältigen, bearbeiten und weiterentwickeln. Dies gilt unter folgenden Bedingungen:"}]},{"type":"h","level":3,"children":[{"text":"Wenn du "},{"text":"keine","strong":true},{"text":" Veränderungen vornimmst:"}]},{"type":"unordered-list","children":[{"type":"list-item","children":[{"type":"list-item-child","children":[{"text":"Du musst Serlo und das Chancenwerk als Quelle nennen \\"Quelle: serlo.org & Chancenwerk\\", in digitaler Form als Link direkt zu diesem Inhalt."}]}]},{"type":"list-item","children":[{"type":"list-item-child","children":[{"text":"Du musst die Lizenz angeben \\"Lizenz: CC BY SA 4.0\\", in digitaler Form als Link zu dieser Seite: "},{"type":"a","href":"https://creativecommons.org/licenses/by-sa/4.0/deed.de","children":[{"text":"https://creativecommons.org/licenses/by-sa/4.0/deed.de"}]},{"text":"."}]}]}]},{"type":"h","level":3,"children":[{"text":"Wenn du Veränderungen vornimmst:"}]},{"type":"unordered-list","children":[{"type":"list-item","children":[{"type":"list-item-child","children":[{"text":"Du musst Serlo und das Chancenwerk als Quelle nennen \\"Quelle: serlo.org & Chancenwerk\\", in digitaler Form als Link direkt zu diesem Inhalt."}]}]},{"type":"list-item","children":[{"type":"list-item-child","children":[{"text":"Du musst kurz erläutern, welche Änderungen du vorgenommen hast, z.B. \\"Zahlen vereinfacht\\" oder \\"Bild zugeschnitten\\"."}]}]},{"type":"list-item","children":[{"type":"list-item-child","children":[{"text":"Du musst die Lizenz \\"CC BY SA 4.0\\" angeben, in digitaler Form als Link zu dieser Seite: "},{"type":"a","href":"https://creativecommons.org/licenses/by-sa/4.0/deed.de","children":[{"text":"https://creativecommons.org/licenses/by-a/4.0/deed.de"}]},{"text":". Die Lizenz muss für das gesamte Werk angegeben werden, zu dem dieser Inhalt beigetragen hat."}]}]}]}]}]}', }, + { + id: 26, + content: + '{"plugin":"rows","state":[{"plugin":"text","state":[{"type":"p","children":[{"text":"Für diese "},{"text":"Aufgabenstellungen","strong":true},{"text":" der Abschlussarbeiten gelten die "},{"type":"a","href":"https://aba-aufgaben.nibis.de/","children":[{"text":"Nutzungsbedingungen des Niedersächsischen Kultusministeriums"}]},{"text":" (siehe auch unten)."}]},{"type":"p","children":[{"text":""}]},{"type":"p","children":[{"text":"Wichtig:","strong":true},{"text":" Bei den "},{"text":"Lösungsvorschlägen","strong":true},{"text":" dazu handelt es sich "},{"text":"explizit nicht","strong":true},{"text":" um Lösungsvorgaben des Landes Niedersachsens. Diese sind von Autor*innen auf serlo.org erstellt oder kommen aus anderen Quellen."}]},{"type":"h","children":[{"text":""}],"level":3}],"id":"1d0f5fb6-7d86-4847-9829-7c389fd86bb0"},{"plugin":"box","state":{"type":"quote","title":{"plugin":"text","state":[{"type":"p","children":[{"text":"Nutzungsbedingungen vom Niedersächsischen Kultusministerium"}]}],"id":"3ab2c124-20a9-4ca5-afe6-9cbe7d01f7cc"},"anchorId":"","content":{"plugin":"rows","state":[{"plugin":"text","state":[{"type":"p","children":[{"text":"Es wird darauf hingewiesen, dass die hier bereitgestellten Werke des Niedersächsischen Kultusministeriums zur freien Verwendung unentgeltlich zur Verfügung gestellt werden. Aufgabenstellungen und Lösungsvorgaben dürfen nur veröffentlicht werden, wenn die zur Verfügung gestellten Fassungen inhaltlich nicht verändert werden und bei der Veröffentlichung eine Quellenangabe erfolgt. Selbst erstellte Lösungen sind mit dem Hinweis zu versehen, dass es sich dabei nicht um Lösungsvorgaben des Landes Niedersachsen handelt. Die zur Verfügung gestellten Unterlagen enthalten aus urheberrechtlichen Gründen keinerlei Texte, Abbildungen oder andere Werke anderer Urheber*innen, sondern verweisen lediglich auf diese. Nutzer*innen verpflichten sich, hinsichtlich solcher Werke die geltenden urheberrechtlichen Bestimmungen zu beachten und vor einer Verwendung dieser Quellen von den jeweiligen Urheber*innen die erforderlichen Nutzungs- und Verwertungsrechte einzuholen."}]},{"type":"p","children":[{"text":""}]},{"type":"p","children":[{"text":"Stand: 15.02.2024 ("},{"type":"a","href":"https://aba-aufgaben.nibis.de/","children":[{"text":"Quelle"}]},{"text":")"}]}],"id":"0c0ab6e8-9b97-45ec-9db4-60fd7cb24046"}],"id":"051eaece-d731-4022-8eae-13269beb9a56"}},"id":"7e25bb34-e257-4bca-b03b-ccb77d7890c7"}]}', + }, { id: 9, content: diff --git a/apps/web/src/serlo-editor-integration/serlo-plugin-wrappers/solution-serlo-static-renderer.tsx b/apps/web/src/serlo-editor-integration/serlo-plugin-wrappers/solution-serlo-static-renderer.tsx index 105ef726c0..ed8f67c581 100644 --- a/apps/web/src/serlo-editor-integration/serlo-plugin-wrappers/solution-serlo-static-renderer.tsx +++ b/apps/web/src/serlo-editor-integration/serlo-plugin-wrappers/solution-serlo-static-renderer.tsx @@ -18,7 +18,7 @@ const CommentAreaEntity = dynamic(() => ) ) -// Special version for serlo.org with author tools, comments and license +// Special version for serlo.org with author tools and comments export function SolutionSerloStaticRenderer(props: EditorSolutionDocument) { const { asPath } = useRouter() const ab = useAB() diff --git a/packages/editor/src/plugins/audio/toolbar.tsx b/packages/editor/src/plugins/audio/toolbar.tsx index 113edae255..1213cb701b 100644 --- a/packages/editor/src/plugins/audio/toolbar.tsx +++ b/packages/editor/src/plugins/audio/toolbar.tsx @@ -57,32 +57,29 @@ export const AudioToolbar = ({ > {audioStrings.audioUrl} - {/* In the future we want a popovers per setting, but this is faster for now */} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

{audioStrings.title}

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

{audioStrings.title}

-
- { - state.src.set(e.target.value) - }} - inputWidth="100%" - width="100%" - onKeyDown={handleInputEnter} - placeholder="voca.ro/audio-id" - className="block" - /> -
-
- ) : null} +
+ { + state.src.set(e.target.value) + }} + inputWidth="100%" + width="100%" + onKeyDown={handleInputEnter} + placeholder="voca.ro/audio-id" + className="block" + /> +
+
} pluginControls={} diff --git a/packages/editor/src/plugins/geogebra/toolbar.tsx b/packages/editor/src/plugins/geogebra/toolbar.tsx index 77c89932e1..a63e3b4052 100644 --- a/packages/editor/src/plugins/geogebra/toolbar.tsx +++ b/packages/editor/src/plugins/geogebra/toolbar.tsx @@ -33,31 +33,28 @@ export const GeogebraToolbar = ({ > {geogebraStrings.chooseApplet} - {/* In the future we want a popovers per setting, but this is faster for now */} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

- {editorStrings.edtrIo.settings}: {geogebraStrings.title} -

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

+ {editorStrings.edtrIo.settings}: {geogebraStrings.title} +

-
- state.set(e.target.value)} - inputWidth="100%" - width="100%" - className="block" - /> -
-
- ) : null} +
+ state.set(e.target.value)} + inputWidth="100%" + width="100%" + className="block" + /> +
+
} pluginControls={} diff --git a/packages/editor/src/plugins/image/toolbar.tsx b/packages/editor/src/plugins/image/toolbar.tsx index dc32241019..ab3633dbc1 100644 --- a/packages/editor/src/plugins/image/toolbar.tsx +++ b/packages/editor/src/plugins/image/toolbar.tsx @@ -33,21 +33,19 @@ export const ImageToolbar = ( > {editorStrings.edtrIo.settings} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

- {editorStrings.edtrIo.settings}: {imageStrings.title} -

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

+ {editorStrings.edtrIo.settings}: {imageStrings.title} +

-
- -
-
- ) : null} +
+ +
+
diff --git a/packages/editor/src/plugins/injection/toolbar.tsx b/packages/editor/src/plugins/injection/toolbar.tsx index 2c6916c565..f1f852b6eb 100644 --- a/packages/editor/src/plugins/injection/toolbar.tsx +++ b/packages/editor/src/plugins/injection/toolbar.tsx @@ -32,33 +32,30 @@ export const InjectionToolbar = ({ > {injectionStrings.serloId} - {/* In the future we want a popovers per setting, but this is faster for now */} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

{injectionStrings.title}

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

{injectionStrings.title}

-
- - state.set(e.target.value.replace(/[^0-9]/g, '')) - } - width="100%" - inputWidth="100%" - className="block" - /> -
-
- ) : null} +
+ + state.set(e.target.value.replace(/[^0-9]/g, '')) + } + width="100%" + inputWidth="100%" + className="block" + /> +
+
} pluginControls={} diff --git a/packages/editor/src/plugins/multimedia/toolbar/toolbar.tsx b/packages/editor/src/plugins/multimedia/toolbar/toolbar.tsx index 9760a950b5..b145f410b6 100644 --- a/packages/editor/src/plugins/multimedia/toolbar/toolbar.tsx +++ b/packages/editor/src/plugins/multimedia/toolbar/toolbar.tsx @@ -28,20 +28,18 @@ export const MultimediaToolbar = ({ id, children }: MultimediaToolbarProps) => { > {editorStrings.edtrIo.settings} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

- {editorStrings.edtrIo.settings}:{' '} - {editorStrings.plugins.multimedia.title} -

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

+ {editorStrings.edtrIo.settings}:{' '} + {editorStrings.plugins.multimedia.title} +

-
{children}
-
- ) : null} +
{children}
+
} pluginControls={} diff --git a/packages/editor/src/plugins/page-layout/toolbar/toolbar.tsx b/packages/editor/src/plugins/page-layout/toolbar/toolbar.tsx index 3f533759fe..7a6fbe8aa8 100644 --- a/packages/editor/src/plugins/page-layout/toolbar/toolbar.tsx +++ b/packages/editor/src/plugins/page-layout/toolbar/toolbar.tsx @@ -36,15 +36,13 @@ export const PageLayoutToolbar = ({ > {pageLayoutStrings.chooseRatio} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > - - - ) : null} + setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > + + } /> diff --git a/packages/editor/src/plugins/serlo-template-plugins/applet.tsx b/packages/editor/src/plugins/serlo-template-plugins/applet.tsx index c5ef60f519..98ecb73a82 100644 --- a/packages/editor/src/plugins/serlo-template-plugins/applet.tsx +++ b/packages/editor/src/plugins/serlo-template-plugins/applet.tsx @@ -86,25 +86,23 @@ function AppletTypeEditor(props: EditorPluginProps) { {content.render()} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -
- - -
-
- ) : null} + setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +
+ + +
+
) } diff --git a/packages/editor/src/plugins/serlo-template-plugins/article.tsx b/packages/editor/src/plugins/serlo-template-plugins/article.tsx index 65cd49c941..8ddeec86d3 100644 --- a/packages/editor/src/plugins/serlo-template-plugins/article.tsx +++ b/packages/editor/src/plugins/serlo-template-plugins/article.tsx @@ -88,25 +88,23 @@ function ArticleTypeEditor(props: EditorPluginProps) {
{content.render()}
- {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -
- - -
-
- ) : null} + setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +
+ + +
+
) } diff --git a/packages/editor/src/plugins/serlo-template-plugins/course/course.tsx b/packages/editor/src/plugins/serlo-template-plugins/course/course.tsx index 566593ac64..37818a3722 100644 --- a/packages/editor/src/plugins/serlo-template-plugins/course/course.tsx +++ b/packages/editor/src/plugins/serlo-template-plugins/course/course.tsx @@ -119,21 +119,19 @@ function CourseTypeEditor(props: EditorPluginProps) { - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="max-w-xl" - > -
- -
-
- ) : null} + setShowSettingsModal(false)} + className="max-w-xl" + > +
+ +
+
) diff --git a/packages/editor/src/plugins/solution/serlo-license-chooser.tsx b/packages/editor/src/plugins/solution/serlo-license-chooser.tsx index fab8833e7a..8f863cf67d 100644 --- a/packages/editor/src/plugins/solution/serlo-license-chooser.tsx +++ b/packages/editor/src/plugins/solution/serlo-license-chooser.tsx @@ -29,38 +29,32 @@ export function SerloLicenseChooser({ licenseId }: SerloLicenseChooserProps) { - {showLicenseModal ? ( - setShowLicenseModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

{solutionStrings.changeLicense}:

+ setShowLicenseModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

{solutionStrings.changeLicense}:

-
- -
-
- ) : null} +
+ +
+
) } diff --git a/packages/editor/src/plugins/text/components/math-element.tsx b/packages/editor/src/plugins/text/components/math-element.tsx index 22b70f6ef8..714bf19b82 100644 --- a/packages/editor/src/plugins/text/components/math-element.tsx +++ b/packages/editor/src/plugins/text/components/math-element.tsx @@ -11,10 +11,7 @@ import { useSelected, } from 'slate-react' -/* eslint-disable import/no-unassigned-import */ -import 'katex/contrib/mhchem' - -import { MathFormula } from './math-formula' +import { StaticMath } from '../static-components/static-math' import type { MathElement as MathElementType, Paragraph, @@ -53,11 +50,10 @@ export function MathElement({ if (!shouldShowMathEditor) { return ( <> - {/* Slate void elements need to set attributes and contentEditable={false} See: https://docs.slatejs.org/api/nodes/element#rendering-void-elements */} - + {children} diff --git a/packages/editor/src/plugins/text/components/math-formula.tsx b/packages/editor/src/plugins/text/components/math-formula.tsx deleted file mode 100644 index 1a2e1a75b5..0000000000 --- a/packages/editor/src/plugins/text/components/math-formula.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import KaTeX from 'katex' -import { memo } from 'react' - -import type { MathElement } from '../types/text-editor' - -export const MathFormula = memo(function MathFormula({ - element, -}: { - element: MathElement -}) { - const html = KaTeX.renderToString( - `${element.inline ? '' : '\\displaystyle '}${element.src}`, - { - displayMode: false, - throwOnError: false, - } - ) - - return ( - - ) -}) diff --git a/packages/editor/src/plugins/video/toolbar.tsx b/packages/editor/src/plugins/video/toolbar.tsx index 776fc9a864..a8159fe95a 100644 --- a/packages/editor/src/plugins/video/toolbar.tsx +++ b/packages/editor/src/plugins/video/toolbar.tsx @@ -39,42 +39,39 @@ export const VideoToolbar = ({ > {videoStrings.videoDescription} - {/* In the future we want a popovers per setting, but this is faster for now */} - {showSettingsModal ? ( - setShowSettingsModal(false)} - className="top-8 max-w-xl translate-y-0 sm:top-1/3" - > -

{videoStrings.title}

+ setShowSettingsModal(false)} + className="top-8 max-w-xl translate-y-0 sm:top-1/3" + > +

{videoStrings.title}

-
- { - state.src.set(e.target.value) - }} - inputWidth="100%" - width="100%" - placeholder="(YouTube, Wikimedia Commons, Vimeo)" - className="block" - /> -
-
- state.alt.set(e.target.value)} - width="100%" - inputWidth="100%" - className="block" - /> -
-
- ) : null} +
+ { + state.src.set(e.target.value) + }} + inputWidth="100%" + width="100%" + placeholder="(YouTube, Wikimedia Commons, Vimeo)" + className="block" + /> +
+
+ state.alt.set(e.target.value)} + width="100%" + inputWidth="100%" + className="block" + /> +
+
} pluginControls={}