def filter_stream(self, req, method, filename, stream, data): action = req.args.get('action', '') if filename == 'browser.html' and action == 'edit': req.perm.require('REPOSITORY_MODIFY') # NB TracBrowserOps already inserts javascript and css we need # So only add css/javascript needed solely by the editor if data['file'] and data['file']['preview']['rendered']: max_edit_size = self.max_edit_size data['max_edit_size'] = max_edit_size # Discard rendered table, replace with textarea of file contents # This means reading the file from the repository again # N.B. If a file is rendered as something other than a table # e.g. due to PreCodeBrowserPlugin this code won't trigger # Retrieve the same node that BrowserModule.process_request() # used to render the preview. # At this point reponame has been removed from data['path'] # and repos has already been determined repos = data['repos'] path = data['path'] rev = data['rev'] node = repos.get_node(path, rev) # If node is too large then don't allow editing, abort if max_edit_size > 0 and node.content_length > max_edit_size: return stream # Open the node and read it node_file = node.get_content() node_data = node_file.read() # Discover the mime type and character encoding of the node # Try in order # - svn:mime-type property # - detect from file name and content (BOM) # - use configured default for Trac mime_view = Mimeview(self.env) mime_type = node.content_type \ or mime_view.get_mimetype(node.name, node_data) \ or 'text/plain' encoding = mime_view.get_charset(node_data, mime_type) # Populate template data content = mime_view.to_unicode(node_data, mime_type, encoding) data['file_content'] = content data['file_encoding'] = encoding # Replace the already rendered preview with a form and textarea bsops_stream = Chrome(self.env).render_template(req, 'file_edit.html', data, fragment=True) transf = Transformer('//div[@id="preview"]' '/table[@class="code"]') stream |= transf.replace( bsops_stream.select('//div[@id="bsop_edit"]')) return stream
def filter_stream(self, req, method, filename, stream, data): action = req.args.get('action', '') if filename == 'browser.html' and action == 'edit': req.perm.require('REPOSITORY_MODIFY') # NB TracBrowserOps already inserts javascript and css we need # So only add css/javascript needed solely by the editor if data['file'] and data['file']['preview']['rendered']: max_edit_size = self.max_edit_size data['max_edit_size'] = max_edit_size # Discard rendered table, replace with textarea of file contents # This means reading the file from the repository again # N.B. If a file is rendered as something other than a table # e.g. due to PreCodeBrowserPlugin this code won't trigger # Retrieve the same node that BrowserModule.process_request() # used to render the preview. # At this point reponame has been removed from data['path'] # and repos has already been determined repos = data['repos'] path = data['path'] rev = data['rev'] node = repos.get_node(path, rev) # If node is too large then don't allow editing, abort if max_edit_size > 0 and node.content_length > max_edit_size: return stream # Open the node and read it node_file = node.get_content() node_data = node_file.read() # Discover the mime type and character encoding of the node # Try in order # - svn:mime-type property # - detect from file name and content (BOM) # - use configured default for Trac mime_view = Mimeview(self.env) mime_type = node.content_type \ or mime_view.get_mimetype(node.name, node_data) \ or 'text/plain' encoding = mime_view.get_charset(node_data, mime_type) # Populate template data content = mime_view.to_unicode(node_data, mime_type, encoding) data['file_content'] = content data['file_encoding'] = encoding # Replace the already rendered preview with a form and textarea bsops_stream = Chrome(self.env).render_template( req, 'file_edit.html', data, fragment=True) transf = Transformer('//div[@id="preview"]' '/table[@class="code"]') stream |= transf.replace( bsops_stream.select('//div[@id="bsop_edit"]')) return stream
def filter_stream(self, req, method, filename, stream, data): if filename == "ticket.html": # replace "project" text input (lineedit) for ticket editing with a selection field filter = Transformer('//input[@id="field-project"]') ticket_data = data['ticket'] script_filter = Transformer('//div[@id="banner"]') stream = stream | filter.replace(self._projects_field_ticket_input(req, ticket_data)) stream = stream | script_filter.before(self._update_milestones_script(req)) return stream
def filter_stream(self, req, method, filename, stream, data): if filename == "ticket.html": # replace "project" text input (lineedit) for ticket editing with a selection field filter = Transformer('//input[@id="field-project"]') ticket_data = data['ticket'] script_filter = Transformer('//div[@id="banner"]') stream = stream | filter.replace( self._projects_field_ticket_input(req, ticket_data)) stream = stream | script_filter.before( self._update_milestones_script(req)) return stream