slitaz-forge rev 407
clean-up bugs/ since we use tazbug
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Wed Jan 15 01:07:33 2014 +0100 (2014-01-15) |
parents | af96ec987375 |
children | 5ce9a098b1a0 |
files | bugs/README bugs/roundup.wsgi bugs/server.ini bugs/templates/slitaz/TEMPLATE-INFO.txt bugs/templates/slitaz/detectors/messagesummary.py bugs/templates/slitaz/detectors/nosyreaction.py bugs/templates/slitaz/detectors/statusauditor.py bugs/templates/slitaz/detectors/userauditor.py bugs/templates/slitaz/extensions/README.txt bugs/templates/slitaz/html/_generic.404.html bugs/templates/slitaz/html/_generic.calendar.html bugs/templates/slitaz/html/_generic.collision.html bugs/templates/slitaz/html/_generic.help-empty.html bugs/templates/slitaz/html/_generic.help-list.html bugs/templates/slitaz/html/_generic.help-search.html bugs/templates/slitaz/html/_generic.help-submit.html bugs/templates/slitaz/html/_generic.help.html bugs/templates/slitaz/html/_generic.index.html bugs/templates/slitaz/html/_generic.item.html bugs/templates/slitaz/html/favicon.ico bugs/templates/slitaz/html/file.index.html bugs/templates/slitaz/html/file.item.html bugs/templates/slitaz/html/help.html bugs/templates/slitaz/html/help_controls.js bugs/templates/slitaz/html/home.classlist.html bugs/templates/slitaz/html/home.html bugs/templates/slitaz/html/issue.index.html bugs/templates/slitaz/html/issue.item.html bugs/templates/slitaz/html/issue.search.html bugs/templates/slitaz/html/keyword.item.html bugs/templates/slitaz/html/msg.index.html bugs/templates/slitaz/html/msg.item.html bugs/templates/slitaz/html/page.html bugs/templates/slitaz/html/query.edit.html bugs/templates/slitaz/html/query.item.html bugs/templates/slitaz/html/style.css bugs/templates/slitaz/html/user.forgotten.html bugs/templates/slitaz/html/user.help-search.html bugs/templates/slitaz/html/user.help.html bugs/templates/slitaz/html/user.index.html bugs/templates/slitaz/html/user.item.html bugs/templates/slitaz/html/user.register.html bugs/templates/slitaz/html/user.rego_progress.html bugs/templates/slitaz/html/user_utils.js bugs/templates/slitaz/initial_data.py bugs/templates/slitaz/schema.py |
line diff
1.1 --- a/bugs/README Wed Jan 15 01:04:10 2014 +0100 1.2 +++ b/bugs/README Wed Jan 15 01:07:33 2014 +0100 1.3 @@ -1,13 +1,4 @@ 1.4 1.5 1.6 -http://bugs.slitaz.org/ runs a Roundup tracker powered by roundup-server 1.7 --C server.ini and Lighttpd mod_proxy 1.8 - 1.9 - * templates/ : Contain the SliTaz template used to install and initialize 1.10 - the tracker. It also have the xHTML files and CSS style. 1.11 - * roundup.wsgi : Is the WSGI handler (buggy with Lighttpd) 1.12 - * server.ini : Is the config used be used with roundup-server 1.13 - 1.14 -The bugs tracker configuration file (config.ini) is not under Hg since 1.15 -it have MySQL db login information and SMTP password. 1.16 - 1.17 +Web interface http://bugs.slitaz.org/ runs tazbug web interface! 1.18 +See tazbug Mercurial repository for more information
2.1 --- a/bugs/roundup.wsgi Wed Jan 15 01:04:10 2014 +0100 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,11 +0,0 @@ 2.4 -#!/usr/bin/python 2.5 - 2.6 -from wsgiref.simple_server import make_server 2.7 - 2.8 -# obtain the WSGI request dispatcher 2.9 -from roundup.cgi.wsgi_handler import RequestDispatcher 2.10 -tracker_home = '/home/slitaz/bugs' 2.11 -app = RequestDispatcher(tracker_home) 2.12 - 2.13 -httpd = make_server('', 8917, app) 2.14 -httpd.serve_forever()
3.1 --- a/bugs/server.ini Wed Jan 15 01:04:10 2014 +0100 3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 3.3 @@ -1,88 +0,0 @@ 3.4 -# Roundup server configuration file 3.5 -# Autogenerated at Wed Apr 13 00:31:14 2011 3.6 - 3.7 -[main] 3.8 - 3.9 -# Host name of the Roundup web server instance. 3.10 -# If empty, listen on all network interfaces. 3.11 -# Default: 3.12 -host = 3.13 - 3.14 -# Port to listen on. 3.15 -# Default: 8080 3.16 -port = 8917 3.17 - 3.18 -# Path to favicon.ico image file. If unset, built-in favicon.ico is used. 3.19 -# The path may be either absolute or relative 3.20 -# to the directory containig this config file. 3.21 -# Default: favicon.ico 3.22 -favicon = favicon.ico 3.23 - 3.24 -# User ID as which the server will answer requests. 3.25 -# In order to use this option, the server must be run initially as root. 3.26 -# Availability: Unix. 3.27 -# Default: 3.28 -user = www 3.29 - 3.30 -# Group ID as which the server will answer requests. 3.31 -# In order to use this option, the server must be run initially as root. 3.32 -# Availability: Unix. 3.33 -# Default: 3.34 -group = www 3.35 - 3.36 -# don't fork (this overrides the pidfile mechanism)' 3.37 -# Allowed values: yes, no 3.38 -# Default: no 3.39 -nodaemon = yes 3.40 - 3.41 -# Log client machine names instead of IP addresses (much slower) 3.42 -# Allowed values: yes, no 3.43 -# Default: no 3.44 -log_hostnames = no 3.45 - 3.46 -# File to which the server records the process id of the daemon. 3.47 -# If this option is not set, the server will run in foreground 3.48 -# 3.49 -# The path may be either absolute or relative 3.50 -# to the directory containig this config file. 3.51 -# Default: 3.52 -pidfile = /var/run/roundup.pid 3.53 - 3.54 -# Log file path. If unset, log to stderr. 3.55 -# The path may be either absolute or relative 3.56 -# to the directory containig this config file. 3.57 -# Default: 3.58 -logfile = /var/log/roundup.log 3.59 - 3.60 -# Set processing of each request in separate subprocess. 3.61 -# Allowed values: debug, none, thread, fork. 3.62 -# Default: fork 3.63 -multiprocess = fork 3.64 - 3.65 -# Tracker index template. If unset, built-in will be used. 3.66 -# The path may be either absolute or relative 3.67 -# to the directory containig this config file. 3.68 -# Default: 3.69 -template = slitaz 3.70 - 3.71 -# Enable SSL support (requires pyopenssl) 3.72 -# Allowed values: yes, no 3.73 -# Default: no 3.74 -ssl = no 3.75 - 3.76 -# PEM file used for SSL. A temporary self-signed certificate 3.77 -# will be used if left blank. 3.78 -# The path may be either absolute or relative 3.79 -# to the directory containig this config file. 3.80 -# Default: 3.81 -pem = 3.82 - 3.83 -# Roundup trackers to serve. 3.84 -# Each option in this section defines single Roundup tracker. 3.85 -# Option name identifies the tracker and will appear in the URL. 3.86 -# Option value is tracker home directory path. 3.87 -# The path may be either absolute or relative 3.88 -# to the directory containig this config file. 3.89 -[trackers] 3.90 - 3.91 -bugs=/home/slitaz/bugs
4.1 --- a/bugs/templates/slitaz/TEMPLATE-INFO.txt Wed Jan 15 01:04:10 2014 +0100 4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 4.3 @@ -1,5 +0,0 @@ 4.4 -Name: slitaz 4.5 -Description: This is a SliTaz GNU/Linux Roundup tracker template based on 4.6 - the classic template provided by the Roundup. 4.7 -Intended-for: All first-time Roundup users 4.8 -Path: /home/slitaz/trackers/bugs
5.1 --- a/bugs/templates/slitaz/detectors/messagesummary.py Wed Jan 15 01:04:10 2014 +0100 5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 5.3 @@ -1,20 +0,0 @@ 5.4 -#$Id: messagesummary.py,v 1.2 2007-04-03 06:47:21 a1s Exp $ 5.5 - 5.6 -from roundup.mailgw import parseContent 5.7 - 5.8 -def summarygenerator(db, cl, nodeid, newvalues): 5.9 - ''' If the message doesn't have a summary, make one for it. 5.10 - ''' 5.11 - if newvalues.has_key('summary') or not newvalues.has_key('content'): 5.12 - return 5.13 - 5.14 - summary, content = parseContent(newvalues['content'], config=db.config) 5.15 - newvalues['summary'] = summary 5.16 - 5.17 - 5.18 -def init(db): 5.19 - # fire before changes are made 5.20 - db.msg.audit('create', summarygenerator) 5.21 - 5.22 -# vim: set filetype=python ts=4 sw=4 et si 5.23 -#SHA: 51433442433794dd7d80d65557aa21d59403d95a
6.1 --- a/bugs/templates/slitaz/detectors/nosyreaction.py Wed Jan 15 01:04:10 2014 +0100 6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 6.3 @@ -1,145 +0,0 @@ 6.4 -# 6.5 -# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) 6.6 -# This module is free software, and you may redistribute it and/or modify 6.7 -# under the same terms as Python, so long as this copyright message and 6.8 -# disclaimer are retained in their original form. 6.9 -# 6.10 -# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR 6.11 -# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING 6.12 -# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE 6.13 -# POSSIBILITY OF SUCH DAMAGE. 6.14 -# 6.15 -# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 6.16 -# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 6.17 -# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" 6.18 -# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, 6.19 -# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 6.20 -# 6.21 -#$Id: nosyreaction.py,v 1.4 2005-04-04 08:47:14 richard Exp $ 6.22 - 6.23 -# Python 2.3 ... 2.6 compatibility: 6.24 -from roundup.anypy.sets_ import set 6.25 - 6.26 -from roundup import roundupdb, hyperdb 6.27 - 6.28 -def nosyreaction(db, cl, nodeid, oldvalues): 6.29 - ''' A standard detector is provided that watches for additions to the 6.30 - "messages" property. 6.31 - 6.32 - When a new message is added, the detector sends it to all the users on 6.33 - the "nosy" list for the issue that are not already on the "recipients" 6.34 - list of the message. 6.35 - 6.36 - Those users are then appended to the "recipients" property on the 6.37 - message, so multiple copies of a message are never sent to the same 6.38 - user. 6.39 - 6.40 - The journal recorded by the hyperdatabase on the "recipients" property 6.41 - then provides a log of when the message was sent to whom. 6.42 - ''' 6.43 - # send a copy of all new messages to the nosy list 6.44 - for msgid in determineNewMessages(cl, nodeid, oldvalues): 6.45 - try: 6.46 - cl.nosymessage(nodeid, msgid, oldvalues) 6.47 - except roundupdb.MessageSendError, message: 6.48 - raise roundupdb.DetectorError, message 6.49 - 6.50 -def determineNewMessages(cl, nodeid, oldvalues): 6.51 - ''' Figure a list of the messages that are being added to the given 6.52 - node in this transaction. 6.53 - ''' 6.54 - messages = [] 6.55 - if oldvalues is None: 6.56 - # the action was a create, so use all the messages in the create 6.57 - messages = cl.get(nodeid, 'messages') 6.58 - elif oldvalues.has_key('messages'): 6.59 - # the action was a set (so adding new messages to an existing issue) 6.60 - m = {} 6.61 - for msgid in oldvalues['messages']: 6.62 - m[msgid] = 1 6.63 - messages = [] 6.64 - # figure which of the messages now on the issue weren't there before 6.65 - for msgid in cl.get(nodeid, 'messages'): 6.66 - if not m.has_key(msgid): 6.67 - messages.append(msgid) 6.68 - return messages 6.69 - 6.70 -def updatenosy(db, cl, nodeid, newvalues): 6.71 - '''Update the nosy list for changes to the assignedto 6.72 - ''' 6.73 - # nodeid will be None if this is a new node 6.74 - current_nosy = set() 6.75 - if nodeid is None: 6.76 - ok = ('new', 'yes') 6.77 - else: 6.78 - ok = ('yes',) 6.79 - # old node, get the current values from the node if they haven't 6.80 - # changed 6.81 - if not newvalues.has_key('nosy'): 6.82 - nosy = cl.get(nodeid, 'nosy') 6.83 - for value in nosy: 6.84 - current_nosy.add(value) 6.85 - 6.86 - # if the nosy list changed in this transaction, init from the new value 6.87 - if newvalues.has_key('nosy'): 6.88 - nosy = newvalues.get('nosy', []) 6.89 - for value in nosy: 6.90 - if not db.hasnode('user', value): 6.91 - continue 6.92 - current_nosy.add(value) 6.93 - 6.94 - new_nosy = set(current_nosy) 6.95 - 6.96 - # add assignedto(s) to the nosy list 6.97 - if newvalues.has_key('assignedto') and newvalues['assignedto'] is not None: 6.98 - propdef = cl.getprops() 6.99 - if isinstance(propdef['assignedto'], hyperdb.Link): 6.100 - assignedto_ids = [newvalues['assignedto']] 6.101 - elif isinstance(propdef['assignedto'], hyperdb.Multilink): 6.102 - assignedto_ids = newvalues['assignedto'] 6.103 - for assignedto_id in assignedto_ids: 6.104 - new_nosy.add(assignedto_id) 6.105 - 6.106 - # see if there's any new messages - if so, possibly add the author and 6.107 - # recipient to the nosy 6.108 - if newvalues.has_key('messages'): 6.109 - if nodeid is None: 6.110 - ok = ('new', 'yes') 6.111 - messages = newvalues['messages'] 6.112 - else: 6.113 - ok = ('yes',) 6.114 - # figure which of the messages now on the issue weren't 6.115 - oldmessages = cl.get(nodeid, 'messages') 6.116 - messages = [] 6.117 - for msgid in newvalues['messages']: 6.118 - if msgid not in oldmessages: 6.119 - messages.append(msgid) 6.120 - 6.121 - # configs for nosy modifications 6.122 - add_author = getattr(db.config, 'ADD_AUTHOR_TO_NOSY', 'new') 6.123 - add_recips = getattr(db.config, 'ADD_RECIPIENTS_TO_NOSY', 'new') 6.124 - 6.125 - # now for each new message: 6.126 - msg = db.msg 6.127 - for msgid in messages: 6.128 - if add_author in ok: 6.129 - authid = msg.get(msgid, 'author') 6.130 - new_nosy.add(authid) 6.131 - 6.132 - # add on the recipients of the message 6.133 - if add_recips in ok: 6.134 - for recipient in msg.get(msgid, 'recipients'): 6.135 - new_nosy.add(recipient) 6.136 - 6.137 - if current_nosy != new_nosy: 6.138 - # that's it, save off the new nosy list 6.139 - newvalues['nosy'] = list(new_nosy) 6.140 - 6.141 -def init(db): 6.142 - db.issue.react('create', nosyreaction) 6.143 - db.issue.react('set', nosyreaction) 6.144 - db.issue.audit('create', updatenosy) 6.145 - db.issue.audit('set', updatenosy) 6.146 - 6.147 -# vim: set filetype=python ts=4 sw=4 et si 6.148 -#SHA: dc34be7cc4a4956a8b49b779a7462904a2edd00d
7.1 --- a/bugs/templates/slitaz/detectors/statusauditor.py Wed Jan 15 01:04:10 2014 +0100 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,86 +0,0 @@ 7.4 -# Copyright (c) 2002 ekit.com Inc (http://www.ekit-inc.com/) 7.5 -# 7.6 -# Permission is hereby granted, free of charge, to any person obtaining a copy 7.7 -# of this software and associated documentation files (the "Software"), to deal 7.8 -# in the Software without restriction, including without limitation the rights 7.9 -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7.10 -# copies of the Software, and to permit persons to whom the Software is 7.11 -# furnished to do so, subject to the following conditions: 7.12 -# 7.13 -# The above copyright notice and this permission notice shall be included in 7.14 -# all copies or substantial portions of the Software. 7.15 -# 7.16 -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 7.17 -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 7.18 -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 7.19 -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 7.20 -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 7.21 -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 7.22 -# SOFTWARE. 7.23 -# 7.24 -#$Id: statusauditor.py,v 1.5 2004-03-27 00:01:48 richard Exp $ 7.25 - 7.26 -def chatty(db, cl, nodeid, newvalues): 7.27 - ''' If the issue is currently 'unread', 'resolved', 'done-cbb' or None, 7.28 - then set it to 'chatting' 7.29 - ''' 7.30 - # don't fire if there's no new message (ie. chat) 7.31 - if not newvalues.has_key('messages'): 7.32 - return 7.33 - if newvalues['messages'] == cl.get(nodeid, 'messages'): 7.34 - return 7.35 - 7.36 - # get the chatting state ID 7.37 - try: 7.38 - chatting_id = db.status.lookup('chatting') 7.39 - except KeyError: 7.40 - # no chatting state, ignore all this stuff 7.41 - return 7.42 - 7.43 - # get the current value 7.44 - current_status = cl.get(nodeid, 'status') 7.45 - 7.46 - # see if there's an explicit change in this transaction 7.47 - if newvalues.has_key('status'): 7.48 - # yep, skip 7.49 - return 7.50 - 7.51 - # determine the id of 'unread', 'resolved' and 'chatting' 7.52 - fromstates = [] 7.53 - for state in 'unread resolved done-cbb'.split(): 7.54 - try: 7.55 - fromstates.append(db.status.lookup(state)) 7.56 - except KeyError: 7.57 - pass 7.58 - 7.59 - # ok, there's no explicit change, so check if we are in a state that 7.60 - # should be changed 7.61 - if current_status in fromstates + [None]: 7.62 - # yep, we're now chatting 7.63 - newvalues['status'] = chatting_id 7.64 - 7.65 - 7.66 -def presetunread(db, cl, nodeid, newvalues): 7.67 - ''' Make sure the status is set on new issues 7.68 - ''' 7.69 - if newvalues.has_key('status') and newvalues['status']: 7.70 - return 7.71 - 7.72 - # get the unread state ID 7.73 - try: 7.74 - unread_id = db.status.lookup('unread') 7.75 - except KeyError: 7.76 - # no unread state, ignore all this stuff 7.77 - return 7.78 - 7.79 - # ok, do it 7.80 - newvalues['status'] = unread_id 7.81 - 7.82 - 7.83 -def init(db): 7.84 - # fire before changes are made 7.85 - db.issue.audit('set', chatty) 7.86 - db.issue.audit('create', presetunread) 7.87 - 7.88 -# vim: set filetype=python ts=4 sw=4 et si 7.89 -#SHA: 97f4de5b9d06b6be7ea73ba639a48141c80deaf9
8.1 --- a/bugs/templates/slitaz/detectors/userauditor.py Wed Jan 15 01:04:10 2014 +0100 8.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 8.3 @@ -1,95 +0,0 @@ 8.4 -# Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net) 8.5 -# 8.6 -# Permission is hereby granted, free of charge, to any person obtaining a copy 8.7 -# of this software and associated documentation files (the "Software"), to deal 8.8 -# in the Software without restriction, including without limitation the rights 8.9 -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8.10 -# copies of the Software, and to permit persons to whom the Software is 8.11 -# furnished to do so, subject to the following conditions: 8.12 -# 8.13 -# The above copyright notice and this permission notice shall be included in 8.14 -# all copies or substantial portions of the Software. 8.15 -# 8.16 -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 8.17 -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 8.18 -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 8.19 -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 8.20 -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 8.21 -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 8.22 -# SOFTWARE. 8.23 -# 8.24 -#$Id: userauditor.py,v 1.9 2007-09-12 21:11:13 jpend Exp $ 8.25 - 8.26 -import re 8.27 - 8.28 -# regular expression thanks to: http://www.regular-expressions.info/email.html 8.29 -# this is the "99.99% solution for syntax only". 8.30 -email_regexp = (r"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*", r"(localhost|(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9]))") 8.31 -email_rfc = re.compile('^' + email_regexp[0] + '@' + email_regexp[1] + '$', re.IGNORECASE) 8.32 -email_local = re.compile('^' + email_regexp[0] + '$', re.IGNORECASE) 8.33 - 8.34 -def valid_address(address): 8.35 - ''' If we see an @-symbol in the address then check against the full 8.36 - RFC syntax. Otherwise it is a local-only address so only check 8.37 - the local part of the RFC syntax. 8.38 - ''' 8.39 - if '@' in address: 8.40 - return email_rfc.match(address) 8.41 - else: 8.42 - return email_local.match(address) 8.43 - 8.44 -def get_addresses(user): 8.45 - ''' iterate over all known addresses in a newvalues dict 8.46 - this takes of the address/alterate_addresses handling 8.47 - ''' 8.48 - if user.has_key('address'): 8.49 - yield user['address'] 8.50 - if user.get('alternate_addresses', None): 8.51 - for address in user['alternate_addresses'].split('\n'): 8.52 - yield address 8.53 - 8.54 -def audit_user_fields(db, cl, nodeid, newvalues): 8.55 - ''' Make sure user properties are valid. 8.56 - 8.57 - - email address is syntactically valid 8.58 - - email address is unique 8.59 - - roles specified exist 8.60 - - timezone is valid 8.61 - ''' 8.62 - 8.63 - for address in get_addresses(newvalues): 8.64 - if not valid_address(address): 8.65 - raise ValueError, 'Email address syntax is invalid' 8.66 - 8.67 - check_main = db.user.stringFind(address=address) 8.68 - # make sure none of the alts are owned by anyone other than us (x!=nodeid) 8.69 - check_alts = [x for x in db.user.filter(None, {'alternate_addresses' : address}) if x != nodeid] 8.70 - if check_main or check_alts: 8.71 - raise ValueError, 'Email address %s already in use' % address 8.72 - 8.73 - for rolename in [r.lower().strip() for r in newvalues.get('roles', '').split(',')]: 8.74 - if rolename and not db.security.role.has_key(rolename): 8.75 - raise ValueError, 'Role "%s" does not exist'%rolename 8.76 - 8.77 - tz = newvalues.get('timezone', None) 8.78 - if tz: 8.79 - # if they set a new timezone validate the timezone by attempting to 8.80 - # use it before we store it to the db. 8.81 - import roundup.date 8.82 - import datetime 8.83 - try: 8.84 - TZ = roundup.date.get_timezone(tz) 8.85 - dt = datetime.datetime.now() 8.86 - local = TZ.localize(dt).utctimetuple() 8.87 - except IOError: 8.88 - raise ValueError, 'Timezone "%s" does not exist' % tz 8.89 - except ValueError: 8.90 - raise ValueError, 'Timezone "%s" exceeds valid range [-23...23]' % tz 8.91 - 8.92 -def init(db): 8.93 - # fire before changes are made 8.94 - db.user.audit('set', audit_user_fields) 8.95 - db.user.audit('create', audit_user_fields) 8.96 - 8.97 -# vim: sts=4 sw=4 et si 8.98 -#SHA: c7242008d09362eb32aa3933e334f6d5a2b09bb6
9.1 --- a/bugs/templates/slitaz/extensions/README.txt Wed Jan 15 01:04:10 2014 +0100 9.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 9.3 @@ -1,6 +0,0 @@ 9.4 -This directory is for tracker extensions: 9.5 - 9.6 -- CGI Actions 9.7 -- Templating functions 9.8 - 9.9 -See the customisation doc for more information.
10.1 --- a/bugs/templates/slitaz/html/_generic.404.html Wed Jan 15 01:04:10 2014 +0100 10.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 10.3 @@ -1,10 +0,0 @@ 10.4 -<html> 10.5 -<head> 10.6 -<title>Item Not Found</title> 10.7 -</head> 10.8 - 10.9 -<body> 10.10 -There is no <span tal:content="context/_classname" /> with id <span tal:content="context/id"/> 10.11 -</body> 10.12 -</html> 10.13 -<!-- SHA: 7c74a39904a98fd7aacba48daf5c6820da253ed2 -->
11.1 --- a/bugs/templates/slitaz/html/_generic.calendar.html Wed Jan 15 01:04:10 2014 +0100 11.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 11.3 @@ -1,19 +0,0 @@ 11.4 -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 11.5 -<html> 11.6 - <head> 11.7 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 11.8 - <meta http-equiv="Content-Type" content="text/html; charset=utf-8;" /> 11.9 - <title tal:content="string:Roundup Calendar"></title> 11.10 - <script language="Javascript" 11.11 - type="text/javascript" 11.12 - tal:content="structure string: 11.13 - // this is the name of the field in the original form that we're working on 11.14 - form = window.opener.document.${request/form/form/value}; 11.15 - field = '${request/form/property/value}';" > 11.16 - </script> 11.17 - </head> 11.18 - <body class="body" 11.19 - tal:content="structure python:utils.html_calendar(request)"> 11.20 - </body> 11.21 -</html> 11.22 -<!-- SHA: 3c1535fe01902cf3fa7115c982c45f7b0674b590 -->
12.1 --- a/bugs/templates/slitaz/html/_generic.collision.html Wed Jan 15 01:04:10 2014 +0100 12.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 12.3 @@ -1,17 +0,0 @@ 12.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 12.5 -<title metal:fill-slot="head_title" i18n:translate="" 12.6 - ><span tal:replace="python:context._classname.capitalize()" 12.7 - i18n:name="class" /> Edit Collision - <span i18n:name="tracker" 12.8 - tal:replace="config/TRACKER_NAME" /></title> 12.9 -<tal:block metal:fill-slot="body_title" i18n:translate="" 12.10 - ><span tal:replace="python:context._classname.capitalize()" 12.11 - i18n:name="class" /> Edit Collision</tal:block> 12.12 - 12.13 -<td class="content" metal:fill-slot="content" i18n:translate=" 12.14 - There has been a collision. Another user updated this node 12.15 - while you were editing. Please <a href='${context}'>reload</a> 12.16 - the node and review your edits. 12.17 -"><span tal:replace="context/designator" i18n:name="context" /> 12.18 -</td> 12.19 -</tal:block> 12.20 -<!-- SHA: db15fb6c88215d4baf223910a6c9cd81c63dc994 -->
13.1 --- a/bugs/templates/slitaz/html/_generic.help-empty.html Wed Jan 15 01:04:10 2014 +0100 13.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 13.3 @@ -1,9 +0,0 @@ 13.4 -<html> 13.5 - <head> 13.6 - <title>Empty page (no search performed yet)</title> 13.7 - </head> 13.8 - <body> 13.9 - <p i18n:translate="">Please specify your search parameters!</p> 13.10 - </body> 13.11 -</html> 13.12 -<!-- SHA: 9a118377b03172347d95097ff75fca26a6dd3738 -->
14.1 --- a/bugs/templates/slitaz/html/_generic.help-list.html Wed Jan 15 01:04:10 2014 +0100 14.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 14.3 @@ -1,84 +0,0 @@ 14.4 -<!-- $Id: _generic.help-list.html,v 1.2 2008-03-01 08:18:07 richard Exp $ vim: sw=2 ts=8 et 14.5 ---><html tal:define="vok context/is_view_ok"> 14.6 - <head> 14.7 - <title>Search result for user helper</title> 14.8 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 14.9 - <script language="Javascript" type="text/javascript" 14.10 - tal:content="structure string:<!-- 14.11 - // this is the name of the field in the original form that we're working on 14.12 - form = parent.opener.document.${request/form/form/value}; 14.13 - field = '${request/form/property/value}'; 14.14 - //-->"></script> 14.15 - <script src="@@file/help_controls.js" type="text/javascript"></script> 14.16 -<script type="text/javascript"><!-- 14.17 -var text_field = parent.submit.document.frm_help.text_preview; 14.18 -//--></script> 14.19 - </head> 14.20 - <body> 14.21 - <pre tal:content="request/env/QUERY_STRING" tal:condition=false /> 14.22 - 14.23 - <p tal:condition="not:vok" i18n:translate="">You are not 14.24 - allowed to view this page.</p> 14.25 - 14.26 - <tal:if condition="context/is_view_ok"> 14.27 - <tal:def define="batch request/batch;"> 14.28 - <form name=dummyform> 14.29 - <table width="100%" 14.30 - tal:define="template string:help-list" 14.31 - metal:use-macro="templates/help/macros/batch_navi" 14.32 - > 14.33 - <tr class="navigation"> 14.34 - <th> 14.35 - <a href="#"><< previous</a> 14.36 - </th> 14.37 - <th i18n:translate="">1..25 out of 50 14.38 - </th> 14.39 - <th> 14.40 - <a href="#">next >></a> 14.41 - </th> 14.42 - </tr> 14.43 - </table> 14.44 - 14.45 - <form name=dummyform> 14.46 - <table class="classhelp" 14.47 - tal:define=" 14.48 - props python:request.form['properties'].value.split(','); 14.49 - legend templates/help/macros/legend; 14.50 - "><thead> 14.51 - <tr metal:use-macro="legend"> 14.52 - <th> <b>x</b></th> 14.53 - <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th> 14.54 - </tr> 14.55 - </thead> 14.56 - <tfoot tal:condition=true> 14.57 - <tr metal:use-macro="legend" /> 14.58 - </tfoot> 14.59 - <tbody> 14.60 - <tr tal:repeat="item batch"> 14.61 - <tal:block tal:define="attr python:item[props[0]]" > 14.62 - <td> 14.63 - <input name="check" 14.64 - onclick="switch_val(text_field, this);" type="checkbox" 14.65 - tal:attributes="value attr; id string:id_$attr" /> 14.66 - </td> 14.67 - <td tal:repeat="prop props"> 14.68 - <label class="classhelp-label" 14.69 - tal:attributes="for string:id_$attr" 14.70 - tal:content="python:item[prop]"></label> 14.71 - </td> 14.72 - </tal:block> 14.73 - </tr> 14.74 - </tbody> 14.75 - </table> 14.76 - </form> 14.77 - </tal:def> 14.78 - </tal:if> 14.79 - 14.80 - <pre tal:content=request tal:condition=false /> 14.81 - <script type="text/javascript"><!-- 14.82 - parent.submit.document.frm_help.cb_listpresent.checked=true; 14.83 - reviseList_framed(document.dummyform, text_field) 14.84 - //--></script> 14.85 - </body> 14.86 -</html> 14.87 -<!-- SHA: 9b8c6aade0245ba2f29505606f427948e3448d22 -->
15.1 --- a/bugs/templates/slitaz/html/_generic.help-search.html Wed Jan 15 01:04:10 2014 +0100 15.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 15.3 @@ -1,14 +0,0 @@ 15.4 -<html> 15.5 - <head> 15.6 - <title>Frame for search input fields</title> 15.7 - </head> 15.8 - <body> 15.9 - <p i18n:translate="">Generic template 15.10 - <span tal:replace="request/template" i18n:name="template">help-search</span> 15.11 - or version for class 15.12 - <span tal:replace="request/classname" i18n:name="classname">user</span> 15.13 - is not yet implemented</p> 15.14 - </body> 15.15 -</html> 15.16 - 15.17 -<!-- SHA: b95a7bda7189c0747d2f4112d1d3d02808fd1753 -->
16.1 --- a/bugs/templates/slitaz/html/_generic.help-submit.html Wed Jan 15 01:04:10 2014 +0100 16.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 16.3 @@ -1,74 +0,0 @@ 16.4 -<html> 16.5 - <head> 16.6 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 16.7 - <meta http-equiv="Content-Type" 16.8 - tal:attributes="content string:text/html;; charset=${request/client/charset}" /> 16.9 - <tal:block tal:condition="python:request.form.has_key('property')"> 16.10 - <title>Generic submit page for framed helper windows</title> 16.11 - <script language="Javascript" type="text/javascript" 16.12 - tal:content="structure string:<!-- 16.13 -// this is the name of the field in the original form that we're working on 16.14 -form = parent.opener.document.${request/form/form/value}; 16.15 -callingform=form 16.16 -field = '${request/form/property/value}'; 16.17 -var listform = null 16.18 -function listPresent() { 16.19 - return document.frm_help.cb_listpresent.checked 16.20 -} 16.21 -function getListForm() { 16.22 - if (listPresent()) { 16.23 - return parent.list.document.forms.dummyform 16.24 - } else { 16.25 - return null 16.26 - } 16.27 -} 16.28 - 16.29 - 16.30 -function checkListForm() { 16.31 - // global listform 16.32 - if (listform != null) 16.33 - if (parent.list.document.dummyform) { 16.34 - listform = parent.list.document.dummyform 16.35 - alert(listform) 16.36 - } 16.37 - 16.38 - var bol= listform != null 16.39 - alert('checkListForm: bol='+bol) 16.40 - return bol 16.41 -} 16.42 -//-->"> 16.43 - </script> 16.44 - <script src="@@file/help_controls.js" type="text/javascript"></script> 16.45 - </tal:block> 16.46 - </head> 16.47 - <body class="body" onload="parent.focus();" id="submit"> 16.48 - <pre tal:content="request/env/QUERY_STRING" tal:condition=false /> 16.49 - <form name="frm_help" 16.50 - tal:define="batch request/batch; 16.51 - props python:request.form['properties'].value.split(',')" 16.52 - class="help-submit" 16.53 - id="classhelp-controls"> 16.54 - <div style="width:100%;text-align:left;margin-bottom:0.2em"> 16.55 - <input type="text" name="text_preview" size="24" class="preview" 16.56 - onchange="f=getListForm();if(f){ reviseList_framed(f, this)};" 16.57 - /> 16.58 - </div> 16.59 - <input type=checkbox name="cb_listpresent" readonly="readonly" style="display:none"> 16.60 - <input type="button" id="btn_cancel" 16.61 - value=" Cancel " onclick="parent.close();return false;" 16.62 - i18n:attributes="value" /> 16.63 - <input type="reset" id="btn_reset" 16.64 - onclick="text_field.value=original_field;f=getListForm();if (f) {reviseList_framed(f, this)};return false" 16.65 - /> 16.66 - <input type="submit" id="btn_apply" class="apply" 16.67 - value=" Apply " onclick="callingform[field].value=text_field.value; parent.close();" 16.68 - i18n:attributes="value" /> 16.69 - </form> 16.70 - <script type="text/javascript"><!-- 16.71 -var text_field = document.frm_help.text_preview; 16.72 -original_field=form[field].value; 16.73 -text_field.value=original_field; 16.74 -//--></script> 16.75 - </body> 16.76 -</html> 16.77 -<!-- SHA: 1de39ac0d15dc59c64187b6c691d58ba20931372 -->
17.1 --- a/bugs/templates/slitaz/html/_generic.help.html Wed Jan 15 01:04:10 2014 +0100 17.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 17.3 @@ -1,99 +0,0 @@ 17.4 -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 17.5 -<html tal:define="property request/form/property/value" > 17.6 - <head> 17.7 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 17.8 - <meta http-equiv="Content-Type" 17.9 - tal:attributes="content string:text/html;; charset=${request/client/charset}" /> 17.10 - <tal:block tal:condition="python:request.form.has_key('property')"> 17.11 - <title i18n:translate=""><tal:x i18n:name="property" 17.12 - tal:content="property" i18n:translate="" /> help - <span i18n:name="tracker" 17.13 - tal:replace="config/TRACKER_NAME" /></title> 17.14 - <script language="Javascript" type="text/javascript" 17.15 - tal:content="structure string: 17.16 - // this is the name of the field in the original form that we're working on 17.17 - form = window.opener.document.${request/form/form/value}; 17.18 - field = '${request/form/property/value}';"> 17.19 - </script> 17.20 - <script src="@@file/help_controls.js" type="text/javascript"><!-- 17.21 - //--></script> 17.22 - </tal:block> 17.23 - </head> 17.24 - <body class="body" onload="resetList();"> 17.25 - <form name="frm_help" tal:attributes="action request/base" 17.26 - tal:define="batch request/batch; 17.27 - props python:request.form['properties'].value.split(',')"> 17.28 - 17.29 - <div id="classhelp-controls"> 17.30 - <!--input type="button" name="btn_clear" 17.31 - value="Clear" onClick="clearList()"/ --> 17.32 - <input type="text" name="text_preview" size="24" class="preview" 17.33 - onchange="reviseList(this.value);"/> 17.34 - <input type="button" name="btn_reset" 17.35 - value=" Cancel " onclick="resetList(); window.close();" 17.36 - i18n:attributes="value" /> 17.37 - <input type="button" name="btn_apply" class="apply" 17.38 - value=" Apply " onclick="updateList(); window.close();" 17.39 - i18n:attributes="value" /> 17.40 - </div> 17.41 - <table width="100%"> 17.42 - <tr class="navigation"> 17.43 - <th> 17.44 - <a tal:define="prev batch/previous" tal:condition="prev" 17.45 - tal:attributes="href python:request.indexargs_url(request.classname, 17.46 - {'@template':'help', 'property': request.form['property'].value, 17.47 - 'properties': request.form['properties'].value, 17.48 - 'form': request.form['form'].value, 17.49 - 'type': request.form['type'].value, 17.50 - '@startwith':prev.first, '@pagesize':prev.size})" 17.51 - i18n:translate="" ><< previous</a> 17.52 - 17.53 - </th> 17.54 - <th i18n:translate=""><span tal:replace="batch/start" i18n:name="start" 17.55 - />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end" 17.56 - /> out of <span tal:replace="batch/sequence_length" i18n:name="total" 17.57 - /> 17.58 - </th> 17.59 - <th> 17.60 - <a tal:define="next batch/next" tal:condition="next" 17.61 - tal:attributes="href python:request.indexargs_url(request.classname, 17.62 - {'@template':'help', 'property': request.form['property'].value, 17.63 - 'properties': request.form['properties'].value, 17.64 - 'form': request.form['form'].value, 17.65 - 'type': request.form['type'].value, 17.66 - '@startwith':next.first, '@pagesize':next.size})" 17.67 - i18n:translate="" >next >></a> 17.68 - 17.69 - </th> 17.70 - </tr> 17.71 - </table> 17.72 - 17.73 - <table class="classhelp"> 17.74 - <tr> 17.75 - <th> <b>x</b></th> 17.76 - <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th> 17.77 - </tr> 17.78 - <tr tal:repeat="item batch"> 17.79 - <tal:block tal:define="attr python:item[props[0]]" > 17.80 - <td> 17.81 - <input name="check" 17.82 - onclick="updatePreview();" 17.83 - tal:attributes="type python:request.form['type'].value; 17.84 - value attr; id string:id_$attr" /> 17.85 - </td> 17.86 - <td tal:repeat="prop props"> 17.87 - <label class="classhelp-label" 17.88 - tal:attributes="for string:id_$attr" 17.89 - tal:content="python:item[prop]"></label> 17.90 - </td> 17.91 - </tal:block> 17.92 - </tr> 17.93 - <tr> 17.94 - <th> <b>x</b></th> 17.95 - <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th> 17.96 - </tr> 17.97 - </table> 17.98 - 17.99 - </form> 17.100 - </body> 17.101 -</html> 17.102 -<!-- SHA: 992685537210e03230c9cfc3d5a4060edb1f1536 -->
18.1 --- a/bugs/templates/slitaz/html/_generic.index.html Wed Jan 15 01:04:10 2014 +0100 18.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 18.3 @@ -1,72 +0,0 @@ 18.4 -<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar--> 18.5 - 18.6 -<tal:block metal:use-macro="templates/page/macros/icing"> 18.7 -<title metal:fill-slot="head_title" i18n:translate="" 18.8 - ><span tal:replace="python:context._classname.capitalize()" 18.9 - i18n:name="class" /> editing - <span i18n:name="tracker" 18.10 - tal:replace="config/TRACKER_NAME" /></title> 18.11 -<tal:block metal:fill-slot="body_title" i18n:translate="" 18.12 - ><span tal:replace="python:context._classname.capitalize()" 18.13 - i18n:name="class" /> editing</tal:block> 18.14 - 18.15 -<td class="content" metal:fill-slot="content"> 18.16 - 18.17 -<span tal:condition="python:not (context.is_view_ok() or context.is_edit_ok() 18.18 - or request.user.hasRole('Anonymous'))" 18.19 - tal:omit-tag="python:1" i18n:translate="" 18.20 ->You are not allowed to view this page.</span> 18.21 - 18.22 -<span tal:condition="python:not (context.is_view_ok() or context.is_edit_ok()) 18.23 - and request.user.hasRole('Anonymous')" 18.24 - tal:omit-tag="python:1" i18n:translate="" 18.25 ->Please login with your username and password.</span> 18.26 - 18.27 -<tal:block tal:condition="context/is_edit_ok"> 18.28 -<tal:block i18n:translate=""> 18.29 -<p class="form-help"> 18.30 - You may edit the contents of the 18.31 - <span tal:replace="request/classname" i18n:name="classname"/> 18.32 - class using this form. Commas, newlines and double quotes (") must be 18.33 - handled delicately. You may include commas and newlines by enclosing the 18.34 - values in double-quotes ("). Double quotes themselves must be quoted by 18.35 - doubling (""). 18.36 -</p> 18.37 - 18.38 -<p class="form-help"> 18.39 - Multilink properties have their multiple values colon (":") separated 18.40 - (... ,"one:two:three", ...) 18.41 -</p> 18.42 - 18.43 -<p class="form-help"> 18.44 - Remove entries by deleting their line. Add new entries by appending 18.45 - them to the table - put an X in the id column. If you wish to restore a 18.46 - removed item and you know its id then just put that id in the id column. 18.47 -</p> 18.48 -</tal:block> 18.49 -<form onSubmit="return submit_once()" method="post" 18.50 - tal:attributes="action context/designator"> 18.51 -<textarea rows="15" style="width:90%" name="rows" tal:content="context/csv"></textarea> 18.52 -<br> 18.53 -<input type="hidden" name="@action" value="editCSV"> 18.54 -<input type="submit" value="Edit Items" i18n:attributes="value"> 18.55 -</form> 18.56 -</tal:block> 18.57 - 18.58 -<table tal:condition="context/is_only_view_ok" width="100%" class="list"> 18.59 - <tr> 18.60 - <th tal:repeat="property context/propnames" tal:content="property"> </th> 18.61 - </tr> 18.62 - <tal:block repeat="item context/list"> 18.63 - <tr tal:condition="item/is_view_ok" 18.64 - tal:attributes="class python:['normal', 'alt'][repeat['item'].index%6/3]"> 18.65 - <td tal:repeat="property context/propnames" 18.66 - tal:content="python: item[property] or default" 18.67 - > </td> 18.68 - </tr> 18.69 - </tal:block> 18.70 -</table> 18.71 - 18.72 -</td> 18.73 - 18.74 -</tal:block> 18.75 -<!-- SHA: 0e2e831b8d3ec903798d21a7d1f96b3e07f740a1 -->
19.1 --- a/bugs/templates/slitaz/html/_generic.item.html Wed Jan 15 01:04:10 2014 +0100 19.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 19.3 @@ -1,59 +0,0 @@ 19.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 19.5 -<title metal:fill-slot="head_title" i18n:translate="" 19.6 - ><span tal:replace="python:context._classname.capitalize()" 19.7 - i18n:name="class" /> editing - <span i18n:name="tracker" 19.8 - tal:replace="config/TRACKER_NAME" /></title> 19.9 -<tal:block metal:fill-slot="body_title" i18n:translate="" 19.10 - ><span tal:replace="python:context._classname.capitalize()" 19.11 - i18n:name="class" /> editing</tal:block> 19.12 - 19.13 -<td class="content" metal:fill-slot="content"> 19.14 - 19.15 -<p tal:condition="python:not (context.is_view_ok() 19.16 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 19.17 - You are not allowed to view this page.</p> 19.18 - 19.19 -<p tal:condition="python:not context.is_view_ok() 19.20 - and request.user.hasRole('Anonymous')" i18n:translate=""> 19.21 - Please login with your username and password.</p> 19.22 - 19.23 -<div tal:condition="context/is_view_ok"> 19.24 - 19.25 -<form method="post" onSubmit="return submit_once()" 19.26 - enctype="multipart/form-data" tal:condition="context/is_view_ok" 19.27 - tal:attributes="action context/designator"> 19.28 - 19.29 -<input type="hidden" name="@template" value="item"> 19.30 - 19.31 -<table class="form"> 19.32 - 19.33 -<tr tal:repeat="prop python:db[context._classname].properties()"> 19.34 - <tal:block tal:condition="python:prop._name not in ('id', 19.35 - 'creator', 'creation', 'actor', 'activity')"> 19.36 - <th tal:content="prop/_name"></th> 19.37 - <td tal:content="structure python:context[prop._name].field()"></td> 19.38 - </tal:block> 19.39 -</tr> 19.40 -<tr> 19.41 - <td> </td> 19.42 - <td colspan=3 tal:content="structure context/submit"> 19.43 - submit button will go here 19.44 - </td> 19.45 -</tr> 19.46 -</table> 19.47 - 19.48 -</form> 19.49 - 19.50 -<tal:block tal:condition="context/id" 19.51 - tal:define="limit python:[10, None][request.form.has_key('show_all_history')]" 19.52 - tal:replace="structure python:context.history(limit=limit)" /> 19.53 -<p tal:condition="not:exists:request/form/show_all_history" i18n:translate="">Showing 10 items. 19.54 -<a tal:attributes="href string:${context/_classname}${context/id}?show_all_history=yes">Show all history</a> 19.55 -(warning: this could be VERY long)</p> 19.56 - 19.57 -</div> 19.58 - 19.59 -</td> 19.60 - 19.61 -</tal:block> 19.62 -<!-- SHA: 78108e49cad0014d9861f955e51d19ecb02c6b64 -->
20.1 Binary file bugs/templates/slitaz/html/favicon.ico has changed
21.1 --- a/bugs/templates/slitaz/html/file.index.html Wed Jan 15 01:04:10 2014 +0100 21.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 21.3 @@ -1,32 +0,0 @@ 21.4 -<!-- dollarId: file.index,v 1.4 2002/01/23 05:10:27 richard Exp dollar--> 21.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 21.6 -<title metal:fill-slot="head_title" i18n:translate="" 21.7 - >List of files - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" /></title> 21.8 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 21.9 - i18n:translate="">List of files</span> 21.10 -<td class="content" metal:fill-slot="content"> 21.11 - 21.12 -<table class="otherinfo" tal:define="batch request/batch"> 21.13 - <tr><th style="padding-right: 10" i18n:translate="">Download</th> 21.14 - <th style="padding-right: 10" i18n:translate="">Content Type</th> 21.15 - <th style="padding-right: 10" i18n:translate="">Uploaded By</th> 21.16 - <th style="padding-right: 10" i18n:translate="">Date</th> 21.17 - </tr> 21.18 - <tr tal:repeat="file batch" tal:attributes="class python:['normal', 'alt'][repeat['file'].index%6/3]"> 21.19 - <td> 21.20 - <a tal:attributes="href string:file${file/id}/${file/name}" 21.21 - tal:content="file/name">dld link</a> 21.22 - </td> 21.23 - <td tal:content="file/type">content type</td> 21.24 - <td tal:content="file/creator">creator's name</td> 21.25 - <td tal:content="file/creation">creation date</td> 21.26 - </tr> 21.27 - 21.28 - <metal:block use-macro="templates/issue.index/macros/batch-footer" /> 21.29 - 21.30 -</table> 21.31 - 21.32 -</td> 21.33 - 21.34 -</tal:block> 21.35 -<!-- SHA: f3a343f0682801cb8c47bd793d2d436fc7258d73 -->
22.1 --- a/bugs/templates/slitaz/html/file.item.html Wed Jan 15 01:04:10 2014 +0100 22.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 22.3 @@ -1,54 +0,0 @@ 22.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 22.5 -<title metal:fill-slot="head_title" i18n:translate="">File display - <span 22.6 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 22.7 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 22.8 - i18n:translate="">File display</span> 22.9 - 22.10 -<td class="content" metal:fill-slot="content"> 22.11 - 22.12 -<p tal:condition="python:not (context.is_view_ok() 22.13 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 22.14 - You are not allowed to view this page.</p> 22.15 - 22.16 -<p tal:condition="python:not context.is_view_ok() 22.17 - and request.user.hasRole('Anonymous')" i18n:translate=""> 22.18 - Please login with your username and password.</p> 22.19 - 22.20 -<form method="post" onSubmit="return submit_once()" 22.21 - enctype="multipart/form-data" tal:condition="context/is_view_ok" 22.22 - tal:attributes="action context/designator"> 22.23 - 22.24 -<table class="form"> 22.25 - <tr> 22.26 - <th i18n:translate="">Name</th> 22.27 - <td tal:content="structure context/name/field"></td> 22.28 - </tr> 22.29 - <tr> 22.30 - <th i18n:translate="">Content Type</th> 22.31 - <td tal:content="structure context/type/field"></td> 22.32 - </tr> 22.33 - 22.34 - <tr> 22.35 - <td> 22.36 - 22.37 - <input type="hidden" name="@template" value="item"> 22.38 - <input type="hidden" name="@required" value="name,type"> 22.39 - <input type="hidden" name="@multilink" 22.40 - tal:condition="python:request.form.has_key('@multilink')" 22.41 - tal:attributes="value request/form/@multilink/value"> 22.42 - </td> 22.43 - <td tal:content="structure context/submit">submit button here</td> 22.44 - </tr> 22.45 -</table> 22.46 -</form> 22.47 - 22.48 -<a tal:condition="python:context.id and context.is_view_ok()" 22.49 - tal:attributes="href string:file${context/id}/${context/name}" 22.50 - i18n:translate="">download</a> 22.51 - 22.52 -<tal:block tal:condition="context/id" tal:replace="structure context/history" /> 22.53 - 22.54 -</td> 22.55 - 22.56 -</tal:block> 22.57 -<!-- SHA: 9b0955c553e1df1d791dfc24530aeb945896cf46 -->
23.1 --- a/bugs/templates/slitaz/html/help.html Wed Jan 15 01:04:10 2014 +0100 23.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 23.3 @@ -1,39 +0,0 @@ 23.4 -<!-- 23.5 -Macros for framed help windows 23.6 ---> 23.7 - 23.8 -<!-- legend for helper search results --> 23.9 -<thead> 23.10 -<tr metal:define-macro="legend"> 23.11 - <th><b>x</b></th> 23.12 - <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th> 23.13 -</tr> 23.14 -</thead> 23.15 - 23.16 -<table width="100%" 23.17 - metal:define-macro="batch_navi" 23.18 - tal:define="prev batch/previous; 23.19 - next batch/next; 23.20 - " 23.21 - tal:condition="python:prev or next"> 23.22 - <tr class="navigation"> 23.23 - <th width="30%"> 23.24 - <a tal:condition="prev" 23.25 - tal:attributes="href python:request.indexargs_url(request.classname, {'@template':'help-list', 'property': request.form['property'].value, 'properties': request.form['properties'].value, 'form': request.form['form'].value, '@startwith':prev.first, '@pagesize':prev.size})" 23.26 - i18n:translate="" ><< previous</a> 23.27 - 23.28 - </th> 23.29 - <th i18n:translate="" width="40%"><span tal:replace="batch/start" i18n:name="start" 23.30 - />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end" 23.31 - /> out of <span tal:replace="batch/sequence_length" i18n:name="total" 23.32 - /> 23.33 - </th> 23.34 - <th width="30%"> 23.35 - <a tal:condition="next" 23.36 - tal:attributes="href python:request.indexargs_url(request.classname, {'@template':'help-list', 'property': request.form['property'].value, 'properties': request.form['properties'].value, 'form': request.form['form'].value, '@startwith':next.first, '@pagesize':next.size})" 23.37 - i18n:translate="" >next >></a> 23.38 - 23.39 - </th> 23.40 - </tr> 23.41 - </table> 23.42 -<!-- SHA: 5bb5e9db92d4dea06f6bd0224f34dce86020d4c2 -->
24.1 --- a/bugs/templates/slitaz/html/help_controls.js Wed Jan 15 01:04:10 2014 +0100 24.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 24.3 @@ -1,324 +0,0 @@ 24.4 -// initial values for either Nosy, Superseder, Keyword and Waiting On, 24.5 -// depending on which has called 24.6 -original_field = form[field].value; 24.7 - 24.8 -// Some browsers (ok, IE) don't define the "undefined" variable. 24.9 -undefined = document.geez_IE_is_really_friggin_annoying; 24.10 - 24.11 -function trim(value) { 24.12 - var temp = value; 24.13 - var obj = /^(\s*)([\W\w]*)(\b\s*$)/; 24.14 - if (obj.test(temp)) { temp = temp.replace(obj, '$2'); } 24.15 - var obj = / /g; 24.16 - while (temp.match(obj)) { temp = temp.replace(obj, " "); } 24.17 - return temp; 24.18 -} 24.19 - 24.20 -function determineList() { 24.21 - // generate a comma-separated list of the checked items 24.22 - var list = new String(''); 24.23 - 24.24 - // either a checkbox object or an array of checkboxes 24.25 - var check = document.frm_help.check; 24.26 - 24.27 - if ((check.length == undefined) && (check.checked != undefined)) { 24.28 - // only one checkbox on page 24.29 - if (check.checked) { 24.30 - list = check.value; 24.31 - } 24.32 - } else { 24.33 - // array of checkboxes 24.34 - for (box=0; box < check.length; box++) { 24.35 - if (check[box].checked) { 24.36 - if (list.length == 0) { 24.37 - separator = ''; 24.38 - } 24.39 - else { 24.40 - separator = ','; 24.41 - } 24.42 - // we used to use an Array and push / join, but IE5.0 sux 24.43 - list = list + separator + check[box].value; 24.44 - } 24.45 - } 24.46 - } 24.47 - return list; 24.48 -} 24.49 - 24.50 -/** 24.51 - * update the field in the opening window; 24.52 - * the text_field variable must be set in the calling page 24.53 - */ 24.54 -function updateOpener() { 24.55 - // write back to opener window 24.56 - if (document.frm_help.check==undefined) { return; } 24.57 - form[field].value = text_field.value; 24.58 -} 24.59 - 24.60 -function updateList() { 24.61 - // write back to opener window 24.62 - if (document.frm_help.check==undefined) { return; } 24.63 - form[field].value = determineList(); 24.64 -} 24.65 - 24.66 -function updatePreview() { 24.67 - // update the preview box 24.68 - if (document.frm_help.check==undefined) { return; } 24.69 - writePreview(determineList()); 24.70 -} 24.71 - 24.72 -function clearList() { 24.73 - // uncheck all checkboxes 24.74 - if (document.frm_help.check==undefined) { return; } 24.75 - for (box=0; box < document.frm_help.check.length; box++) { 24.76 - document.frm_help.check[box].checked = false; 24.77 - } 24.78 -} 24.79 - 24.80 -function reviseList_framed(form, textfield) { 24.81 - // update the checkboxes based on the preview field 24.82 - // alert('reviseList_framed') 24.83 - // alert(form) 24.84 - if (form.check==undefined) 24.85 - return; 24.86 - // alert(textfield) 24.87 - var to_check; 24.88 - var list = textfield.value.split(","); 24.89 - if (form.check.length==undefined) { 24.90 - check = form.check; 24.91 - to_check = false; 24.92 - for (val in list) { 24.93 - if (check.value==trim(list[val])) { 24.94 - to_check = true; 24.95 - break; 24.96 - } 24.97 - } 24.98 - check.checked = to_check; 24.99 - } else { 24.100 - for (box=0; box < form.check.length; box++) { 24.101 - check = form.check[box]; 24.102 - to_check = false; 24.103 - for (val in list) { 24.104 - if (check.value==trim(list[val])) { 24.105 - to_check = true; 24.106 - break; 24.107 - } 24.108 - } 24.109 - check.checked = to_check; 24.110 - } 24.111 - } 24.112 -} 24.113 - 24.114 -function reviseList(vals) { 24.115 - // update the checkboxes based on the preview field 24.116 - if (document.frm_help.check==undefined) { return; } 24.117 - var to_check; 24.118 - var list = vals.split(","); 24.119 - if (document.frm_help.check.length==undefined) { 24.120 - check = document.frm_help.check; 24.121 - to_check = false; 24.122 - for (val in list) { 24.123 - if (check.value==trim(list[val])) { 24.124 - to_check = true; 24.125 - break; 24.126 - } 24.127 - } 24.128 - check.checked = to_check; 24.129 - } else { 24.130 - for (box=0; box < document.frm_help.check.length; box++) { 24.131 - check = document.frm_help.check[box]; 24.132 - to_check = false; 24.133 - for (val in list) { 24.134 - if (check.value==trim(list[val])) { 24.135 - to_check = true; 24.136 - break; 24.137 - } 24.138 - } 24.139 - check.checked = to_check; 24.140 - } 24.141 - } 24.142 -} 24.143 - 24.144 -function resetList() { 24.145 - // reset preview and check boxes to initial values 24.146 - if (document.frm_help.check==undefined) { return; } 24.147 - writePreview(original_field); 24.148 - reviseList(original_field); 24.149 -} 24.150 - 24.151 -function writePreview(val) { 24.152 - // writes a value to the text_preview 24.153 - document.frm_help.text_preview.value = val; 24.154 -} 24.155 - 24.156 -function focusField(name) { 24.157 - for(i=0; i < document.forms.length; ++i) { 24.158 - var obj = document.forms[i].elements[name]; 24.159 - if (obj && obj.focus) {obj.focus();} 24.160 - } 24.161 -} 24.162 - 24.163 -function selectField(name) { 24.164 - for(i=0; i < document.forms.length; ++i) { 24.165 - var obj = document.forms[i].elements[name]; 24.166 - if (obj && obj.focus){obj.focus();} 24.167 - if (obj && obj.select){obj.select();} 24.168 - } 24.169 -} 24.170 - 24.171 -function checkRequiredFields(fields) 24.172 -{ 24.173 - var bonk=''; 24.174 - var res=''; 24.175 - var argv = checkRequiredFields.arguments; 24.176 - var argc = argv.length; 24.177 - var input = ''; 24.178 - var val=''; 24.179 - 24.180 - for (var i=0; i < argc; i++) { 24.181 - fi = argv[i]; 24.182 - input = document.getElementById(fi); 24.183 - if (input) { 24.184 - val = input.value 24.185 - if (val == '' || val == '-1' || val == -1) { 24.186 - if (res == '') { 24.187 - res = fi; 24.188 - bonk = input; 24.189 - } else { 24.190 - res += ', '+fi; 24.191 - } 24.192 - } 24.193 - } else { 24.194 - alert('Field with id='+fi+' not found!') 24.195 - } 24.196 - } 24.197 - if (res == '') { 24.198 - return submit_once(); 24.199 - } else { 24.200 - alert('Missing value here ('+res+')!'); 24.201 - if (window.event && window.event.returnvalue) { 24.202 - event.returnValue = 0; // work-around for IE 24.203 - } 24.204 - bonk.focus(); 24.205 - return false; 24.206 - } 24.207 -} 24.208 - 24.209 -/** 24.210 - * seeks the given value (2nd argument) 24.211 - * in the value of the given input element (1st argument), 24.212 - * which is considered a list of values, separated by commas 24.213 - */ 24.214 -function has_value(input, val) 24.215 -{ 24.216 - var actval = input.value 24.217 - var arr = feld.value.split(','); 24.218 - var max = arr.length; 24.219 - for (i=0;i<max;i++) { 24.220 - if (trim(arr[i]) == val) { 24.221 - return true 24.222 - } 24.223 - } 24.224 - return false 24.225 -} 24.226 - 24.227 -/** 24.228 - * Switch Value: 24.229 - * change the value of the given input field (might be of type text or hidden), 24.230 - * adding or removing the value of the given checkbox field (might be a radio 24.231 - * button as well) 24.232 - * 24.233 - * This function doesn't care whether or not the checkboxes of all values of 24.234 - * interest are present; but of course it doesn't have total control of the 24.235 - * text field. 24.236 - */ 24.237 -function switch_val(text, check) 24.238 -{ 24.239 - var switched_val = check.value 24.240 - var arr = text.value.split(',') 24.241 - var max = arr.length 24.242 - if (check.checked) { 24.243 - for (i=0; i<max; i++) { 24.244 - if (trim(arr[i]) == switched_val) { 24.245 - return 24.246 - } 24.247 - } 24.248 - if (text.value) 24.249 - text.value = text.value+','+switched_val 24.250 - else 24.251 - text.value = switched_val 24.252 - } else { 24.253 - var neu = '' 24.254 - var changed = false 24.255 - for (i=0; i<max; i++) { 24.256 - if (trim(arr[i]) == switched_val) { 24.257 - changed=true 24.258 - } else { 24.259 - neu = neu+','+trim(arr[i]) 24.260 - } 24.261 - } 24.262 - if (changed) { 24.263 - text.value = neu.substr(1) 24.264 - } 24.265 - } 24.266 -} 24.267 - 24.268 -/** 24.269 - * append the given value (2nd argument) to an input field 24.270 - * (1st argument) which contains comma-separated values; 24.271 - * see --> remove_val() 24.272 - * 24.273 - * This will work nicely even for batched lists 24.274 - */ 24.275 -function append_val(name, val) 24.276 -{ 24.277 - var feld = document.itemSynopsis[name]; 24.278 - var actval = feld.value; 24.279 - if (actval == '') { 24.280 - feld.value = val 24.281 - } else { 24.282 - var arr = feld.value.split(','); 24.283 - var max = arr.length; 24.284 - for (i=0;i<max;i++) { 24.285 - if (trim(arr[i]) == val) { 24.286 - return 24.287 - } 24.288 - } 24.289 - feld.value = actval+','+val 24.290 - } 24.291 -} 24.292 - 24.293 -/** 24.294 - * remove the given value (2nd argument) from the comma-separated values 24.295 - * of the given input element (1st argument); see --> append_val() 24.296 - */ 24.297 -function remove_val(name, val) 24.298 -{ 24.299 - var feld = document.itemSynopsis[name]; 24.300 - var actval = feld.value; 24.301 - var changed=false; 24.302 - if (actval == '') { 24.303 - return 24.304 - } else { 24.305 - var arr = feld.value.split(','); 24.306 - var max = arr.length; 24.307 - var neu = '' 24.308 - for (i=0;i<max;i++) { 24.309 - if (trim(arr[i]) == val) { 24.310 - changed=true 24.311 - } else { 24.312 - neu = neu+','+trim(arr[i]) 24.313 - } 24.314 - } 24.315 - if (changed) { 24.316 - feld.value = neu.substr(1) 24.317 - } 24.318 - } 24.319 -} 24.320 - 24.321 -/** 24.322 - * give the focus to the element given by id 24.323 - */ 24.324 -function focus2id(name) 24.325 -{ 24.326 - document.getElementById(name).focus(); 24.327 -}
25.1 --- a/bugs/templates/slitaz/html/home.classlist.html Wed Jan 15 01:04:10 2014 +0100 25.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 25.3 @@ -1,26 +0,0 @@ 25.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 25.5 -<title metal:fill-slot="head_title" i18n:translate="">List of classes - <span 25.6 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 25.7 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 25.8 - i18n:translate="">List of classes</span> 25.9 -<td class="content" metal:fill-slot="content"> 25.10 -<table class="classlist"> 25.11 - 25.12 -<tal:block tal:repeat="cl db/classes"> 25.13 - <tr> 25.14 - <th class="header" colspan="2" align="left"> 25.15 - <a tal:attributes="href string:${cl/classname}" 25.16 - tal:content="python:cl.classname.capitalize()">classname</a> 25.17 - </th> 25.18 - </tr> 25.19 - <tr tal:repeat="prop cl/properties"> 25.20 - <th tal:content="prop/_name">name</th> 25.21 - <td tal:content="prop/_prop">type</td> 25.22 - </tr> 25.23 -</tal:block> 25.24 - 25.25 -</table> 25.26 -</td> 25.27 - 25.28 -</tal:block> 25.29 -<!-- SHA: e82456270ae1048cefdead99afda95578fff7b74 -->
26.1 --- a/bugs/templates/slitaz/html/home.html Wed Jan 15 01:04:10 2014 +0100 26.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 26.3 @@ -1,11 +0,0 @@ 26.4 -<!-- 26.5 - This is the default body that is displayed when people visit the 26.6 - tracker. The tag below lists the currently open issues. You may 26.7 - replace it with a greeting message, or a different list of issues or 26.8 - whatever. It's a good idea to have the issues on the front page though 26.9 ---> 26.10 -<span tal:replace="structure python:db.issue.renderWith('index', 26.11 - sort=[('-', 'activity')], group=[('+', 'priority')], filter=['status'], 26.12 - columns=['id','activity','title','creator','assignedto', 'status'], 26.13 - filterspec={'status':['-1','1','2','3','4','5','6','7']})" /> 26.14 -<!-- SHA: c87a4e18d59a527331f1d367c0c6cc67ee123e63 -->
27.1 --- a/bugs/templates/slitaz/html/issue.index.html Wed Jan 15 01:04:10 2014 +0100 27.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 27.3 @@ -1,167 +0,0 @@ 27.4 -<!-- $Id: issue.index.html,v 1.29 2007-09-18 17:44:26 jpend Exp $ --> 27.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 27.6 -<title metal:fill-slot="head_title" > 27.7 - <span tal:omit-tag="true" i18n:translate="" >List of issues</span> 27.8 - <span tal:condition="request/dispname" 27.9 - tal:replace="python:' - %s '%request.dispname" 27.10 - /> - <span tal:replace="config/TRACKER_NAME" /> 27.11 -</title> 27.12 -<span metal:fill-slot="body_title" tal:omit-tag="true"> 27.13 - <span tal:omit-tag="true" i18n:translate="" >List of issues</span> 27.14 - <span tal:condition="request/dispname" 27.15 - tal:replace="python:' - %s' % request.dispname" /> 27.16 -</span> 27.17 -<td class="content" metal:fill-slot="content"> 27.18 - 27.19 -<p tal:condition="python:not (context.is_view_ok() 27.20 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 27.21 - You are not allowed to view this page.</p> 27.22 - 27.23 -<p tal:condition="python:not context.is_view_ok() 27.24 - and request.user.hasRole('Anonymous')" i18n:translate=""> 27.25 - Please login with your username and password.</p> 27.26 - 27.27 -<tal:block tal:define="batch request/batch" tal:condition="context/is_view_ok"> 27.28 - <table class="list"> 27.29 - <tr> 27.30 - <th tal:condition="request/show/priority" i18n:translate="">Priority</th> 27.31 - <th tal:condition="request/show/id" i18n:translate="">ID</th> 27.32 - <th tal:condition="request/show/creation" i18n:translate="">Creation</th> 27.33 - <th tal:condition="request/show/activity" i18n:translate="">Activity</th> 27.34 - <th tal:condition="request/show/actor" i18n:translate="">Actor</th> 27.35 - <th tal:condition="request/show/keyword" i18n:translate="">Keyword</th> 27.36 - <th tal:condition="request/show/title" i18n:translate="">Title</th> 27.37 - <th tal:condition="request/show/status" i18n:translate="">Status</th> 27.38 - <th tal:condition="request/show/creator" i18n:translate="">Creator</th> 27.39 - <!-- <th tal:condition="request/show/assignedto" i18n:translate="">Assigned To</th> --> 27.40 - </tr> 27.41 - <tal:block tal:repeat="i batch" condition=true> 27.42 - <tr tal:define="group python:[r[1] for r in request.group]" 27.43 - tal:condition="python:group and batch.propchanged(*group)"> 27.44 - <th tal:attributes="colspan python:len(request.columns)" class="group"> 27.45 - <tal:block tal:repeat="g group"> 27.46 - <tal:block i18n:translate="" tal:content="python:str(i[g]) or '(no %s set)'%g"/> 27.47 - </tal:block> 27.48 - </th> 27.49 - </tr> 27.50 - 27.51 - <tr> 27.52 - <td tal:condition="request/show/priority" 27.53 - tal:content="python:i.priority.plain() or default"> </td> 27.54 - <td tal:condition="request/show/id" tal:content="i/id"> </td> 27.55 - <td class="date" tal:condition="request/show/creation" 27.56 - tal:content="i/creation/reldate"> </td> 27.57 - <td class="date" tal:condition="request/show/activity" 27.58 - tal:content="i/activity/reldate"> </td> 27.59 - <td class="date" tal:condition="request/show/actor" 27.60 - tal:content="python:i.actor.plain() or default"> </td> 27.61 - <td tal:condition="request/show/keyword" 27.62 - tal:content="python:i.keyword.plain() or default"> </td> 27.63 - <td tal:condition="request/show/title"> 27.64 - <a tal:attributes="href string:issue${i/id}" 27.65 - tal:content="python:str(i.title.plain(hyperlink=0)) or '[no title]'">title</a> 27.66 - </td> 27.67 - <td tal:condition="request/show/status" 27.68 - i18n:translate="" 27.69 - tal:content="python:i.status.plain() or default"> </td> 27.70 - <td tal:condition="request/show/creator" 27.71 - tal:content="python:i.creator.plain() or default"> </td> 27.72 - <!-- <td tal:condition="request/show/assignedto" 27.73 - tal:content="python:i.assignedto.plain() or default"> </td> --> 27.74 - </tr> 27.75 - 27.76 - </tal:block> 27.77 - 27.78 - <metal:index define-macro="batch-footer"> 27.79 - <tr tal:condition="batch"> 27.80 - <th tal:attributes="colspan python:len(request.columns)"> 27.81 - <table width="100%"> 27.82 - <tr class="navigation"> 27.83 - <th> 27.84 - <a tal:define="prev batch/previous" tal:condition="prev" 27.85 - tal:attributes="href python:request.indexargs_url(request.classname, 27.86 - {'@startwith':prev.first, '@pagesize':prev.size})" 27.87 - i18n:translate=""><< previous</a> 27.88 - 27.89 - </th> 27.90 - <th i18n:translate=""><span tal:replace="batch/start" i18n:name="start" 27.91 - />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end" 27.92 - /> out of <span tal:replace="batch/sequence_length" i18n:name="total" 27.93 - /></th> 27.94 - <th> 27.95 - <a tal:define="next batch/next" tal:condition="next" 27.96 - tal:attributes="href python:request.indexargs_url(request.classname, 27.97 - {'@startwith':next.first, '@pagesize':next.size})" 27.98 - i18n:translate="">next >></a> 27.99 - 27.100 - </th> 27.101 - </tr> 27.102 - </table> 27.103 - </th> 27.104 - </tr> 27.105 - </metal:index> 27.106 -</table> 27.107 - 27.108 -<a tal:attributes="href python:request.indexargs_url('issue', 27.109 - {'@action':'export_csv'})" i18n:translate="">Download as CSV</a> 27.110 - 27.111 -<form method="get" class="index-controls" 27.112 - tal:attributes="action request/classname"> 27.113 - 27.114 - <table class="form" tal:define="n_sort python:2"> 27.115 - <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch"> 27.116 - <tr tal:define="key python:len(request.sort)>n and request.sort[n]"> 27.117 - <th> 27.118 - <tal:block tal:condition="not:n" i18n:translate="">Sort on:</tal:block> 27.119 - </th> 27.120 - <td> 27.121 - <select tal:attributes="name python:'@sort%d'%n"> 27.122 - <option value="" i18n:translate="">- nothing -</option> 27.123 - <option tal:repeat="col context/properties" 27.124 - tal:attributes="value col/_name; 27.125 - selected python:key and col._name == key[1]" 27.126 - tal:content="col/_name" 27.127 - i18n:translate="">column</option> 27.128 - </select> 27.129 - </td> 27.130 - <th i18n:translate="">Descending:</th> 27.131 - <td><input type="checkbox" tal:attributes="name python:'@sortdir%d'%n; 27.132 - checked python:key and key[0] == '-'" /> 27.133 - </td> 27.134 - </tr> 27.135 - </tal:block> 27.136 - <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch"> 27.137 - <tr tal:define="key python:len(request.group)>n and request.group[n]"> 27.138 - <th> 27.139 - <tal:block tal:condition="not:n" i18n:translate="">Group on:</tal:block> 27.140 - </th> 27.141 - <td> 27.142 - <select tal:attributes="name python:'@group%d'%n"> 27.143 - <option value="" i18n:translate="">- nothing -</option> 27.144 - <option tal:repeat="col context/properties" 27.145 - tal:attributes="value col/_name; 27.146 - selected python:key and col._name == key[1]" 27.147 - tal:content="col/_name" 27.148 - i18n:translate="">column</option> 27.149 - </select> 27.150 - </td> 27.151 - <th i18n:translate="">Descending:</th> 27.152 - <td><input type="checkbox" tal:attributes="name python:'@groupdir%d'%n; 27.153 - checked python:key and key[0] == '-'" /> 27.154 - </td> 27.155 - </tr> 27.156 - </tal:block> 27.157 - <tr><td colspan="4"> 27.158 - <input type="submit" value="Redisplay" i18n:attributes="value" /> 27.159 - <tal:block tal:replace="structure 27.160 - python:request.indexargs_form(sort=0, group=0)" /> 27.161 - </td></tr> 27.162 - </table> 27.163 -</form> 27.164 - 27.165 -</tal:block> 27.166 - 27.167 -</td> 27.168 -</tal:block><tal:comment condition=false> vim: sw=1 ts=8 et si 27.169 -</tal:comment> 27.170 -<!-- SHA: 4600774f11f5947ff1f565e2fb8023125cf51fc2 -->
28.1 --- a/bugs/templates/slitaz/html/issue.item.html Wed Jan 15 01:04:10 2014 +0100 28.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 28.3 @@ -1,198 +0,0 @@ 28.4 -<!-- dollarId: issue.item,v 1.4 2001/08/03 01:19:43 richard Exp dollar--> 28.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 28.6 -<title metal:fill-slot="head_title"> 28.7 -<tal:block condition="context/id" i18n:translate="" 28.8 - >Issue <tal:x tal:content="context/id" i18n:name="id" 28.9 - />: <tal:x content="context/title" i18n:name="title" 28.10 - /> - <tal:x content="config/TRACKER_NAME" i18n:name="tracker" 28.11 -/></tal:block> 28.12 -<tal:block condition="not:context/id" i18n:translate="" 28.13 - >New Issue - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" 28.14 -/></tal:block> 28.15 -</title> 28.16 -<tal:block metal:fill-slot="body_title"> 28.17 - <span tal:condition="python: not (context.id or context.is_edit_ok())" 28.18 - tal:omit-tag="python:1" i18n:translate="">New Issue</span> 28.19 - <span tal:condition="python: not context.id and context.is_edit_ok()" 28.20 - tal:omit-tag="python:1" i18n:translate="">New Issue Editing</span> 28.21 - <span tal:condition="python: context.id and not context.is_edit_ok()" 28.22 - tal:omit-tag="python:1" i18n:translate="">Issue<tal:x 28.23 - replace="context/id" i18n:name="id" /></span> 28.24 - <span tal:condition="python: context.id and context.is_edit_ok()" 28.25 - tal:omit-tag="python:1" i18n:translate="">Issue<tal:x 28.26 - replace="context/id" i18n:name="id" /> Editing</span> 28.27 -</tal:block> 28.28 - 28.29 -<td class="content" metal:fill-slot="content"> 28.30 - 28.31 -<p tal:condition="python:not (context.is_view_ok() 28.32 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 28.33 - You are not allowed to view this page.</p> 28.34 - 28.35 -<p tal:condition="python:not context.is_view_ok() 28.36 - and request.user.hasRole('Anonymous')" i18n:translate=""> 28.37 - Please login with your username and password.</p> 28.38 - 28.39 -<div tal:condition="context/is_view_ok"> 28.40 - 28.41 -<form method="post" name="itemSynopsis" 28.42 - onSubmit="return submit_once()" enctype="multipart/form-data" 28.43 - tal:attributes="action context/designator"> 28.44 - 28.45 -<table class="form"> 28.46 -<tr> 28.47 - <th class="required" i18n:translate="">Title</th> 28.48 - <td colspan=3 tal:content="structure python:context.title.field(size=60)">title</td> 28.49 -</tr> 28.50 - 28.51 -<tr> 28.52 - <th class="required" i18n:translate="">Priority</th> 28.53 - <td tal:content="structure context/priority/menu">priority</td> 28.54 - <th i18n:translate="">Status</th> 28.55 - <td tal:content="structure context/status/menu">status</td> 28.56 -</tr> 28.57 - 28.58 -<tr> 28.59 - <th i18n:translate="">Superseder</th> 28.60 - <td> 28.61 - <span tal:replace="structure python:context.superseder.field(showid=1, size=20)" /> 28.62 - <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.issue.classhelp('id,title', property='superseder')" /> 28.63 - <span tal:condition="context/superseder"> 28.64 - <br><span i18n:translate="">View:</span> 28.65 - <a tal:repeat="sup context/superseder" 28.66 - tal:content="python:sup['id'] + ', '*(not repeat['sup'].end)" 28.67 - tal:attributes="href string:issue${sup/id}"></a> 28.68 - </span> 28.69 - </td> 28.70 - <th i18n:translate="">Nosy List</th> 28.71 - <td> 28.72 - <span tal:replace="structure context/nosy/field" /> 28.73 - <span tal:condition="context/is_edit_ok" tal:replace="structure 28.74 -python:db.user.classhelp('username,realname,address', property='nosy', width='600')" /><br> 28.75 - </td> 28.76 -</tr> 28.77 - 28.78 -<tr> 28.79 - <th i18n:translate="">Assigned To</th> 28.80 - <td tal:content="structure context/assignedto/menu">assignedto menu</td> 28.81 - <th i18n:translate="">Keywords</th> 28.82 - <td> 28.83 - <span tal:replace="structure context/keyword/field" /> 28.84 - <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.keyword.classhelp(property='keyword')" /> 28.85 - </td> 28.86 -</tr> 28.87 - 28.88 -<tr tal:condition="context/is_edit_ok"> 28.89 - <th i18n:translate="">Change Note</th> 28.90 - <td colspan=3> 28.91 - <textarea tal:content="request/form/@note/value | default" 28.92 - name="@note" wrap="hard" rows="5" cols="80"></textarea> 28.93 - </td> 28.94 -</tr> 28.95 - 28.96 -<tr tal:condition="context/is_edit_ok"> 28.97 - <th i18n:translate="">File</th> 28.98 - <td colspan=3><input type="file" name="@file" size="40"></td> 28.99 -</tr> 28.100 - 28.101 -<tr tal:condition="context/is_edit_ok"> 28.102 - <td> 28.103 - 28.104 - <input type="hidden" name="@template" value="item"> 28.105 - <input type="hidden" name="@required" value="title,priority"> 28.106 - </td> 28.107 - <td colspan=3> 28.108 - <span tal:replace="structure context/submit">submit button</span> 28.109 - <a tal:condition="context/id" tal:attributes="href context/copy_url" 28.110 - i18n:translate="">Make a copy</a> 28.111 - </td> 28.112 -</tr> 28.113 - 28.114 -</table> 28.115 -</form> 28.116 - 28.117 -<tal:block tal:condition="not:context/id" i18n:translate=""> 28.118 -<table class="form"> 28.119 -<tr> 28.120 - <td>Note: </td> 28.121 - <th class="required">highlighted</th> 28.122 - <td> fields are required.</td> 28.123 -</tr> 28.124 -</table> 28.125 -</tal:block> 28.126 - 28.127 -<p tal:condition="context/id" i18n:translate=""> 28.128 - Created on <b tal:content="context/creation" i18n:name="creation" /> 28.129 - by <b tal:content="context/creator" i18n:name="creator" />, 28.130 - last changed <b content="context/activity" i18n:name="activity" /> 28.131 - by <b tal:content="context/actor" i18n:name="actor" />. 28.132 -</p> 28.133 - 28.134 -<table class="files" tal:condition="context/files"> 28.135 - <tr><th colspan="5" class="header" i18n:translate="">Files</th></tr> 28.136 - <tr> 28.137 - <th i18n:translate="">File name</th> 28.138 - <th i18n:translate="">Uploaded</th> 28.139 - <th i18n:translate="">Type</th> 28.140 - <th i18n:translate="">Edit</th> 28.141 - <th i18n:translate="">Remove</th> 28.142 - </tr> 28.143 - <tr tal:repeat="file context/files"> 28.144 - <td> 28.145 - <a tal:attributes="href file/download_url" 28.146 - tal:content="file/name">dld link</a> 28.147 - </td> 28.148 - <td> 28.149 - <span tal:content="file/creator">creator's name</span>, 28.150 - <span tal:content="file/creation">creation date</span> 28.151 - </td> 28.152 - <td tal:content="file/type" /> 28.153 - <td><a tal:condition="file/is_edit_ok" 28.154 - tal:attributes="href string:file${file/id}">edit</a> 28.155 - </td> 28.156 - <td> 28.157 - <form style="padding:0" method="post" tal:condition="context/is_edit_ok" 28.158 - tal:attributes="action string:issue${context/id}"> 28.159 - <input type="hidden" name="@remove@files" tal:attributes="value file/id"> 28.160 - <input type="hidden" name="@action" value="edit"> 28.161 - <input type="submit" value="remove" i18n:attributes="value"> 28.162 - </form> 28.163 - </td> 28.164 - </tr> 28.165 -</table> 28.166 - 28.167 -<table class="messages" tal:condition="context/messages"> 28.168 - <tr><th colspan="4" class="header" i18n:translate="">Messages</th></tr> 28.169 - <tal:block tal:repeat="msg context/messages/reverse"> 28.170 - <tr> 28.171 - <th><a tal:attributes="href string:msg${msg/id}" 28.172 - i18n:translate="">msg<tal:x replace="msg/id" i18n:name="id" /> (view)</a></th> 28.173 - <th i18n:translate="">Author: <tal:x replace="msg/author" 28.174 - i18n:name="author" /></th> 28.175 - <th i18n:translate="">Date: <tal:x replace="msg/date" 28.176 - i18n:name="date" /></th> 28.177 - <th> 28.178 - <form style="padding:0" method="post" tal:condition="context/is_edit_ok" 28.179 - tal:attributes="action string:issue${context/id}"> 28.180 - <input type="hidden" name="@remove@messages" tal:attributes="value msg/id"> 28.181 - <input type="hidden" name="@action" value="edit"> 28.182 - <input type="submit" value="remove" i18n:attributes="value"> 28.183 - </form> 28.184 - </th> 28.185 - </tr> 28.186 - <tr> 28.187 - <td colspan="4" class="content"> 28.188 - <pre tal:content="structure msg/content/hyperlinked">content</pre> 28.189 - </td> 28.190 - </tr> 28.191 - </tal:block> 28.192 -</table> 28.193 - 28.194 -<tal:block tal:condition="context/id" tal:replace="structure context/history" /> 28.195 - 28.196 -</div> 28.197 - 28.198 -</td> 28.199 - 28.200 -</tal:block> 28.201 -<!-- SHA: a242ab3ed5c6969916f3c42f80d487710f165fb8 -->
29.1 --- a/bugs/templates/slitaz/html/issue.search.html Wed Jan 15 01:04:10 2014 +0100 29.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 29.3 @@ -1,235 +0,0 @@ 29.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 29.5 -<title metal:fill-slot="head_title" i18n:translate="">Issue searching - <span 29.6 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 29.7 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 29.8 - i18n:translate="">Issue searching</span> 29.9 -<td class="content" metal:fill-slot="content"> 29.10 - 29.11 -<form method="get" name="itemSynopsis" 29.12 - tal:attributes="action request/classname"> 29.13 - 29.14 -<table class="form" tal:define=" 29.15 - cols python:request.columns or 'id activity title status assignedto'.split(); 29.16 - sort_on python:request.sort and request.sort[0] or nothing; 29.17 - sort_desc python:sort_on and sort_on[0] == '-'; 29.18 - sort_on python:(sort_on and sort_on[1]) or 'activity'; 29.19 - group_on python:request.group and request.group[0] or nothing; 29.20 - group_desc python:group_on and group_on[0] == '-'; 29.21 - group_on python:(group_on and group_on[1]) or 'priority'; 29.22 - 29.23 - search_input templates/page/macros/search_input; 29.24 - search_date templates/page/macros/search_date; 29.25 - column_input templates/page/macros/column_input; 29.26 - sort_input templates/page/macros/sort_input; 29.27 - group_input templates/page/macros/group_input; 29.28 - search_select templates/page/macros/search_select; 29.29 - search_select_translated templates/page/macros/search_select_translated; 29.30 - search_multiselect templates/page/macros/search_multiselect;"> 29.31 - 29.32 -<tr> 29.33 - <th class="header"> </th> 29.34 - <th class="header" i18n:translate="">Filter on</th> 29.35 - <th class="header" i18n:translate="">Display</th> 29.36 - <th class="header" i18n:translate="">Sort on</th> 29.37 - <th class="header" i18n:translate="">Group on</th> 29.38 -</tr> 29.39 - 29.40 -<tr tal:define="name string:@search_text"> 29.41 - <th i18n:translate="">All text*:</th> 29.42 - <td metal:use-macro="search_input"></td> 29.43 - <td> </td> 29.44 - <td> </td> 29.45 - <td> </td> 29.46 -</tr> 29.47 - 29.48 -<tr tal:define="name string:title"> 29.49 - <th i18n:translate="">Title:</th> 29.50 - <td metal:use-macro="search_input"></td> 29.51 - <td metal:use-macro="column_input"></td> 29.52 - <td metal:use-macro="sort_input"></td> 29.53 - <td> </td> 29.54 -</tr> 29.55 - 29.56 -<tr tal:define="name string:keyword; 29.57 - db_klass string:keyword; 29.58 - db_content string:name;"> 29.59 - <th i18n:translate="">Keyword:</th> 29.60 - <td metal:use-macro="search_select"> 29.61 - <option metal:fill-slot="extra_options" value="-1" i18n:translate="" 29.62 - tal:attributes="selected python:value == '-1'">not selected</option> 29.63 - </td> 29.64 - <td metal:use-macro="column_input"></td> 29.65 - <td metal:use-macro="sort_input"></td> 29.66 - <td metal:use-macro="group_input"></td> 29.67 -</tr> 29.68 - 29.69 -<tr tal:define="name string:id"> 29.70 - <th i18n:translate="">ID:</th> 29.71 - <td metal:use-macro="search_input"></td> 29.72 - <td metal:use-macro="column_input"></td> 29.73 - <td metal:use-macro="sort_input"></td> 29.74 - <td> </td> 29.75 -</tr> 29.76 - 29.77 -<tr tal:define="name string:creation"> 29.78 - <th i18n:translate="">Creation Date:</th> 29.79 - <td metal:use-macro="search_date"></td> 29.80 - <td metal:use-macro="column_input"></td> 29.81 - <td metal:use-macro="sort_input"></td> 29.82 - <td metal:use-macro="group_input"></td> 29.83 -</tr> 29.84 - 29.85 -<tr tal:define="name string:creator; 29.86 - db_klass string:user; 29.87 - db_content string:username;" 29.88 - tal:condition="db/user/is_view_ok"> 29.89 - <th i18n:translate="">Creator:</th> 29.90 - <td metal:use-macro="search_select"> 29.91 - <option metal:fill-slot="extra_options" i18n:translate="" 29.92 - tal:attributes="value request/user/id">created by me</option> 29.93 - </td> 29.94 - <td metal:use-macro="column_input"></td> 29.95 - <td metal:use-macro="sort_input"></td> 29.96 - <td metal:use-macro="group_input"></td> 29.97 -</tr> 29.98 - 29.99 -<tr tal:define="name string:activity"> 29.100 - <th i18n:translate="">Activity:</th> 29.101 - <td metal:use-macro="search_date"></td> 29.102 - <td metal:use-macro="column_input"></td> 29.103 - <td metal:use-macro="sort_input"></td> 29.104 - <td> </td> 29.105 -</tr> 29.106 - 29.107 -<tr tal:define="name string:actor; 29.108 - db_klass string:user; 29.109 - db_content string:username;" 29.110 - tal:condition="db/user/is_view_ok"> 29.111 - <th i18n:translate="">Actor:</th> 29.112 - <td metal:use-macro="search_select"> 29.113 - <option metal:fill-slot="extra_options" i18n:translate="" 29.114 - tal:attributes="value request/user/id">done by me</option> 29.115 - </td> 29.116 - <td metal:use-macro="column_input"></td> 29.117 - <td metal:use-macro="sort_input"></td> 29.118 - <td> </td> 29.119 -</tr> 29.120 - 29.121 -<tr tal:define="name string:priority; 29.122 - db_klass string:priority; 29.123 - db_content string:name;"> 29.124 - <th i18n:translate="">Priority:</th> 29.125 - <td metal:use-macro="search_select_translated"> 29.126 - <option metal:fill-slot="extra_options" value="-1" i18n:translate="" 29.127 - tal:attributes="selected python:value == '-1'">not selected</option> 29.128 - </td> 29.129 - <td metal:use-macro="column_input"></td> 29.130 - <td metal:use-macro="sort_input"></td> 29.131 - <td metal:use-macro="group_input"></td> 29.132 -</tr> 29.133 - 29.134 -<tr tal:define="name string:status; 29.135 - db_klass string:status; 29.136 - db_content string:name;"> 29.137 - <th i18n:translate="">Status:</th> 29.138 - <td metal:use-macro="search_select_translated"> 29.139 - <tal:block metal:fill-slot="extra_options"> 29.140 - <option value="-1,1,2,3,4,5,6,7" i18n:translate="" 29.141 - tal:attributes="selected python:value == '-1,1,2,3,4,5,6,7'">not resolved</option> 29.142 - <option value="-1" i18n:translate="" 29.143 - tal:attributes="selected python:value == '-1'">not selected</option> 29.144 - </tal:block> 29.145 - </td> 29.146 - <td metal:use-macro="column_input"></td> 29.147 - <td metal:use-macro="sort_input"></td> 29.148 - <td metal:use-macro="group_input"></td> 29.149 -</tr> 29.150 - 29.151 -<tr tal:define="name string:assignedto; 29.152 - db_klass string:user; 29.153 - db_content string:username;" 29.154 - tal:condition="db/user/is_view_ok"> 29.155 - <th i18n:translate="">Assigned to:</th> 29.156 - <td metal:use-macro="search_select"> 29.157 - <tal:block metal:fill-slot="extra_options"> 29.158 - <option tal:attributes="value request/user/id" 29.159 - i18n:translate="">assigned to me</option> 29.160 - <option value="-1" tal:attributes="selected python:value == '-1'" 29.161 - i18n:translate="">unassigned</option> 29.162 - </tal:block> 29.163 - </td> 29.164 - <td metal:use-macro="column_input"></td> 29.165 - <td metal:use-macro="sort_input"></td> 29.166 - <td metal:use-macro="group_input"></td> 29.167 -</tr> 29.168 - 29.169 -<tr> 29.170 - <th i18n:translate="">No Sort or group:</th> 29.171 - <td> </td> 29.172 - <td> </td> 29.173 - <td><input type="radio" name="@sort" value=""></td> 29.174 - <td><input type="radio" name="@group" value=""></td> 29.175 -</tr> 29.176 - 29.177 -<tr> 29.178 -<th i18n:translate="">Pagesize:</th> 29.179 -<td><input name="@pagesize" size="3" value="50" 29.180 - tal:attributes="value request/form/@pagesize/value | default"></td> 29.181 -</tr> 29.182 - 29.183 -<tr> 29.184 -<th i18n:translate="">Start With:</th> 29.185 -<td><input name="@startwith" size="3" value="0" 29.186 - tal:attributes="value request/form/@startwith/value | default"></td> 29.187 -</tr> 29.188 - 29.189 -<tr> 29.190 -<th i18n:translate="">Sort Descending:</th> 29.191 -<td><input type="checkbox" name="@sortdir" 29.192 - tal:attributes="checked sort_desc"> 29.193 -</td> 29.194 -</tr> 29.195 - 29.196 -<tr> 29.197 -<th i18n:translate="">Group Descending:</th> 29.198 -<td><input type="checkbox" name="@groupdir" 29.199 - tal:attributes="checked group_desc"> 29.200 -</td> 29.201 -</tr> 29.202 - 29.203 -<tr tal:condition="python:request.user.hasPermission('Edit', 'query')"> 29.204 - <th i18n:translate="">Query name**:</th> 29.205 - <td tal:define="value request/form/@queryname/value | nothing"> 29.206 - <input name="@queryname" tal:attributes="value value"> 29.207 - <input type="hidden" name="@old-queryname" tal:attributes="value value"> 29.208 - </td> 29.209 -</tr> 29.210 - 29.211 -<tr> 29.212 - <td> 29.213 - 29.214 - <input type="hidden" name="@action" value="search"> 29.215 - </td> 29.216 - <td><input type="submit" value="Search" i18n:attributes="value"></td> 29.217 -</tr> 29.218 - 29.219 -<tr><td> </td> 29.220 - <td colspan="4" class="help"> 29.221 - <span i18n:translate="" tal:omit-tag="true"> 29.222 - *: The "all text" field will look in message bodies and issue titles 29.223 - </span><br> 29.224 - <span tal:condition="python:request.user.hasPermission('Edit', 'query')" 29.225 - i18n:translate="" tal:omit-tag="true" 29.226 - > 29.227 - **: If you supply a name, the query will be saved off and available as a 29.228 - link in the sidebar 29.229 - </span> 29.230 - </td> 29.231 -</tr> 29.232 -</table> 29.233 - 29.234 -</form> 29.235 -</td> 29.236 - 29.237 -</tal:block> 29.238 -<!-- SHA: fa3cf334a00d3f923b4b6c2489205c6c9b0dbd99 -->
30.1 --- a/bugs/templates/slitaz/html/keyword.item.html Wed Jan 15 01:04:10 2014 +0100 30.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 30.3 @@ -1,56 +0,0 @@ 30.4 -<!-- dollarId: keyword.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar--> 30.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 30.6 -<title metal:fill-slot="head_title" i18n:translate="">Keyword editing - <span 30.7 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 30.8 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 30.9 - i18n:translate="">Keyword editing</span> 30.10 -<td class="content" metal:fill-slot="content"> 30.11 - 30.12 -<table class="otherinfo" tal:define="keywords db/keyword/list" 30.13 - tal:condition="keywords"> 30.14 - <tr><th colspan="4" class="header" i18n:translate="">Existing Keywords</th></tr> 30.15 - <tr tal:repeat="start python:range(0, len(keywords), 4)"> 30.16 - <td width="25%" tal:define="batch python:utils.Batch(keywords, 4, start)" 30.17 - tal:repeat="keyword batch"> 30.18 - <a tal:attributes="href string:keyword${keyword/id}" 30.19 - tal:content="keyword/name">keyword here</a> 30.20 - </td> 30.21 - </tr> 30.22 - <tr> 30.23 - <td colspan="4" style="border-top: 1px solid gray" i18n:translate=""> 30.24 - To edit an existing keyword (for spelling or typing errors), 30.25 - click on its entry above. 30.26 - </td> 30.27 - </tr> 30.28 -</table> 30.29 - 30.30 -<p class="help" tal:condition="not:context/id" i18n:translate=""> 30.31 - To create a new keyword, enter it below and click "Submit New Entry". 30.32 -</p> 30.33 - 30.34 -<form method="post" onSubmit="return submit_once()" 30.35 - enctype="multipart/form-data" 30.36 - tal:attributes="action context/designator"> 30.37 - 30.38 - <table class="form"> 30.39 - <tr> 30.40 - <th i18n:translate="">Keyword</th> 30.41 - <td tal:content="structure context/name/field">name</td> 30.42 - </tr> 30.43 - 30.44 - <tr> 30.45 - <td> 30.46 - 30.47 - <input type="hidden" name="@required" value="name"> 30.48 - <input type="hidden" name="@template" value="item"> 30.49 - </td> 30.50 - <td colspan=3 tal:content="structure context/submit"> 30.51 - submit button will go here 30.52 - </td> 30.53 - </tr> 30.54 - </table> 30.55 -</form> 30.56 -</td> 30.57 - 30.58 -</tal:block> 30.59 -<!-- SHA: 69377db97f924d320fdd672dd8363256ef6f2fbb -->
31.1 --- a/bugs/templates/slitaz/html/msg.index.html Wed Jan 15 01:04:10 2014 +0100 31.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 31.3 @@ -1,26 +0,0 @@ 31.4 -<tal:block metal:use-macro="templates/page/macros/icing"> 31.5 -<title metal:fill-slot="head_title" i18n:translate="" 31.6 - >List of messages - <span tal:replace="config/TRACKER_NAME" 31.7 - i18n:name="tracker"/></title> 31.8 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 31.9 - i18n:translate="">Message listing</span> 31.10 -<td class="content" metal:fill-slot="content"> 31.11 -<table tal:define="batch request/batch" class="messages"> 31.12 - <tr><th colspan=2 class="header" i18n:translate="">Messages</th></tr> 31.13 - <tal:block tal:repeat="msg batch"> 31.14 - <tr> 31.15 - <th tal:content="string:Author: ${msg/author}">author</th> 31.16 - <th tal:content="string:Date: ${msg/date}">date</th> 31.17 - </tr> 31.18 - <tr> 31.19 - <td colspan="2"><pre tal:content="msg/content">content</pre></td> 31.20 - </tr> 31.21 - </tal:block> 31.22 - 31.23 - <metal:block use-macro="templates/issue.index/macros/batch-footer" /> 31.24 - 31.25 -</table> 31.26 -</td> 31.27 - 31.28 -</tal:block> 31.29 -<!-- SHA: 474d801a8005811ea3f2600ff719af95c6b798ce -->
32.1 --- a/bugs/templates/slitaz/html/msg.item.html Wed Jan 15 01:04:10 2014 +0100 32.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 32.3 @@ -1,84 +0,0 @@ 32.4 -<!-- dollarId: msg.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar--> 32.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 32.6 -<title metal:fill-slot="head_title"> 32.7 -<tal:block condition="context/id" i18n:translate="" 32.8 - >Message <span tal:replace="context/id" i18n:name="id" 32.9 - /> - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" 32.10 -/></tal:block> 32.11 -<tal:block condition="not:context/id" i18n:translate="" 32.12 - >New Message - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" 32.13 -/></tal:block> 32.14 -</title> 32.15 -<tal:block metal:fill-slot="body_title"> 32.16 - <span tal:condition="python: not (context.id or context.is_edit_ok())" 32.17 - tal:omit-tag="python:1" i18n:translate="">New Message</span> 32.18 - <span tal:condition="python: not context.id and context.is_edit_ok()" 32.19 - tal:omit-tag="python:1" i18n:translate="">New Message Editing</span> 32.20 - <span tal:condition="python: context.id and not context.is_edit_ok()" 32.21 - tal:omit-tag="python:1" i18n:translate="">Message<tal:x 32.22 - replace="context/id" i18n:name="id" /></span> 32.23 - <span tal:condition="python: context.id and context.is_edit_ok()" 32.24 - tal:omit-tag="python:1" i18n:translate="">Message<tal:x 32.25 - replace="context/id" i18n:name="id" /> Editing</span> 32.26 -</tal:block> 32.27 -<td class="content" metal:fill-slot="content"> 32.28 - 32.29 -<p tal:condition="python:not (context.is_view_ok() 32.30 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 32.31 - You are not allowed to view this page.</p> 32.32 - 32.33 -<p tal:condition="python:not context.is_view_ok() 32.34 - and request.user.hasRole('Anonymous')" i18n:translate=""> 32.35 - Please login with your username and password.</p> 32.36 - 32.37 -<div tal:condition="context/is_view_ok"> 32.38 -<table class="form"> 32.39 - 32.40 -<tr> 32.41 - <th i18n:translate="">Author</th> 32.42 - <td tal:content="context/author"></td> 32.43 -</tr> 32.44 - 32.45 -<tr> 32.46 - <th i18n:translate="">Recipients</th> 32.47 - <td tal:content="context/recipients"></td> 32.48 -</tr> 32.49 - 32.50 -<tr> 32.51 - <th i18n:translate="">Date</th> 32.52 - <td tal:content="context/date"></td> 32.53 -</tr> 32.54 -</table> 32.55 - 32.56 -<table class="messages"> 32.57 - <tr><th colspan=2 class="header" i18n:translate="">Content</th></tr> 32.58 - <tr> 32.59 - <td class="content" colspan=2><pre tal:content="structure context/content/hyperlinked"></pre></td> 32.60 - </tr> 32.61 -</table> 32.62 - 32.63 -<table class="files" tal:condition="context/files"> 32.64 - <tr><th colspan="2" class="header" i18n:translate="">Files</th></tr> 32.65 - <tr> 32.66 - <th i18n:translate="">File name</th> 32.67 - <th i18n:translate="">Uploaded</th> 32.68 - </tr> 32.69 - <tr tal:repeat="file context/files"> 32.70 - <td> 32.71 - <a tal:attributes="href string:file${file/id}/${file/name}" 32.72 - tal:content="file/name">dld link</a> 32.73 - </td> 32.74 - <td> 32.75 - <span tal:content="file/creator">creator's name</span>, 32.76 - <span tal:content="file/creation">creation date</span> 32.77 - </td> 32.78 - </tr> 32.79 -</table> 32.80 - 32.81 -<tal:block tal:replace="structure context/history" /> 32.82 - 32.83 -</div> 32.84 -</td> 32.85 - 32.86 -</tal:block> 32.87 -<!-- SHA: e4a1c71477429a3750a6013098faa17f75d38f5d -->
33.1 --- a/bugs/templates/slitaz/html/page.html Wed Jan 15 01:04:10 2014 +0100 33.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 33.3 @@ -1,396 +0,0 @@ 33.4 -<!-- vim:sw=2 sts=2 33.5 ---><tal:block metal:define-macro="icing" 33.6 -><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 33.7 - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 33.8 -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 33.9 -<head> 33.10 -<title metal:define-slot="head_title">title goes here</title> 33.11 -<link rel="stylesheet" type="text/css" href="@@file/style.css" /> 33.12 -<link rel="shortcut icon" href="@@file/favicon.ico" /> 33.13 -<meta http-equiv="Content-Type" 33.14 - tal:attributes="content string:text/html;; charset=${request/client/charset}" /> 33.15 -<script tal:replace="structure request/base_javascript"> 33.16 -</script> 33.17 -<metal:x define-slot="more-javascript" /> 33.18 - 33.19 -</head> 33.20 -<body> 33.21 - 33.22 -<!-- Header --> 33.23 -<div id="header"> 33.24 - <div id="logo"></div> 33.25 - <div id="network"> 33.26 - <a href="http://www.slitaz.org/"> 33.27 - <img src="http://tank.slitaz.org/images/network.png" 33.28 - alt="network.png" /></a> 33.29 - <a href="http://scn.slitaz.org/">Community</a> 33.30 - <a href="http://doc.slitaz.org/">Doc</a> 33.31 - <a href="http://forum.slitaz.org/">Forum</a> 33.32 - <a href="http://bugs.slitaz.org/">Bugs</a> 33.33 - <a href="http://hg.slitaz.org/?sort=lastchange">Hg</a> 33.34 - </div> 33.35 - <h1><a href="http://bugs.slitaz.org/">SliTaz Bugs</a></h1> 33.36 -</div> 33.37 - 33.38 -<!-- Block --> 33.39 -<div id="block"> 33.40 - <!-- Navigation 33.41 - <div id="block_nav" style="text-align: center; padding: 10px;"> 33.42 - 33.43 - </div>--> 33.44 - <!-- Information/image --> 33.45 - <div id="block_info"> 33.46 - <h4>SliTaz Bug Tracking System</h4> 33.47 - <p> 33.48 - Lets you track bugs, feature requests and tasks in one easy to 33.49 - use and centralized place. 33.50 - </p> 33.51 - </div> 33.52 -</div> 33.53 - 33.54 -<table class="body" 33.55 - tal:define=" 33.56 -kw_edit python:request.user.hasPermission('Edit', 'keyword'); 33.57 -kw_create python:request.user.hasPermission('Create', 'keyword'); 33.58 -kw_edit_link python:kw_edit and db.keyword.list(); 33.59 -columns string:id,activity,title,creator,status; 33.60 -columns_showall string:id,activity,title,creator,assignedto,status; 33.61 -status_notresolved string:-1,1,2,3,4,5,6,7; 33.62 -" 33.63 -> 33.64 - 33.65 -<tr> 33.66 - <td class="page-header-left"> </td> 33.67 - <td class="page-header-top"> 33.68 - <div id="searchbox"> 33.69 - <form method="get" action="issue"> 33.70 - <input type="hidden" name="@columns" 33.71 - tal:attributes="value columns_showall" 33.72 - value="id,activity,title,creator,assignedto,status" /> 33.73 - <input type="hidden" name="@sort" value="activity" /> 33.74 - <input type="hidden" name="@group" value="priority" /> 33.75 - <input id="search-text" name="@search_text" size="10" 33.76 - tal:attributes="value request/search_text | default" /> 33.77 - <input type="submit" id="submit" name="submit" value="Search" 33.78 - i18n:attributes="value" /> 33.79 - </form> 33.80 - </div> 33.81 - <div id="body-title"> 33.82 - <h2><span metal:define-slot="body_title">body title</span></h2> 33.83 - </div> 33.84 - </td> 33.85 -</tr> 33.86 - 33.87 -<tr> 33.88 - <td rowspan="2" valign="top" class="sidebar"> 33.89 - <p class="classblock" 33.90 - tal:condition="python:request.user.hasPermission('View', 'query')"> 33.91 - <span i18n:translate="" 33.92 - ><b>Your Queries</b> (<a href="query?@template=edit">edit</a>)</span><br /> 33.93 - <tal:block tal:repeat="qs request/user/queries"> 33.94 - <a href="#" tal:attributes="href string:${qs/klass}?${qs/url}&@dispname=${qs/name}" 33.95 - tal:content="qs/name">link</a><br /> 33.96 - </tal:block> 33.97 - </p> 33.98 - 33.99 - <form method="post" tal:attributes="action request/base"> 33.100 - <p class="classblock" 33.101 - tal:condition="python:request.user.hasPermission('View', 'issue')"> 33.102 - <b i18n:translate="">Issues</b><br /> 33.103 - <span tal:condition="python:request.user.hasPermission('Create', 'issue')"> 33.104 - <a href="issue?@template=item" i18n:translate="">Create New</a><br /> 33.105 - </span> 33.106 - <a href="#" 33.107 - tal:attributes="href python:request.indexargs_url('issue', { 33.108 - '@sort': '-activity', 33.109 - '@group': 'priority', 33.110 - '@filter': 'status,assignedto', 33.111 - '@columns': columns, 33.112 - '@search_text': '', 33.113 - 'status': status_notresolved, 33.114 - 'assignedto': '-1', 33.115 - '@dispname': i18n.gettext('Show Unassigned'), 33.116 - })" 33.117 - i18n:translate="">Show Unassigned</a><br /> 33.118 - <a href="#" 33.119 - tal:attributes="href python:request.indexargs_url('issue', { 33.120 - '@sort': '-activity', 33.121 - '@group': 'priority', 33.122 - '@filter': 'status', 33.123 - '@columns': columns_showall, 33.124 - '@search_text': '', 33.125 - 'status': status_notresolved, 33.126 - '@dispname': i18n.gettext('Show All'), 33.127 - })" 33.128 - i18n:translate="">Show All</a><br /> 33.129 - <a href="issue?@template=search" i18n:translate="">Search</a><br /> 33.130 - <input type="submit" class="form-small" value="Show issue:" 33.131 - i18n:attributes="value" /><input class="form-small" size="4" 33.132 - type="text" name="@number" /> 33.133 - <input type="hidden" name="@type" value="issue" /> 33.134 - <input type="hidden" name="@action" value="show" /> 33.135 - </p> 33.136 - </form> 33.137 - 33.138 - <p class="classblock" 33.139 - tal:condition="python:kw_edit or kw_create"> 33.140 - <b i18n:translate="">Keywords</b><br /> 33.141 - <span tal:condition="python:request.user.hasPermission('Create', 'keyword')"> 33.142 - <a href="keyword?@template=item" i18n:translate="">Create New</a><br /> 33.143 - </span> 33.144 - <span tal:condition="kw_edit_link"> 33.145 - <a href="keyword?@template=item" i18n:translate="">Edit Existing</a><br /> 33.146 - </span> 33.147 - </p> 33.148 - 33.149 - <p class="classblock" 33.150 - tal:condition="python:request.user.hasPermission('View', 'user')"> 33.151 - <b i18n:translate="">Administration</b><br /> 33.152 - <span tal:condition="python:request.user.hasPermission('Edit', None)"> 33.153 - <a href="home?@template=classlist" i18n:translate="">Class List</a><br /> 33.154 - </span> 33.155 - <span tal:condition="python:request.user.hasPermission('View', 'user') 33.156 - or request.user.hasPermission('Edit', 'user')"> 33.157 - <a href="user" i18n:translate="">User List</a><br /> 33.158 - </span> 33.159 - <a tal:condition="python:request.user.hasPermission('Create', 'user')" 33.160 - href="user?@template=item" i18n:translate="">Add User</a> 33.161 - </p> 33.162 - 33.163 - <form method="post" tal:condition="python:request.user.username=='anonymous'" 33.164 - tal:attributes="action request/base"> 33.165 - <p class="userblock"> 33.166 - <b i18n:translate="">Login</b><br /> 33.167 - <input size="18" name="__login_name" /><br /> 33.168 - <input size="18" type="password" name="__login_password" /><br /> 33.169 - <input type="hidden" name="@action" value="Login" /> 33.170 - <input type="checkbox" name="remember" id="remember" /> 33.171 - <label for="remember" i18n:translate="">Remember me?</label><br /> 33.172 - <input type="submit" value="Login" i18n:attributes="value" /><br /> 33.173 - <input type="hidden" name="__came_from" 33.174 - tal:attributes="value string:${request/base}${request/env/PATH_INFO}" /> 33.175 - <span tal:replace="structure request/indexargs_form" /> 33.176 - <a href="user?@template=register" 33.177 - tal:condition="python:request.user.hasPermission('Register', 'user')" 33.178 - i18n:translate="">Register</a><br /> 33.179 - <a href="user?@template=forgotten" i18n:translate="">Lost your login?</a><br /> 33.180 - </p> 33.181 - </form> 33.182 - 33.183 - <p class="userblock" tal:condition="python:request.user.username != 'anonymous'"> 33.184 - <b i18n:translate="">Hello, <span i18n:name="user" 33.185 - tal:replace="python:request.user.username.plain(escape=1)">username</span></b><br /> 33.186 - <a href="#" 33.187 - tal:attributes="href python:request.indexargs_url('issue', { 33.188 - '@sort': '-activity', 33.189 - '@group': 'priority', 33.190 - '@filter': 'status,assignedto', 33.191 - '@columns': 'id,activity,title,creator,status', 33.192 - '@search_text': '', 33.193 - 'status': status_notresolved, 33.194 - 'assignedto': request.user.id, 33.195 - '@dispname': i18n.gettext('Your Issues'), 33.196 - })" 33.197 - i18n:translate="">Your Issues</a><br /> 33.198 - <a href="#" tal:attributes="href string:user${request/user/id}" 33.199 - i18n:translate="">Your Details</a><br /> 33.200 - <a href="#" tal:attributes="href python:request.indexargs_url('', 33.201 - {'@action':'logout'})" i18n:translate="">Logout</a> 33.202 - </p> 33.203 - </td> 33.204 - <td> 33.205 - <p tal:condition="options/error_message | nothing" class="error-message" 33.206 - tal:repeat="m options/error_message" tal:content="structure m" /> 33.207 - <p tal:condition="options/ok_message | nothing" class="ok-message"> 33.208 - <span tal:repeat="m options/ok_message" 33.209 - tal:content="structure string:$m <br/ > " /> 33.210 - <a class="form-small" tal:attributes="href request/current_url" 33.211 - i18n:translate="">clear this message</a> 33.212 - </p> 33.213 - </td> 33.214 -</tr> 33.215 -<tr> 33.216 - <td class="content" metal:define-slot="content">Page content goes here</td> 33.217 -</tr> 33.218 - 33.219 -</table> 33.220 - 33.221 -<pre tal:condition="request/form/debug | nothing" tal:content="request"> 33.222 -</pre> 33.223 - 33.224 -<!-- Footer --> 33.225 -<div id="footer"> 33.226 - Copyright © <span class="year"></span> 33.227 - <a href="http://www.slitaz.org/">SliTaz</a> - Network: 33.228 - <a href="http://scn.slitaz.org/">Community</a> 33.229 - <a href="http://doc.slitaz.org/">Doc</a> 33.230 - <a href="http://forum.slitaz.org/">Forum</a> 33.231 - <a href="http://pkgs.slitaz.org/">Packages</a> 33.232 - <a href="http://bugs.slitaz.org/">Bugs</a> 33.233 - <a href="http://hg.slitaz.org/">Hg</a> 33.234 - <p> 33.235 - SliTaz @ 33.236 - <a href="http://twitter.com/slitaz">Twitter</a> 33.237 - <a href="http://www.facebook.com/slitaz">Facebook</a> 33.238 - <a href="http://distrowatch.com/slitaz">Distrowatch</a> 33.239 - <a href="http://en.wikipedia.org/wiki/SliTaz">Wikipedia</a> 33.240 - <a href="http://flattr.com/profile/slitaz">Flattr</a> 33.241 - </p> 33.242 -</div> 33.243 - 33.244 -</body> 33.245 -</html> 33.246 -</tal:block> 33.247 - 33.248 -<!-- 33.249 -The following macros are intended to be used in search pages. 33.250 - 33.251 -The invoking context must define a "name" variable which names the 33.252 -property being searched. 33.253 - 33.254 -See issue.search.html in the classic template for examples. 33.255 ---> 33.256 - 33.257 -<!-- creates a th and a label: --> 33.258 -<th metal:define-macro="th_label" 33.259 - tal:define="required required | python:[]" 33.260 - tal:attributes="class python:(name in required) and 'required' or nothing"> 33.261 - <label tal:attributes="for name" tal:content="label" i18n:translate="">text</label> 33.262 - <metal:x define-slot="behind_the_label" /> 33.263 -</th> 33.264 - 33.265 -<td metal:define-macro="search_input"> 33.266 - <input tal:attributes="value python:request.form.getvalue(name) or nothing; 33.267 - name name; 33.268 - id name" /> 33.269 -</td> 33.270 - 33.271 -<td metal:define-macro="search_date"> 33.272 - <input tal:attributes="value python:request.form.getvalue(name) or nothing; 33.273 - name name; 33.274 - id name" /> 33.275 - <a class="classhelp" 33.276 - tal:attributes="href python:'''javascript:help_window('issue?@template=calendar&property=%s&form=itemSynopsis', 300, 200)'''%name">(cal)</a> 33.277 -</td> 33.278 - 33.279 -<td metal:define-macro="search_popup"> 33.280 - <!-- 33.281 - context needs to specify the popup "columns" as a comma-separated 33.282 - string (eg. "id,title" or "id,name,description") as well as name 33.283 - --> 33.284 - <input tal:attributes="value python:request.form.getvalue(name) or nothing; 33.285 - name name; 33.286 - id name" /> 33.287 - <span tal:replace="structure python:db[db_klass].classhelp(columns, 33.288 - property=name)" /> 33.289 -</td> 33.290 - 33.291 -<td metal:define-macro="search_select"> 33.292 - <select tal:attributes="name name; id name" 33.293 - tal:define="value python:request.form.getvalue(name)"> 33.294 - <option value="" i18n:translate="">don't care</option> 33.295 - <metal:slot define-slot="extra_options" /> 33.296 - <option value="" i18n:translate="" disabled="disabled">------------</option> 33.297 - <option tal:repeat="s python:db[db_klass].list()" 33.298 - tal:attributes="value s/id; selected python:value == s.id" 33.299 - tal:content="python:s[db_content]"></option> 33.300 - </select> 33.301 -</td> 33.302 - 33.303 -<!-- like search_select, but translates the further values. 33.304 -Could extend it (METAL 1.1 attribute "extend-macro") 33.305 ---> 33.306 -<td metal:define-macro="search_select_translated"> 33.307 - <select tal:attributes="name name; id name" 33.308 - tal:define="value python:request.form.getvalue(name)"> 33.309 - <option value="" i18n:translate="">don't care</option> 33.310 - <metal:slot define-slot="extra_options" /> 33.311 - <option value="" i18n:translate="" disabled="disabled">------------</option> 33.312 - <option tal:repeat="s python:db[db_klass].list()" 33.313 - tal:attributes="value s/id; selected python:value == s.id" 33.314 - tal:content="python:s[db_content]" 33.315 - i18n:translate=""></option> 33.316 - </select> 33.317 -</td> 33.318 - 33.319 -<!-- currently, there is no convenient API to get a list of all roles --> 33.320 -<td metal:define-macro="search_select_roles" 33.321 - tal:define="onchange onchange | nothing"> 33.322 - <select name=roles id=roles tal:attributes="onchange onchange"> 33.323 - <option value="" i18n:translate="">don't care</option> 33.324 - <option value="" i18n:translate="" disabled="disabled">------------</option> 33.325 - <option value="User">User</option> 33.326 - <option value="Admin">Admin</option> 33.327 - <option value="Anonymous">Anonymous</option> 33.328 - </select> 33.329 -</td> 33.330 - 33.331 -<td metal:define-macro="search_multiselect"> 33.332 - <input tal:attributes="value python:request.form.getvalue(name) or nothing; 33.333 - name name; 33.334 - id name"> 33.335 - <span tal:replace="structure python:db[db_klass].classhelp(db_content, 33.336 - property=name, width='600')" /> 33.337 -</td> 33.338 - 33.339 -<td metal:define-macro="search_checkboxes"> 33.340 - <ul class="search-checkboxes" 33.341 - tal:define="value python:request.form.getvalue(name); 33.342 - values python:value and value.split(',') or []"> 33.343 - <li tal:repeat="s python:db[db_klass].list()"> 33.344 - <input type="checkbox" tal:attributes="name name; id string:$name-${s/id}; 33.345 - value s/id; checked python:s.id in values" /> 33.346 - <label tal:attributes="for string:$name-${s/id}" 33.347 - tal:content="python:s[db_content]" /> 33.348 - </li> 33.349 - <li metal:define-slot="no_value_item"> 33.350 - <input type="checkbox" value="-1" tal:attributes="name name; 33.351 - id string:$name--1; checked python:value == '-1'" /> 33.352 - <label tal:attributes="for string:$name--1" i18n:translate="">no value</label> 33.353 - </li> 33.354 - </ul> 33.355 -</td> 33.356 - 33.357 -<td metal:define-macro="column_input"> 33.358 - <input type="checkbox" name="@columns" 33.359 - tal:attributes="value name; 33.360 - checked python:name in cols" /> 33.361 -</td> 33.362 - 33.363 -<td metal:define-macro="sort_input"> 33.364 - <input type="radio" name="@sort" 33.365 - tal:attributes="value name; 33.366 - checked python:name == sort_on"> / 33.367 -</td> 33.368 - 33.369 -<td metal:define-macro="group_input"> 33.370 - <input type="radio" name="@group" 33.371 - tal:attributes="value name; 33.372 - checked python:name == group_on" /> 33.373 -</td> 33.374 - 33.375 -<!-- 33.376 -The following macros are intended for user editing. 33.377 - 33.378 -The invoking context must define a "name" variable which names the 33.379 -property being searched; the "edit_ok" variable tells whether the 33.380 -current user is allowed to edit. 33.381 - 33.382 -See user.item.html in the classic template for examples. 33.383 ---> 33.384 -<script metal:define-macro="user_utils" type="text/javascript" src="@@file/user_utils.js"></script> 33.385 - 33.386 -<!-- src: value will be re-used for other input fields --> 33.387 -<input metal:define-macro="user_src_input" 33.388 - type="text" tal:attributes="onblur python:edit_ok and 'split_name(this)'; 33.389 - id name; name name; value value; readonly not:edit_ok" 33.390 - value="heinz.kunz" /> 33.391 -<!-- normal: no re-using --> 33.392 -<input metal:define-macro="user_normal_input" type="text" 33.393 - tal:attributes="id name; name name; value value; readonly not:edit_ok" 33.394 - value="heinz" /> 33.395 -<!-- password: type; no initial value --> 33.396 - <input metal:define-macro="user_pw_input" type="password" 33.397 - tal:attributes="id name; name name; readonly not:edit_ok" value="" /> 33.398 - <input metal:define-macro="user_confirm_input" type="password" 33.399 - tal:attributes="id name; name string:@confirm@$name; readonly not:edit_ok" value="" />
34.1 --- a/bugs/templates/slitaz/html/query.edit.html Wed Jan 15 01:04:10 2014 +0100 34.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 34.3 @@ -1,112 +0,0 @@ 34.4 -<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar--> 34.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 34.6 -<title metal:fill-slot="head_title" i18n:translate="" 34.7 - >"Your Queries" Editing - <span tal:replace="config/TRACKER_NAME" 34.8 - i18n:name="tracker" /></title> 34.9 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 34.10 - i18n:translate="">"Your Queries" Editing</span> 34.11 - 34.12 -<td class="content" metal:fill-slot="content"> 34.13 - 34.14 -<span tal:condition="not:context/is_edit_ok" 34.15 - i18n:translate="">You are not allowed to edit queries.</span> 34.16 - 34.17 -<script language="javascript"> 34.18 -// This exists solely because I can't figure how to get the & into an 34.19 -// attributes TALES expression, and so it keeps getting quoted. 34.20 -function retire(qid) { 34.21 - window.location = 'query'+qid+'?@action=retire&@template=edit'; 34.22 -} 34.23 -</script> 34.24 - 34.25 -<form method="post" onSubmit="return submit_once()" action="query" 34.26 - enctype="multipart/form-data" tal:condition="context/is_edit_ok"> 34.27 - 34.28 -<table class="list" width="100%" 34.29 - tal:define="uid request/user/id; mine request/user/queries"> 34.30 - 34.31 -<tr><th i18n:translate="">Query</th> 34.32 - <th i18n:translate="">Include in "Your Queries"</th> 34.33 - <th i18n:translate="">Edit</th> 34.34 - <th i18n:translate="">Private to you?</th> 34.35 - <th> </th> 34.36 -</tr> 34.37 - 34.38 -<tr tal:repeat="query mine"> 34.39 - <tal:block condition="query/is_retired"> 34.40 - 34.41 - <td><a tal:attributes="href string:${query/klass}?${query/url}" 34.42 - tal:content="query/name">query</a></td> 34.43 - 34.44 - <td metal:define-macro="include"> 34.45 - <select tal:condition="python:query.id not in mine" 34.46 - tal:attributes="name string:user${uid}@add@queries"> 34.47 - <option value="" i18n:translate="">leave out</option> 34.48 - <option tal:attributes="value query/id" i18n:translate="">include</option> 34.49 - </select> 34.50 - <select tal:condition="python:query.id in mine" 34.51 - tal:attributes="name string:user${uid}@remove@queries"> 34.52 - <option value="" i18n:translate="">leave in</option> 34.53 - <option tal:attributes="value query/id" i18n:translate="">remove</option> 34.54 - </select> 34.55 - </td> 34.56 - 34.57 - <td colspan="3" i18n:translate="">[query is retired]</td> 34.58 - 34.59 - <!-- <td> maybe offer "restore" some day </td> --> 34.60 - </tal:block> 34.61 -</tr> 34.62 - 34.63 -<tr tal:repeat="query mine"> 34.64 - <tal:block condition="not:query/is_retired"> 34.65 - <td><a tal:attributes="href string:${query/klass}?${query/url}" 34.66 - tal:content="query/name">query</a></td> 34.67 - 34.68 - <td metal:use-macro="template/macros/include" /> 34.69 - 34.70 - <td><a tal:attributes="href string:query${query/id}" i18n:translate="">edit</a></td> 34.71 - 34.72 - <td> 34.73 - <select tal:attributes="name string:query${query/id}@private_for"> 34.74 - <option tal:attributes="selected python:query.private_for == uid; 34.75 - value uid" i18n:translate="">yes</option> 34.76 - <option tal:attributes="selected python:query.private_for == None" 34.77 - value="-1" i18n:translate="">no</option> 34.78 - </select> 34.79 - </td> 34.80 - 34.81 - <td> 34.82 - <input type="button" value="Delete" i18n:attributes="value" 34.83 - tal:attributes="onClick python:'''retire('%s')'''%query.id"> 34.84 - </td> 34.85 - </tal:block> 34.86 -</tr> 34.87 - 34.88 -<tr tal:define="queries python:db.query.filter(filterspec={'private_for':None})" 34.89 - tal:repeat="query queries"> 34.90 - <tal:block condition="python: query.creator != uid"> 34.91 - <td><a tal:attributes="href string:${query/klass}?${query/url}" 34.92 - tal:content="query/name">query</a></td> 34.93 - 34.94 - <td metal:use-macro="template/macros/include" /> 34.95 - 34.96 - <td colspan="3" tal:condition="query/is_edit_ok"> 34.97 - <a tal:attributes="href string:query${query/id}" i18n:translate="">edit</a> 34.98 - </td> 34.99 - <td tal:condition="not:query/is_edit_ok" colspan="3" 34.100 - i18n:translate="">[not yours to edit]</td> 34.101 - </tal:block> 34.102 -</tr> 34.103 - 34.104 -<tr><td colspan="5"> 34.105 - <input type="hidden" name="@action" value="edit"> 34.106 - <input type="hidden" name="@template" value="edit"> 34.107 - <input type="submit" value="Save Selection" i18n:attributes="value"> 34.108 -</td></tr> 34.109 - 34.110 -</table> 34.111 - 34.112 -</form> 34.113 -</td> 34.114 -</tal:block> 34.115 -<!-- SHA: 381522a1ff6675e1da99ccc7c2b012e5e1e5f7b8 -->
35.1 --- a/bugs/templates/slitaz/html/query.item.html Wed Jan 15 01:04:10 2014 +0100 35.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 35.3 @@ -1,4 +0,0 @@ 35.4 -<!-- query.item --> 35.5 -<span tal:replace="structure context/renderQueryForm" /> 35.6 - 35.7 -<!-- SHA: 027820442d9341987bbb8b732cd6233aa1e56bed -->
36.1 --- a/bugs/templates/slitaz/html/style.css Wed Jan 15 01:04:10 2014 +0100 36.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 36.3 @@ -1,630 +0,0 @@ 36.4 -/* 36.5 - CSS style for SliTaz Network - (C) 2014 SliTaz GNU/Linux 36.6 -*/ 36.7 - 36.8 -html { 36.9 - min-height: 102%; 36.10 -} 36.11 - 36.12 -body { 36.13 - background: #ffffff; 36.14 - color: black; 36.15 - font: 13px sans-serif, vernada, arial; 36.16 - margin: 0; 36.17 - min-width: 780px; 36.18 - height: 100%; 36.19 -} 36.20 - 36.21 -a { text-decoration: underline; color: #215090; } 36.22 -a:hover { text-decoration: none; color: blue; } 36.23 -img { border: 0pt none; vertical-align: middle; } 36.24 -h2 { color: #444; margin: 2px 0;} 36.25 -h3 { color: #666; font-size: 140%; } 36.26 -h4 { color: #888; font-size: 120%; } 36.27 - 36.28 -/* Header */ 36.29 - 36.30 -#header { 36.31 - height: 40px; 36.32 - background: #351a0a; 36.33 -} 36.34 - 36.35 -#header h1 { 36.36 - margin: 0; 36.37 - padding: 8px 0 0 42px; 36.38 - width: 250px; 36.39 -} 36.40 - 36.41 -#header h1 a { 36.42 - color: white; 36.43 - text-decoration: none; 36.44 - font-size: 20px; 36.45 - font-style: italic; 36.46 -} 36.47 - 36.48 -#header h1 a:hover, #network a:hover { 36.49 - color: #d66018; 36.50 -} 36.51 - 36.52 -/* Logo */ 36.53 - 36.54 -#logo { 36.55 - background: url(http://tank.slitaz.org/images/logo.png) no-repeat left; 36.56 - position: absolute; 36.57 - float: left; 36.58 - left: 0px; 36.59 - top: 0px; 36.60 - width: 40px; 36.61 - height: 40px; 36.62 -} 36.63 - 36.64 -/* SliTaz Network */ 36.65 - 36.66 -#network { 36.67 - float: right; 36.68 - padding: 10px 5px 0; 36.69 - font-size: 12px; 36.70 -} 36.71 - 36.72 -#network a { padding: 0 6px; } 36.73 - 36.74 -/* Block */ 36.75 - 36.76 -#block { 36.77 - min-height: 104px; 36.78 - background: #d66018; 36.79 - padding: 26px 10% 0px; 36.80 - text-align: center; 36.81 - color: #333; 36.82 - border-bottom: 1px solid #f5f5f5; 36.83 -} 36.84 - 36.85 -#block_info { 36.86 - text-align: justify; 36.87 - width: 48%; 36.88 - padding: 10px 10px 0 0; 36.89 -} 36.90 - 36.91 -#block a, #network a { 36.92 - color: #fff; 36.93 - font-weight: bold; 36.94 - text-decoration: none; 36.95 -} 36.96 - 36.97 -#block h4 { 36.98 - color: #351a0a; 36.99 - margin: 0px; 36.100 - font-weight: bold; 36.101 - font-size: 110%; 36.102 -} 36.103 - 36.104 -#block_info p { margin: 6px 0; padding: 0 12px 0 0; } 36.105 -#block_info a { font-weight: normal; } 36.106 -#block ul { list-style-type: square; } 36.107 -#block a:hover { color: #351a0a; } 36.108 - 36.109 -/* Navigation */ 36.110 - 36.111 -#block_nav { 36.112 - background: #cc5b17; 36.113 - padding: 10px 10px 40px; 36.114 - text-align: justify; 36.115 - width: 48%; 36.116 - float: right; 36.117 -} 36.118 - 36.119 -#block_nav ul { 36.120 - list-style-type: none; 36.121 - margin: 6px 0; 36.122 - padding: 0; 36.123 -} 36.124 - 36.125 -#block_nav h4 img { 36.126 - margin: 0 4px 0 0; 36.127 - padding: 0; 36.128 -} 36.129 - 36.130 -#searchbox input[type=submit] { 36.131 - padding: 4px; 36.132 - margin-left: -5px; 36.133 - background-color: #f1f1f1; 36.134 - border: 1px solid #ddd; 36.135 - cursor: pointer; 36.136 - color: #000; 36.137 - font-weight: bold; 36.138 - border-top-right-radius: 4px; 36.139 - border-bottom-right-radius: 4px; 36.140 - border-top-left-radius: 0px; 36.141 - border-bottom-left-radius: 0px; 36.142 -} 36.143 - 36.144 -input#search-text { 36.145 - border: 1px solid #ddd; 36.146 - padding: 4px; 36.147 - height: 17px; 36.148 - margin: 0; 36.149 - width: 200px; 36.150 - border-top-left-radius: 4px; 36.151 - border-bottom-left-radius: 4px; 36.152 -} 36.153 - 36.154 -input[type=submit] { 36.155 - padding: 2px; 36.156 - margin: 2px 0; 36.157 - background-color: #f1f1f1; 36.158 - border: 1px solid #ddd; 36.159 - cursor: pointer; 36.160 - color: #000; 36.161 -} 36.162 - 36.163 -input[type=submit]:hover, #searchbox input[type=submit]:hover { 36.164 - background-color: #ddd; 36.165 - border: 1px solid #999; 36.166 -} 36.167 - 36.168 -input[type=text] { height: 18px; margin: 4px 0; } 36.169 - 36.170 - 36.171 -/* Round corner */ 36.172 - 36.173 -input[type=submit], p.ok-message, p.error-message, table.form, 36.174 -table.messages td { 36.175 - -moz-border-radius: 4px; 36.176 - -webkit-border-radius: 4px; 36.177 - border-radius: 4px; 36.178 -} 36.179 - 36.180 -/* Footer */ 36.181 - 36.182 -#footer { 36.183 - background: #f1f1f1; 36.184 - text-align: center; 36.185 - border-top: 1px solid #ddd; 36.186 - padding: 40px; 36.187 - color: #666; 36.188 - clear: both; 36.189 - margin-top: 160px; 36.190 - margin-bottom: -2%; 36.191 -} 36.192 - 36.193 -#footer a { color: #666; padding: 0 2px; } 36.194 - 36.195 -.year:after { 36.196 - /* content: "2007-2014"; */ 36.197 - content: "2014"; 36.198 -} 36.199 - 36.200 -/* Modified Roundup style */ 36.201 - 36.202 -#searchbox { 36.203 - float: right; 36.204 -} 36.205 - 36.206 -td.sidebar { 36.207 - white-space: nowrap; 36.208 - position: absolute; 36.209 - right: 10px; 36.210 - top: 230px; 36.211 - border-left: 1px solid #ddd; 36.212 - padding: 0 10px; 36.213 -} 36.214 - 36.215 -td.sidebar a { 36.216 - text-decoration: none; 36.217 -} 36.218 - 36.219 -td.page-header-left { 36.220 - padding: 5px; 36.221 -} 36.222 - 36.223 -td.page-header-top { 36.224 - padding: 10px; 36.225 - position: absolute; 36.226 - left: 20px; 36.227 - right: 20px; 36.228 - width: auto; 36.229 -} 36.230 - 36.231 -td.content { 36.232 - padding: 30px 220px 20px 30px; 36.233 - vertical-align: top; 36.234 - width: 100%; 36.235 -} 36.236 - 36.237 -p.ok-message { color: #000; } 36.238 -p.error-message { color: red; } 36.239 -p.ok-message, p.error-message { 36.240 - background-color: #f8f8f8; 36.241 - padding: 5px; 36.242 - font-weight: bold; 36.243 - 36.244 - position: absolute; 36.245 - right: 10%; 36.246 - top: 70px; 36.247 - min-width: 220px; 36.248 -} 36.249 - 36.250 -td.sidebar p.classblock { 36.251 - padding: 12px 5px 0; 36.252 - margin: 0; 36.253 -} 36.254 - 36.255 -td.sidebar p.classblock:first-child { padding: 0px 5px 0; } 36.256 - 36.257 -td.sidebar p.userblock { 36.258 - padding: 12px 5px 0; 36.259 - margin: 0; 36.260 -} 36.261 - 36.262 -table.form { 36.263 - margin: 0 0 10px; 36.264 - padding: 10px; 36.265 - border-spacing: 0; 36.266 - border-collapse: separate; 36.267 - background-color: #f8f8f8; 36.268 - border: 1px solid #ddd; 36.269 -} 36.270 - 36.271 -.index-controls { 36.272 - margin: 20px 0; 36.273 -} 36.274 - 36.275 -table.body { 36.276 - border: 0; 36.277 - padding: 0; 36.278 - border-spacing: 0; 36.279 - border-collapse: separate; 36.280 -} 36.281 - 36.282 -/* don't display the sidebar when printing */ 36.283 -@media print { 36.284 - td.page-header-left { 36.285 - display: none; 36.286 - } 36.287 - td.sidebar { 36.288 - display: none; 36.289 - } 36.290 - .index-controls { 36.291 - display: none; 36.292 - } 36.293 - #searchbox { 36.294 - display: none; 36.295 - } 36.296 -} 36.297 - 36.298 -form { 36.299 - margin: 0; 36.300 -} 36.301 - 36.302 -textarea { 36.303 - font-family: monospace; 36.304 -} 36.305 - 36.306 -.form-small { 36.307 - padding: 0; 36.308 - font-size: 75%; 36.309 -} 36.310 - 36.311 -td.date, th.date { 36.312 - white-space: nowrap; 36.313 - width: 130px; 36.314 -} 36.315 - 36.316 -p.error-message a[href] { 36.317 - color: white; 36.318 - text-decoration: underline; 36.319 -} 36.320 - 36.321 -/* style for search forms */ 36.322 -ul.search-checkboxes { 36.323 - display: inline; 36.324 - padding: 0; 36.325 - list-style: none; 36.326 -} 36.327 -ul.search-checkboxes > li { 36.328 - display: inline; 36.329 - padding-right: .5em; 36.330 -} 36.331 - 36.332 -/* style for forms */ 36.333 - 36.334 -table.form th { 36.335 - color: #555; 36.336 - text-align: right; 36.337 - vertical-align: top; 36.338 - font-weight: normal; 36.339 - white-space: nowrap; 36.340 - padding: 0 4px 0 0; 36.341 -} 36.342 - 36.343 -table.form th.header { 36.344 - font-weight: bold; 36.345 - background-color: #f1f1f1; 36.346 - text-align: left; 36.347 -} 36.348 - 36.349 -table.form th.required { 36.350 - font-weight: bold; 36.351 - color: #b20000; 36.352 -} 36.353 - 36.354 -table.form td { 36.355 - color: #000; 36.356 - empty-cells: show; 36.357 - vertical-align: top; 36.358 -} 36.359 - 36.360 -table.form td.optional { 36.361 - font-weight: bold; 36.362 - font-style: italic; 36.363 -} 36.364 - 36.365 -table.form td.html { 36.366 - color: #000; 36.367 -} 36.368 - 36.369 -/* style for lists */ 36.370 -table.list { 36.371 - border-spacing: 0 4px; 36.372 - border-collapse: separate; 36.373 - width: 100%; 36.374 -} 36.375 - 36.376 -table.list th { 36.377 - padding: 0px; 36.378 - color: #888; 36.379 - background-color: #fff; 36.380 - vertical-align: top; 36.381 - empty-cells: show; 36.382 - text-align: left; 36.383 -} 36.384 -table.list th a[href]:hover { color: #333 } 36.385 -table.list th a[href]:link { color: #333 } 36.386 -table.list th a[href] { color: #333 } 36.387 -table.list th.group { 36.388 - background-color: #f8f8f8; 36.389 - color: #666; 36.390 - text-align: left; 36.391 - padding: 4px; 36.392 - font-size: 120%; 36.393 - border: 1px solid #ddd; 36.394 - border-radius: 4px; 36.395 -} 36.396 -table.list th.group:first-letter { 36.397 - text-transform: uppercase; 36.398 -} 36.399 - 36.400 -table.list td { 36.401 - padding: 2px; 36.402 - color: #000; 36.403 - vertical-align: top; 36.404 - empty-cells: show; 36.405 - /* border-bottom: 1px solid #ddd; */ 36.406 -} 36.407 - 36.408 -table.list tr.navigation th { 36.409 - width: 33%; 36.410 - border-style: hidden; 36.411 - text-align: center; 36.412 -} 36.413 -table.list tr.navigation td { 36.414 - border: none 36.415 -} 36.416 -table.list tr.navigation th:first-child { 36.417 - text-align: left; 36.418 -} 36.419 -table.list tr.navigation th:last-child { 36.420 - text-align: right; 36.421 -} 36.422 - 36.423 -/* style for message displays */ 36.424 -table.messages { 36.425 - border-spacing: 0; 36.426 - border-collapse: separate; 36.427 - width: 100%; 36.428 -} 36.429 - 36.430 -table.messages th.header { 36.431 - padding: 20px 0 4px; 36.432 - font-weight: bold; 36.433 - background-color: white; 36.434 - color: #666; 36.435 - font-size: 140%; 36.436 -} 36.437 - 36.438 -table.messages th { 36.439 - font-weight: bold; 36.440 - color: black; 36.441 - text-align: left; 36.442 - padding: 10px 0 2px; 36.443 -} 36.444 - 36.445 -table.messages th a { 36.446 - text-decoration: none; 36.447 -} 36.448 - 36.449 -table.messages td { 36.450 - font-family: monospace; 36.451 - background-color: #f8f8f8; 36.452 - border: 1px solid #ddd; 36.453 - color: black; 36.454 - empty-cells: show; 36.455 - vertical-align: top; 36.456 - padding: 4px 10px 5px 10px; 36.457 -} 36.458 - 36.459 -/* style for file displays */ 36.460 -table.files { 36.461 - border-spacing: 0; 36.462 - border-collapse: separate; 36.463 - width: 100%; 36.464 -} 36.465 - 36.466 -table.files th.header{ 36.467 - padding: 10px 0; 36.468 - border-bottom: 0px solid gray; 36.469 - font-weight: bold; 36.470 - background-color: white; 36.471 - color: #666; 36.472 - font-size: 140%; 36.473 -} 36.474 - 36.475 -table.files th { 36.476 - border-bottom: 1px solid #888; 36.477 - font-weight: bold; 36.478 - text-align: left; 36.479 - padding: 10px 0 2px; 36.480 -} 36.481 - 36.482 -table.files td { 36.483 - font-family: monospace; 36.484 - empty-cells: show; 36.485 - padding-top: 5px; 36.486 -} 36.487 - 36.488 -/* style for history displays */ 36.489 -table.history { 36.490 - border-spacing: 0; 36.491 - border-collapse: separate; 36.492 - width: 100%; 36.493 - margin: 0 0 40px; 36.494 -} 36.495 - 36.496 -table.history th.header { 36.497 - padding: 20px 0 4px; 36.498 - border-bottom: 1px solid #fff; 36.499 - font-weight: bold; 36.500 - background-color: white; 36.501 - color: #666; 36.502 - font-size: 140%; 36.503 -} 36.504 - 36.505 -table.history th { 36.506 - border-bottom: 1px solid #666; 36.507 - font-weight: bold; 36.508 - text-align: left; 36.509 - padding: 10px 0 2px; 36.510 -} 36.511 - 36.512 -table.history td { 36.513 - vertical-align: top; 36.514 - empty-cells: show; 36.515 - padding-top: 5px; 36.516 -} 36.517 - 36.518 - 36.519 -/* style for class list */ 36.520 -table.classlist { 36.521 - border-spacing: 0; 36.522 - border-collapse: separate; 36.523 - width: 100%; 36.524 -} 36.525 - 36.526 -table.classlist th.header{ 36.527 - padding-top: 10px; 36.528 - border-bottom: 1px solid gray; 36.529 - font-weight: bold; 36.530 - background-color: white; 36.531 - color: #707040; 36.532 -} 36.533 - 36.534 -table.classlist th { 36.535 - font-weight: bold; 36.536 - text-align: left; 36.537 -} 36.538 - 36.539 - 36.540 -/* style for class help display */ 36.541 -table.classhelp { /* the table-layout: fixed; */ 36.542 - table-layout: fixed; /* compromises quality for speed */ 36.543 - overflow: hidden; 36.544 - font-size: .9em; 36.545 - padding-bottom: 3em; 36.546 -} 36.547 - 36.548 -table.classhelp th { 36.549 - font-weight: normal; 36.550 - text-align: left; 36.551 - color: #444; 36.552 - background-color: #efefef; 36.553 - border-bottom: 1px solid #afafaf; 36.554 - border-top: 1px solid #afafaf; 36.555 - text-transform: uppercase; 36.556 - vertical-align: middle; 36.557 - line-height:1.5em; 36.558 -} 36.559 - 36.560 -table.classhelp td { 36.561 - vertical-align: middle; 36.562 - padding-right: .2em; 36.563 - border-bottom: 1px solid #efefef; 36.564 - text-align: left; 36.565 - empty-cells: show; 36.566 - white-space: nowrap; 36.567 - vertical-align: middle; 36.568 -} 36.569 - 36.570 -table.classhelp tr:hover { 36.571 - background-color: #eee; 36.572 -} 36.573 - 36.574 -label.classhelp-label { 36.575 - cursor: pointer; 36.576 -} 36.577 - 36.578 -#classhelp-controls { 36.579 - position: fixed; 36.580 - display: block; 36.581 - top: auto; 36.582 - right: 0; 36.583 - bottom: 0; 36.584 - left: 0; 36.585 - padding: .5em; 36.586 - border-top: 2px solid #444; 36.587 - background-color: #eee; 36.588 -} 36.589 - 36.590 -#classhelp-controls input.apply { 36.591 - width: 7em; 36.592 - font-weight: bold; 36.593 - margin-right: 2em; 36.594 - margin-left: 2em; 36.595 -} 36.596 - 36.597 -#classhelp-controls input.preview { 36.598 - margin-right: 3em; 36.599 - margin-left: 1em; 36.600 -} 36.601 - 36.602 -/* style for "other" displays */ 36.603 -table.otherinfo { 36.604 - border-spacing: 0; 36.605 - border-collapse: separate; 36.606 - width: 100%; 36.607 -} 36.608 - 36.609 -table.otherinfo th.header{ 36.610 - padding-top: 10px; 36.611 - border-bottom: 1px solid gray; 36.612 - font-weight: bold; 36.613 - background-color: white; 36.614 - color: #707040; 36.615 -} 36.616 - 36.617 -table.otherinfo th { 36.618 - border-bottom: 1px solid #afafaf; 36.619 - font-weight: bold; 36.620 - text-align: left; 36.621 -} 36.622 - 36.623 -.calendar_display { 36.624 - text-align: center; 36.625 -} 36.626 - 36.627 -.calendar_display td { 36.628 - padding: 1px 4px 1px 4px; 36.629 -} 36.630 - 36.631 -.calendar_display .today { 36.632 - background-color: #afafaf; 36.633 -}
37.1 --- a/bugs/templates/slitaz/html/user.forgotten.html Wed Jan 15 01:04:10 2014 +0100 37.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 37.3 @@ -1,44 +0,0 @@ 37.4 -<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar--> 37.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 37.6 -<title metal:fill-slot="head_title" i18n:translate="">Password reset request - <span 37.7 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 37.8 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 37.9 - i18n:translate="">Password reset request</span> 37.10 -<td class="content" metal:fill-slot="content"> 37.11 - 37.12 -<p i18n:translate="">You have two options if you have forgotten your password. 37.13 -If you know the email address you registered with, enter it below.</p> 37.14 - 37.15 -<form method="post" onSubmit="return submit_once()" 37.16 - tal:attributes="action context/designator"> 37.17 - <table class="form"> 37.18 - <tr> 37.19 - <th i18n:translate="">Email Address:</th> 37.20 - <td><input name="address"></td> 37.21 - </tr> 37.22 - <tr> 37.23 - <td> </td> 37.24 - <td> 37.25 - <input type="hidden" name="@action" value="passrst"> 37.26 - <input type="hidden" name="@template" value="forgotten"> 37.27 - <input type="submit" value="Request password reset" 37.28 - i18n:attributes="value"> 37.29 - </td> 37.30 - </tr> 37.31 -</table> 37.32 - 37.33 -<p i18n:translate="">Or, if you know your username, then enter it below.</p> 37.34 - 37.35 -<table class="form"> 37.36 - <tr><th i18n:translate="">Username:</th> <td><input name="username"></td> </tr> 37.37 - <tr><td></td><td><input type="submit" value="Request password reset" 37.38 - i18n:attributes="value"></td></tr> 37.39 -</table> 37.40 -</form> 37.41 - 37.42 -<p i18n:translate="">A confirmation email will be sent to you - 37.43 -please follow the instructions within it to complete the reset process.</p> 37.44 -</td> 37.45 - 37.46 -</tal:block> 37.47 -<!-- SHA: 6fdb58c55fd854904ae98906d5935549a221fabf -->
38.1 --- a/bugs/templates/slitaz/html/user.help-search.html Wed Jan 15 01:04:10 2014 +0100 38.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 38.3 @@ -1,86 +0,0 @@ 38.4 -<html 38.5 - tal:define="form request/form/form/value; 38.6 - field request/form/property/value" 38.7 - > 38.8 - <head> 38.9 - <title>Search input for user helper</title> 38.10 - <script language="Javascript" type="text/javascript" 38.11 - tal:content="structure string:<!-- 38.12 - // this is the name of the field in the original form that we're working on 38.13 - form = parent.opener.document.${form}; 38.14 - field = '${field}'; 38.15 - //-->"> 38.16 - </script> 38.17 - <script type="text/javascript" src="@@file/help_controls.js"></script> 38.18 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 38.19 - </head> 38.20 - <body onload="parent.submit.url='...'" 38.21 - tal:define=" 38.22 -qs request/env/QUERY_STRING; 38.23 -qs python:'&'.join([a for a in qs.split('&') if not a.startswith('@template=')])" 38.24 -> 38.25 - <pre tal:content="request/env/QUERY_STRING" tal:condition=false /> 38.26 - <form method="get" name="itemSynopsis" 38.27 - target="list" 38.28 - tal:attributes="action request/classname" 38.29 - tal:define=" 38.30 - property request/form/property/value; 38.31 - cols python:request.columns or 'id username address realname roles'.split(); 38.32 - sort_on request/sort | nothing; 38.33 - sort_desc python:sort_on and request.sort[0][0] == '-'; 38.34 - sort_on python:sort_on and request.sort[0][1] or 'lastname'; 38.35 - 38.36 - search_input templates/page/macros/search_input; 38.37 - search_select templates/page/macros/search_select; 38.38 - search_select_roles templates/page/macros/search_select_roles; 38.39 - required python:[]; 38.40 - th_label templates/page/macros/th_label; 38.41 - "> 38.42 - <input type="hidden" name="@template" value="help-list"> 38.43 - <input type="hidden" name="property" value="" tal:attributes="value property"> 38.44 - <input type="hidden" name="form" value="" tal:attributes="value request/form/form/value"> 38.45 - <table> 38.46 -<tr tal:define="name string:username; label string:Username:"> 38.47 - <th metal:use-macro="th_label">Name</th> 38.48 - <td metal:use-macro="search_input"><input type=text></td> 38.49 -</tr> 38.50 - 38.51 -<tr tal:define="name string:website; label string:Phone number"> 38.52 - <th metal:use-macro="th_label">Phone</th> 38.53 - <td metal:use-macro="search_input"><input type=text></td> 38.54 -</tr> 38.55 - 38.56 -<tr tal:define="name string:roles; 38.57 - onchange string:this.form.submit(); 38.58 - label string:Roles:" 38.59 - > 38.60 - <th metal:use-macro="th_label">role</th> 38.61 - <td metal:use-macro="search_select_roles"> 38.62 - <select> 38.63 - <option value="">jokester</option> 38.64 - </select> 38.65 - </td> 38.66 -</tr> 38.67 - 38.68 -<tr> 38.69 - <td> </td> 38.70 - <td> 38.71 - <input type="hidden" name="@action" value="search"> 38.72 - <input type="submit" value="Search" i18n:attributes="value"> 38.73 - <input type="reset"> 38.74 - <input type="hidden" value="username,realname,website,scnprofile,roles" name="properties"> 38.75 - <input type="text" name="@pagesize" id="sp-pagesize" value="25" size="2"> 38.76 - <label for="sp-pagesize" i18n:translate="">Pagesize</label> 38.77 - </td> 38.78 -</tr> 38.79 - 38.80 - </table> 38.81 - 38.82 -</form> 38.83 -<pre tal:content="request" tal:condition=false /> 38.84 -<script type="text/javascript"><!-- 38.85 - focus2id('username'); 38.86 -//--></script> 38.87 - </body> 38.88 -</html> 38.89 -<!-- SHA: df15cb20b84032f72d0530d0717382786668f6a0 -->
39.1 --- a/bugs/templates/slitaz/html/user.help.html Wed Jan 15 01:04:10 2014 +0100 39.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 39.3 @@ -1,50 +0,0 @@ 39.4 -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 39.5 -<html tal:define="property request/form/property/value; 39.6 -qs request/env/QUERY_STRING; 39.7 -qs python:'&'.join([a for a in qs.split('&') if not a.startswith('@template=')]); 39.8 -form request/form/form/value; 39.9 -field request/form/property/value"> 39.10 - <head> 39.11 - <link rel="stylesheet" type="text/css" href="@@file/style.css" /> 39.12 - <meta http-equiv="Content-Type" 39.13 - tal:attributes="content string:text/html;; charset=${request/client/charset}" /> 39.14 - <tal:block tal:condition="python:request.form.has_key('property')"> 39.15 - <title><tal:x i18n:translate=""><tal:x i18n:name="property" 39.16 - tal:content="property" i18n:translate="" /> help - <span i18n:name="tracker" 39.17 - tal:replace="config/TRACKER_NAME" /></tal:x></title> 39.18 - <script language="Javascript" type="text/javascript" 39.19 - tal:condition=false 39.20 - tal:content="structure string:<!-- 39.21 - // this is the name of the field in the original form that we're working on 39.22 - form = window.opener.document.${form}; 39.23 - field = '${field}'; 39.24 - //-->"> 39.25 - </script> 39.26 - <script src="@@file/help_controls.js" 39.27 - tal:condition=false type="text/javascript"><!-- 39.28 - //--></script> 39.29 - </tal:block> 39.30 - </head> 39.31 -<frameset rows="123,*,62"> 39.32 - <frame src="#" tal:attributes="src string:?@template=help-search&${qs}" name="search"> 39.33 - <!-- for search results: help-list --> 39.34 - <frame 39.35 - tal:attributes="src string:?@template=help-empty&${qs}" 39.36 - name="list"> 39.37 - <frame 39.38 - tal:attributes="src string:?@template=help-submit&${qs}" 39.39 - name="submit"> 39.40 - <!-- --> 39.41 -</frameset> 39.42 -<noframes> 39.43 - <body> 39.44 -<p i18n:translate=""> 39.45 -Your browser is not capable of using frames; you should be redirected immediately, 39.46 -or visit <a href="#" tal:attributes="href string:?${qs}&template=help-noframes" 39.47 -i18n:name="link">this link</a>. 39.48 -</p> 39.49 -</body> 39.50 -</noframes> 39.51 - 39.52 -</html> 39.53 -<!-- SHA: d59dff4cb24ac0eee209b10c121299a203170227 -->
40.1 --- a/bugs/templates/slitaz/html/user.index.html Wed Jan 15 01:04:10 2014 +0100 40.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 40.3 @@ -1,51 +0,0 @@ 40.4 -<!-- dollarId: user.index,v 1.3 2002/07/09 05:29:51 richard Exp dollar--> 40.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 40.6 -<title metal:fill-slot="head_title" i18n:translate="">User listing - <span 40.7 - i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title> 40.8 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 40.9 - i18n:translate="">User listing</span> 40.10 -<td class="content" metal:fill-slot="content"> 40.11 - 40.12 -<span tal:condition="python:not (context.is_view_ok() 40.13 - or request.user.hasRole('Anonymous'))" 40.14 - i18n:translate="">You are not allowed to view this page.</span> 40.15 - 40.16 -<span tal:condition="python:not context.is_view_ok() 40.17 - and request.user.hasRole('Anonymous')" 40.18 - i18n:translate="">Please login with your username and password.</span> 40.19 - 40.20 -<table width="100%" tal:condition="context/is_view_ok" class="list"> 40.21 -<tr> 40.22 - <th i18n:translate="">Username</th> 40.23 - <th i18n:translate="">Real name</th> 40.24 - <th i18n:translate="">Email address</th> 40.25 - <th i18n:translate="">Website</th> 40.26 - <th tal:condition="context/is_edit_ok" i18n:translate="">Retire</th> 40.27 -</tr> 40.28 -<tal:block repeat="user context/list"> 40.29 -<tr tal:attributes="class python:['normal', 'alt'][repeat['user'].index%6/3]"> 40.30 - <td> 40.31 - <a tal:attributes="href string:user${user/id}" 40.32 - tal:content="user/username">username</a> 40.33 - </td> 40.34 - <td tal:content="python:user.realname.plain() or default"> </td> 40.35 - <td tal:content="python:user.address.email() or default"> </td> 40.36 - <td> 40.37 - <a tal:attributes="href python:user.website.plain() or default" 40.38 - tal:content="user/website">website</a> 40.39 - </td> 40.40 - <td tal:condition="context/is_retire_ok"> 40.41 - <form style="padding:0" method="post" 40.42 - tal:attributes="action string:user${user/id}"> 40.43 - <input type="hidden" name="@template" value="index"> 40.44 - <input type="hidden" name="@action" value="retire"> 40.45 - <input type="submit" value="retire" i18n:attributes="value"> 40.46 - </form> 40.47 - </td> 40.48 -</tr> 40.49 -</tal:block> 40.50 -</table> 40.51 -</td> 40.52 - 40.53 -</tal:block> 40.54 -<!-- SHA: 6d282dc45e45caf1d19d8ded6c5c57554be9c1af -->
41.1 --- a/bugs/templates/slitaz/html/user.item.html Wed Jan 15 01:04:10 2014 +0100 41.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 41.3 @@ -1,165 +0,0 @@ 41.4 -<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar--> 41.5 -<tal:doc metal:use-macro="templates/page/macros/icing" 41.6 -define="edit_ok context/is_edit_ok" 41.7 -> 41.8 -<title metal:fill-slot="head_title"> 41.9 -<tal:if condition="context/id" i18n:translate="" 41.10 - >User <tal:x content="context/id" i18n:name="id" 41.11 - />: <tal:x content="context/username" i18n:name="title" 41.12 - /> - <tal:x content="config/TRACKER_NAME" i18n:name="tracker" 41.13 -/></tal:if> 41.14 -<tal:if condition="not:context/id" i18n:translate="" 41.15 - >New User - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" 41.16 -/></tal:if> 41.17 -</title> 41.18 -<metal:slot fill-slot="more-javascript"> 41.19 -<script metal:use-macro="templates/page/macros/user_utils"></script> 41.20 -<script type="text/javascript" src="@@file/help_controls.js"></script> 41.21 -</metal:slot> 41.22 -<tal:block metal:fill-slot="body_title" 41.23 - define="edit_ok context/is_edit_ok"> 41.24 - <span tal:condition="python: not (context.id or edit_ok)" 41.25 - tal:omit-tag="python:1" i18n:translate="">New User</span> 41.26 - <span tal:condition="python: not context.id and edit_ok" 41.27 - tal:omit-tag="python:1" i18n:translate="">New User Editing</span> 41.28 - <span tal:condition="python: context.id and not edit_ok" 41.29 - tal:omit-tag="python:1" i18n:translate="">User<tal:x 41.30 - replace="context/id" i18n:name="id" /></span> 41.31 - <span tal:condition="python: context.id and edit_ok" 41.32 - tal:omit-tag="python:1" i18n:translate="">User<tal:x 41.33 - replace="context/id" i18n:name="id" /> Editing</span> 41.34 -</tal:block> 41.35 - 41.36 -<td class="content" metal:fill-slot="content"> 41.37 - 41.38 -<p tal:condition="python:not (context.is_view_ok() 41.39 - or request.user.hasRole('Anonymous'))" i18n:translate=""> 41.40 - You are not allowed to view this page.</p> 41.41 - 41.42 -<p tal:condition="python:not context.is_view_ok() 41.43 - and request.user.hasRole('Anonymous')" i18n:translate=""> 41.44 - Please login with your username and password.</p> 41.45 - 41.46 -<div tal:condition="context/is_view_ok"> 41.47 - 41.48 -<form method="post" 41.49 - name="itemSynopsis" 41.50 - tal:define="required python:'username address'.split()" 41.51 - enctype="multipart/form-data" 41.52 - tal:attributes="action context/designator; 41.53 - onSubmit python:'return checkRequiredFields(\'%s\')'%'\', \''.join(required); 41.54 - "> 41.55 -<table class="form" tal:define=" 41.56 - th_label templates/page/macros/th_label; 41.57 - src_input templates/page/macros/user_src_input; 41.58 - normal_input templates/page/macros/user_normal_input; 41.59 - pw_input templates/page/macros/user_pw_input; 41.60 - confirm_input templates/page/macros/user_confirm_input; 41.61 - edit_ok context/is_edit_ok; 41.62 - "> 41.63 - <tr tal:define="name string:realname; label string:Name; value context/realname; edit_ok edit_ok"> 41.64 - <th metal:use-macro="th_label">Name</th> 41.65 - <td><input name="realname" metal:use-macro="src_input"></td> 41.66 - </tr> 41.67 - <tr tal:define="name string:username; label string:Login Name; value context/username"> 41.68 - <th metal:use-macro="th_label">Login Name</th> 41.69 - <td><input metal:use-macro="src_input"></td> 41.70 - </tr> 41.71 - <tal:if condition="edit_ok"> 41.72 - <tr tal:define="name string:password; label string:Login Password"> 41.73 - <th metal:use-macro="th_label">Login Password</th> 41.74 - <td><input metal:use-macro="pw_input" type="password"></td> 41.75 - </tr> 41.76 - <tr tal:define="name string:password; label string:Confirm Password"> 41.77 - <th metal:use-macro="th_label">Confirm Password</th> 41.78 - <td><input metal:use-macro="confirm_input" type="password"></td> 41.79 - </tr> 41.80 - </tal:if> 41.81 - <tal:if condition="python:request.user.hasPermission('Web Roles')"> 41.82 - <tr tal:define="name string:roles; label string:Roles;"> 41.83 - <th><label for="roles" i18n:translate="">Roles</label></th> 41.84 - <td tal:define="gips context/id"> 41.85 - <tal:subif condition=gips define="value context/roles"> 41.86 - <input metal:use-macro="normal_input"> 41.87 - </tal:subif> 41.88 - <tal:subif condition="not:gips" define="value db/config/NEW_WEB_USER_ROLES"> 41.89 - <input metal:use-macro="normal_input"> 41.90 - </tal:subif> 41.91 - <tal:block i18n:translate="">(to give the user more than one role, 41.92 - enter a comma,separated,list)</tal:block> 41.93 - </td> 41.94 - </tr> 41.95 - </tal:if> 41.96 - 41.97 - <tr tal:define="name string:website; label string:Website; value context/website"> 41.98 - <th metal:use-macro="th_label">Website</th> 41.99 - <td><input name="website" metal:use-macro="normal_input"></td> 41.100 - </tr> 41.101 - 41.102 - <tr tal:condition="python:edit_ok or context.timezone" 41.103 - tal:define="name string:timezone; label string:Timezone; value context/timezone"> 41.104 - <th metal:use-macro="th_label">Timezone</th> 41.105 - <td><input name="timezone" metal:use-macro="normal_input"> 41.106 - <tal:block tal:condition="edit_ok" i18n:translate="">(this is a numeric hour offset, the default is 41.107 - <span tal:replace="db/config/DEFAULT_TIMEZONE" i18n:name="zone" 41.108 - />)</tal:block> 41.109 - </td> 41.110 - </tr> 41.111 - 41.112 - <tr tal:define="name string:address; label string:E-mail address; value context/address"> 41.113 - <th metal:use-macro="th_label">E-mail address</th> 41.114 - <td tal:define="mailto python:context.address.field(id='address'); 41.115 - mklink python:mailto and not edit_ok"> 41.116 - <a href="mailto:calvin@the-z.org" 41.117 - tal:attributes="href string:mailto:$value" 41.118 - tal:content="value" 41.119 - tal:condition="python:mklink">calvin@the-z.org</a> 41.120 - <tal:if condition=edit_ok> 41.121 - <input metal:use-macro="src_input" value="calvin@the-z.org"> 41.122 - </tal:if> 41.123 - 41.124 - </td> 41.125 - </tr> 41.126 - 41.127 - <tr> 41.128 - <th><label for="alternate_addresses" i18n:translate="">Alternate E-mail addresses<br>One address per line</label></th> 41.129 - <td> 41.130 - <textarea rows=5 cols=40 tal:replace="structure context/alternate_addresses/multiline">nobody@nowhere.org 41.131 -anybody@everywhere.net 41.132 -(alternate_addresses) 41.133 - </textarea> 41.134 - </td> 41.135 - </tr> 41.136 - 41.137 - <tr tal:condition="edit_ok"> 41.138 - <td> 41.139 - 41.140 - <input type="hidden" name="@template" value="item"> 41.141 - <input type="hidden" name="@required" value="username,address" 41.142 - tal:attributes="value python:','.join(required)"> 41.143 - </td> 41.144 - <td><input type="submit" value="save" tal:replace="structure context/submit"><!--submit button here--> 41.145 - <input type=reset> 41.146 - </td> 41.147 - </tr> 41.148 -</table> 41.149 -</form> 41.150 - 41.151 -<tal:block tal:condition="not:context/id" i18n:translate=""> 41.152 -<table class="form"> 41.153 -<tr> 41.154 - <td>Note: </td> 41.155 - <th class="required">highlighted</th> 41.156 - <td> fields are required.</td> 41.157 -</tr> 41.158 -</table> 41.159 -</tal:block> 41.160 - 41.161 -<tal:block tal:condition="context/id" tal:replace="structure context/history" /> 41.162 - 41.163 -</div> 41.164 - 41.165 -</td> 41.166 - 41.167 -</tal:doc> 41.168 -<!-- SHA: bfc3a0fd9a3a54b3b1d1d7bfeb43191237af5184 -->
42.1 --- a/bugs/templates/slitaz/html/user.register.html Wed Jan 15 01:04:10 2014 +0100 42.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 42.3 @@ -1,78 +0,0 @@ 42.4 -<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar--> 42.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 42.6 -<title metal:fill-slot="head_title" 42.7 - i18n:translate="">Registering with <span i18n:name="tracker" 42.8 - tal:replace="db/config/TRACKER_NAME" /></title> 42.9 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 42.10 - i18n:translate="">Registering with <span i18n:name="tracker" 42.11 - tal:replace="db/config/TRACKER_NAME" /></span> 42.12 -<td class="content" metal:fill-slot="content"> 42.13 - 42.14 -<form method="post" onSubmit="return submit_once()" 42.15 - enctype="multipart/form-data" 42.16 - tal:attributes="action context/designator"> 42.17 - 42.18 -<table class="form"> 42.19 - <tr> 42.20 - <th i18n:translate="">Name</th> 42.21 - <td tal:content="structure context/realname/field">realname</td> 42.22 - </tr> 42.23 - <tr> 42.24 - <th class="required" i18n:translate="">Login Name</th> 42.25 - <td tal:content="structure context/username/field">username</td> 42.26 - </tr> 42.27 - <tr> 42.28 - <th class="required" i18n:translate="">Login Password</th> 42.29 - <td tal:content="structure context/password/field">password</td> 42.30 - </tr> 42.31 - <tr> 42.32 - <th class="required" i18n:translate="">Confirm Password</th> 42.33 - <td tal:content="structure context/password/confirm">password</td> 42.34 - </tr> 42.35 - <tr tal:condition="python:request.user.hasPermission('Web Roles')"> 42.36 - <th i18n:translate="">Roles</th> 42.37 - <td tal:condition="exists:item" 42.38 - tal:content="structure context/roles/field">roles</td> 42.39 - <td tal:condition="not:exists:item"> 42.40 - <input name="roles" tal:attributes="value db/config/NEW_WEB_USER_ROLES"> 42.41 - </td> 42.42 - </tr> 42.43 - <tr> 42.44 - <th i18n:translate="">Website</th> 42.45 - <td tal:content="structure context/website/field">website</td> 42.46 - </tr> 42.47 - <tr> 42.48 - <th class="required" i18n:translate="">E-mail address</th> 42.49 - <td tal:content="structure context/address/field">address</td> 42.50 - </tr> 42.51 - <tr> 42.52 - <th i18n:translate="">Alternate E-mail addresses<br>One address per line</th> 42.53 - <td tal:content="structure context/alternate_addresses/multiline">alternate_addresses</td> 42.54 - </tr> 42.55 - 42.56 - <tr> 42.57 - <td> </td> 42.58 - <td> 42.59 - <input type="hidden" name="@template" value="register"> 42.60 - <input type="hidden" name="@required" value="username,password,address"> 42.61 - <input type="hidden" name="@action" value="register"> 42.62 - <input type="submit" name="submit" value="Register" i18n:attributes="value"> 42.63 - </td> 42.64 - </tr> 42.65 -</table> 42.66 -</form> 42.67 - 42.68 -<tal:block tal:condition="not:context/id" i18n:translate=""> 42.69 -<table class="form"> 42.70 -<tr> 42.71 - <td>Note: </td> 42.72 - <th class="required">highlighted</th> 42.73 - <td> fields are required.</td> 42.74 -</tr> 42.75 -</table> 42.76 -</tal:block> 42.77 - 42.78 -</td> 42.79 - 42.80 -</tal:block> 42.81 -<!-- SHA: ed7a2465033194eb71fa79431b028150c23be650 -->
43.1 --- a/bugs/templates/slitaz/html/user.rego_progress.html Wed Jan 15 01:04:10 2014 +0100 43.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 43.3 @@ -1,17 +0,0 @@ 43.4 -<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar--> 43.5 -<tal:block metal:use-macro="templates/page/macros/icing"> 43.6 -<title metal:fill-slot="head_title" 43.7 - i18n:translate="">Registration in progress - <span i18n:name="tracker" 43.8 - tal:replace="config/TRACKER_NAME" /></title> 43.9 -<span metal:fill-slot="body_title" tal:omit-tag="python:1" 43.10 - i18n:translate="">Registration in progress...</span> 43.11 -<td class="content" metal:fill-slot="content"> 43.12 - 43.13 -<p i18n:translate="">You will shortly receive an email 43.14 -to confirm your registration. To complete the registration process, 43.15 -visit the link indicated in the email. 43.16 -</p> 43.17 - 43.18 -</td> 43.19 -</tal:block> 43.20 -<!-- SHA: c2f389db861a4e0d20b41e5ff88120270862f609 -->
44.1 --- a/bugs/templates/slitaz/html/user_utils.js Wed Jan 15 01:04:10 2014 +0100 44.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 44.3 @@ -1,114 +0,0 @@ 44.4 -// User Editing Utilities 44.5 - 44.6 -/** 44.7 - * for new users: 44.8 - * Depending on the input field which calls it, takes the value 44.9 - * and dispatches it to certain other input fields: 44.10 - * 44.11 - * address 44.12 - * +-> username 44.13 - * | `-> realname 44.14 - * `-> scnprofile 44.15 - */ 44.16 -function split_name(that) { 44.17 - var raw = that.value 44.18 - var val = trim(raw) 44.19 - if (val == '') { 44.20 - return 44.21 - } 44.22 - var username='' 44.23 - var realname='' 44.24 - var address='' 44.25 - switch (that.name) { 44.26 - case 'address': 44.27 - address=val 44.28 - break 44.29 - case 'username': 44.30 - username=val 44.31 - break 44.32 - case 'realname': 44.33 - realname=val 44.34 - break 44.35 - case 'firstname': 44.36 - case 'lastname': 44.37 - return 44.38 - default: 44.39 - alert('Ooops - unknown name field '+that.name+'!') 44.40 - return 44.41 - } 44.42 - var the_form = that.form; 44.43 - 44.44 - function field_empty(name) { 44.45 - return the_form[name].value == '' 44.46 - } 44.47 - 44.48 - // no break statements - on purpose! 44.49 - switch (that.name) { 44.50 - case 'address': 44.51 - var split1 = address.split('@') 44.52 - if (field_empty('username')) { 44.53 - username = split1[0] 44.54 - the_form.username.value = username 44.55 - } 44.56 - if (field_empty('scnprofile')) { 44.57 - the_form.scnprofile.value = default_scnprofile(split1[1]) 44.58 - } 44.59 - case 'username': 44.60 - if (field_empty('realname')) { 44.61 - realname = Cap(username.split('.').join(' ')) 44.62 - the_form.realname.value = realname 44.63 - } 44.64 - case 'realname': 44.65 - if (field_empty('username')) { 44.66 - username = Cap(realname.replace(' ', '.')) 44.67 - the_form.username.value = username 44.68 - } 44.69 - if (the_form.firstname && the_form.lastname) { 44.70 - var split2 = realname.split(' ') 44.71 - var firstname='', lastname='' 44.72 - firstname = split2[0] 44.73 - lastname = split2.slice(1).join(' ') 44.74 - if (field_empty('firstname')) { 44.75 - the_form.firstname.value = firstname 44.76 - } 44.77 - if (field_empty('lastname')) { 44.78 - the_form.lastname.value = lastname 44.79 - } 44.80 - } 44.81 - } 44.82 -} 44.83 - 44.84 -function SubCap(str) { 44.85 - switch (str) { 44.86 - case 'de': case 'do': case 'da': 44.87 - case 'du': case 'von': 44.88 - return str; 44.89 - } 44.90 - if (str.toLowerCase().slice(0,2) == 'mc') { 44.91 - return 'Mc'+str.slice(2,3).toUpperCase()+str.slice(3).toLowerCase() 44.92 - } 44.93 - return str.slice(0,1).toUpperCase()+str.slice(1).toLowerCase() 44.94 -} 44.95 - 44.96 -function Cap(str) { 44.97 - var liz = str.split(' ') 44.98 - for (var i=0; i<liz.length; i++) { 44.99 - liz[i] = SubCap(liz[i]) 44.100 - } 44.101 - return liz.join(' ') 44.102 -} 44.103 - 44.104 -/** 44.105 - * Takes a domain name (behind the @ part of an email address) 44.106 - * Customise this to handle the mail domains you're interested in 44.107 - */ 44.108 -function default_scnprofile(orga) { 44.109 - switch (orga.toLowerCase()) { 44.110 - case 'gmx': 44.111 - case 'yahoo': 44.112 - return '' 44.113 - default: 44.114 - return orga 44.115 - } 44.116 -} 44.117 -
45.1 --- a/bugs/templates/slitaz/initial_data.py Wed Jan 15 01:04:10 2014 +0100 45.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 45.3 @@ -1,29 +0,0 @@ 45.4 -# 45.5 -# TRACKER INITIAL PRIORITY AND STATUS VALUES 45.6 -# 45.7 -pri = db.getclass('priority') 45.8 -pri.create(name=''"critical", order="1") 45.9 -pri.create(name=''"standard", order="2") 45.10 -pri.create(name=''"feature", order="3") 45.11 -pri.create(name=''"task", order="4") 45.12 - 45.13 -stat = db.getclass('status') 45.14 -stat.create(name=''"unread", order="1") 45.15 -stat.create(name=''"deferred", order="2") 45.16 -stat.create(name=''"chatting", order="3") 45.17 -stat.create(name=''"in-progress", order="4") 45.18 -stat.create(name=''"feedback", order="5") 45.19 -stat.create(name=''"resolved", order="6") 45.20 - 45.21 -# create the two default users 45.22 -user = db.getclass('user') 45.23 -user.create(username="pankso", password=adminpw, 45.24 - address=admin_email, roles='Admin') 45.25 -user.create(username="anonymous", roles='Anonymous') 45.26 - 45.27 -# add any additional database creation steps here - but only if you 45.28 -# haven't initialised the database with the admin "initialise" command 45.29 - 45.30 - 45.31 -# vim: set filetype=python sts=4 sw=4 et si 45.32 -#SHA: 54e44ed654b0ae4a076ed2d948bbbaaa79590918
46.1 --- a/bugs/templates/slitaz/schema.py Wed Jan 15 01:04:10 2014 +0100 46.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 46.3 @@ -1,176 +0,0 @@ 46.4 - 46.5 -# 46.6 -# TRACKER SCHEMA 46.7 -# 46.8 - 46.9 -# Class automatically gets these properties: 46.10 -# creation = Date() 46.11 -# activity = Date() 46.12 -# creator = Link('user') 46.13 -# actor = Link('user') 46.14 - 46.15 -# Priorities 46.16 -pri = Class(db, "priority", 46.17 - name=String(), 46.18 - order=Number()) 46.19 -pri.setkey("name") 46.20 - 46.21 -# Statuses 46.22 -stat = Class(db, "status", 46.23 - name=String(), 46.24 - order=Number()) 46.25 -stat.setkey("name") 46.26 - 46.27 -# Keywords 46.28 -keyword = Class(db, "keyword", 46.29 - name=String()) 46.30 -keyword.setkey("name") 46.31 - 46.32 -# User-defined saved searches 46.33 -query = Class(db, "query", 46.34 - klass=String(), 46.35 - name=String(), 46.36 - url=String(), 46.37 - private_for=Link('user')) 46.38 - 46.39 -# add any additional database schema configuration here 46.40 - 46.41 -user = Class(db, "user", 46.42 - username=String(), 46.43 - password=Password(), 46.44 - address=String(), 46.45 - realname=String(), 46.46 - website=String(), 46.47 - alternate_addresses=String(), 46.48 - queries=Multilink('query'), 46.49 - roles=String(), # comma-separated string of Role names 46.50 - timezone=String()) 46.51 -user.setkey("username") 46.52 -db.security.addPermission(name='Register', klass='user', 46.53 - description='User is allowed to register new user') 46.54 - 46.55 -# FileClass automatically gets this property in addition to the Class ones: 46.56 -# content = String() [saved to disk in <tracker home>/db/files/] 46.57 -# type = String() [MIME type of the content, default 'text/plain'] 46.58 -msg = FileClass(db, "msg", 46.59 - author=Link("user", do_journal='no'), 46.60 - recipients=Multilink("user", do_journal='no'), 46.61 - date=Date(), 46.62 - summary=String(), 46.63 - files=Multilink("file"), 46.64 - messageid=String(), 46.65 - inreplyto=String()) 46.66 - 46.67 -file = FileClass(db, "file", 46.68 - name=String()) 46.69 - 46.70 -# IssueClass automatically gets these properties in addition to the Class ones: 46.71 -# title = String() 46.72 -# messages = Multilink("msg") 46.73 -# files = Multilink("file") 46.74 -# nosy = Multilink("user") 46.75 -# superseder = Multilink("issue") 46.76 -issue = IssueClass(db, "issue", 46.77 - assignedto=Link("user"), 46.78 - keyword=Multilink("keyword"), 46.79 - priority=Link("priority"), 46.80 - status=Link("status")) 46.81 - 46.82 -# 46.83 -# TRACKER SECURITY SETTINGS 46.84 -# 46.85 -# See the configuration and customisation document for information 46.86 -# about security setup. 46.87 - 46.88 -# 46.89 -# REGULAR USERS 46.90 -# 46.91 -# Give the regular users access to the web and email interface 46.92 -db.security.addPermissionToRole('User', 'Web Access') 46.93 -db.security.addPermissionToRole('User', 'Email Access') 46.94 - 46.95 -# Assign the access and edit Permissions for issue, file and message 46.96 -# to regular users now 46.97 -for cl in 'issue', 'file', 'msg', 'keyword': 46.98 - db.security.addPermissionToRole('User', 'View', cl) 46.99 - db.security.addPermissionToRole('User', 'Edit', cl) 46.100 - db.security.addPermissionToRole('User', 'Create', cl) 46.101 -for cl in 'priority', 'status': 46.102 - db.security.addPermissionToRole('User', 'View', cl) 46.103 - 46.104 -# May users view other user information? Comment these lines out 46.105 -# if you don't want them to 46.106 -db.security.addPermissionToRole('User', 'View', 'user') 46.107 - 46.108 -# Users should be able to edit their own details -- this permission is 46.109 -# limited to only the situation where the Viewed or Edited item is their own. 46.110 -def own_record(db, userid, itemid): 46.111 - '''Determine whether the userid matches the item being accessed.''' 46.112 - return userid == itemid 46.113 -p = db.security.addPermission(name='View', klass='user', check=own_record, 46.114 - description="User is allowed to view their own user details") 46.115 -db.security.addPermissionToRole('User', p) 46.116 -p = db.security.addPermission(name='Edit', klass='user', check=own_record, 46.117 - properties=('username', 'password', 'address', 'realname', 'website', 46.118 - 'alternate_addresses', 'queries', 'timezone'), 46.119 - description="User is allowed to edit their own user details") 46.120 -db.security.addPermissionToRole('User', p) 46.121 - 46.122 -# Users should be able to edit and view their own queries. They should also 46.123 -# be able to view any marked as not private. They should not be able to 46.124 -# edit others' queries, even if they're not private 46.125 -def view_query(db, userid, itemid): 46.126 - private_for = db.query.get(itemid, 'private_for') 46.127 - if not private_for: return True 46.128 - return userid == private_for 46.129 -def edit_query(db, userid, itemid): 46.130 - return userid == db.query.get(itemid, 'creator') 46.131 -p = db.security.addPermission(name='View', klass='query', check=view_query, 46.132 - description="User is allowed to view their own and public queries") 46.133 -db.security.addPermissionToRole('User', p) 46.134 -p = db.security.addPermission(name='Edit', klass='query', check=edit_query, 46.135 - description="User is allowed to edit their queries") 46.136 -db.security.addPermissionToRole('User', p) 46.137 -p = db.security.addPermission(name='Retire', klass='query', check=edit_query, 46.138 - description="User is allowed to retire their queries") 46.139 -db.security.addPermissionToRole('User', p) 46.140 -p = db.security.addPermission(name='Create', klass='query', 46.141 - description="User is allowed to create queries") 46.142 -db.security.addPermissionToRole('User', p) 46.143 - 46.144 - 46.145 -# 46.146 -# ANONYMOUS USER PERMISSIONS 46.147 -# 46.148 -# Let anonymous users access the web interface. Note that almost all 46.149 -# trackers will need this Permission. The only situation where it's not 46.150 -# required is in a tracker that uses an HTTP Basic Authenticated front-end. 46.151 -db.security.addPermissionToRole('Anonymous', 'Web Access') 46.152 - 46.153 -# Let anonymous users access the email interface (note that this implies 46.154 -# that they will be registered automatically, hence they will need the 46.155 -# "Create" user Permission below) 46.156 -# This is disabled by default to stop spam from auto-registering users on 46.157 -# public trackers. 46.158 -#db.security.addPermissionToRole('Anonymous', 'Email Access') 46.159 - 46.160 -# Assign the appropriate permissions to the anonymous user's Anonymous 46.161 -# Role. Choices here are: 46.162 -# - Allow anonymous users to register 46.163 -db.security.addPermissionToRole('Anonymous', 'Register', 'user') 46.164 - 46.165 -# Allow anonymous users access to view issues (and the related, linked 46.166 -# information) 46.167 -for cl in 'issue', 'file', 'msg', 'keyword', 'priority', 'status': 46.168 - db.security.addPermissionToRole('Anonymous', 'View', cl) 46.169 - 46.170 -# [OPTIONAL] 46.171 -# Allow anonymous users access to create or edit "issue" items (and the 46.172 -# related file and message items) 46.173 -#for cl in 'issue', 'file', 'msg': 46.174 -# db.security.addPermissionToRole('Anonymous', 'Create', cl) 46.175 -# db.security.addPermissionToRole('Anonymous', 'Edit', cl) 46.176 - 46.177 - 46.178 -# vim: set filetype=python sts=4 sw=4 et si : 46.179 -#SHA: d935a2b51c5922fb4e7a5fefc5ed70ef5fcbcac8