mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
1) Make hierarchies display as complete tags in user categories.
2) Add a sublist template function for slicing names apart.
This commit is contained in:
parent
bfc53cd031
commit
f946570332
@ -516,7 +516,13 @@ class TagTreeItem(object): # {{{
|
||||
name = tag.sort
|
||||
tt_author = True
|
||||
else:
|
||||
name = tag.name
|
||||
p = self
|
||||
while p.parent.type != self.ROOT:
|
||||
p = p.parent
|
||||
if p.category_key.startswith('@'):
|
||||
name = getattr(tag, 'original_name', tag.name)
|
||||
else:
|
||||
name = tag.name
|
||||
tt_author = False
|
||||
if role == Qt.DisplayRole:
|
||||
if tag.count == 0:
|
||||
@ -903,18 +909,19 @@ class TagsModel(QAbstractItemModel): # {{{
|
||||
node_parent = category
|
||||
|
||||
components = [t for t in tag.name.split('.')]
|
||||
if key in ['authors', 'publisher', 'title'] or len(components) == 1:
|
||||
if key in ['authors', 'publisher', 'title'] or len(components) == 1 or \
|
||||
self.db.field_metadata[key]['kind'] == 'user':
|
||||
self.beginInsertRows(category_index, 999999, 1)
|
||||
TagTreeItem(parent=node_parent, data=tag, tooltip=tt,
|
||||
icon_map=self.icon_state_map)
|
||||
self.endInsertRows()
|
||||
else:
|
||||
print components
|
||||
for i,comp in enumerate(components):
|
||||
children = dict([(t.tag.name, t) for t in node_parent.children
|
||||
child_map = dict([(t.tag.name, t) for t in node_parent.children
|
||||
if t.type != TagTreeItem.CATEGORY])
|
||||
if comp in children:
|
||||
node_parent = children[comp]
|
||||
if comp in child_map:
|
||||
node_parent = child_map[comp]
|
||||
node_parent.tag.count += tag.count
|
||||
else:
|
||||
if i < len(components)-1:
|
||||
t = copy.copy(tag)
|
||||
@ -934,14 +941,14 @@ class TagsModel(QAbstractItemModel): # {{{
|
||||
|
||||
for category in self.category_nodes:
|
||||
if len(category.children) > 0:
|
||||
children = category.children
|
||||
child_map = category.children
|
||||
states = [c.tag.state for c in category.child_tags()]
|
||||
names = [(c.tag.name, c.tag.category) for c in category.child_tags()]
|
||||
state_map = dict(izip(names, states))
|
||||
ctags = [c for c in children if c.type == TagTreeItem.CATEGORY]
|
||||
ctags = [c for c in child_map if c.type == TagTreeItem.CATEGORY]
|
||||
start = len(ctags)
|
||||
self.beginRemoveRows(self.createIndex(category.row(), 0, category),
|
||||
start, len(children)-1)
|
||||
start, len(child_map)-1)
|
||||
category.children = ctags
|
||||
self.endRemoveRows()
|
||||
else:
|
||||
|
@ -396,6 +396,34 @@ class BuiltinListitem(BuiltinFormatterFunction):
|
||||
except:
|
||||
return ''
|
||||
|
||||
class BuiltinSublist(BuiltinFormatterFunction):
|
||||
name = 'sublist'
|
||||
arg_count = 4
|
||||
doc = _('sublist(val, start_index, end_index, separator) -- interpret the '
|
||||
' value as a list of items separated by `separator`, returning a '
|
||||
' new list made from the `start_index`th to the `end_index`th item. '
|
||||
'The first item is number zero. If an index is negative, then it '
|
||||
'counts from the end of the list. As a special case, an end_index '
|
||||
'of zero is assumed to be the length of the list. Examples using '
|
||||
'basic template mode and assuming a #genre value if A.B.C: '
|
||||
'{#genre:sublist(-1,0,.)} returns C<br/>'
|
||||
'{#genre:sublist(0,1,.)} returns A<br/>'
|
||||
'{#genre:sublist(0,-1,.)} returns A.B')
|
||||
|
||||
def evaluate(self, formatter, kwargs, mi, locals, val, start_index, end_index, sep):
|
||||
if not val:
|
||||
return ''
|
||||
si = int(start_index)
|
||||
ei = int(end_index)
|
||||
val = val.split(sep)
|
||||
try:
|
||||
if ei == 0:
|
||||
return sep.join(val[si:])
|
||||
else:
|
||||
return sep.join(val[si:ei])
|
||||
except:
|
||||
return ''
|
||||
|
||||
class BuiltinUppercase(BuiltinFormatterFunction):
|
||||
name = 'uppercase'
|
||||
arg_count = 1
|
||||
@ -447,6 +475,7 @@ builtin_re = BuiltinRe()
|
||||
builtin_shorten = BuiltinShorten()
|
||||
builtin_strcat = BuiltinStrcat()
|
||||
builtin_strcmp = BuiltinStrcmp()
|
||||
builtin_sublist = BuiltinSublist()
|
||||
builtin_substr = BuiltinSubstr()
|
||||
builtin_subtract = BuiltinSubtract()
|
||||
builtin_switch = BuiltinSwitch()
|
||||
|
Loading…
x
Reference in New Issue
Block a user