[FIX] correctly load calendar addon

* Fix loading of active modules (don't hardcode list)
* Implement loading of CSS files via css list
* Fix Calendar addon
  - Add list of JS files to descriptor
  - Add list of CSS files to descriptor
  - Have calendar load its own qweb template file
  - Put calendar in the correct namespace (openerp.base_calendar) instead of a nonsensical one

bzr revid: xmo@openerp.com-20110413125042-feiimul8617a51d6
This commit is contained in:
Xavier Morel 2011-04-13 14:50:42 +02:00
parent b7a638ccde
commit b4cd776b25
6 changed files with 79 additions and 27 deletions

View File

@ -58,13 +58,17 @@ class Xml2Json:
class Session(openerpweb.Controller): class Session(openerpweb.Controller):
_cp_path = "/base/session" _cp_path = "/base/session"
def manifest_glob(self, modlist, key): def manifest_glob(self, addons, key):
files = [] files = []
for i in modlist: for addon in addons:
globlist = openerpweb.addons_manifest.get(i, {}).get(key, []) globlist = openerpweb.addons_manifest.get(addon, {}).get(key, [])
for j in globlist:
for k in glob.glob(os.path.join(openerpweb.path_addons, i, j)): files.extend([
files.append(k[len(openerpweb.path_addons):]) resource_path[len(openerpweb.path_addons):]
for pattern in globlist
for resource_path in glob.glob(os.path.join(
openerpweb.path_addons, addon, pattern))
])
return files return files
def concat_files(self, file_list): def concat_files(self, file_list):
@ -96,14 +100,16 @@ class Session(openerpweb.Controller):
@openerpweb.jsonrequest @openerpweb.jsonrequest
def modules(self, req): def modules(self, req):
return {"modules": ["base", "base_hello", "base_calendar", "base_gantt"]} return {"modules": [name
for name, manifest in openerpweb.addons_manifest.iteritems()
if manifest.get('active', True)]}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def csslist(self, req, mods='base,base_hello'): def csslist(self, req, mods='base'):
return {'files': self.manifest_glob(mods.split(','), 'css')} return {'files': self.manifest_glob(mods.split(','), 'css')}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def jslist(self, req, mods='base,base_hello'): def jslist(self, req, mods='base'):
return {'files': self.manifest_glob(mods.split(','), 'js')} return {'files': self.manifest_glob(mods.split(','), 'js')}
def css(self, req, mods='base,base_hello'): def css(self, req, mods='base,base_hello'):

View File

@ -450,10 +450,22 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
var self = this; var self = this;
this.rpc('/base/session/modules', {}, function(result) { this.rpc('/base/session/modules', {}, function(result) {
self.module_list = result['modules']; self.module_list = result['modules'];
self.rpc('/base/session/jslist', {"mods": self.module_list.join(',')}, self.debug ? self.do_load_modules_debug : self.do_load_modules_prod); var modules = self.module_list.join(',');
self.rpc('/base/session/csslist', {mods: modules}, self.do_load_css);
self.rpc('/base/session/jslist', {"mods": modules}, self.debug ? self.do_load_modules_debug : self.do_load_modules_prod);
openerp._modules_loaded = true; openerp._modules_loaded = true;
}); });
}, },
do_load_css: function (result) {
console.log('loading CSS files');
_.each(result.files, function (file) {
$('head').append($('<link>', {
'href': file,
'rel': 'stylesheet',
'type': 'text/css'
}));
});
},
do_load_modules_debug: function(result) { do_load_modules_debug: function(result) {
$LAB.setOptions({AlwaysPreserveOrder: true}) $LAB.setOptions({AlwaysPreserveOrder: true})
.script(result.files) .script(result.files)
@ -466,16 +478,15 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
// use $.getScript(your_3rd_party-script.js); ? i want to keep lineno ! // use $.getScript(your_3rd_party-script.js); ? i want to keep lineno !
}, },
on_modules_loaded: function() { on_modules_loaded: function() {
var self = this; for(var j=0; j<this.module_list.length; j++) {
for(var j=0; j<self.module_list.length; j++) { var mod = this.module_list[j];
var mod = self.module_list[j]; if(this.module_loaded[mod])
if(self.module_loaded[mod])
continue; continue;
openerp[mod] = {}; openerp[mod] = {};
// init module mod // init module mod
if(openerp._openerp[mod] != undefined) { if(openerp._openerp[mod] != undefined) {
openerp._openerp[mod](openerp); openerp._openerp[mod](openerp);
self.module_loaded[mod] = true; this.module_loaded[mod] = true;
} }
} }
} }

