overleaf/services/web/app/views/project/editor/file-tree.pug
Timothée Alby 558854f51b Merge pull request #3030 from overleaf/ta-outline-highlight
Outline Highlight

GitOrigin-RevId: f51eec6f1714403d749e454b55be363819930b98
2020-08-10 15:54:08 +00:00

410 lines
11 KiB
Text

aside.editor-sidebar.full-size(
ng-controller="FileTreeController"
ng-class="{ 'multi-selected': multiSelectedCount > 0 }"
ng-show="ui.view != 'history' || !history.isV2"
vertical-resizable-panes=user.betaProgram && "outline-resizer"
vertical-resizable-panes-toggled-externally-on=user.betaProgram && "outline-toggled"
vertical-resizable-panes-min-size=user.betaProgram && "32"
vertical-resizable-panes-max-size=user.betaProgram && "75%"
)
.file-tree(
vertical-resizable-top=user.betaProgram
)
.toolbar.toolbar-filetree(ng-if="permissions.write")
a(
href,
ng-click="openNewDocModal()",
tooltip-html="'"+translate('new_file').replace(' ', '<br>')+"'",
tooltip-placement="bottom"
)
i.fa.fa-fw.fa-file
a(
href,
ng-click="openNewFolderModal()",
tooltip-html="'"+translate('new_folder').replace(' ', '<br>')+"'",
tooltip-placement="bottom"
)
i.fa.fa-fw.fa-folder
a(
href,
ng-click="openUploadFileModal()",
tooltip=translate('upload'),
tooltip-placement="bottom"
)
i.fa.fa-fw.fa-upload
.toolbar-right
a(
href,
ng-click="startRenamingSelected()",
tooltip=translate('rename'),
tooltip-placement="bottom",
ng-show="multiSelectedCount == 0"
)
i.fa.fa-fw.fa-pencil
a(
href,
ng-click="openDeleteModalForSelected()",
tooltip=translate('delete'),
tooltip-placement="bottom",
tooltip-append-to-body="true"
)
i.fa.fa-fw.fa-trash-o
.file-tree-inner(
ng-if="rootFolder",
ng-controller="FileTreeRootFolderController",
ng-class="{ 'no-toolbar': !permissions.write }"
)
ul.list-unstyled.file-tree-list(
droppable="permissions.write"
accept=".entity-name"
on-drop-callback="onDrop"
)
li(
ng-show="ui.pdfLayout == 'flat' && (ui.view == 'editor' || ui.view == 'pdf' || ui.view == 'file')"
ng-class="{ 'selected': ui.view == 'pdf' }"
ng-controller="PdfViewToggleController"
)
.entity
.entity-name(
ng-click="togglePdfView()"
)
i.fa.fa-fw.toggle
i.fa.fa-fw.fa-file-pdf-o
| PDF
file-entity(
entity="entity",
permissions="permissions",
ng-repeat="entity in rootFolder.children | orderBy:[orderByFoldersFirst, 'name']"
)
li(ng-show="deletedDocs.length > 0 && ui.view == 'history'")
h3 #{translate("deleted_files")}
li(
ng-class="{ 'selected': entity.selected }",
ng-repeat="entity in deletedDocs | orderBy:'name'",
ng-controller="FileTreeEntityController",
ng-show="ui.view == 'history'"
)
.entity
.entity-name(
ng-click="select($event)"
)
//- Just a spacer to align with folders
i.fa.fa-fw.toggle
i.fa.fa-fw.fa-file
span {{ entity.name }}
if user.betaProgram
.outline-container(
vertical-resizable-bottom
ng-controller="OutlineController"
)
outline-pane(
is-tex-file="isTexFile"
outline="outline"
project-id="project_id"
jump-to-line="jumpToLine"
on-toggle="onToggle"
event-tracking="eventTracking"
highlighted-line="highlightedLine"
)
script(type='text/ng-template', id='entityListItemTemplate')
li(
ng-class="{ 'selected': entity.selected, 'multi-selected': entity.multiSelected }",
ng-controller="FileTreeEntityController"
)
.entity(ng-if="entity.type != 'folder'")
.entity-name(
ng-click="select($event)"
ng-dblclick="permissions.write && startRenaming()"
draggable="permissions.write"
draggable-helper="draggableHelper"
context-menu
data-target="context-menu-{{ entity.id }}"
context-menu-container="body"
context-menu-disabled="!permissions.write"
)
//- Just a spacer to align with folders
i.fa.fa-fw.toggle(ng-if="entity.type != 'folder'")
i.fa.fa-fw(ng-if="entity.type != 'folder'", ng-class="'fa-' + iconTypeFromName(entity.name)")
i.fa.fa-external-link-square.fa-rotate-180.linked-file-highlight(
ng-if="entity.linkedFileData.provider"
)
span(
ng-hide="entity.renaming"
) {{ entity.renamingToName || entity.name }}
span.rename-input
input(
ng-if="permissions.write",
ng-show="entity.renaming",
ng-model="inputs.name",
ng-blur="finishRenaming()",
select-name-when="entity.renaming",
on-enter="finishRenaming()"
valid-file
)
span.dropdown.entity-menu-toggle(
dropdown,
ng-if="permissions.write"
)
a.dropdown-toggle(href, dropdown-toggle, stop-propagation="click")
i.fa.fa-chevron-down
ul.dropdown-menu.dropdown-menu-right
li
a(
href
ng-click="startRenaming()"
right-click="startRenaming()"
ng-show="!entity.multiSelected"
) #{translate("rename")}
li
a(
href
ng-click="openDeleteModal()"
right-click="openDeleteModal()"
stop-propagation="click"
) #{translate("delete")}
div.dropdown.context-menu(
id="context-menu-{{ entity.id }}",
ng-if="permissions.write"
)
ul.dropdown-menu
li
a(
href
ng-click="startRenaming()"
right-click="startRenaming()"
ng-show="!entity.multiSelected"
) #{translate("rename")}
li
a(
href
ng-click="openDeleteModal()"
right-click="openDeleteModal()"
stop-propagation="click"
) #{translate("delete")}
.entity(ng-if="entity.type == 'folder'", ng-controller="FileTreeFolderController")
.entity-name(
ng-click="select($event)"
ng-dblclick="permissions.write && startRenaming()"
draggable="permissions.write"
draggable-helper="draggableHelper"
droppable="permissions.write"
accept=".entity-name"
on-drop-callback="onDrop"
)
div(
context-menu
data-target="context-menu-{{ entity.id }}"
context-menu-container="body"
context-menu-disabled="!permissions.write"
)
i.fa.fa-fw.toggle(
ng-if="entity.type == 'folder'"
ng-class="{'fa-chevron-right': !expanded, 'fa-chevron-down': expanded}"
ng-click="toggleExpanded()"
)
i.fa.fa-fw(
ng-if="entity.type == 'folder'"
ng-class="{\
'fa-folder': !expanded, \
'fa-folder-open': expanded \
}"
ng-click="select($event)"
)
span(
ng-hide="entity.renaming"
) {{ entity.renamingToName || entity.name }}
span.rename-input
input(
ng-if="permissions.write",
ng-show="entity.renaming",
ng-model="inputs.name",
ng-blur="finishRenaming()",
select-name-when="entity.renaming",
on-enter="finishRenaming()"
valid-file
)
span.dropdown.entity-menu-toggle(
dropdown,
ng-if="permissions.write"
)
a.dropdown-toggle(href, dropdown-toggle, stop-propagation="click")
i.fa.fa-chevron-down
ul.dropdown-menu.dropdown-menu-right
li
a(
href
ng-click="startRenaming()"
right-click="startRenaming()"
ng-show="!entity.multiSelected"
) #{translate("rename")}
li
a(
href
ng-click="openDeleteModal()"
right-click="openDeleteModal()"
stop-propagation="click"
) #{translate("delete")}
li.divider
li
a(
href
ng-click="openNewDocModal()"
right-click="openNewDocModal()"
) #{translate("new_file")}
li
a(
href
ng-click="openNewFolderModal()"
right-click="openNewFolderModal()"
) #{translate("new_folder")}
li
a(
href
ng-click="openUploadFileModal()"
right-click="openUploadFileModal()"
) #{translate("upload_file")}
.dropdown.context-menu(
ng-if="permissions.write"
id="context-menu-{{ entity.id }}"
)
ul.dropdown-menu
li
a(
href
ng-click="startRenaming()"
right-click="startRenaming()"
ng-show="!entity.multiSelected"
) #{translate("rename")}
li
a(
href
ng-click="openDeleteModal()"
right-click="openDeleteModal()"
stop-propagation="click"
) #{translate("delete")}
li.divider
li
a(
href
ng-click="openNewDocModal()"
right-click="openNewDocModal()"
) #{translate("new_file")}
li
a(
href
ng-click="openNewFolderModal()"
right-click="openNewFolderModal()"
) #{translate("new_folder")}
li
a(
href
ng-click="openUploadFileModal()"
right-click="openUploadFileModal()"
) #{translate("upload_file")}
ul.list-unstyled(
ng-if="entity.type == 'folder'"
ng-show="expanded"
droppable="permissions.write"
accept=".entity-name"
on-drop-callback="onDrop"
)
file-entity(
entity="child",
permissions="permissions",
ng-repeat="child in entity.children | orderBy:[orderByFoldersFirst, 'name']"
)
script(type='text/ng-template', id='newFolderModalTemplate')
.modal-header
h3 #{translate("new_folder")}
.modal-body
form(novalidate, name="newFolderForm")
input.form-control(
type="text",
placeholder="Folder Name",
required,
ng-model="inputs.name",
on-enter="create()",
select-name-on="open",
valid-file,
name="name"
)
div.alert.alert-danger.row-spaced-small(ng-show="newFolderForm.name.$error.validFile")
| #{translate('files_cannot_include_invalid_characters')}
div.alert.alert-danger.row-spaced-small(ng-if="error")
div(ng-switch="error")
span(ng-switch-when="already exists") #{translate("file_already_exists")}
span(ng-switch-default) {{error}}
.modal-footer
button.btn.btn-default(
ng-disabled="state.inflight"
ng-click="cancel()"
) #{translate("cancel")}
button.btn.btn-primary(
ng-disabled="newFolderForm.$invalid || state.inflight"
ng-click="create()"
)
span(ng-hide="state.inflight") #{translate("create")}
span(ng-show="state.inflight") #{translate("creating")}…
script(type='text/ng-template', id='duplicateFileModalTemplate')
.modal-header
h3 #{translate("duplicate_file")}
.modal-body
p #{translate("file_already_exists_in_this_location", { fileName: "'{{ fileName }}'" })}
.modal-footer
button.btn.btn-default(
ng-click="cancel()"
) #{translate("dismiss")}
include ./new-file-modal
script(type='text/ng-template', id='deleteEntityModalTemplate')
.modal-header
h3 #{translate("delete")} {{ entity.name }}
.modal-body
p !{translate("sure_you_want_to_delete")}
ul
li(ng-repeat="entity in entities") {{entity.name}}
.modal-footer
button.btn.btn-default(
ng-disabled="state.inflight"
ng-click="cancel()"
) #{translate("cancel")}
button.btn.btn-danger(
ng-disabled="state.inflight"
ng-click="delete()"
)
span(ng-hide="state.inflight") #{translate("delete")}
span(ng-show="state.inflight") #{translate("deleting")}…
script(type='text/ng-template', id='invalidFileNameModalTemplate')
.modal-header
h3 #{translate('invalid_file_name')}
.modal-body
p #{translate('files_cannot_include_invalid_characters')}
.modal-footer
button.btn.btn-default(
ng-click="$close()"
) #{translate('ok')}