Changeset 2430
- Timestamp:
- 07/09/07 05:22:25 (1 year ago)
- Files:
-
- masterticketsplugin/0.11/mastertickets/api.py (added)
- masterticketsplugin/0.11/mastertickets/db_default.py (added)
- masterticketsplugin/0.11/mastertickets/model.py (added)
- masterticketsplugin/0.11/mastertickets/web_ui.bak.py (added)
- masterticketsplugin/0.11/mastertickets/web_ui.py (modified) (3 diffs)
- masterticketsplugin/0.11/setup.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
masterticketsplugin/0.11/mastertickets/web_ui.py
r2079 r2430 1 1 from trac.core import * 2 from trac.web.api import IRequestFilter 2 from trac.web.api import IRequestFilter, ITemplateStreamFilter 3 3 from trac.web.chrome import ITemplateProvider, add_stylesheet, add_script 4 4 from trac.ticket.api import ITicketManipulator 5 5 from trac.ticket.model import Ticket 6 6 from trac.util.html import html, Markup 7 8 from genshi.core import Markup 9 from genshi.builder import tag 10 from genshi.filters.transform import Transformer 7 11 8 12 from util import * … … 11 15 """Provides support for ticket dependencies.""" 12 16 13 implements(IRequestFilter, ITemplate Provider, ITicketManipulator)17 implements(IRequestFilter, ITemplateStreamFilter, ITemplateProvider, ITicketManipulator) 14 18 15 19 # IRequestFilter methods … … 17 21 return handler 18 22 19 def post_process_request(self, req, template, content_type):23 def post_process_request(self, req, template, data, content_type): 20 24 if req.path_info.startswith('/ticket'): 21 tkt _id = req.path_info[8:]25 tkt = data['ticket'] 22 26 23 # jQuery! 24 add_script(req, 'mastertickets/jquery.js') 27 data['field_types']['blocking'] = 'text' 28 data['fields'].append({ 29 'label': 'Blocking', 30 'name': 'blocking', 31 'optional': False, 32 'options': [], 33 'skip': False, 34 'type': 'text', 35 }) 36 tkt['blocking'] = '1, 2' 37 data['mastertickets'] = { 38 'field_values': { 39 'blocking': tag.b('Foobar'), 40 }, 41 } 25 42 26 # Add in the 'Blocked by' field 27 blocking_ids = blocked_by(self.env, tkt_id) 28 if blocking_ids: 29 req.hdf['ticket.blockedby'] = ', '.join([str(x) for x in blocking_ids]) 30 req.hdf['ticket.fields.blockedby'] = { 31 'value': '', 32 'custom': 1, 33 'type': 'text', 34 'label': 'Blocked By', 35 'order': 10, # Force this to be at the end, since I am going to disappear it. 36 } 37 add_stylesheet(req, 'mastertickets/ticket.css') 38 add_script(req, 'mastertickets/linkify_blockedby.js') 39 40 # If any blockers are not closed, disable the resovle option 41 img_src, img_alt = 'checkmark.gif', 'Blockers closed' 42 for i in blocking_ids: 43 if Ticket(self.env, i)['status'] != 'closed': 44 if Ticket(self.env, tkt_id)['status'] != 'closed': 45 add_script(req, 'mastertickets/disable_resolve.js') 46 img_src, img_alt = 'x.png', 'Blockers open' 47 else: 48 img_src, img_alt = 'caution.png', 'Blockers open, but current ticket closed' 49 50 # Magic stuff in the footer 51 req.hdf['project.footer'] = Markup(req.hdf['project.footer'] + Markup(html.DIV(html.IMG(class_='blockedby_icon', src=req.href.chrome('mastertickets',img_src), alt=img_alt, title=img_alt), ' ', linkify_ids(self.env, req, blocking_ids), id='linkified_blockedby', style='display:none'))) 52 53 54 # Linkify the 'Blocks' field 55 blocks_ids = req.hdf.get('ticket.blocking') or '' 56 blocks_ids = blocks_ids.replace('#', '') 57 if blocks_ids: 58 blocks_ids = [x.strip() for x in blocks_ids.split(',')] 59 req.hdf['project.footer'] = Markup(req.hdf['project.footer'] + Markup(html.DIV(linkify_ids(self.env, req, blocks_ids), id='linkified_blocking', style='display:none'))) 60 add_script(req, 'mastertickets/linkify_blocking.js') 61 62 return template, content_type 43 return template, data, content_type 44 45 # ITemplateStreamFilter methods 46 def match_stream(self, req, method, filename, stream, data): 47 return req.path_info.startswith('/ticket') 48 49 def filter_stream(self, req, method, filename, stream, data): 50 return stream | Transformer('div[@id="ticket"]/table[@class="properties"]/td[@headers="h_blocking"]/text()').replace(data['mastertickets']['field_values']['blocking']) 63 51 64 52 # ITicketManipulator methods masterticketsplugin/0.11/setup.py
r2019 r2430 6 6 setup( 7 7 name = 'TracMasterTickets', 8 version = ' 1.0',8 version = '2.0', 9 9 packages = ['mastertickets'], 10 10 package_data = { 'mastertickets': ['htdocs/*.js', 'htdocs/*.css' ] }, … … 20 20 ], 21 21 22 install_requires = ['Trac WebAdmin'],22 install_requires = ['Trac'], 23 23 24 24 entry_points = { 25 25 'trac.plugins': [ 26 26 'mastertickets.web_ui = mastertickets.web_ui', 27 'mastertickets.api = mastertickets.api', 27 28 ] 28 29 }
