django-inplaceedit Documentation

Similar documents
django-baton Documentation

django-baton Documentation

django-sticky-uploads Documentation

django-session-security Documentation

Django Phantom Theme Documentation

django-dajaxice Documentation

django-dajax Documentation

django simple pagination Documentation

Django EL(Endless) Pagination Documentation

Django PAM Documentation

alphafilter Documentation

django-messages Documentation

Djam Documentation. Release Participatory Culture Foundation

Django Leaflet Documentation

grabattention The jquery Plug-in

kaleo Documentation Release 1.5 Eldarion

MIT AITI Python Software Development Lab DJ1:

Stamp Builder. Documentation. v1.0.0

django-xross Documentation

django-responsive2 Documentation

django-telegram-login Documentation

Django MFA Documentation

TailorDev Contact Documentation

BEFORE CLASS. If you haven t already installed the Firebug extension for Firefox, download it now from

DJOAuth2 Documentation

django-model-report Documentation

webkitpony Documentation

fragapy Documentation

Django File Picker Documentation

UNIT 3 SECTION 1 Answer the following questions Q.1: What is an editor? editor editor Q.2: What do you understand by a web browser?

showinplaceholder The jquery Plug-in

Siteforce Pilot: Best Practices

Gargoyle Documentation

Jquery Manually Set Checkbox Checked Or Not

django-ad-code Documentation

ThingLink User Guide. Andy Chen Eric Ouyang Giovanni Tenorio Ashton Yon

Django-CSP Documentation

JavaScript: Events, the DOM Tree, jquery and Timing

Django File Picker Documentation

django-autocomplete-light Documentation

Bootstrap-Flask Documentation

django-mongonaut Documentation

editlive Documentation

Django-Front Documentation

Building a Django Twilio Programmable Chat Application

Basics of Web. First published on 3 July 2012 This is the 7 h Revised edition

Configuring Anonymous Access to Analysis Files in TIBCO Spotfire 7.5

djangotribune Documentation

CIW 1D CIW JavaScript Specialist.

KonaKart Shopping Widgets. 3rd January DS Data Systems (UK) Ltd., 9 Little Meadow Loughton, Milton Keynes Bucks MK5 8EH UK

django-facebook-graph Documentation

Creating an Online Catalogue Search for CD Collection with AJAX, XML, and PHP Using a Relational Database Server on WAMP/LAMP Server

django-sekizai Documentation

Django Graphos Documentation

Grading Rubric Homework 1

HTML5 MOCK TEST HTML5 MOCK TEST I

django-rest-framework-datatables Documentation

Client-side Techniques. Client-side Techniques HTML/XHTML. Static web pages, Interactive web page: without depending on interaction with a server

django-image-cropping Documentation

micawber Documentation

Django Generic Ratings Documentation

Easy-select2 Documentation

Django_template3d Documentation

Django Groups Manager Documentation

django-cas Documentation

Easy Authcache documentation

Perfect Student Midterm Exam March 20, 2007 Student ID: 9999 Exam: 7434 CS-081/Vickery Page 1 of 5

django-facebook-graph Documentation

django-embed-video Documentation

Mobile Site Development

wagtailmenus Documentation

django-revproxy Documentation

Django Map Widgets Documentation

Best Practices Chapter 5

DATABASE SYSTEMS. Introduction to web programming. Database Systems Course, 2016

CSE 154 LECTURE 26: JAVASCRIPT FRAMEWORKS

YU Kaltura Media Package User's Guide For version 1.1.x. Written by Media and Information Technology Center, Yamaguchi University.

Design Document V2 ThingLink Startup

spaste Documentation Release 1.0 Ben Webster

JavaScript Fundamentals_

django-amp-tools Documentation Release latest

django-embed-video Documentation

VTEM SLIDES INSTRUCTION MANUAL COPYRIGHT DISCLAIMER. Instruction Manual FOR INFO, UPDATES, REQUESTS & CONTACT

iframe programming with jquery jquery Summit 2011

Django-Select2 Documentation. Nirupam Biswas

Standard 1 The student will author web pages using the HyperText Markup Language (HTML)

classjs Documentation

Hot Desking Application Web Portals Integration

Building and packaging mobile apps in Dreamweaver CC

Schenker AB. Interface documentation Map integration

footer, header, nav, section. search. ! Better Accessibility.! Cleaner Code. ! Smarter Storage.! Better Interactions.

wagtailmenus Documentation

In-ADS User Guide. Estonian Land Board Versioon 1.9.1

HTML5. clicktag implementation

Jquery Ajax Json Php Mysql Data Entry Example

WebApp development. Outline. Web app structure. HTML basics. 1. Fundamentals of a web app / website. Tiberiu Vilcu

JavaScript. jquery and other frameworks. Jacobo Aragunde Pérez. blogs.igalia.com/jaragunde

UI Course HTML: (Html, CSS, JavaScript, JQuery, Bootstrap, AngularJS) Introduction. The World Wide Web (WWW) and history of HTML

django-avatar Documentation

ganetimgr Documentation

Transcription:

