Skip to content

Commit 45a056f

Browse files
committed
First commit, base files
1 parent cd0ffb6 commit 45a056f

File tree

5 files changed

+122
-1
lines changed

5 files changed

+122
-1
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,6 @@ ENV/
8787

8888
# Rope project settings
8989
.ropeproject
90+
91+
# Pycharm
92+
.idea/

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# django-preview-image-widget
1+
# django-preview-image-widget
2+
3+
[WORK IN PROGRESS]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
.thumbnail {
2+
width: 171px;
3+
margin: 0 auto;
4+
margin-bottom: 10px;
5+
}
6+
#preview {
7+
position: relative;
8+
}
9+
#preview a {
10+
position: absolute;
11+
bottom: 5px;
12+
left: 5px;
13+
right: 5px;
14+
15+
}
16+
#file-info {
17+
text-align: center;
18+
display: block;
19+
padding-top:10px;
20+
}
21+
input[simple_image_widget] {
22+
position: absolute;
23+
visibility: hidden;
24+
width: 0;
25+
z-index: -9999;
26+
}
27+
#file-save {
28+
text-align:center;
29+
width: 171px;
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
$(document).on('mouseenter', '#preview', function(e) {
2+
$(this).find('a').fadeIn();
3+
});
4+
5+
$(document).on('mouseleave', '#preview', function(e) {
6+
$(this).find('a').fadeOut();
7+
});
8+
9+
$(document).on('click', '#file-select', function(e) {
10+
e.preventDefault();
11+
$("[simple_image_widget]").click();
12+
});
13+
14+
$(document).on('change', '[simple_image_widget]', function(e) {
15+
var file = (this.files[0].name).toString();
16+
var reader = new FileReader();
17+
18+
$('#file-info').text('');
19+
$('#file-info').text(file);
20+
21+
reader.onload = function (e) {
22+
$('#preview img').attr('src', e.target.result);
23+
}
24+
25+
reader.readAsDataURL(this.files[0]);
26+
});
27+
28+
$(document).ready(function(){
29+
var $ImageWidget = $("[simple_image_widget]");
30+
var preview = $ImageWidget.attr("data-preview");
31+
if(typeof preview != "undefined"){
32+
var img = preview;
33+
} else {
34+
var img = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNzEiIGhlaWdodD0iMTgwIj48cmVjdCB3aWR0aD0iMTcxIiBoZWlnaHQ9IjE4MCIgZmlsbD0iI2VlZSI+PC9yZWN0Pjx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijg1LjUiIHk9IjkwIiBzdHlsZT0iZmlsbDojYWFhO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbCI+MTcxeDE4MDwvdGV4dD48L3N2Zz4=";
35+
}
36+
var html = '<div id="preview" class="thumbnail"><a href="#" id="file-select" class="btn btn-raised btn-primary">Elegir imagen</a>'+
37+
'<img src="'+ img +'"/>';
38+
$ImageWidget.before(html);
39+
});

preview_image_widget/widgets.py

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from django.conf import settings
2+
from django.forms import FileInput
3+
4+
5+
class SimpleImageWidget(FileInput):
6+
"""
7+
Autor: Milton Lenis
8+
Fecha: Abril 2 2017
9+
Widget para archivos de tipo imágen para mejorar un poco la apariencia visual de manera sencilla.
10+
"""
11+
def __init__(self, *args, **kwargs):
12+
"""
13+
Autor: Milton Lenis
14+
Fecha: Abril 2 2017
15+
Método constructor para agregar el atributo 'simple_image_widget' al campo y poder activarlo desde javascript
16+
:param args: Argumentos de la función
17+
:param kwargs: Keyword arguments de la función
18+
"""
19+
kwargs['attrs'] = {
20+
'simple_image_widget': 1
21+
}
22+
super(SimpleImageWidget, self).__init__(*args, **kwargs)
23+
24+
def render(self, name, value, attrs=None):
25+
"""
26+
Autor: Milton Lenis
27+
Fecha: Abril 2 2017
28+
Se sobrecarga el método render para agregar la imágen a la vista previa al editar en caso de que tenga un valor
29+
almacenado
30+
:param name:
31+
:param value:
32+
:param attrs:
33+
:return:
34+
"""
35+
if value:
36+
preview = {"data-preview": settings.MEDIA_URL + str(value)}
37+
if attrs:
38+
attrs.update(preview)
39+
else:
40+
attrs = preview
41+
return super(SimpleImageWidget, self).render(name, value, attrs=attrs)
42+
43+
class Media:
44+
css = {
45+
'all': ('plugins/simple_image_widget/simple_image_widget.css',)
46+
}
47+
js = ('plugins/simple_image_widget/simple_image_widget.js',)

0 commit comments

Comments
 (0)