* fix onPast bug in editor
the event was prevented, if event.clipboardData.files was defined. This always the case. Now we check if this filelist object has at least on entry to start the onPaste handler for file uploads.
Signed-off-by: Philip Molares <philip.molares@udo.edu>
* added e2e test that verifies that pasting text still works
Signed-off-by: Philip Molares <philip.molares@udo.edu>
* Update dependency markdown-it-anchor to v6
* Set initial slug-count offset on duplicate headings to 1 instead of 2
Signed-off-by: Renovate Bot <bot@renovateapp.com>
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Renovate Bot <bot@renovateapp.com>
* Update Link classes to allow tooltips/titles
* Added read-only-view, Move note title extraction into separate file
(cherry picked from commit be23083ca3966f26b1b841d5cf4f21e299c8a55a)
(cherry picked from commit cbc595d3fc336b0a649c396dfae30fa08082384c)
* Optimized look of document-infobar
(cherry picked from commit 0176668b156da3fd7c534161a839ca0e3495119c)
# Conflicts:
# src/components/editor/document-bar/document-info/document-info-time-line.tsx
* Show help-button only in Editor-variant of AppBar
(cherry picked from commit 3c26e1619c774fe162cb3d8fae9e79ced92c9c3e)
* Update CHANGELOG
(cherry picked from commit d0d29e7d408515cc8f86df45d13fff60d741873e)
* Move motd-banner to top of page
(cherry picked from commit 43a9a274bf5da3fdf640ec905ab38153c81b014b)
* Refactor isInline to size property
(cherry picked from commit cb4ee74b7c97ec9711946f28924e9c890b752ea3)
# Conflicts:
# src/components/editor/document-bar/document-info/document-info-time-line.tsx
* Add size attribute to user-avatar
(cherry picked from commit 9629b58911b9d4f3aed81ef8c271fbc8e5a15aa4)
* Add mode-enum to app-bar
(cherry picked from commit 08f95be58974468c1e2897b475e5e3235b79c230)
* Split DocumentRenderPane into scrollable- and non-scrollable variant
(cherry picked from commit 44dd27edfd967745c548f7ae1fd2047e812cdc22)
* Removed unnecessary className
* Change dependencies
* Use emoji-picker-element instead of emoji-mart
* Optimize emoji-picker appeareance and data-source
* Add twemoji font to emoji-picker
* Add missing useEffect dependency
* Add emoji-shortcode map
* Include emoji-data into bundle and remove dynamic fetch
* Rename shortcode-map
* Fix emoji-picker being hidden on second attempt to open it
* Add support for skin-tone short-codes
* Remove whitespace line
* Don't reinitialize the picker on every open
* Fixed linting and test issues
* Update CHANGELOG entry
* Add mock-files, API calls and overall tokens-UI
* Added ability to add tokens
* Added token deletion feature (based on timestamp)
* Replace mock-method by real API code
* Add cypress tests
* Added CHANGELOG information
* Un-access-ify i18n
* Set unique react-element key to timestamp of token-creation
* Remove 'now' from changelog
* Use @mrdrogdrog's suggestion for the info label
* removed first-header-extractor
get first heading from markdown rende
* don't remove editor or renderer just hide them
this way both are always up to date and can be shown very fast
* extracted image alt attribute into first title. too
* added tests as suggested by @mrdrogdrog
* Add caching of user-data for 600 seconds
* Make cache-entry interface commonly usable
* Extract revision types
* Remove revision-cache rule
* Use seconds as cache-time interval (Date.now uses milliseconds)
* Fix import error
* Extract cache logic into common cache-class
* Add cache class that was forgotten to commit in last commit
* Start adding unit tests
* Fix bug detected during unit-testing
* Add unit tests for cache
* Made entry-limit test more explicit
* Renamed files to lower-case starting letter
* Change element.io links to matrix.to links
Following to the discussion in codimd/server#496, this commit changes element.io links to matrix.to in the new react-client as well.
* Updated cypress test for new link
this was just a simple index problem. The 0. entry of a regex result is the whole string and not the first capture group
added e2e tests to fix this in the future
cypress does currently not support copy to clipboard in firefox so this part of the test is commented out (for the time being)
* Update dependency markdown-it-deflist to v2.1.0
* Include end line number into key
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Update src/components/markdown-renderer/utils/html-react-transformer.tsx
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Update dependency @types/codemirror to v0.0.98
* Remove cm-full-screen custom types as they're now included in @types
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
* Added editor-preferences to redux store
* Add local-storage saving and retrieval of EditorConfig
* Change import to be in a single line
* Add equality check to redux-selector (as suggested by @mrdrogdrog)
* Save and load editor-config to/from localStorage
added error boundary
this prevents any faulty components to completely crash the app and instead shows this page with some help about what to do and where to report bugs.
* Add maximum document length config option
* Show remaining characters in tooltip of status-bar length-info
* Remove unnecessary checkDocumentLength function
* Add max-length warning
* Update translation wording
* Set dialog to medium size
* Add coloring to status-bar length info
* Improve wording in warning modal
* Add cypress e2e tests
I included the cypress-commands package and set the language level to ES6 to allow easier testing e.g. of element attributes.
* Changed way how the modal-advice was styled and positioned
* Show warning modal only on first length exceeding
* Improved length tooltip by adding messages when exceeding or reaching limit
* Add mock files
Note that revisions-list needs to be called revisions in the reality to be confirm with the API spec, but our mocking solution doesn't allow that...
* Add revisions API calls
* Fix line endings in mock files
* Extend CommonModal to accept size and additionalClasses
* Clarify variable name in API request
* Add react-diff-viewer as dependency
* Add revision chooser modal
* Fix type of route params
* Added and updated mock files
* Added user-icon list per revision
* Added translation to alt text of avatars
* Updated mock file to remove inconsistencies
* Add caching for revisions
* Sort mock file revisions-list descending by timestamp
* Pre-select first/newest revision on first modal open
* Regenerated yarn.lock file from scratch
* Applied requested changes in variable names and line lengths
* User UserAvatar component instead of manually set image
* Move revision-modal-list-entry to own component
* Removed unnecessary return statements
Massive improvement of render performance by:
- replacing the codimd-line-marker with an in-memory map
- an observation of the changed markdown code to identify changed lines
- a unique react-key calculation
* Remove useless divider-spans from toolbar and change css-selector
The use of extra divider elements is not needed as we can set the css-after pseudo-class to the button groups with the same styling.
This way we can reduce the amount of elements in the DOM by a hand full.
* Use scss syntax and include one rule into another more common one
* added missing autocompletions:
- code-block
- container
- header
- image
- link
- pdf
* added extraTags ([name=], [time=], [color=]) to the link autocompletion, because they trigger on the same characters
added getUser in /redux/user/methods to retrive the current user outside of .tsx files
improve the regexps on several autocompletion
* renamed hints to auto
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add 'yarn lint' command and run it in GH actions
* Move linting to own workflow
* Remove linting from build-workflow
* Solve linting warnings
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
- added csv-replacer
- changed highlghted-code plugin:
each replacer extracts what he need from the data-extra attribute now
- changed CHANGELOG.md
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
This fix needs a little bit of explanation. Normally the 'keyUp' prevent is preferred because it fires after being sure, that not some buttons more belong to the shortcut. Additionally some platforms set the key-property of the 'keyDown'-event to the composition result of the key-combination thus resolving under certain environments to '€' while in other environments to 'e'.
The browser's event flow is as following: keyDown -> keyPress -> textInput -> keyUp.
As the keyUp-event is too late (after textinput) and the keyPress-event does not work properly with the modifiers, we felt compelled to use 'keyDown' and watch for 'e' as well as '€' key-properties. If some other keyboard locale does output different characters than these two, that person got a problem - meaning no functionality of the shortcut. But still better than nothing.
* Replaced connection indicator in editor top bar with user-menu
* Added basic layout of bottom document bar
* Fixed margins between elements
* Reorganized document-bar
* Added dividers into toolbar
* Move files from task-bar to document-bar and remove test file
* moved connection-indicator components into its own folder
* moved document bar to the top
* moved connection-indicator once again
* Change design
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* New idea for timestamps
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add css
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Revert "Add css"
This reverts commit 6780aa05
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Revert "New idea for timestamps"
This reverts commit bf2891e1
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* split import / export
* Made version input field to a common component
* added read-only modal
added document-time
added placeholder text for permissions
* remove flex-nowrap from editor toolbar
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add codimd permission menu
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Move permission picker to the right
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* add use memo
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add user-select-none to documenttime component
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* added status-bar
* fixed status-bar
* Add document info mock
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* changed published to share in i18n
* reordered document bar
moved share modal in it's own component
* changed the divider color in the toolbar
* Add details to document info
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add pin mock button
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Restructure toolbar after rebase and extract EmojiPicker+Button into component
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Correct linue number output
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add some space into status bar
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Cleanup code to make ESLint happy
* Fix Toc button position
* Added link to presentation mode button
* Cache codemirror props
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Fix code blocks not being completely visible
* Improve document info modal
- The document info timeline always wrapped the received moment.js-object into a new moment.js object instead of directly using the given one.
- The timestamps were configured to be displayed without suffix, but this is necessary to support valid translation grammar.
- There was no margin between the icons and the texts.
* Highlighted user name in document-info modal
* Add avatar icon to document-info modal
* Improved english translation of the share-info
* Improve performance of copyable-fields by using useCallback
* Add translation keys for pin-to-history button
* Forwarded note title to editor-menu for deletion modal info
* Add placeholders to translations
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* change translation
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Change permission dropdown to permission button
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Fix translations of emoji-picker and preferences
* remove unused imports
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add alt attribute
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Fix share button and i18n files
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Fix use of i18n keys
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Use modal-body
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* useCallback
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Use more specific i18n key
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Add a new entry and move i18n key for usercontribution
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Fix i18nkey für shareLink
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* remove unused i18nkey
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Rename component DocumentInfo to DocumentInfoButton
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Extract revision button code into own component
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* wrap buttons in navbar-nav
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* organize imports
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* organize imports
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Added editor-preferences modal
* Added functionality to preferences modal
* Activated search and replace feature in CodeMirror
* pdf export unavailability notice (#403)
* added pdf export unavailability notice with link to FAQ
as many users ask all the time why this was removed and when they'll get it back, this seemed like a fine solution in the meantime.
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
* Refactored editor-preferences to just use one generic select component
* Fixed warnings regarding duplicated controlId and missing useCb-deps
* Reorganized translation keys
* Fixed i18n indentation for POEditor.com
* Added translation key for 'avatar of ...'
* Remove fragment
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Use user-avatar in document-info-line.tsx
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Revert changes in user-avatar and solve the problem otherwise
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Removed unnecessary import
* Removed another unnecessary import
* Refactored EditorPreferenceSelect to use enum and automatic type conversions
* Remove unused CodeMirror reference
* Fix spacing problem
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Increate size of image
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* fixed share-link's space around the copyable-field
Co-authored-by: Philip Molares <philip.molares@udo.edu>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: Philip Molares <git@molar.es>
* added toolbar e2e test
changed addTable function
* fixed toolbar unit test
* added emoji to toolbar e2e tests
added selection with link to toolbar e2e tests
* Added emoji-mart as emoji-picker
* Fixed JSON to TypeScript-object parsing
* added fork awesome to emoji-picker
added ForkAwesomeIcons enum, because it's not possible to iterate over a typescript type consisting of strings [1]. This is a bit unfortunate since we now have two lists of all the fork awesome icons, but sadly it can not be done another way.
added fork awesome as a custom category to the emoji picker.
[1]: https://stackoverflow.com/questions/40863488/how-to-iterate-over-a-custom-literal-type-in-typescript
* made picker close, when clicking away
added react-use dependency for useClickAway hook
* Fixed emoji-picker loading images from unpkg instead of using font
* fixed addEmoji function
added tests
* Extract customIcons into useMemo
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
* Added config option to enable/disable the email signup
* Added register API call
* Added register button and error handling
* Show register button only if enabled in config
* Renamed login handler, added dir-attribute, removed obsolete css class
* Added separate registration page, changed email-login to internal-login
As an username is sufficient for registration, this commit changes the email-login into an username-based login. This login method is now called "internal" in the code.
This commit also introduces a new registration page instead of using the same form as for login.
* Added information texts below form fields
* Added error differentiation
* Added CHANGELOG entry
* Replace "magic string" with Enum representation
* Removed password-field to DOM rewrite
With the value attribute set, the password would be written to the DOM while typing. That's bad practise as attackers could read that password (e.g. with dirty CSS-hacks).
* Fixed backendConfig to config renaming
* Fixed links on register page being external links
* Refactored error handling to use string-enum that corresponds with i18n keys
* Fix chrome warnings regarding autocomplete and duplicated id
* Refactor login action buttons to use callbacks and handle promises directly
* Remove unnecessary async function
* Added promise chaining
* Add plantuml support
* Enable PlantUML rendering only if plantumlServer config is set
* Show warning box when plantuml is enabled but no server is configured
renamed frontend-config to api-url
renamed backend-config to config
removed api call to set frontend-config as the frontend either know where the backend is as it is delivered by it or get's this information via the enviroment variable REACT_APP_BACKEND
always start the client on Port 3001 as the backend will run on 3000 during development. changed the port on multiple occasions to accommodate for this
added package.json script 'start:dev'
changed README to better explain how to run backend and frontend side-by-side
* Added yaml-frontmatter extracting and error handling
* add tests
* changed document-title, so the editor can change the title to the title of the yaml metadata. closes#303
* extracted first line parsing in a core rule of markdown-it
document title will now be determined like this:
1. yaml metadata title
2. opengraph title
3. first level one heading
4. 'Untitled'
* added documentTitle e2e test
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Philip Molares <philip@mauricedoepke.de>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: mrdrogdrog <mr.drogdrog@gmail.com>
* added all functionality to the toolbar buttons
* added unit tests for the toolbar functions
* added unit tests to CI
* Added translated titles to buttons of toolbar
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: mrdrogdrog <mr.drogdrog@gmail.com>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
* Update dependency react-bootstrap to v1.2.1
* Fixed sort-button event name
With the upgrade to Bootstrap-React 1.2.1 the ButtonProps extend now React.HTMLAttributes which in favor extends the DOMAttributes interface. This interface defines almost every possible attribute for DOM-/HTML-elements.
Our SortButtonProps interface introduced an onChange event handler with a type matching our condition. With the BS-React upgrade the onChange event must not be redefined/overriden with this type and therefore I renamed it.
* updated react-bootstrap to 1.2.2
* fixed wrong prop name in HistoryToolbar
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Philip Molares <philip.molares@udo.edu>
* Fix history element's entry menu deletion button
The note deletion button inside the EntryMenu of a history element has one button to remove the note from the user's history and one to delete the note from the system. Both buttons pointed to the history-removal.
* Added modals for note deletion and note from history removal
* Removed redundant code
* Added CHANGELOG entry
* Added note title in deletion/removal prompts
* Refactored DeleteNoteItem and RemoveNoteEntryItem into one common component
* Refactored DeleteRemoveNoteItem-component and added two composition components
* Redesigned modal dialog to make the note title more clearly readable
* Renamed the generic dropdown-with-deletion-modal-component
added branding option via '@ <logo>' or '@ <name>' after the CodiMD logo and text.
This was a user can personalize their CodiMD instance
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
Co-authored-by: Erik Michelson <github@erik.michelson.eu>
Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>