files.scss 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368
  1. /**
  2. * Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
  3. * @copyright Copyright (c) 2019, Fabian Dreßler <nudelsalat@clouz.de>
  4. *
  5. * This file is licensed under the Affero General Public License version 3 or later.
  6. * See the COPYING-README file.
  7. */
  8. @use 'variables';
  9. @import 'functions';
  10. /* FILE MENU */
  11. .actions {
  12. // (50px - 44px) / 2
  13. padding: 3px;
  14. height: 100%;
  15. display: inline-block;
  16. float: left;
  17. }
  18. .actions input, .actions button, .actions .button { margin:0; float:left; }
  19. .actions .button a { color: #555; }
  20. .actions .button a:hover,
  21. .actions .button a:focus {
  22. background-color: var(--color-background-hover);
  23. }
  24. .actions .button a:active {
  25. background-color: var(--color-primary-element-light);
  26. }
  27. .actions.creatable {
  28. position: relative;
  29. display: flex;
  30. flex: 1 1;
  31. .button:not(:last-child) {
  32. margin-right: 3px;
  33. }
  34. }
  35. .actions.hidden {
  36. display: none;
  37. }
  38. #trash {
  39. margin-right: 8px;
  40. float: right;
  41. z-index: 1010;
  42. padding: 10px;
  43. font-weight: normal;
  44. }
  45. .newFileMenu .error,
  46. .newFileMenu .error + .icon-confirm,
  47. .files-fileList .error {
  48. color: var(--color-error);
  49. border-color: var(--color-error);
  50. }
  51. /* FILE TABLE */
  52. .files-filestable {
  53. position: relative;
  54. width: 100%;
  55. min-width: 250px;
  56. display: block;
  57. flex-direction: column;
  58. // hide table if emptycontent is not hidden
  59. .emptycontent:not(.hidden) ~ & {
  60. display: none;
  61. }
  62. // floating header
  63. thead {
  64. position: -webkit-sticky;
  65. position: sticky;
  66. // breadcrumbs
  67. top: 44px;
  68. // under breadcrumbs, over file list
  69. z-index: 60;
  70. display: block;
  71. background-color: var(--color-main-background-translucent);
  72. }
  73. /**
  74. * This is a dirty hack as the sticky header requires us to use a different display type on the table element
  75. */
  76. tbody {
  77. display: table;
  78. width: 100%;
  79. tr[data-permissions="0"],
  80. tr[data-permissions="16"] {
  81. background-color: var(--color-background-dark);
  82. td.filename .nametext .innernametext {
  83. color: var(--color-text-maxcontrast);
  84. }
  85. }
  86. // Deactivates the possiblility to checkmark or click on the encrypted folder
  87. tr[data-e2eencrypted="true"] .selection {
  88. pointer-events: none;
  89. }
  90. }
  91. }
  92. .files-filestable.hidden {
  93. display: none;
  94. }
  95. /* fit app list view heights */
  96. .app-files #app-content > .viewcontainer {
  97. min-height: 0%;
  98. width: 100%;
  99. }
  100. .app-files #app-content {
  101. // force the width to be the full width to not go bigger than the screen
  102. // flex will grow for the mobile view if necessary
  103. width: calc(100% - 300px);
  104. // disable overflow-anchor which causes undesired behaviour on Firefox
  105. overflow-anchor: none;
  106. }
  107. .file-drag, .file-drag .files-filestable tbody tr, .file-drag .files-filestable tbody tr:hover {
  108. background-color: var(--color-primary-element-light) !important;
  109. }
  110. .app-files #app-content.dir-drop {
  111. background-color: var(--color-main-background) !important;
  112. }
  113. .file-drag .files-filestable tbody tr, .file-drag .files-filestable tbody tr:hover{
  114. background-color: transparent !important;
  115. }
  116. .app-files #app-content.dir-drop .files-filestable tbody tr.dropping-to-dir{
  117. background-color: var(--color-primary-element-light) !important;
  118. }
  119. /* icons for sidebar */
  120. .nav-icon-files {
  121. @include icon-color('folder', 'files', variables.$color-black);
  122. }
  123. .nav-icon-recent {
  124. @include icon-color('recent', 'files', variables.$color-black);
  125. }
  126. .nav-icon-favorites {
  127. @include icon-color('starred', 'actions', variables.$color-black, 2, true);
  128. }
  129. .nav-icon-sharingin,
  130. .nav-icon-sharingout,
  131. .nav-icon-pendingshares,
  132. .nav-icon-shareoverview {
  133. @include icon-color('share', 'files', variables.$color-black);
  134. }
  135. .nav-icon-sharinglinks {
  136. @include icon-color('public', 'files', variables.$color-black);
  137. }
  138. .nav-icon-extstoragemounts {
  139. @include icon-color('external', 'files', variables.$color-black);
  140. }
  141. .nav-icon-trashbin {
  142. @include icon-color('delete', 'files', variables.$color-black);
  143. }
  144. .nav-icon-trashbin-starred {
  145. @include icon-color('delete', 'files', #ff0000);
  146. }
  147. .nav-icon-deletedshares {
  148. @include icon-color('unshare', 'files', variables.$color-black);
  149. }
  150. .nav-icon-favorites-starred {
  151. @include icon-color('starred', 'actions', variables.$color-yellow, 2, true);
  152. }
  153. #app-navigation .nav-files a.nav-icon-files {
  154. width: auto;
  155. }
  156. /* button needs overrides due to navigation styles */
  157. #app-navigation .nav-files a.new {
  158. width: 40px;
  159. height: 32px;
  160. padding: 0 10px;
  161. margin: 0;
  162. cursor: pointer;
  163. }
  164. #app-navigation .nav-files a.new.hidden {
  165. display: none;
  166. }
  167. #app-navigation .nav-files a.new.disabled {
  168. opacity: 0.3;
  169. }
  170. .files-filestable tbody tr {
  171. height: 51px;
  172. }
  173. .files-filestable tbody tr:hover,
  174. .files-filestable tbody tr:focus,
  175. .files-filestable tbody .name:focus,
  176. .files-filestable tbody tr:hover .filename form,
  177. table tr.mouseOver td {
  178. background-color: var(--color-background-hover);
  179. }
  180. .files-filestable tbody tr:active,
  181. .files-filestable tbody tr.highlighted,
  182. .files-filestable tbody tr.highlighted .name:focus,
  183. .files-filestable tbody tr.selected,
  184. .files-filestable tbody tr.searchresult {
  185. background-color: var(--color-primary-element-light);
  186. }
  187. tbody a { color: var(--color-main-text); }
  188. span.conflict-path, span.extension, span.uploading, td.date {
  189. color: var(--color-text-maxcontrast);
  190. }
  191. span.conflict-path, span.extension {
  192. -webkit-transition: opacity 300ms;
  193. -moz-transition: opacity 300ms;
  194. -o-transition: opacity 300ms;
  195. transition: opacity 300ms;
  196. vertical-align: top;
  197. }
  198. tr:hover span.conflict-path,
  199. tr:focus span.conflict-path,
  200. tr:hover span.extension,
  201. tr:focus span.extension {
  202. opacity: 1;
  203. color: var(--color-text-maxcontrast);
  204. }
  205. table th, table th a {
  206. color: var(--color-text-maxcontrast);
  207. }
  208. table.multiselect th a {
  209. color: var(--color-main-text);
  210. }
  211. table th .columntitle {
  212. display: block;
  213. padding: 15px;
  214. height: 50px;
  215. box-sizing: border-box;
  216. -moz-box-sizing: border-box;
  217. vertical-align: middle;
  218. &:focus-visible {
  219. border-radius: 2px;
  220. }
  221. }
  222. table.multiselect th .columntitle {
  223. display: inline-block;
  224. margin-right: -20px;
  225. }
  226. table th .columntitle.name {
  227. padding-left: 0;
  228. margin-left: 44px;
  229. }
  230. table.multiselect th .columntitle.name {
  231. margin-left: 0;
  232. }
  233. table th .sort-indicator {
  234. width: 10px;
  235. height: 8px;
  236. margin-left: 5px;
  237. display: inline-block;
  238. vertical-align: text-bottom;
  239. opacity: .3;
  240. }
  241. .sort-indicator.hidden,
  242. .multiselect .sort-indicator,
  243. table.multiselect th:hover .sort-indicator.hidden,
  244. table.multiselect th:focus .sort-indicator.hidden {
  245. visibility: hidden;
  246. }
  247. .multiselect .sort, .multiselect .sort span {
  248. cursor: default;
  249. }
  250. table th:hover .sort-indicator.hidden,
  251. table th:focus .sort-indicator.hidden {
  252. visibility: visible;
  253. }
  254. table th,
  255. table td {
  256. border-bottom: 1px solid var(--color-border);
  257. text-align: left;
  258. font-weight: normal;
  259. }
  260. table td {
  261. padding: 0 15px;
  262. font-style: normal;
  263. background-position: 8px center;
  264. background-repeat: no-repeat;
  265. }
  266. table th.column-name {
  267. position: relative;
  268. width: 9999px; /* not really sure why this works better than 100% … table styling */
  269. padding: 0;
  270. }
  271. .column-name-container {
  272. position: relative;
  273. height: 50px;
  274. }
  275. table th.column-selection {
  276. padding-top: 2px;
  277. }
  278. table th.column-size, table td.filesize {
  279. text-align: right;
  280. }
  281. table th.column-mtime, table td.date,
  282. table th.column-last, table td.column-last {
  283. -moz-box-sizing: border-box;
  284. box-sizing: border-box;
  285. position: relative;
  286. /* this can not be just width, both need to be set … table styling */
  287. min-width: 130px;
  288. }
  289. #app-content-recent,
  290. #app-content-favorites,
  291. #app-content-shareoverview,
  292. #app-content-sharingout,
  293. #app-content-sharingin,
  294. #app-content-sharinglinks,
  295. #app-content-deletedshares,
  296. #app-content-pendingshares {
  297. margin-top: 22px;
  298. thead {
  299. top: 0;
  300. }
  301. }
  302. table.multiselect thead th {
  303. background-color: var(--color-main-background-translucent);
  304. font-weight: bold;
  305. }
  306. #app-content.with-app-sidebar table.multiselect thead{
  307. margin-right: 27%;
  308. }
  309. table.multiselect .column-name {
  310. position: relative;
  311. width: 9999px; /* when we use 100%, the styling breaks on mobile … table styling */
  312. }
  313. table.multiselect .column-mtime>a {
  314. display: none;
  315. }
  316. table td.selection,
  317. table th.selection,
  318. table td.fileaction {
  319. width: 32px;
  320. text-align: center;
  321. }
  322. table td.filename a.name,
  323. table td.filename p.name {
  324. display: flex;
  325. position:relative; /* Firefox needs to explicitly have this default set … */
  326. -moz-box-sizing: border-box;
  327. box-sizing: border-box;
  328. height: 50px;
  329. line-height: 50px;
  330. padding: 0;
  331. }
  332. table td.filename .thumbnail-wrapper {
  333. /* we need this to make sure flex is working inside a table cell */
  334. width: 0;
  335. min-width: 50px;
  336. max-width: 50px;
  337. height: 50px;
  338. }
  339. table td.filename .thumbnail-wrapper.icon-loading-small {
  340. &:after {
  341. z-index: 10;
  342. }
  343. .thumbnail {
  344. opacity: 0.2;
  345. }
  346. }
  347. table td.filename .thumbnail {
  348. display: inline-block;
  349. width: 32px;
  350. height: 32px;
  351. background-size: contain;
  352. background-position: center;
  353. background-repeat: no-repeat;
  354. margin-left: 9px;
  355. margin-top: 9px;
  356. border-radius: var(--border-radius);
  357. cursor: pointer;
  358. position: absolute;
  359. z-index: 4;
  360. }
  361. table td.filename p.name .thumbnail {
  362. cursor: default;
  363. }
  364. // Show slight border around previews for images, txt, etc.
  365. table tr[data-has-preview='true'] .thumbnail {
  366. border: 1px solid var(--color-border);
  367. }
  368. table:not(.view-grid) td.filename input.filename {
  369. width: 70% !important;
  370. margin-left: 48px !important;
  371. cursor: text;
  372. }
  373. table td.filename form {
  374. margin-top: -40px;
  375. position: relative;
  376. top: -6px;
  377. }
  378. table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:3px 8px 8px 3px; }
  379. table td.filename .nametext, .modified, .column-last>span:first-child { float:left; padding:15px 0; }
  380. .modified, .column-last>span:first-child {
  381. position: relative;
  382. overflow: hidden;
  383. text-overflow: ellipsis;
  384. width: 110px;
  385. }
  386. /* TODO fix usability bug (accidental file/folder selection) */
  387. table {
  388. td.filename {
  389. max-width: 0;
  390. .nametext {
  391. width: 0;
  392. flex-grow: 1;
  393. display: flex;
  394. overflow: hidden;
  395. white-space: nowrap;
  396. text-overflow: ellipsis;
  397. height: 100%;
  398. z-index: 10;
  399. padding: 0 20px 0 0;
  400. }
  401. /* System tags */
  402. .system-tags {
  403. --min-size: 32px;
  404. display: flex;
  405. justify-content: center;
  406. align-items: center;
  407. flex: 1 1 100%;
  408. min-width: calc(var(--min-size) * 2);
  409. max-width: 300px;
  410. .system-tags__tag {
  411. padding: 5px 10px;
  412. border: 1px solid;
  413. border-radius: var(--border-radius-pill);
  414. border-color: var(--color-border);
  415. color: var(--color-text-maxcontrast);
  416. height: var(--min-size);
  417. white-space: nowrap;
  418. overflow: hidden;
  419. text-overflow: ellipsis;
  420. line-height: 22px; // min-size - 2 * 5px padding
  421. text-align: center;
  422. &--more {
  423. overflow: visible;
  424. text-overflow: initial;
  425. }
  426. // Proper spacing if multiple shown
  427. & + .system-tags__tag {
  428. margin-left: 5px;
  429. }
  430. }
  431. }
  432. }
  433. }
  434. .hide-hidden-files .files-filestable .files-fileList tr.hidden-file,
  435. .hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging {
  436. display: none !important;
  437. }
  438. .files-fileList tr.animate-opacity {
  439. -webkit-transition:opacity 250ms;
  440. -moz-transition:opacity 250ms;
  441. -o-transition:opacity 250ms;
  442. transition:opacity 250ms;
  443. }
  444. .files-fileList tr.dragging {
  445. opacity: 0.2;
  446. }
  447. table td.filename .nametext .innernametext {
  448. text-overflow: ellipsis;
  449. overflow: hidden;
  450. position: relative;
  451. vertical-align: top;
  452. }
  453. /* for smaller resolutions - see mobile.css */
  454. table td.filename .uploadtext {
  455. position: absolute;
  456. font-weight: normal;
  457. // checkbox width
  458. margin-left: 50px;
  459. left: 0;
  460. bottom: 0;
  461. height: 20px;
  462. padding: 0 4px;
  463. // align with file name
  464. padding-left: 1px;
  465. font-size: 11px;
  466. // double the font size
  467. line-height: 22px;
  468. color: var(--color-text-maxcontrast);
  469. text-overflow: ellipsis;
  470. white-space: nowrap;
  471. }
  472. table td.selection {
  473. padding: 0;
  474. }
  475. /* File checkboxes */
  476. .files-fileList tr td.selection>.selectCheckBox + label:before {
  477. opacity: 0.3;
  478. margin-right: 0;
  479. }
  480. /* Show checkbox with full opacity when hovering, checked, or selected */
  481. .files-fileList tr:hover td.selection>.selectCheckBox + label:before,
  482. .files-fileList tr:focus td.selection>.selectCheckBox + label:before,
  483. .files-fileList tr td.selection>.selectCheckBox:checked + label:before,
  484. .files-fileList tr.selected td.selection>.selectCheckBox + label:before {
  485. opacity: 1;
  486. }
  487. /* Show checkbox with half opacity when selecting range */
  488. .files-fileList tr.halfselected td.selection>.selectCheckBox + label:before {
  489. opacity: 0.5;
  490. }
  491. /* Use label to have bigger clickable size for checkbox */
  492. .files-fileList tr td.selection>.selectCheckBox,
  493. .select-all {
  494. & + label {
  495. padding: 16px;
  496. }
  497. &:focus-visible + label {
  498. background-color: var(--color-background-hover);
  499. border-radius: var(--border-radius-pill);
  500. outline: none !important;
  501. border: 2px solid var(--color-primary-element) !important;
  502. padding: 14px;
  503. }
  504. }
  505. .files-fileList tr td.selection>.selectCheckBox:focus-visible + label,
  506. .select-all:focus-visible + label {
  507. outline-offset: 0px;
  508. }
  509. .files-fileList tr td.filename {
  510. position: relative;
  511. width: 100%;
  512. padding-left: 0;
  513. padding-right:0;
  514. -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms;
  515. }
  516. .files-fileList tr td.filename a.name label,
  517. .files-fileList tr td.filename p.name label {
  518. position: absolute;
  519. width: 80%;
  520. height: 50px;
  521. }
  522. .files-fileList tr td.filename .favorite {
  523. display: inline-block;
  524. float: left;
  525. }
  526. .files-fileList tr td.filename .favorite-mark {
  527. position: absolute;
  528. display: block;
  529. top: -6px;
  530. right: -6px;
  531. line-height: 100%;
  532. text-align: center;
  533. }
  534. #uploadsize-message,#delete-confirm { display:none; }
  535. /* File actions */
  536. .fileactions {
  537. z-index: 50;
  538. }
  539. .busy .fileactions, .busy .action {
  540. visibility: hidden;
  541. }
  542. /* fix position of bubble pointer for Files app */
  543. .bubble,
  544. #app-navigation .app-navigation-entry-menu {
  545. min-width: 100px;
  546. }
  547. /* force show the loading icon, not only on hover */
  548. .files-fileList .icon-loading-small {
  549. opacity: 1 !important;
  550. display: inline !important;
  551. }
  552. .files-fileList .action.action-share-notification span, .files-fileList a.name {
  553. cursor: default !important;
  554. }
  555. /*
  556. * Make the disabled link look not like a link in file list rows
  557. */
  558. .files-fileList a.name.disabled {
  559. * {
  560. cursor: default;
  561. }
  562. a, a * {
  563. cursor: pointer;
  564. }
  565. &:focus {
  566. background: none;
  567. }
  568. }
  569. a.action > img {
  570. height: 16px;
  571. width: 16px;
  572. vertical-align: text-bottom;
  573. }
  574. a.action.action-editlocally img.icon {
  575. filter: var(--background-invert-if-dark);
  576. }
  577. /* Actions for selected files */
  578. .selectedActions {
  579. position: relative;
  580. display: inline-block;
  581. vertical-align: middle;
  582. }
  583. .selectedActions.hidden {
  584. display: none;
  585. }
  586. .selectedActions a {
  587. display: inline;
  588. line-height: 50px;
  589. padding: 16px 5px;
  590. }
  591. .selectedActions a.hidden {
  592. display: none;
  593. }
  594. .selectedActions a img {
  595. position:relative;
  596. vertical-align: text-bottom;
  597. margin-bottom: -1px;
  598. }
  599. .selectedActions .actions-selected .icon-more {
  600. margin-top: -3px;
  601. }
  602. .files-fileList td a {
  603. a.action {
  604. display: inline;
  605. padding: 17px 8px;
  606. line-height: 50px;
  607. opacity: .3;
  608. &.action-share {
  609. padding: 17px 14px;
  610. &.permanent:not(.shared-style) .icon-shared + span {
  611. /* hide text of the share action */
  612. /* .hidden-visually for accessbility */
  613. position: absolute;
  614. left:-10000px;
  615. top: auto;
  616. width: 1px;
  617. height: 1px;
  618. overflow: hidden;
  619. }
  620. .avatar {
  621. display: inline-block;
  622. vertical-align: middle;
  623. }
  624. }
  625. &.action-menu {
  626. padding-top: 17px;
  627. padding-bottom: 17px;
  628. padding-left: 14px;
  629. padding-right: 14px;
  630. }
  631. &.no-permission {
  632. &:hover, &:focus {
  633. opacity: .3;
  634. }
  635. }
  636. &.disabled {
  637. &:hover, &:focus,
  638. img {
  639. opacity: .3;
  640. }
  641. &.action-download {
  642. opacity: .7;
  643. &:hover, &:focus {
  644. opacity: .7;
  645. }
  646. }
  647. }
  648. &:hover, &:focus {
  649. opacity: 1;
  650. }
  651. &:focus {
  652. background-color: var(--color-background-hover);
  653. border-radius: var(--border-radius-pill);
  654. }
  655. }
  656. .fileActionsMenu a.action, a.action.action-share.shared-style {
  657. opacity: .7;
  658. }
  659. .fileActionsMenu .action.permanent {
  660. opacity: 1;
  661. }
  662. }
  663. // Ellipsize long sharer names
  664. .files-fileList .action.action-share.permanent.shared-style span:not(.icon) {
  665. display: inline-block;
  666. max-width: 70px;
  667. overflow: hidden;
  668. text-overflow: ellipsis;
  669. vertical-align: middle;
  670. margin-left: 6px;
  671. }
  672. .files-fileList .remoteAddress .userDomain {
  673. margin-left: 0 !important;
  674. }
  675. .files-fileList .favorite-mark.permanent {
  676. opacity: 1;
  677. }
  678. .files-fileList .fileActionsMenu a.action:hover,
  679. .files-fileList .fileActionsMenu a.action:focus,
  680. /* show share action of shared items darker to distinguish from non-shared */
  681. .files-fileList a.action.action-share.shared-style:hover,
  682. .files-fileList a.action.action-share.shared-style:focus {
  683. opacity: 1;
  684. }
  685. .files-fileList tr a.action.disabled {
  686. background: none;
  687. }
  688. .selectedActions a.download.disabled,
  689. .files-fileList tr a.action.action-download.disabled {
  690. color: #000000;
  691. }
  692. .files-fileList tr:hover a.action.disabled:hover * {
  693. cursor: default;
  694. }
  695. .summary {
  696. color: var(--color-text-maxcontrast);
  697. /* add whitespace to bottom of files list to correctly show dropdowns */
  698. $action-menu-items-count: 7; // list view has currently max 7 items in its action menu
  699. height: 44px * ($action-menu-items-count + 0.5); // 0.5 is added to show some whitespace below
  700. }
  701. .files-filestable .summary .filesummary {
  702. width: 100%;
  703. /* Width of checkbox and file preview */
  704. padding-left: 101px;
  705. }
  706. /* Less whitespace needed on link share page
  707. * as there is a footer and action menus have fewer entries.
  708. */
  709. #body-public .summary {
  710. height: 180px;
  711. }
  712. .summary:hover,
  713. .summary:focus,
  714. .summary,
  715. table tr.summary td {
  716. background-color: transparent;
  717. }
  718. .summary td {
  719. border-bottom: none;
  720. vertical-align: top;
  721. padding-top: 20px;
  722. }
  723. .summary td:first-child {
  724. padding: 0;
  725. }
  726. .hiddeninfo {
  727. white-space: pre-line;
  728. }
  729. table.dragshadow {
  730. width:auto;
  731. z-index: 2000;
  732. }
  733. table.dragshadow td.filename {
  734. padding-left:60px;
  735. padding-right:16px;
  736. height: 36px;
  737. /* Override "max-width: 0" to prevent file name and size from overlapping */
  738. max-width: unset;
  739. }
  740. table.dragshadow td.size {
  741. padding-right:8px;
  742. }
  743. .mask {
  744. z-index: 50;
  745. position: absolute;
  746. top: 0;
  747. left: 0;
  748. right: 0;
  749. bottom: 0;
  750. background-color: var(--color-main-background);
  751. background-repeat: no-repeat no-repeat;
  752. background-position: 50%;
  753. opacity: 0.7;
  754. transition: opacity 100ms;
  755. -moz-transition: opacity 100ms;
  756. -o-transition: opacity 100ms;
  757. -ms-transition: opacity 100ms;
  758. -webkit-transition: opacity 100ms;
  759. }
  760. .mask.transparent{
  761. opacity: 0;
  762. }
  763. .newFileMenu {
  764. font-weight: 300;
  765. top: 100%;
  766. left: -48px !important;
  767. margin-top: 4px;
  768. min-width: 100px;
  769. z-index: 1001;
  770. /* Center triangle */
  771. &::after {
  772. left: 61px !important;
  773. }
  774. }
  775. .files-controls {
  776. box-sizing: border-box;
  777. position: -webkit-sticky;
  778. position: sticky;
  779. height: 50px; /* height of the nav toggle button; */
  780. padding: 0;
  781. margin: 0;
  782. background-color: var(--color-main-background-translucent);
  783. z-index: 62; /* must be above the filelist sticky header and texteditor menubar */
  784. -webkit-user-select: none;
  785. -moz-user-select: none;
  786. -ms-user-select: none;
  787. user-select: none;
  788. display: flex;
  789. top: 0;
  790. padding-left: 50px; /* width of the nav toggle button; */
  791. .actions {
  792. > div,
  793. & {
  794. > .button, button {
  795. box-sizing: border-box;
  796. display: inline-block;
  797. display: flex;
  798. height: 44px;
  799. width: 44px;
  800. padding: 9px; // width - border - icon width = 18px
  801. align-items: center;
  802. justify-content: center;
  803. }
  804. .button.hidden {
  805. display: none;
  806. }
  807. }
  808. }
  809. }
  810. /* position controls for apps with app-navigation */
  811. .viewer-mode #app-navigation + #app-content .files-controls {
  812. left: 0;
  813. }
  814. .files-filestable .filename .action .icon,
  815. .files-filestable .selectedActions a .icon,
  816. .files-filestable .filename .favorite-mark .icon,
  817. .files-controls .actions .button .icon {
  818. display: inline-block;
  819. vertical-align: middle;
  820. background-size: 16px 16px;
  821. }
  822. .files-filestable .filename .favorite-mark {
  823. // Override default icons to always hide the star icon and always show the
  824. // starred icon even when hovered or focused.
  825. & .icon-star {
  826. background-image: none;
  827. }
  828. & .icon-starred {
  829. background-image: var(--icon-starred-yellow) !important;
  830. }
  831. }
  832. .files-filestable .filename .action .icon.hidden,
  833. .files-filestable .selectedActions a .icon.hidden,
  834. .files-controls .actions .button .icon.hidden {
  835. display: none;
  836. }
  837. .files-filestable .filename .action .icon.loading,
  838. .files-filestable .selectedActions a .icon.loading,
  839. .files-controls .actions .button .icon.loading {
  840. width: 15px;
  841. height: 15px;
  842. }
  843. .app-files .actions .button.new {
  844. position: relative;
  845. }
  846. .breadcrumb {
  847. align-items: center;
  848. .icon-home {
  849. border-radius: var(--border-radius);
  850. }
  851. }
  852. .breadcrumb .canDrop > a,
  853. .files-filestable tbody tr.canDrop {
  854. background-color: rgba( variables.$color-primary, .3 );
  855. }
  856. .dropzone-background {
  857. background-color: rgba( variables.$color-primary, .3 );
  858. :hover{
  859. box-shadow: none !important;
  860. }
  861. }
  862. .notCreatable {
  863. margin-left: 12px;
  864. margin-right: 44px;
  865. margin-top: 12px;
  866. color: var(--color-main-text);
  867. overflow: auto;
  868. min-width: 160px;
  869. height: 54px;
  870. &:not(.hidden) {
  871. display: flex;
  872. }
  873. .icon-alert-outline {
  874. top: -15px;
  875. position: relative;
  876. margin-right: 4px;
  877. }
  878. }
  879. .quota-navigation-item {
  880. margin: 0 !important;
  881. border: none;
  882. border-radius: 0;
  883. background-color: transparent;
  884. z-index:1;
  885. height: 44px;
  886. display: flex !important;
  887. flex-direction: column;
  888. &__text {
  889. height: 30px;
  890. }
  891. &[href='#'] {
  892. // if no link is set, no mouse feedback
  893. &, * {
  894. cursor: default !important;
  895. }
  896. }
  897. &__container {
  898. height: 5px;
  899. border-radius: var(--border-radius);
  900. }
  901. }
  902. /* GRID */
  903. .files-filestable.view-grid:not(.hidden) {
  904. $grid-size: 160px;
  905. $grid-pad: 14px;
  906. /* HEADER and MULTISELECT */
  907. thead {
  908. tr {
  909. display: block;
  910. border-bottom: 1px solid var(--color-border);
  911. background-color: var(--color-main-background-translucent);
  912. th {
  913. width: auto;
  914. border: none;
  915. }
  916. }
  917. }
  918. /* MAIN FILE LIST */
  919. tbody {
  920. display: grid;
  921. grid-template-columns: repeat(auto-fill, $grid-size);
  922. justify-content: space-around;
  923. row-gap: 15px;
  924. margin: 15px 0;
  925. // ensure search still filters tr with .hidden
  926. tr:not(.hidden) {
  927. display: block;
  928. position: relative;
  929. height: $grid-size + 44px - $grid-pad;
  930. border-radius: var(--border-radius);
  931. &:hover, &:focus, &:active,
  932. &.selected,
  933. &.searchresult,
  934. .name:focus,
  935. &.highlighted {
  936. background-color: transparent;
  937. .thumbnail-wrapper,
  938. .nametext,
  939. .fileactions {
  940. background-color: var(--color-background-hover);
  941. }
  942. }
  943. }
  944. td {
  945. display: inline;
  946. border-bottom: none;
  947. &.filename {
  948. .thumbnail-wrapper {
  949. min-width: 0;
  950. max-width: none;
  951. position: absolute;
  952. width: $grid-size;
  953. height: $grid-size;
  954. padding: $grid-pad; // same as action icon bottom and right padding
  955. top: 0;
  956. left: 0;
  957. z-index: -1; // make sure the default click is the link
  958. .thumbnail {
  959. width: calc(100% - 2 * #{$grid-pad});
  960. height: calc(100% - 2 * #{$grid-pad}); //action icon padding
  961. background-size: contain;
  962. margin: 0;
  963. border-radius: var(--border-radius);
  964. background-repeat: no-repeat;
  965. background-position: center;
  966. /* Position favorite star related to checkbox to left and 3-dot menu below
  967. * Position is inherited from the selection while in grid view
  968. */
  969. .favorite-mark {
  970. padding: $grid-pad;
  971. left: auto;
  972. top: -22px; // center in corner of thumbnail
  973. right: -22px; // center in corner of thumbnail
  974. }
  975. }
  976. }
  977. .uploadtext {
  978. width: 100%;
  979. margin: 0;
  980. top: 0;
  981. bottom: auto;
  982. // checkbox align
  983. height: 28px;
  984. padding-top: 4px;
  985. // checkbox margins
  986. padding-left: calc(44px - 16px);
  987. }
  988. .name {
  989. height: 100%;
  990. border-radius: var(--border-radius);
  991. // since we're using thumbnail, name and actions bg
  992. // we need to hide the overflow for the radius to show
  993. // luckily the popovermenu is outside .name
  994. overflow: hidden;
  995. // we but the thumbnail in background to ensure
  996. // the name is the default click handler
  997. // force back the cursor which has been overridden
  998. // and disabled for some reason...
  999. cursor: pointer !important;
  1000. .nametext {
  1001. display: flex;
  1002. height: 44px;
  1003. margin-top: $grid-size - $grid-pad;
  1004. text-align: center;
  1005. line-height: 44px;
  1006. padding: 0;
  1007. .innernametext {
  1008. display: inline-block;
  1009. text-align: center;
  1010. overflow: hidden;
  1011. text-overflow: ellipsis;
  1012. white-space: nowrap;
  1013. }
  1014. &:before {
  1015. content: '';
  1016. flex: 1;
  1017. min-width: 14px;
  1018. }
  1019. &:after {
  1020. content: '';
  1021. flex: 1;
  1022. min-width: 44px;
  1023. }
  1024. /* No space for extension in grid view */
  1025. .extension {
  1026. display: none;
  1027. }
  1028. }
  1029. /* System tags */
  1030. .system-tags {
  1031. display: none;
  1032. }
  1033. .fileactions {
  1034. height: initial;
  1035. margin-top: $grid-size - $grid-pad;
  1036. display: flex;
  1037. align-items: center;
  1038. position: absolute;
  1039. right: 0;
  1040. .action {
  1041. padding: $grid-pad;
  1042. width: 44px;
  1043. height: 44px;
  1044. display: flex;
  1045. align-items: center;
  1046. justify-content: center;
  1047. // hide all actions in grid view that are not the menu
  1048. &:not(.action-menu) {
  1049. display: none;
  1050. }
  1051. }
  1052. }
  1053. }
  1054. .fileActionsMenu {
  1055. // force show the sharing entry in the dropdown menu
  1056. .action-share-container.hidden {
  1057. display: block !important;
  1058. // avatar in shared by user dropdown menu
  1059. .action-share img {
  1060. padding: 6px;
  1061. border-radius: 50%;
  1062. }
  1063. }
  1064. // force show the sharing entry in the dropdown menu
  1065. .action-restore-container.hidden {
  1066. display: block !important;
  1067. }
  1068. // force show the sharing entry in the dropdown menu
  1069. .action-comment-container.hidden {
  1070. display: block !important;
  1071. }
  1072. }
  1073. form {
  1074. padding: 3px 14px;
  1075. border-radius: var(--border-radius);
  1076. input.filename {
  1077. width: 100%;
  1078. margin-left: 0;
  1079. cursor: text;
  1080. }
  1081. }
  1082. }
  1083. /* No space for filesize and date in grid view */
  1084. &.filesize,
  1085. &.date {
  1086. display: none;
  1087. }
  1088. &.selection,
  1089. &.filename .favorite-mark {
  1090. position: absolute;
  1091. top: -8px; // half the checkbox width, center on corner of thumbnail
  1092. left: -8px; // half the checkbox width, center on corner of thumbnail
  1093. display: flex;
  1094. width: 44px;
  1095. height: 44px;
  1096. z-index: 10;
  1097. background: transparent;
  1098. label {
  1099. width: 44px;
  1100. height: 44px;
  1101. display: inline-flex;
  1102. padding: $grid-pad; // like any action icon
  1103. &::before {
  1104. margin: 0;
  1105. width: $grid-pad; // 16px - border
  1106. height: $grid-pad; // 16px - border
  1107. }
  1108. }
  1109. }
  1110. /* Position actions menu below file */
  1111. .popovermenu {
  1112. left: 0;
  1113. width: $grid-size - 10px; // 2 * margin
  1114. margin: 0 5px;
  1115. /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */
  1116. .menuitem span:not(.icon) {
  1117. overflow: hidden;
  1118. text-overflow: ellipsis;
  1119. }
  1120. }
  1121. }
  1122. }
  1123. tr.hidden-file td.filename .name .nametext .extension {
  1124. display: block;
  1125. }
  1126. /* Center align the footer file number & size summary */
  1127. tfoot {
  1128. display: grid;
  1129. .summary:not(.hidden) {
  1130. display: inline-block;
  1131. margin: 0 auto;
  1132. $action-menu-items-count: 9; // grid view has currently max 9 items in its action menu
  1133. height: 44px * ($action-menu-items-count + 0.5); // 0.5 is added to show some whitespace below
  1134. td {
  1135. padding-top: 50px;
  1136. &:first-child,
  1137. &.date {
  1138. display: none;
  1139. }
  1140. .info {
  1141. margin-left: 0;
  1142. }
  1143. }
  1144. }
  1145. }
  1146. }
  1147. /* Grid view toggle */
  1148. #view-toggle {
  1149. background-color: var(--color-main-background-translucent);
  1150. border: none;
  1151. margin: 0;
  1152. padding: 22px;
  1153. opacity: .5;
  1154. float: right;
  1155. right: var(--default-grid-baseline);
  1156. top: var(--default-grid-baseline);
  1157. z-index: 100;
  1158. position: sticky;
  1159. &:hover,
  1160. &:focus,
  1161. #showgridview:focus + & {
  1162. opacity: 1;
  1163. }
  1164. &:focus-visible,
  1165. #showgridview:focus-visible + & {
  1166. box-shadow: inset 0 0 0 2px var(--color-primary-element) !important;
  1167. }
  1168. }
  1169. /**
  1170. * Make sure the hidden input is always
  1171. * on the visible scrolled area of the
  1172. * page to avoid scrolling to top when focusing
  1173. */
  1174. #showgridview {
  1175. position: fixed;
  1176. top: 0;
  1177. }
  1178. /* Adjustments for link share page */
  1179. #body-public {
  1180. .files-filestable.view-grid:not(.hidden) tbody td {
  1181. /* More space for filename since there is no share icon */
  1182. &.filename .name .nametext .innernametext {
  1183. max-width: 124px;
  1184. }
  1185. /* Position actions menu correctly below 3-dot-menu */
  1186. .popovermenu {
  1187. left: -80px;
  1188. }
  1189. }
  1190. /* Right-align view toggle on link share page */
  1191. #view-toggle {
  1192. position: absolute;
  1193. right: 0;
  1194. top: 0;
  1195. }
  1196. }
  1197. /* Hide legacy Gallery toggle */
  1198. #gallery-button {
  1199. display: none;
  1200. }
  1201. #tag_multiple_files_container {
  1202. overflow: hidden;
  1203. background-color: #fff;
  1204. border-radius: 3px;
  1205. position: relative;
  1206. display: flex;
  1207. flex-wrap: wrap;
  1208. margin-bottom: 10px;
  1209. h3 {
  1210. width: 100%;
  1211. padding: 0 18px;
  1212. }
  1213. .systemTagsInputFieldContainer {
  1214. flex: 1 1 80%;
  1215. min-width: 0;
  1216. margin: 0 12px;
  1217. }
  1218. }