diff --git a/_assets/css/styles.css b/_assets/css/styles.css index eb1196a2..e921b8c2 100644 --- a/_assets/css/styles.css +++ b/_assets/css/styles.css @@ -242,12 +242,16 @@ fieldset h3, .action { display: inline-block; cursor: pointer; - -webkit-transition: 0.2s ease all; transition: 0.2s ease all; border: 0; margin: 0; color: #546E7A; border-radius: 50%; + background: transparent; + padding: 0; + box-shadow: 0 0 0 0; + vertical-align: middle; + text-align: left; } .action.disabled { @@ -262,7 +266,7 @@ fieldset h3, border-radius: 50%; } -.action:hover i { +.action:hover { background-color: rgba(0, 0, 0, .1); } @@ -395,6 +399,30 @@ header>div div { display: block; } +/* SIDEBAR */ + +#sidebar { + position: fixed; + left: 0; + width: 20%; +} +#sidebar .action { + width: 100%; + display: block; + border-radius: 0; + font-size: 1.1em; + padding: .5em; +} + +#sidebar .action > * { + vertical-align: middle; +} + +main { + width: 78%; + margin-left: 20%; +} + /* * * * * * * * * * * * * * * * * TOP BAR * @@ -791,9 +819,9 @@ header>div div { #listing.list .item { width: 100%; margin: 0; - border: 0; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); + border: 1px solid rgba(0, 0, 0, 0.1); padding: 1em; + border-top: 0; } #listing.list h2 { @@ -840,13 +868,15 @@ header>div div { #listing.list .item.header { display: flex !important; - background: #fafafa; + background: #f8f8f8; position: fixed; - width: 100%; + width: 78%; top: 7.8em; - left: 0; + left: 20%; z-index: 999; padding: .85em; + border: 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); } #listing.list .item.header>div:first-child { diff --git a/_assets/templates/actions.tmpl b/_assets/templates/actions.tmpl new file mode 100644 index 00000000..6bcecf1a --- /dev/null +++ b/_assets/templates/actions.tmpl @@ -0,0 +1,91 @@ +{{ define "right-side-actions" }} + {{- if .IsDir }} + <a aria-label="Switch View" href="?display={{- if eq .Display "mosaic" }}list{{ else }}mosaic{{ end }}" class="action"> + <i class="material-icons">{{- if eq .Display "mosaic" }}view_list{{ else }}view_module{{ end }}</i> + <span>Switch view</span> + </a> + + <button aria-label="Select multiple" class="action mobile-only" id="multiple-selection-activate"> + <i class="material-icons">check_circle</i> + <span>Select</span> + </button> + {{- end }} + + {{- if and (.User.AllowNew) (.IsDir) }} + <button aria-label="Upload" title="Upload" class="action" id="upload"> + <i class="material-icons">file_upload</i> + <span>Upload</span> + </button> + {{- end }} + + {{- if and .User.AllowEdit (not .IsDir) }} + <button aria-label="Delete" title="Delete" class="action" id="delete"> + <i class="material-icons">delete</i> + <span>Delete</span> + </button> + {{- end }} + + <button {{ if .IsDir }}data-dropdown{{ end }} aria-label="Download" title="Download" class="action" id="download"> + {{- if not .IsDir}}<a href="?download=true">{{ end }} + <i class="material-icons">file_download</i><span>Download</span> + {{- if not .IsDir}}</a>{{ end }} + + {{- if .IsDir }} + <ul class="dropdown" id="download-drop"> + <a tabindex="0" aria-label="Download as Zip" data-format="zip" href="?download=zip"><li>zip</li></a> + <a tabindex="0" aria-label="Download as Tar" data-format="tar" href="?download=tar"><li>tar</li></a> + <a tabindex="0" aria-label="Download as TarGz" data-format="targz" href="?download=targz"><li>tar.gz</li></a> + <a tabindex="0" aria-label="Download as TarBz2" data-format="tarbz2" href="?download=tarbz2"><li>tar.bz2</li></a> + <a tabindex="0" aria-label="Download as TarXz" data-format="tarbz2" href="?download=tarxz"><li>tar.xz</li></a> + </ul> + {{- end }} + </button> + + <button title="Info" aria-label="Info" class="action" id="info"> + <i class="material-icons">info</i> + <span>Info</span> + </button> +{{ end }} + +{{ define "left-side-actions" }} + {{- if and (not .IsDir) (.User.AllowEdit) }} + {{- if .Editor}} + + {{- if eq .Data.Mode "markdown" }} + <button aria-label="Preview" class="action" id="preview" onclick="notImplemented(event);"> + <i class="material-icons" title="Preview">remove_red_eye</i> + </button> + {{- end }} + + {{- if eq .Data.Visual true }} + <button aria-label="Toggle edit source" class="action" id="edit-source"> + <i class="material-icons" title="Toggle edit source">code</i> + </button> + {{- end }} + + {{/* end if editor */}} + {{- end }} + + <button aria-label="Save" class="action" id="save"> + <i class="material-icons" title="Save">save</i> + </button> + + {{/* end if not dir and AllowEdit */}} + {{- end }} + + {{- if and .IsDir .User.AllowEdit }} + <button aria-label="Edit" class="action" id="rename"> + <i class="material-icons" title="Edit">mode_edit</i> + <span>Rename</span> + </button> + + <button aria-label="Move" class="action" id="move"> + <i class="material-icons" title="Move">forward</i> + <span>Move file</span> + </button> + + <button aria-label="Delete" class="action" id="delete"> + <i class="material-icons" title="Delete">delete</i><span>Delete</span> + </button> + {{- end }} +{{ end }} \ No newline at end of file diff --git a/_assets/templates/base.tmpl b/_assets/templates/base.tmpl index daa9ef0d..fec41f43 100644 --- a/_assets/templates/base.tmpl +++ b/_assets/templates/base.tmpl @@ -62,101 +62,15 @@ </div> <div class="actions{{ if .IsDir }} disabled{{ end }}" id="file-only"> - {{- if and (not .IsDir) (.User.AllowEdit) }} - {{- if .Editor}} - - {{- if eq .Data.Mode "markdown" }} - <div tabindex="0" role="button" aria-label="Preview" class="action" id="preview" onclick="notImplemented(event);"> - <i class="material-icons" title="Preview">remove_red_eye</i> - </div> - {{- end }} - - {{- if eq .Data.Visual true }} - <div tabindex="0" role="button" aria-label="Toggle edit source" class="action" id="edit-source"> - <i class="material-icons" title="Toggle edit source">code</i> - </div> - {{- end }} - {{- end }} - - <div tabindex="0" role="button" aria-label="Save" class="action" id="save"> - <i class="material-icons" title="Save">save</i> - </div> - {{- end }} - - {{- if and (.User.AllowEdit) (.IsDir) }} - <div tabindex="0" role="button" aria-label="Move" class="action" id="move"> - <i class="material-icons" title="Move">forward</i> - <span>Move file</span> - </div> - {{- end }} - - {{- if and .IsDir .User.AllowEdit }} - <div tabindex="0" role="button" aria-label="Edit" class="action" id="rename"> - <i class="material-icons" title="Edit">mode_edit</i> - </div> - {{- end }} - - {{- if and .User.AllowEdit .IsDir }} - <div tabindex="0" role="button" aria-label="Delete" class="action" id="delete"> - <i class="material-icons" title="Delete">delete</i><span>Delete</span> - </div> - {{- end }} + {{- template "left-side-actions" . -}} </div> - <div tabindex="0" role="button" aria-label="Moew" class="action mobile-only" id="more"> + <button aria-label="More" class="action mobile-only" id="more"> <i class="material-icons">more_vert</i> - </div> + </button> <div class="actions" id="main-actions"> - {{- if .IsDir }} - <div role="button" class="action" id="view"> - {{- if eq .Display "mosaic" }} - <a tabindex="0" aria-label="Switch to list" title="Switch View" href="?display=list"> - <i class="material-icons">view_list</i><span>Switch view</span> - </a> - {{- else }} - <a tabindex="0" aria-label="Switch to Mosaic" title="Switch View" href="?display=mosaic"> - <i class="material-icons">view_module</i><span>Switch view</span> - </a> - {{- end }} - </div> - - <div tabindex="0" role="button" aria-label="Select multiple" class="action mobile-only" id="multiple-selection-activate"> - <i class="material-icons">check_circle</i><span>Select</span> - </div> - {{- end }} - - {{- if and (.User.AllowNew) (.IsDir) }} - <div tabindex="0" aria-label="Upload" role="button" class="action" id="upload"> - <i class="material-icons" title="Upload">file_upload</i><span>Upload</span> - </div> - {{- end }} - - {{- if and .User.AllowEdit (not .IsDir) }} - <div tabindex="0" role="button" aria-label="Delete" class="action" id="delete"> - <i class="material-icons" title="Delete">delete</i><span>Delete</span> - </div> - {{- end }} - - <div {{ if .IsDir }}data-dropdown{{ end }} tabindex="0" role="button" aria-label="Download" class="action" id="download"> - {{- if not .IsDir}}<a href="?download=true">{{ end }} - <i class="material-icons" title="Download">file_download</i><span>Download</span> - {{- if not .IsDir}}</a>{{ end }} - - {{- if .IsDir }} - <ul class="dropdown" id="download-drop"> - <a tabindex="0" aria-label="Download as Zip" data-format="zip" href="?download=zip"><li>zip</li></a> - <a tabindex="0" aria-label="Download as Tar" data-format="tar" href="?download=tar"><li>tar</li></a> - <a tabindex="0" aria-label="Download as TarGz" data-format="targz" href="?download=targz"><li>tar.gz</li></a> - <a tabindex="0" aria-label="Download as TarBz2" data-format="tarbz2" href="?download=tarbz2"><li>tar.bz2</li></a> - <a tabindex="0" aria-label="Download as TarXz" data-format="tarbz2" href="?download=tarxz"><li>tar.xz</li></a> - </ul> - {{- end }} - </div> - - <div tabindex="0" role="button" aria-label="Info" class="action" id="info"> - <i class="material-icons" title="Info">info</i><span>Info</span> - </div> + {{- template "right-side-actions" . -}} </div> </div> @@ -170,6 +84,13 @@ </div> </div> + <nav id="sidebar"> + <a class="action" href="{{ .BaseURL }}"> + <i class="material-icons">folder</i> + <span>My Files</span> + </a> + </nav> + <main> {{- template "content" . }} </main> diff --git a/page.go b/page.go index dec7a0a3..9324718d 100644 --- a/page.go +++ b/page.go @@ -103,6 +103,7 @@ func (p page) PreviousLink() string { // PrintAsHTML formats the page in HTML and executes the template func (p page) PrintAsHTML(w http.ResponseWriter, m *FileManager, templates ...string) (int, error) { + templates = append(templates, "actions") templates = append(templates, "templates") if p.minimal {