├── .csharpierrc.yaml ├── scripts └── db_tools │ └── .npmrc ├── src ├── RealtimeServer │ ├── .npmrc │ ├── .prettierignore │ ├── common │ │ ├── models │ │ │ ├── project-role.ts │ │ │ ├── owned-data.ts │ │ │ ├── writing-system.ts │ │ │ ├── schema-version.ts │ │ │ ├── system-role.ts │ │ │ ├── site.ts │ │ │ ├── project-data.ts │ │ │ ├── project.ts │ │ │ └── validation-schema.ts │ │ ├── utils │ │ │ └── type-utils.ts │ │ ├── connect-session.ts │ │ ├── tsconfig.build-esm.json │ │ └── tsconfig.build.json │ ├── typings │ │ ├── ot-json0.d.ts │ │ ├── json0-ot-diff.d.ts │ │ ├── sharedb-milestone-mongo.d.ts │ │ ├── websocket-json-stream.d.ts │ │ ├── sharedb-mongo.d.ts │ │ └── sharedb-mingo-memory.d.ts │ ├── scriptureforge │ │ ├── models │ │ │ ├── text-anchor.ts │ │ │ ├── like.ts │ │ │ ├── audio-timing.ts │ │ │ ├── text-info-permission.ts │ │ │ ├── biblical-terms-config.ts │ │ │ ├── paratext-user-profile.ts │ │ │ ├── biblical-term-definition.ts │ │ │ ├── biblical-term-note-heading-info.ts │ │ │ ├── lynx-config.ts │ │ │ ├── text-document.ts │ │ │ ├── comment.ts │ │ │ ├── editor-tab.ts │ │ │ ├── sync.ts │ │ │ ├── checking-config.ts │ │ │ ├── note-tag.ts │ │ │ ├── lynx-insight-user-data.ts │ │ │ ├── editor-tab-persist-data.ts │ │ │ ├── note.ts │ │ │ └── answer.ts │ │ ├── services │ │ │ ├── text-migrations.ts │ │ │ ├── text-audio-migrations.ts │ │ │ ├── biblical-term-migrations.ts │ │ │ ├── text-document-migrations.ts │ │ │ ├── training-data-migrations.ts │ │ │ └── sf-project-data-service.ts │ │ ├── tsconfig.build-esm.json │ │ └── tsconfig.build.json │ ├── tsconfig.build.json │ ├── tsconfig.build-esm.json │ └── jest.config.js ├── SIL.XForge.Scripture │ ├── ClientApp │ │ ├── e2e │ │ │ ├── components │ │ │ │ └── my-projects.ts │ │ │ ├── update-help-site-screenshots.sh │ │ │ └── test_characterization.json │ │ ├── src │ │ │ ├── app │ │ │ │ ├── project │ │ │ │ │ ├── project.component.scss │ │ │ │ │ └── project.component.html │ │ │ │ ├── event-metrics │ │ │ │ │ ├── event-metrics.component.scss │ │ │ │ │ ├── event-metric-dialog.component.scss │ │ │ │ │ ├── event-metrics.component.html │ │ │ │ │ ├── event-metrics-log.component.scss │ │ │ │ │ └── event-metrics.component.ts │ │ │ │ ├── shared │ │ │ │ │ ├── sf-tab-group │ │ │ │ │ │ ├── tab │ │ │ │ │ │ │ ├── tab.component.scss │ │ │ │ │ │ │ ├── tab-body │ │ │ │ │ │ │ │ ├── tab-body.component.html │ │ │ │ │ │ │ │ ├── tab-body.component.scss │ │ │ │ │ │ │ │ └── tab-body.component.ts │ │ │ │ │ │ │ └── tab.component.html │ │ │ │ │ │ ├── tab-group.component.scss │ │ │ │ │ │ ├── base-services │ │ │ │ │ │ │ ├── tab-factory.service.ts │ │ │ │ │ │ │ └── tab-menu.service.ts │ │ │ │ │ │ ├── tab-header │ │ │ │ │ │ │ ├── tab-header.directive.ts │ │ │ │ │ │ │ └── tab-header.component.html │ │ │ │ │ │ ├── sf-tabs-config.ts │ │ │ │ │ │ ├── sf-tabs.types.ts │ │ │ │ │ │ ├── tab-group-header │ │ │ │ │ │ │ └── tab-scroll-button │ │ │ │ │ │ │ │ └── tab-scroll-button.component.html │ │ │ │ │ │ └── sf-tabs-providers.ts │ │ │ │ │ ├── book-multi-select │ │ │ │ │ │ ├── book-multi-select.ts │ │ │ │ │ │ └── _book-multi-select-theme.scss │ │ │ │ │ ├── notice │ │ │ │ │ │ ├── notice.component.html │ │ │ │ │ │ └── notice.types.ts │ │ │ │ │ ├── copyright-banner │ │ │ │ │ │ ├── copyright-banner.component.scss │ │ │ │ │ │ └── copyright-banner.component.html │ │ │ │ │ ├── info │ │ │ │ │ │ ├── info.component.html │ │ │ │ │ │ └── info.stories.ts │ │ │ │ │ ├── text │ │ │ │ │ │ └── text-note-dialog │ │ │ │ │ │ │ ├── text-note-dialog.component.scss │ │ │ │ │ │ │ └── text-note-dialog.component.html │ │ │ │ │ ├── working-animated-indicator │ │ │ │ │ │ ├── working-animated-indicator.component.html │ │ │ │ │ │ └── working-animated-indicator.component.ts │ │ │ │ │ ├── mobile-not-supported │ │ │ │ │ │ ├── mobile-not-supported.component.html │ │ │ │ │ │ └── mobile-not-supported.component.ts │ │ │ │ │ ├── page-not-found │ │ │ │ │ │ ├── page-not-found.component.scss │ │ │ │ │ │ └── page-not-found.component.html │ │ │ │ │ ├── global-notices │ │ │ │ │ │ ├── global-notices.component.scss │ │ │ │ │ │ └── global-notices.stories.ts │ │ │ │ │ ├── audio │ │ │ │ │ │ ├── audio-player │ │ │ │ │ │ │ └── audio-player.component.scss │ │ │ │ │ │ └── audio-time-pipe.ts │ │ │ │ │ └── share │ │ │ │ │ │ └── share-button.component.html │ │ │ │ ├── translate │ │ │ │ │ ├── draft-generation │ │ │ │ │ │ ├── draft-download-button │ │ │ │ │ │ │ └── draft-download-button.component.scss │ │ │ │ │ │ ├── language-codes-confirmation │ │ │ │ │ │ │ └── language-codes-confirmation.component.scss │ │ │ │ │ │ ├── draft-history-list │ │ │ │ │ │ │ └── draft-history-list.component.scss │ │ │ │ │ │ ├── training-data │ │ │ │ │ │ │ └── training-data-multi-select.component.scss │ │ │ │ │ │ ├── confirm-sources │ │ │ │ │ │ │ └── _confirm-sources-theme.scss │ │ │ │ │ │ ├── draft-usfm-format │ │ │ │ │ │ │ └── _draft-usfm-format-theme.scss │ │ │ │ │ │ └── draft-source.ts │ │ │ │ │ ├── font-unsupported-message │ │ │ │ │ │ └── font-unsupported-message.component.scss │ │ │ │ │ ├── editor │ │ │ │ │ │ ├── lynx │ │ │ │ │ │ │ └── insights │ │ │ │ │ │ │ │ ├── lynx-insight-scroll-position-indicator │ │ │ │ │ │ │ │ └── lynx-insight-scroll-position-indicator.component.html │ │ │ │ │ │ │ │ ├── lynx-insight-editor-objects │ │ │ │ │ │ │ │ └── lynx-insight-editor-objects.component.html │ │ │ │ │ │ │ │ ├── base-services │ │ │ │ │ │ │ │ ├── editor-ready.service.ts │ │ │ │ │ │ │ │ └── editor-segment.service.ts │ │ │ │ │ │ │ │ └── lynx-insight-action-prompt │ │ │ │ │ │ │ │ └── lynx-insight-action-prompt.component.html │ │ │ │ │ │ ├── save-note-parameters.ts │ │ │ │ │ │ ├── editor-draft │ │ │ │ │ │ │ └── _editor-draft-theme.scss │ │ │ │ │ │ ├── _editor-theme.scss │ │ │ │ │ │ └── note-dialog │ │ │ │ │ │ │ └── _note-dialog-theme.scss │ │ │ │ │ └── biblical-terms │ │ │ │ │ │ ├── biblical-term-dialog.component.scss │ │ │ │ │ │ └── _biblical-terms-theme.scss │ │ │ │ ├── machine-api │ │ │ │ │ ├── resource-dto.ts │ │ │ │ │ ├── translation-source.ts │ │ │ │ │ ├── aligned-word-pair-dto.ts │ │ │ │ │ ├── quotation-denormalization.ts │ │ │ │ │ ├── translation-engine-stats.ts │ │ │ │ │ ├── phrase-dto.ts │ │ │ │ │ ├── segment-pair-dto.ts │ │ │ │ │ ├── word-graph-dto.ts │ │ │ │ │ ├── build-states.ts │ │ │ │ │ ├── engine-dto.ts │ │ │ │ │ ├── word-graph-arc-dto.ts │ │ │ │ │ └── translation-result-dto.ts │ │ │ │ ├── serval-administration │ │ │ │ │ ├── date-range-picker.component.scss │ │ │ │ │ ├── site-event-metrics.component.scss │ │ │ │ │ ├── site-event-metrics.component.html │ │ │ │ │ ├── serval-administration.component.scss │ │ │ │ │ ├── serval-projects.component.scss │ │ │ │ │ └── serval-project.component.scss │ │ │ │ ├── users │ │ │ │ │ ├── users.component.html │ │ │ │ │ └── users.component.ts │ │ │ │ ├── core │ │ │ │ │ └── models │ │ │ │ │ │ ├── sf-project-create-settings.ts │ │ │ │ │ │ ├── share-link-type.ts │ │ │ │ │ │ ├── texts-by-book-id.ts │ │ │ │ │ │ ├── invitee-status.ts │ │ │ │ │ │ ├── transcelerator-question.ts │ │ │ │ │ │ ├── paratext-project.ts │ │ │ │ │ │ ├── sf-project-doc.ts │ │ │ │ │ │ ├── text-audio-doc.ts │ │ │ │ │ │ ├── edited-segment-data.ts │ │ │ │ │ │ └── training-data-doc.ts │ │ │ │ ├── checking │ │ │ │ │ ├── checking │ │ │ │ │ │ ├── test-audio │ │ │ │ │ │ │ ├── test-audio-player.webm │ │ │ │ │ │ │ ├── test-audio-short.mp3 │ │ │ │ │ │ │ ├── test-audio-short.webm │ │ │ │ │ │ │ └── test-audio-player-b.webm │ │ │ │ │ │ ├── checking-text │ │ │ │ │ │ │ ├── checking-text.component.html │ │ │ │ │ │ │ └── checking-text.component.scss │ │ │ │ │ │ ├── checking-audio-player │ │ │ │ │ │ │ └── checking-audio-player.component.scss │ │ │ │ │ │ └── _checking-theme.scss │ │ │ │ │ ├── import-questions-dialog │ │ │ │ │ │ └── import-questions-confirmation-dialog │ │ │ │ │ │ │ └── import-questions-confirmation-dialog.component.scss │ │ │ │ │ └── attach-audio │ │ │ │ │ │ └── attach-audio.component.scss │ │ │ │ ├── project-select │ │ │ │ │ └── project-select.component.scss │ │ │ │ ├── settings │ │ │ │ │ └── delete-project-dialog │ │ │ │ │ │ └── delete-project-dialog.component.scss │ │ │ │ ├── scripture-chooser-dialog │ │ │ │ │ └── scripture-chooser-dialog.component.scss │ │ │ │ └── navigation │ │ │ │ │ └── _navigation-theme.scss │ │ │ ├── typings │ │ │ │ ├── process.d.ts │ │ │ │ └── rich-text.d.ts │ │ │ ├── assets │ │ │ │ ├── icons │ │ │ │ │ ├── sd.ico │ │ │ │ │ ├── sf-72x72.png │ │ │ │ │ ├── sf-96x96.png │ │ │ │ │ ├── sf-128x128.png │ │ │ │ │ ├── sf-144x144.png │ │ │ │ │ ├── sf-152x152.png │ │ │ │ │ ├── sf-192x192.png │ │ │ │ │ ├── sf-384x384.png │ │ │ │ │ ├── sf-512x512.png │ │ │ │ │ └── TagIcons │ │ │ │ │ │ ├── 02tag1.png │ │ │ │ │ │ ├── 02tag2.png │ │ │ │ │ │ ├── 02tag3.png │ │ │ │ │ │ ├── 02tag4.png │ │ │ │ │ │ ├── 02tag5.png │ │ │ │ │ │ ├── 01flag1.png │ │ │ │ │ │ ├── 01flag2.png │ │ │ │ │ │ ├── 01flag3.png │ │ │ │ │ │ ├── 01flag4.png │ │ │ │ │ │ ├── 01flag5.png │ │ │ │ │ │ ├── 06star1.png │ │ │ │ │ │ ├── 06star2.png │ │ │ │ │ │ ├── 06star3.png │ │ │ │ │ │ ├── 06star4.png │ │ │ │ │ │ ├── 06star5.png │ │ │ │ │ │ ├── 12square1.png │ │ │ │ │ │ ├── 12square2.png │ │ │ │ │ │ ├── 12square3.png │ │ │ │ │ │ ├── 12square4.png │ │ │ │ │ │ ├── 12square5.png │ │ │ │ │ │ ├── 14circle1.png │ │ │ │ │ │ ├── 14circle2.png │ │ │ │ │ │ ├── 14circle3.png │ │ │ │ │ │ ├── 14circle4.png │ │ │ │ │ │ ├── 14circle5.png │ │ │ │ │ │ ├── conflict1.png │ │ │ │ │ │ ├── conflict4.png │ │ │ │ │ │ ├── conflict5.png │ │ │ │ │ │ ├── spelling1.png │ │ │ │ │ │ ├── spelling2.png │ │ │ │ │ │ ├── spelling4.png │ │ │ │ │ │ ├── spelling5.png │ │ │ │ │ │ ├── spelling6.png │ │ │ │ │ │ ├── 03question1.png │ │ │ │ │ │ ├── 03question2.png │ │ │ │ │ │ ├── 03question3.png │ │ │ │ │ │ ├── 03question4.png │ │ │ │ │ │ ├── 03question5.png │ │ │ │ │ │ ├── 05asterisk1.png │ │ │ │ │ │ ├── 05asterisk2.png │ │ │ │ │ │ ├── 05asterisk3.png │ │ │ │ │ │ ├── 05asterisk4.png │ │ │ │ │ │ ├── 05asterisk5.png │ │ │ │ │ │ ├── 08refresh1.png │ │ │ │ │ │ ├── 08refresh2.png │ │ │ │ │ │ ├── 08refresh3.png │ │ │ │ │ │ ├── 08refresh4.png │ │ │ │ │ │ ├── 08refresh5.png │ │ │ │ │ │ ├── 09padlock1.png │ │ │ │ │ │ ├── 09padlock2.png │ │ │ │ │ │ ├── 09padlock3.png │ │ │ │ │ │ ├── 09padlock4.png │ │ │ │ │ │ ├── 09padlock5.png │ │ │ │ │ │ ├── 10picture1.png │ │ │ │ │ │ ├── 10picture2.png │ │ │ │ │ │ ├── 10picture3.png │ │ │ │ │ │ ├── 10picture4.png │ │ │ │ │ │ ├── 10picture5.png │ │ │ │ │ │ ├── 13diamond1.png │ │ │ │ │ │ ├── 13diamond2.png │ │ │ │ │ │ ├── 13diamond3.png │ │ │ │ │ │ ├── 13diamond4.png │ │ │ │ │ │ ├── 13diamond5.png │ │ │ │ │ │ ├── consultant1.png │ │ │ │ │ │ ├── consultant2.png │ │ │ │ │ │ ├── consultant3.png │ │ │ │ │ │ ├── 04exclamation1.png │ │ │ │ │ │ ├── 04exclamation2.png │ │ │ │ │ │ ├── 04exclamation3.png │ │ │ │ │ │ ├── 04exclamation4.png │ │ │ │ │ │ ├── 04exclamation5.png │ │ │ │ │ │ ├── 11rectangle1.png │ │ │ │ │ │ ├── 11rectangle2.png │ │ │ │ │ │ ├── 11rectangle3.png │ │ │ │ │ │ ├── 11rectangle4.png │ │ │ │ │ │ ├── 11rectangle5.png │ │ │ │ │ │ ├── 15triangleup1.png │ │ │ │ │ │ ├── 15triangleup2.png │ │ │ │ │ │ ├── 15triangleup3.png │ │ │ │ │ │ ├── 15triangleup4.png │ │ │ │ │ │ ├── 15triangleup5.png │ │ │ │ │ │ ├── ReattachNote.png │ │ │ │ │ │ ├── biblicalterm1.png │ │ │ │ │ │ ├── biblicalterm4.png │ │ │ │ │ │ ├── biblicalterm5.png │ │ │ │ │ │ ├── biblicalterm6.png │ │ │ │ │ │ ├── 07conversation1.png │ │ │ │ │ │ ├── 07conversation2.png │ │ │ │ │ │ ├── 07conversation3.png │ │ │ │ │ │ ├── 07conversation4.png │ │ │ │ │ │ ├── 07conversation5.png │ │ │ │ │ │ ├── 16triangledown1.png │ │ │ │ │ │ ├── 16triangledown2.png │ │ │ │ │ │ ├── 16triangledown3.png │ │ │ │ │ │ ├── 16triangledown4.png │ │ │ │ │ │ ├── 16triangledown5.png │ │ │ │ │ │ ├── 17triangleleft1.png │ │ │ │ │ │ ├── 17triangleleft2.png │ │ │ │ │ │ ├── 17triangleleft3.png │ │ │ │ │ │ ├── 17triangleleft4.png │ │ │ │ │ │ ├── 17triangleleft5.png │ │ │ │ │ │ ├── 18triangleright1.png │ │ │ │ │ │ ├── 18triangleright2.png │ │ │ │ │ │ ├── 18triangleright3.png │ │ │ │ │ │ ├── 18triangleright4.png │ │ │ │ │ │ ├── 18triangleright5.png │ │ │ │ │ │ ├── globalconsultant1.png │ │ │ │ │ │ ├── globalconsultant2.png │ │ │ │ │ │ └── globalconsultant3.png │ │ │ │ ├── images │ │ │ │ │ ├── sf.png │ │ │ │ │ └── logo-pt9.png │ │ │ │ └── fonts │ │ │ │ │ ├── language-picker.ttf │ │ │ │ │ ├── language-picker.woff │ │ │ │ │ ├── language-picker.woff2 │ │ │ │ │ ├── language-picker-fallback.ttf │ │ │ │ │ ├── language-picker-fallback.woff │ │ │ │ │ └── language-picker-fallback.woff2 │ │ │ ├── xforge-common │ │ │ │ ├── edit-name-dialog │ │ │ │ │ └── edit-name-dialog.component.scss │ │ │ │ ├── donut-chart │ │ │ │ │ └── donut-chart.component.scss │ │ │ │ ├── models │ │ │ │ │ ├── textsnapshot.ts │ │ │ │ │ ├── date-format.ts │ │ │ │ │ ├── snapshot.ts │ │ │ │ │ ├── project-doc.ts │ │ │ │ │ ├── i18n-locale.ts │ │ │ │ │ ├── realtime-offline-data.ts │ │ │ │ │ ├── project-role-info.ts │ │ │ │ │ ├── user-doc.ts │ │ │ │ │ └── user-profile-doc.ts │ │ │ │ ├── write-status │ │ │ │ │ ├── write-status.component.scss │ │ │ │ │ └── write-status.component.html │ │ │ │ ├── system-administration │ │ │ │ │ ├── sa-delete-dialog.component.scss │ │ │ │ │ ├── system-administration.component.scss │ │ │ │ │ └── system-administration.component.html │ │ │ │ ├── url-constants.ts │ │ │ │ ├── includes.pipe.ts │ │ │ │ ├── feature-flags │ │ │ │ │ └── feature-flags-dialog.component.scss │ │ │ │ ├── error-dialog │ │ │ │ │ └── error-dialog.component.scss │ │ │ │ ├── blur-on-click.directive.ts │ │ │ │ ├── media-breakpoints │ │ │ │ │ └── _css-vars.scss │ │ │ │ ├── supported-browsers-dialog │ │ │ │ │ └── supported-browsers-dialog.component.html │ │ │ │ └── owner │ │ │ │ │ └── owner.component.html │ │ │ ├── tsconfig.spec.json │ │ │ ├── tsconfig.app.json │ │ │ └── test.ts │ │ ├── .npmrc │ │ ├── .prettierignore │ │ ├── .storybook │ │ │ ├── jest-setup.ts │ │ │ ├── typings.d.ts │ │ │ └── preview-head.html │ │ ├── ngcc.config.js │ │ ├── tsconfig.worker.json │ │ ├── .husky │ │ │ └── pre-commit │ │ └── .editorconfig │ ├── version.json │ ├── Pages │ │ ├── _ViewStart.cshtml │ │ ├── Status │ │ │ ├── _CatchAll.cshtml │ │ │ └── _404.cshtml │ │ └── _ViewImports.cshtml │ ├── hosting.Testing.json │ ├── hosting.Development.json │ ├── hosting.json │ ├── wwwroot │ │ ├── favicon.ico │ │ ├── images │ │ │ ├── quoter.jpg │ │ │ ├── payap_logo.png │ │ │ ├── sil_logo.png │ │ │ ├── engage-banner.jpg │ │ │ ├── EarthLightsLarge.jpg │ │ │ ├── EarthLightsMedium.jpg │ │ │ ├── EarthLightsSmall.jpg │ │ │ ├── Settings_NLTTest.png │ │ │ ├── CollaborateOnScripture.gif │ │ │ ├── TranslateTool_TET_MRK_1.png │ │ │ ├── TranslateTool_NLT_JHN_1_Suggestion.png │ │ │ ├── ai-drafting.svg │ │ │ └── community-checking.svg │ │ └── scss │ │ │ ├── sf.scss │ │ │ └── _404.scss │ ├── AssemblyInfo.cs │ ├── hosting.Staging.json │ ├── Models │ │ ├── Like.cs │ │ ├── CheckShareKeyRequest.cs │ │ ├── PreTranslationDto.cs │ │ ├── ServalBuildState.cs │ │ ├── InviteeStatus.cs │ │ ├── PreTranslation.cs │ │ ├── DraftApplyState.cs │ │ ├── ISFText.cs │ │ ├── TextInfoPermission.cs │ │ ├── SyncErrorCodes.cs │ │ ├── SyncStatus.cs │ │ ├── GenerateAccountRequest.cs │ │ ├── TextSnapshot.cs │ │ ├── AnonymousShareKeyResponse.cs │ │ ├── AudioTiming.cs │ │ ├── SFParatextUser.cs │ │ ├── TextInfo.cs │ │ ├── ValidShareKey.cs │ │ ├── BiblicalTermNoteHeadingInfo.cs │ │ ├── BiblicalTermsConfig.cs │ │ ├── BiblicalTermDefinition.cs │ │ ├── Answer.cs │ │ ├── TransceleratorQuestion.cs │ │ ├── Operation.cs │ │ ├── ResourceConfig.cs │ │ ├── ServalResourceDto.cs │ │ ├── ServalBuildDto.cs │ │ ├── ProgressState.cs │ │ ├── AnswerStatus.cs │ │ ├── CheckingConfig.cs │ │ └── TrainingData.cs │ ├── Services │ │ ├── IGuidService.cs │ │ ├── IParatextDataHelper.cs │ │ ├── ITransceleratorService.cs │ │ ├── PersistedParatextDataSettings.cs │ │ ├── IParatextSyncRunner.cs │ │ ├── IInternetSharedRepositorySourceProvider.cs │ │ ├── PersistedPtxUtilsSettings.cs │ │ ├── SFApplicationBuilderExtensions.cs │ │ ├── GuidService.cs │ │ ├── IAnonymousService.cs │ │ ├── ISFProjectRights.cs │ │ ├── SFJsonRpcApplicationBuilderExtensions.cs │ │ ├── INotifier.cs │ │ ├── SFTrainingText.cs │ │ └── IScrTextCollection.cs │ ├── Controllers │ │ └── CookieConstants.cs │ ├── icu.net.dll.config │ ├── revisionStyle.sty │ ├── revisionTemplate.tem │ └── DataAccess │ │ └── SFDataAccessApplicationBuilderExtensions.cs ├── Migrations │ ├── BackoutCommits │ │ ├── run-dev │ │ ├── IProgramLogger.cs │ │ ├── BackoutCommits.csproj │ │ └── ISyncAllService.cs │ ├── PtdaSyncAll │ │ ├── build-dev │ │ ├── IProgramLogger.cs │ │ └── PtdaSyncAll.csproj │ ├── SyncCancel │ │ ├── build-dev │ │ ├── IProgramLogger.cs │ │ ├── SyncCancel.csproj │ │ └── ISyncCancelService.cs │ ├── SyncUserToPTUser │ │ ├── build-dev │ │ ├── IProgramLogger.cs │ │ ├── ISyncUserToPTUserService.cs │ │ └── SyncUserToPTUser.csproj │ ├── ServalMigration │ │ ├── Properties │ │ │ └── launchSettings.json │ │ └── ServalMigration.csproj │ ├── SourceTargetSplitting │ │ ├── Properties │ │ │ └── launchSettings.json │ │ └── SourceTargetSplitting.csproj │ ├── WhitespaceRestoreMigration │ │ └── Properties │ │ │ └── launchSettings.json │ ├── UsxFormat │ │ └── Migrations.csproj │ └── PTDDCloneAll │ │ ├── ICloneAllService.cs │ │ ├── PTDDCloneAll.csproj │ │ └── IPTDDSyncRunner.cs ├── SIL.XForge │ ├── AssemblyInfo.cs │ ├── Models │ │ ├── IIdentifiable.cs │ │ ├── IOwnedData.cs │ │ ├── ProjectRole.cs │ │ ├── ShareLinkType.cs │ │ ├── ProjectData.cs │ │ ├── WritingSystem.cs │ │ ├── TransparentAuthenticationCredentials.cs │ │ ├── SystemRole.cs │ │ ├── Site.cs │ │ ├── LanguageDirection.cs │ │ ├── Json0Snapshot.cs │ │ ├── ProjectSecret.cs │ │ ├── InterfaceLanguage.cs │ │ └── QueuedAction.cs │ ├── Services │ │ ├── ISecurityService.cs │ │ ├── IHttpRequestAccessor.cs │ │ ├── DataNotFoundException.cs │ │ ├── IAudioService.cs │ │ ├── IEmailService.cs │ │ ├── IUserAccessor.cs │ │ └── ForbiddenException.cs │ ├── Realtime │ │ ├── OTType.cs │ │ ├── ExistingNodeJSProcessFactory.cs │ │ ├── RealtimeApplicationBuilderExtensions.cs │ │ ├── Op.cs │ │ └── OpSource.cs │ ├── Utils │ │ ├── XFClaimTypes.cs │ │ └── ParameterRebinder.cs │ ├── Configuration │ │ ├── AudioOptions.cs │ │ ├── BugsnagOptions.cs │ │ ├── DataAccessOptions.cs │ │ ├── Options.cs │ │ ├── ParatextOptions.cs │ │ ├── ConfigurationExtensions.cs │ │ ├── PublicAuthOptions.cs │ │ ├── SiteOptions.cs │ │ └── ServalOptions.cs │ ├── Controllers │ │ └── UrlConstants.cs │ └── DataAccess │ │ └── DuplicateKeyException.cs ├── Help │ ├── UpdateHelp │ │ └── UpdateHelp.csproj │ └── menu_en.json ├── Docker │ ├── launchSettings.json │ ├── docker-compose.win.yml │ └── docker-compose.yml └── SIL.Converters.Usj │ ├── SIL.Converters.Usj.csproj │ └── LowerCaseNamingStrategy.cs ├── .grit ├── .gitignore ├── grit.yaml └── patterns │ ├── missed_nullish_assignment_opportunity.md │ ├── bare_when.md │ └── remove_non_null_assertion.md ├── deploy ├── hosts ├── ansible.cfg ├── vars │ └── os_defaults.yml └── files │ └── InternetSettings.xml ├── .csharpierignore ├── readme_images ├── bugsnag-logo.png └── browserstack-logo.png ├── test ├── SIL.XForge.Tests │ ├── Models │ │ ├── TestProject.cs │ │ ├── TestProjectSecret.cs │ │ ├── TestSimpleObject.cs │ │ └── TestProjectRole.cs │ └── GlobalUsings.cs └── SIL.XForge.Scripture.Tests │ ├── SampleData │ ├── heb_usfm.zip │ └── eng-asv_usfm-partial.zip │ ├── Models │ └── CharAttr.cs │ ├── Services │ ├── MockStaticDataSource.cs │ ├── MockScrStylesheet.cs │ ├── MockZippedResourcePasswordProvider.cs │ ├── TestGuidService.cs │ └── MockProjectSettings.cs │ └── GlobalUsings.cs ├── .github ├── codeql │ └── codeql-javascript-config.yml ├── workflows │ └── grit.yml └── dependabot.yml ├── .prettierignore ├── .prettierrc.yml ├── tools ├── Roundtrip │ ├── RoundtripMethod.cs │ └── SequentialGuidService.cs ├── ServalDownloader │ └── appsettings.json └── ServalBuildReport │ └── appsettings.json ├── after.xForge.sln.targets ├── Directory.Build.targets ├── .lintstagedrc.yml ├── Directory.Build.props ├── .config └── dotnet-tools.json ├── .buildpath ├── mongodb ├── Projects │ ├── FindProjectFromEngineId.mongodb │ ├── CountUserRoles.mongodb │ └── ProjectsWithInvalidDocs.mongodb ├── README.md ├── Users │ └── CountUsersByInterfaceLanguage.mongodb └── databases │ └── dropDBNonSF.mongodb ├── .git-blame-ignore-revs ├── .dockerignore └── codecov.yml /.csharpierrc.yaml: -------------------------------------------------------------------------------- 1 | printWidth: 120 2 | -------------------------------------------------------------------------------- /scripts/db_tools/.npmrc: -------------------------------------------------------------------------------- 1 | save=true 2 | 3 | -------------------------------------------------------------------------------- /src/RealtimeServer/.npmrc: -------------------------------------------------------------------------------- 1 | save=true 2 | -------------------------------------------------------------------------------- /.grit/.gitignore: -------------------------------------------------------------------------------- 1 | .gritmodules* 2 | *.log 3 | -------------------------------------------------------------------------------- /src/RealtimeServer/.prettierignore: -------------------------------------------------------------------------------- 1 | /lib 2 | /coverage 3 | -------------------------------------------------------------------------------- /deploy/hosts: -------------------------------------------------------------------------------- 1 | [all] 2 | localhost ansible_connection=local 3 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/e2e/components/my-projects.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/app/project/project.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.csharpierignore: -------------------------------------------------------------------------------- 1 | *.config 2 | *.csproj 3 | *.props 4 | *.targets 5 | *.xml 6 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "9.9.9" 3 | } 4 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/.npmrc: -------------------------------------------------------------------------------- 1 | save=true 2 | legacy-peer-deps=true 3 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/app/event-metrics/event-metrics.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/app/shared/sf-tab-group/tab/tab.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.grit/grit.yaml: -------------------------------------------------------------------------------- 1 | version: 0.0.1 2 | patterns: 3 | - name: github.com/getgrit/stdlib#* 4 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/app/event-metrics/event-metric-dialog.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/app/project/project.component.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/src/typings/process.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'process' {} 2 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/Pages/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /deploy/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | stderr_callback = debug 3 | nocows = 1 4 | inventory = hosts 5 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/.prettierignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /dist 3 | /.angular/cache 4 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/hosting.Testing.json: -------------------------------------------------------------------------------- 1 | { 2 | "urls": "http://localhost:5000" 3 | } 4 | -------------------------------------------------------------------------------- /src/Migrations/BackoutCommits/run-dev: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ASPNETCORE_ENVIRONMENT=Development dotnet run 3 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/ClientApp/.storybook/jest-setup.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /src/RealtimeServer/common/models/project-role.ts: -------------------------------------------------------------------------------- 1 | export enum ProjectRole { 2 | None = 'none' 3 | } 4 | -------------------------------------------------------------------------------- /src/Migrations/PtdaSyncAll/build-dev: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ASPNETCORE_ENVIRONMENT=Development dotnet watch build 3 | -------------------------------------------------------------------------------- /src/Migrations/SyncCancel/build-dev: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ASPNETCORE_ENVIRONMENT=Development dotnet watch build 3 | -------------------------------------------------------------------------------- /src/RealtimeServer/common/models/owned-data.ts: -------------------------------------------------------------------------------- 1 | export interface OwnedData { 2 | ownerRef: string; 3 | } 4 | -------------------------------------------------------------------------------- /src/SIL.XForge.Scripture/Pages/Status/_CatchAll.cshtml: -------------------------------------------------------------------------------- 1 | @model ErrorModel 2 |@Model.Localizer["RedirectingInAFewMoments"]
4 |{{ t("redirecting_in_moments") }}
4 |