mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-14 06:03:45 +01:00
Remove unused code and translation keys (#7140)
GitOrigin-RevId: 15ce5d22a40ebe56cae76c78703c1547f2ab0552
This commit is contained in:
@@ -47,7 +47,6 @@
|
||||
"collapse": "",
|
||||
"commit": "",
|
||||
"common": "",
|
||||
"compile_error_description": "",
|
||||
"compile_error_entry_description": "",
|
||||
"compile_larger_projects": "",
|
||||
"compile_mode": "",
|
||||
@@ -93,7 +92,6 @@
|
||||
"files_cannot_include_invalid_characters": "",
|
||||
"find_out_more_about_the_file_outline": "",
|
||||
"find_the_symbols_you_need_with_premium": "",
|
||||
"first_error_popup_label": "",
|
||||
"fold_line": "",
|
||||
"following_paths_conflict": "",
|
||||
"free_accounts_have_timeout_upgrade_to_increase": "",
|
||||
@@ -131,7 +129,6 @@
|
||||
"go_page": "",
|
||||
"go_prev_page": "",
|
||||
"go_to_code_location_in_pdf": "",
|
||||
"go_to_error_location": "",
|
||||
"go_to_pdf_location_in_code": "",
|
||||
"have_an_extra_backup": "",
|
||||
"headers": "",
|
||||
@@ -196,7 +193,6 @@
|
||||
"log_viewer_error": "",
|
||||
"logs_and_output_files": "",
|
||||
"logs_pane_info_message": "",
|
||||
"logs_pane_info_message_popup": "",
|
||||
"main_file_not_found": "",
|
||||
"make_private": "",
|
||||
"manage_files_from_your_dropbox_folder": "",
|
||||
@@ -210,12 +206,8 @@
|
||||
"mendeley_reference_loading_error_forbidden": "",
|
||||
"mendeley_sync_description": "",
|
||||
"menu": "",
|
||||
"n_errors": "",
|
||||
"n_errors_plural": "",
|
||||
"n_items": "",
|
||||
"n_items_plural": "",
|
||||
"n_warnings": "",
|
||||
"n_warnings_plural": "",
|
||||
"navigate_log_source": "",
|
||||
"navigation": "",
|
||||
"need_to_upgrade_for_more_collabs": "",
|
||||
@@ -306,20 +298,10 @@
|
||||
"review": "",
|
||||
"revoke": "",
|
||||
"revoke_invite": "",
|
||||
"run_syntax_check_now": "",
|
||||
"search": "",
|
||||
"search_all": "",
|
||||
"search_bib_files": "",
|
||||
"search_close": "",
|
||||
"search_command_all": "",
|
||||
"search_command_find": "",
|
||||
"search_command_go": "",
|
||||
"search_command_go_to_line": "",
|
||||
"search_command_replace": "",
|
||||
"search_current_match": "",
|
||||
"search_match_case": "",
|
||||
"search_next": "",
|
||||
"search_on_line": "",
|
||||
"search_previous": "",
|
||||
"search_references": "",
|
||||
"search_regexp": "",
|
||||
@@ -371,7 +353,6 @@
|
||||
"to_add_more_collaborators": "",
|
||||
"to_change_access_permissions": "",
|
||||
"toggle_compile_options_menu": "",
|
||||
"toggle_output_files_list": "",
|
||||
"too_many_attempts": "",
|
||||
"too_many_files_uploaded_throttled_short_period": "",
|
||||
"too_many_requests": "",
|
||||
@@ -394,22 +375,15 @@
|
||||
"upload": "",
|
||||
"url_to_fetch_the_file_from": "",
|
||||
"use_your_own_machine": "",
|
||||
"validation_issue_description": "",
|
||||
"validation_issue_entry_description": "",
|
||||
"view_error": "",
|
||||
"view_error_plural": "",
|
||||
"view_logs": "",
|
||||
"view_pdf": "",
|
||||
"view_warning": "",
|
||||
"view_warning_plural": "",
|
||||
"we_cant_find_any_sections_or_subsections_in_this_file": "",
|
||||
"with_premium_subscription_you_also_get": "",
|
||||
"word_count": "",
|
||||
"work_offline": "",
|
||||
"work_with_non_overleaf_users": "",
|
||||
"your_message": "",
|
||||
"your_project_has_an_error": "",
|
||||
"your_project_has_an_error_plural": "",
|
||||
"zotero_groups_loading_error": "",
|
||||
"zotero_is_premium": "",
|
||||
"zotero_reference_loading_error": "",
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { Button, Dropdown } from 'react-bootstrap'
|
||||
import Icon from '../../../shared/components/icon'
|
||||
import ControlledDropdown from '../../../shared/components/controlled-dropdown'
|
||||
import PdfFileList from './pdf-file-list'
|
||||
import { memo } from 'react'
|
||||
import { useCompileContext } from '../../../shared/context/compile-context'
|
||||
|
||||
function PdfDownloadButton() {
|
||||
const { compiling, pdfDownloadUrl, fileList } = useCompileContext()
|
||||
|
||||
const { t } = useTranslation()
|
||||
|
||||
const disabled = compiling || !pdfDownloadUrl
|
||||
|
||||
return (
|
||||
<ControlledDropdown
|
||||
id="pdf-download-dropdown"
|
||||
className="toolbar-item"
|
||||
disabled={disabled}
|
||||
>
|
||||
<Button
|
||||
bsSize="xsmall"
|
||||
bsStyle="info"
|
||||
disabled={compiling || !pdfDownloadUrl}
|
||||
download
|
||||
href={pdfDownloadUrl || '#'}
|
||||
>
|
||||
<Icon type="download" fw />
|
||||
<span className="toolbar-text toolbar-hide-medium toolbar-hide-small">
|
||||
{t('download_pdf')}
|
||||
</span>
|
||||
</Button>
|
||||
|
||||
<Dropdown.Toggle
|
||||
bsSize="xsmall"
|
||||
bsStyle="info"
|
||||
className="dropdown-toggle"
|
||||
aria-label={t('toggle_output_files_list')}
|
||||
disabled={!fileList}
|
||||
/>
|
||||
|
||||
<Dropdown.Menu id="download-dropdown-list">
|
||||
<PdfFileList fileList={fileList} />
|
||||
</Dropdown.Menu>
|
||||
</ControlledDropdown>
|
||||
)
|
||||
}
|
||||
|
||||
export default memo(PdfDownloadButton)
|
||||
@@ -1,67 +0,0 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import Icon from '../../../shared/components/icon'
|
||||
import PropTypes from 'prop-types'
|
||||
import { memo } from 'react'
|
||||
|
||||
export function PdfLogsButtonContent({
|
||||
showLogs,
|
||||
logEntries,
|
||||
codeCheckFailed,
|
||||
}) {
|
||||
const { t } = useTranslation()
|
||||
|
||||
if (showLogs) {
|
||||
return (
|
||||
<>
|
||||
<Icon type="file-pdf-o" />
|
||||
<span className="toolbar-text toolbar-hide-small">{t('view_pdf')}</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
if (codeCheckFailed) {
|
||||
return (
|
||||
<>
|
||||
<Icon type="exclamation-triangle" />
|
||||
<span className="toolbar-text toolbar-hide-small">
|
||||
{t('code_check_failed')}
|
||||
</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const count = logEntries?.errors?.length || logEntries?.warnings?.length
|
||||
|
||||
if (!count) {
|
||||
return (
|
||||
<>
|
||||
<Icon type="file-text-o" />
|
||||
<span className="toolbar-text toolbar-hide-small">
|
||||
{t('view_logs')}
|
||||
</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Icon type="file-text-o" />
|
||||
<span className="btn-toggle-logs-label toolbar-text toolbar-hide-small">
|
||||
{logEntries.errors?.length
|
||||
? t('your_project_has_an_error', { count })
|
||||
: t('view_warning', { count })}
|
||||
<span className="sr-hidden">
|
||||
{count > 1 && ` (${count > 99 ? '99+' : count})`}
|
||||
</span>
|
||||
</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
PdfLogsButtonContent.propTypes = {
|
||||
codeCheckFailed: PropTypes.bool,
|
||||
showLogs: PropTypes.bool,
|
||||
logEntries: PropTypes.object,
|
||||
}
|
||||
|
||||
export default memo(PdfLogsButtonContent)
|
||||
@@ -1,60 +0,0 @@
|
||||
import { memo, useCallback, useMemo } from 'react'
|
||||
import { Button } from 'react-bootstrap'
|
||||
import { PdfLogsButtonContent } from './pdf-logs-button-content'
|
||||
import { sendMBOnce } from '../../../infrastructure/event-tracking'
|
||||
import { useCompileContext } from '../../../shared/context/compile-context'
|
||||
|
||||
function PdfLogsButton() {
|
||||
const { codeCheckFailed, error, logEntries, showLogs, setShowLogs } =
|
||||
useCompileContext()
|
||||
|
||||
const buttonStyle = useMemo(() => {
|
||||
if (showLogs) {
|
||||
return 'default'
|
||||
}
|
||||
|
||||
if (codeCheckFailed) {
|
||||
return 'danger'
|
||||
}
|
||||
|
||||
if (logEntries) {
|
||||
if (logEntries.errors?.length) {
|
||||
return 'danger'
|
||||
}
|
||||
|
||||
if (logEntries.warnings?.length) {
|
||||
return 'warning'
|
||||
}
|
||||
}
|
||||
|
||||
return 'default'
|
||||
}, [codeCheckFailed, logEntries, showLogs])
|
||||
|
||||
const handleClick = useCallback(() => {
|
||||
setShowLogs(value => {
|
||||
if (!value) {
|
||||
sendMBOnce('ide-open-logs-once')
|
||||
}
|
||||
|
||||
return !value
|
||||
})
|
||||
}, [setShowLogs])
|
||||
|
||||
return (
|
||||
<Button
|
||||
bsSize="xsmall"
|
||||
bsStyle={buttonStyle}
|
||||
disabled={Boolean(error)}
|
||||
className="btn-toggle-logs toolbar-item"
|
||||
onClick={handleClick}
|
||||
>
|
||||
<PdfLogsButtonContent
|
||||
showLogs={showLogs}
|
||||
logEntries={logEntries}
|
||||
codeCheckFailed={codeCheckFailed}
|
||||
/>
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
|
||||
export default memo(PdfLogsButton)
|
||||
@@ -4,13 +4,8 @@ import PdfLogsViewer from './pdf-logs-viewer'
|
||||
import PdfViewer from './pdf-viewer'
|
||||
import LoadingSpinner from '../../../shared/components/loading-spinner'
|
||||
import PdfHybridPreviewToolbar from './pdf-preview-hybrid-toolbar'
|
||||
import PdfPreviewToolbar from './pdf-preview-toolbar'
|
||||
import { useCompileContext } from '../../../shared/context/compile-context'
|
||||
|
||||
const newPreviewToolbar = new URLSearchParams(window.location.search).has(
|
||||
'new_preview_toolbar'
|
||||
)
|
||||
|
||||
function PdfPreviewPane() {
|
||||
const { pdfUrl } = useCompileContext()
|
||||
const classes = classNames('pdf', 'full-size', {
|
||||
@@ -18,7 +13,7 @@ function PdfPreviewPane() {
|
||||
})
|
||||
return (
|
||||
<div className={classes}>
|
||||
{newPreviewToolbar ? <PdfPreviewToolbar /> : <PdfHybridPreviewToolbar />}
|
||||
<PdfHybridPreviewToolbar />
|
||||
<Suspense fallback={<LoadingPreview />}>
|
||||
<div className="pdf-viewer">
|
||||
<PdfViewer />
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
import PdfCompileButton from './pdf-compile-button'
|
||||
import PdfDownloadButton from './pdf-download-button'
|
||||
import PdfLogsButton from './pdf-logs-button'
|
||||
import PdfExpandButton from './pdf-expand-button'
|
||||
import { ButtonToolbar } from 'react-bootstrap'
|
||||
import { memo, useState } from 'react'
|
||||
import useToolbarBreakpoint from '../hooks/use-toolbar-breakpoint'
|
||||
|
||||
const isPreview = new URLSearchParams(window.location.search).get('preview')
|
||||
|
||||
function PdfPreviewToolbar() {
|
||||
const [element, setElement] = useState()
|
||||
|
||||
const toolbarClasses = useToolbarBreakpoint(element)
|
||||
|
||||
return (
|
||||
<div ref={element => setElement(element)}>
|
||||
<ButtonToolbar className={toolbarClasses}>
|
||||
<div className="toolbar-pdf-left">
|
||||
<PdfCompileButton />
|
||||
<PdfDownloadButton />
|
||||
</div>
|
||||
<div className="toolbar-pdf-right">
|
||||
<PdfLogsButton />
|
||||
{!isPreview && <PdfExpandButton />}
|
||||
</div>
|
||||
</ButtonToolbar>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default memo(PdfPreviewToolbar)
|
||||
@@ -1,71 +0,0 @@
|
||||
import { useEffect, useLayoutEffect, useMemo, useState } from 'react'
|
||||
import classnames from 'classnames'
|
||||
|
||||
const measureContentWidth = element =>
|
||||
[...element.querySelectorAll('button')].reduce(
|
||||
(output, item) => output + item.scrollWidth,
|
||||
0
|
||||
)
|
||||
|
||||
export default function useToolbarBreakpoint(element) {
|
||||
const [breakpoint, setBreakpoint] = useState(2)
|
||||
const [recalculate, setRecalculate] = useState(true)
|
||||
|
||||
const [resizeObserver] = useState(() => {
|
||||
if ('ResizeObserver' in window) {
|
||||
return new ResizeObserver(() => {
|
||||
setBreakpoint(2)
|
||||
setRecalculate(true)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const [mutationObserver] = useState(
|
||||
() =>
|
||||
new MutationObserver(() => {
|
||||
setBreakpoint(2)
|
||||
setRecalculate(true)
|
||||
})
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
if (element && mutationObserver && resizeObserver) {
|
||||
resizeObserver.observe(element)
|
||||
|
||||
mutationObserver.observe(element, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
characterData: true,
|
||||
})
|
||||
|
||||
return () => {
|
||||
mutationObserver.disconnect()
|
||||
resizeObserver.disconnect()
|
||||
}
|
||||
}
|
||||
}, [element, mutationObserver, resizeObserver])
|
||||
|
||||
useLayoutEffect(() => {
|
||||
if (recalculate && element && breakpoint) {
|
||||
const contentWidth = measureContentWidth(element) + 150 // NOTE: remove this constant?
|
||||
|
||||
if (contentWidth > element.clientWidth) {
|
||||
setBreakpoint(value => value - 1)
|
||||
} else {
|
||||
setRecalculate(false)
|
||||
}
|
||||
}
|
||||
}, [element, breakpoint, recalculate])
|
||||
|
||||
return useMemo(
|
||||
() =>
|
||||
classnames({
|
||||
toolbar: true,
|
||||
'toolbar-pdf': true,
|
||||
'toolbar-large': breakpoint === 2,
|
||||
'toolbar-medium': breakpoint === 1,
|
||||
'toolbar-small': breakpoint === 0,
|
||||
}),
|
||||
[breakpoint]
|
||||
)
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import { setupContext } from './fixtures/context'
|
||||
import { Button } from 'react-bootstrap'
|
||||
import PdfPreviewPane from '../js/features/pdf-preview/components/pdf-preview-pane'
|
||||
import PdfPreview from '../js/features/pdf-preview/components/pdf-preview'
|
||||
import PdfPreviewToolbar from '../js/features/pdf-preview/components/pdf-preview-toolbar'
|
||||
import PdfFileList from '../js/features/pdf-preview/components/pdf-file-list'
|
||||
import { buildFileList } from '../js/features/pdf-preview/util/file-list'
|
||||
import PdfLogsViewer from '../js/features/pdf-preview/components/pdf-logs-viewer'
|
||||
@@ -30,7 +29,6 @@ export default {
|
||||
title: 'PDF Preview',
|
||||
component: PdfPreview,
|
||||
subcomponents: {
|
||||
PdfPreviewToolbar,
|
||||
PdfPreviewHybridToolbar,
|
||||
PdfFileList,
|
||||
PdfPreviewError,
|
||||
@@ -330,20 +328,6 @@ export const DisplayError = () => {
|
||||
)
|
||||
}
|
||||
|
||||
export const Toolbar = () => {
|
||||
useFetchMock(fetchMock => {
|
||||
mockCompile(fetchMock, 500)
|
||||
mockBuildFile(fetchMock)
|
||||
})
|
||||
|
||||
return withContextRoot(
|
||||
<div className="pdf">
|
||||
<PdfPreviewToolbar />
|
||||
</div>,
|
||||
scope
|
||||
)
|
||||
}
|
||||
|
||||
export const HybridToolbar = () => {
|
||||
useFetchMock(fetchMock => {
|
||||
mockCompile(fetchMock, 500)
|
||||
|
||||
Reference in New Issue
Block a user