django-inplaceedit Documentation Release 1.2.0 Pablo Martín September 17, 2013

CONTENTS i

ii

CHAPTER ONE GETTING STARTED 1.1 Information 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> 1.2 Demo Video Demo, of django-inplaceedit and Django-inlinetrans (Set full screen mode to view it correctly) 1.3 Usage Calling inplace_edit tag you can inplace edit any data from the database. It is important to clarify that the inline edition is not only for text fields, although it may be the more common usage. You can also have inline edition for choices, boolean fields, date and datetime fields, foreing keys, many to many, file and image fields. {% inplace_edit "OBJ.FIELD_NAME" %} {% inplace_edit "OBJ.FIELD_NAME FILTER1 FILTER2... FILTERN" %} You only should change this: <span>{{ user.first_name }}</span> <span>{{ user.last_name }}</span> to this: <span>{% inplace_edit <span>{% inplace_edit "user.first_name" %}</span> "user.last_name" %}</span> 1

django-inplaceedit Documentation, Release 1.2.0 2 Chapter 1. Getting started

CHAPTER TWO INSTALL 2.1 Requirements Django (>= 1.2, even works with 1.1 with some customizations in your project) jquery (>=1.6) 2.2 In your base.html Add {% load inplace_edit %} and wherever you load your static files, add either {% inplace_toolbar %} or {% inplace_static %} 2.3 In your settings.py 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, 3

django-inplaceedit Documentation, Release 1.2.0 ) #...# 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 INPLACEEDIT_SUCCESS_TEXT = Successfully saved INPLACEEDIT_UNSAVED_TEXT = You have unsaved changes INPLACE_ENABLE_CLASS = enable DEFAULT_INPLACE_EDIT_OPTIONS = {} # dictionnary of the optionals parameters that the templatetag can DEFAULT_INPLACE_EDIT_OPTIONS_ONE_BY_ONE = True # modify the behavior of the DEFAULT_INPLACE_EDIT_OPTI ADAPTOR_INPLACEEDIT_EDIT = app_name.perms.myadaptoreditinline # Explain in Permission Adaptor API ADAPTOR_INPLACEEDIT = { myadaptor : app_name.fields.myadaptor } # Explain in Adaptor API INPLACE_GET_FIELD_URL = None # to change the url where django-inplaceedit use to get a field INPLACE_SAVE_URL = None # to change the url where django-inplaceedit use to save a field 2.4 In your urls.py 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), 4 Chapter 2. Install

CHAPTER THREE USAGE Calling inplace_edit tag you can inplace edit any data from the database. It is important to clarify that the inline edition is not only for text fields, although it may be the more common usage. You can also have inline edition for choices, boolean fields, date and datetime fields, foreing keys, many to many, file and image fields. {% inplace_edit "OBJ.FIELD_NAME" %} {% inplace_edit "OBJ.FIELD_NAME FILTER1 FILTER2... FILTERN" %} 3.1 Simple example {% load inplace_edit %} <html> <head>... <script src="{{ STATIC_URL }}js/jquery.min.js" type="text/javascript"></script> {% inplace_toolbar %} {% comment %} or inplace_static {% endcomment %} </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> 3.2 Example with the js in the footer {% load inplace_edit %} <html> 5

django-inplaceedit Documentation, Release 1.2.0 <head>... {% inplace_css 1 %} {% comment %} or inplace_css 0 {% endcomment %} </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>... <script src="{{ STATIC_URL }}js/jquery.min.js" type="text/javascript"></script> {% inplace_js 1 1 %} {% comment %} or inplace_js 1 0 {% endcomment %} </body> </html> 3.2.1 How to use it If you use inplace_static: Just pass the cursor above the field and double click (this is customizable), authenticated with a super user (this is also customizable) If you use inplace_toolbar: Enable a edit inline and just pass the cursor above the field and double click (this is customizable), authenticated with a super user (this is also customizable) 6 Chapter 3. Usage

