import json
-from unfold.prelude import Prelude
+from django.template.loader import render_to_string
+
from manifold.manifoldapi import ManifoldAPI
+
+from unfold.prelude import Prelude
+
from myslice.config import Config
# decorator to deflect calls on this Page to its prelude
self.request=request
# all plugins mentioned in this page
self._plugins = {}
- # queue of queries
+ # the set of all queries
+ self._queries=set()
+ # queue of queries with maybe a domid, see enqueue_query
self._queue=[]
# global prelude object
self.prelude=Prelude(css_files='css/plugin.css')
return self._plugins.get(domid,None)
def reset_queue (self):
+ self._queries = set()
self._queue = []
- # the js async methods (see manifold_async_success)
+ # the js async methods (see manifold.asynchroneous_success)
# offer the option to deliver the result to a specific DOM elt
# otherwise (i.e. if domid not provided)
# it goes through the pubsub using query's uuid
def enqueue_query (self, query, domid=None):
- self._queue.append ( (query,domid,) )
+ self._queries = self._queries.union(set( [ query, ] ))
+ self._queue.append ( (query.query_uuid,domid,) )
# return the javascript that triggers all the queries
+ # xxx could fruitfully be renamed expose_queries_to_javascript or something
def exec_queue_asynchroneously (self):
- js = ""
- js += "var async_queries = new Array();\n"
- for (query,domid) in self._queue:
- qjson=query.to_json()
- id="'%s'"%domid if domid else 'undefined'
- js += "async_queries.push({'query':%(qjson)s, 'id':%(id)s});\n"%locals()
- js += "onFunctionAvailable('manifold_async_exec', function() {manifold_async_exec(async_queries);}, this, true);"
+ # compute variables to expose to the template
+ env = {}
+ # expose the json definition of all queries
+ env['queries_jsons'] = [ query.to_json() for query in self._queries ]
+ env['query_uuid_domids'] = [ {'query_uuid' : a, 'domid': '"%s"'%b if b else 'null'} for (a,b) in self._queue ]
+ javascript = render_to_string ("page-queries.js",env)
self.reset_queue()
- # run only once the document is ready
- js = "$(document).ready(function(){%(js)s})"%locals()
- self.add_js_chunks (js)
+ self.add_js_chunks (javascript)
+
def expose_js_metadata(self):
request.session['metadata'] = self._metadata
- javascript = "all_headers=" + json.dumps(self._metadata) + ";"
+ javascript = "var MANIFOLD_METADATA =" + json.dumps(self._metadata) + ";"
self.add_js_chunks(javascript)
def metadata_get_fields(self, method):
@to_prelude
def add_css_chunks (self):pass
@to_prelude
- def template_env (self):pass
+ def prelude_env (self):pass