-
Notifications
You must be signed in to change notification settings - Fork 0
/
jamaica.js
89 lines (88 loc) · 3.2 KB
/
jamaica.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
RESTRICT_HIDE=1;
RESTRICT_RO=2;
RESTRICT_REQ=4;
TYPE_INDEX=0;
NAME_INDEX=1;
PROPS_INDEX=2;
RESTRICTIONS_INDEX=2;
VALUE_INDEX=3;
String.prototype.humanize=function(){return pl.map(this.replace(/^_/,'').split('_'),function(w){return w[0].toUpperCase()+w.slice(1)}).join(' ');}
pl(function(){
r.call(_jamaica_json,'body');
pl('.content:empty').remove();
var contents=pl('.content');
if (contents.get().length===0){
pl('#main_menu__section').append('<div id="current_content" class="content active"></div>');
}else{
contents.appendTo('#main_menu__section');
}
pl.win_bind('form','submit',j.formSubmit);
pl.win_bind('.navigation li a','click',j.menuClick);
pl.win_bind('.navigation li h1','click',j.toggleNav);
pl.win_bind('.editable','click',j.toggleColStat);
pl.win_bind('.editing input,.editing textarea','keydown',j.colEditKeydown);
pl.win_bind('.instanceAction','click',j.instanceActionClick);
pl.win_bind('input[value=delete]','click',j.deleteInstance);
});
j={
copyObj:function(o){return JSON.parse(JSON.stringify(o));},
ajax_defaults:{
load:function(){pl('body').css('cursor','wait')},
always:function(){pl('body').css('cursor','default');},
success:function(json){pl(this).parent(2).replaceWith(r.call(json).toDom()); },
error:function(stat,json){
var err=JSON.parse(json);
var attrs=err[1];
var frm_id=this.id;
if (attrs.error_type=='validation') {
for (col in attrs.error_details) {
pl('#'+frm_id+' [id$=__'+col+']').addClass('errorCol').after(r.call(["p",{"class":"errorMsg"},attrs.error_details[col]]).toDom());
}
}
},
},
make_ajax_params:function(params){
return pl.extend(params,
pl.extend(pl.get_callbacks.call(this,j.ajax_defaults),{
dataType:'json',
url:this.href || this.action,
type: this.method ? this.method.toUpperCase() : 'GET'
})
);
},
menuClick:function(e){
e.preventDefault();
pl.ajax(j.make_ajax_params.call(this,{success:function(json){r.call(json,'#current_content')}}));
},
formSubmit:function(e){
e.preventDefault();
pl.ajax(j.make_ajax_params.call(this,{data:pl.serialize(this.id)}))
},
toggleNav:function(e){
pl(pl(this).parents('li').elements[0]).toggleClass('collapsed');
},
toggleColStat:function(e){
p=this.selector ? this : pl(this);
p.toggleClass("editing").toggleClass("editable");
if(p.hasClass("editing")){
if (p.children('input[type=submit]').get().length==0) p.append(pl('<input>',{type:'submit',value:'save'}).get());
p.children().get()[0].focus();
} else {
p.children('input[type=text],textarea').val(p.children('span').html())
}
},
colEditKeydown:function(e){
if (e.keyCode==27){
j.toggleColStat.call(pl(this).parents('.editing'));
}
},
instanceActionClick:function(e){
var frm=pl(this).parents('form');
var url=frm.attr('action')+'/'+pl(this).attr('class').replace(/.* /,'');
pl.ajax(j.make_ajax_params.call({href:url},{success:function(json){frm.after(r.call(json).toDom())}}))
},
deleteInstance:function(e){
var frm=pl(this).parents('form');
pl.ajax({url:frm.attr('action'),type:'POST',data:{_method:'delete'},success:function(){frm.remove()}})
},
}