files.scss 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378
  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. min-width: calc(var(--min-size) * 2);
  408. max-width: 300px;
  409. .system-tags__tag {
  410. padding: 5px 10px;
  411. border: 1px solid;
  412. border-radius: var(--border-radius-pill);
  413. border-color: var(--color-border);
  414. color: var(--color-text-maxcontrast);
  415. height: var(--min-size);
  416. white-space: nowrap;
  417. overflow: hidden;
  418. text-overflow: ellipsis;
  419. line-height: 22px; // min-size - 2 * 5px padding
  420. text-align: center;
  421. &--more {
  422. overflow: visible;
  423. text-overflow: initial;
  424. }
  425. // Proper spacing if multiple shown
  426. & + .system-tags__tag {
  427. margin-left: 5px;
  428. }
  429. }
  430. }
  431. }
  432. }
  433. .hide-hidden-files .files-filestable .files-fileList tr.hidden-file,
  434. .hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging {
  435. display: none !important;
  436. }
  437. .files-fileList tr.animate-opacity {
  438. -webkit-transition:opacity 250ms;
  439. -moz-transition:opacity 250ms;
  440. -o-transition:opacity 250ms;
  441. transition:opacity 250ms;
  442. }
  443. .files-fileList tr.dragging {
  444. opacity: 0.2;
  445. }
  446. table td.filename .nametext .innernametext {
  447. text-overflow: ellipsis;
  448. overflow: hidden;
  449. position: relative;
  450. vertical-align: top;
  451. }
  452. /* for smaller resolutions - see mobile.css */
  453. table td.filename .uploadtext {
  454. position: absolute;
  455. font-weight: normal;
  456. // checkbox width
  457. margin-left: 50px;
  458. left: 0;
  459. bottom: 0;
  460. height: 20px;
  461. padding: 0 4px;
  462. // align with file name
  463. padding-left: 1px;
  464. font-size: 11px;
  465. // double the font size
  466. line-height: 22px;
  467. color: var(--color-text-maxcontrast);
  468. text-overflow: ellipsis;
  469. white-space: nowrap;
  470. }
  471. table td.selection {
  472. padding: 0;
  473. }
  474. /* File checkboxes */
  475. .files-fileList tr td.selection>.selectCheckBox + label:before {
  476. opacity: 0.3;
  477. margin-right: 0;
  478. }
  479. /* Show checkbox with full opacity when hovering, checked, or selected */
  480. .files-fileList tr:hover td.selection>.selectCheckBox + label:before,
  481. .files-fileList tr:focus td.selection>.selectCheckBox + label:before,
  482. .files-fileList tr td.selection>.selectCheckBox:checked + label:before,
  483. .files-fileList tr.selected td.selection>.selectCheckBox + label:before {
  484. opacity: 1;
  485. }
  486. /* Show checkbox with half opacity when selecting range */
  487. .files-fileList tr.halfselected td.selection>.selectCheckBox + label:before {
  488. opacity: 0.5;
  489. }
  490. /* Use label to have bigger clickable size for checkbox */
  491. .files-fileList tr td.selection>.selectCheckBox,
  492. .select-all {
  493. & + label {
  494. padding: 16px;
  495. }
  496. &:focus-visible + label {
  497. background-color: var(--color-background-hover);
  498. border-radius: var(--border-radius-pill);
  499. outline: none !important;
  500. border: 2px solid var(--color-primary-element) !important;
  501. padding: 14px;
  502. }
  503. }
  504. .files-fileList tr td.selection>.selectCheckBox:focus-visible + label,
  505. .select-all:focus-visible + label {
  506. outline-offset: 0px;
  507. }
  508. .files-fileList tr td.filename {
  509. position: relative;
  510. width: 100%;
  511. padding-left: 0;
  512. padding-right:0;
  513. -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms;
  514. }
  515. .files-fileList tr td.filename a.name label,
  516. .files-fileList tr td.filename p.name label {
  517. position: absolute;
  518. width: 80%;
  519. height: 50px;
  520. }
  521. .files-fileList tr td.filename .favorite {
  522. display: inline-block;
  523. float: left;
  524. }
  525. .files-fileList tr td.filename .favorite-mark {
  526. position: absolute;
  527. display: block;
  528. top: -8px;
  529. right: -8px;
  530. line-height: 100%;
  531. text-align: center;
  532. &.permanent {
  533. // Create background around the favorite marker to ensure there is enough contrast
  534. background-color: var(--color-main-background);
  535. mask: var(--icon-star-rounded-white) no-repeat;
  536. mask-size: 22px 22px;
  537. width: 22px;
  538. height: 22px;
  539. display: flex;
  540. align-content: center;
  541. justify-content: center;
  542. }
  543. }
  544. .files-fileList tr:hover td.filename .favorite-mark.permanent {
  545. background-color: var(--color-background-hover);
  546. }
  547. #uploadsize-message,#delete-confirm { display:none; }
  548. /* File actions */
  549. .fileactions {
  550. z-index: 50;
  551. }
  552. .busy .fileactions, .busy .action {
  553. visibility: hidden;
  554. }
  555. /* fix position of bubble pointer for Files app */
  556. .bubble,
  557. #app-navigation .app-navigation-entry-menu {
  558. min-width: 100px;
  559. }
  560. /* force show the loading icon, not only on hover */
  561. .files-fileList .icon-loading-small {
  562. opacity: 1 !important;
  563. display: inline !important;
  564. }
  565. .files-fileList .action.action-share-notification span, .files-fileList a.name {
  566. cursor: default !important;
  567. }
  568. /*
  569. * Make the disabled link look not like a link in file list rows
  570. */
  571. .files-fileList a.name.disabled {
  572. * {
  573. cursor: default;
  574. }
  575. a, a * {
  576. cursor: pointer;
  577. }
  578. &:focus {
  579. background: none;
  580. }
  581. }
  582. a.action > img {
  583. height: 16px;
  584. width: 16px;
  585. vertical-align: text-bottom;
  586. }
  587. a.action.action-editlocally img.icon {
  588. filter: var(--background-invert-if-dark);
  589. }
  590. /* Actions for selected files */
  591. .selectedActions {
  592. position: relative;
  593. display: inline-block;
  594. vertical-align: middle;
  595. }
  596. .selectedActions.hidden {
  597. display: none;
  598. }
  599. .selectedActions a {
  600. display: inline;
  601. line-height: 50px;
  602. padding: 16px 5px;
  603. }
  604. .selectedActions a.hidden {
  605. display: none;
  606. }
  607. .selectedActions a img {
  608. position:relative;
  609. vertical-align: text-bottom;
  610. margin-bottom: -1px;
  611. }
  612. .selectedActions .actions-selected .icon-more {
  613. margin-top: -3px;
  614. }
  615. .files-fileList td a {
  616. a.action {
  617. display: inline;
  618. padding: 17px 8px;
  619. line-height: 50px;
  620. opacity: .3;
  621. &.action-share {
  622. padding: 17px 14px;
  623. &.permanent:not(.shared-style) .icon-shared + span {
  624. /* hide text of the share action */
  625. /* .hidden-visually for accessbility */
  626. position: absolute;
  627. left:-10000px;
  628. top: auto;
  629. width: 1px;
  630. height: 1px;
  631. overflow: hidden;
  632. }
  633. .avatar {
  634. display: inline-block;
  635. vertical-align: middle;
  636. }
  637. }
  638. &.action-menu {
  639. padding-top: 17px;
  640. padding-bottom: 17px;
  641. padding-left: 14px;
  642. padding-right: 14px;
  643. }
  644. &.no-permission {
  645. &:hover, &:focus {
  646. opacity: .3;
  647. }
  648. }
  649. &.disabled {
  650. &:hover, &:focus,
  651. img {
  652. opacity: .3;
  653. }
  654. &.action-download {
  655. opacity: .7;
  656. &:hover, &:focus {
  657. opacity: .7;
  658. }
  659. }
  660. }
  661. &:hover, &:focus {
  662. opacity: 1;
  663. }
  664. &:focus {
  665. background-color: var(--color-background-hover);
  666. border-radius: var(--border-radius-pill);
  667. }
  668. }
  669. .fileActionsMenu a.action, a.action.action-share.shared-style {
  670. opacity: .7;
  671. }
  672. .fileActionsMenu .action.permanent {
  673. opacity: 1;
  674. }
  675. }
  676. // Ellipsize long sharer names
  677. .files-fileList .action.action-share.permanent.shared-style span:not(.icon) {
  678. display: inline-block;
  679. max-width: 70px;
  680. overflow: hidden;
  681. text-overflow: ellipsis;
  682. vertical-align: middle;
  683. margin-left: 6px;
  684. }
  685. .files-fileList .remoteAddress .userDomain {
  686. margin-left: 0 !important;
  687. }
  688. .files-fileList .favorite-mark.permanent {
  689. opacity: 1;
  690. }
  691. .files-fileList .fileActionsMenu a.action:hover,
  692. .files-fileList .fileActionsMenu a.action:focus,
  693. /* show share action of shared items darker to distinguish from non-shared */
  694. .files-fileList a.action.action-share.shared-style:hover,
  695. .files-fileList a.action.action-share.shared-style:focus {
  696. opacity: 1;
  697. }
  698. .files-fileList tr a.action.disabled {
  699. background: none;
  700. }
  701. .selectedActions a.download.disabled,
  702. .files-fileList tr a.action.action-download.disabled {
  703. color: #000000;
  704. }
  705. .files-fileList tr:hover a.action.disabled:hover * {
  706. cursor: default;
  707. }
  708. .summary {
  709. color: var(--color-text-maxcontrast);
  710. /* add whitespace to bottom of files list to correctly show dropdowns */
  711. $action-menu-items-count: 7; // list view has currently max 7 items in its action menu
  712. height: 44px * ($action-menu-items-count + 0.5); // 0.5 is added to show some whitespace below
  713. }
  714. .files-filestable .summary .filesummary {
  715. width: 100%;
  716. /* Width of checkbox and file preview */
  717. padding-left: 101px;
  718. }
  719. /* Less whitespace needed on link share page
  720. * as there is a footer and action menus have fewer entries.
  721. */
  722. #body-public .summary {
  723. height: 180px;
  724. }
  725. .summary:hover,
  726. .summary:focus,
  727. .summary,
  728. table tr.summary td {
  729. background-color: transparent;
  730. }
  731. .summary td {
  732. border-bottom: none;
  733. vertical-align: top;
  734. padding-top: 20px;
  735. }
  736. .summary td:first-child {
  737. padding: 0;
  738. }
  739. .hiddeninfo {
  740. white-space: pre-line;
  741. }
  742. table.dragshadow {
  743. width:auto;
  744. z-index: 2000;
  745. }
  746. table.dragshadow td.filename {
  747. padding-left:60px;
  748. padding-right:16px;
  749. height: 36px;
  750. /* Override "max-width: 0" to prevent file name and size from overlapping */
  751. max-width: unset;
  752. }
  753. table.dragshadow td.size {
  754. padding-right:8px;
  755. }
  756. .mask {
  757. z-index: 50;
  758. position: absolute;
  759. top: 0;
  760. left: 0;
  761. right: 0;
  762. bottom: 0;
  763. background-color: var(--color-main-background);
  764. background-repeat: no-repeat no-repeat;
  765. background-position: 50%;
  766. opacity: 0.7;
  767. transition: opacity 100ms;
  768. -moz-transition: opacity 100ms;
  769. -o-transition: opacity 100ms;
  770. -ms-transition: opacity 100ms;
  771. -webkit-transition: opacity 100ms;
  772. }
  773. .mask.transparent{
  774. opacity: 0;
  775. }
  776. .newFileMenu {
  777. font-weight: 300;
  778. top: 100%;
  779. left: -48px !important;
  780. margin-top: 4px;
  781. min-width: 100px;
  782. z-index: 1001;
  783. /* Center triangle */
  784. &::after {
  785. left: 61px !important;
  786. }
  787. }
  788. .files-controls {
  789. box-sizing: border-box;
  790. position: -webkit-sticky;
  791. position: sticky;
  792. height: 50px; /* height of the nav toggle button; */
  793. padding: 0;
  794. margin: 0;
  795. background-color: var(--color-main-background-translucent);
  796. z-index: 62; /* must be above the filelist sticky header and texteditor menubar */
  797. -webkit-user-select: none;
  798. -moz-user-select: none;
  799. -ms-user-select: none;
  800. user-select: none;
  801. display: flex;
  802. top: 0;
  803. padding-left: 50px; /* width of the nav toggle button; */
  804. .actions {
  805. > div,
  806. & {
  807. > .button, button {
  808. box-sizing: border-box;
  809. display: inline-block;
  810. display: flex;
  811. height: 44px;
  812. width: 44px;
  813. padding: 9px; // width - border - icon width = 18px
  814. align-items: center;
  815. justify-content: center;
  816. }
  817. .button.hidden {
  818. display: none;
  819. }
  820. }
  821. }
  822. }
  823. /* position controls for apps with app-navigation */
  824. .viewer-mode #app-navigation + #app-content .files-controls {
  825. left: 0;
  826. }
  827. .files-filestable .filename .action .icon,
  828. .files-filestable .selectedActions a .icon,
  829. .files-filestable .filename .favorite-mark .icon,
  830. .files-controls .actions .button .icon {
  831. display: inline-block;
  832. vertical-align: middle;
  833. background-size: 16px 16px;
  834. }
  835. .files-filestable .filename .favorite-mark {
  836. // Override default icons to always hide the star icon and always show the
  837. // starred icon even when hovered or focused.
  838. & .icon-star {
  839. background-image: none;
  840. }
  841. & .icon-starred {
  842. background-image: var(--icon-starred-yellow) !important;
  843. }
  844. }
  845. .files-filestable .filename .action .icon.hidden,
  846. .files-filestable .selectedActions a .icon.hidden,
  847. .files-controls .actions .button .icon.hidden {
  848. display: none;
  849. }
  850. .files-filestable .filename .action .icon.loading,
  851. .files-filestable .selectedActions a .icon.loading,
  852. .files-controls .actions .button .icon.loading {
  853. width: 15px;
  854. height: 15px;
  855. }
  856. .app-files .actions .button.new {
  857. position: relative;
  858. }
  859. .breadcrumb {
  860. align-items: center;
  861. .icon-home {
  862. border-radius: var(--border-radius);
  863. }
  864. }
  865. .breadcrumb .canDrop > a,
  866. .files-filestable tbody tr.canDrop {
  867. background-color: rgba( variables.$color-primary, .3 );
  868. }
  869. .dropzone-background {
  870. background-color: rgba( variables.$color-primary, .3 );
  871. :hover{
  872. box-shadow: none !important;
  873. }
  874. }
  875. .notCreatable {
  876. margin-left: 12px;
  877. margin-right: 44px;
  878. margin-top: 12px;
  879. color: var(--color-main-text);
  880. overflow: auto;
  881. min-width: 160px;
  882. height: 54px;
  883. &:not(.hidden) {
  884. display: flex;
  885. }
  886. .icon-alert-outline {
  887. top: -15px;
  888. position: relative;
  889. margin-right: 4px;
  890. }
  891. }
  892. .quota-navigation-item {
  893. margin: 0 !important;
  894. border: none;
  895. border-radius: 0;
  896. background-color: transparent;
  897. z-index:1;
  898. height: 44px;
  899. display: flex !important;
  900. flex-direction: column;
  901. &__text {
  902. height: 30px;
  903. }
  904. &[href='#'] {
  905. // if no link is set, no mouse feedback
  906. &, * {
  907. cursor: default !important;
  908. }
  909. }
  910. &__container {
  911. height: 5px;
  912. border-radius: var(--border-radius);
  913. }
  914. }
  915. /* GRID */
  916. .files-filestable.view-grid:not(.hidden) {
  917. $grid-size: 160px;
  918. $grid-pad: 14px;
  919. /* HEADER and MULTISELECT */
  920. thead {
  921. tr {
  922. display: block;
  923. border-bottom: 1px solid var(--color-border);
  924. background-color: var(--color-main-background-translucent);
  925. th {
  926. width: auto;
  927. border: none;
  928. }
  929. }
  930. }
  931. /* MAIN FILE LIST */
  932. tbody {
  933. display: grid;
  934. grid-template-columns: repeat(auto-fill, $grid-size);
  935. justify-content: space-around;
  936. row-gap: 15px;
  937. margin: 15px 0;
  938. // ensure search still filters tr with .hidden
  939. tr:not(.hidden) {
  940. display: block;
  941. position: relative;
  942. height: $grid-size + 44px - $grid-pad;
  943. border-radius: var(--border-radius);
  944. &:hover, &:focus, &:active,
  945. &.selected,
  946. &.searchresult,
  947. .name:focus,
  948. &.highlighted {
  949. background-color: transparent;
  950. .thumbnail-wrapper,
  951. .nametext,
  952. .fileactions {
  953. background-color: var(--color-background-hover);
  954. }
  955. }
  956. }
  957. td {
  958. display: inline;
  959. border-bottom: none;
  960. &.filename {
  961. .thumbnail-wrapper {
  962. min-width: 0;
  963. max-width: none;
  964. position: absolute;
  965. width: $grid-size;
  966. height: $grid-size;
  967. padding: $grid-pad; // same as action icon bottom and right padding
  968. top: 0;
  969. left: 0;
  970. z-index: -1; // make sure the default click is the link
  971. .thumbnail {
  972. width: calc(100% - 2 * #{$grid-pad});
  973. height: calc(100% - 2 * #{$grid-pad}); //action icon padding
  974. background-size: contain;
  975. margin: 0;
  976. border-radius: var(--border-radius);
  977. background-repeat: no-repeat;
  978. background-position: center;
  979. /* Position favorite star related to checkbox to left and 3-dot menu below
  980. * Position is inherited from the selection while in grid view
  981. */
  982. .favorite-mark {
  983. left: auto;
  984. top: -11px; // center in corner of thumbnail
  985. right: -11px; // center in corner of thumbnail
  986. }
  987. }
  988. }
  989. .uploadtext {
  990. width: 100%;
  991. margin: 0;
  992. top: 0;
  993. bottom: auto;
  994. // checkbox align
  995. height: 28px;
  996. padding-top: 4px;
  997. // checkbox margins
  998. padding-left: calc(44px - 16px);
  999. }
  1000. .name {
  1001. height: 100%;
  1002. border-radius: var(--border-radius);
  1003. // since we're using thumbnail, name and actions bg
  1004. // we need to hide the overflow for the radius to show
  1005. // luckily the popovermenu is outside .name
  1006. overflow: hidden;
  1007. // we but the thumbnail in background to ensure
  1008. // the name is the default click handler
  1009. // force back the cursor which has been overridden
  1010. // and disabled for some reason...
  1011. cursor: pointer !important;
  1012. .nametext {
  1013. display: flex;
  1014. height: 44px;
  1015. margin-top: $grid-size - $grid-pad;
  1016. text-align: center;
  1017. line-height: 44px;
  1018. padding: 0;
  1019. .innernametext {
  1020. display: inline-block;
  1021. text-align: center;
  1022. overflow: hidden;
  1023. text-overflow: ellipsis;
  1024. white-space: nowrap;
  1025. }
  1026. &:before {
  1027. content: '';
  1028. flex: 1;
  1029. min-width: 14px;
  1030. }
  1031. &:after {
  1032. content: '';
  1033. flex: 1;
  1034. min-width: 44px;
  1035. }
  1036. /* No space for extension in grid view */
  1037. .extension {
  1038. display: none;
  1039. }
  1040. }
  1041. /* System tags */
  1042. .system-tags {
  1043. display: none;
  1044. }
  1045. .fileactions {
  1046. height: initial;
  1047. margin-top: $grid-size - $grid-pad;
  1048. display: flex;
  1049. align-items: center;
  1050. position: absolute;
  1051. right: 0;
  1052. .action {
  1053. padding: $grid-pad;
  1054. width: 44px;
  1055. height: 44px;
  1056. display: flex;
  1057. align-items: center;
  1058. justify-content: center;
  1059. // hide all actions in grid view that are not the menu
  1060. &:not(.action-menu) {
  1061. display: none;
  1062. }
  1063. }
  1064. }
  1065. }
  1066. .fileActionsMenu {
  1067. // force show the sharing entry in the dropdown menu
  1068. .action-share-container.hidden {
  1069. display: block !important;
  1070. // avatar in shared by user dropdown menu
  1071. .action-share img {
  1072. padding: 6px;
  1073. border-radius: 50%;
  1074. }
  1075. }
  1076. // force show the sharing entry in the dropdown menu
  1077. .action-restore-container.hidden {
  1078. display: block !important;
  1079. }
  1080. // force show the sharing entry in the dropdown menu
  1081. .action-comment-container.hidden {
  1082. display: block !important;
  1083. }
  1084. }
  1085. form {
  1086. padding: 3px 14px;
  1087. border-radius: var(--border-radius);
  1088. input.filename {
  1089. width: 100%;
  1090. margin-left: 0;
  1091. cursor: text;
  1092. }
  1093. }
  1094. }
  1095. /* No space for filesize and date in grid view */
  1096. &.filesize,
  1097. &.date {
  1098. display: none;
  1099. }
  1100. &.selection,
  1101. &.filename .favorite-mark {
  1102. position: absolute;
  1103. top: -8px; // half the checkbox width, center on corner of thumbnail
  1104. left: -8px; // half the checkbox width, center on corner of thumbnail
  1105. display: flex;
  1106. z-index: 10;
  1107. label {
  1108. width: 44px;
  1109. height: 44px;
  1110. display: inline-flex;
  1111. padding: $grid-pad; // like any action icon
  1112. &::before {
  1113. margin: 0;
  1114. width: $grid-pad; // 16px - border
  1115. height: $grid-pad; // 16px - border
  1116. }
  1117. }
  1118. }
  1119. /* Position actions menu below file */
  1120. .popovermenu {
  1121. left: 0;
  1122. width: $grid-size - 10px; // 2 * margin
  1123. margin: 0 5px;
  1124. /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */
  1125. .menuitem span:not(.icon) {
  1126. overflow: hidden;
  1127. text-overflow: ellipsis;
  1128. }
  1129. }
  1130. }
  1131. }
  1132. tr.hidden-file td.filename .name .nametext .extension {
  1133. display: block;
  1134. }
  1135. /* Center align the footer file number & size summary */
  1136. tfoot {
  1137. display: grid;
  1138. .summary:not(.hidden) {
  1139. display: inline-block;
  1140. margin: 0 auto;
  1141. $action-menu-items-count: 9; // grid view has currently max 9 items in its action menu
  1142. height: 44px * ($action-menu-items-count + 0.5); // 0.5 is added to show some whitespace below
  1143. td {
  1144. padding-top: 50px;
  1145. &:first-child,
  1146. &.date {
  1147. display: none;
  1148. }
  1149. .info {
  1150. margin-left: 0;
  1151. }
  1152. }
  1153. }
  1154. }
  1155. }
  1156. /* Grid view toggle */
  1157. #view-toggle {
  1158. background-color: var(--color-main-background-translucent);
  1159. border: none;
  1160. margin: 0;
  1161. padding: 22px;
  1162. opacity: .5;
  1163. float: right;
  1164. right: var(--default-grid-baseline);
  1165. top: var(--default-grid-baseline);
  1166. z-index: 100;
  1167. position: sticky;
  1168. &:hover,
  1169. &:focus,
  1170. #showgridview:focus + & {
  1171. opacity: 1;
  1172. }
  1173. &:focus-visible,
  1174. #showgridview:focus-visible + & {
  1175. box-shadow: inset 0 0 0 2px var(--color-primary-element) !important;
  1176. }
  1177. }
  1178. /**
  1179. * Make sure the hidden input is always
  1180. * on the visible scrolled area of the
  1181. * page to avoid scrolling to top when focusing
  1182. */
  1183. #showgridview {
  1184. position: fixed;
  1185. top: 0;
  1186. }
  1187. /* Adjustments for link share page */
  1188. #body-public {
  1189. .files-filestable.view-grid:not(.hidden) tbody td {
  1190. /* More space for filename since there is no share icon */
  1191. &.filename .name .nametext .innernametext {
  1192. max-width: 124px;
  1193. }
  1194. /* Position actions menu correctly below 3-dot-menu */
  1195. .popovermenu {
  1196. left: -80px;
  1197. }
  1198. }
  1199. /* Right-align view toggle on link share page */
  1200. #view-toggle {
  1201. position: absolute;
  1202. right: 0;
  1203. top: 0;
  1204. }
  1205. }
  1206. /* Hide legacy Gallery toggle */
  1207. #gallery-button {
  1208. display: none;
  1209. }
  1210. #tag_multiple_files_container {
  1211. overflow: hidden;
  1212. background-color: #fff;
  1213. border-radius: 3px;
  1214. position: relative;
  1215. display: flex;
  1216. flex-wrap: wrap;
  1217. margin-bottom: 10px;
  1218. h3 {
  1219. width: 100%;
  1220. padding: 0 18px;
  1221. }
  1222. .systemTagsInputFieldContainer {
  1223. flex: 1 1 80%;
  1224. min-width: 0;
  1225. margin: 0 12px;
  1226. }
  1227. }