Comments:"django-inplaceedit 0.94 : Python Package Index"
URL:https://pypi.python.org/pypi/django-inplaceedit
Django application that allows you to inline edition of some data from the database
Inplace Edit Form is a Django application that allows you to inline edition of some data from the database
It is distributed under the terms of the GNU Lesser General Public License <http://www.gnu.org/licenses/lgpl.html>
Video Demo, of django-inplaceedit and Django-inlinetrans (Set full screen mode to view it correctly)
{% load inplace_edit %} {% inplace_toolbar %} or {% inplace_static %}
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', #.....................# 'inplaceeditform', )
And uncomment the request context processor:
TEMPLATE_CONTEXT_PROCESSORS = ( #...# 'django.core.context_processors.request', #...# )
Optional:
INPLACEEDIT_EDIT_EMPTY_VALUE = 'Double click to edit' INPLACEEDIT_AUTO_SAVE = True INPLACEEDIT_EVENT = "dblclick" INPLACEEDIT_DISABLE_CLICK = True # For inplace edit text into a link tag INPLACEEDIT_EDIT_MESSAGE_TRANSLATION = 'Write a translation' # transmeta option DEFAULT_INPLACE_EDIT_OPTIONS = {} # dictionnary of the optionals parameters that the templatetag can receive to change its behavior (see the Advanced usage section) DEFAULT_INPLACE_EDIT_OPTIONS_ONE_BY_ONE = True # modify the behavior of the DEFAULT_INPLACE_EDIT_OPTIONS usage, if True then it use the default values not specified in your template, if False it uses these options only when the dictionnary is empty (when you do put any options in your template)
urlpatterns = patterns('', #...# (r'^inplaceeditform/', include('inplaceeditform.urls')), #...# )
If you use the date adaptor or datetime adaptor also:
js_info_dict = { 'packages': ('django.conf',), } urlpatterns = patterns('', #...# (r'^inplaceeditform/', include('inplaceeditform.urls')), (r'^jsi18n$', 'django.views.i18n.javascript_catalog', js_info_dict), )
{% inplace_edit "OBJ.FIELD_NAME" %} {% inplace_edit "OBJ.FIELD_NAME|FILTER1|FILTER2|...|FILTERN" %}
{% load inplace_edit %}<html><head> ...<script src="{{ STATIC_URL }}js/jquery.min.js" type="text/javascript"></script> {% inplace_toolbar %}</head><body> ...<div id="content"> ... {% inplace_edit "content.name" %} ...<div class="description"> {% inplace_edit "content.date_initial|date:'d m Y'" %} {% inplace_edit "content.description|safe" %}</div><div class="body"> {% inplace_edit "content.body|safe|truncatewords_html:15" %}</div></div> ...</body></html>
{% inplace_edit "content.description|safe" auto_height=1, auto_width=1 %} {% inplace_edit "content.title" class_inplace="titleFormEditInline" %} {% inplace_edit "content.description|safe" filters_to_show="safe|truncatewords_html:30", tag_name_cover="div" %} {% inplace_edit "content.description|my_filter" loads="my_template_tag" %} {% inplace_edit "content.index" edit_empty_value="This is a editable content, now the value is none. Please double click to edit inplace" %}
You can create a adaptor to work with inplace edit form, the behavior is fully customizable. To default inplaceedit has 8 adaptors. These use the api, overwriting some methods for them.
In your settings:
ADAPTOR_INPLACEEDIT = {'myadaptor': 'app_name.fields.MyAdaptor'}
In app_name.fields.MyAdaptor:
class MyAdaptor(BaseAdaptorField): @property def name(self): return 'myadaptor'
If you want to use own options in your adaptor, you can do it. These options will be in self.config in the adaptor. {% inplace_edit "obj.field_name" my_opt1="value1", my_opt2="value2" %}
You can change the javascript behaviour by adding or overriding methods from the original implementation by adding the special file jquery.inplaceeditform.hooks.js to your project. $.inplaceeditform.extend takes an object with the new or replacement methods.
$.inplaceeditform.extend( { inplaceApplySuccessShowMessage: function(inplace_span) { var self = $.inplaceeditform; if (self.opts.successText) { var modal = $('#inplaceedit-modal'); var body = modal.find('div.modal-body p'); body.html(self.opts.successText); setTimeout(function () { modal.fadeOut(function () { $(this).remove(); }); }, 2000); } modal.show(); } } );
Additionally there are four hooks,
getValue: if the value is componing for various widgets, you can set the function getValue, to these DOM elements. Something like this:<script type="text/javascript"> (function($){ $(document).ready(function () { function myGetValue(form, field_id) { return ""Something""; } $(".applyMyAdaptor").data("getValue", myGetValue); }); })(jQuery);</script> applyFinish: if you need/want to do some action after the value be saved. Something like this:<script type="text/javascript"> (function($){ $(document).ready(function () { function myApplyFinish() { return ""Something""; } $(".applyMyAdaptor").data("applyFinish", myApplyFinish); }); })(jQuery);</script> cancelFinish: if you need/want to do some action after the cancel the edit. Something like this:<script type="text/javascript"> (function($){ $(document).ready(function () { function myCancelFinish() { return ""Something""; } $(".cancelMyAdaptor").data("cancelFinish", myCancelFinish); }); })(jQuery);</script> extraConfig: if you need/want add something to the config in the ajax request to print the field<script type="text/javascript"> (function($){ $(document).ready(function () { function myExtraConfig(data) { return data + ""Something""; } $(".configMyAdaptor").data("extraConfig", myExtraConfig); }); })(jQuery);</script>For example the adaptor datetime use these hooks.
To overwrite a adaptor add in your settings something like this:
ADAPTOR_INPLACEEDIT = {'text': 'app_name.fields.MyAdaptorText'}
For this case you overwrite the AdaptorText with MyAdaptorText.
By default you can inline edit a field if you are authenticated with a superuser. But it's customizable:
This package have two inplementations:
SuperUserPermEditInline (by default): Only you can edit if you are super user AdminDjangoPermEditInline: Yo can edit the content if you have a permission edit for that model. If you want enabled this, write in your settings: ADAPTOR_INPLACEEDIT_EDIT = 'inplace_edit.perms.AdminDjangoPermEditInline'You can create a specify adaptor. MyAdaptorEditInline is a class with a single class method, this method receives a adaptor field
# in your settings ADAPTOR_INPLACEEDIT_EDIT = 'app_name.perms.MyAdaptorEditInline' # in app_name.perms class MyAdaptorEditInline(object): @classmethod def can_edit(cls, adaptor_field): return True # All user can edit
class MyAdaptorEditInline(object): @classmethod def can_edit(cls, adaptor_field): user = adaptor_field.request.user obj = adaptor_field.obj can_edit = False if user.is_anonymous(): pass elif user.is_superuser: can_edit = True else: can_edit = has_permission(obj, user, 'edit') return can_edit
This django application has been tested on severals browsers: Firefox, Google Chrome, Opera, Safari and Internet Explorer on versions 7 and 8, to check javascript actions.
Also, exists a django project to test inplaceeditform. This project can use as demo project, because inplaceeditform is totally adapted to it.
You can get the last bleeding edge version of inplaceedit by doing a checkout of its git repository:
git clone git://github.com/Yaco-Sistemas/django-inplaceedit.git
Fix errors when you use filters for the fk fields or m2m fields
Fix css errors
Fix the small typo error
- Thanks to:
Fix a erros with INPLACEEDIT_AUTO_SAVE = True
- Thanks to:
Make javascript extendable and refactor success handler
- Thanks to:
Now works with Django 1.5 and the older versions of Django
- Thanks to:
- Fix a problem when the model that you are editing had a Generic Foreign key
- Thanks to Altimore
Add to default parameter to inplace_css
Translate to the string: "You have unsaved changes!"
Fix a problem with the treatment of the sizes
INPLACEEDIT_EDIT_EMPTY_VALUE settings
- Thanks to:
Add callback to onbeforeunload
Refactor the jquery.inplaceeditform.js
Now is not required the ADMIN_MEDIA_PREFIX in the settings, but this is backward compatible
New options to the settings: DEFAULT_INPLACE_EDIT_OPTIONS and DEFAULT_INPLACE_EDIT_OPTIONS_ONE_BY_ONE
- Thanks to:
- Toolbar to edit inplace
- Auto save option
- New JS hook (extraConfig)
- Now you can choose the event to edit inplace, by default is doble click
- Now when you edit inline the input (or select) get the focus
- Now while there is a ajax request cannot do other ajax request to the same element
- Update the way to get the CSFRToken
- JSLint to jquery.inplaceeditform.js (There were some errors still)
- Refactor and remove little errors
- Refactor the css files
- A strange error with buildout
- I'm sorry but I removed the package by mistake
- Move the repository to github
- Now django-inplaceedit managing static files (backward compatible)
- Fix a error when a field contained "_id"
- A little error in AdminDjangoPermEditInline
- More robust when a user can edit a content
- SuperUserPermEditInline, before was a logic, and you can not inherit.
- AdminDjangoPermEditInline, a logic very useful. Thanks to Raimon
- Messages configurables and translatables in the settings
- Messages configurables in the settings
- Fixes a error in bolean adaptor
- The resources dont't have dependencie of MEDIA_URL (in CSS file)
- Usability: edit inline works when you submit the form
- Image/File field compatibility with Django 1.1 (overwriting inplaceeditform/adaptor_file/inc.csrf_token.html) (Django 1.2 or above recommended)
- Compatibility with jQuery 1.2 (jQuery 1.5 or above recommended)
- Compatibility with Django 1.1 (Django 1.2 or above recommended)
- Fixed error in 0.69 rendering text fields whose font size is not integer.
- Catalonia translations, by Raimon Esteve
- Compatible with the CSRF protection (CsrfViewMiddleware)
- Improvement in the rendering of the widgets (better calculate the height and width)
- More versatile the api
- Support to old browsers. Some browser have not a JSON library
- Improved the inplace edit widget in images.
- Inplace edit of imagefield and filefield works in IE (new), FF, Chrome (alpha)
- Inplace edit of imagefield and filefield (alpha)
- More versatile the api
- Fixes the warning when the error is for other field
- More versatile the api
- Created a test project
- Inplace editof booleanfield
- Fixes some details of datetimefield and datefield
- Can't save datetime values on several browser
- The icons did not see
- autoheight and autowidth
- Improve the inplace edit with choices field
- Made less intrusive inplace edit form, now it's putting two spaces)
- A new egg from django-inplaceedit-version1
- The js should be a plugin jQuery
- The generated html should be bit intrusive
- API to create adaptators
- Option to auto_height, and auto_width
- Error/ succes messages
- Two functions of render_value, with you can edit, and other when you cannot edit
- A function with empty value
- The files media should not be added if this is adding
- The inplaceedit should can edit some like this:
{% inplace_edit "obj.field_x.field_y" %}
django-inplaceedit-0.94.tar.gz (md5) | Source | 2013-04-25 | 47KB | 62 | |