_file-uploader.less 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. // /**
  2. // * Copyright © Magento, Inc. All rights reserved.
  3. // * See COPYING.txt for license details.
  4. // */
  5. //
  6. // Components -> Single File Uploader
  7. // _____________________________________________
  8. //
  9. // Variables
  10. // ---------------------------------------------
  11. @file-uploader-preview__border-color: @color-lighter-grayish;
  12. @file-uploader-preview__background-color: @color-white;
  13. @file-uploader-preview-focus__color: @color-blue2;
  14. @file-uploader-document-icon__color: @color-gray80;
  15. @file-uploader-document-icon__size: 7rem;
  16. @file-uploader-document-icon__z-index: @data-grid-file-uploader-image__z-index + 1;
  17. @file-uploader-video-icon__color: @color-gray80;
  18. @file-uploader-video-icon__size: 4rem;
  19. @file-uploader-video-icon__z-index: @data-grid-file-uploader-image__z-index + 1;
  20. @file-uploader-placeholder-icon__color: @color-gray80;
  21. @file-uploader-placeholder-icon__z-index: @data-grid-file-uploader-image__z-index + 1;
  22. @file-uploader-delete-icon__color: @color-brownie;
  23. @file-uploader-delete-icon__hover__color: @color-brownie-vanilla;
  24. @file-uploader-delete-icon__font-size: 2rem;
  25. @file-uploader-muted-text__color: @color-gray62;
  26. @file-uploader-preview__width: 150px;
  27. @file-uploader-preview__height: @file-uploader-preview__width;
  28. @file-uploader-preview__opacity: .7;
  29. @file-uploader-spinner-dimensions: 15px;
  30. @file-uploader-dragover__background: @color-gray83;
  31. @file-uploader-dragover-focus__color: @color-blue2;
  32. // Grid uploader
  33. @data-grid-file-uploader-image__size: 5rem;
  34. @data-grid-file-uploader-image__z-index: 1;
  35. @data-grid-file-uploader-menu-button__width: 2rem;
  36. @data-grid-file-uploader-upload-icon__color: @color-darker-gray;
  37. @data-grid-file-uploader-upload-icon__hover__color: @color-very-dark-gray;
  38. @data-grid-file-uploader-upload-icon__line-height: 48px;
  39. @data-grid-file-uploader-wrapper__size: @data-grid-file-uploader-image__size + 2rem;
  40. //
  41. // Single file uploader
  42. // ---------------------------------------------
  43. .file-uploader-area {
  44. position: relative;
  45. input[type='file'] {
  46. cursor: pointer;
  47. opacity: 0;
  48. overflow: hidden;
  49. position: absolute;
  50. visibility: hidden;
  51. width: 0;
  52. &:focus {
  53. + .file-uploader-button {
  54. box-shadow: 0 0 0 1px @file-uploader-preview-focus__color;
  55. }
  56. }
  57. &:disabled {
  58. + .file-uploader-button {
  59. cursor: default;
  60. opacity: .5;
  61. pointer-events: none;
  62. }
  63. }
  64. }
  65. }
  66. .file-uploader-summary {
  67. display: inline-block;
  68. vertical-align: top;
  69. }
  70. .file-uploader-button {
  71. cursor: pointer;
  72. display: inline-block;
  73. &._is-dragover {
  74. background: @file-uploader-dragover__background;
  75. border: 1px solid @file-uploader-preview-focus__color;
  76. }
  77. }
  78. .file-uploader-spinner {
  79. background-image: url('@{baseDir}images/loader-1.gif');
  80. background-position: 50%;
  81. background-repeat: no-repeat;
  82. background-size: @file-uploader-spinner-dimensions;
  83. display: none;
  84. height: 30px;
  85. margin-left: @indent__s;
  86. vertical-align: top;
  87. width: @file-uploader-spinner-dimensions;
  88. }
  89. .file-uploader-preview {
  90. .action-remove {
  91. &:extend(.abs-action-reset all);
  92. .lib-icon-font (
  93. @icon-delete__content,
  94. @_icon-font: @icons-admin__font-name,
  95. @_icon-font-size: @file-uploader-delete-icon__font-size,
  96. @_icon-font-color: @file-uploader-delete-icon__color,
  97. @_icon-font-color-hover: @file-uploader-delete-icon__hover__color,
  98. @_icon-font-text-hide: true,
  99. @_icon-font-display: block
  100. );
  101. bottom: 4px;
  102. cursor: pointer;
  103. display: block;
  104. height: 27px;
  105. left: 6px;
  106. position: absolute;
  107. text-decoration: none;
  108. width: 25px;
  109. z-index: 2;
  110. }
  111. &:hover {
  112. .preview-image img,
  113. .preview-link:before {
  114. opacity: @file-uploader-preview__opacity;
  115. }
  116. }
  117. .preview-link {
  118. display: block;
  119. height: 100%;
  120. }
  121. .preview-image img {
  122. bottom: 0;
  123. left: 0;
  124. margin: auto;
  125. max-height: 100%;
  126. max-width: 100%;
  127. position: absolute;
  128. right: 0;
  129. top: 0;
  130. z-index: 1;
  131. }
  132. .preview-video {
  133. .lib-icon-font(
  134. @icon-video__content,
  135. @_icon-font: @icons-admin__font-name,
  136. @_icon-font-size: @file-uploader-video-icon__size,
  137. @_icon-font-color: @file-uploader-video-icon__color,
  138. @_icon-font-color-hover: @file-uploader-video-icon__color
  139. );
  140. &:before {
  141. left: 0;
  142. margin-top: -@file-uploader-video-icon__size / 2;
  143. position: absolute;
  144. right: 0;
  145. top: 50%;
  146. z-index: @file-uploader-video-icon__z-index;
  147. }
  148. }
  149. .preview-document {
  150. .lib-icon-font(
  151. @icon-document__content,
  152. @_icon-font: @icons-admin__font-name,
  153. @_icon-font-size: @file-uploader-document-icon__size,
  154. @_icon-font-color: @file-uploader-document-icon__color,
  155. @_icon-font-color-hover: @file-uploader-document-icon__color
  156. );
  157. &:before {
  158. left: 0;
  159. margin-top: -@file-uploader-document-icon__size / 2;
  160. position: absolute;
  161. right: 0;
  162. top: 50%;
  163. z-index: @file-uploader-document-icon__z-index;
  164. }
  165. }
  166. }
  167. .file-uploader-preview,
  168. .file-uploader-placeholder {
  169. background: @file-uploader-preview__background-color;
  170. border: 1px solid @file-uploader-preview__border-color;
  171. box-sizing: border-box;
  172. cursor: pointer;
  173. display: block;
  174. height: @file-uploader-preview__height;
  175. line-height: 1;
  176. margin: @indent__s @indent__m @indent__s 0;
  177. overflow: hidden;
  178. position: relative;
  179. width: @file-uploader-preview__width;
  180. }
  181. .file-uploader {
  182. &._loading {
  183. .file-uploader-spinner {
  184. display: inline-block;
  185. }
  186. }
  187. .admin__field-note,
  188. .admin__field-error {
  189. margin-bottom: @indent__s;
  190. }
  191. .file-uploader-filename {
  192. .lib-text-overflow();
  193. max-width: @file-uploader-preview__width;
  194. word-break: break-all;
  195. &:first-child {
  196. margin-bottom: @indent__s;
  197. }
  198. }
  199. .file-uploader-meta {
  200. color: @file-uploader-muted-text__color;
  201. }
  202. .admin__field-fallback-reset {
  203. margin-left: @indent__s;
  204. }
  205. ._keyfocus & .action-remove {
  206. &:focus {
  207. box-shadow: 0 0 0 1px @file-uploader-preview-focus__color;
  208. }
  209. }
  210. }
  211. // Placeholder for multiple uploader
  212. .file-uploader-placeholder {
  213. &.placeholder-document {
  214. .lib-icon-font(
  215. @icon-document__content,
  216. @_icon-font: @icons-admin__font-name,
  217. @_icon-font-size: 5rem,
  218. @_icon-font-color: @file-uploader-placeholder-icon__color,
  219. @_icon-font-color-hover: @file-uploader-placeholder-icon__color
  220. );
  221. &:before {
  222. left: 0;
  223. position: absolute;
  224. right: 0;
  225. top: 20px;
  226. z-index: @file-uploader-placeholder-icon__z-index;
  227. }
  228. }
  229. &.placeholder-image {
  230. .lib-icon-font(
  231. @icon-camera__content,
  232. @_icon-font: @icons-admin__font-name,
  233. @_icon-font-size: 5rem,
  234. @_icon-font-color: @file-uploader-placeholder-icon__color,
  235. @_icon-font-color-hover: @file-uploader-placeholder-icon__color
  236. );
  237. &:before {
  238. left: 0;
  239. position: absolute;
  240. right: 0;
  241. top: 20px;
  242. z-index: @file-uploader-placeholder-icon__z-index;
  243. }
  244. }
  245. &.placeholder-video {
  246. .lib-icon-font(
  247. @icon-video__content,
  248. @_icon-font: @icons-admin__font-name,
  249. @_icon-font-size: 3rem,
  250. @_icon-font-color: @file-uploader-placeholder-icon__color,
  251. @_icon-font-color-hover: @file-uploader-placeholder-icon__color
  252. );
  253. &:before {
  254. left: 0;
  255. position: absolute;
  256. right: 0;
  257. top: 30px;
  258. z-index: @file-uploader-placeholder-icon__z-index;
  259. }
  260. }
  261. }
  262. .file-uploader-placeholder-text {
  263. bottom: 0;
  264. color: @color-blue-dodger;
  265. font-size: 1.1rem;
  266. left: 0;
  267. line-height: @line-height__base;
  268. margin-bottom: 15%;
  269. padding: 0 @indent__base;
  270. position: absolute;
  271. right: 0;
  272. text-align: center;
  273. }
  274. //
  275. // Grid image uploader
  276. // ---------------------------------------------
  277. .data-grid-file-uploader {
  278. min-width: @data-grid-file-uploader-wrapper__size;
  279. &._loading {
  280. .file-uploader-spinner {
  281. display: block;
  282. }
  283. .file-uploader-button {
  284. &:before {
  285. display: none;
  286. }
  287. }
  288. }
  289. .file-uploader-image {
  290. background: transparent;
  291. bottom: 0;
  292. left: 0;
  293. margin: auto;
  294. max-height: 100%;
  295. max-width: 100%;
  296. position: absolute;
  297. right: 0;
  298. top: 0;
  299. z-index: @data-grid-file-uploader-image__z-index;
  300. + .file-uploader-area {
  301. .file-uploader-button {
  302. &:before {
  303. display: none;
  304. }
  305. }
  306. }
  307. }
  308. .file-uploader-area {
  309. z-index: @data-grid-file-uploader-image__z-index + 1;
  310. }
  311. .file-uploader-spinner {
  312. height: 100%;
  313. margin: 0;
  314. position: absolute;
  315. top: 0;
  316. width: 100%;
  317. }
  318. .file-uploader-button {
  319. display: block;
  320. height: @data-grid-file-uploader-upload-icon__line-height;
  321. text-align: center;
  322. .lib-icon-font (
  323. @icon-plus__content,
  324. @_icon-font: @icons-admin__font-name,
  325. @_icon-font-size: 1.3rem,
  326. @_icon-font-line-height: @data-grid-file-uploader-upload-icon__line-height,
  327. @_icon-font-color: @data-grid-file-uploader-upload-icon__color,
  328. @_icon-font-color-hover: @data-grid-file-uploader-upload-icon__hover__color,
  329. @_icon-font-text-hide: true,
  330. @_icon-font-display: block
  331. );
  332. }
  333. .action-select-wrap {
  334. float: left;
  335. .action-select {
  336. border: 1px solid @file-uploader-preview__border-color;
  337. display: block;
  338. height: @data-grid-file-uploader-image__size;
  339. margin-left: -1px;
  340. padding: 0;
  341. width: @data-grid-file-uploader-menu-button__width;
  342. &:after {
  343. border-color: @data-grid-file-uploader-upload-icon__color transparent transparent transparent;
  344. left: 50%;
  345. margin: 0 0 0 -5px;
  346. }
  347. &:hover {
  348. &:after {
  349. border-color: @data-grid-file-uploader-upload-icon__hover__color transparent transparent transparent;
  350. }
  351. }
  352. > span {
  353. display: none;
  354. }
  355. }
  356. .action-menu {
  357. left: 4rem;
  358. right: auto;
  359. z-index: @data-grid-file-uploader-image__z-index + 1;
  360. }
  361. }
  362. }
  363. .data-grid-file-uploader-inner {
  364. border: 1px solid @file-uploader-preview__border-color;
  365. float: left;
  366. height: @data-grid-file-uploader-image__size;
  367. position: relative;
  368. width: @data-grid-file-uploader-image__size;
  369. }