View File

@ -1,8 +1,11 @@
{ {
"name": "Hello", "name": "Base calendar",
"version": "2.0", "version": "2.0",
"depends": [], "depends": [],
"js": ["static/*/js/*.js"], "js": [
"css": [], 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js',
'active': False 'static/src/js/calendar.js'
],
"css": ['static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css'],
'active': True
} }

View File

@ -2,8 +2,8 @@
* OpenERP base_calendar * OpenERP base_calendar
*---------------------------------------------------------*/ *---------------------------------------------------------*/
openerp.base.calendar = function(openerp) { openerp.base_calendar = function(openerp) {
QWeb.add_template('/base_calendar/static/src/xml/base_calendar.xml');
openerp.base.views.add('calendar', 'openerp.base.CalendarView'); openerp.base.views.add('calendar', 'openerp.base.CalendarView');
openerp.base.CalendarView = openerp.base.Controller.extend({ openerp.base.CalendarView = openerp.base.Controller.extend({
// Dhtmlx scheduler ? // Dhtmlx scheduler ?
@ -201,7 +201,7 @@ openerp.base.CalendarView = openerp.base.Controller.extend({
do_hide: function () { do_hide: function () {
this.$element.hide(); this.$element.hide();
}, }
}); });
//openerp.base.Action = openerp.base.Action.extend({ //openerp.base.Action = openerp.base.Action.extend({

View File

@ -0,0 +1,33 @@
<template>
<t t-name="CalendarView">
<h3 class="title"><t t-esc="view.fields_view.arch.attrs.string"/></h3>
<table class="calendar-view" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tr>
<td>
<div style="height: 1000px;width: 100%;">
<div id="calendar-sidebar">
</div>
</div>
</td>
<td style="width:85%;" align="left">
<div id="openerp_scheduler" class="dhx_cal_container" style="height: 1000px;width: 100%;">
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button"/>
<div class="dhx_cal_next_button"/>
<div class="dhx_cal_today_button"/>
<div class="dhx_cal_date"/>
<div class="dhx_minical_icon" id="dhx_minical_icon"/>
<div class="dhx_cal_tab" name="day_tab" style="right:204px;"/>
<div class="dhx_cal_tab" name="week_tab" style="right:140px;"/>
<div class="dhx_cal_tab" name="month_tab" style="right:76px;"/>
</div>
<div class="dhx_cal_header">
</div>
<div class="dhx_cal_data">
</div>
</div>
</td>
</tr>
</table>
</t>
</template>

View File

@ -436,11 +436,10 @@ class Root(object):
manifest_path = os.path.join(path_addons, i, '__openerp__.py') manifest_path = os.path.join(path_addons, i, '__openerp__.py')
if os.path.isfile(manifest_path): if os.path.isfile(manifest_path):
manifest = eval(open(manifest_path).read()) manifest = eval(open(manifest_path).read())
if manifest.get('active', True): print "Loading", i
print "Loading", i m = __import__(i)
m = __import__(i) addons_module[i] = m
addons_module[i] = m addons_manifest[i] = manifest
addons_manifest[i] = manifest
for k, v in controllers_class.items(): for k, v in controllers_class.items():
if k not in controllers_object: if k not in controllers_object:
o = v() o = v()