files.scss 28 KB

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