コード例 #1
0
	def __init__(self):
		"""
			load libraries
		"""
		from build.bundle import Bundle
		from nav import Nav
		
		self.bundle = Bundle()
		self.nav = Nav()
コード例 #2
0
class Project:
	"""
		Build a project
		Make files::
			
			index.html
			assets/template.html
			assets/js/core.min.js
			assets/timestamps.json
	"""	
	def __init__(self):
		"""
			load libraries
		"""
		from build.bundle import Bundle
		from nav import Nav
		
		self.bundle = Bundle()
		self.nav = Nav()

	def boot(self):
		"""
			returns bootstrap js
		"""
		import json

		corejs = open('lib/js/core.min.js', 'r')
		v = int(self.vc.repo.get_value('last_version_number') or 0) + 1
		
		boot = ('window._version_number="%s"' % str(v)) + \
			'\n' + corejs.read()

		corejs.close()
		
		return boot

	def render_templates(self):
		"""
			Generate static files from templates
		"""

		# render templates
		import os
		from jinja2 import Environment, FileSystemLoader
		from build.markdown2_extn import Markdown2Extension

		env = Environment(loader=FileSystemLoader('templates'), extensions=[Markdown2Extension])

		# dynamic boot info
		env.globals['boot'] = self.boot()
		env.globals['nav'] = self.nav.html()
		page_info = self.nav.page_info()
		
		for wt in os.walk('templates'):
			for fname in wt[2]:
				if fname.split('.')[-1]=='html' and not fname.startswith('template'):
					fpath = os.path.relpath(os.path.join(wt[0], fname), 'templates')
					temp = env.get_template(fpath)
					
					env.globals.update(self.nav.page_info_template)
					env.globals.update(page_info.get(fpath, {}))
					
					# out file in parent folder of template
					f = open(fpath, 'w')
					f.write(temp.render())
					f.close()
					print "Rendered %s | %.2fkb" % (fpath, os.path.getsize(fpath) / 1024.0)
				

	def build(self):
		"""
			Build all js files, index.html and template.html
		"""
		from build.version import VersionControl
		
		self.vc = VersionControl()
		self.vc.add_all()
		
		# index, template if framework is dirty
		if self.vc.repo.uncommitted():
			self.bundle.bundle(self.vc)
			self.render_templates()

			# again add all bundles
			self.vc.add_all()
			self.vc.repo.commit()
		
		self.vc.close()