* fix: New Russian translations from Crowdin [ci skip]
* fix: New Russian translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Korean translations from Crowdin [ci skip]
* fix: New Chinese Simplified translations from Crowdin [ci skip]
* fix: New German 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 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
* fixes#1457 – check for matchMedia function before using it
* fixes: Depth issues
closes#1458
* fixes: Long breadcrumbs cause horizontal overflow
* fix: Improve tabs and overflow on mobile
* feat: Move to React.lazy
* perf: Remove duplicate babel/runtime
* fix: Run yarn-deduplicate
* Further attempts to remove rich-markdown-editor from initial chunk
* perf: Lazy loading of authenticated routes
* perf: Move color picker to async loading
fix: Display placeholder when loading rich editor
* fix: Cache bust on auto reload
* chore: Experiment with bundle size monitoring service
* chore: Ensure build runs on CI, move lint and flow before test
* chore: Upgrade Webpack v3 -> v4
* chore: Add webpack-cli
Remove unused dep
Move deps to dev
* Move babel deps to production
* Move babel deps to production
* Migrations
* New from template
* fix: Don't allow public share of template
* chore: Template badges
* fix: Collection active
* feat: New doc button on template list item
* feat: New template menu
* fix: Sorting
* feat: Templates onboarding notice
* fix: New doc button showing on archived/deleted templates
* add migrations
* first pass at API
* feat: Updated share dialog UI
* tests
* test
* styling tweaks
* feat: Show share state on document
* fix: Allow publishing share links for draft docs
* test: shares.info
* stash
* refactor
* refactor, styling
* tweaks
* pointer
* styling
* fi: Hide when printing
* fix: No hover cards on shared links
* remove suppressions no longer needed
* fix: Don't show hover cards when editing, they get in the way
* fix: Prevent hover card from going off rhs edge of screen
* fix: Remount hover card when changing between links
* fix: allow one part domains in links (#1350)
* allow one part domains in links
* no TLD when only one part domain
* return null for parseDomain of empty string
* fix fiddly hover preview behavior
* WIP
* refactor hover preview
* fix: Non-rounded bottom corners
* fix: Fixes an edgecase where mounting the nested editor in hovercard causesdocument to scroll if there is a hash in the url
* fix: Incorrect document preview rendering
* lint
Co-authored-by: Nan Yu <thenanyu@gmail.com>
Co-authored-by: Nan Yu <nan@getoutline.com>
* wip: Working for creation, and display
* feat: IconPicker
* fix
* feat: Invert collection icon color when dark in dark mode
* Improve readability of dropdown menus in dark mode
Suggest icon based on collection name
* Add additional icons
Tweaks and final polish
* fix: Write default icon as empty icon column
* feat: Improve icon selection logic
add more keywords
Improve icon coloring when selected and in dark mode
* lint
* lint
* feat: Add ability to create docs from link editor
* fix: Handling of paste and click events
* fix: Filter untitled documents from search results
* refactor: Move onCreateLink to DataLoader
* bump rme
* fix: Don't set cookie domain when not using multiple subdomains
* wip logging domain
* wip logging domain
* wip logging domain
* wip logging domain
* Revert "wip logging domain"
This reverts commit 325907e749.
* Revert "wip logging domain"
This reverts commit 6ee095a49e.
* Revert "wip logging domain"
This reverts commit 813d8eb960.
* Revert "wip logging domain"
This reverts commit f1ca819276.
* Remove SUBDOMAINS_ENABLED from documented env variables, no-one self hosting should need this – it just adds confusion to those looking to host on a single subdomain
fix: Account for server/client process.env parsing
Co-authored-by: Nan Yu <nanyu@Nans-MBP-2.lan>
Co-authored-by: Nan Yu <nan@getoutline.com>
* Improve performance in dev by running Node/Yarn outside of docker
* Transpose exposed port numbers by 100, so less likely conflict with host processes
* Move editor version to header
Add editor version check for API endpoints
* fix: Editor update auto-reload
Bump RME
* fix: Only redirect if editor header exists
* lint
* first pass at updating all Time components each second
* fix a couple date variable typos
* use class style state management instead of hooks
* wip: Separate title from body
* address feedback
* test: Remove unused test
* feat: You in publishing info language
fix: Removal of secondary headings
* After much deliberation… a migration is needed for this to be reliable
* fix: Export to work with new title structure
* fix: Untitled
* fix: Consistent spacing of first editor node
* fix: Emoji in title handling
* fix: Time component not updating for new props
* chore: Add createdAt case
* fix: Conflict after merging new TOC
* PR feedback
* lint
* fix: Heading level adjustment
Co-authored-by: Taylor Lapeyre <taylorlapeyre@gmail.com>
* fix: Server error if attempting to load an unknown attachment
* fix: Migration should cascade delete to document attachments
* fix: Delete S3 attachments along with documents
* first pass at updating all Time components each second
* fix a couple date variable typos
* use class style state management instead of hooks
* address feedback
* lint
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* docs: Add documentation for groups API endpoints
fix: Remove useless permission query param
* restore permission filter on collections.group_memberships
* tweak language
* Split up check for Slack environment variables
This allows for the Slack slash command to be used without
needing Slack sign in enabled.
* Remove conditional checking for slack app id
Co-authored-by: Bryan Joseph <bryanjos@users.noreply.github.com>
* WIP - got one API test to pass yay
* adds group update endpoint
* added group policies
* adds groups.list API
* adds groups.info
* remove comment
* WIP
* tests for delete
* adds group membership list
* adds tests for groups list
* add and remove user endpoints for group
* ask some questions
* fix up some issues around primary keys
* remove export from group permissions
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* remove random file
* only create events on actual updates, add tests to ensure
* adds uniqueness validation to group name
* throw validation errors on model and let it pass through the controller
* fix linting
* WIP
* WIP
* WIP
* WIP
* WIP basic edit and delete
* basic CRUD for groups and memberships in place
* got member counts working
* add member count and limit the number of users sent over teh wire to 6
* factor avatar with AvatarWithPresence into its own class
* wip
* WIP avatars in group lists
* WIP collection groups
* add and remove group endpoints
* wip add collection groups
* wip get group adding to collections to work
* wip get updating collection group memberships to work
* wip get new group modal working
* add tests for collection index
* include collection groups in the withmemberships scope
* tie permissions to group memberships
* remove unused import
* Update app/components/GroupListItem.js
update title copy
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update server/migrations/20191211044318-create-groups.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update server/api/groups.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update server/api/groups.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/menus/CollectionMenu.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update server/models/Group.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* minor fixes
* Update app/scenes/CollectionMembers/AddGroupsToCollection.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/menus/GroupMenu.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/menus/GroupMenu.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/menus/GroupMenu.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/Collection.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/CollectionMembers/CollectionMembers.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/GroupNew.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/GroupNew.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/Settings/Groups.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update server/api/documents.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* Update app/scenes/CollectionMembers/components/CollectionGroupMemberListItem.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* address comments
* WIP - getting websocket stuff up and running
* socket event for group deletion
* wrapped up cascading deletes
* lint
* flow
* fix: UI feedback
* fix: Facepile size
* fix: Lots of missing await's
* Allow clicking facepile on group list item to open members
* remove unused route push, grammar
* fix: Remove bad analytics events
feat: Add group events to audit log
* collection. -> collections.
* Add groups to entity websocket events (sync create/update/delete) between clients
* fix: Users should not be able to see groups they are not a member of
* fix: Not caching errors in UI when changing group memberships
* fix: Hide unusable UI
* test
* fix: Tweak language
* feat: Automatically open 'add member' modal after creating group
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* save images as private and serve via signed url from images.info api
* download private images to directory on export
* fix lint errors
* private s3 default, AWS.s3 module level scope, default s3 url expiry
* combine regex to one, and only replace when there are matches
* fix lint
* code not needed anymore, remove
* updates after pulling master
* revert the uploadToS3FromUrl url return
* use model gettr to compact code, rename to attachments api
* basic checking of document read permission to allow attachment viewing
* fix: Continue to upload avatars as public
fix: Allow redirect for non-private attachments
* add support for publicly shared documents
* catch errors which crash the app during zip export and user creation
* add tests
* enable AWS signature v4 for s3
* switch to use factories to build models for testing
* add isDocker flag for local serving of attachment redirect url
* fix redirect tests
Co-authored-by: Tom Moor <tom.moor@gmail.com>
* Update websockets to allow joining document-based rooms
* dynamic websocket joining
* emit user.join/leave events when entering and exiting document rooms
* presence storage
* feat: frontend presence store
* lint
* UI updates
* First pass editing state
* refactoring
* Timeout per user/doc
lint
* Document data loading refactor to keep Socket mounted
* restore: Mark as viewed functionality
Add display of 'you' to collaborators
* fix: Socket/document remount when document slug changes due to title change
* Revert unneccessary package update
* Move editing ping interval to a shared constant
* fix: Flash of sidebar when loading page directly on editing mode
* separate document and revision loading
* add comments for socket events
* fix: Socket events getting bound multiple times on reconnect
* fix: Clear client side presence state on disconnect
* fix: Don't ignore server side error
Improved documentation
* More comments / why comments
* rename Socket -> SocketPresence
* fix: Handle redis is down
remove unneccessary join
* fix: PR feedback
* changes to support Plainhome
* changes to env sample
* changes to env variable names
* formatter fixes
* remove the content pages
* test fix
* lint fixes
* minor fixes
* removed unnesscary routes
* Apply suggestions from code review
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* removed team name from env
* ensuring dropdowns fit on the screen
* refactoring
* fix flow types
* no longer fixing the elements which should resolve scrolling issues
* fix menus that should be fixed
* styled-components syntax was wrong
* account for fixed dropdowns when handling overflowing menus
* Update app/components/DropdownMenu/DropdownMenu.js
Co-Authored-By: Tom Moor <tom.moor@gmail.com>
* add policy serialize method
* Add policies to collection responses
* wip
* test: remove .only
* refactor: Return policies with team and document requests
* store policies on the client
* refactor: drive admin UI from policies
* feat: Record events in DB
* feat: events API
* First pass, hacky activity feed
* WIP
* Reset dashboard
* feat: audit log UI
feat: store ip address
* chore: Document events.list api
* fix: command specs
* await event create
* fix: backlinks service
* tidy
* fix: Hide audit log menu item if not admin
* feat: New onboarding documents
* Images -> blocks
* Add tips
* test: removes assumptions of welcome documents
this actually results in the tests being much more understandable too
* add db flag when document was created from welcome flow
* intial commiy
* cleaning code
* added makeCredential to s3.js and removed extra module dependecy
* lint fixes
* minor fix
* minor fixes
* changed encoding type from string to any
* added new env var to env.sample
* added ability to append to documents. Added test cases for the same
* made changes required for lint test
* updated snapshot for document.test.js to reflect new test cases added
* append should not enforce newline character
* Atom / RSS meta link
* Spike
* Feeling good about this spike now
* Remove document.collection
* Remove koa.ctx from all presenters to make them portable outside requests
* Remove full serialized model from events
Move events.add to controllers for now, will eventually be in commands
* collections.create event
parentDocument -> parentDocumentId
* Fix up deprecated tests
* Fixed: Doc creation
* documents.move
* Handle collection deleted
* 💚
* Authorize room join requests
* Move starred data structure
Account for documents with no context on sockets
* Add socket.io-redis
* Add WEBSOCKETS_ENABLED env variable to disable websockets entirely for self hosted
New installations will default to true, existing installations to false
* 💚 No need for promise response here
* Reload notice
Fixed cmd+enter shortcut to publish doc
Fixed keyboard shortcut display on non-mac
Fixed heading alignment
Fixed documents smaller than page should not scroll
* Adding app.json for Heroku -- Procfile already exists
* Removed required false and changed values to strings
* Required is required!
* Tested and working install
* Apply suggestions from code review
Thanks to @tommoor for updating the descriptions for items I wasn't sure about. Added!
Co-Authored-By: bmann <boris@bmannconsulting.com>
* missing coma
Results no longer disappear when searching something previously searched
Navigating from a document back to results is now instant
Search item in left nav no longer unhighlights
* Display who has viewed a document in the header
* Add overflow, display of WHEN last viewed
Cleanup old document attributes
Add firstViewedAt, lastViewedAt to API response
* Cleanup
* Added: API documentation for views endpoints
* Include views for deleted users
Added: Unsubscribe option to notification email footers
Added: Two new notification types (emails not written yet)
Fixed: Validation added to notification setting events
* Big upgrades
* WIP: Stash
* Stash, 30 flow errors left
* Downgrade mobx
* WIP
* When I understand the difference between class and instance methods
* 💚
* Fixes: File import
Model saving edge cases
pinning and starring docs
Collection editing
Upgrade mobx devtools
* Notification settings saving works
* Disabled settings
* Document mailer
* Working notifications
* Colletion created notification
Ensure not notified for own actions
* Tidy up
* Document updated event only for document creation
Add indexes
Notification setting on user creation
* Commentary
* Fixed: Notification setting on signup
* Fix document move / duplicate stale data
Add BaseModel.refresh method
* Fixes: Title in sidebar not updated after editing document
* 💚
* Improve / restore error handling
Better handle offline errors
* 👕
The max size should be an integer rather than a string (environment variables
are strings). More strict s3 implementations reject the upload because they do
not consider the policy valid if a string is used rather than an integer.
* Stash. Super rough progress
* Stash
* 'h' how toggles history panel
Add documents.restore endpoint
* Add tests for documents.restore endpoint
* Document restore endpoint
* Tiding, RevisionMenu, remove scroll dep
* Add history menu item
* Paginate loading
* Fixed: Error boundary styling
Select first revision faster
* Diff summary, styling
* Add history loading placeholder
Fix move modal not opening
* Fixes: Refreshing page on specific revision
* documentation for document.revision
* Better handle versions with no text changes (will no longer be created)
<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>
<a href="https://spectrum.chat/outline" rel="nofollow"><img src="https://withspectrum.github.io/badge/badge.svg" alt="Join the community on Spectrum"/></a>
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).
@@ -20,26 +23,81 @@ If you'd like to run your own copy of Outline or contribute to development then
1. Register a Slack app at https://api.slack.com/apps
1. Copy the file `.env.sample` to `.env` and fill out the Slack keys, everything
else should work well for development.
1. Run `make up`. This will download dependencies, build and launch a development version of Outline.
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. Run `make up`. This will download dependencies, build and launch a development version of Outline
### Upgrade
#### 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:
```
docker run --rm outlinewiki/outline:latest yarn sequelize:migrate
```
#### Yarn
If you're running Outline by cloning this repository, run the following command to upgrade:
```
yarn run upgrade
```
## Development
### Server
To enable debugging statements, set the following env vars:
Outline uses [debug](https://www.npmjs.com/package/debug). To enable debugging output, the following categories are available:
@@ -59,13 +117,13 @@ 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 latest language features, including `async`/`await`, and [Flow](https://flow.org/) typing. Prettier and ESLint are ran as pre-commit hooks.
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 ontop of [Slate](https://github.com/ianstormtaylor/slate) and hosted in a separate repository to encourage reuse: [rich-markdown-editor](https://github.com/outline/rich-markdown-editor)
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
@@ -79,22 +137,33 @@ The editor itself is built ontop of [Slate](https://github.com/ianstormtaylor/sl
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 (Sequelize)
-`server/pages` - Server-side rendered public pages (React)
-`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, and it's generally good to add tests for backend features and code.
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
yarntest
maketest
# To run backend tests in watch mode
make watch
```
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
@@ -104,18 +173,18 @@ yarn test:app
## Contributing
Outline is still built and maintained by a small team – we'd love your help to fix bugs and add features!
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 our [Spectrum community](https://spectrum.chat/outline). 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!
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:
* [Translation](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
* Helping others on Spectrum
## License
Outline is [BSD licensed](/blob/master/LICENSE).
Outline is [BSL 1.1 licensed](https://github.com/outline/outline/blob/master/LICENSE).
The Outline team takes security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.
To report a security issue, email [hello@getoutline.com](mailto:hello@getoutline.com) and include the word "SECURITY" in the subject line.
The Outline team will send a response indicating the next steps in handling your report. After the initial reply to your report you will be kept informed of the progress towards a fix and full announcement.
Report security bugs in third-party dependencies to the person or team maintaining the module. You can also report a vulnerability through the [Node Security Project](https://nodesecurity.io/report).
Outline is localized through community contributions. The text in Outline's user interface is in American English by default, we're very thankful for all help that the community provides bringing the app to different languages.
## Externalizing strings
Before a string can be translated, it must be externalized. This is the process where English strings in the source code are wrapped in a function that retrieves the translated string for the user’s language.
For externalization we use [react-i18next](https://react.i18next.com/), this provides the hooks [useTranslation](https://react.i18next.com/latest/usetranslation-hook) and the [Trans](https://react.i18next.com/latest/trans-component) component for wrapping English text.
PR's are accepted for wrapping English strings in the codebase that were not previously externalized.
## Translating strings
To manage the translation process we use [CrowdIn](https://translate.getoutline.com/), it keeps track of which strings in which languages still need translating, synchronizes with the codebase automatically, and provides a great editor interface.
You'll need to create a free account to use CrowdIn. Once you have joined, you can provide translations by following these steps:
1. Select the language for which you want to contribute (or vote for) a translation (below the language you can see the progress of the translation)

2. Please choose the translation.json file from your desired language
3. Once a file is selected, all the strings associated with the version are displayed on the left side. To display the untranslated strings first, select the filter icon next to the search bar and select “All, Untranslated First”.The red square next to an English string shows that a string has not been translated yet. To provide a translation, select a string on the left side, provide a translation in the target language in the text box in the right side (singular and plural) and press the save button. As soon as a translation has been provided by another user (green square next to string), you can also vote on a translation provided by another user. The translation with the most votes is used unless a different translation has been approved by a proof reader. 
## Proofreading
Once a translation has been provided, a proof reader can approve the translation and mark it for use in Outline.
If you are interested in becoming a proof reader, please contact one of the project managers in the Outline CrowdIn project or contact [@tommoor](https://github.com/tommoor). Similarly, if your language is not listed in the list of CrowdIn languages, please contact our project managers or [send us an email](https://www.getoutline.com/contact) so we can add your language.
## Release
Updated translations are automatically PR'd against the codebase by a bot and will be merged regularly so that new translations appear in the next release of Outline.
"description":"See https://developers.google.com/identity/protocols/OAuth2 to create a new Google OAuth client. You must configure at least one of Slack or Google to control login.",
"required":false
},
"GOOGLE_CLIENT_SECRET":{
"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",
"required":false
},
"SLACK_KEY":{
"description":"See https://api.slack.com/apps to create a new Slack app. You must configure at least one of Slack or Google to control login.",
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.