Working : Image management set on Category
This commit is contained in:
1758
templates/admin/default/assets/js/dropzone.js
Normal file
1758
templates/admin/default/assets/js/dropzone.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,37 @@
|
||||
// Manage picture upload
|
||||
$(function($){
|
||||
|
||||
// Manage picture upload
|
||||
var pictureUploadManager = {};
|
||||
|
||||
// Set selected image as preview
|
||||
pictureUploadManager.onChangePreviewPicture = function() {
|
||||
$('#images input:file').on('change', function () {
|
||||
var $this = $(this);
|
||||
if ($this.prop("files") && $this.prop("files")[0]) {
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
$this.parent()
|
||||
.find('img.preview')
|
||||
.attr('src', e.target.result)
|
||||
.width(150)
|
||||
.height(200);
|
||||
}
|
||||
|
||||
reader.readAsDataURL($this.prop("files")[0]);
|
||||
}
|
||||
});
|
||||
var imageDropzone = new Dropzone("#images-dropzone");
|
||||
Dropzone.options.imageDropzone = {
|
||||
uploadMultiple: false
|
||||
};
|
||||
imageDropzone.on("success", function(file) {
|
||||
$(".image-manager .dz-file-preview").remove();
|
||||
imageDropzone.removeFile(file);
|
||||
pictureUploadManager.updateImageListAjax();
|
||||
});
|
||||
|
||||
// Update picture list via AJAX call
|
||||
pictureUploadManager.updateImageListAjax = function() {
|
||||
var $imageListArea = $(".image-manager .existing-image");
|
||||
$imageListArea.html('<div class="loading" ></div>');
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: imageListUrl,
|
||||
statusCode: {
|
||||
404: function() {
|
||||
$imageListArea.html(
|
||||
imageListErrorMessage
|
||||
);
|
||||
}
|
||||
}
|
||||
}).done(function(data) {
|
||||
$imageListArea.html(
|
||||
data
|
||||
);
|
||||
});
|
||||
};
|
||||
pictureUploadManager.onChangePreviewPicture();
|
||||
|
||||
// Remove image on click
|
||||
pictureUploadManager.onClickDeleteImage = function() {
|
||||
@@ -52,16 +61,4 @@ $(function($){
|
||||
});
|
||||
};
|
||||
pictureUploadManager.onClickDeleteImage();
|
||||
|
||||
// Remove image on click
|
||||
pictureUploadManager.clonePictureInputs = function() {
|
||||
var $inputs = $(".image-manager .picture-input");
|
||||
if ($inputs.size == 1) {
|
||||
console.log('1');
|
||||
$(".image-manager .picture-input").last().show();
|
||||
} else {
|
||||
console.log('+d1');
|
||||
$(".image-manager .picture-input").last().clone().appendTo(".image-manager .pictures-input");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade {if $current_tab == 'images'}active in{/if}" id="images">
|
||||
{include file='includes/image-upload-form.html' formName="thelia.admin.category.image.creation" formSuccessUrl={url path="/admin/categories/update?category_id=$category_id"} imageType='category' parentId=$category_id}
|
||||
{include file='includes/image-upload-form.html' imageType='category' parentId=$category_id}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade {if $current_tab == 'documents'}active in{/if}" id="documents">
|
||||
@@ -297,9 +297,14 @@
|
||||
{/block}
|
||||
|
||||
{block name="javascript-initialization"}
|
||||
{javascripts file='assets/js/image-upload.js'}
|
||||
<script src="{$asset_url}"></script>
|
||||
{/javascripts}
|
||||
{javascripts file='assets/js/dropzone.js'}
|
||||
<script src="{$asset_url}"></script>
|
||||
{/javascripts}
|
||||
{javascripts file='assets/js/image-upload.js'}
|
||||
<script src="{$asset_url}"></script>
|
||||
{/javascripts}
|
||||
|
||||
|
||||
|
||||
<script src="{url file='/tinymce/tinymce.min.js'}"></script>
|
||||
<script>
|
||||
|
||||
120
templates/admin/default/image-edit.html
Normal file
120
templates/admin/default/image-edit.html
Normal file
@@ -0,0 +1,120 @@
|
||||
{extends file="admin-layout.tpl"}
|
||||
|
||||
{block name="page-title"}{intl l='Edit an image'}{/block}
|
||||
|
||||
{block name="check-permissions"}admin.image.edit{/block}
|
||||
|
||||
{block name="main-content"}
|
||||
<div class="customers edit-image">
|
||||
|
||||
<div id="wrapper" class="container">
|
||||
|
||||
{loop type="image" name="image_edit" source="{$imageType}" id="{$imageId}" width="200" height="100" resize_mode="borders" backend_context="1" lang="$edit_language_id"}
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li>
|
||||
<li><a href="{url path="{$redirectUrl}"}">{intl l="Image"}</a></li>
|
||||
<li>{intl l='Editing image "%name"' name="{$TITLE}"}</li>
|
||||
</ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12 general-block-decorator">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12 title title-without-tabs">
|
||||
{intl l="Edit image $TITLE"}
|
||||
</div>
|
||||
|
||||
<div class="form-container">
|
||||
<div class="col-md-12">
|
||||
|
||||
{form name="thelia.admin.category.image.modification"}
|
||||
<form method="POST" action="{url path="/admin/image/type/{$imageType}/{$ID}/update"}" enctype="multipart/form-data" class="clearfix">
|
||||
|
||||
<div class="row inner-toolbar clearfix">
|
||||
<div class="col-md-6 inner-actions pull-right">
|
||||
<button type="submit" name="save_mode" value="stay" class="btn btn-default btn-primary" title="{intl l='Save'}">{intl l='Save'} <span class="glyphicon glyphicon-ok"></span></button>
|
||||
<a href="{url path="{$redirectUrl}"}" class="btn btn-default btn-info">{intl l='Close'} <span class="glyphicon glyphicon-remove"></span></a>
|
||||
</div>
|
||||
</div>
|
||||
{form_hidden_fields form=$form}
|
||||
|
||||
{form_field form=$form field='success_url'}
|
||||
<input type="hidden" name="{$name}" value="{url path="/admin/image/type/{$imageType}/{$ID}/update"}" />
|
||||
{/form_field}
|
||||
|
||||
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
|
||||
|
||||
<div class="col-md-6">
|
||||
<p class="title title-without-tabs">{intl l="Image informations"}</p>
|
||||
|
||||
|
||||
|
||||
<img src="{$IMAGE_URL}" alt="{$TITLE}" />
|
||||
{form_field form=$form field='file'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
<label for="{$label_attr.for}" class="control-label">{intl l="{$label}"} : </label>
|
||||
<input type="file" id="{$label_attr.for}" name="{$name}" class="form-control" value="" title="{intl l="{$label}"}" placeholder="{intl l='File'}">
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
{form_field form=$form field='title'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
<label for="{$label_attr.for}" class="control-label">{intl l="{$label}"} : </label>
|
||||
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$TITLE}" title="{intl l="{$label}"}" placeholder="{intl l='Title'}">
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
{form_field form=$form field='chapo'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
<label for="{$label_attr.for}" class="control-label">{intl l="{$label}"} : </label>
|
||||
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$CHAPO}" title="{intl l="{$label}"}" placeholder="{intl l='Chapo'}">
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
{form_field form=$form field='postscriptum'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
<label for="{$label_attr.for}" class="control-label">{intl l="{$label}"} : </label>
|
||||
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$POSTSCRIPTUM}" title="{intl l="{$label}"}" placeholder="{intl l='Post Scriptum'}">
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
{form_field form=$form field='description'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
<label for="{$label_attr.for}" class="control-label">{intl l="{$label}"} : </label>
|
||||
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$DESCRIPTION}" title="{intl l="{$label}"}" placeholder="{intl l='Description'}">
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
</div>
|
||||
</form>
|
||||
{/form}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{/loop}
|
||||
|
||||
{elseloop rel="image_edit"}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="alert alert-error">
|
||||
{intl l="Sorry, image ID=$imageId was not found."}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/elseloop}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="javascript-initialization"}
|
||||
{javascripts file='assets/js/main.js'}
|
||||
<script src="{$asset_url}"></script>
|
||||
{/javascripts}
|
||||
{/block}
|
||||
@@ -1,80 +1,476 @@
|
||||
{*
|
||||
A generic image upload form
|
||||
|
||||
Parameters:
|
||||
imageType = Image type (category, product, folder, content, module)
|
||||
parentId = Image parent id, ex: category id
|
||||
|
||||
*}
|
||||
|
||||
<div class="image-manager" >
|
||||
<div class="message" >{$imageMessage}</div>
|
||||
<form action="{url path="/admin/image/type/$imageType/$parentId/save-ajax"}" class="dropzone" id="images-dropzone" enctype="multipart/form-data">
|
||||
<div class="fallback">
|
||||
<input name="file" type="file" multiple />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="existing-image">
|
||||
{loop type="image" name="image_test" source="{$imageType}" source_id="{$parentId}" width="200" height="100" resize_mode="borders"}
|
||||
<div>
|
||||
<img src="{$IMAGE_URL}" alt="{$TITLE}" />
|
||||
<a class="image-delete-btn" href="{url path="/admin/image/type/$imageType/delete/$ID"}" data-error-message="{intl l='Please retry'}">
|
||||
{intl l='Delete'}
|
||||
</a>
|
||||
</div>
|
||||
{/loop}
|
||||
{include file='includes/image-upload-list-ajax.html'}
|
||||
</div>
|
||||
|
||||
{form name=$formName}
|
||||
<form id="related_picture_form" method="POST" enctype="multipart/form-data" action="{url path="/admin/image/type/$imageType/$parentId/save"}" runat="server">
|
||||
</div>
|
||||
|
||||
<div>flashMessage = {flashMessage key="imageMessage"}{$value}{/flashMessage}</div>
|
||||
{form_hidden_fields form=$form}
|
||||
{*{block name="javascript-initialization"}*}
|
||||
{*{$smarty.block.parent}*}
|
||||
|
||||
{*{form_field form=$form field='locale'}*}
|
||||
{*<input type="hidden" name="{$name}" value="{if $value}{$value}{else}{$edit_language_locale}{/if}" />*}
|
||||
{*{/form_field}*}
|
||||
{*{javascripts file='assets/js/image-upload.js'}*}
|
||||
{*<script src="{$asset_url}"></script>*}
|
||||
{*{/javascripts}*}
|
||||
{*{javascripts file='assets/js/dropzone.js'}*}
|
||||
{*<script src="{$asset_url}"></script>*}
|
||||
{*{/javascripts}*}
|
||||
{*{/block}*}
|
||||
|
||||
{form_field form=$form field='success_url'}
|
||||
<input type="hidden" name="{$name}" value="{$formSuccessUrl}" />
|
||||
{/form_field}
|
||||
<script>
|
||||
var imageDropZoneUrl = "{url path="/admin/image/type/$imageType/$parentId/save-ajax"}";
|
||||
var imageListUrl = "{url path="/admin/image/type/$imageType/$parentId/list-ajax"}";
|
||||
var imageListErrorMessage = "{intl l='Can\'t load images, please refresh this page.'}";
|
||||
</script>
|
||||
{*
|
||||
@todo refactor
|
||||
see http://www.dropzonejs.com/
|
||||
|
||||
{form_field form=$form field='pictures'}
|
||||
<div class="pictures-input form-group {if $error}has-error{/if}">
|
||||
{*$value={$value|var_dump}*}
|
||||
{*$error={$error|var_dump}*}
|
||||
{*$message={$message|var_dump}*}
|
||||
{*img0={$value.0|var_dump}*}
|
||||
{*img0={$value.0->getFile()}*}
|
||||
{*img1={$value[1]->getFile()}*}
|
||||
<div class="picture-input hide">
|
||||
<label for="pictures" class="control-label" >{intl l='Pictures 1 :'}</label>
|
||||
{*{form_field form=$form field='pictures.0.title'}*}
|
||||
{*$name={$name|var_dump}*}
|
||||
<input class="form-control" type="text" name="{$name}[0][title]" value="{$value}" placeholder="{intl l='picture name'}">
|
||||
{*{/form_field}*}
|
||||
{*{form_field form=$form field='pictures.0.file'}*}
|
||||
{*$name={$name|var_dump}*}
|
||||
<input class="form-control" type="file" name="{$name}[0][file]" value="{$value}" >
|
||||
{*{/form_field}*}
|
||||
<img class="preview" src="#" width="200" height="100" alt="Your image"/>
|
||||
</div>
|
||||
{*<div class="picture-input">*}
|
||||
{*<label for="pictures" class="control-label" >{intl l='Pictures 2 :'}</label>*}
|
||||
{*<input class="form-control" type="text" name="{$name}[1][title]" value="{$value}" placeholder="{intl l='picture name'}">*}
|
||||
{*<input class="form-control" type="file" name="{$name}[1][file]" value="{$value}" >*}
|
||||
{*<img class="preview" src="#" width="200" height="100" alt="Your image"/>*}
|
||||
{*</div>*}
|
||||
{*<div class="picture-input">*}
|
||||
{*<label for="pictures" class="control-label" >{intl l='Pictures 3 :'}</label>*}
|
||||
{*<input class="form-control" type="text" name="{$name}[2][title]" value="{$value}" placeholder="{intl l='picture name'}">*}
|
||||
{*<input class="form-control" type="file" name="{$name}[2][file]" value="{$value}" >*}
|
||||
{*<img class="preview" src="#" width="200" height="100" alt="Your image"/>*}
|
||||
{*</div>*}
|
||||
{*<div class="picture-input">*}
|
||||
{*<label for="pictures" class="control-label" >{intl l='Pictures 4 :'}</label>*}
|
||||
{*<input class="form-control" type="text" name="{$name}[3][title]" value="{$value}" placeholder="{intl l='picture name'}">*}
|
||||
{*<input class="form-control" type="file" name="{$name}[3][file]" value="{$value}" >*}
|
||||
{*<img class="preview" src="#" width="200" height="100" alt="Your image"/>*}
|
||||
{*</div>*}
|
||||
{*<div class="picture-input">*}
|
||||
{*<label for="pictures" class="control-label" >{intl l='Pictures 5 :'}</label>*}
|
||||
{*<input class="form-control" type="text" name="{$name}[4][title]" value="{$value}" placeholder="{intl l='picture name'}">*}
|
||||
{*<input class="form-control" type="file" name="{$name}[4][file]" value="{$value}" >*}
|
||||
{*<img class="preview" src="#" width="200" height="100" alt="Your image"/>*}
|
||||
{*</div>*}
|
||||
{if $error}{$message}{/if}
|
||||
</div>
|
||||
{/form_field}
|
||||
*}
|
||||
<style type="text/css">
|
||||
.dropzone,
|
||||
.dropzone *,
|
||||
.dropzone-previews,
|
||||
.dropzone-previews * {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.dropzone {
|
||||
position: relative;
|
||||
border: 1px solid rgba(0,0,0,0.08);
|
||||
background: rgba(0,0,0,0.02);
|
||||
padding: 1em;
|
||||
}
|
||||
.dropzone.dz-clickable {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropzone.dz-clickable .dz-message,
|
||||
.dropzone.dz-clickable .dz-message span {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropzone.dz-clickable * {
|
||||
cursor: default;
|
||||
}
|
||||
.dropzone .dz-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone.dz-drag-hover {
|
||||
border-color: rgba(0,0,0,0.15);
|
||||
background: rgba(0,0,0,0.04);
|
||||
}
|
||||
.dropzone.dz-started .dz-message {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview,
|
||||
.dropzone-previews .dz-preview {
|
||||
background: rgba(255,255,255,0.8);
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin: 17px;
|
||||
vertical-align: top;
|
||||
border: 1px solid #acacac;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],
|
||||
.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details,
|
||||
.dropzone-previews .dz-preview .dz-details {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
position: relative;
|
||||
background: #ebebeb;
|
||||
padding: 5px;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details .dz-filename,
|
||||
.dropzone-previews .dz-preview .dz-details .dz-filename {
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details img,
|
||||
.dropzone-previews .dz-preview .dz-details img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details .dz-size,
|
||||
.dropzone-previews .dz-preview .dz-details .dz-size {
|
||||
position: absolute;
|
||||
bottom: -28px;
|
||||
left: 3px;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-error-mark,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-success-mark,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview:hover .dz-details img,
|
||||
.dropzone-previews .dz-preview:hover .dz-details img {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark,
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
display: none;
|
||||
position: absolute;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
right: -10px;
|
||||
top: -10px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
color: #8cc657;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
color: #ee162d;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress,
|
||||
.dropzone-previews .dz-preview .dz-progress {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
left: 6px;
|
||||
right: 6px;
|
||||
height: 6px;
|
||||
background: #d7d7d7;
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 0%;
|
||||
background-color: #8cc657;
|
||||
}
|
||||
.dropzone .dz-preview.dz-processing .dz-progress,
|
||||
.dropzone-previews .dz-preview.dz-processing .dz-progress {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-message,
|
||||
.dropzone-previews .dz-preview .dz-error-message {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
left: -20px;
|
||||
background: rgba(245,245,245,0.8);
|
||||
padding: 8px 10px;
|
||||
color: #800;
|
||||
min-width: 140px;
|
||||
max-width: 500px;
|
||||
z-index: 500;
|
||||
}
|
||||
.dropzone .dz-preview:hover.dz-error .dz-error-message,
|
||||
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
|
||||
display: block;
|
||||
}
|
||||
.dropzone {
|
||||
margin-top: 6px;
|
||||
border: 1px solid rgba(0,0,0,0.03);
|
||||
min-height: 200px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
background: rgba(0,0,0,0.03);
|
||||
padding: 23px;
|
||||
}
|
||||
.dropzone .dz-default.dz-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
-webkit-transition: opacity 0.3s ease-in-out;
|
||||
-moz-transition: opacity 0.3s ease-in-out;
|
||||
-o-transition: opacity 0.3s ease-in-out;
|
||||
-ms-transition: opacity 0.3s ease-in-out;
|
||||
transition: opacity 0.3s ease-in-out;
|
||||
background-image: url("../images/spritemap.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
position: absolute;
|
||||
width: 428px;
|
||||
height: 123px;
|
||||
margin-left: -214px;
|
||||
margin-top: -61.5px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
.dropzone .dz-default.dz-message {
|
||||
background-image: url("../images/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-default.dz-message span {
|
||||
display: none;
|
||||
}
|
||||
.dropzone.dz-square .dz-default.dz-message {
|
||||
background-position: 0 -123px;
|
||||
width: 268px;
|
||||
margin-left: -134px;
|
||||
height: 174px;
|
||||
margin-top: -87px;
|
||||
}
|
||||
.dropzone.dz-drag-hover .dz-message {
|
||||
opacity: 0.15;
|
||||
filter: alpha(opacity=15);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)";
|
||||
}
|
||||
.dropzone.dz-started .dz-message {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
}
|
||||
.dropzone .dz-preview,
|
||||
.dropzone-previews .dz-preview {
|
||||
-webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
|
||||
box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
|
||||
font-size: 14px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-image-preview:hover .dz-details img,
|
||||
.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img {
|
||||
display: block;
|
||||
opacity: 0.1;
|
||||
filter: alpha(opacity=10);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-success-mark,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-error-mark,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload {
|
||||
background: #ee1e2d;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark,
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
-webkit-transition: opacity 0.4s ease-in-out;
|
||||
-moz-transition: opacity 0.4s ease-in-out;
|
||||
-o-transition: opacity 0.4s ease-in-out;
|
||||
-ms-transition: opacity 0.4s ease-in-out;
|
||||
transition: opacity 0.4s ease-in-out;
|
||||
background-image: url("../images/spritemap.png");
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark,
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
background-image: url("../images/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark span,
|
||||
.dropzone-previews .dz-preview .dz-error-mark span,
|
||||
.dropzone .dz-preview .dz-success-mark span,
|
||||
.dropzone-previews .dz-preview .dz-success-mark span {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
background-position: -268px -123px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
background-position: -268px -163px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
-webkit-animation: loading 0.4s linear infinite;
|
||||
-moz-animation: loading 0.4s linear infinite;
|
||||
-o-animation: loading 0.4s linear infinite;
|
||||
-ms-animation: loading 0.4s linear infinite;
|
||||
animation: loading 0.4s linear infinite;
|
||||
-webkit-transition: width 0.3s ease-in-out;
|
||||
-moz-transition: width 0.3s ease-in-out;
|
||||
-o-transition: width 0.3s ease-in-out;
|
||||
-ms-transition: width 0.3s ease-in-out;
|
||||
transition: width 0.3s ease-in-out;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0%;
|
||||
height: 100%;
|
||||
background-image: url("../images/spritemap.png");
|
||||
background-repeat: repeat-x;
|
||||
background-position: 0px -400px;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
background-image: url("../images/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-progress,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-progress {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
-webkit-transition: opacity 0.4s ease-in-out;
|
||||
-moz-transition: opacity 0.4s ease-in-out;
|
||||
-o-transition: opacity 0.4s ease-in-out;
|
||||
-ms-transition: opacity 0.4s ease-in-out;
|
||||
transition: opacity 0.4s ease-in-out;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-message,
|
||||
.dropzone-previews .dz-preview .dz-error-message {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
-webkit-transition: opacity 0.3s ease-in-out;
|
||||
-moz-transition: opacity 0.3s ease-in-out;
|
||||
-o-transition: opacity 0.3s ease-in-out;
|
||||
-ms-transition: opacity 0.3s ease-in-out;
|
||||
transition: opacity 0.3s ease-in-out;
|
||||
}
|
||||
.dropzone .dz-preview:hover.dz-error .dz-error-message,
|
||||
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone a.dz-remove,
|
||||
.dropzone-previews a.dz-remove {
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(1, #eee));
|
||||
background-image: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background-image: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background-image: -o-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background-image: -ms-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background-image: linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #eee;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 4px 5px;
|
||||
text-align: center;
|
||||
color: #aaa;
|
||||
margin-top: 26px;
|
||||
}
|
||||
.dropzone a.dz-remove:hover,
|
||||
.dropzone-previews a.dz-remove:hover {
|
||||
color: #666;
|
||||
}
|
||||
@-moz-keyframes loading {
|
||||
0% {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
|
||||
<input type="submit" value="submit"/>
|
||||
</form>
|
||||
{/form}
|
||||
100% {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes loading {
|
||||
0% {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
|
||||
</div>
|
||||
100% {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@-o-keyframes loading {
|
||||
0% {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@-ms-keyframes loading {
|
||||
0% {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@keyframes loading {
|
||||
0% {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
#dropzone {
|
||||
margin: 30px 0;
|
||||
-webkit-box-shadow: 0 0 50px rgba(0,0,0,0.13);
|
||||
box-shadow: 0 0 50px rgba(0,0,0,0.13);
|
||||
padding: 4px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#dropzone .dropzone {
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
@media screen and (max-width: 37.5em) {
|
||||
.dropzone .dz-default.dz-message {
|
||||
background-position: 0 -123px;
|
||||
width: 268px;
|
||||
margin-left: -134px;
|
||||
height: 174px;
|
||||
margin-top: -87px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
23
templates/admin/default/includes/image-upload-list-ajax.html
Normal file
23
templates/admin/default/includes/image-upload-list-ajax.html
Normal file
@@ -0,0 +1,23 @@
|
||||
{*
|
||||
|
||||
A generic image upload form
|
||||
|
||||
Parameters:
|
||||
imageType = Image type (category, product, folder, content, module)
|
||||
parentId = Image parent id, ex: category id
|
||||
|
||||
*}
|
||||
|
||||
{loop type="image" name="image" source="{$imageType}" source_id="{$parentId}" width="200" height="100" resize_mode="borders"}
|
||||
<div>
|
||||
<img src="{$IMAGE_URL}" alt="{$TITLE}" />
|
||||
<a class="image-update-btn" href="{url path="/admin/image/type/$imageType/$ID/update"}" data-error-message="{intl l='Please retry'}">
|
||||
{intl l='Update'}
|
||||
</a>
|
||||
<a class="image-delete-btn" href="{url path="/admin/image/type/$imageType/delete/$ID"}" data-error-message="{intl l='Please retry'}">
|
||||
{intl l='Delete'}
|
||||
</a>
|
||||
</div>
|
||||
{/loop}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user