forked from 0x2620/pandora
add addpdf button
This commit is contained in:
parent
bed9f39909
commit
9377f772e4
4 changed files with 96 additions and 86 deletions
|
@ -1,9 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vi:si:et:sw=4:sts=4:ts=4
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
from __future__ import division, with_statement
|
from __future__ import division, with_statement
|
||||||
from datetime import datetime
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
from datetime import datetime
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -69,6 +70,77 @@ class Text(models.Model):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def edit(self, data, user):
|
||||||
|
for key in data:
|
||||||
|
if key == 'status':
|
||||||
|
value = data[key]
|
||||||
|
if value not in self._status:
|
||||||
|
value = self._status[0]
|
||||||
|
if value == 'private':
|
||||||
|
for user in self.subscribed_users.all():
|
||||||
|
self.subscribed_users.remove(user)
|
||||||
|
qs = Position.objects.filter(user=user,
|
||||||
|
section='section', text=self)
|
||||||
|
if qs.count() > 1:
|
||||||
|
pos = qs[0]
|
||||||
|
pos.section = 'personal'
|
||||||
|
pos.save()
|
||||||
|
elif value == 'featured':
|
||||||
|
if user.get_profile().capability('canEditFeaturedselfs'):
|
||||||
|
pos, created = Position.objects.get_or_create(text=self, user=user,
|
||||||
|
section='featured')
|
||||||
|
if created:
|
||||||
|
qs = Position.objects.filter(user=user, section='featured')
|
||||||
|
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
||||||
|
pos.save()
|
||||||
|
Position.objects.filter(text=self).exclude(id=pos.id).delete()
|
||||||
|
else:
|
||||||
|
value = self.status
|
||||||
|
elif self.status == 'featured' and value == 'public':
|
||||||
|
Position.objects.filter(text=self).delete()
|
||||||
|
pos, created = Position.objects.get_or_create(text=self,
|
||||||
|
user=self.user,section='personal')
|
||||||
|
qs = Position.objects.filter(user=self.user,
|
||||||
|
section='personal')
|
||||||
|
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
||||||
|
pos.save()
|
||||||
|
for u in self.subscribed_users.all():
|
||||||
|
pos, created = Position.objects.get_or_create(text=self, user=u,
|
||||||
|
section='public')
|
||||||
|
qs = Position.objects.filter(user=u, section='public')
|
||||||
|
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
||||||
|
pos.save()
|
||||||
|
|
||||||
|
self.status = value
|
||||||
|
elif key == 'name':
|
||||||
|
data['name'] = re.sub(' \[\d+\]$', '', data['name']).strip()
|
||||||
|
name = data['name']
|
||||||
|
if not name:
|
||||||
|
name = "Untitled"
|
||||||
|
num = 1
|
||||||
|
while Text.objects.filter(name=name, user=self.user).exclude(id=self.id).count()>0:
|
||||||
|
num += 1
|
||||||
|
name = data['name'] + ' [%d]' % num
|
||||||
|
self.name = name
|
||||||
|
elif key == 'description':
|
||||||
|
self.description = ox.sanitize_html(data['description'])
|
||||||
|
elif key == 'text':
|
||||||
|
self.text = ox.sanitize_html(data['text'])
|
||||||
|
|
||||||
|
if 'position' in data:
|
||||||
|
pos, created = Position.objects.get_or_create(text=text, user=user)
|
||||||
|
pos.position = data['position']
|
||||||
|
pos.section = 'featured'
|
||||||
|
if self.status == 'private':
|
||||||
|
pos.section = 'personal'
|
||||||
|
pos.save()
|
||||||
|
if 'type' in data:
|
||||||
|
self.type = data['type'] == 'pdf' and 'pdf' or 'html'
|
||||||
|
if 'posterFrames' in data:
|
||||||
|
self.poster_frames = tuple(data['posterFrames'])
|
||||||
|
self.update_icon()
|
||||||
|
self.save()
|
||||||
|
|
||||||
def json(self, keys=None, user=None):
|
def json(self, keys=None, user=None):
|
||||||
if not keys:
|
if not keys:
|
||||||
keys=['id', 'name', 'user', 'status', 'subscribed', 'posterFrames', 'description', 'text', 'type', 'links']
|
keys=['id', 'name', 'user', 'status', 'subscribed', 'posterFrames', 'description', 'text', 'type', 'links']
|
||||||
|
|
|
@ -39,7 +39,7 @@ def addText(request):
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
data = json.loads(request.POST['data'])
|
data = json.loads(request.POST['data'])
|
||||||
data['name'] = re.sub(' \[\d+\]$', '', data['name']).strip()
|
data['name'] = re.sub(' \[\d+\]$', '', data.get('name', 'Untitled')).strip()
|
||||||
name = data['name']
|
name = data['name']
|
||||||
if not name:
|
if not name:
|
||||||
name = "Untitled"
|
name = "Untitled"
|
||||||
|
@ -51,6 +51,10 @@ def addText(request):
|
||||||
name = data['name'] + ' [%d]' % num
|
name = data['name'] + ' [%d]' % num
|
||||||
text.save()
|
text.save()
|
||||||
|
|
||||||
|
del data['name']
|
||||||
|
if data:
|
||||||
|
text.edit(data, request.user)
|
||||||
|
|
||||||
if text.status == 'featured':
|
if text.status == 'featured':
|
||||||
pos, created = models.Position.objects.get_or_create(text=text,
|
pos, created = models.Position.objects.get_or_create(text=text,
|
||||||
user=request.user, section='featured')
|
user=request.user, section='featured')
|
||||||
|
@ -132,78 +136,7 @@ def editText(request):
|
||||||
else:
|
else:
|
||||||
text = qs[0]
|
text = qs[0]
|
||||||
if text.editable(request.user):
|
if text.editable(request.user):
|
||||||
for key in data:
|
text.edit(data, request.user)
|
||||||
if key == 'status':
|
|
||||||
value = data[key]
|
|
||||||
if value not in text._status:
|
|
||||||
value = text._status[0]
|
|
||||||
if value == 'private':
|
|
||||||
for user in text.subscribed_users.all():
|
|
||||||
text.subscribed_users.remove(user)
|
|
||||||
qs = models.Position.objects.filter(user=request.user,
|
|
||||||
section='section', text=text)
|
|
||||||
if qs.count() > 1:
|
|
||||||
pos = qs[0]
|
|
||||||
pos.section = 'personal'
|
|
||||||
pos.save()
|
|
||||||
elif value == 'featured':
|
|
||||||
if request.user.get_profile().capability('canEditFeaturedTexts'):
|
|
||||||
pos, created = models.Position.objects.get_or_create(text=text, user=request.user,
|
|
||||||
section='featured')
|
|
||||||
if created:
|
|
||||||
qs = models.Position.objects.filter(user=request.user, section='featured')
|
|
||||||
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
|
||||||
pos.save()
|
|
||||||
models.Position.objects.filter(text=text).exclude(id=pos.id).delete()
|
|
||||||
else:
|
|
||||||
value = text.status
|
|
||||||
elif text.status == 'featured' and value == 'public':
|
|
||||||
models.Position.objects.filter(text=text).delete()
|
|
||||||
pos, created = models.Position.objects.get_or_create(text=text,
|
|
||||||
user=text.user,section='personal')
|
|
||||||
qs = models.Position.objects.filter(user=text.user,
|
|
||||||
section='personal')
|
|
||||||
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
|
||||||
pos.save()
|
|
||||||
for u in text.subscribed_users.all():
|
|
||||||
pos, created = models.Position.objects.get_or_create(text=text, user=u,
|
|
||||||
section='public')
|
|
||||||
qs = models.Position.objects.filter(user=u, section='public')
|
|
||||||
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
|
||||||
pos.save()
|
|
||||||
|
|
||||||
text.status = value
|
|
||||||
elif key == 'name':
|
|
||||||
data['name'] = re.sub(' \[\d+\]$', '', data['name']).strip()
|
|
||||||
name = data['name']
|
|
||||||
if not name:
|
|
||||||
name = "Untitled"
|
|
||||||
num = 1
|
|
||||||
while models.Text.objects.filter(name=name, user=text.user).exclude(id=text.id).count()>0:
|
|
||||||
num += 1
|
|
||||||
name = data['name'] + ' [%d]' % num
|
|
||||||
text.name = name
|
|
||||||
elif key == 'description':
|
|
||||||
text.description = ox.sanitize_html(data['description'])
|
|
||||||
elif key == 'text':
|
|
||||||
text.text = ox.sanitize_html(data['text'])
|
|
||||||
|
|
||||||
if 'position' in data:
|
|
||||||
pos, created = models.Position.objects.get_or_create(text=text, user=request.user)
|
|
||||||
pos.position = data['position']
|
|
||||||
pos.section = 'featured'
|
|
||||||
if text.status == 'private':
|
|
||||||
pos.section = 'personal'
|
|
||||||
pos.save()
|
|
||||||
if 'type' in data:
|
|
||||||
if data['type'] == 'pdf':
|
|
||||||
text.type = 'pdf'
|
|
||||||
else:
|
|
||||||
text.type = 'html'
|
|
||||||
if 'posterFrames' in data:
|
|
||||||
text.poster_frames = tuple(data['posterFrames'])
|
|
||||||
text.update_icon()
|
|
||||||
text.save()
|
|
||||||
response['data'] = text.json(user=request.user)
|
response['data'] = text.json(user=request.user)
|
||||||
else:
|
else:
|
||||||
response = json_response(status=403, text='permission denied')
|
response = json_response(status=403, text='permission denied')
|
||||||
|
|
|
@ -82,35 +82,39 @@ pandora.ui.folders = function() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
} else {
|
} else if(ui.section == 'texts') {
|
||||||
extras = [
|
extras = [
|
||||||
pandora.$ui.personalListsMenu = Ox.MenuButton({
|
pandora.$ui.personalListsMenu = Ox.MenuButton({
|
||||||
items: [
|
items: [
|
||||||
{ id: 'new' + folderItem.toLowerCase(), title: 'New ' + folderItem },
|
{ id: 'newtext', title: 'New Text' },
|
||||||
|
{ id: 'newpdf', title: 'New PDF' },
|
||||||
{},
|
{},
|
||||||
{ id: 'delete' + folderItem.toLowerCase(), title: 'Delete Selected ' + folderItem + '...', disabled: !ui[ui.section.slice(0,-1)] }
|
{ id: 'deletetext', title: 'Delete Selected Text...', disabled: !ui.text }
|
||||||
],
|
],
|
||||||
title: 'edit',
|
title: 'edit',
|
||||||
tooltip: 'Manage Personal ' + folderItems,
|
tooltip: 'Manage Personal Texts',
|
||||||
type: 'image'
|
type: 'image'
|
||||||
})
|
})
|
||||||
.bindEvent({
|
.bindEvent({
|
||||||
click: function(data) {
|
click: function(data) {
|
||||||
var $list = pandora.$ui.folderList[folder.id];
|
var $list = pandora.$ui.folderList[folder.id];
|
||||||
// fixme: duplicated
|
if (data.id == 'newtext') {
|
||||||
if (data.id == 'new' + folderItem.toLowerCase()) {
|
pandora.addText({type: 'text'});
|
||||||
pandora['add' + folderItem]();
|
} else if (data.id == 'newpdf') {
|
||||||
} else if (data.id == 'delete' + folderItem.toLowerCase()) {
|
pandora.addText({type: 'pdf'});
|
||||||
|
} else if (data.id == 'deletetext') {
|
||||||
pandora.ui.deleteListDialog().open();
|
pandora.ui.deleteListDialog().open();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.bindEvent('pandora_' + ui.section.slice(0,-1), function(data) {
|
.bindEvent('pandora_text', function(data) {
|
||||||
pandora.$ui.personalListsMenu[
|
pandora.$ui.personalListsMenu[
|
||||||
data.value && data.value.length ? 'enableItem' : 'disableItem'
|
data.value && data.value.length ? 'enableItem' : 'disableItem'
|
||||||
]('delete' + folderItem.toLowerCase());
|
]('deletetext');
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
} else {
|
||||||
|
extras = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (folder.id == 'favorite') {
|
} else if (folder.id == 'favorite') {
|
||||||
|
|
|
@ -147,9 +147,10 @@ pandora.addList = function() {
|
||||||
}).reloadList();
|
}).reloadList();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
pandora.addText = function() {
|
pandora.addText = function(options) {
|
||||||
var $folderList = pandora.$ui.folderList.personal;
|
var $folderList = pandora.$ui.folderList.personal;
|
||||||
pandora.api.addText({name: 'Untitled'}, function(result) {
|
options = options || {};
|
||||||
|
pandora.api.addText(options, function(result) {
|
||||||
reloadFolder(result.data.id);
|
reloadFolder(result.data.id);
|
||||||
});
|
});
|
||||||
function reloadFolder(newId) {
|
function reloadFolder(newId) {
|
||||||
|
|
Loading…
Reference in a new issue