gitextract_v8p2gl5q/ ├── .circleci/ │ └── config.yml ├── .dockerignore ├── .editorconfig ├── .github/ │ ├── ISSUE_TEMPLATE.md │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── QUICKSTART.md ├── README.md ├── bin/ │ ├── build │ ├── initdb │ ├── install │ ├── install-circleci │ ├── link-packages │ ├── lint │ ├── lint-fix │ ├── osmod │ ├── run │ ├── storybook │ ├── sync-db │ ├── test │ └── watch ├── deployments/ │ ├── gcloud/ │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── deploy-sql.sh │ │ ├── deploy.sh │ │ ├── kubernetes-deployment.yaml │ │ └── kubernetes-networking.yaml │ ├── local/ │ │ ├── Dockerfile │ │ ├── README.md │ │ └── docker-compose.yml │ └── standalone/ │ ├── .dockerignore │ ├── Dockerfile │ └── initialise_db.sh ├── design-files/ │ ├── Moderator-StickerSheet-20161117-DAS/ │ │ ├── document.json │ │ ├── meta.json │ │ ├── pages/ │ │ │ ├── 1B67083D-3430-4865-A36A-6C687A1EEB45.json │ │ │ └── 226D6615-C16F-4B84-92E0-291B2F1B15C4.json │ │ └── user.json │ └── Moderator-StickerSheet-20161117-DAS.sketch ├── docs/ │ ├── auth.md │ ├── comment_flow.md │ ├── modeling.md │ ├── osmod_assistant_protocol.md │ ├── osmod_services_api.md │ ├── osmod_task_api.md │ ├── sql_queries.sql │ ├── worker.md │ └── youtube_integration.md ├── lerna.json ├── package.json ├── packages/ │ ├── README.md │ ├── backend-api/ │ │ ├── .sequelizerc │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── check_migrations.sh │ │ │ ├── make_migration.sh │ │ │ ├── osmod-test.js │ │ │ ├── osmod.js │ │ │ ├── run_sequelize_sync.js │ │ │ └── run_task │ │ ├── data/ │ │ │ ├── alice.txt │ │ │ ├── brexit.csv │ │ │ ├── climate.csv │ │ │ ├── election.csv │ │ │ └── wikipedia.csv │ │ ├── package.json │ │ ├── src/ │ │ │ ├── actions/ │ │ │ │ ├── assignment_updaters.ts │ │ │ │ └── object_updaters.ts │ │ │ ├── api/ │ │ │ │ ├── assistant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── router.ts │ │ │ │ ├── services/ │ │ │ │ │ ├── assignments.ts │ │ │ │ │ ├── authorCounts.ts │ │ │ │ │ ├── commentActions.ts │ │ │ │ │ ├── commentSources.ts │ │ │ │ │ ├── editComment.ts │ │ │ │ │ ├── histogramScores/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── moderatedCounts.ts │ │ │ │ │ ├── search.ts │ │ │ │ │ ├── serializer.ts │ │ │ │ │ ├── simple.ts │ │ │ │ │ ├── textSizes.ts │ │ │ │ │ └── updateNotifications.ts │ │ │ │ └── util/ │ │ │ │ ├── permissions.ts │ │ │ │ ├── server.ts │ │ │ │ ├── sortCommentIds.ts │ │ │ │ └── validation.ts │ │ │ ├── auth/ │ │ │ │ ├── config.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── google.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── jwt.ts │ │ │ │ ├── router.ts │ │ │ │ ├── tokens.ts │ │ │ │ ├── users.ts │ │ │ │ ├── utils.ts │ │ │ │ └── youtube.ts │ │ │ ├── commands/ │ │ │ │ ├── articles/ │ │ │ │ │ └── delete.ts │ │ │ │ ├── comments/ │ │ │ │ │ ├── calculate_text_size.ts │ │ │ │ │ ├── data_helpers.ts │ │ │ │ │ ├── delete.ts │ │ │ │ │ ├── flag.ts │ │ │ │ │ ├── generate.ts │ │ │ │ │ ├── import.ts │ │ │ │ │ ├── rebuild_reply_relations.ts │ │ │ │ │ ├── recalculate_text_sizes.ts │ │ │ │ │ ├── recalculate_top_scores.ts │ │ │ │ │ ├── rescore.ts │ │ │ │ │ └── send_to_scorer.ts │ │ │ │ ├── denormalize.ts │ │ │ │ ├── tests/ │ │ │ │ │ └── youtube.ts │ │ │ │ └── users/ │ │ │ │ ├── create.ts │ │ │ │ └── get_token.ts │ │ │ ├── config.ts │ │ │ ├── domain/ │ │ │ │ ├── articles/ │ │ │ │ │ ├── countDenormalization.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── categories/ │ │ │ │ │ ├── countDenormalization.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── commentScores/ │ │ │ │ │ └── index.ts │ │ │ │ ├── comments/ │ │ │ │ │ ├── countDenormalization.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── textSizes.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── integrations/ │ │ │ │ ├── decisions.ts │ │ │ │ ├── index.ts │ │ │ │ └── youtube/ │ │ │ │ ├── actions.ts │ │ │ │ ├── authenticate.ts │ │ │ │ ├── channels.ts │ │ │ │ ├── comments.ts │ │ │ │ ├── hooks.ts │ │ │ │ ├── objectmap.ts │ │ │ │ ├── task.ts │ │ │ │ └── videos.ts │ │ │ ├── logger.ts │ │ │ ├── models/ │ │ │ │ ├── article.ts │ │ │ │ ├── category.ts │ │ │ │ ├── comment.ts │ │ │ │ ├── comment_flag.ts │ │ │ │ ├── comment_score.ts │ │ │ │ ├── comment_score_request.ts │ │ │ │ ├── comment_size.ts │ │ │ │ ├── comment_summary_score.ts │ │ │ │ ├── comment_top_score.ts │ │ │ │ ├── configuration.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── csrf.ts │ │ │ │ ├── decision.ts │ │ │ │ ├── index.ts │ │ │ │ ├── moderation_rule.ts │ │ │ │ ├── moderator_assignment.ts │ │ │ │ ├── preselect.ts │ │ │ │ ├── tag.ts │ │ │ │ ├── tagging_sensitivity.ts │ │ │ │ ├── user.ts │ │ │ │ ├── user_category_assignment.ts │ │ │ │ └── user_social_auth.ts │ │ │ ├── notification_router.ts │ │ │ ├── pipeline/ │ │ │ │ ├── apiShim.ts │ │ │ │ ├── hooks.ts │ │ │ │ ├── index.ts │ │ │ │ ├── pipeline.ts │ │ │ │ ├── rules.ts │ │ │ │ ├── shim.ts │ │ │ │ └── state.ts │ │ │ ├── processing/ │ │ │ │ ├── api/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── known_tasks.ts │ │ │ │ │ └── permissions.ts │ │ │ │ ├── dashboard.ts │ │ │ │ ├── index.ts │ │ │ │ ├── tasks/ │ │ │ │ │ ├── comment_actions.ts │ │ │ │ │ ├── db_operations.ts │ │ │ │ │ ├── heartbeat.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── process_machine_score.ts │ │ │ │ │ ├── process_tagging.ts │ │ │ │ │ ├── score_actions.ts │ │ │ │ │ ├── score_tag_actions.ts │ │ │ │ │ └── send_comment_for_scoring.ts │ │ │ │ ├── util.ts │ │ │ │ └── worker.ts │ │ │ ├── processor.ts │ │ │ ├── redis.ts │ │ │ ├── sequelize-config.ts │ │ │ ├── sequelize-sync.ts │ │ │ ├── sequelize.ts │ │ │ ├── server-management.ts │ │ │ ├── server.ts │ │ │ ├── test/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── providers/ │ │ │ │ │ │ └── google.spec.ts │ │ │ │ │ ├── tokens.spec.ts │ │ │ │ │ └── users.spec.ts │ │ │ │ ├── domain/ │ │ │ │ │ ├── comments/ │ │ │ │ │ │ ├── fixture.ts │ │ │ │ │ │ └── textSizes.spec.ts │ │ │ │ │ └── topScores/ │ │ │ │ │ └── calculateTopScores.spec.ts │ │ │ │ ├── fixture.ts │ │ │ │ ├── integration/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── actions.spec.ts │ │ │ │ │ │ ├── assignments.spec.ts │ │ │ │ │ │ ├── assistant.spec.ts │ │ │ │ │ │ ├── authorCounts.spec.ts │ │ │ │ │ │ ├── editComment.spec.ts │ │ │ │ │ │ ├── histogramScores.spec.ts │ │ │ │ │ │ ├── simple-comment.spec.ts │ │ │ │ │ │ ├── simple-ranges.spec.ts │ │ │ │ │ │ ├── simple-user.spec.ts │ │ │ │ │ │ └── test_helper.ts │ │ │ │ │ └── websocket/ │ │ │ │ │ ├── assign_moderators.spec.ts │ │ │ │ │ ├── update_notifications.spec.ts │ │ │ │ │ └── websocket.spec.ts │ │ │ │ ├── pipeline/ │ │ │ │ │ ├── pipeline.spec.ts │ │ │ │ │ ├── rules.spec.ts │ │ │ │ │ └── state.spec.ts │ │ │ │ ├── test_helper.ts │ │ │ │ └── unit/ │ │ │ │ ├── services/ │ │ │ │ │ ├── authorCounts.spec.ts │ │ │ │ │ └── histogramScores.spec.ts │ │ │ │ └── util/ │ │ │ │ └── notifications.spec.ts │ │ │ └── worker.ts │ │ └── tsconfig.json │ └── frontend-web/ │ ├── .babelrc │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── public/ │ │ ├── css/ │ │ │ ├── fonts/ │ │ │ │ └── fonts.css │ │ │ ├── moderator.css │ │ │ └── normalize.css │ │ └── index.html │ ├── src/ │ │ ├── app/ │ │ │ ├── appstate.ts │ │ │ ├── auth.ts │ │ │ ├── components/ │ │ │ │ ├── Arrow/ │ │ │ │ │ ├── Arrow.tsx │ │ │ │ │ ├── ArrowStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── AspectRatio/ │ │ │ │ │ ├── AspectRatio.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AssignModerators/ │ │ │ │ │ ├── AssignModerators.tsx │ │ │ │ │ └── AssignModeratorsStory.tsx │ │ │ │ ├── AssignTagsForm.tsx │ │ │ │ ├── Avatar/ │ │ │ │ │ ├── Avatar.tsx │ │ │ │ │ ├── AvatarStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── Button/ │ │ │ │ │ ├── Button.tsx │ │ │ │ │ ├── ButtonStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── CanvasTruncate/ │ │ │ │ │ ├── CanvasTruncate.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── CheckboxRow/ │ │ │ │ │ ├── CheckboxRow.tsx │ │ │ │ │ ├── CheckboxRowStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── CommentActionButton/ │ │ │ │ │ ├── CommentActionButton.tsx │ │ │ │ │ ├── CommentActionButtonStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── CommentList/ │ │ │ │ │ ├── CommentList.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── CheckboxColumn/ │ │ │ │ │ │ │ ├── CheckboxColumn.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── SortColumn/ │ │ │ │ │ │ ├── SortColumn.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── CommentText.tsx │ │ │ │ ├── ConfirmationCircle/ │ │ │ │ │ ├── ConfirmationCircle.tsx │ │ │ │ │ ├── ConfirmationCircleStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── DotChart/ │ │ │ │ │ ├── DotChart.tsx │ │ │ │ │ ├── DotChartStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── comments-data.json │ │ │ │ │ └── index.ts │ │ │ │ ├── ErrorRoot.tsx │ │ │ │ ├── ErrorRootStory.tsx │ │ │ │ ├── FlagsSummary.tsx │ │ │ │ ├── HeaderBar.tsx │ │ │ │ ├── Icons/ │ │ │ │ │ ├── IconBase.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── LazyLoadComment/ │ │ │ │ │ ├── CommentBodyStory.tsx │ │ │ │ │ ├── LazyLoadComment.tsx │ │ │ │ │ ├── components.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── MagicTimestamp.tsx │ │ │ │ ├── MagicTimestampStory.tsx │ │ │ │ ├── ModerateButtons/ │ │ │ │ │ ├── ModerateButtons.tsx │ │ │ │ │ ├── ModerateButtonsStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── NavigationTab/ │ │ │ │ │ ├── NavigationTab.tsx │ │ │ │ │ ├── NavigationTabStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── OverflowContainer/ │ │ │ │ │ ├── OverflowContainer.tsx │ │ │ │ │ ├── OverflowContainerStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── RuleBars/ │ │ │ │ │ ├── RuleBars.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ScoresList/ │ │ │ │ │ ├── ScoresList.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Scrim/ │ │ │ │ │ ├── Scrim.tsx │ │ │ │ │ ├── ScrimStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchAttribute/ │ │ │ │ │ ├── SearchAttribute.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchHeader/ │ │ │ │ │ ├── SearchHeader.tsx │ │ │ │ │ ├── SearchHeaderStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── SingleComment/ │ │ │ │ │ ├── SingleComment.tsx │ │ │ │ │ ├── SingleCommentStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AnnotatedCommentText.tsx │ │ │ │ │ │ ├── AuthorCounts.tsx │ │ │ │ │ │ ├── CommentTags.tsx │ │ │ │ │ │ ├── DetailRow.tsx │ │ │ │ │ │ ├── FlagsList.tsx │ │ │ │ │ │ └── SummaryScore.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Slider/ │ │ │ │ │ ├── RangeBar.tsx │ │ │ │ │ ├── Slider.tsx │ │ │ │ │ ├── SliderStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SplashRoot.tsx │ │ │ │ ├── SplashRootStory.tsx │ │ │ │ ├── TagLabelRow/ │ │ │ │ │ ├── TagLabelRow.tsx │ │ │ │ │ ├── TagLabelRowStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ThemeRoot.tsx │ │ │ │ ├── Toast/ │ │ │ │ │ ├── Toast.tsx │ │ │ │ │ ├── ToastMessage.tsx │ │ │ │ │ ├── ToastStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── Toggle/ │ │ │ │ │ └── __spec__/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── ToolTip/ │ │ │ │ │ ├── ToolTip.tsx │ │ │ │ │ ├── ToolTipStory.tsx │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── index.ts │ │ │ │ ├── VirtualListScrollbar.tsx │ │ │ │ ├── article_controls.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.ts │ │ │ ├── config.ts │ │ │ ├── injectors/ │ │ │ │ ├── articleFetchQueue.ts │ │ │ │ ├── articleInjector.ts │ │ │ │ ├── commentFetchQueue.ts │ │ │ │ ├── commentInjector.ts │ │ │ │ └── contextInjector.ts │ │ │ ├── main.tsx │ │ │ ├── platform/ │ │ │ │ ├── dataService.ts │ │ │ │ ├── localStore.ts │ │ │ │ ├── types.ts │ │ │ │ └── websocketService.ts │ │ │ ├── scenes/ │ │ │ │ ├── Comments/ │ │ │ │ │ ├── Comments.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── CommentDetail/ │ │ │ │ │ │ │ ├── CommentDetail.tsx │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── InfoButton/ │ │ │ │ │ │ │ │ ├── InfoButton.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── store.ts │ │ │ │ │ │ ├── ModeratedComments/ │ │ │ │ │ │ │ ├── ModeratedComments.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── store/ │ │ │ │ │ │ │ ├── checkedSelection.ts │ │ │ │ │ │ │ ├── commentListLoader.ts │ │ │ │ │ │ │ ├── currentPagingIdentifier.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── moderatedComments.ts │ │ │ │ │ │ ├── NewComments/ │ │ │ │ │ │ │ ├── NewComments.tsx │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── BatchSelector/ │ │ │ │ │ │ │ │ ├── BatchSelector.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── store/ │ │ │ │ │ │ │ ├── checkedSelection.ts │ │ │ │ │ │ │ ├── commentListLoader.ts │ │ │ │ │ │ │ ├── commentScores.ts │ │ │ │ │ │ │ ├── currentPagingIdentifier.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── util.ts │ │ │ │ │ │ ├── Shortcuts/ │ │ │ │ │ │ │ ├── Shortcuts.tsx │ │ │ │ │ │ │ ├── ShortcutsStory.tsx │ │ │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── SubheaderBar.tsx │ │ │ │ │ │ ├── TagSelector/ │ │ │ │ │ │ │ ├── TagSelector.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── ThreadedCommentDetail/ │ │ │ │ │ │ ├── ThreadedCommentDetail.tsx │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── ThreadedComment/ │ │ │ │ │ │ │ ├── ThreadedComment.tsx │ │ │ │ │ │ │ ├── ThreadedCommentStory.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── scoreFilters.ts │ │ │ │ │ └── store.ts │ │ │ │ ├── Login/ │ │ │ │ │ ├── ConfigureOAuth.tsx │ │ │ │ │ ├── Login.tsx │ │ │ │ │ ├── LoginStory.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Search/ │ │ │ │ │ ├── Search.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── SearchResults.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── store/ │ │ │ │ │ │ ├── checkedSelection.ts │ │ │ │ │ │ ├── commentListLoader.ts │ │ │ │ │ │ ├── currentPagingIdentifier.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── searchResults.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Settings/ │ │ │ │ │ ├── Ranges.tsx │ │ │ │ │ ├── Settings.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AddUsers.tsx │ │ │ │ │ │ ├── ColorSelect/ │ │ │ │ │ │ │ ├── ColorSelect.tsx │ │ │ │ │ │ │ ├── ColorSelectStory.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── EditUsers.tsx │ │ │ │ │ │ ├── EditYouTubeUser.tsx │ │ │ │ │ │ ├── LabelSettings/ │ │ │ │ │ │ │ ├── LabelSettings.tsx │ │ │ │ │ │ │ ├── LabelSettingsStory.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── ManageAutomatedRules.tsx │ │ │ │ │ │ ├── ManagePreselects.tsx │ │ │ │ │ │ ├── ManageSensitivities.tsx │ │ │ │ │ │ ├── ManageTags.tsx │ │ │ │ │ │ ├── OAuthConfig.tsx │ │ │ │ │ │ ├── RuleRow/ │ │ │ │ │ │ │ ├── RuleRow.tsx │ │ │ │ │ │ │ ├── RuleRowStory.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── SaveButtons.tsx │ │ │ │ │ │ ├── UserForm.tsx │ │ │ │ │ │ ├── rows.tsx │ │ │ │ │ │ └── users.tsx │ │ │ │ │ ├── settingsStyles.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── styles.ts │ │ │ │ ├── Tables/ │ │ │ │ │ ├── ArticleTable.tsx │ │ │ │ │ ├── CategorySidebar.tsx │ │ │ │ │ ├── ComponentsStory.tsx │ │ │ │ │ ├── FilterSidebar.tsx │ │ │ │ │ ├── TableFrame.tsx │ │ │ │ │ ├── TableFrameStory.tsx │ │ │ │ │ ├── components.tsx │ │ │ │ │ ├── styles.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── appstate.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── routes.ts │ │ │ │ └── store.ts │ │ │ ├── store.ts │ │ │ ├── stores/ │ │ │ │ ├── appstate.ts │ │ │ │ ├── articles.ts │ │ │ │ ├── categories.ts │ │ │ │ ├── commentActions.ts │ │ │ │ ├── comments.ts │ │ │ │ ├── counts.ts │ │ │ │ ├── globalActions.ts │ │ │ │ ├── index.ts │ │ │ │ ├── preselects.ts │ │ │ │ ├── rules.ts │ │ │ │ ├── taggingSensitivities.ts │ │ │ │ ├── tags.ts │ │ │ │ ├── textSizes.ts │ │ │ │ └── users.ts │ │ │ ├── styles/ │ │ │ │ ├── breakpoints.ts │ │ │ │ ├── colors.ts │ │ │ │ ├── forms.ts │ │ │ │ ├── header.ts │ │ │ │ ├── hoverstates.ts │ │ │ │ ├── index.ts │ │ │ │ ├── scrim.ts │ │ │ │ ├── typography.ts │ │ │ │ ├── util.ts │ │ │ │ └── zindex.ts │ │ │ ├── stylesx/ │ │ │ │ └── index.ts │ │ │ ├── util/ │ │ │ │ ├── DotChartRenderer.ts │ │ │ │ ├── color.ts │ │ │ │ ├── csrf.ts │ │ │ │ ├── groupByColumn.ts │ │ │ │ ├── index.ts │ │ │ │ ├── makeCheckedSelectionStore/ │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ └── makeCheckedSelectionStore.spec.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── makeCheckedSelectionStore.ts │ │ │ │ ├── makeCurrentPagingIdentifierReducer.ts │ │ │ │ ├── measureText.ts │ │ │ │ ├── partial/ │ │ │ │ │ ├── __spec__/ │ │ │ │ │ │ ├── memoize.spec.ts │ │ │ │ │ │ └── partial.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── returnSavedCommentRow.ts │ │ │ │ ├── returnURL.ts │ │ │ │ ├── savedSorts.ts │ │ │ │ ├── sortByLabel.ts │ │ │ │ ├── time.ts │ │ │ │ └── timeout.ts │ │ │ └── utilx/ │ │ │ ├── cssInJs.ts │ │ │ ├── highlightText.tsx │ │ │ ├── hooks.ts │ │ │ ├── index.ts │ │ │ ├── keyCodes.tsx │ │ │ └── sortDefinitions.tsx │ │ ├── index.ts │ │ ├── models/ │ │ │ ├── article.ts │ │ │ ├── category.ts │ │ │ ├── comment.ts │ │ │ ├── commentFlag.ts │ │ │ ├── commentScore.ts │ │ │ ├── common.ts │ │ │ ├── fake/ │ │ │ │ ├── article.ts │ │ │ │ ├── category.ts │ │ │ │ ├── comment.ts │ │ │ │ ├── commentScore.ts │ │ │ │ ├── index.ts │ │ │ │ ├── rule.ts │ │ │ │ ├── tag.ts │ │ │ │ └── user.ts │ │ │ ├── index.ts │ │ │ ├── preselect.ts │ │ │ ├── rule.ts │ │ │ ├── tag.ts │ │ │ ├── taggingSensitivity.ts │ │ │ └── user.ts │ │ ├── server.ts │ │ ├── test/ │ │ │ ├── actions.ts │ │ │ ├── apitest.ts │ │ │ ├── notificationChecks.ts │ │ │ ├── objectChecks.ts │ │ │ └── pageTests.ts │ │ └── types.ts │ ├── tooling/ │ │ ├── storybook/ │ │ │ ├── Storyshots.test.js │ │ │ ├── __snapshots__/ │ │ │ │ └── Storyshots.test.js.snap │ │ │ ├── config.js │ │ │ ├── disable-aphrodite-inject.js │ │ │ ├── jest.config.json │ │ │ ├── preview-head.html │ │ │ ├── register-context.js │ │ │ └── webpack.config.js │ │ ├── webpack.config.js │ │ └── webpack.config.production.js │ └── tsconfig.json ├── seed/ │ └── initial-database.sql └── tslint.json