Mercurial > p > roundup > code
annotate roundup/template_funcs.py @ 934:fdcf16b444a9
Use a real parser for templates.
Rewrite htmltemplate to use the parser (hack, hack).
Move the "do_XXX" methods to template_funcs.py.
Redo the funcion tests (but not Template tests - they're hopeless).
Simplified query form in cgi_client.
Ability to delete msgs, files, queries.
Ability to edit the metadata on files.
| author | Gordon B. McMillan <gmcm@users.sourceforge.net> |
|---|---|
| date | Tue, 13 Aug 2002 20:16:10 +0000 |
| parents | |
| children | 57d09949380e |
| rev | line source |
|---|---|
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
1 import hyperdb, date, password |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
2 from i18n import _ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
3 import htmltemplate |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
4 import cgi, os, StringIO, urllib, types |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
5 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
6 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
7 def do_plain(client, classname, cl, props, nodeid, filterspec, property, escape=0, lookup=1): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
8 ''' display a String property directly; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
9 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
10 display a Date property in a specified time zone with an option to |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
11 omit the time from the date stamp; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
12 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
13 for a Link or Multilink property, display the key strings of the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
14 linked nodes (or the ids if the linked class has no key property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
15 when the lookup argument is true, otherwise just return the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
16 linked ids |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
17 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
18 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
19 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
20 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
21 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
23 if isinstance(propclass, hyperdb.Password): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
24 value = _('*encrypted*') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
25 elif isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
26 value = value and "Yes" or "No" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
27 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
28 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
29 if lookup: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
30 linkcl = client.db.classes[propclass.classname] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
31 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
32 value = linkcl.get(value, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
33 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
34 value = _('[unselected]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
35 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
36 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
37 if lookup: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
38 linkcl = client.db.classes[propclass.classname] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
39 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
40 labels = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
41 for v in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
42 labels.append(linkcl.get(v, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
43 value = ', '.join(labels) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
44 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
45 value = ', '.join(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
46 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
47 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
48 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
49 value = str(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
50 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
51 if escape: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
52 value = cgi.escape(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
53 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
55 def do_stext(client, classname, cl, props, nodeid, filterspec, property, escape=0): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
56 '''Render as structured text using the StructuredText module |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
57 (see above for details) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
58 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
59 s = do_plain(client, classname, cl, props, nodeid, filterspec, property, escape=escape) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
60 if not StructuredText: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
61 return s |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
62 return StructuredText(s,level=1,header=0) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
64 def determine_value(cl, props, nodeid, filterspec, property): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
65 '''determine the value of a property using the node, form or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
66 filterspec |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
67 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
68 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
69 value = cl.get(nodeid, property, None) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
70 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
71 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
72 return [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
73 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
74 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
75 elif filterspec is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
76 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
77 return filterspec.get(property, []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
78 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
79 return filterspec.get(property, '') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
80 # TODO: pull the value from the form |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
81 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
82 return [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
83 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
84 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
85 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
86 def make_sort_function(client, filterspec, classname): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
87 '''Make a sort function for a given class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
88 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
89 linkcl = client.db.getclass(classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
90 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
91 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
92 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
93 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
94 def sortfunc(a, b, linkcl=linkcl, sort_on=sort_on): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
95 return cmp(linkcl.get(a, sort_on), linkcl.get(b, sort_on)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
96 return sortfunc |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
98 def do_field(client, classname, cl, props, nodeid, filterspec, property, size=None, showid=0): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
99 ''' display a property like the plain displayer, but in a text field |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
100 to be edited |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
101 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
102 Note: if you would prefer an option list style display for |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
103 link or multilink editing, use menu(). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
104 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
105 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
106 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
107 if size is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
108 size = 30 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
110 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
111 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
112 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
113 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
114 # now display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
115 if (isinstance(propclass, hyperdb.String) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
116 isinstance(propclass, hyperdb.Date) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
117 isinstance(propclass, hyperdb.Interval)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
118 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
119 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
120 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
121 value = cgi.escape(str(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
122 value = '"'.join(value.split('"')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
123 s = '<input name="%s" value="%s" size="%s">'%(property, value, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
124 elif isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
125 checked = value and "checked" or "" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
126 s = '<input type="radio" name="%s" value="yes" %s>Yes'%(property, checked) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
127 if checked: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
128 checked = "" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
129 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
130 checked = "checked" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
131 s += '<input type="radio" name="%s" value="no" %s>No'%(property, checked) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
132 elif isinstance(propclass, hyperdb.Number): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
133 s = '<input name="%s" value="%s" size="%s">'%(property, value, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
134 elif isinstance(propclass, hyperdb.Password): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
135 s = '<input type="password" name="%s" size="%s">'%(property, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
136 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
137 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
138 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
139 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
140 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
141 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
142 options = linkcl.filter(None, {}, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
143 # TODO: make this a field display, not a menu one! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
144 l = ['<select name="%s">'%property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
145 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
146 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
147 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
148 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
149 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
150 l.append(_('<option %svalue="-1">- no selection -</option>')%s) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
151 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
152 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
153 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
154 if optionid == value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
155 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
156 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
157 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
158 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
159 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
160 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
161 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
162 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
163 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
164 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
165 s = '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
166 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
167 sortfunc = make_sort_function(client, filterspec, propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
168 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
169 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
170 value.sort(sortfunc) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
171 # map the id to the label property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
172 if not showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
173 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
174 value = [linkcl.get(v, k) for v in value] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
175 value = cgi.escape(','.join(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
176 s = '<input name="%s" size="%s" value="%s">'%(property, size, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
177 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
178 s = _('Plain: bad propclass "%(propclass)s"')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
179 return s |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
180 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
181 def do_multiline(client, classname, cl, props, nodeid, filterspec, property, rows=5, cols=40): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
182 ''' display a string property in a multiline text edit field |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
183 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
184 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
185 return _('[Multiline: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
186 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
187 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
188 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
189 # make sure this is a link property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
190 if not isinstance(propclass, hyperdb.String): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
191 return _('[Multiline: not a string]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
192 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
193 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
194 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
195 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
196 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
197 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
198 # display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
199 return '<textarea name="%s" rows="%s" cols="%s">%s</textarea>'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
200 property, rows, cols, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
201 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
202 def do_menu(client, classname, cl, props, nodeid, filterspec, property, size=None, height=None, showid=0, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
203 additional=[], **conditions): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
204 ''' For a Link/Multilink property, display a menu of the available |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
205 choices |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
206 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
207 If the additional properties are specified, they will be |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
208 included in the text of each option in (brackets, with, commas). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
209 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
210 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
211 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
212 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
213 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
214 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
215 # make sure this is a link property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
216 if not (isinstance(propclass, hyperdb.Link) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
217 isinstance(propclass, hyperdb.Multilink)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
218 return _('[Menu: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
219 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
220 # sort function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
221 sortfunc = make_sort_function(client, filterspec, propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
222 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
223 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
224 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
225 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
226 # display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
227 if isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
228 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
229 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
230 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
231 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
232 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
233 options = linkcl.filter(None, conditions, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
234 height = height or min(len(options), 7) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
235 l = ['<select multiple name="%s" size="%s">'%(property, height)] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
236 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
237 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
238 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
239 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
240 if optionid in value or option in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
241 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
242 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
243 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
244 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
245 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
246 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
247 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
248 if additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
249 m = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
250 for propname in additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
251 m.append(linkcl.get(optionid, propname)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
252 lab = lab + ' (%s)'%', '.join(m) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
253 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
254 l.append('<option %svalue="%s">%s</option>'%(s, optionid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
255 lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
256 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
257 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
258 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
259 # force the value to be a single choice |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
260 if type(value) is types.ListType: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
261 value = value[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
262 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
263 l = ['<select name="%s">'%property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
264 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
265 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
266 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
267 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
268 l.append(_('<option %svalue="-1">- no selection -</option>')%s) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
269 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
270 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
271 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
272 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
273 options = linkcl.filter(None, conditions, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
274 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
275 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
276 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
277 if value in [optionid, option]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
278 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
279 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
280 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
281 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
282 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
283 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
284 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
285 if additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
286 m = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
287 for propname in additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
288 m.append(linkcl.get(optionid, propname)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
289 lab = lab + ' (%s)'%', '.join(map(str, m)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
290 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
291 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
292 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
293 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
294 return _('[Menu: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
295 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
296 #XXX deviates from spec |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
297 def do_link(client, classname, cl, props, nodeid, filterspec, property=None, is_download=0, showid=0): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
298 '''For a Link or Multilink property, display the names of the linked |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
299 nodes, hyperlinked to the item views on those nodes. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
300 For other properties, link to this node with the property as the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
301 text. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
302 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
303 If is_download is true, append the property value to the generated |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
304 URL so that the link may be used as a download link and the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
305 downloaded file name is correct. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
306 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
307 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
308 return _('[Link: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
309 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
310 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
311 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
312 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
313 if isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
314 value = value and "Yes" or "No" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
315 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
316 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
317 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
318 linkname = propclass.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
319 linkcl = client.db.getclass(linkname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
320 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
321 linkvalue = cgi.escape(str(linkcl.get(value, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
322 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
323 label = value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
324 title = ' title="%s"'%linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
325 # note ... this should be urllib.quote(linkcl.get(value, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
326 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
327 label = linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
328 title = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
329 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
330 return '<a href="%s%s/%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
331 linkvalue, title, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
332 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
333 return '<a href="%s%s"%s>%s</a>'%(linkname, value, title, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
334 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
335 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
336 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
337 linkname = propclass.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
338 linkcl = client.db.getclass(linkname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
339 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
340 l = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
341 for value in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
342 linkvalue = cgi.escape(str(linkcl.get(value, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
343 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
344 label = value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
345 title = ' title="%s"'%linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
346 # note ... this should be urllib.quote(linkcl.get(value, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
347 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
348 label = linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
349 title = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
350 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
351 l.append('<a href="%s%s/%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
352 linkvalue, title, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
353 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
354 l.append('<a href="%s%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
355 title, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
356 return ', '.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
357 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
358 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
359 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
360 return '<a href="%s%s/%s">%s</a>'%(classname, nodeid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
361 value, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
362 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
363 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
364 value = _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
365 return '<a href="%s%s">%s</a>'%(classname, nodeid, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
366 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
367 def do_count(client, classname, cl, props, nodeid, filterspec, property, **args): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
368 ''' for a Multilink property, display a count of the number of links in |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
369 the list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
370 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
371 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
372 return _('[Count: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
373 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
374 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
375 if not isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
376 return _('[Count: not a Multilink]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
377 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
378 # figure the length then... |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
379 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
380 return str(len(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
381 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
382 # XXX pretty is definitely new ;) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
383 def do_reldate(client, classname, cl, props, nodeid, filterspec, property, pretty=0): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
384 ''' display a Date property in terms of an interval relative to the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
385 current date (e.g. "+ 3w", "- 2d"). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
386 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
387 with the 'pretty' flag, make it pretty |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
388 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
389 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
390 return _('[Reldate: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
391 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
392 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
393 if not isinstance(propclass, hyperdb.Date): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
394 return _('[Reldate: not a Date]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
395 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
396 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
397 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
398 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
399 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
400 if not value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
401 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
402 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
403 # figure the interval |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
404 interval = date.Date('.') - value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
405 if pretty: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
406 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
407 return _('now') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
408 return interval.pretty() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
409 return str(interval) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
410 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
411 def do_download(client, classname, cl, props, nodeid, filterspec, property, **args): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
412 ''' show a Link("file") or Multilink("file") property using links that |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
413 allow you to download files |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
414 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
415 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
416 return _('[Download: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
417 return do_link(client, classname, cl, props, nodeid, filterspec, property, is_download=1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
418 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
419 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
420 def do_checklist(client, classname, cl, props, nodeid, filterspec, property, sortby=None): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
421 ''' for a Link or Multilink property, display checkboxes for the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
422 available choices to permit filtering |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
423 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
424 sort the checklist by the argument (+/- property name) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
425 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
426 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
427 if (not isinstance(propclass, hyperdb.Link) and not |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
428 isinstance(propclass, hyperdb.Multilink)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
429 return _('[Checklist: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
430 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
431 # get our current checkbox state |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
432 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
433 # get the info from the node - make sure it's a list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
434 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
435 value = [cl.get(nodeid, property)] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
436 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
437 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
438 elif filterspec is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
439 # get the state from the filter specification (always a list) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
440 value = filterspec.get(property, []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
441 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
442 # it's a new node, so there's no state |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
443 value = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
444 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
445 # so we can map to the linked node's "lable" property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
446 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
447 l = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
448 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
449 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
450 # build list of options and then sort it, either |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
451 # by id + label or <sortby>-value + label; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
452 # a minus reverses the sort order, while + or no |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
453 # prefix sort in increasing order |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
454 reversed = 0 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
455 if sortby: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
456 if sortby[0] == '-': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
457 reversed = 1 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
458 sortby = sortby[1:] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
459 elif sortby[0] == '+': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
460 sortby = sortby[1:] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
461 options = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
462 for optionid in linkcl.list(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
463 if sortby: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
464 sortval = linkcl.get(optionid, sortby) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
465 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
466 sortval = int(optionid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
467 option = cgi.escape(str(linkcl.get(optionid, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
468 options.append((sortval, option, optionid)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
469 options.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
470 if reversed: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
471 options.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
472 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
473 # build checkboxes |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
474 for sortval, option, optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
475 if optionid in value or option in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
476 checked = 'checked' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
477 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
478 checked = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
479 l.append('%s:<input type="checkbox" %s name="%s" value="%s">'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
480 option, checked, property, option)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
481 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
482 # for Links, allow the "unselected" option too |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
483 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
484 if value is None or '-1' in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
485 checked = 'checked' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
486 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
487 checked = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
488 l.append(_('[unselected]:<input type="checkbox" %s name="%s" ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
489 'value="-1">')%(checked, property)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
490 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
491 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
492 def do_note(client, classname, cl, props, nodeid, filterspec, rows=5, cols=80): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
493 ''' display a "note" field, which is a text area for entering a note to |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
494 go along with a change. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
495 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
496 # TODO: pull the value from the form |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
497 return '<textarea name="__note" wrap="hard" rows=%s cols=%s>'\ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
498 '</textarea>'%(rows, cols) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
499 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
500 # XXX new function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
501 def do_list(client, classname, cl, props, nodeid, filterspec, property, reverse=0, xtracols=None): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
502 ''' list the items specified by property using the standard index for |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
503 the class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
504 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
505 propcl = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
506 if not isinstance(propcl, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
507 return _('[List: not a Multilink]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
508 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
509 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
510 if not value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
511 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
512 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
513 # sort, possibly revers and then re-stringify |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
514 value = map(int, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
515 value.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
516 if reverse: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
517 value.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
518 value = map(str, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
519 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
520 # render the sub-index into a string |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
521 fp = StringIO.StringIO() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
522 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
523 write_save = client.write |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
524 client.write = fp.write |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
525 client.listcontext = ('%s%s' % (classname, nodeid), property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
526 index = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES, propcl.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
527 index.render(nodeids=value, show_display_form=0, xtracols=xtracols) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
528 finally: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
529 client.listcontext = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
530 client.write = write_save |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
531 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
532 return fp.getvalue() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
533 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
534 # XXX new function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
535 def do_history(client, classname, cl, props, nodeid, filterspec, direction='descending'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
536 ''' list the history of the item |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
537 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
538 If "direction" is 'descending' then the most recent event will |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
539 be displayed first. If it is 'ascending' then the oldest event |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
540 will be displayed first. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
541 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
542 if nodeid is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
543 return _("[History: node doesn't exist]") |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
544 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
545 l = ['<table width=100% border=0 cellspacing=0 cellpadding=2>', |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
546 '<tr class="list-header">', |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
547 _('<th align=left><span class="list-item">Date</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
548 _('<th align=left><span class="list-item">User</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
549 _('<th align=left><span class="list-item">Action</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
550 _('<th align=left><span class="list-item">Args</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
551 '</tr>'] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
552 comments = {} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
553 history = cl.history(nodeid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
554 history.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
555 if direction == 'descending': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
556 history.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
557 for id, evt_date, user, action, args in history: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
558 date_s = str(evt_date).replace("."," ") |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
559 arg_s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
560 if action == 'link' and type(args) == type(()): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
561 if len(args) == 3: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
562 linkcl, linkid, key = args |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
563 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
564 linkcl, linkid, key) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
565 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
566 arg_s = str(args) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
567 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
568 elif action == 'unlink' and type(args) == type(()): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
569 if len(args) == 3: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
570 linkcl, linkid, key = args |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
571 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
572 linkcl, linkid, key) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
573 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
574 arg_s = str(args) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
575 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
576 elif type(args) == type({}): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
577 cell = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
578 for k in args.keys(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
579 # try to get the relevant property and treat it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
580 # specially |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
581 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
582 prop = props[k] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
583 except: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
584 prop = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
585 if prop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
586 if args[k] and (isinstance(prop, hyperdb.Multilink) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
587 isinstance(prop, hyperdb.Link)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
588 # figure what the link class is |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
589 classname = prop.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
590 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
591 linkcl = client.db.getclass(classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
592 except KeyError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
593 labelprop = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
594 comments[classname] = _('''The linked class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
595 %(classname)s no longer exists''')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
596 labelprop = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
597 hrefable = os.path.exists( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
598 os.path.join(client.instance.TEMPLATES, classname+'.item')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
599 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
600 if isinstance(prop, hyperdb.Multilink) and \ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
601 len(args[k]) > 0: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
602 ml = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
603 for linkid in args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
604 label = classname + linkid |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
605 # if we have a label property, try to use it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
606 # TODO: test for node existence even when |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
607 # there's no labelprop! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
608 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
609 if labelprop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
610 label = linkcl.get(linkid, labelprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
611 except IndexError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
612 comments['no_link'] = _('''<strike>The |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
613 linked node no longer |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
614 exists</strike>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
615 ml.append('<strike>%s</strike>'%label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
616 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
617 if hrefable: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
618 ml.append('<a href="%s%s">%s</a>'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
619 classname, linkid, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
620 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
621 ml.append(label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
622 cell.append('%s:\n %s'%(k, ',\n '.join(ml))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
623 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
624 label = classname + args[k] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
625 # if we have a label property, try to use it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
626 # TODO: test for node existence even when |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
627 # there's no labelprop! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
628 if labelprop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
629 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
630 label = linkcl.get(args[k], labelprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
631 except IndexError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
632 comments['no_link'] = _('''<strike>The |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
633 linked node no longer |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
634 exists</strike>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
635 cell.append(' <strike>%s</strike>,\n'%label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
636 # "flag" this is done .... euwww |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
637 label = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
638 if label is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
639 if hrefable: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
640 cell.append('%s: <a href="%s%s">%s</a>\n'%(k, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
641 classname, args[k], label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
642 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
643 cell.append('%s: %s' % (k,label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
644 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
645 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
646 d = date.Date(args[k]) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
647 cell.append('%s: %s'%(k, str(d))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
648 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
649 elif isinstance(prop, hyperdb.Interval) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
650 d = date.Interval(args[k]) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
651 cell.append('%s: %s'%(k, str(d))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
652 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
653 elif isinstance(prop, hyperdb.String) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
654 cell.append('%s: %s'%(k, cgi.escape(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
655 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
656 elif not args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
657 cell.append('%s: (no value)\n'%k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
658 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
659 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
660 cell.append('%s: %s\n'%(k, str(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
661 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
662 # property no longer exists |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
663 comments['no_exist'] = _('''<em>The indicated property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
664 no longer exists</em>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
665 cell.append('<em>%s: %s</em>\n'%(k, str(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
666 arg_s = '<br />'.join(cell) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
667 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
668 # unkown event!! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
669 comments['unknown'] = _('''<strong><em>This event is not |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
670 handled by the history display!</em></strong>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
671 arg_s = '<strong><em>' + str(args) + '</em></strong>' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
672 date_s = date_s.replace(' ', ' ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
673 l.append('<tr><td nowrap valign=top>%s</td><td valign=top>%s</td>' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
674 '<td valign=top>%s</td><td valign=top>%s</td></tr>'%(date_s, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
675 user, action, arg_s)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
676 if comments: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
677 l.append(_('<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
678 for entry in comments.values(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
679 l.append('<tr><td colspan=4>%s</td></tr>'%entry) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
680 l.append('</table>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
681 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
682 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
683 # XXX new function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
684 def do_submit(client, classname, cl, props, nodeid, filterspec, value=None): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
685 ''' add a submit button for the item |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
686 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
687 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
688 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
689 value = "Submit Changes" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
690 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
691 value = "Submit New Entry" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
692 if nodeid or client.form is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
693 return _('<input type="submit" name="submit" value="%s">' % value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
694 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
695 return _('[Submit: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
696 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
697 def do_classhelp(client, classname, cl, props, nodeid, filterspec, clname, properties, label='?', width='400', |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
698 height='400'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
699 '''pop up a javascript window with class help |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
700 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
701 This generates a link to a popup window which displays the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
702 properties indicated by "properties" of the class named by |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
703 "classname". The "properties" should be a comma-separated list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
704 (eg. 'id,name,description'). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
705 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
706 You may optionally override the label displayed, the width and |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
707 height. The popup window will be resizable and scrollable. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
708 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
709 return '<a href="javascript:help_window(\'classhelp?classname=%s&' \ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
710 'properties=%s\', \'%s\', \'%s\')"><b>(%s)</b></a>'%(clname, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
711 properties, width, height, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
712 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
713 def do_email(client, classname, cl, props, nodeid, filterspec, property, escape=0): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
714 '''display the property as one or more "fudged" email addrs |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
715 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
716 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
717 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
718 return _('[Email: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
719 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
720 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
721 # get the value for this property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
722 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
723 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
724 except KeyError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
725 # a KeyError here means that the node doesn't have a value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
726 # for the specified property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
727 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
728 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
729 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
730 if isinstance(propclass, hyperdb.String): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
731 if value is None: value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
732 else: value = str(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
733 value = value.replace('@', ' at ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
734 value = value.replace('.', ' ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
735 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
736 value = _('[Email: not a string]')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
737 if escape: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
738 value = cgi.escape(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
739 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
740 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
741 def do_filterspec(client, classname, cl, props, nodeid, filterspec, classprop, urlprop): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
742 qs = cl.get(nodeid, urlprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
743 classname = cl.get(nodeid, classprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
744 filterspec = {} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
745 query = cgi.parse_qs(qs) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
746 for k,v in query.items(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
747 query[k] = v[0].split(',') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
748 pagesize = query.get(':pagesize',['25'])[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
749 search_text = query.get('search_text', [''])[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
750 search_text = urllib.unquote(search_text) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
751 for k,v in query.items(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
752 if k[0] != ':': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
753 filterspec[k] = v |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
754 ixtmplt = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES, classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
755 qform = '<form onSubmit="return submit_once()" action="%s%s">\n'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
756 classname,nodeid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
757 qform += ixtmplt.filter_form(search_text, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
758 query.get(':filter', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
759 query.get(':columns', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
760 query.get(':group', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
761 [], |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
762 query.get(':sort',[]), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
763 filterspec, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
764 pagesize) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
765 return qform + '</table>\n' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
766 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
767 def do_href(client, classname, cl, props, nodeid, filterspec, property, prefix='', suffix='', label=''): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
768 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
769 return '<a href="%s%s%s">%s</a>' % (prefix, value, suffix, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
770 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
771 def do_remove(client, classname, cl, props, nodeid, filterspec): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
772 ''' put a remove href for an item in a list ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
773 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
774 return _('[Remove not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
775 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
776 parentdesignator, mlprop = client.listcontext |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
777 except (AttributeError, TypeError): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
778 return _('[Remove not called form listing of multilink]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
779 return '<a href="remove?:target=%s%s&:multilink=%s:%s">[Remove]</a>' % (classname, nodeid, parentdesignator, mlprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
780 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
781 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
782 |
