rad_common_interface 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/app/static/demo/images/img1.jpg +0 -0
- data/app/static/demo/images/img1_200.jpg +0 -0
- data/app/static/demo/images/img1_icon.jpg +0 -0
- data/app/static/demo/images/img1_thumb.jpg +0 -0
- data/app/static/demo/images/img2.jpg +0 -0
- data/app/static/demo/images/img2_200.jpg +0 -0
- data/app/static/demo/images/img2_icon.jpg +0 -0
- data/app/static/demo/images/img2_thumb.jpg +0 -0
- data/app/static/demo/images/img3.jpg +0 -0
- data/app/static/demo/images/img3_200.jpg +0 -0
- data/app/static/demo/images/img3_icon.jpg +0 -0
- data/app/static/demo/images/img3_thumb.jpg +0 -0
- data/app/static/demo/images/img_big.jpg +0 -0
- data/app/static/demo/images/img_big_icon.jpg +0 -0
- data/app/static/demo/images/img_big_thum.jpg +0 -0
- data/app/static/demo/images/video_icon.png +0 -0
- data/app/static/face/attachments.js +85 -0
- data/app/static/face/dialogs.js +189 -0
- data/app/static/face/discussion.js +47 -0
- data/app/static/face/markup.js +53 -0
- data/app/static/face/more.js +33 -0
- data/app/static/face/table.js +24 -0
- data/app/static/face/tabs.js +26 -0
- data/app/static/face.css +8 -0
- data/app/static/face.js +109 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.ContextMenu.js +36 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.Image.js +121 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.Mask.js +76 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.Static.js +0 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.css +12 -0
- data/app/static/lib/SimpleDialog/SimpleDialog.js +158 -0
- data/app/static/lib/ajax_file_uploading.js +33 -0
- data/app/static/themes/default/reset.css +127 -0
- data/app/static/themes/default/style/application.less +51 -0
- data/app/static/themes/default/style/aspects.less +15 -0
- data/app/static/themes/default/style/basic.less +49 -0
- data/app/static/themes/default/style/forms.less +34 -0
- data/app/static/themes/default/style/items.less +43 -0
- data/app/static/themes/default/style/markup.less +16 -0
- data/app/static/themes/default/style/micelaneous.less +10 -0
- data/app/static/themes/default/style/mixins.less +72 -0
- data/app/static/themes/default/style/styles.less +57 -0
- data/app/static/themes/default/style/tools.less +15 -0
- data/app/static/themes/default/style/variables.less +38 -0
- data/app/static/themes/default/style.css +944 -0
- data/app/static/themes/default/style.js +127 -0
- data/app/static/themes/default/style.less +22 -0
- data/app/static/vendor/flext.js +254 -0
- data/app/static/vendor/formalize/formalize.css +311 -0
- data/app/static/vendor/formalize/mootools.formalize.js +163 -0
- data/app/static/vendor/formalize/reset.css +171 -0
- data/app/static/vendor/iFrameFormRequest.js +95 -0
- data/app/static/vendor/mootools-more.js +4185 -0
- data/app/static/vendor/purr/purr.css +43 -0
- data/app/static/vendor/purr/purr.js +308 -0
- data/app/views/face/_attachments_tag.html.haml +17 -0
- data/app/views/rad/face/demo/commons/aspects.html.haml +32 -0
- data/app/views/rad/face/demo/commons/basic.html.haml +86 -0
- data/app/views/rad/face/demo/commons/forms.html.haml +57 -0
- data/app/views/rad/face/demo/commons/items.html.haml +32 -0
- data/app/views/rad/face/demo/commons/style.html.erb +111 -0
- data/app/views/rad/face/demo/dialogs/dialog.js.haml +1 -0
- data/app/views/rad/face/demo/dialogs/dialog_form.html.haml +7 -0
- data/app/views/rad/face/demo/dialogs/dialog_form.js.erb +1 -0
- data/app/views/rad/face/demo/dialogs/inplace/_element.html.haml +3 -0
- data/app/views/rad/face/demo/dialogs/inplace/_form.html.haml +3 -0
- data/app/views/rad/face/demo/dialogs/inplace.js.haml +1 -0
- data/app/views/rad/face/demo/dialogs/inplace_form.js.haml +2 -0
- data/app/views/rad/face/demo/dialogs/show.html.haml +27 -0
- data/app/views/rad/face/demo/helps/help.html.haml +1 -0
- data/app/views/rad/face/demo/helps/index.html.haml +25 -0
- data/app/views/rad/face/demo/layout.html.haml +3 -0
- data/app/views/rad/face/demo/layout.js.haml +11 -0
- data/app/views/rad/face/demo/shared/_comments.html.haml +11 -0
- data/app/views/rad/face/demo/shared/_core_tools.html.haml +6 -0
- data/app/views/rad/face/demo/shared/_line_previews.html.haml +40 -0
- data/app/views/rad/face/demo/shared/_paginator.html.haml +7 -0
- data/app/views/rad/face/demo/shared/_tools.html.haml +25 -0
- data/app/views/rad/face/demo/shared/_top_navigation_bottom.html.haml +34 -0
- data/app/views/rad/face/demo/sites/blog.html.haml +12 -0
- data/app/views/rad/face/demo/sites/home.html.haml +8 -0
- data/app/views/rad/face/demo/sites/post.html.haml +10 -0
- data/app/views/rad/face/demo/sites/style.html.haml +8 -0
- data/app/views/themes/default/application.html.haml +25 -0
- data/app/views/themes/default/basic_list.html.haml +2 -0
- data/app/views/themes/default/basic_list_item.html.haml +5 -0
- data/app/views/themes/default/bottom_panel.html.haml +16 -0
- data/app/views/themes/default/comment.html.haml +20 -0
- data/app/views/themes/default/controls.html.haml +3 -0
- data/app/views/themes/default/demo_metadata.rb +118 -0
- data/app/views/themes/default/details.html.haml +6 -0
- data/app/views/themes/default/discussion.html.haml +7 -0
- data/app/views/themes/default/divider.html.haml +2 -0
- data/app/views/themes/default/forms/errors.html.haml +4 -0
- data/app/views/themes/default/forms/field.html.haml +18 -0
- data/app/views/themes/default/forms/form.html.haml +4 -0
- data/app/views/themes/default/forms/line.html.haml +8 -0
- data/app/views/themes/default/help.html.haml +3 -0
- data/app/views/themes/default/html.html.haml +1 -0
- data/app/views/themes/default/index.html.haml +6 -0
- data/app/views/themes/default/item.html.haml +12 -0
- data/app/views/themes/default/layout_templates/dashboard.html.haml +1 -0
- data/app/views/themes/default/layout_templates/default.html.haml +22 -0
- data/app/views/themes/default/line.html.haml +21 -0
- data/app/views/themes/default/message.html.haml +2 -0
- data/app/views/themes/default/more.html.haml +8 -0
- data/app/views/themes/default/narrow.html.haml +2 -0
- data/app/views/themes/default/navigation.html.haml +16 -0
- data/app/views/themes/default/paginator.html.haml +8 -0
- data/app/views/themes/default/shared/details.html.haml +17 -0
- data/app/views/themes/default/table.html.haml +9 -0
- data/app/views/themes/default/table_row.html.haml +4 -0
- data/app/views/themes/default/tabs.html.haml +27 -0
- data/app/views/themes/default/tag_selector.html.haml +10 -0
- data/app/views/themes/default/text.html.haml +4 -0
- data/app/views/themes/default/thumb.html.haml +10 -0
- data/app/views/themes/default/title.html.haml +3 -0
- data/app/views/themes/default/tool.html.haml +5 -0
- data/app/views/themes/default/toolbar.html.haml +16 -0
- data/app/views/themes/default/top_panel.html.haml +18 -0
- metadata +153 -25
data/Rakefile
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,85 @@
|
|
1
|
+
//
|
2
|
+
// Attachments
|
3
|
+
//
|
4
|
+
// - if there's no any files in attachment it should display small file_input without any border or remove button
|
5
|
+
// - if there's files - files should have borders, remove buttons and be sortable, file_input
|
6
|
+
// should be last in chain and have border but not the remove button and not be sortable
|
7
|
+
// - if user select a file - file input should show remove button and became sortable and there should appear a new file_input - with border
|
8
|
+
// but without remove button and not be sortabe
|
9
|
+
//
|
10
|
+
Rad.Attachments = new Class({
|
11
|
+
initialize: function(element){
|
12
|
+
this.element = element;
|
13
|
+
|
14
|
+
// initializing attachments
|
15
|
+
var _this = this;
|
16
|
+
this.element.getElements('.l_item').each(function(attachment){
|
17
|
+
attachment.getElement('.l_remove_button').addEvent('click', function(){
|
18
|
+
attachment.destroy();
|
19
|
+
_this.update();
|
20
|
+
});
|
21
|
+
});
|
22
|
+
|
23
|
+
this.sortables = new Sortables();
|
24
|
+
this.addFileField();
|
25
|
+
this.update();
|
26
|
+
},
|
27
|
+
|
28
|
+
addFileField: function(){
|
29
|
+
var template = this.element.getElement('.l_file_field_template').get('value');
|
30
|
+
var fileField = template.toElements();
|
31
|
+
fileField.inject(this.element.getElements('.css_clear').last(), 'before');
|
32
|
+
fileField.addEvent('change', function(){
|
33
|
+
this.addFileField();
|
34
|
+
this.update();
|
35
|
+
}.bind(this));
|
36
|
+
fileField.getElement('.l_remove_button').addEvent('click', function(){
|
37
|
+
fileField.destroy();
|
38
|
+
this.update();
|
39
|
+
}.bind(this));
|
40
|
+
},
|
41
|
+
|
42
|
+
update: function(){
|
43
|
+
var items = this.element.getElements('.l_item');
|
44
|
+
var attachments = items.filter(function(item){
|
45
|
+
return !item.getElement('input[type=file]');
|
46
|
+
});
|
47
|
+
var filledFileInputs = items.filter(function(item){
|
48
|
+
var fileInput = item.getElement('input[type=file]');
|
49
|
+
return fileInput && !fileInput.get('value').blank();
|
50
|
+
});
|
51
|
+
var emptyFileInputs = items.filter(function(item){
|
52
|
+
var fileInput = item.getElement('input[type=file]');
|
53
|
+
return fileInput && fileInput.get('value').blank();
|
54
|
+
});
|
55
|
+
|
56
|
+
// clearing all
|
57
|
+
this.sortables.detach();
|
58
|
+
items.each(function(item){item.getElements('.l_remove_button').hide()});
|
59
|
+
items.removeClass('l_item_style').removeClass('l_empty_item_style');
|
60
|
+
|
61
|
+
// updating styles
|
62
|
+
if(items.size() > 1){
|
63
|
+
// displaying filled inputs as attachments
|
64
|
+
filledFileInputs.each(function(item){
|
65
|
+
var input = item.getElement('input');
|
66
|
+
var fname = input.get('value').replace(/^.*(\/|\\)/, '');
|
67
|
+
var attachmentStub = item.getElement('.l_attachment_stub');
|
68
|
+
|
69
|
+
input.hide();
|
70
|
+
attachmentStub.set('text', fname).show();
|
71
|
+
});
|
72
|
+
|
73
|
+
//
|
74
|
+
var removableAndSortableItems = Array.concat(attachments, filledFileInputs).flatten();
|
75
|
+
removableAndSortableItems.each(function(item){
|
76
|
+
item.addClass('l_item_style');
|
77
|
+
item.getElements('.l_remove_button').show()
|
78
|
+
});
|
79
|
+
|
80
|
+
emptyFileInputs.addClass('l_empty_item_style')
|
81
|
+
this.sortables = new Sortables();
|
82
|
+
this.sortables.addItems(removableAndSortableItems);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
});
|
@@ -0,0 +1,189 @@
|
|
1
|
+
//
|
2
|
+
// Universal dialog form buttons
|
3
|
+
//
|
4
|
+
Rad.DialogButtons = new Class({
|
5
|
+
_initializeButtons: function(containerQ){
|
6
|
+
var container = containerQ.toElement(true);
|
7
|
+
// Universal Cancel Button (for General and AJAX forms)
|
8
|
+
container.getElements('.m_redirect_back_or_close_dialog').addEvent('click', function(event){
|
9
|
+
event.stop();
|
10
|
+
this.destroy();
|
11
|
+
}.bind(this));
|
12
|
+
|
13
|
+
// Universal Submit Button (for General and AJAX forms)
|
14
|
+
container.getElements('.m_submit_form_or_ajax_form').addEvent('click', function(event){
|
15
|
+
event.stop();
|
16
|
+
this.submit();
|
17
|
+
}.bind(this));
|
18
|
+
}
|
19
|
+
});
|
20
|
+
|
21
|
+
|
22
|
+
//
|
23
|
+
// Inplace
|
24
|
+
//
|
25
|
+
Rad.AbstractInplace = new Class({
|
26
|
+
Implements: [Events, Rad.DialogButtons],
|
27
|
+
|
28
|
+
wait: function(message){
|
29
|
+
message = message || "<p>Please wait ...</p>";
|
30
|
+
this.editor.getChildren().hide();
|
31
|
+
message.toElements(true).inject(this.editor);
|
32
|
+
},
|
33
|
+
|
34
|
+
submit: function(){
|
35
|
+
this.wait();
|
36
|
+
var form = this.editor.getElement('form');
|
37
|
+
rad.submitForm(form, {}, function(){this.destroy();}.bind(this));
|
38
|
+
},
|
39
|
+
|
40
|
+
edit: function(editorQ){
|
41
|
+
this.editor = editorQ.toElement(true);
|
42
|
+
this.editor.addClass('the_inplace_editor');
|
43
|
+
this._initializeButtons(this.editor);
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
Rad.EditInplace = new Class({
|
48
|
+
Extends: Rad.AbstractInplace,
|
49
|
+
|
50
|
+
initialize: function(elementQ){
|
51
|
+
this.element = elementQ.toElement(true);
|
52
|
+
},
|
53
|
+
|
54
|
+
destroy: function(){
|
55
|
+
this.element.show();
|
56
|
+
this.editor.destroy();
|
57
|
+
this.fireEvent('destroy');
|
58
|
+
},
|
59
|
+
|
60
|
+
edit: function(editorQ){
|
61
|
+
this.parent(editorQ);
|
62
|
+
|
63
|
+
this.element.hide();
|
64
|
+
this.editor.inject(this.element, 'after');
|
65
|
+
|
66
|
+
this.fireEvent('edit');
|
67
|
+
},
|
68
|
+
|
69
|
+
update: function(contentQ){
|
70
|
+
var content = contentQ.toElements(true);
|
71
|
+
content.replaces(this.element);
|
72
|
+
this.fireEvent('update');
|
73
|
+
}
|
74
|
+
});
|
75
|
+
|
76
|
+
Rad.AddInplace = new Class({
|
77
|
+
Extends: Rad.AbstractInplace,
|
78
|
+
|
79
|
+
initialize: function(containerQ){
|
80
|
+
this.container = containerQ.toElement(true);
|
81
|
+
},
|
82
|
+
|
83
|
+
destroy: function(){
|
84
|
+
this.editor.destroy();
|
85
|
+
this.fireEvent('destroy');
|
86
|
+
},
|
87
|
+
|
88
|
+
edit: function(editorQ){
|
89
|
+
this.parent(editorQ);
|
90
|
+
|
91
|
+
if(this.container) this.editor.inject(this.container);
|
92
|
+
this.fireEvent('edit');
|
93
|
+
},
|
94
|
+
|
95
|
+
update: function(contentQ){
|
96
|
+
var content = contentQ.toElements(true);
|
97
|
+
content.inject(this.container);
|
98
|
+
this.fireEvent('update');
|
99
|
+
}
|
100
|
+
});
|
101
|
+
|
102
|
+
|
103
|
+
//
|
104
|
+
// Dialog
|
105
|
+
//
|
106
|
+
Rad.Dialog = new Class({
|
107
|
+
Extends: SimpleDialog,
|
108
|
+
Implements: [SimpleDialog.OnlyOne, Rad.DialogButtons],
|
109
|
+
|
110
|
+
initialize: function(options){
|
111
|
+
options = options || {}
|
112
|
+
this.parent(options);
|
113
|
+
this.element.addClass('the_dialog');
|
114
|
+
this.onlyOne(this);
|
115
|
+
new SimpleDialog.Mask(this);
|
116
|
+
},
|
117
|
+
|
118
|
+
show: function(html){
|
119
|
+
this.parent(html);
|
120
|
+
this._initializeButtons(this.element);
|
121
|
+
},
|
122
|
+
|
123
|
+
submit: function(){
|
124
|
+
var form;
|
125
|
+
this.wait();
|
126
|
+
form = this.element.getElement('form');
|
127
|
+
// form can be removed only when form is posted, othervise it doesn't works with files
|
128
|
+
rad.submitForm(form, {}, function(){this.destroy();}.bind(this));
|
129
|
+
}
|
130
|
+
});
|
131
|
+
|
132
|
+
|
133
|
+
//
|
134
|
+
// Image dialog
|
135
|
+
//
|
136
|
+
Rad.ImageDialog = new Class({
|
137
|
+
Extends: SimpleDialog.Image,
|
138
|
+
Implements: [SimpleDialog.Autodestroy, SimpleDialog.OnlyOne],
|
139
|
+
initialize: function(options){
|
140
|
+
options = options || {}
|
141
|
+
this.parent(options);
|
142
|
+
this.element.addClass('the_image_dialog');
|
143
|
+
this.onlyOne(this);
|
144
|
+
this.autodestroy();
|
145
|
+
new SimpleDialog.Mask(this);
|
146
|
+
}
|
147
|
+
});
|
148
|
+
|
149
|
+
|
150
|
+
//
|
151
|
+
// Context menu
|
152
|
+
//
|
153
|
+
Rad.ContextMenu = new Class({
|
154
|
+
Extends: SimpleDialog.ContextMenu,
|
155
|
+
Implements: [SimpleDialog.Autodestroy, SimpleDialog.OnlyOne],
|
156
|
+
initialize: function(options){
|
157
|
+
options = options || {}
|
158
|
+
this.parent(options);
|
159
|
+
this.element.addClass('the_context_menu');
|
160
|
+
this.onlyOne(this);
|
161
|
+
this.autodestroy();
|
162
|
+
}
|
163
|
+
});
|
164
|
+
|
165
|
+
|
166
|
+
// TODO3 showVideosInDialog
|
167
|
+
// markup.getElements('a._video').addEvent 'click', (event) ->
|
168
|
+
// event.stop()
|
169
|
+
// Slimbox.open this.get('href'), this.get('title')
|
170
|
+
// $.fancybox({
|
171
|
+
// 'padding' : 0,
|
172
|
+
// // 'autoScale' : false,
|
173
|
+
// 'transitionIn': 'none',
|
174
|
+
// 'transitionOut': 'none',
|
175
|
+
// 'title': this.title,
|
176
|
+
// // 'width' : 680,
|
177
|
+
// // 'height' : 495,
|
178
|
+
// 'href': this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'),
|
179
|
+
// // 'href' : "http://www.youtube.com/watch?v=M-cIjPOJdFM&fs=1".replace(new RegExp("watch\\?v=", "i"), 'v/'),
|
180
|
+
// 'type': 'swf',
|
181
|
+
// 'swf': {
|
182
|
+
// 'wmode': 'transparent',
|
183
|
+
// 'allowfullscreen' : 'true'
|
184
|
+
// }
|
185
|
+
// });
|
186
|
+
//
|
187
|
+
// return false;
|
188
|
+
// });
|
189
|
+
// });
|
@@ -0,0 +1,47 @@
|
|
1
|
+
//
|
2
|
+
// Discussion
|
3
|
+
//
|
4
|
+
Rad.Discussion = new Class({
|
5
|
+
anew: function(formQ){
|
6
|
+
this._buildInplace().edit(formQ);
|
7
|
+
},
|
8
|
+
create: function(contentQ){
|
9
|
+
this._buildInplace().update(contentQ);
|
10
|
+
},
|
11
|
+
_buildInplace: function(){
|
12
|
+
var inplace = new Rad.AddInplace('.the_discussion .l_comments');
|
13
|
+
var control = '.the_discussion .l_controls'.toElements();
|
14
|
+
inplace.addEvents({
|
15
|
+
edit: control.hide.bind(control),
|
16
|
+
update: control.show.bind(control),
|
17
|
+
destroy: control.show.bind(control)
|
18
|
+
});
|
19
|
+
return inplace;
|
20
|
+
},
|
21
|
+
comment: function(commentQ){
|
22
|
+
return new Rad.Comment(this, commentQ);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
|
27
|
+
//
|
28
|
+
// Comments
|
29
|
+
//
|
30
|
+
Rad.Comment = new Class({
|
31
|
+
initialize: function(discussion, commentQ){
|
32
|
+
this.discussion = discussion;
|
33
|
+
this.comment = commentQ.toElement(true);
|
34
|
+
},
|
35
|
+
destroy: function(){
|
36
|
+
this.comment.destroy();
|
37
|
+
},
|
38
|
+
update: function(contentQ){
|
39
|
+
this._buildInplace().update(contentQ);
|
40
|
+
},
|
41
|
+
edit: function(formQ){
|
42
|
+
this._buildInplace().edit(formQ);
|
43
|
+
},
|
44
|
+
_buildInplace: function(){
|
45
|
+
return new Rad.EditInplace(this.comment);
|
46
|
+
},
|
47
|
+
});
|
@@ -0,0 +1,53 @@
|
|
1
|
+
//
|
2
|
+
// Markup
|
3
|
+
//
|
4
|
+
Rad.Markup = new Class({
|
5
|
+
initialize: function(e){
|
6
|
+
this.element = e;
|
7
|
+
this.allignImagesToLeft();
|
8
|
+
this.showImagesInDialog();
|
9
|
+
},
|
10
|
+
|
11
|
+
// Images by default should be alligned to the left (wrapped inside .left div)
|
12
|
+
allignImagesToLeft: function(){
|
13
|
+
var images;
|
14
|
+
images = this.element.getElements('img');
|
15
|
+
// skipping images inside :div's with custom styles
|
16
|
+
images = images.reject(function(img){
|
17
|
+
var parent;
|
18
|
+
parent = img.getParents('div').first();
|
19
|
+
return (parent.get('tag') === 'div') && !parent.hasClass('m_markup');
|
20
|
+
});
|
21
|
+
images.each(function(img){
|
22
|
+
// wrapping image with outer link
|
23
|
+
img = img.getParent('a') || img;
|
24
|
+
(new Element('div.left')).wraps(img);
|
25
|
+
});
|
26
|
+
},
|
27
|
+
|
28
|
+
showImagesInDialog: function(){
|
29
|
+
var imageUrls, links, skip_classes;
|
30
|
+
skip_classes = ['_nobox', '_video'];
|
31
|
+
|
32
|
+
// selecting links with images
|
33
|
+
links = this.element.getElements('a').filter(function(a){
|
34
|
+
var child, children;
|
35
|
+
children = a.getChildren();
|
36
|
+
child = children.first();
|
37
|
+
return (children.size() === 1) && (child.get('tag') === 'img') && skip_classes.none(function(cls){return a.hasClass(cls);});
|
38
|
+
});
|
39
|
+
imageUrls = links.map(function(link){return link.get('href');});
|
40
|
+
|
41
|
+
// adding events
|
42
|
+
links.each(function(link, i){
|
43
|
+
link.addEvent('click', function(event){
|
44
|
+
var dialog;
|
45
|
+
event.stop();
|
46
|
+
dialog = new Rad.ImageDialog({
|
47
|
+
images: imageUrls
|
48
|
+
});
|
49
|
+
dialog.show(imageUrls[i]);
|
50
|
+
});
|
51
|
+
});
|
52
|
+
}
|
53
|
+
});
|
@@ -0,0 +1,33 @@
|
|
1
|
+
//
|
2
|
+
// More
|
3
|
+
//
|
4
|
+
Rad.More = new Class({
|
5
|
+
initialize: function(element){
|
6
|
+
this.element = element;
|
7
|
+
var id = this.element.getData('id');
|
8
|
+
this.core = $(id + '_core');
|
9
|
+
this.more = $(id + '_more');
|
10
|
+
|
11
|
+
if(!this.more) console.log("Rad.More: no content for '" + id + "'!");
|
12
|
+
|
13
|
+
// add event to button
|
14
|
+
element.addEvent('click', function(event){
|
15
|
+
event.stop();
|
16
|
+
Rad.More.opened_containers[id] = true;
|
17
|
+
this._show();
|
18
|
+
}.bind(this));
|
19
|
+
|
20
|
+
// if opened once, keep it open in all next ajax updates
|
21
|
+
if(Rad.More.opened_containers[id]) this._show();
|
22
|
+
},
|
23
|
+
_show: function(){
|
24
|
+
this.more.getChildren().reverse().each(function(e){
|
25
|
+
e.inject(this.element, 'after');
|
26
|
+
}.bind(this));
|
27
|
+
if(this.core) this.core.destroy();
|
28
|
+
this.more.destroy();
|
29
|
+
this.element.destroy();
|
30
|
+
window.fireEvent('updateStyle');
|
31
|
+
}
|
32
|
+
});
|
33
|
+
Rad.More.opened_containers = {};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
//
|
2
|
+
// AJAX Table helpers
|
3
|
+
//
|
4
|
+
Rad.Table = new Class({
|
5
|
+
initialize: function(tableQ){
|
6
|
+
this.table = tableQ.toElement(true);
|
7
|
+
if(!this.table) throw("no table '" + tableQ + "'!");
|
8
|
+
this.tbody = this.table.getChild('tbody');
|
9
|
+
},
|
10
|
+
anew: function(form){rad.dialog().show(form);},
|
11
|
+
create: function(lineQ){lineQ.toElement(true).inject(this.tbody);},
|
12
|
+
edit: function(form){rad.dialog().show(form);},
|
13
|
+
line: function(lineQ){return new Rad.Table.Line(this, lineQ);}
|
14
|
+
});
|
15
|
+
|
16
|
+
Rad.Table.Line = new Class({
|
17
|
+
initialize: function(table, lineQ){
|
18
|
+
this.table = table;
|
19
|
+
this.tr = table.tbody.getChild(lineQ);
|
20
|
+
if(!this.tr) throw("no table row with '" + lineQ + "'!");
|
21
|
+
},
|
22
|
+
destroy: function(){this.tr.destroy();},
|
23
|
+
update: function(line){line.toElement(true).replaces(this.tr);}
|
24
|
+
});
|
@@ -0,0 +1,26 @@
|
|
1
|
+
//
|
2
|
+
// Tabs
|
3
|
+
//
|
4
|
+
Rad.Tabs = new Class({
|
5
|
+
initialize: function(tabsQ){
|
6
|
+
this.element = tabsQ.toElement(true);
|
7
|
+
var tabs = this.element.getElements('> .l_panel .l_item');
|
8
|
+
var contents = this.element.getElements('> .l_content .l_item');
|
9
|
+
tabs.each(function(tab){
|
10
|
+
var link = tab.getChild('a');
|
11
|
+
if(link && link.getData('content_id')){
|
12
|
+
link.addEvent('click', function(event){
|
13
|
+
event.stop();
|
14
|
+
var tab = this.getParent('.l_item');
|
15
|
+
tabs.each(function(e){
|
16
|
+
e == tab ? e.addClass('l_active') : e.removeClass('l_active');
|
17
|
+
});
|
18
|
+
contents.each(function(e){
|
19
|
+
e.get('id') == this.getData('content_id') ? e.show() : e.hide();
|
20
|
+
}.bind(this));
|
21
|
+
window.fireEvent('updateStyle');
|
22
|
+
});
|
23
|
+
};
|
24
|
+
});
|
25
|
+
}
|
26
|
+
});
|
data/app/static/face.css
ADDED
data/app/static/face.js
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
//
|
2
|
+
// rad.assets.require '/lib/rad.js'
|
3
|
+
//
|
4
|
+
// rad.assets.require '/vendor/mootools-more.js'
|
5
|
+
// rad.assets.require '/vendor/iFrameFormRequest.js'
|
6
|
+
// rad.assets.require '/vendor/purr/purr.js'
|
7
|
+
// rad.assets.require '/vendor/flext.js'
|
8
|
+
// rad.assets.require '/vendor/formalize/mootools.formalize.js'
|
9
|
+
//
|
10
|
+
// rad.assets.require '/lib/SimpleDialog/SimpleDialog.js'
|
11
|
+
// rad.assets.require '/lib/SimpleDialog/SimpleDialog.Mask.js'
|
12
|
+
// rad.assets.require '/lib/SimpleDialog/SimpleDialog.Image.js'
|
13
|
+
// rad.assets.require '/lib/SimpleDialog/SimpleDialog.ContextMenu.js'
|
14
|
+
//
|
15
|
+
// rad.assets.require '/lib/ajax_file_uploading.js'
|
16
|
+
//
|
17
|
+
// rad.assets.require '/face/tabs.js'
|
18
|
+
// rad.assets.require '/face/table.js'
|
19
|
+
// rad.assets.require '/face/more.js'
|
20
|
+
// rad.assets.require '/face/markup.js'
|
21
|
+
// rad.assets.require '/face/dialogs.js'
|
22
|
+
// rad.assets.require '/face/discussion.js'
|
23
|
+
// rad.assets.require '/face/attachments.js'
|
24
|
+
//
|
25
|
+
// rad.assets.require '/themes/default/style.js'
|
26
|
+
//
|
27
|
+
|
28
|
+
Rad.implement({
|
29
|
+
// Table
|
30
|
+
table: function(tableQ){return new Rad.Table(tableQ);},
|
31
|
+
|
32
|
+
// Messages
|
33
|
+
info: function(message){Rad.messages.alert(message, {'highlight': false});},
|
34
|
+
error: function(message){Rad.messages.alert(message, {'highlight': false, 'hideAfter': false, 'className': 'error'});},
|
35
|
+
|
36
|
+
// Dialog
|
37
|
+
dialog: function(){
|
38
|
+
return new Rad.Dialog();
|
39
|
+
},
|
40
|
+
|
41
|
+
// Inplace Editor
|
42
|
+
inplace: function(elementQ){
|
43
|
+
return new Rad.EditInplace(elementQ);
|
44
|
+
},
|
45
|
+
|
46
|
+
// Context Menu
|
47
|
+
contextMenu: function(){
|
48
|
+
return new Rad.ContextMenu()
|
49
|
+
},
|
50
|
+
|
51
|
+
// Discussion
|
52
|
+
discussion: function(){
|
53
|
+
return new Rad.Discussion();
|
54
|
+
}
|
55
|
+
});
|
56
|
+
|
57
|
+
// Messages
|
58
|
+
Rad.messages = new Purr({'mode': 'bottom', 'position': 'right'});
|
59
|
+
|
60
|
+
|
61
|
+
//
|
62
|
+
// Initializations
|
63
|
+
//
|
64
|
+
window.addEvent('updated', function(){
|
65
|
+
// more button
|
66
|
+
$$('.the_more').applyOnce('the_more', function(more){new Rad.More(more)});
|
67
|
+
|
68
|
+
// markup
|
69
|
+
$$('.m_markup').applyOnce('m_markup', function(e){new Rad.Markup(e)});
|
70
|
+
|
71
|
+
// tabs
|
72
|
+
$$('.the_tabs').applyOnce('the_tabs', function(e){new Rad.Tabs(e)});
|
73
|
+
|
74
|
+
// context menu
|
75
|
+
$$('.the_context_menu_button').applyOnce('the_context_menu_button', function(button){
|
76
|
+
button.addEvent('click', function(event){
|
77
|
+
event.stop();
|
78
|
+
var content = $(button.getData('content_id'));
|
79
|
+
rad.contextMenu().show(event.page.x, event.page.y, content.get('html'))
|
80
|
+
});
|
81
|
+
});
|
82
|
+
|
83
|
+
// autosubmitting changes
|
84
|
+
$$('.m_autosubmit_on_change').applyOnce('m_autosubmit_on_change', function(e){
|
85
|
+
e.addEvent('change', function(){
|
86
|
+
rad.call(e.getData('action'), {
|
87
|
+
value: e.get('value'),
|
88
|
+
target: e.identify()
|
89
|
+
});
|
90
|
+
});
|
91
|
+
});
|
92
|
+
|
93
|
+
// form attachments
|
94
|
+
$$('.the_attachments').applyOnce('the_attachments', function(e){new Rad.Attachments(e)});
|
95
|
+
});
|
96
|
+
|
97
|
+
window.addEvent('updateStyle', function(){
|
98
|
+
// Flex TextArea
|
99
|
+
$$('textarea').each(function(e){
|
100
|
+
e.addClass('flext growme maxheight-400');
|
101
|
+
new Flext(e);
|
102
|
+
});
|
103
|
+
|
104
|
+
// Table
|
105
|
+
$$('.the_table').each(function(table){
|
106
|
+
table.getChildren('tbody tr').removeClass('l_even');
|
107
|
+
table.getChildren('tbody tr:even').addClass('l_even');
|
108
|
+
});
|
109
|
+
});
|
@@ -0,0 +1,36 @@
|
|
1
|
+
SimpleDialog.ContextMenu = new Class({
|
2
|
+
Extends: SimpleDialog,
|
3
|
+
|
4
|
+
show: function(x, y, html){
|
5
|
+
this.x = x;
|
6
|
+
this.y = y;
|
7
|
+
this.parent(html);
|
8
|
+
},
|
9
|
+
|
10
|
+
//
|
11
|
+
// Protected
|
12
|
+
//
|
13
|
+
_relocate: function(){
|
14
|
+
// var target_x = this.event.page.x; // this.target.getPosition().x + this.target.getOuterSize().x / 2;
|
15
|
+
// var target_y = this.event.page.y; // this.target.getPosition().y + this.target.getOuterSize().y / 2;
|
16
|
+
|
17
|
+
var border_bottom = window.getScroll().y + window.getSize().y;
|
18
|
+
var border_right = window.getSize().x // $$('.layout_content').first().getInnerSize().x
|
19
|
+
|
20
|
+
var offset = 0;
|
21
|
+
var psize = this.element.getOuterSize();
|
22
|
+
if((border_right - (offset * 2)) >= (this.x + psize.x)){
|
23
|
+
x = this.x + offset;
|
24
|
+
} else {
|
25
|
+
x = border_right - psize.x - (offset * 3);
|
26
|
+
}
|
27
|
+
|
28
|
+
if((border_bottom + (offset * 2)) >= (this.y + psize.y)){
|
29
|
+
y = this.y + offset;
|
30
|
+
} else {
|
31
|
+
y = this.y - psize.y - offset;
|
32
|
+
}
|
33
|
+
|
34
|
+
this.element.setStyles({left: x, top: y});
|
35
|
+
}
|
36
|
+
});
|