* fix: New German translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Dutch translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Polish translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Swedish translations from Crowdin [ci skip]
* fix: New Chinese Traditional translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Persian translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Persian translations from Crowdin [ci skip]
* fix: New Persian translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Dutch translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Polish translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Swedish translations from Crowdin [ci skip]
* fix: New Chinese Traditional translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Persian translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* feat: Added ability to click another user to observe them, mainly for fun
* language, lower debounce, prevent tooltip from hiding when toggling observation
* fix: Don't allow observing self, added banner at top of screen
* Dont edit tooltip as it's confusing between our actions and theirs
* snapshots
This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously.
closes#1282
* updated readme to give some light testing instructions
* updated tests to accept new behavior for group memberships
* use test factories in more places
* add debug logs for mailer events in development
* feat: Remove explicit edit
* Restore revision remains disabled for now
* Bump RME, better differentiation of focused state
* fix: Star not visible in edit mode
* remove stray log
* fix: Occassional user context not available in collaborative persistence
* Add defaultUserRole on server
* Handle defaultUserRole on frontend
* Handle tests
* Handle user role in userCreator
* Minor improvments
* Fix prettier issue
* Undefined when isNewTeam is false
* Update app/scenes/Settings/Security.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/Settings/Security.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/Settings/Security.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Remove duplicate validation
* Update Team.js
* fix: Move note out of restricted width wrapper
* Move language setting to use 'note' prop
* Remove admin option
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* feat: Normalize logging
* Remove scattered console.error + Sentry.captureException
* Remove mention of debug
* cleanup dev output
* Edge cases, docs
* Refactor: Move logger, metrics, sentry under 'logging' folder.
Trying to reduce the amount of things under generic 'utils'
* cleanup, last few console calls
* fix: Remove Saving… message when collab enabled
* chore: Add tracing extension to collaboration server
* fix: Incorrect debounce behavior due to missing timestamps on events, fixes abundence of notifications when editing in realtime collab mode
* fix: Reload document prompt when collab editing
* Make request only when popover is visible
* Update policies required for shares.create shares.update
* Create withCollection scope
* Remove team share check from shares.create
* Update tests
* Select user role while sending invite
* Add tests to check for role
* Update app/scenes/Invite.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Use select
* Use inviteUser policy
* Remove unnecessary code
* Normalize rank/role
Fix text sizing of select input, fix alignment on users invite form
* Move component to root
* cleanup
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* perf: Remove no-longer-used 'backup' columns
These were added as part of the move to the v2 editor over a year ago incase any text was not correctly converted. After a year of use no cases of failed conversion have occurred that required the use of this column
* Remove migration, will do in 2-step release
* perf: Remove no-longer-used 'backup' columns
These were added as part of the move to the v2 editor over a year ago incase any text was not correctly converted. After a year of use no cases of failed conversion have occurred that required the use of this column
* feat: optimize dockerfile
use new dockerfile syntaxes
leverage multi-stage builds
strip yarn cache from image
use stricter yarn install command
run as a non-root user
* fix: mark yarn-deduplicate as a required dep
`yarn --production` will fail on a clean install otherwise
* fix: add sequelize required files for migrations
* fix: use correct ARG syntax for multistage builds
* revert: mark yarn-deduplicate as a required dep
no longer required as of 0b3adad751
* perf: Remove no-longer-used 'backup' columns
These were added as part of the move to the v2 editor over a year ago incase any text was not correctly converted. After a year of use no cases of failed conversion have occurred that required the use of this column
* Remove migration, will do in 2-step release
- Fixes enter with horizontal gap cursor
- Improves pasting behavior
- Fixes heading uncollapse when value changes
- Fixes notice blocks not hidden with other collapsed content
closes#2371
* fix: Publish button disabled on drafts in read-only mode
fix: Template selector appears on edited documents
* fix: Save button does not immediately come available when selecting a template
* fix: Template menu item alignment
closes#2204
* fixes: Use policy for display of star in document title
closes#2354
* fix: Modified time is sometimes bold when last edited user is current user
closes#2355
* fix: Allow starring of drafts
* Add migrations
* Handle previousTitles when titles is updated
* Add necessary test cases
* Use previous title while searching
* Rewrite logic to update previousTitles in beforeSave hook
* Update weights
* Update test to match new rank order
* Add tooltip to inform user on document
* Add code comment
* Remove previous title tooltip
* fix: Remove unused string, add model tests
Co-authored-by: Tom Moor <tom.moor@gmail.com>
fix: Show message in mobile TOC when no headings in document
fix: MenuItem with level should still have background edge-to-edge
fix: Show developer warning when creating incorrect menu item type
* Add TOC button for mobile
* Undo NewDocumentMenu changes
* Place the toc button in the correct position.
* Pass menu props to menuitem
* Update app/menus/TableOfContentsMenu.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/menus/TableOfContentsMenu.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Use the existing prop type
* Write menu inside actions prop
* Prevent blank webpage behaviour for toc
* Use href instead of level to determine target
* Update app/scenes/Document/components/Header.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Add heading to menu items
* Use existing Heading component
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* fix: Input placeholder ellipsis
* fix: Hide scrollbar on nav tabs on mobile
* fix: Header actions should be fixed on mobile
* fix: Add fade when content in tabs does not fit in available horizontal width
* Align false conditions before true
* Update documents.delete endpoint for permanent delete
* Add permanent delete to events table and integrate with socket.io
* Add permanent delete to document menu
* Update parentDocumentId of direct child to null
* Add translation
* Add test for permanent delete
* Add space
* Update app/scenes/DocumentPermanentDelete.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/stores/DocumentsStore.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update server/commands/documentPermanentDeleter.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/DocumentPermanentDelete.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Change socket room from team to collection
* Add translation
* Create log func for commands
* Move tests from utils to permanentDeleter command
* Add additional tests
* Set redirect to trash
* Return promise from beforeEach
* Add undeleted documents validation
* Include deleteAt attribute in db query
* Update server/commands/documentPermanentDeleter.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* tweak language
Co-authored-by: Tom Moor <tom.moor@gmail.com>
Updated the description of the SECRET_KEY variable in the .env.sample
file to clarify that the key needs to be 32 bytes long and hex-encoded.
The previous description of "32 character hexadecimal" was confusing
as it left open the possibility of a hex-encoded 16-byte key.
* fix: Unauthorized request to views.list from shared documents
* Bump dep styled-components
* chore: Normalize 'new' actions in settings area to top right
chore: Add translation hooks to API tokens screen
chore: Move API tokens loading to paginated list
* build: Webpack config - use named chunk ids
prevent invalidation across builds by using a deterministic chunkId algorithm
* fix: Autotrack chunk name syntax
* fix: New Polish translations from Crowdin [ci skip]
* fix: New Polish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: Add application/octet-stream as a valid mimetype for docx uploads
* fix: Include application/octet-stream in frontend filter
fix: Add file size and file type guards
* Validate .docx extension in files with application/octet-stream mimetype
* refactor: Move MAXIMUM_IMPORT_SIZE to an optional environment config
fix: Add file size check on server too
Co-authored-by: Saumya Pandey <sp160899@gmail.com>
* feat: Add search
* feat: New design for keyboard shortcuts guide
feat: Include quick search
fix: Add missing shortcuts
* tweaks
* fix: Two other spots that should trigger guide-style instead of modal
* sink,lift -> indent,outdent
* fix: Animation should slide out as well as in
* feat: Add collection iconography and colors to Slack settings page
fix: Use standardized list components
fix: Slack icon size
chore: Convert to translation strings
* fix: Missing translation, convert to Scene
* chore: Migrations
* chore: Add recording of share link views
* feat: Add display of share link accessed date in admin
* translations
* test
* translations, admin pagination
fix: Severla context menus miss-positioned
fix: Search filters not large enough on mobile
fix: Deep black background on mobile to match native apps
fix: Sticky document header allowing horizontal scrolling on mobile
* Introduce isViewer field
* Update policies
* Make users read-only feature
* Remove not demoting current user validation
* Update tests
* Catch the unhandled promise rejection
* Hide unnecessary ui elements for read-only user
* Update app/scenes/Settings/People.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Remove redundant logic for admin only policies
* Use can logic
* Update snapshot
* Remove lint error
* Update snapshot
* Minor fix
* Update app/menus/UserMenu.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update server/api/users.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/components/DocumentListItem.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update app/stores/UsersStore.js
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Use useCurrentTeam hook in functional component
* Update translation
* Update ternary
* Remove punctuation
* Move the functions to User model
* Update share policy and shareMenu
* Rename makeAdmin to promote
* Create updateCounts function and Rank enum
* Update tests
* Remove enum
* Use async await, remove enum and create computed accessor
* Remove unused variable
* Fix lint issues
* Hide templates
* Create shared/types and use rank type from it
* Delete shared/utils/rank type file
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* chore: Show all configuration errors at once
fix: Remove requirement for deprecated Slack key
fix: Add requirement for UTILS_SECRET
* chore: Add funding/sponsorship message
* fix: Enforce single team when self hosting
* test: positive case
* refactor
* fix: Visible error message on login screen for max teams scenario
* Update Notices.js
* lint
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
- Added `accountProvisioner`
- Move authentication to use passport strategies
- Make authentication more pluggable
- Change language of services -> providers
closes#1120
* feat: Collection to standard header
feat: Sticky tabs
* chore: Document to standard header
* chore: Dashboard -> Home
chore: Scene component
* chore: Trash, Templates, Drafts
* fix: Mobile improvements
* fix: Content showing at sides and occassionally ontop of sticky headers
* feat: add total users to pagination
* move this.total in runInAction callback
* add total counts + counts to people tabs
* progress: use raw pg query
* progress: add test
* fix: SQL interpolation
* Styling and translation of People page
Co-authored-by: Tim <timothychang94@gmail.com>
* feat: Added ability to disable sharing at collection
* fix: Disable all previous share links when disabling collection share
Language
* fix: Disable document sharing for read-only collection members
* wip
* test
* fix: Clear policies after updating sharing settings
* chore: Less ambiguous language
* feat: Allow setting sharing choice on collection creation
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* add google drawings integration
* add google drawings image
* update google drawings image and regex
* allow query parameter in google drawings regex
* support CDN for google drawings image
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Thai translations from Crowdin [ci skip]
* fix: New Italian translations from Crowdin [ci skip]
* fix: Restore DNS prefetching for static resources
* fix: CDN paths
feat: preload instead of prefetch for key bundles
* csp
* fix: Turns out prefetch-src is still behind a flag in Chrome, not publicly available yet
* implement google drive extension
* add current logo of google drive
* fix issue when posting gdrive links which are already a preview
* always only show the preview
* Add bottom bar to get to original url for Google Drive embeds
Co-authored-by: Tom Moor <tom.moor@gmail.com>
- Makes menus fully accessible and keyboard driven
- Currently adds 2.8% to initial bundle size due to the inclusion of Reakit and its dependency, popperjs.
- Converts all menus to functional components
- Remove old custom menu system
- Various layout and flow improvements around the menus
closes#1766
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* tweaking effect details
* wrap work on this feature
* adds correct color to drop cursor
* simplify logic for early return
* much better comment so Tom doesn't fire me
* feat: Allow changing sort order of collections
* refactor: Move validation to model
feat: Make custom order the default (in prep for dnd)
* feat: Add sort choice to edit collection modal
fix: Improved styling of generic InputSelect
* fix: Vertical space left after removing previous collection description
* chore: Tweak language, menu contents, add auto-disclosure on sub menus
* only show drop-to-reorder cursor when sort is set to manual
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* wip: added some basic drag and drop UI for combining items
* refactor: pathToDocument to accept only id
* fix: Multiple drop backends error
fix: Incorrect styling dragging over active collection
fix: Stay in disabled state until save is complete
* Improving display while moving doc
* fix: update by user should be changed when moving a doc
* add move guard to drag
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Spanish translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Japanese translations from Crowdin [ci skip]
* fix: New Portuguese translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: Attachments should not be deleted when their original document is deleted when referenced elsewhere
* fix: Attachments deleted prematurely when docs are placed in trash
* mock
* restore hook, cascading delete was the issue
* fix: New German translations from Crowdin [ci skip]
* fix: New German translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* fix: New French translations from Crowdin [ci skip]
* fix: New Portuguese, Brazilian translations from Crowdin [ci skip]
* Update server/api/share.js to send 204 status for unshared documents.
* Update shares.info endpoint to expect 204 in a few test.
* Update SharesStore and ApiClient to handle 204 status code
* feat: i18n
* Changing language single source of truth from TEAM to USER
* Changes according to @tommoor comments on PR
* Changed package.json for build:i18n and translation label
* Finished 1st MVP of i18n for outline
* new translation labels & Portuguese from Portugal translation
* Fixes from PR request
* Described language dropdown as an experimental feature
* Set keySeparator to false in order to cowork with html keys
* Added useTranslation to Breadcrumb
* Repositioned <strong> element
* Removed extra space from TemplatesMenu
* Fortified the test suite for i18n
* Fixed trans component problematic
* Check if selected language is available
* Update yarn.lock
* Removed unused Trans
* Removing debug variable from i18n init
* Removed debug variable
* test: update snapshots
* flow: Remove decorator usage to get proper flow typing
It's a shame, but hopefully we'll move to Typescript in the next 6 months and we can forget this whole Flow mistake ever happened
* translate: Drafts
* More translatable strings
* Mo translation strings
* translation: Search
* async translations loading
* cache translations in client
* Revert "cache translations in client"
This reverts commit 08fb61ce36.
* Revert localStorage cache for cache headers
* Update Crowdin configuration file
* Moved translation files to locales folder and fixed english text
* Added CONTRIBUTING File for CrowdIn
* chore: Move translations again to please CrowdIn
* fix: loading paths
chore: Add strings for editor
* fix: Improve validation on documents.import endpoint
* test: mock bull
* fix: Unknown mimetype should fallback to Markdown parsing if markdown extension (#1678)
* closes#1675
* Update CONTRIBUTING
* chore: Add link to translation portal from app UI
* refactor: Centralize language config
* fix: Ensure creation of i18n directory in build
* feat: Add language prompt
* chore: Improve contributing guidelines, add link from README
* chore: Normalize tab header casing
* chore: More string externalization
* fix: Language prompt in dark mode
Co-authored-by: André Glatzl <andreglatzl@gmail.com>
* Prevent API request for views data for deleted documents
Added a conditional statement to check if the document.deletedAt is falsy before making a request to views.list.
* Update app/components/Collaborators.js to use isDeleted attribute.
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* chore: Add additional missing events
signed in
profile updated
team setting updated
* Minor refactor to DRY existing code
* Add events
* lint
* flow: Add missing ip to event types
* feat: Sync sessions across browser tabs
If the user signs in or out in one tab, then make sure their session on the same subdomain is kept in sync on other tabs
* fix: Use get request instead of cookie to transfer token between domains
* Add domain to database
Add redirects to team domain when present
* 30s -> 1m
* fix: Avoid redirect loop if subdomain and domain set
* fix: Create a transfer specific token to prevent replay requests
* refactor: Move isCustomDomain out of shared as it won't work on the client
* Update backlinks service to not rely on revisions
* fix: Add missing index for finding backlinks
* Debounce revision creation (#1616)
* refactor debounce logic to service
* Debounce slack notification
* Revisions created by service
* fix: Revision sidebar latest
* test: Add tests for notifications
* feat: Support importing .docx or .html files as new documents (#1551)
* Support importing .docx as new documents
* Add html file support, build types and interface for easily adding file types to importer
* fix: Upload embedded images in docx to storage
* refactor: Bulk of logic to command
* refactor: Do all importing on server, so we're not splitting logic for import into two places
* test: Add documentImporter tests
Co-authored-by: Lance Whatley <whatl3y@gmail.com>
* fix: Accessibility audit
* fix: Quick fix, non editable title
closes#1560
* fix: Embed selection
Co-authored-by: Lance Whatley <whatl3y@gmail.com>
* Support importing .docx as new documents
* Add html file support, build types and interface for easily adding file types to importer
* fix: Upload embedded images in docx to storage
* refactor: Bulk of logic to command
* refactor: Do all importing on server, so we're not splitting logic for import into two places
* test: Add documentImporter tests
Co-authored-by: Lance Whatley <whatl3y@gmail.com>
* feat/editable-titles
* feat: Double click to edit titles in the sidebar
* Take into account policies
* fix: Title update on another client
* Improved styling
* refactor: Remove babel/register for instant production server startup
* fix: Update procfile location
* fix: package.json must be copied, not linked for production build
* fix: Production file paths
* fix: Public assets path
* Remove unused scripts
* fix: Focus ring appearing on click
fix: Focus ring not appearing on sidebar links
add: focus-visible polyfill
* fix: More visible outlines on keyboard focus
fix: Header block should be a button semantically
* core search logic
* bump version of rich markdown editor
* let shift and meta modifiers do their thing when clicking on a link in a doc
* version bump editor
* test: Add parseDocumentSlug test
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* handle delete events fron collection and document sockets
* handle collection deletes to documents
* rework semantics to always reload after a delete
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* fix: Remove limit of displayed results on Move dialog
* fix: Filter templates from results
* Show final document location on hover/active, reduces visual noise
* fix: Update package.json build script to yarn.
Update package.json build script to use yarn instead of npm to maintain consistency with the rest of scripts. I was running into an issue with the Dockerfile when using nvm with yarn and this fixed the issue.
* Upgrade pg and sequelize to support node 14+
When Node 14 came out the app was incompatible, we should always have a maximum version defined here until the server code has been tested to prove compatibility
Co-authored-by: Lance Whatley <whatl3y@gmail.com>
- Allow template move in document policy
- fix: Ensure that document is not added to collection structure in documentMover command
- fix: Moving a template should now show nested documents as options
- fix: Hitting 'm' should not allow moving a draft
- fix: Styling of seperators on move screen
2020-08-20 19:46:29 -07:00
1365 changed files with 79299 additions and 72755 deletions
<i>An open, extensible, wiki for your team built using React and Node.js.<br/>Try out Outline using our hosted version at <a href="https://www.getoutline.com">www.getoutline.com</a>.</i>
This is the source code that runs [**Outline**](https://www.getoutline.com) and all the associated services. If you want to use Outline then you don't need to run this code, we offer a hosted version of the app at [getoutline.com](https://www.getoutline.com).
If you'd like to run your own copy of Outline or contribute to development then this is the place for you.
## Installation
# Installation
Outline requires the following dependencies:
-Node.js >= 12
-Postgres >=9.5
-Redis >= 4
-AWS S3 storage bucket for media and other attachments
-Slack or Google developer application for authentication
- Slack, Google, Azure, or OIDC application for authentication
## Self-Hosted Production
### Development
### Docker
In development you can quickly get an environment running using Docker by following these steps:
For a manual self-hosted production installation these are the recommended steps:
1. First setup Redis and Postgres servers, this is outside the scope of the guide.
1. Download the latest official Docker image, new releases are available around the middle of every month:
`docker pull outlinewiki/outline`
1. Using the [.env.sample](.env.sample) as a reference, set the required variables in your production environment. You can export the environment variables directly, or create a `.env` file and pass it to the docker image like so:
`docker run --env-file=.env outlinewiki/outline`
1. Setup the database with `yarn db:migrate`. Production assumes an SSL connection to the database by default, if
Postgres is on the same machine and is not SSL you can migrate with `yarn db:migrate --env=production-ssl-disabled`, for example:
`docker run --rm outlinewiki/outline yarn db:migrate`
1. Start the container:
`docker run outlinewiki/outline`
1. Visit http://you_server_ip:3000 and you should be able to see Outline page
> Port number can be changed using the `PORT` environment variable
1. (Optional) You can add an `nginx` or other reverse proxy to serve your instance of Outline for a clean URL without the port number, support SSL, etc.
### Terraform
Alternatively a community member maintains a script to deploy Outline on Google Cloud Platform with [Terraform & Ansible](https://github.com/rjsgn/outline-terraform-ansible).
### Upgrading
#### Docker
If you're running Outline with Docker you'll need to run migrations within the docker container after updating the image. The command will be something like:
```shell
docker run --rm outlinewiki/outline:latest yarn db:migrate
```
#### Git
If you're running Outline by cloning this repository, run the following command to upgrade:
```shell
yarn run upgrade
```
## Local Development
For contributing features and fixes you can quickly get an environment running using Docker by following these steps:
1. Install these dependencies if you don't already have them
1. Register a Slack app at https://api.slack.com/apps
1. Copy the file `.env.sample` to `.env`
1. Fill out the following fields:
1.`SECRET_KEY` (follow instructions in the comments at the top of `.env`)
1.`SLACK_KEY` (this is called "Client ID" in Slack admin)
1.`SLACK_SECRET` (this is called "Client Secret" in Slack admin)
1. Configure your Slack app's Oauth & Permissions settings
1.Add `http://localhost:3000/auth/slack.callback` as an Oauth redirect URL
1.Ensure that the bot token scope contains at least `users:read`
1.`SECRET_KEY` (follow instructions in the comments at the top of `.env`)
1.`SLACK_KEY` (this is called "Client ID" in Slack admin)
1.`SLACK_SECRET` (this is called "Client Secret" in Slack admin)
1. Configure your Slack app's Oauth & Permissions settings
1.Slack recently prevented the use of `http` protocol for localhost. For local development, you can use a tool like [ngrok](https://ngrok.com) or a package like `mkcert`. ([How to use HTTPS for local development](https://web.dev/how-to-use-local-https/))
1.Add `https://my_ngrok_address/auth/slack.callback` as an Oauth redirect URL and update the `URL` env var to match
1. Ensure that the bot token scope contains at least `users:read`
1. Run `make up`. This will download dependencies, build and launch a development version of Outline
### Testing
### Production
The `Makefile` has other useful scripts, including some test automation.
For a self-hosted production installation there is more flexibility, but these are the suggested steps:
1. To run the entire test suite, run `make test`
1. During development, it's often useful, to re-run some tests every time a file is changed. Use `make watch` to start the test daemon and follow the instructions in the console
1. Clone this repo and install dependencies with `yarn` or `npm install`
# Contributing
> Requires [Node.js](https://nodejs.org/) and [yarn](https://yarnpkg.com) installed
Outline is built and maintained by a small team – we'd love your help to fix bugs and add features!
1. Build the web app with `yarn build:webpack` or `npm run build:webpack`
1. Using the `.env.sample` as a reference, set the required variables in your production environment. The following are required as a minimum:
1.`SECRET_KEY` (follow instructions in the comments at the top of `.env`)
1.`SLACK_KEY` (this is called "Client ID" in Slack admin)
1.`SLACK_SECRET` (this is called "Client Secret" in Slack admin)
1.`DATABASE_URL` (run your own local copy of Postgres, or use a cloud service)
1.`REDIS_URL` (run your own local copy of Redis, or use a cloud service)
1.`URL` (the public facing URL of your installation)
1.`AWS_` (all of the keys beginning with AWS)
1. Migrate database schema with `yarn sequelize:migrate` or `npm run sequelize:migrate `
1. Start the service with any daemon tools you prefer. Take PM2 for example, `NODE_ENV=production pm2 start index.js --name outline `
1. Visit http://you_server_ip:3000 and you should be able to see Outline page
Before submitting a pull request please let the core team know by creating or commenting in an issue on [GitHub](https://www.github.com/outline/outline/issues), and we'd also love to hear from you in the [Discussions](https://www.github.com/outline/outline/discussions). This way we can ensure that an approach is agreed on before code is written. This will result in a much higher liklihood of code being accepted.
> Port number can be changed in the `.env` file
If you’re looking for ways to get started, here's a list of ways to help us improve Outline:
1. (Optional) You can add an `nginx` reverse proxy to serve your instance of Outline for a clean URL without the port number, support SSL, etc.
- [Translation](docs/TRANSLATION.md) into other languages
- Issues with [`good first issue`](https://github.com/outline/outline/labels/good%20first%20issue) label
- Performance improvements, both on server and frontend
- Developer happiness and documentation
- Bugs and other issues listed on GitHub
## Architecture
## Development
If you're interested in contributing or learning more about the Outline codebase
please refer to the [architecture document](docs/ARCHITECTURE.md) first for a high level overview of how the application is put together.
### Server
## Debugging
Outline uses [debug](https://www.npmjs.com/package/debug). To enable debugging output, the following categories are available:
In development Outline outputs simple logging to the console, prefixed by categories. In production it outputs JSON logs, these can be easily parsed by your preferred log ingestion pipeline.
HTTP logging is disabled by default, but can be enabled by setting the `DEBUG=http` environment variable.
## Tests
We aim to have sufficient test coverage for critical parts of the application and aren't aiming for 100% unit test coverage. All API endpoints and anything authentication related should be thoroughly tested.
To add new tests, write your tests with [Jest](https://facebook.github.io/jest/) and add a file with `.test.js` extension next to the tested code.
Once the test database is created with `make test` you may individually run
frontend and backend tests directly.
```shell
# To run backend tests
yarn test:server
# To run frontend tests
yarn test:app
```
## Migrations
@@ -101,67 +174,6 @@ Or to run migrations on test database:
yarn sequelize db:migrate --env test
```
## Structure
Outline is composed of separate backend and frontend application which are both driven by the same Node process. As both are written in Javascript, they share some code but are mostly separate. We utilize the latest language features, including `async`/`await`, and [Flow](https://flow.org/) typing. Prettier and ESLint are enforced by CI.
### Frontend
Outline's frontend is a React application compiled with [Webpack](https://webpack.js.org/). It uses [Mobx](https://mobx.js.org/) for state management and [Styled Components](https://www.styled-components.com/) for component styles. Unless global, state logic and styles are always co-located with React components together with their subcomponents to make the component tree easier to manage.
The editor itself is built on [Prosemirror](https://github.com/prosemirror) and hosted in a separate repository to encourage reuse: [rich-markdown-editor](https://github.com/outline/rich-markdown-editor)
-`app/` - Frontend React application
-`app/scenes` - Full page views
-`app/components` - Reusable React components
-`app/stores` - Global state stores
-`app/models` - State models
-`app/types` - Flow types for non-models
### Backend
Backend is driven by [Koa](http://koajs.com/) (API, web server), [Sequelize](http://docs.sequelizejs.com/) (database) and React for public pages and emails.
-`server/api` - API endpoints
-`server/commands` - Domain logic, currently being refactored from /models
-`server/emails` - React rendered email templates
-`server/models` - Database models
-`server/policies` - Authorization logic
-`server/presenters` - API responses for database models
-`server/test` - Test helps and support
-`server/utils` - Utility methods
-`shared` - Code shared between frontend and backend applications
## Tests
We aim to have sufficient test coverage for critical parts of the application and aren't aiming for 100% unit test coverage. All API endpoints and anything authentication related should be thoroughly tested.
To add new tests, write your tests with [Jest](https://facebook.github.io/jest/) and add a file with `.test.js` extension next to the tested code.
```shell
# To run all tests
yarn test
# To run backend tests
yarn test:server
# To run frontend tests
yarn test:app
```
## Contributing
Outline is built and maintained by a small team – we'd love your help to fix bugs and add features!
However, before working on a pull request please let the core team know by creating or commenting in an issue on [GitHub](https://www.github.com/outline/outline/issues), and we'd also love to hear from you in the [Discussions](https://www.github.com/outline/outline/discussions). This way we can ensure that an approach is agreed on before code is written and will hopefully help to get your contributions integrated faster!
If you’re looking for ways to get started, here's a list of ways to help us improve Outline:
* Issues with [`good first issue`](https://github.com/outline/outline/labels/good%20first%20issue) label
* Performance improvements, both on server and frontend
* Developer happiness and documentation
* Bugs and other issues listed on GitHub
## License
Outline is [BSL 1.1 licensed](https://github.com/outline/outline/blob/master/LICENSE).
"description":"A 32-character secret key, generate with openssl rand -hex 32",
"generator":"secret",
"required":true
},
@@ -39,8 +43,12 @@
"value":"true",
"required":true
},
"ALLOWED_DOMAINS":{
"description":"Comma separated list of domains to be allowed (optional). If not set, all domains are allowed by default when using Google OAuth to signin. Consider putting {your app name}.herokuapp.com and any domain you are binding on in this list.",
"description":"https://{your app name}.herokuapp.com, or the domain you are binding to",
"required":true
},
"GOOGLE_CLIENT_ID":{
@@ -51,8 +59,51 @@
"description":"",
"required":false
},
"GOOGLE_ALLOWED_DOMAINS":{
"description":"Comma separated list of domains to be allowed (optional). If not set, all Google apps domains are allowed by default",
"AZURE_CLIENT_ID":{
"description":"To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See the guide for details on setting up your Azure App: https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4",
"required":false
},
"AZURE_CLIENT_SECRET":{
"description":"",
"required":false
},
"AZURE_RESOURCE_APP_ID":{
"description":"",
"required":false
},
"OIDC_CLIENT_ID":{
"description":"To configure generic OIDC auth, you'll need some kind of identity provider. See documentation for whichever IdP you use to acquire the following info; Redirect URI is https://<URL>/auth/oidc.callback",
"required":false
},
"OIDC_CLIENT_SECRET":{
"description":"",
"required":false
},
"OIDC_AUTH_URI":{
"description":"",
"required":false
},
"OIDC_TOKEN_URI":{
"description":"",
"required":false
},
"OIDC_USERINFO_URI":{
"description":"",
"required":false
},
"OIDC_USERNAME_CLAIM":{
"description":"Specify which claims to derive user information from. Supports any valid JSON path with the JWT payload",
"value":"preferred_username",
"required":false
},
"OIDC_DISPLAY_NAME":{
"description":"Display name for OIDC authentication",
"value":"OpenID",
"required":false
},
"OIDC_SCOPES":{
"description":"Space separated auth scopes.",
"value":"openid profile email",
"required":false
},
"SLACK_KEY":{
@@ -92,6 +143,11 @@
"value":"26214400",
"required":false
},
"AWS_S3_FORCE_PATH_STYLE":{
"description":"Use path-style URL's for connecting to S3 instead of subdomain. This is useful for S3-compatible storage.",
"value":"true",
"required":false
},
"AWS_REGION":{
"value":"us-east-1",
"description":"Region in which the above S3 bucket exists",
@@ -126,6 +182,15 @@
"description":"wikireply@example.com (optional)",
"required":false
},
"SMTP_SECURE":{
"value":"true",
"description":"Use a secure SMTP connection (optional)",
"description":"A logo that will be displayed on the signed out home page",
"required":false
},
"DEFAULT_LANGUAGE":{
"value":"en_US",
"description":"The default interface language. See translate.getoutline.com for a list of available language codes and their rough percentage translated.",
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.