c4e554f545cb

merge
[view raw] [browse files]
author Chris Eldredge <chris.eldredge@gmail.com>
date Mon, 13 Aug 2012 18:43:07 +0100
parents 737c9dda302a (current diff) f605dfaddcc9 (diff)
children 133cd05dafd1
branches/tags (none)
files __init__.py

Changes

--- a/__init__.py	Mon Aug 13 18:33:19 2012 +0100
+++ b/__init__.py	Mon Aug 13 18:43:07 2012 +0100
@@ -1,159 +1,159 @@
-import os
-import sys
-
-# If using TortoiseHg, obtain Python-Markdown and tell Python where to find it:
-#sys.path.append("c:/python27/Lib/site-packages/markdown-2.2.0-py2.7.egg")
-
-import logging, markdown, mimetypes
-from mercurial import extensions, encoding, util
-from mercurial.hgweb import webcommands, webutil, common
-from mercurial.hgweb.common import ErrorResponse, HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
-import mdx_urlrebase
-
-logging.basicConfig()
-
-def preview_markdown(web, req, tmpl):
-	f = req.form.get('node', [''])[0]
-	path = req.form.get('file', [''])[0]
-	if path:
-		f = f + '/' + path
-	
-	if not f:
-		f = find_working_copy_readme(web.repo.root)
-	
-	parts = os.path.splitext(f)
-	
-	try:
-		text = file(web.repo.root + "/" + f, "rb").read()
-	except IOError:
-		raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + f)
-	
-	if not parts[1] == '.markdown' and not parts[1] == '.md':
-		return preview_sendraw(web, req, f, text)
-	
-	md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])])	
-	html = md.convert(text)
-	
-	args = {'file':f,
-			'readmefilename':parts[0].split('/')[-1],
-			'path':webutil.up(f),
-			'readme':html,
-			'rev':'PREVIEW',
-			'node':'PREVIEW'}
-
-	return tmpl("markdown",	**args)
-
-def preview_sendraw(web, req, path, data):
-	guessmime = web.configbool('web', 'guessmime', False)
-
-	if util.binary(data):
-		mt = 'application/binary'
-	else:
-		mt = 'text/plain'
-	
-	if guessmime:
-		mt = mimetypes.guess_type(path)[0]
-		if mt is None:
-			mt = binary(text) and 'application/binary' or 'text/plain'
-	if mt.startswith('text/'):
-		mt += '; charset="%s"' % encoding.encoding
-
-	req.respond(HTTP_OK, mt, path, len(data))
-	return [data]
-	
-def file_markdown(orig, web, req, tmpl):
-	f = req.form.get('file', [''])[0]
-	parts = os.path.splitext(f)
-	
-	try:
-		fctx = webutil.filectx(web.repo, req)
-		text = fctx.data()
-	except LookupError, inst:
-		try:
-			return webcommands.manifest(web, req, tmpl)
-		except ErrorResponse:
-			raise inst
-
-	if util.binary(text):
-		return webcommands.rawfile(web, req, tmpl)
-
-	if not parts[1] == '.markdown' and not parts[1] == '.md':
-		return orig(web, req, tmpl)
-
-	md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])])	
-	html = md.convert(text)
-	
-	args = {'file':f,
-			'readmefilename':parts[0].split('/')[-1],
-			'path':webutil.up(f),
-			'readme':html}
-
-	args.update({'rev':fctx.rev(),
-			'node':fctx.hex(),
-			'author':fctx.user(),
-			'date':fctx.date(),
-			'desc':fctx.description(),
-			'branch':webutil.nodebranchnodefault(fctx),
-			'parent':webutil.parents(fctx),
-			'child':webutil.children(fctx)})
-
-	return tmpl("markdown",	**args)
-
-def summary_markdown(orig, web, req, tmpl):
-	"""
-	Decorates the default summary view by adding 'readme' and 'readmefile' content
-	to the template.
-	"""
-	
-	changeid = web.config('web', 'markdown.changeid', 'tip')
-	previewMode = False
-	text = None
-	
-	cctx = web.repo[changeid]
-	changeid = cctx.hex()[0:12]
-	for filename in cctx:
-		if filename.lower() == 'readme.md' or filename.lower() == 'readme.markdown':
-			fctx = cctx.filectx(filename)
-			text = fctx.data()
-			readmefile = filename
-			break
-	
-	if text:
-		ext = os.path.splitext(readmefile)[1]
-		base_url = tmpl.defaults['url'] + 'file/' + changeid + "/"
-		base_raw_url = tmpl.defaults['url'] + 'rawfile/' + changeid + "/"
-		
-		def rebase(proc, e, attr):
-			uri = e.get(attr, '')
-			if '://' in uri or uri.startswith('/'):
-				return
-			base = base_url
-			if attr == 'src':
-				base = base_raw_url
-			e.set(attr, proc.rebase(base, uri))
-		
-		ext = mdx_urlrebase.UrlRebaseExtension(configs=[('rebase', rebase)])
-		md = markdown.Markdown(
-			extensions=[ext, 'wikilinks'],
-			extension_configs={
-				'wikilinks' : [('base_url', base_url), ('end_url', ext)]})
-		readme = md.convert(text)
-	else:
-		readmefile = "ReadMe"
-		readme = "Add ReadMe.md or ReadMe.markdown to this repository to display it here."
-		
-	tmpl.defaults['readmefilename'] = readmefile
-	tmpl.defaults['readme'] = readme
-	
-	return orig(web, req, tmpl)
-
-def find_working_copy_readme(dir):
-	for filename in os.listdir(dir):
-		if filename.lower() == 'readme.md' or filename.lower() == 'readme.markdown':
-			return filename
-
-def extsetup():
-	extensions.wrapfunction(webcommands, 'file', file_markdown)
-	extensions.wrapfunction(webcommands, 'summary', summary_markdown)
-	webcommands.preview = preview_markdown
-	webcommands.__all__.append('preview')
+import os
+import sys
+
+# If using TortoiseHg, obtain Python-Markdown and tell Python where to find it:
+#sys.path.append("c:/python27/Lib/site-packages/markdown-2.2.0-py2.7.egg")
+
+import logging, markdown, mimetypes
+from mercurial import extensions, encoding, util
+from mercurial.hgweb import webcommands, webutil, common
+from mercurial.hgweb.common import ErrorResponse, HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
+import mdx_urlrebase
+
+logging.basicConfig()
+
+def preview_markdown(web, req, tmpl):
+	f = req.form.get('node', [''])[0]
+	path = req.form.get('file', [''])[0]
+	if path:
+		f = f + '/' + path
+	
+	if not f:
+		f = find_working_copy_readme(web.repo.root)
+	
+	parts = os.path.splitext(f)
+	
+	try:
+		text = file(web.repo.root + "/" + f, "rb").read()
+	except IOError:
+		raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + f)
+	
+	if not parts[1] == '.markdown' and not parts[1] == '.md':
+		return preview_sendraw(web, req, f, text)
+	
+	md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])])	
+	html = md.convert(text)
+	
+	args = {'file':f,
+			'readmefilename':parts[0].split('/')[-1],
+			'path':webutil.up(f),
+			'readme':html,
+			'rev':'PREVIEW',
+			'node':'PREVIEW'}
+
+	return tmpl("markdown",	**args)
+
+def preview_sendraw(web, req, path, data):
+	guessmime = web.configbool('web', 'guessmime', False)
+
+	if util.binary(data):
+		mt = 'application/binary'
+	else:
+		mt = 'text/plain'
+	
+	if guessmime:
+		mt = mimetypes.guess_type(path)[0]
+		if mt is None:
+			mt = binary(text) and 'application/binary' or 'text/plain'
+	if mt.startswith('text/'):
+		mt += '; charset="%s"' % encoding.encoding
+
+	req.respond(HTTP_OK, mt, path, len(data))
+	return [data]
+	
+def file_markdown(orig, web, req, tmpl):
+	f = req.form.get('file', [''])[0]
+	parts = os.path.splitext(f)
+	
+	try:
+		fctx = webutil.filectx(web.repo, req)
+		text = fctx.data()
+	except LookupError, inst:
+		try:
+			return webcommands.manifest(web, req, tmpl)
+		except ErrorResponse:
+			raise inst
+
+	if util.binary(text):
+		return webcommands.rawfile(web, req, tmpl)
+
+	if not parts[1] == '.markdown' and not parts[1] == '.md':
+		return orig(web, req, tmpl)
+
+	md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])])	
+	html = md.convert(text)
+	
+	args = {'file':f,
+			'readmefilename':parts[0].split('/')[-1],
+			'path':webutil.up(f),
+			'readme':html}
+
+	args.update({'rev':fctx.rev(),
+			'node':fctx.hex(),
+			'author':fctx.user(),
+			'date':fctx.date(),
+			'desc':fctx.description(),
+			'branch':webutil.nodebranchnodefault(fctx),
+			'parent':webutil.parents(fctx),
+			'child':webutil.children(fctx)})
+
+	return tmpl("markdown",	**args)
+
+def summary_markdown(orig, web, req, tmpl):
+	"""
+	Decorates the default summary view by adding 'readme' and 'readmefile' content
+	to the template.
+	"""
+	
+	changeid = web.config('web', 'markdown.changeid', 'tip')
+	previewMode = False
+	text = None
+	
+	cctx = web.repo[changeid]
+	changeid = cctx.hex()[0:12]
+	for filename in cctx:
+		if filename.lower() == 'readme.md' or filename.lower() == 'readme.markdown':
+			fctx = cctx.filectx(filename)
+			text = fctx.data()
+			readmefile = filename
+			break
+	
+	if text:
+		ext = os.path.splitext(readmefile)[1]
+		base_url = tmpl.defaults['url'] + 'file/' + changeid + "/"
+		base_raw_url = tmpl.defaults['url'] + 'rawfile/' + changeid + "/"
+		
+		def rebase(proc, e, attr):
+			uri = e.get(attr, '')
+			if '://' in uri or uri.startswith('/'):
+				return
+			base = base_url
+			if attr == 'src':
+				base = base_raw_url
+			e.set(attr, proc.rebase(base, uri))
+		
+		ext = mdx_urlrebase.UrlRebaseExtension(configs=[('rebase', rebase)])
+		md = markdown.Markdown(
+			extensions=[ext, 'wikilinks'],
+			extension_configs={
+				'wikilinks' : [('base_url', base_url), ('end_url', ext)]})
+		readme = md.convert(text)
+	else:
+		readmefile = "ReadMe"
+		readme = "Add ReadMe.md or ReadMe.markdown to this repository to display it here."
+		
+	tmpl.defaults['readmefilename'] = readmefile
+	tmpl.defaults['readme'] = readme
+	
+	return orig(web, req, tmpl)
+
+def find_working_copy_readme(dir):
+	for filename in os.listdir(dir):
+		if filename.lower() == 'readme.md' or filename.lower() == 'readme.markdown':
+			return filename
+
+def extsetup():
+	extensions.wrapfunction(webcommands, 'file', file_markdown)
+	extensions.wrapfunction(webcommands, 'summary', summary_markdown)
+	webcommands.preview = preview_markdown
+	webcommands.__all__.append('preview')
--- a/templates/markdown/map	Mon Aug 13 18:33:19 2012 +0100
+++ b/templates/markdown/map	Mon Aug 13 18:43:07 2012 +0100
@@ -69,7 +69,8 @@
     <td>
       <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
       <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+      <a href="{url}markdown/{node|short}/{file|urlescape}{sessionvars%urlparameter}">markdown</a>
     </td>
   </tr>'
 filerevision = filerevision.tmpl