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(' ', '
')+"'", tooltip-placement="bottom" ) i.fa.fa-fw.fa-file a( href, ng-click="openNewFolderModal()", tooltip-html="'"+translate('new_folder').replace(' ', '
')+"'", 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' && (depth == null || depth < MAX_DEPTH)" 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']" depth="(depth || 0) + 1" ) .entity-limit-hit( ng-if="depth === MAX_DEPTH" ng-show="expanded" ) i.fa.fa-fw span.entity-limit-hit-message | Some files might be missing | i.fa.fa-question-circle.entity-limit-hit-tooltip-trigger( tooltip="Your project has hit Overleaf's maximum file depth limit. Files within this folder won't be visible." tooltip-append-to-body="true" aria-hidden="true" ) span.sr-only | Your project has hit Overleaf's maximum file depth limit. Files within this folder won't be visible. 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')}