-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAWidget.js
107 lines (102 loc) · 2.36 KB
/
AWidget.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* Wader Abstract Widget
*
* @author sc0rp10 <dev@weblab.pro>
* @version 0.1
*/
(function(ns) {
"use strict";
/*
* @abstract wader.AWidget
*/
$.Class.extend("wader.AWidget",
/* @Static */
{
},
/* @Prototype */
{
/*
* @var container {String} jQuery-селектор элемента, в который
*/
containerSelector: null,
container: null,
template: null,
templatePath: null,
templateParams: {},
callbacks: {},
templateEngine: null,
_value: null,
_params: {},
init: function(params) {
this.construct();
this.templateParams = params.templateParams;
this.callbacks.open = params.open || new Function();
this.callbacks.done = params.done || new Function();
this.callbacks.select = params.select || new Function();
this.callbacks.close = params.close || new Function();
this.container = $(params.containerSelector);
if (params.showImmediately) {
this.render();
}
this._params = params;
},
/*
* Кастомный конструктор
*/
construct: function() {},
/*
* Вызывается, когда виджет открыт, до рендера
*/
open: function () {
return this.callbacks.open();
},
/*
* Определяется готовность виджета
*/
_done: function() {
throw new Error("not imlemented, yay!");
},
/*
* Вызывается, когда виджет готов
*/
done: function () {
this._done();
return this.callbacks.done();
},
/*
* Отрисовка виджета
*/
render: function () {
this._node = $(this.templateEngine[this.template](this.templateParams));
this.container.append(this._node);
this._bindEvents();
this.done();
},
/*
* Вызывается по закрытию виджета
*/
close: function (key) {
this.unreder();
this.callbacks.close();
this.callbacks.open = new Function();
this.callbacks.done = new Function();
this.callbacks.select = new Function();
this.callbacks.close = new Function();
},
/*
* Навешиваются DOM-события
*/
_bindEvents: function() {
throw new Error("not imlemented, yay!");
},
/*
* Срабатывает по выбору значения
*/
select: function() {
this.callbacks.select(this._value);
}
});
if (ns !== wader) {
ns.AWidget = wader.AWidget;
}
})(window.WADER_NS || window);