Skip to content

Commit d14aa03

Browse files
committed
Merge pull request #2 from ricardodani/master
Solving some hardcoded url`s and the possibilite to use this with a admin site mapped as `/`.
2 parents df9f2fa + e344b81 commit d14aa03

File tree

5 files changed

+67
-35
lines changed

5 files changed

+67
-35
lines changed

locking/admin.py

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@
33
from datetime import datetime
44

55
from django.contrib import admin
6-
from django.conf import settings
76
from django.core.urlresolvers import reverse
87
from django.utils.translation import ugettext as _
98
from django import forms
109
from django.contrib.contenttypes.models import ContentType
1110

1211
from locking import LOCK_TIMEOUT, views
1312
from locking.models import Lock
13+
from locking import settings as _s
1414

1515
class LockableAdmin(admin.ModelAdmin):
1616

1717
class Media:
18-
js = ( 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
19-
'static/locking/js/jquery.url.packed.js',
20-
"/admin/ajax/variables.js",
21-
"static/locking/js/admin.locking.js?v=1")
22-
23-
css = {"all": ("static/locking/css/locking.css",)
24-
}
18+
js = (
19+
'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
20+
_s.STATIC_URL + 'locking/js/jquery.url.packed.js',
21+
_s.ADMIN_URL + "ajax/variables.js",
22+
_s.STATIC_URL + "locking/js/admin.locking.js?v=1"
23+
)
24+
css = {"all": (_s.STATIC_URL + 'locking/css/locking.css',)}
2525

2626
def get_form(self, request, obj, *args, **kwargs):
2727
form = super(LockableAdmin, self).get_form(request, *args, **kwargs)
@@ -33,16 +33,20 @@ def changelist_view(self, request, extra_context=None):
3333
# we need the request objects in a few places where it's usually not present,
3434
# so we're tacking it on to the LockableAdmin class
3535
self.request = request
36-
return super(LockableAdmin, self).changelist_view(request, extra_context)
36+
return super(LockableAdmin, self).changelist_view(request,
37+
extra_context)
3738

3839
def save_model(self, request, obj, form, change, *args, **kwargs):
3940

40-
super(LockableAdmin, self).save_model(request, obj, form, change, *args, **kwargs)
41+
super(LockableAdmin, self).save_model(request, obj, form, change,
42+
*args, **kwargs)
4143

4244
try:
4345
# object creation doesn't need/have locking in place
4446
content_type = ContentType.objects.get_for_model(obj)
45-
obj = Lock.objects.get(entry_id=obj.id, app=content_type.app_label, model=content_type.model)
47+
obj = Lock.objects.get(entry_id=obj.id,
48+
app=content_type.app_label,
49+
model=content_type.model)
4650
obj.unlock_for(request.user)
4751
obj.save()
4852
except:
@@ -51,8 +55,9 @@ def save_model(self, request, obj, form, change, *args, **kwargs):
5155

5256
def get_lock_for_admin(self_obj, obj):
5357
'''
54-
returns the locking status along with a nice icon for the admin interface
55-
use in admin list display like so: list_display = ['title', 'get_lock_for_admin']
58+
returns the locking status along with a nice icon for the admin
59+
interface use in admin list display like so:
60+
list_display = ['title', 'get_lock_for_admin']
5661
'''
5762

5863
locked_by = ''
@@ -61,7 +66,9 @@ def get_lock_for_admin(self_obj, obj):
6166

6267
content_type = ContentType.objects.get_for_model(obj)
6368
try:
64-
lock = Lock.objects.get(entry_id=obj.id, app=content_type.app_label, model=content_type.model)
69+
lock = Lock.objects.get(entry_id=obj.id,
70+
app=content_type.app_label,
71+
model=content_type.model)
6572
class_name = 'locked'
6673
locked_by = lock.locked_by.username
6774
output = str(obj.id)
@@ -74,17 +81,25 @@ def get_lock_for_admin(self_obj, obj):
7481
locked_until = _("Still locked for %s more minute(s) by %s.") \
7582
% (minutes_remaining, lock.locked_by)
7683
if self_obj.request.user == lock.locked_by:
77-
locked_until_self = _("You have a lock on this content for %s more minute(s).") \
78-
% (minutes_remaining)
79-
locked_until = '<img src="%sstatic/locking/img/page_edit.png" title="%s" />' \
80-
% (settings.MEDIA_URL, locked_until_self)
84+
locked_until_self = _(
85+
"You have a lock on this content for %s more minute(s)."
86+
) % (minutes_remaining)
87+
locked_until = '''
88+
<img src="%slocking/img/page_edit.png"
89+
title="%s" />''' % (_s.STATIC_URL, locked_until_self)
8190
else:
82-
locked_until = _("Still locked for %s more minute(s) by %s.") \
83-
% (minutes_remaining, lock.locked_by)
84-
locked_until = '<img src="%sstatic/locking/img/lock.png" title="%s" />' \
85-
% (settings.MEDIA_URL, locked_until)
86-
full_name = "%s %s" % (lock.locked_by.first_name,lock.locked_by.last_name)
87-
return u'<a href="#" id=%s class="lock-status %s" title="Locked By: %s">%s%s</a>' % (output, class_name, full_name, locked_until, " " + locked_by)
91+
locked_until = _(
92+
"Still locked for %s more minute(s) by %s."
93+
) % (minutes_remaining, lock.locked_by)
94+
locked_until = '''
95+
<img src="%slocking/img/lock.png" title="%s" />'''\
96+
% (_s.STATIC_URL, locked_until)
97+
full_name = "%s %s" % (
98+
lock.locked_by.first_name,lock.locked_by.last_name)
99+
return u'''
100+
<a href="#" id=%s class="lock-status %s"
101+
title="Locked By: %s">%s%s</a>''' % (output, class_name,
102+
full_name, locked_until, " " + locked_by)
88103
else:
89104
return ''
90105

locking/media/locking/js/admin.locking.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,17 @@ locking.admin = function() {
8484
try {
8585
settings = locking;
8686
// Get url parts.
87-
var app = $.url.segment(1);
88-
var model = $.url.segment(2);
89-
var id = $.url.segment(3);
87+
var adm_url = settings.admin_url;
88+
var pathname = window.location.pathname;
89+
if (pathname.indexOf(adm_url) == 0 && adm_url.length > 0) {
90+
var app = $.url.segment(1);
91+
var model = $.url.segment(2);
92+
var id = $.url.segment(3);
93+
} else {
94+
var app = $.url.segment(0);
95+
var model = $.url.segment(1);
96+
var id = $.url.segment(2);
97+
}
9098
var base_url = settings.base_url + "/" + [app, model, id].join("/");
9199
unlock_click_event(base_url);
92100

@@ -252,4 +260,4 @@ try {
252260
}
253261

254262
// End wrap.
255-
})(jQuery, locking);
263+
})(jQuery, locking);

locking/settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.conf import settings
2+
3+
MEDIA_URL = getattr(settings, 'MEDIA_URL', '/media/')
4+
ADMIN_URL = getattr(settings, 'ADMIN_URL', '/admin/')
5+
STATIC_URL = getattr(settings, 'STATIC_URL', '/static/')

locking/views.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from locking.decorators import user_may_change_model, is_lockable, log
88
from locking import utils, LOCK_TIMEOUT, logger
99
from locking.models import Lock, ObjectLockedError
10+
from locking import settings as _s
1011

1112
"""
1213
These views are called from javascript to open and close assets (objects), in order
@@ -74,10 +75,13 @@ def is_locked(request, app, model, id):
7475
return HttpResponse(status=200)
7576
@log
7677
def js_variables(request):
77-
response = "var locking = " + simplejson.dumps({
78-
'base_url': "/".join(request.path.split('/')[:-1]),
79-
'timeout': LOCK_TIMEOUT,
80-
'time_until_expiration': settings.LOCKING['time_until_expiration'],
78+
response = "var locking = " + simplejson.dumps({
79+
'base_url': "/".join(request.path.split('/')[:-1]),
80+
'timeout': LOCK_TIMEOUT,
81+
'time_until_expiration': settings.LOCKING['time_until_expiration'],
8182
'time_until_warning': settings.LOCKING['time_until_warning'],
82-
})
83-
return HttpResponse(response, mimetype='application/json')
83+
'admin_url': "/".join(_s.ADMIN_URL.split('/')[:-1]),
84+
})
85+
86+
return HttpResponse(response, mimetype='application/json')
87+

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22
from setuptools import setup, find_packages
3-
version = '0.3.1'
3+
version = '0.3.2'
44
README = os.path.join(os.path.dirname(__file__), 'README.md')
55
long_description = open(README).read()
66
setup(name='django-locking',

0 commit comments

Comments
 (0)