parent
ebb4eb4e29
commit
cf252605ad
@ -210,6 +210,36 @@ class MediaLibrary extends React.Component {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Downloads the selected file.
|
||||||
|
*/
|
||||||
|
handleDownload = () => {
|
||||||
|
const { selectedFile } = this.state;
|
||||||
|
const { displayURLs } = this.props;
|
||||||
|
const url = displayURLs.getIn([selectedFile.id, 'url']) || selectedFile.url;
|
||||||
|
if (!url) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const filename = selectedFile.name;
|
||||||
|
|
||||||
|
const element = document.createElement('a');
|
||||||
|
element.setAttribute('href', url);
|
||||||
|
element.setAttribute('download', filename);
|
||||||
|
|
||||||
|
element.style.display = 'none';
|
||||||
|
document.body.appendChild(element);
|
||||||
|
|
||||||
|
element.click();
|
||||||
|
|
||||||
|
document.body.removeChild(element);
|
||||||
|
this.setState({ selectedFile: {} });
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
handleLoadMore = () => {
|
handleLoadMore = () => {
|
||||||
const { loadMedia, dynamicSearchQuery, page, privateUpload } = this.props;
|
const { loadMedia, dynamicSearchQuery, page, privateUpload } = this.props;
|
||||||
loadMedia({ query: dynamicSearchQuery, page: page + 1, privateUpload });
|
loadMedia({ query: dynamicSearchQuery, page: page + 1, privateUpload });
|
||||||
@ -302,6 +332,7 @@ class MediaLibrary extends React.Component {
|
|||||||
handlePersist={this.handlePersist}
|
handlePersist={this.handlePersist}
|
||||||
handleDelete={this.handleDelete}
|
handleDelete={this.handleDelete}
|
||||||
handleInsert={this.handleInsert}
|
handleInsert={this.handleInsert}
|
||||||
|
handleDownload={this.handleDownload}
|
||||||
setScrollContainerRef={ref => (this.scrollContainerRef = ref)}
|
setScrollContainerRef={ref => (this.scrollContainerRef = ref)}
|
||||||
handleAssetClick={this.handleAssetClick}
|
handleAssetClick={this.handleAssetClick}
|
||||||
handleLoadMore={this.handleLoadMore}
|
handleLoadMore={this.handleLoadMore}
|
||||||
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import { css } from '@emotion/core';
|
import { css } from '@emotion/core';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import { FileUploadButton } from 'UI';
|
import { FileUploadButton } from 'UI';
|
||||||
import { buttons, shadows, zIndex } from 'netlify-cms-ui-default';
|
import { buttons, colors, colorsRaw, shadows, zIndex } from 'netlify-cms-ui-default';
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
button: css`
|
button: css`
|
||||||
@ -61,6 +61,24 @@ const InsertButton = styled.button`
|
|||||||
${buttons.green};
|
${buttons.green};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const DownloadButton = styled.button`
|
||||||
|
${styles.button};
|
||||||
|
background-color: ${colors.button};
|
||||||
|
color: ${colors.buttonText};
|
||||||
|
|
||||||
|
${props =>
|
||||||
|
props.focused === true &&
|
||||||
|
css`
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
color: ${colorsRaw.white};
|
||||||
|
background-color: #555a65;
|
||||||
|
}
|
||||||
|
`}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const UpperActionsContainer = styled.div``;
|
||||||
|
|
||||||
const LowerActionsContainer = styled.div`
|
const LowerActionsContainer = styled.div`
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
`;
|
`;
|
||||||
@ -69,22 +87,30 @@ const MediaLibraryActions = ({
|
|||||||
uploadButtonLabel,
|
uploadButtonLabel,
|
||||||
deleteButtonLabel,
|
deleteButtonLabel,
|
||||||
insertButtonLabel,
|
insertButtonLabel,
|
||||||
|
downloadButtonLabel,
|
||||||
uploadEnabled,
|
uploadEnabled,
|
||||||
deleteEnabled,
|
deleteEnabled,
|
||||||
insertEnabled,
|
insertEnabled,
|
||||||
|
downloadEnabled,
|
||||||
insertVisible,
|
insertVisible,
|
||||||
imagesOnly,
|
imagesOnly,
|
||||||
onPersist,
|
onPersist,
|
||||||
onDelete,
|
onDelete,
|
||||||
onInsert,
|
onInsert,
|
||||||
|
onDownload,
|
||||||
}) => (
|
}) => (
|
||||||
<ActionsContainer>
|
<ActionsContainer>
|
||||||
<StyledUploadButton
|
<UpperActionsContainer>
|
||||||
label={uploadButtonLabel}
|
<DownloadButton onClick={onDownload} disabled={!downloadEnabled} focused={downloadEnabled}>
|
||||||
imagesOnly={imagesOnly}
|
{downloadButtonLabel}
|
||||||
onChange={onPersist}
|
</DownloadButton>
|
||||||
disabled={!uploadEnabled}
|
<StyledUploadButton
|
||||||
/>
|
label={uploadButtonLabel}
|
||||||
|
imagesOnly={imagesOnly}
|
||||||
|
onChange={onPersist}
|
||||||
|
disabled={!uploadEnabled}
|
||||||
|
/>
|
||||||
|
</UpperActionsContainer>
|
||||||
<LowerActionsContainer>
|
<LowerActionsContainer>
|
||||||
<DeleteButton onClick={onDelete} disabled={!deleteEnabled}>
|
<DeleteButton onClick={onDelete} disabled={!deleteEnabled}>
|
||||||
{deleteButtonLabel}
|
{deleteButtonLabel}
|
||||||
@ -102,14 +128,17 @@ MediaLibraryActions.propTypes = {
|
|||||||
uploadButtonLabel: PropTypes.string.isRequired,
|
uploadButtonLabel: PropTypes.string.isRequired,
|
||||||
deleteButtonLabel: PropTypes.string.isRequired,
|
deleteButtonLabel: PropTypes.string.isRequired,
|
||||||
insertButtonLabel: PropTypes.string.isRequired,
|
insertButtonLabel: PropTypes.string.isRequired,
|
||||||
|
downloadButtonLabel: PropTypes.string.isRequired,
|
||||||
uploadEnabled: PropTypes.bool,
|
uploadEnabled: PropTypes.bool,
|
||||||
deleteEnabled: PropTypes.bool,
|
deleteEnabled: PropTypes.bool,
|
||||||
insertEnabled: PropTypes.bool,
|
insertEnabled: PropTypes.bool,
|
||||||
insertVisible: PropTypes.bool,
|
insertVisible: PropTypes.bool,
|
||||||
|
downloadEnabled: PropTypes.bool,
|
||||||
imagesOnly: PropTypes.bool,
|
imagesOnly: PropTypes.bool,
|
||||||
onPersist: PropTypes.func.isRequired,
|
onPersist: PropTypes.func.isRequired,
|
||||||
onDelete: PropTypes.func.isRequired,
|
onDelete: PropTypes.func.isRequired,
|
||||||
onInsert: PropTypes.func.isRequired,
|
onInsert: PropTypes.func.isRequired,
|
||||||
|
onDownload: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default MediaLibraryActions;
|
export default MediaLibraryActions;
|
||||||
|
@ -92,6 +92,7 @@ const MediaLibraryModal = ({
|
|||||||
handlePersist,
|
handlePersist,
|
||||||
handleDelete,
|
handleDelete,
|
||||||
handleInsert,
|
handleInsert,
|
||||||
|
handleDownload,
|
||||||
setScrollContainerRef,
|
setScrollContainerRef,
|
||||||
handleAssetClick,
|
handleAssetClick,
|
||||||
handleLoadMore,
|
handleLoadMore,
|
||||||
@ -141,22 +142,25 @@ const MediaLibraryModal = ({
|
|||||||
uploadButtonLabel={
|
uploadButtonLabel={
|
||||||
isPersisting
|
isPersisting
|
||||||
? t('mediaLibrary.mediaLibraryModal.uploading')
|
? t('mediaLibrary.mediaLibraryModal.uploading')
|
||||||
: t('mediaLibrary.mediaLibraryModal.uploadNew')
|
: t('mediaLibrary.mediaLibraryModal.upload')
|
||||||
}
|
}
|
||||||
deleteButtonLabel={
|
deleteButtonLabel={
|
||||||
isDeleting
|
isDeleting
|
||||||
? t('mediaLibrary.mediaLibraryModal.deleting')
|
? t('mediaLibrary.mediaLibraryModal.deleting')
|
||||||
: t('mediaLibrary.mediaLibraryModal.deleteSelected')
|
: t('mediaLibrary.mediaLibraryModal.deleteSelected')
|
||||||
}
|
}
|
||||||
|
downloadButtonLabel={t('mediaLibrary.mediaLibraryModal.download')}
|
||||||
insertButtonLabel={t('mediaLibrary.mediaLibraryModal.chooseSelected')}
|
insertButtonLabel={t('mediaLibrary.mediaLibraryModal.chooseSelected')}
|
||||||
uploadEnabled={!shouldShowButtonLoader}
|
uploadEnabled={!shouldShowButtonLoader}
|
||||||
deleteEnabled={!shouldShowButtonLoader && hasSelection}
|
deleteEnabled={!shouldShowButtonLoader && hasSelection}
|
||||||
insertEnabled={hasSelection}
|
insertEnabled={hasSelection}
|
||||||
|
downloadEnabled={hasSelection}
|
||||||
insertVisible={canInsert}
|
insertVisible={canInsert}
|
||||||
imagesOnly={forImage}
|
imagesOnly={forImage}
|
||||||
onPersist={handlePersist}
|
onPersist={handlePersist}
|
||||||
onDelete={handleDelete}
|
onDelete={handleDelete}
|
||||||
onInsert={handleInsert}
|
onInsert={handleInsert}
|
||||||
|
onDownload={handleDownload}
|
||||||
/>
|
/>
|
||||||
</LibraryTop>
|
</LibraryTop>
|
||||||
{!shouldShowEmptyMessage ? null : (
|
{!shouldShowEmptyMessage ? null : (
|
||||||
|
@ -164,7 +164,7 @@ const ca = {
|
|||||||
mediaAssets: 'Arxius multimedia',
|
mediaAssets: 'Arxius multimedia',
|
||||||
search: 'Buscar...',
|
search: 'Buscar...',
|
||||||
uploading: 'Penjant...',
|
uploading: 'Penjant...',
|
||||||
uploadNew: 'Penjar de nuevo',
|
upload: 'Penjar de nuevo',
|
||||||
deleting: 'Eliminant...',
|
deleting: 'Eliminant...',
|
||||||
deleteSelected: 'Eliminar selecció',
|
deleteSelected: 'Eliminar selecció',
|
||||||
chooseSelected: 'Confirmar selecció',
|
chooseSelected: 'Confirmar selecció',
|
||||||
|
@ -153,7 +153,7 @@ const cs = {
|
|||||||
mediaAssets: 'Média',
|
mediaAssets: 'Média',
|
||||||
search: 'Hledat…',
|
search: 'Hledat…',
|
||||||
uploading: 'Nahrávání…',
|
uploading: 'Nahrávání…',
|
||||||
uploadNew: 'Nahrát nový',
|
upload: 'Nahrát nový',
|
||||||
deleting: 'Vymazávání…',
|
deleting: 'Vymazávání…',
|
||||||
deleteSelected: 'Smazat označené',
|
deleteSelected: 'Smazat označené',
|
||||||
chooseSelected: 'Vybrat označené',
|
chooseSelected: 'Vybrat označené',
|
||||||
|
@ -161,7 +161,7 @@ const de = {
|
|||||||
mediaAssets: 'Medien',
|
mediaAssets: 'Medien',
|
||||||
search: 'Suchen...',
|
search: 'Suchen...',
|
||||||
uploading: 'Hochladen...',
|
uploading: 'Hochladen...',
|
||||||
uploadNew: 'Hochladen',
|
upload: 'Hochladen',
|
||||||
deleting: 'Löschen...',
|
deleting: 'Löschen...',
|
||||||
deleteSelected: 'Ausgewähltes Element löschen',
|
deleteSelected: 'Ausgewähltes Element löschen',
|
||||||
chooseSelected: 'Ausgewähltes Element verwenden',
|
chooseSelected: 'Ausgewähltes Element verwenden',
|
||||||
|
@ -176,7 +176,8 @@ const en = {
|
|||||||
mediaAssets: 'Media assets',
|
mediaAssets: 'Media assets',
|
||||||
search: 'Search...',
|
search: 'Search...',
|
||||||
uploading: 'Uploading...',
|
uploading: 'Uploading...',
|
||||||
uploadNew: 'Upload new',
|
upload: 'Upload',
|
||||||
|
download: 'Download',
|
||||||
deleting: 'Deleting...',
|
deleting: 'Deleting...',
|
||||||
deleteSelected: 'Delete selected',
|
deleteSelected: 'Delete selected',
|
||||||
chooseSelected: 'Choose selected',
|
chooseSelected: 'Choose selected',
|
||||||
|
@ -180,7 +180,7 @@ const es = {
|
|||||||
mediaAssets: 'Archivos multimedia',
|
mediaAssets: 'Archivos multimedia',
|
||||||
search: 'Buscar...',
|
search: 'Buscar...',
|
||||||
uploading: 'Subiendo...',
|
uploading: 'Subiendo...',
|
||||||
uploadNew: 'Subir nuevo',
|
upload: 'Subir nuevo',
|
||||||
deleting: 'Eliminando...',
|
deleting: 'Eliminando...',
|
||||||
deleteSelected: 'Eliminar selección',
|
deleteSelected: 'Eliminar selección',
|
||||||
chooseSelected: 'Confirmar selección',
|
chooseSelected: 'Confirmar selección',
|
||||||
|
@ -135,7 +135,7 @@ const fr = {
|
|||||||
mediaAssets: 'Ressources',
|
mediaAssets: 'Ressources',
|
||||||
search: 'Recherche...',
|
search: 'Recherche...',
|
||||||
uploading: 'Téléversement...',
|
uploading: 'Téléversement...',
|
||||||
uploadNew: 'Téléverser une nouvelle ressource',
|
upload: 'Téléverser une nouvelle ressource',
|
||||||
deleting: 'Suppression...',
|
deleting: 'Suppression...',
|
||||||
deleteSelected: 'Supprimer les éléments sélectionnés',
|
deleteSelected: 'Supprimer les éléments sélectionnés',
|
||||||
chooseSelected: 'Choisir les éléments sélectionnés',
|
chooseSelected: 'Choisir les éléments sélectionnés',
|
||||||
|
@ -159,7 +159,7 @@ const gr = {
|
|||||||
mediaAssets: 'Αρχεία πολυμέσων',
|
mediaAssets: 'Αρχεία πολυμέσων',
|
||||||
search: 'Αναζήτηση...',
|
search: 'Αναζήτηση...',
|
||||||
uploading: 'Φόρτωμα...',
|
uploading: 'Φόρτωμα...',
|
||||||
uploadNew: 'Ανεβάστε νέα',
|
upload: 'Ανεβάστε νέα',
|
||||||
deleting: 'Διαγραφή...',
|
deleting: 'Διαγραφή...',
|
||||||
deleteSelected: 'Διαγραφή επιλεγμένου',
|
deleteSelected: 'Διαγραφή επιλεγμένου',
|
||||||
chooseSelected: 'Επιλέξτε επιλεγμένο',
|
chooseSelected: 'Επιλέξτε επιλεγμένο',
|
||||||
|
@ -141,7 +141,7 @@ const hu = {
|
|||||||
mediaAssets: 'Média tartalmak',
|
mediaAssets: 'Média tartalmak',
|
||||||
search: 'Keresés...',
|
search: 'Keresés...',
|
||||||
uploading: 'Feltöltés...',
|
uploading: 'Feltöltés...',
|
||||||
uploadNew: 'Új feltöltés',
|
upload: 'Új feltöltés',
|
||||||
deleting: 'Törlés...',
|
deleting: 'Törlés...',
|
||||||
deleteSelected: 'Kijelöltek törlése',
|
deleteSelected: 'Kijelöltek törlése',
|
||||||
chooseSelected: 'Kijelöl',
|
chooseSelected: 'Kijelöl',
|
||||||
|
@ -156,7 +156,7 @@ const it = {
|
|||||||
mediaAssets: 'Media assets',
|
mediaAssets: 'Media assets',
|
||||||
search: 'Cerca...',
|
search: 'Cerca...',
|
||||||
uploading: 'Uploading...',
|
uploading: 'Uploading...',
|
||||||
uploadNew: 'Upload new',
|
upload: 'Upload',
|
||||||
deleting: 'Deleting...',
|
deleting: 'Deleting...',
|
||||||
deleteSelected: 'Cancella selezionato',
|
deleteSelected: 'Cancella selezionato',
|
||||||
chooseSelected: 'Prendi selezionato',
|
chooseSelected: 'Prendi selezionato',
|
||||||
|
@ -157,7 +157,7 @@ const ja = {
|
|||||||
mediaAssets: 'データ',
|
mediaAssets: 'データ',
|
||||||
search: '検索',
|
search: '検索',
|
||||||
uploading: 'アップロード中...',
|
uploading: 'アップロード中...',
|
||||||
uploadNew: 'アップロードする',
|
upload: 'アップロードする',
|
||||||
deleting: '削除中...',
|
deleting: '削除中...',
|
||||||
deleteSelected: '削除する',
|
deleteSelected: '削除する',
|
||||||
chooseSelected: '選択する',
|
chooseSelected: '選択する',
|
||||||
|
@ -164,7 +164,7 @@ const nl = {
|
|||||||
mediaAssets: 'Media',
|
mediaAssets: 'Media',
|
||||||
search: 'Zoeken...',
|
search: 'Zoeken...',
|
||||||
uploading: 'Uploaden...',
|
uploading: 'Uploaden...',
|
||||||
uploadNew: 'Nieuwe uploaden',
|
upload: 'Nieuwe uploaden',
|
||||||
deleting: 'Verwijderen...',
|
deleting: 'Verwijderen...',
|
||||||
deleteSelected: 'Verwijder selectie',
|
deleteSelected: 'Verwijder selectie',
|
||||||
chooseSelected: 'Gebruik selectie',
|
chooseSelected: 'Gebruik selectie',
|
||||||
|
@ -174,7 +174,7 @@ const pl = {
|
|||||||
mediaAssets: 'Zasoby multimedialne',
|
mediaAssets: 'Zasoby multimedialne',
|
||||||
search: 'Szukaj...',
|
search: 'Szukaj...',
|
||||||
uploading: 'Przesyłanie...',
|
uploading: 'Przesyłanie...',
|
||||||
uploadNew: 'Prześlij nowe',
|
upload: 'Prześlij nowe',
|
||||||
deleting: 'Usuwanie...',
|
deleting: 'Usuwanie...',
|
||||||
deleteSelected: 'Usuń zaznaczone',
|
deleteSelected: 'Usuń zaznaczone',
|
||||||
chooseSelected: 'Wybierz zaznaczone',
|
chooseSelected: 'Wybierz zaznaczone',
|
||||||
|
@ -140,7 +140,7 @@ const pt = {
|
|||||||
mediaAssets: 'Recursos de mídia',
|
mediaAssets: 'Recursos de mídia',
|
||||||
search: 'Pesquisar...',
|
search: 'Pesquisar...',
|
||||||
uploading: 'Enviando...',
|
uploading: 'Enviando...',
|
||||||
uploadNew: 'Enviar novo',
|
upload: 'Enviar novo',
|
||||||
deleting: 'Deletando...',
|
deleting: 'Deletando...',
|
||||||
deleteSelected: 'Excluir selecionado',
|
deleteSelected: 'Excluir selecionado',
|
||||||
chooseSelected: 'Escolher selecionado',
|
chooseSelected: 'Escolher selecionado',
|
||||||
|
@ -139,7 +139,7 @@ const ru = {
|
|||||||
mediaAssets: 'Медиаресурсы',
|
mediaAssets: 'Медиаресурсы',
|
||||||
search: 'Идёт поиск…',
|
search: 'Идёт поиск…',
|
||||||
uploading: 'Загрузка…',
|
uploading: 'Загрузка…',
|
||||||
uploadNew: 'Загрузить новый',
|
upload: 'Загрузить новый',
|
||||||
deleting: 'Удаление…',
|
deleting: 'Удаление…',
|
||||||
deleteSelected: 'Удалить помеченные',
|
deleteSelected: 'Удалить помеченные',
|
||||||
chooseSelected: 'Выбрать помеченные',
|
chooseSelected: 'Выбрать помеченные',
|
||||||
|
@ -162,7 +162,7 @@ const tr = {
|
|||||||
mediaAssets: 'Medya dosyaları',
|
mediaAssets: 'Medya dosyaları',
|
||||||
search: 'Ara...',
|
search: 'Ara...',
|
||||||
uploading: 'Yükleniyor...',
|
uploading: 'Yükleniyor...',
|
||||||
uploadNew: 'Yeni yükle',
|
upload: 'Yeni yükle',
|
||||||
deleting: 'Siliniyor...',
|
deleting: 'Siliniyor...',
|
||||||
deleteSelected: 'Silme seçildi',
|
deleteSelected: 'Silme seçildi',
|
||||||
chooseSelected: 'Seç',
|
chooseSelected: 'Seç',
|
||||||
|
@ -135,7 +135,7 @@ const uk = {
|
|||||||
mediaAssets: 'Медіа матеріали',
|
mediaAssets: 'Медіа матеріали',
|
||||||
search: 'Пошук...',
|
search: 'Пошук...',
|
||||||
uploading: 'Завантаження...',
|
uploading: 'Завантаження...',
|
||||||
uploadNew: 'Завантажити',
|
upload: 'Завантажити',
|
||||||
deleting: 'Видалення...',
|
deleting: 'Видалення...',
|
||||||
deleteSelected: 'Видалити обране',
|
deleteSelected: 'Видалити обране',
|
||||||
chooseSelected: 'Додати обране',
|
chooseSelected: 'Додати обране',
|
||||||
|
@ -152,7 +152,7 @@ const zh_Hant = {
|
|||||||
mediaAssets: '媒體資產',
|
mediaAssets: '媒體資產',
|
||||||
search: '搜尋中...',
|
search: '搜尋中...',
|
||||||
uploading: '上傳中...',
|
uploading: '上傳中...',
|
||||||
uploadNew: '上傳新內容',
|
upload: '上傳新內容',
|
||||||
deleting: '刪除中...',
|
deleting: '刪除中...',
|
||||||
deleteSelected: '刪除已選擇的項目',
|
deleteSelected: '刪除已選擇的項目',
|
||||||
chooseSelected: '選擇已選擇的項目',
|
chooseSelected: '選擇已選擇的項目',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user