[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):
_cp_path = "/base/session"
def manifest_glob(self, modlist, key):
def manifest_glob(self, addons, key):
files = []
for i in modlist:
globlist = openerpweb.addons_manifest.get(i, {}).get(key, [])
for j in globlist:
for k in glob.glob(os.path.join(openerpweb.path_addons, i, j)):
files.append(k[len(openerpweb.path_addons):])
for addon in addons:
globlist = openerpweb.addons_manifest.get(addon, {}).get(key, [])
files.extend([
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
def concat_files(self, file_list):
@ -96,14 +100,16 @@ class Session(openerpweb.Controller):
@openerpweb.jsonrequest
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
def csslist(self, req, mods='base,base_hello'):
def csslist(self, req, mods='base'):
return {'files': self.manifest_glob(mods.split(','), 'css')}
@openerpweb.jsonrequest
def jslist(self, req, mods='base,base_hello'):
def jslist(self, req, mods='base'):
return {'files': self.manifest_glob(mods.split(','), 'js')}
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;
this.rpc('/base/session/modules', {}, function(result) {
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;
});
},
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) {
$LAB.setOptions({AlwaysPreserveOrder: true})
.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 !
},
on_modules_loaded: function() {
var self = this;
for(var j=0; j<self.module_list.length; j++) {
var mod = self.module_list[j];
if(self.module_loaded[mod])
for(var j=0; j<this.module_list.length; j++) {
var mod = this.module_list[j];
if(this.module_loaded[mod])
continue;
openerp[mod] = {};
// init module mod
if(openerp._openerp[mod] != undefined) {
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",
"depends": [],
"js": ["static/*/js/*.js"],
"css": [],
'active': False
"js": [
'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js',
'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 = 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.CalendarView = openerp.base.Controller.extend({
// Dhtmlx scheduler ?
@ -201,7 +201,7 @@ openerp.base.CalendarView = openerp.base.Controller.extend({
do_hide: function () {
this.$element.hide();
},
}
});
//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')
if os.path.isfile(manifest_path):
manifest = eval(open(manifest_path).read())
if manifest.get('active', True):
print "Loading", i
m = __import__(i)
addons_module[i] = m
addons_manifest[i] = manifest
print "Loading", i
m = __import__(i)
addons_module[i] = m
addons_manifest[i] = manifest
for k, v in controllers_class.items():
if k not in controllers_object:
o = v()