2020-07-08 17:30:37 +02:00
<!DOCTYPE html>
< html ng-app = "Application" ng-controller = "FileManagerController" >
< head >
2020-11-09 23:49:22 +01:00
< meta charset = "utf-8" / >
< meta name = "viewport" content = "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" / >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
< title > FileManager < / title >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
< link id = "favicon" href = "/api/v1/cloudron/avatar" rel = "icon" type = "image/png" >
< link rel = "apple-touch-icon" href = "/api/v1/cloudron/avatar" >
< link rel = "icon" href = "/api/v1/cloudron/avatar" >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- CSS -->
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/angular-ui-notification.css" / >
< link type = "text/css" rel = "stylesheet" href = "/theme.css" >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- Fontawesome -->
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/fontawesome/css/all.css" / >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- jQuery -->
< script type = "text/javascript" src = "/3rdparty/js/jquery.min.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- async -->
< script type = "text/javascript" src = "/3rdparty/js/async-3.2.0.min.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- Showdown (markdown converter) -->
< script type = "text/javascript" src = "/3rdparty/js/showdown-1.9.1.min.js" > < / script >
2020-07-10 15:27:44 +02:00
2020-11-09 23:49:22 +01:00
<!-- Bootstrap Core JavaScript -->
< script type = "text/javascript" src = "/3rdparty/js/bootstrap.min.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- Angularjs scripts -->
< script type = "text/javascript" src = "/3rdparty/js/angular.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-loader.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-cookies.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-animate.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-base64.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-md5.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-sanitize.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-ui-notification.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- Angular directives for bootstrap https://angular - ui.github.io/bootstrap/ -->
< script type = "text/javascript" src = "/3rdparty/js/ui-bootstrap-tpls-1.3.3.min.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- Angular translate https://angular - translate.github.io/ -->
< script type = "text/javascript" src = "/3rdparty/js/angular-translate.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-loader-static-files.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-cookie.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-local.min.js" > < / script >
2020-11-08 10:48:30 +01:00
2020-11-09 23:49:22 +01:00
<!-- colors -->
< script type = "text/javascript" src = "/3rdparty/js/colors.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- moment -->
< script type = "text/javascript" src = "/3rdparty/js/moment.min.js" > < / script >
2020-07-08 17:30:37 +02:00
2020-11-09 23:49:22 +01:00
<!-- https://github.com/data - uri/mimer -->
< script type = "text/javascript" src = "/3rdparty/js/mimer.min.js" > < / script >
2020-07-13 23:35:49 +02:00
2020-11-09 23:49:22 +01:00
<!-- https://github.com/Templarian/ui.bootstrap.contextMenu ui.bootstrap.contextMenu -->
< script type = "text/javascript" src = "/3rdparty/js/contextMenu.js" > < / script >
2020-07-14 23:49:14 +02:00
2020-11-09 23:49:22 +01:00
<!-- WARNING this adds an AMD loader! Make sure script tag includes like mimer are above -->
<!-- monaco - editor -->
< script type = "text/javascript" src = "/3rdparty/vs/loader.js" > < / script >
2020-07-21 16:27:51 +02:00
2020-11-09 23:49:22 +01:00
<!-- Main Application -->
< script type = "text/javascript" src = "/js/filemanager.js" > < / script >
2020-07-08 17:30:37 +02:00
< / head >
2020-07-14 15:32:31 +02:00
< body class = "filemanager" ng-drop = "drop($event)" ng-dragover = "dragEnter($event)" ng-dragleave = "dragExit($event)" >
2020-07-08 17:30:37 +02:00
2020-09-09 10:08:13 -07:00
< a class = "offline-banner animateMe" ng-show = "client.offline" ng-cloak href = "https://docs.cloudron.io/troubleshooting/" target = "_blank" > < i class = "fa fa-circle-notch fa-spin" > < / i > Cloudron is offline. Reconnecting...< / a >
2020-07-08 17:30:37 +02:00
2020-07-21 16:27:51 +02:00
<!-- Modal image/video viewer -->
< div class = "modal fade" id = "mediaViewerModal" tabindex = "-1" role = "dialog" >
2020-11-04 13:03:36 +01:00
< div class = "modal-dialog" style = "max-width: 1280px; max-height: calc(100% - 60px);" >
2020-07-21 16:27:51 +02:00
< div class = "modal-content" style = "height: 100%; height: 100%; display: flex; background-color: #000; background-clip: border-box;" >
2020-11-04 13:03:36 +01:00
< img ng-show = "mediaViewer.type === 'image'" ng-src = "{{ mediaViewer.src }}" style = "display: block; margin: auto; max-width: 100%; max-height: 100%;" / >
< video ng-show = "mediaViewer.type === 'video'" controls preload = "auto" autoplay ng-src = "{{ mediaViewer.src | trustUrl}}" style = "display: block; margin: auto; max-width: 100%; max-height: 100%;" > < / video >
2020-07-21 16:27:51 +02:00
< / div >
< / div >
< / div >
2020-07-09 11:00:11 +02:00
<!-- Modal remove entry -->
< div class = "modal fade" id = "entryRemoveModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-body" >
< p class = "text-bold text-danger" ng-show = "entryRemove.error" > {{ entryRemove.error }}< / p >
2020-07-10 15:11:09 +02:00
< h4 ng-hide = "entryRemove.error" > Really delete {{ entryRemove.entry.fileName }}?< / h4 >
2020-07-09 11:00:11 +02:00
< / div >
< div class = "modal-footer" >
2020-07-10 15:11:09 +02:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > No< / button >
< button type = "button" class = "btn btn-danger" ng-click = "entryRemove.submit()" ng-hide = "entryRemove.error" ng-disabled = "entryRemove.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "entryRemove.busy" > < / i > Yes< / button >
2020-07-09 11:00:11 +02:00
< / div >
< / div >
< / div >
< / div >
2020-07-09 12:05:14 +02:00
<!-- Modal new directory -->
< div class = "modal fade" id = "newDirectoryModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-07-10 15:11:09 +02:00
< h4 class = "modal-title" > New Folder< / h4 >
2020-07-09 12:05:14 +02:00
< / div >
< div class = "modal-body" >
< form role = "form" name = "newDirectoryForm" ng-submit = "newDirectory.submit()" autocomplete = "off" >
< fieldset >
2020-07-10 15:11:09 +02:00
< div class = "form-group" ng-class = "{ 'has-error': newDirectory.error || (newDirectoryForm.directoryName.$dirty && newDirectoryForm.directoryName.$invalid) }" >
< input type = "text" class = "form-control" id = "inputDirectoryName" name = "directoryName" ng-model = "newDirectory.name" required autofocus >
2020-07-09 12:05:14 +02:00
< div class = "control-label" ng-show = "newDirectory.error" > {{ newDirectory.error }}< / div >
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "newDirectoryForm.$invalid || newDirectory.busy" / >
< / fieldset >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
2020-07-10 15:11:09 +02:00
< button type = "button" class = "btn btn-danger" ng-click = "newDirectory.submit()" ng-disabled = "newDirectory.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "newDirectory.busy" > < / i > Create< / button >
2020-07-09 12:05:14 +02:00
< / div >
< / div >
< / div >
< / div >
2020-10-22 10:25:50 +02:00
<!-- Modal new file -->
< div class = "modal fade" id = "newFileModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > New File< / h4 >
< / div >
< div class = "modal-body" >
< form role = "form" name = "newFileForm" ng-submit = "newFile.submit()" autocomplete = "off" >
< fieldset >
< div class = "form-group" ng-class = "{ 'has-error': newFile.error || (newFileForm.fileName.$dirty && newFileForm.fileName.$invalid) }" >
< input type = "text" class = "form-control" id = "inputFileName" name = "fileName" ng-model = "newFile.name" required autofocus >
< div class = "control-label" ng-show = "newFile.error" > {{ newFile.error }}< / div >
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "newFileForm.$invalid || newFile.busy" / >
< / fieldset >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< button type = "button" class = "btn btn-danger" ng-click = "newFile.submit()" ng-disabled = "newFile.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "newFile.busy" > < / i > Create< / button >
< / div >
< / div >
< / div >
< / div >
2020-07-09 12:59:29 +02:00
<!-- Modal rename entry -->
< div class = "modal fade" id = "renameEntryModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-07-09 16:26:23 +02:00
< h4 class = "modal-title" > Rename {{ renameEntry.entry.fileName }}< / h4 >
2020-07-09 12:59:29 +02:00
< / div >
< div class = "modal-body" >
< form role = "form" name = "renameEntryForm" ng-submit = "renameEntry.submit()" autocomplete = "off" >
< fieldset >
< div class = "form-group" ng-class = "{ 'has-error': (renameEntryForm.newName.$dirty && renameEntryForm.newName.$invalid) }" >
< label class = "control-label" > New Name< / label >
< div class = "control-label" ng-show = "renameEntry.error" > {{ renameEntry.error }}< / div >
2020-07-13 17:05:01 +02:00
< input type = "text" class = "form-control" id = "inputNewName" name = "newName" ng-model = "renameEntry.newName" required autofocus >
2020-07-09 12:59:29 +02:00
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "renameEntryForm.$invalid || renameEntry.busy" / >
< / fieldset >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< button type = "button" class = "btn btn-danger" ng-click = "renameEntry.submit()" ng-hide = "renameEntry.error" ng-disabled = "renameEntry.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "renameEntry.busy" > < / i > Rename< / button >
< / div >
< / div >
< / div >
< / div >
2020-07-13 18:30:29 +02:00
<!-- Modal chown entry -->
< div class = "modal fade" id = "chownEntryModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Change ownership for {{ chownEntry.entry.fileName }}< / h4 >
< / div >
< div class = "modal-body" >
< form role = "form" name = "chownEntryForm" ng-submit = "chownEntry.submit()" autocomplete = "off" >
< fieldset >
< div class = "form-group" ng-class = "{ 'has-error': (chownEntryForm.newOwner.$dirty && chownEntry.error) }" >
< label class = "control-label" > New Owner< / label >
< div class = "control-label" for = "inputNewOwner" ng-show = "chownEntry.error" > {{ chownEntry.error }}< / div >
< select class = "form-control" id = "inputNewOwner" name = "newOwner" ng-model = "chownEntry.newOwner" ng-options = "a.value as a.name for a in owners" ng-disabled = "chownEntry.busy" > < / select >
< / div >
< div class = "form-group" ng-show = "chownEntry.entry.isDirectory" >
< input type = "checkbox" id = "inputNewOwnerRecursive" ng-model = "chownEntry.recursive" >
< label class = "control-label" for = "inputNewOwnerRecursive" > Change ownership recursively< / label >
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "chownEntryForm.$invalid || chownEntry.busy" / >
< / fieldset >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< button type = "button" class = "btn btn-danger" ng-click = "chownEntry.submit()" ng-hide = "chownEntry.error" ng-disabled = "chownEntry.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "chownEntry.busy" > < / i > Change Owner< / button >
< / div >
< / div >
< / div >
< / div >
2020-07-10 19:10:29 +02:00
<!-- Modal upload -->
< div class = "modal fade" id = "uploadModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Uploading files ({{ uploadStatus.countDone }}/{{ uploadStatus.count }})< / h4 >
< / div >
< div class = "modal-body" >
2020-10-08 16:05:24 +02:00
< div ng-show = "uploadStatus.error" >
2020-10-22 12:45:05 +02:00
< p class = "text-danger" ng-show = "uploadStatus.error === 'exists'" > One or more files already exist.< / p >
< p class = "text-danger" ng-show = "uploadStatus.error === 'generic'" > Failed to upload one or more files. Please try again.< / p >
2020-10-08 16:05:24 +02:00
< / div >
< div class = "progress progress-striped active" ng-hide = "uploadStatus.error" >
2020-07-10 19:10:29 +02:00
< div class = "progress-bar progress-bar-success" role = "progressbar" style = "width: {{ uploadStatus.percentDone || 0 }}%" > < / div >
< / div >
2020-10-08 16:05:24 +02:00
< p class = "no-wrap" ng-hide = "uploadStatus.error" > {{ uploadStatus.fileName }}< / p >
2020-07-10 19:10:29 +02:00
< / div >
< div class = "modal-footer" style = "text-align: left;" >
2020-10-08 16:05:24 +02:00
< small ng-hide = "uploadStatus.error" > Do not refresh the page until upload has finished.< / small >
2020-10-22 12:45:05 +02:00
< button class = "btn btn-default pull-right" ng-show = "uploadStatus.error" data-dismiss = "modal" > Close< / button >
< button class = "btn btn-primary pull-right" ng-show = "uploadStatus.error === 'generic'" ng-click = "retryUpload(false)" > Retry< / button >
< button class = "btn btn-danger pull-right" ng-show = "uploadStatus.error === 'exists'" ng-click = "retryUpload(true)" > Overwrite< / button >
2020-07-10 19:10:29 +02:00
< / div >
< / div >
< / div >
< / div >
2020-10-19 21:38:15 -07:00
<!-- Modal extract -->
< div class = "modal fade" id = "extractModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Extracting {{ extractStatus.fileName }}< / h4 >
< / div >
< div class = "modal-body" >
< div ng-show = "extractStatus.error" >
< p class = "text-danger" > {{ extractStatus.error }}< / p >
< / div >
< div class = "progress progress-striped active" ng-hide = "extractStatus.error" >
< div class = "progress-bar" role = "progressbar" style = "width: 100%" >
< / div >
< / div >
< p class = "no-wrap" ng-hide = "extractStatus.error" > {{ extractStatus.fileName }}< / p >
< / div >
< div class = "modal-footer" style = "text-align: left;" >
< small ng-hide = "extractStatus.error" > Do not refresh the page until extract has finished.< / small >
< button class = "btn btn-primary pull-right" ng-show = "extractStatus.error" data-dismiss = "modal" > Close< / button >
< / div >
< / div >
< / div >
< / div >
2020-09-05 22:44:06 -07:00
<!-- Modal editor close -->
< div class = "modal fade" id = "textEditorCloseModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > File has unsaved changes< / h4 >
< / div >
< div class = "modal-body" >
< p class = "text-bold text-danger" > Your changes will be lost if you don't save them< / p >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" ng-click = "textEditor.close()" > Don't Save< / button >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" ng-click = "textEditor.saveAndClose()" > < i class = "fa fa-circle-notch fa-spin" ng-show = "textEditor.busy" > < / i > Save< / button >
< / div >
< / div >
< / div >
< / div >
2020-07-10 15:27:44 +02:00
< div class = "main-container animateMe ng-hide layout-root" ng-show = "initialized" >
2020-08-31 17:46:26 +02:00
< div ng-show = "view === 'fileTree'" class = "layout-content container" >
2020-10-30 10:33:05 -07:00
< div class = "row" ng-hide = "title" >
2020-07-10 16:10:49 +02:00
< div class = "col-md-12 text-center" >
2020-10-30 10:33:05 -07:00
< h3 > Not found< / h3 >
2020-07-10 16:10:49 +02:00
< / div >
< / div >
2020-07-08 17:30:37 +02:00
2020-10-30 10:33:05 -07:00
< div class = "card card-large" ng-show = "title" >
2020-07-09 15:59:06 +02:00
2020-07-14 14:03:40 +02:00
< input type = "file" id = "uploadFileInput" style = "display: none" multiple / >
< input type = "file" id = "uploadFolderInput" style = "display: none" multiple webkitdirectory directory / >
2020-07-10 15:01:56 +02:00
2020-10-30 10:33:05 -07:00
< h4 class = "text-center" > {{ title }}< / h4 >
2020-07-10 15:27:44 +02:00
2020-07-14 14:03:40 +02:00
< div style = "margin-bottom: 10px;" >
< div class = "btn-group" role = "group" >
< button class = "btn btn-primary" ng-click = "goDirectoryUp()" ng-disabled = "cwd === '/'" > < i class = "fas fa-arrow-left" > < / i > < / button >
< button class = "btn btn-primary" ng-click = "refresh()" > < i class = "fas fa-sync-alt" > < / i > < / button >
2020-07-10 15:27:44 +02:00
< / div >
2020-07-14 14:03:40 +02:00
< div class = "btn-group" role = "group" >
< button class = "btn btn-default" ng-disabled = "cwd === '/'" ng-click = "changeDirectory('/')" > < i class = "fas fa-home" > < / i > / < / button >
< button class = "btn btn-default" ng-disabled = "part.path === cwd" ng-click = "changeDirectory(part.path)" ng-repeat = "part in cwdParts" > {{ part.name }}< / button >
< / div >
2020-10-22 10:25:50 +02:00
< div class = "pull-right" >
< div class = "btn-group" >
< button type = "button" class = "btn btn-primary dropdown-toggle" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" > < i class = "fas fa-plus" > < / i > New< / button >
< ul class = "dropdown-menu" >
2020-11-03 21:35:48 +01:00
< li > < a class = "hand" ng-click = "newFile.show()" > New File< / a > < / li >
< li > < a class = "hand" ng-click = "newDirectory.show()" > New Folder< / a > < / li >
2020-10-22 10:25:50 +02:00
< / ul >
< / div >
< div class = "btn-group" >
< button type = "button" class = "btn btn-primary dropdown-toggle" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" > < i class = "fas fa-upload" > < / i > Upload< / button >
< ul class = "dropdown-menu dropdown-menu-right" >
2020-11-03 21:35:48 +01:00
< li > < a class = "hand" ng-click = "onUploadFile()" > Upload File< / a > < / li >
< li > < a class = "hand" ng-click = "onUploadFolder()" > Upload Folder< / a > < / li >
2020-10-22 10:25:50 +02:00
< / ul >
< / div >
2020-07-14 14:03:40 +02:00
< / div >
< / div >
2020-11-08 00:46:34 +01:00
< div class = "file-list-header" >
< table class = "table" style = "margin: 0;" >
2020-07-14 14:03:40 +02:00
< thead >
< tr >
2020-11-08 00:46:34 +01:00
< th style = "width: 40px;" > < / th >
< th style = "" > Name< / th >
< th style = "width: 80px" > Size< / th >
< th style = "width:100px" > Owner< / th >
< th style = "width: 40px" > < / th >
2020-07-14 14:03:40 +02:00
< / tr >
< / thead >
2020-11-08 00:46:34 +01:00
< / table >
< / div >
< div class = "file-list" ng-class = "{ 'entry-hovered': dropToBody, 'busy': busy }" >
< table class = "table table-hover" style = "margin: 0;" >
2020-07-14 14:03:40 +02:00
< tbody >
< tr ng-show = "entries.length === 0" >
< td colspan = "5" class = "text-center" > No files< / td >
< / tr >
2020-11-07 22:43:24 +01:00
< tr ng-repeat = "entry in entries | orderBy:sortProperty:sortAsc | orderBy:'isDirectory':true" draggable = "true" ng-dragstart = "dragStart($event, entry)" ng-drop = "drop($event, entry)" context-menu = "menuOptions" model = "entry" ng-dragleave = "dragExit($event, entry)" ng-dragover = "dragEnter($event, entry)" ng-class = "{ 'entry-hovered': entry.hovered }" >
2020-11-08 00:46:34 +01:00
< td style = "width: 40px" ng-click = "open(entry)" ng-class = "{ 'hand': !entry.isSymbolicLink }" class = "text-center" >
2020-07-23 15:01:50 +02:00
< i class = "fas fa-lg {{ entry.icon }}" ng-class = "{ 'text-primary': entry.isDirectory }" > < / i >
< / td >
2020-07-18 18:21:23 +02:00
< td ng-class = "{ 'hand': !entry.isSymbolicLink }" class = "elide-table-cell" ng-click = "open(entry)" > {{ entry.fileName }}< span ng-show = "entry.isSymbolicLink" class = "text-muted" style = "margin-left: 20px;" > symlink to {{ entry.target }}< / span > < / td >
2020-11-08 00:46:34 +01:00
< td style = "width: 80px" ng-class = "{ 'hand': !entry.isSymbolicLink }" class = "elide-table-cell" ng-click = "open(entry)" > {{ entry.size | prettyByteSize }}< / td >
< td style = "width:100px" ng-class = "{ 'hand': !entry.isSymbolicLink }" class = "elide-table-cell" ng-click = "open(entry)" > {{ entry.uid | prettyOwner }}< / td >
< td style = "width: 40px" class = "text-right no-wrap" style = "vertical-align: bottom" >
2020-07-22 21:38:39 +02:00
< button class = "btn btn-xs btn-link" context-menu = "menuOptions" model = "entry" context-menu-on = "click" > < i class = "fas fa-bars" > < / i > < / button >
< / td >
2020-07-14 14:03:40 +02:00
< / tr >
< / tbody >
< / table >
2020-07-08 17:30:37 +02:00
< / div >
< / div >
< / div >
2020-07-10 15:27:44 +02:00
2020-08-31 17:46:26 +02:00
< div ng-show = "view === 'textEditor'" class = "text-editor" >
< div >
< div class = "toolbar" >
2020-09-01 12:39:02 +02:00
< div > < span > {{ textEditor.entry.fileName }}< / span > < / div >
2020-09-05 22:44:06 -07:00
< button type = "button" class = "btn btn-success" ng-click = "textEditor.save()" ng-disabled = "textEditor.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "textEditor.busy" > < / i > Save< / button >
< button type = "button" class = "btn btn-primary" ng-click = "textEditor.maybeClose()" > Close< / button >
2020-08-31 17:46:26 +02:00
< / div >
< / div >
< div id = "textEditorContainer" style = "flex-grow: 2; border: 0px solid black" > < / div >
< / div >
2020-07-10 15:27:44 +02:00
< footer class = "text-center ng-cloak" >
< span class = "text-muted" ng-bind-html = "status.footer | markdown2html" > < / span >
< / footer >
2020-07-08 17:30:37 +02:00
< / div >
< / body >
< / html >