|
- import webnotes
- import webnotes.model.doc
- import webnotes.model.code
-
- conn = webnotes.conn
-
- class Page:
- """
- A page class helps in loading a Page in the system. On loading
-
- * Page will import Client Script from other pages where specified by `$import(page_name)`
- * Execute dynamic HTML if the `content` starts with `#python`
- """
- def __init__(self, name):
- self.name = name
-
- def get_from_files(self, doc, module):
- """
- Loads page info from files in module
- """
- # load js
- doc.fields['__script'] = module.get_doc_file('page',doc.name,'.js').read() or doc.script
- doc.script = None
-
- # load css
- css = module.get_doc_file('page',doc.name,'.css').read()
- if css: doc.style = css
-
- # html
- doc.content = module.get_doc_file('page',doc.name,'.html').read() or doc.content
-
- def get_template(self, template):
- """
- Returns the page template content
- """
- ret = '%(content)s'
- # load code from template
- if template:
- from webnotes.modules import Module
- ret = Module(webnotes.conn.get_value('Page Template', template, 'module'))\
- .get_doc_file('Page Template', template, '.html').read()
- if not ret:
- ret = webnotes.conn.get_value('Page Template', template, 'template')
-
- return ret
-
- def process_content(self, doc):
- """
- Put in template and generate dynamic if starts with #!python
- """
- template = self.get_template(doc.template)
- content = ''
-
- # eval content
- if doc.content and doc.content.startswith('#!python'):
- from webnotes.model.code import execute
- content = template % {'content': execute(doc.content).get('content')}
- else:
- content = template % {'content': doc.content or ''}
-
- doc.__content = content
-
- def load(self):
- """
- Returns :term:`doclist` of the `Page`
- """
- from webnotes.modules import Module
-
- doclist = webnotes.model.doc.get('Page', self.name)
- doc = doclist[0]
-
- # load from module
- if doc.module:
- module = Module(doc.module)
- self.get_from_files(doc, module)
-
- # process
- self.process_content(doc)
-
- # add stylesheet
- if doc.stylesheet:
- doclist += self.load_stylesheet(doc.stylesheet)
-
- return doclist
-
- def load_stylesheet(self, stylesheet):
- import webnotes
- # load stylesheet
- loaded = eval(webnotes.form_dict.get('stylesheets') or '[]')
- if not stylesheet in loaded:
- import webnotes.model.doc
- from webnotes.modules import Module
-
- # doclist
- sslist = webnotes.model.doc.get('Stylesheet', stylesheet)
-
- # stylesheet from file
- css = Module(sslist[0].module).get_doc_file('Stylesheet', stylesheet, '.css').read()
-
- if css: sslist[0].stylesheet = css
- return sslist
- else:
- return []
-
- def get(name):
- """
- Return the :term:`doclist` of the `Page` specified by `name`
- """
- return Page(name).load()
-
- def getpage():
- """
- Load the page from `webnotes.form` and send it via `webnotes.response`
- """
- doclist = get(webnotes.form.getvalue('name'))
-
- # send
- webnotes.response['docs'] = doclist
-
|