CHAPTER FOUR ADVANCED USAGE Inplaceedit has some optionals parameters that the templatetag can receive to change its behavior: auto_height: Adapt the height s widget to the tag container. auto_width: Adapt the width s widget to the tag container. min_width: The minimum of the width s widget class_inplace: Add a class to edit inline form. tag_name_cover: The value is covered for a span. But it s possible to change it. filters_to_show: The server filters the value before to save. List separate for loads: If you use some filter that need a load, you set this option. List separate for : edit_empty_value: The text to display when the field is empty 4.1 Examples {% 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_cov {% 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. {% inplace_edit "content.amount" min_width="100" %} Now (>=1.2.0 release) you can overwrite the generic options in the templatetag. Before this only were customizable in the settings, that is to say this options were the same to every inplace edit item: getfieldurl: /inplaceeditform/get_field/, saveurl : /inplaceeditform/save/, successtext, INPLACEEDIT_SUCCESS_TEXT in the settings eventinplaceedit, INPLACEEDIT_EVENT in the settings disableclick, INPLACEEDIT_DISABLE_CLICK in the settings autosave, INPLACEEDIT_AUTO_SAVE in the settings enableclass, INPLACE_ENABLE_CLASS in the settings fieldtypes, INPLACE_FIELD_TYPES in the settings focuswhenediting, INPLACE_FOCUS_WHEN_EDITING in the settings 7

django-inplaceedit Documentation, Release 1.2.0 Only unsavedchanges (INPLACEEDIT_UNSAVED_TEXT in the settings) is a generic option. 4.2 Examples {% inplace_edit "content.description safe" getfieldurl="/myapp/get_field/" %} {% inplace_edit "content.title" autosave="1", eventinplaceedit="click" %} 8 Chapter 4. Advanced Usage

CHAPTER FIVE CUSTOMIZING DJANGO-INPLACEEDIT django-inplaceedit is generic, customizable and extensible. 5.1 Permission Adaptor API By default you can inline edit a field if you are authenticated with a superuser. But it s customizable: 5.1.1 Overwriting the default permission adaptor 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 5.1.2 Example class MyAdaptorEditInline(object): @classmethod def can_edit(cls, adaptor_field): 9

django-inplaceedit Documentation, Release 1.2.0 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 5.2 Creating an adaptor You can create an adaptor to work with django-inplaceedit, the behavior is fully customizable. To default inplaceedit has 17 adaptors (AdaptorTextField, AdaptorTextAreaField, AdaptorChoicesField, AdaptorBooleanField, Adaptor- DateTimeField, AdaptorForeingKeyField, AdaptorManyToManyField, AdaptorImageField etc). These use the api, overwriting some methods for them. You can see four examples in django-inplaceedit-extra-fields project 5.2.1 First step In your settings: ADAPTOR_INPLACEEDIT = { myadaptor : app_name.fields.myadaptor } In app_name.fields.myadaptor: class MyAdaptor(BaseAdaptorField): @property def name(self): return myadaptor You can overwrite a default adaptor. 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. 5.2.2 Python API loads_to_post: It returns the value of the request (normally request.post) classes: Classes of tag cover. By default inplaceedit and myadaptorinplaceedit get_config: Preprocessed of the configuration. By default, it does nothing. get_form_class: It returns the form class. get_form: It returns a instace of form class. get_field: It returns a field of instance of form class. render_value: It returns the render of the value. If you write {% inplace_edit obj.name filter1 %} it returns something like this {{ obj.name filter1 }}. 10 Chapter 5. Customizing django-inplaceedit

django-inplaceedit Documentation, Release 1.2.0 render_value_edit: It returns the render value if you can edit. It returns by default the same of render_value, but if the value is None call to empty_value empty_value: It returns an empty value for this adaptor. By default, Dobleclick to edit. render_field: It returns the render of form, with a field. render_media_field: It returns the media (scripts and css) of the field. render_config: It returns the render of config. can_edit: It returns a boolean that indicate if this user can edit inline this content or not. get_value_editor: It returns a clean value to be saved in DB. save: Save the value in DB. get_auto_height: Returned if the field rendered with auto height get_auto_width: Returned if the field rendered with auto width treatment_height: Special treatment to widget s height. treatment_width: Special treatment to widget s width. If you want to use own options in your adaptor, you can do it. These options will be in self.config i {% inplace_edit "obj.field_name" my_opt1="value1", my_opt2="value2" %} 5.2.3 JavaScript API 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: 5.2. Creating an adaptor 11

django-inplaceedit Documentation, Release 1.2.0 <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(applybutton) { 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(cancelbutton) { 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. 12 Chapter 5. Customizing django-inplaceedit

CHAPTER SIX TESTING This django application has been tested on severals browsers: Firefox, Google Chrome, Opera, Safari and Internet Explorer on versions 7, 8, 9 and 10 to check javascript actions. Attention, jquery 2 does not support IE 6/7/8. If you want to test in these browsers, please use jquery 1 (recomended the last release 1.10.2) Exists a testing django project. This project can use as demo project, because django-inplaceedit is totally adapted to it. Also you can use the demo project of django-inplaceedit-bootstrap The backend has unit test, to check it.: cd testing python run_tests.py You can see this django-inplaceedit works (without changes) from django 1.2, and even in previous versions of Django (1.1 and 1.0) works with some customizations. 13

django-inplaceedit Documentation, Release 1.2.0 14 Chapter 6. Testing

CHAPTER SEVEN OTHER PACKAGES RELATED 7.1 django-transmeta This egg is compatible with django-transmeta, But it is not a requirement, django-transmeta is an application for translatable content in Django s models 7.2 django-inplaceedit-extra-fields django-inplaceedit-extra-fields, with this egg you can extends the default adaptors of django-inplaceedit 7.3 django-inplaceedit-bootstrap django-inplaceedit-bootstrap, integration of django-inplaceedit with Bootstrap 3. 15

django-inplaceedit Documentation, Release 1.2.0 16 Chapter 7. Other packages related

CHAPTER EIGHT DEVELOPMENT You can get the last bleeding edge version of inplaceedit by doing a clone of its git repository: git clone git://github.com/yaco-sistemas/django-inplaceedit.git 17