rsence 2.1.11 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/INSTALL.rdoc +5 -3
- data/README.rdoc +23 -22
- data/VERSION +1 -1
- data/conf/default_conf.yaml +65 -29
- data/conf/rsence_command_strings.yaml +101 -71
- data/js/comm/autosync/autosync.js +3 -3
- data/js/comm/jsloader/jsloader.js +16 -3
- data/js/comm/queue/queue.js +1 -1
- data/js/comm/transporter/transporter.js +106 -83
- data/js/comm/values/values.js +8 -2
- data/js/controls/button/button.js +9 -4
- data/js/controls/button/themes/default/button.css +1 -1
- data/js/controls/checkbox/themes/default/checkbox.css +1 -1
- data/js/controls/dialogs/sheet/sheet.js +27 -18
- data/js/controls/radiobutton/themes/default/radiobutton.css +1 -1
- data/js/controls/searchfield/searchfield.coffee +2 -0
- data/js/controls/searchfield/themes/default/searchfield.css +96 -0
- data/js/controls/searchfield/themes/default/searchfield.html +12 -0
- data/js/controls/searchfield/themes/default/searchfield_parts1-ie6.gif +0 -0
- data/js/controls/searchfield/themes/default/searchfield_parts1.png +0 -0
- data/js/controls/sliders/slider/slider.js +7 -1
- data/js/controls/stepper/stepper.js +6 -1
- data/js/controls/stringview/stringview.js +50 -39
- data/js/controls/tab/tab.js +103 -7
- data/js/controls/tab/themes/default/tab.css +2 -0
- data/js/controls/textarea/themes/default/textarea.css +4 -0
- data/js/controls/textcontrol/textcontrol.js +32 -2
- data/js/controls/textcontrol/themes/default/textcontrol.css +17 -2
- data/js/controls/uploader/themes/default/uploader.css +3 -3
- data/js/controls/uploader/themes/default/uploader.html +1 -1
- data/js/controls/uploader/uploader.coffee +110 -0
- data/js/controls/window/themes/default/window.css +28 -5
- data/js/controls/window/themes/default/window.html +2 -0
- data/js/controls/window/window.js +5 -1
- data/js/core/class/class.js +22 -4
- data/js/core/elem/elem.coffee +816 -0
- data/js/core/event/event.js +2 -2
- data/js/core/rsence_ns/rsence_ns.coffee +31 -0
- data/js/core/rsence_ns/rsence_ns.js +6 -6
- data/js/datetime/calendar/calendar.coffee +307 -0
- data/js/datetime/calendar/themes/default/calendar.css +90 -9
- data/js/datetime/calendar/themes/default/calendar.html +11 -0
- data/js/datetime/calendar/themes/default/calendar_bg-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_bg.png +0 -0
- data/js/datetime/calendar/themes/default/calendar_parts1-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_parts1.png +0 -0
- data/js/datetime/calendar/themes/default/calendar_parts2-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_parts2.png +0 -0
- data/js/datetime/datetimepicker/datetimepicker.js +217 -0
- data/js/datetime/datetimevalue/datetimevalue.js +22 -5
- data/js/datetime/timesheet/themes/default/timesheet.css +51 -22
- data/js/datetime/timesheet/themes/default/timesheet.html +4 -2
- data/js/datetime/timesheet/timesheet.js +782 -192
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -11
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +4 -2
- data/js/datetime/timesheet_item/themes/default/timesheet_item_icons.png +0 -0
- data/js/datetime/timesheet_item/timesheet_item.js +158 -254
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +0 -274
- data/js/foundation/application/application.js +52 -9
- data/js/foundation/control/eventresponder/eventresponder.js +7 -4
- data/js/foundation/control/valueaction/valueaction.js +71 -0
- data/js/foundation/eventmanager/eventmanager.js +71 -33
- data/js/foundation/geom/rect/rect.js +39 -7
- data/js/foundation/json_renderer/json_renderer.js +278 -62
- data/js/foundation/locale_settings/locale_settings.js +131 -0
- data/js/foundation/system/system.js +40 -13
- data/js/foundation/thememanager/thememanager.js +21 -0
- data/js/foundation/view/markupview/markupview.js +12 -12
- data/js/foundation/view/view.js +221 -27
- data/js/graphics/svgcontrol/svgcontrol.js +400 -0
- data/js/lists/checkboxlist/checkboxlist.js +18 -7
- data/js/lists/listitems/listitems.js +52 -38
- data/js/lists/radiobuttonlist/radiobuttonlist.js +23 -7
- data/js/menus/menuitem/menuitem.js +5 -0
- data/js/menus/menuitem/themes/default/menuitem.css +45 -0
- data/js/menus/menuitem/themes/default/menuitem.html +4 -0
- data/js/menus/minimenu/minimenu.js +47 -16
- data/js/menus/minimenuitem/minimenuitem.js +62 -0
- data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem.css +2 -2
- data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem.html +0 -0
- data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem_checkmark.png +0 -0
- data/js/menus/popupmenu/popupmenu.js +14 -0
- data/js/menus/popupmenu/themes/default/popupmenu.css +65 -0
- data/js/menus/popupmenu/themes/default/popupmenu.html +7 -0
- data/js/menus/popupmenu/themes/default/popupmenu.png +0 -0
- data/js/no_pkg/no_pkg.js +2 -0
- data/js/util/reloadapp/reloadapp.js +1 -1
- data/js/views/scrollview/scrollview.js +6 -0
- data/lib/rsence.rb +136 -3
- data/lib/rsence/argv.rb +218 -0
- data/lib/rsence/argv/argv_util.rb +58 -0
- data/lib/rsence/argv/env_check.rb +58 -0
- data/lib/rsence/argv/help_argv.rb +15 -0
- data/lib/rsence/argv/initenv_argv.rb +218 -0
- data/lib/rsence/argv/save_argv.rb +92 -0
- data/lib/rsence/argv/startup_argv.rb +118 -0
- data/lib/rsence/argv/status_argv.rb +132 -0
- data/lib/rsence/argv/test_port.rb +32 -0
- data/lib/{daemon → rsence}/daemon.rb +67 -23
- data/lib/{conf/default.rb → rsence/default_config.rb} +18 -10
- data/lib/{plugins → rsence}/dependencies.rb +0 -0
- data/lib/{util → rsence}/gzstring.rb +0 -0
- data/lib/rsence/http.rb +3 -0
- data/lib/{http → rsence/http}/broker.rb +106 -19
- data/lib/{http → rsence/http}/rackup.rb +0 -0
- data/lib/{http → rsence/http}/request.rb +0 -4
- data/lib/{http → rsence/http}/response.rb +0 -1
- data/lib/{session → rsence}/msg.rb +17 -1
- data/lib/{plugins → rsence}/pluginmanager.rb +29 -12
- data/lib/{plugins → rsence}/plugins.rb +7 -7
- data/lib/{plugins → rsence/plugins}/gui_plugin.rb +8 -3
- data/lib/{plugins → rsence/plugins}/guiparser.rb +9 -6
- data/lib/{plugins → rsence/plugins}/plugin.rb +23 -4
- data/lib/{plugins → rsence/plugins}/plugin_base.rb +11 -1
- data/lib/{plugins → rsence/plugins}/plugin_plugins.rb +2 -2
- data/lib/{plugins → rsence/plugins}/plugin_sqlite_db.rb +0 -0
- data/lib/{plugins → rsence/plugins}/servlet.rb +0 -0
- data/lib/{session → rsence}/sessionmanager.rb +101 -39
- data/lib/{session → rsence}/sessionstorage.rb +30 -16
- data/lib/{daemon → rsence}/sigcomm.rb +0 -0
- data/lib/{transporter → rsence}/transporter.rb +13 -11
- data/lib/{values/hvalue.rb → rsence/value.rb} +6 -1
- data/lib/{values → rsence}/valuemanager.rb +1 -1
- data/plugins/client_pkg/client_pkg.rb +14 -4
- data/plugins/client_pkg/info.yaml +2 -2
- data/plugins/client_pkg/lib/client_pkg_build.rb +145 -45
- data/plugins/client_pkg/lib/client_pkg_cache.rb +1 -1
- data/plugins/client_pkg/lib/client_pkg_serve.rb +1 -1
- data/plugins/main/main.rb +43 -3
- data/plugins/main/tmpl/index.html +2 -10
- data/plugins/main/values.yaml +3 -1
- data/plugins/ticket/lib/common.rb +6 -3
- data/plugins/ticket/ticket.rb +11 -3
- metadata +144 -174
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/values/js.inc +0 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/uploader.js +0 -154
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/window/js.inc +0 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +0 -1325
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/datetime/calendar/calendar.js +0 -198
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/old_timesheet.js +0 -292
- data/js/datetime/timesheet/themes/default/old_timesheet.css +0 -30
- data/js/datetime/timesheet/themes/default/old_timesheet.html +0 -2
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/old_timesheet_item.js +0 -308
- data/js/datetime/timesheet_item/themes/default/old_timesheet_item.css +0 -42
- data/js/datetime/timesheet_item/themes/default/old_timesheet_item.html +0 -8
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/old_timesheet_item_edit.js +0 -274
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylisteditor/js.inc +0 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/menus/minimenu/js.inc +0 -0
- data/js/menus/minimenu/minimenuitem/js.inc +0 -0
- data/js/menus/minimenu/minimenuitem/minimenuitem.js +0 -33
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/lib/conf/argv.rb +0 -880
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/* RSence
|
|
2
|
+
* Copyright 2011 Riassence Inc.
|
|
3
|
+
* http://riassence.com/
|
|
4
|
+
*
|
|
5
|
+
* You should have received a copy of the GNU General Public License along
|
|
6
|
+
* with this software package. If not, contact licensing@riassence.com
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
var
|
|
10
|
+
HLocale = {
|
|
11
|
+
components: {
|
|
12
|
+
|
|
13
|
+
},
|
|
14
|
+
dateTime: {
|
|
15
|
+
strings: {
|
|
16
|
+
monthsLong: [
|
|
17
|
+
'January', 'February', 'March', 'April', 'May', 'June', 'July',
|
|
18
|
+
'August', 'September', 'October', 'November', 'December'
|
|
19
|
+
],
|
|
20
|
+
monthsShort: [
|
|
21
|
+
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
|
22
|
+
],
|
|
23
|
+
weekDaysLong: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
|
|
24
|
+
weekDaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
|
|
25
|
+
weekLong: 'Week',
|
|
26
|
+
weekShort: 'WK',
|
|
27
|
+
dateDelimitter: '.',
|
|
28
|
+
timeDelimitter: ':',
|
|
29
|
+
timeMsDelimitter: '.',
|
|
30
|
+
rangeDelimitter: ' ... '
|
|
31
|
+
},
|
|
32
|
+
settings: {
|
|
33
|
+
zeroPadTime: true,
|
|
34
|
+
AMPM: false
|
|
35
|
+
},
|
|
36
|
+
defaultOptions: {
|
|
37
|
+
longWeekDay: false,
|
|
38
|
+
shortWeekDay: false,
|
|
39
|
+
shortYear: false,
|
|
40
|
+
fullYear: true,
|
|
41
|
+
seconds: false,
|
|
42
|
+
milliSeconds: false
|
|
43
|
+
},
|
|
44
|
+
options: function( _custom ){
|
|
45
|
+
var
|
|
46
|
+
_this = HLocale.dateTime,
|
|
47
|
+
_default = _this.defaultOptions,
|
|
48
|
+
_options = {},
|
|
49
|
+
_key;
|
|
50
|
+
for( _key in _default ){
|
|
51
|
+
_options[_key] = _default[_key];
|
|
52
|
+
}
|
|
53
|
+
if( !_custom ){
|
|
54
|
+
_custom = {};
|
|
55
|
+
}
|
|
56
|
+
for( _key in _custom ){
|
|
57
|
+
_options[_key] = _custom[_key];
|
|
58
|
+
}
|
|
59
|
+
return _options;
|
|
60
|
+
},
|
|
61
|
+
zeroPadTime: function( _num ){
|
|
62
|
+
if( HLocale.dateTime.settings.zeroPadTime && _num < 10 ){
|
|
63
|
+
return '0'+_num;
|
|
64
|
+
}
|
|
65
|
+
return _num.toString();
|
|
66
|
+
},
|
|
67
|
+
formatShortWeekDay: function( _dateTimeEpoch ){
|
|
68
|
+
var
|
|
69
|
+
_this = HLocale.dateTime,
|
|
70
|
+
_date = new Date( _dateTimeEpoch * 1000 ),
|
|
71
|
+
_strings = _this.strings,
|
|
72
|
+
_wday = _date.getUTCDay();
|
|
73
|
+
return _strings.weekDaysShort[ _wday ];
|
|
74
|
+
},
|
|
75
|
+
formatLongWeekDay: function( _dateTimeEpoch ){
|
|
76
|
+
var
|
|
77
|
+
_this = HLocale.dateTime,
|
|
78
|
+
_date = new Date( _dateTimeEpoch * 1000 ),
|
|
79
|
+
_strings = _this.strings,
|
|
80
|
+
_wday = _date.getUTCDay();
|
|
81
|
+
return _strings.weekDaysLong[ _wday ];
|
|
82
|
+
},
|
|
83
|
+
formatDate: function( _dateTimeEpoch, _options ){
|
|
84
|
+
var
|
|
85
|
+
_this = HLocale.dateTime,
|
|
86
|
+
_date = new Date( _dateTimeEpoch * 1000 ),
|
|
87
|
+
_strings = _this.strings,
|
|
88
|
+
_wday = _date.getUTCDay(),
|
|
89
|
+
_dateString = _date.getUTCDate() + _strings.dateDelimitter + (_date.getUTCMonth() + 1) + _strings.dateDelimitter;
|
|
90
|
+
|
|
91
|
+
_options = _this.options( _options );
|
|
92
|
+
|
|
93
|
+
if( _options.fullYear ){
|
|
94
|
+
_dateString += _date.getUTCFullYear();
|
|
95
|
+
}
|
|
96
|
+
else if( _options.shortYear ){
|
|
97
|
+
_dateString += date.getUTCYear();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if( _options.longWeekDay ){
|
|
101
|
+
return _strings.weekDaysLong[_wday] + ' ' + _dateString;
|
|
102
|
+
}
|
|
103
|
+
else if( _options.shortWeekDay ){
|
|
104
|
+
return _strings.weekDaysShort[_wday] + ' ' + _dateString;
|
|
105
|
+
}
|
|
106
|
+
return _dateString;
|
|
107
|
+
},
|
|
108
|
+
formatTime: function( _dateTimeEpoch, _options ){
|
|
109
|
+
var
|
|
110
|
+
_this = HLocale.dateTime,
|
|
111
|
+
_date = new Date( _dateTimeEpoch * 1000 ),
|
|
112
|
+
_strings = _this.strings,
|
|
113
|
+
_timeString = _this.zeroPadTime( _date.getUTCHours() ) + _strings.timeDelimitter + _this.zeroPadTime( _date.getUTCMinutes() );
|
|
114
|
+
|
|
115
|
+
_options = _this.options( _options );
|
|
116
|
+
|
|
117
|
+
if( _options.seconds ){
|
|
118
|
+
_timeString += _strings.timeDelimitter + _this.zeroPadTime( _date.getUTCSeconds() );
|
|
119
|
+
if( _options.milliSeconds ){
|
|
120
|
+
_timeString += _strings.timeMsDelimitter + _date.getUTCMilliseconds();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return _timeString;
|
|
124
|
+
},
|
|
125
|
+
formatDateTime: function( _dateTimeEpoch, _options ){
|
|
126
|
+
var _this = HLocale.dateTime;
|
|
127
|
+
return _this.formatDate( _dateTimeEpoch, _options ) + ' ' + _this.formatTime( _dateTimeEpoch, _options );
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
@@ -64,15 +64,21 @@ HSystem = {
|
|
|
64
64
|
/** Calls applications, uses the prority as a prioritizer.
|
|
65
65
|
**/
|
|
66
66
|
scheduler: function(){
|
|
67
|
-
|
|
67
|
+
var
|
|
68
|
+
_appId=0,
|
|
69
|
+
_priority;
|
|
68
70
|
// Loop through all applications:
|
|
69
|
-
for(
|
|
71
|
+
for( ; _appId<this.apps.length; _appId++ ){
|
|
70
72
|
// Check, if the application exists:
|
|
71
73
|
if( this.apps[ _appId ] ){
|
|
72
74
|
// Check, if the application is busy:
|
|
73
75
|
if( !this.busyApps[ _appId ] ){
|
|
76
|
+
_priority = this.appPriorities[ _appId ];
|
|
77
|
+
if( _priority < 0 ){
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
74
80
|
// Check, if the tick count matches the priority of the app:
|
|
75
|
-
if(
|
|
81
|
+
if( this.ticks % _priority === 0 ){
|
|
76
82
|
// Set the app busy, the app itself should "unbusy" itself, when the idle call is done.
|
|
77
83
|
// That happens in <HApplication._startIdle>
|
|
78
84
|
|
|
@@ -198,15 +204,33 @@ HSystem = {
|
|
|
198
204
|
*
|
|
199
205
|
**/
|
|
200
206
|
killApp: function(_appId, _forced){
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
/* Waiting for the app to finish its idle loop... */
|
|
205
|
-
if (new Date().getTime() > _startedWaiting + this.maxAppRunTime) {
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
207
|
+
this.reniceApp( _appId, -1 ); // prevent new idle calls to the app
|
|
208
|
+
if( _forced || ( this.busyApps[ _appId ] === false ) ){
|
|
209
|
+
this._forceKillApp( _appId );
|
|
209
210
|
}
|
|
211
|
+
else {
|
|
212
|
+
/* Waiting for the app to finish its idle loop before killing it */
|
|
213
|
+
var
|
|
214
|
+
_startedWaiting = new Date().getTime(),
|
|
215
|
+
_this = this,
|
|
216
|
+
_timeout = setInterval(
|
|
217
|
+
function(){
|
|
218
|
+
if( _this.busyApps[ _appId ] === true ) {
|
|
219
|
+
if (new Date().getTime() > _startedWaiting + _this.maxAppRunTime) {
|
|
220
|
+
clearTimeout(_timeout);
|
|
221
|
+
_this._forceKillApp( _appId );
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
clearTimeout(_timeout);
|
|
225
|
+
_this._forceKillApp( _appId );
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}, 10
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
_forceKillApp: function( _appId ){
|
|
210
234
|
this.busyApps[_appId] = true;
|
|
211
235
|
|
|
212
236
|
this.apps[ _appId ].destroyAllViews();
|
|
@@ -331,7 +355,6 @@ HSystem = {
|
|
|
331
355
|
_viewLen = _views.length,
|
|
332
356
|
|
|
333
357
|
// reference to the setStyle method of the element manager
|
|
334
|
-
_setStyl = ELEM.setStyle,
|
|
335
358
|
|
|
336
359
|
// reference to HSystem.views (collection of all views, by index)
|
|
337
360
|
_sysViews = _this.views,
|
|
@@ -370,8 +393,12 @@ HSystem = {
|
|
|
370
393
|
// the element id of the view
|
|
371
394
|
_elemId = _view[ _elemIdStr ];
|
|
372
395
|
|
|
396
|
+
if( _elemId === undefined ){
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
|
|
373
400
|
// do the element manager call itself to update the dom property
|
|
374
|
-
|
|
401
|
+
ELEM.setStyle( _elemId, _zIdxStr, i );
|
|
375
402
|
}
|
|
376
403
|
}
|
|
377
404
|
}
|
|
@@ -388,6 +388,27 @@ HThemeManager = HClass.extend({
|
|
|
388
388
|
_cssTmpl = _cssTmpl.replace( this._variable_match, eval( RegExp.$1 ) );
|
|
389
389
|
}
|
|
390
390
|
return _cssTmpl;
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
_initFns: [],
|
|
394
|
+
_pushStarted: false,
|
|
395
|
+
_pushStart: function( _fn ){
|
|
396
|
+
if(this._pushStarted){
|
|
397
|
+
_fn();
|
|
398
|
+
}
|
|
399
|
+
else{
|
|
400
|
+
this._initFns.push( _fn );
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
_start: function(){
|
|
404
|
+
var
|
|
405
|
+
_this = this,
|
|
406
|
+
i = 0;
|
|
407
|
+
_this._pushStarted = true;
|
|
408
|
+
for( ; i<_this._initFns.length; i++){
|
|
409
|
+
_this._initFns[i]();
|
|
410
|
+
}
|
|
411
|
+
_this._initFns = [];
|
|
391
412
|
}
|
|
392
413
|
|
|
393
414
|
});
|
|
@@ -19,7 +19,7 @@ HMarkupView = HClass.extend({
|
|
|
19
19
|
/** = Description
|
|
20
20
|
* Evaluates the pieces of code defined in the markup template marked with
|
|
21
21
|
* syntax #{}.
|
|
22
|
-
* Can't use } characters in the code though.
|
|
22
|
+
* Can't use } characters in the code though.
|
|
23
23
|
* --
|
|
24
24
|
* This might need another look...
|
|
25
25
|
* ++
|
|
@@ -30,10 +30,10 @@ HMarkupView = HClass.extend({
|
|
|
30
30
|
|
|
31
31
|
var _markup = this.markup;
|
|
32
32
|
|
|
33
|
-
while ( HMarkupView._assignment_match.test(_markup) ) {
|
|
33
|
+
while ( HMarkupView._assignment_match.test(_markup) ) {
|
|
34
34
|
_markup = _markup.replace( HMarkupView._assignment_match, this.evalMarkupVariable(RegExp.$1,true) );
|
|
35
35
|
}
|
|
36
|
-
while ( HMarkupView._variable_match.test(_markup) ) {
|
|
36
|
+
while ( HMarkupView._variable_match.test(_markup) ) {
|
|
37
37
|
_markup = _markup.replace( HMarkupView._variable_match, this.evalMarkupVariable(RegExp.$1) );
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -42,20 +42,20 @@ HMarkupView = HClass.extend({
|
|
|
42
42
|
return this;
|
|
43
43
|
},
|
|
44
44
|
/** = Description
|
|
45
|
-
* Evaluates a string and throws an error into console.log
|
|
46
|
-
* if the string doesn't pass evaluation.
|
|
47
|
-
* If _isAssignment flag is set to true returns empty string.
|
|
48
|
-
* if _isAssignment is set to false will return string if it passes
|
|
45
|
+
* Evaluates a string and throws an error into console.log
|
|
46
|
+
* if the string doesn't pass evaluation.
|
|
47
|
+
* If _isAssignment flag is set to true returns empty string.
|
|
48
|
+
* if _isAssignment is set to false will return string if it passes
|
|
49
49
|
* evaluation.
|
|
50
50
|
*
|
|
51
51
|
* = Parameters
|
|
52
52
|
* +_strToEval+:: A String to evaluate.
|
|
53
53
|
*
|
|
54
|
-
* +_isAssignment+:: Flag to indicate return the String upon passed
|
|
54
|
+
* +_isAssignment+:: Flag to indicate return the String upon passed
|
|
55
55
|
* evaluation(false) or return of an empty String(true).
|
|
56
56
|
*
|
|
57
57
|
* = Returns
|
|
58
|
-
* +String+
|
|
58
|
+
* +String+
|
|
59
59
|
*
|
|
60
60
|
**/
|
|
61
61
|
evalMarkupVariable: function(_strToEval,_isAssignment){
|
|
@@ -81,14 +81,14 @@ HMarkupView = HClass.extend({
|
|
|
81
81
|
},
|
|
82
82
|
|
|
83
83
|
/** = Description
|
|
84
|
-
* Sets or unsets the _cssClass into a DOM element that goes by the ID
|
|
84
|
+
* Sets or unsets the _cssClass into a DOM element that goes by the ID
|
|
85
85
|
* _elementId.
|
|
86
86
|
*
|
|
87
87
|
* = Parameters
|
|
88
|
-
* +_elementId+:: ID of the DOM element, or the element itself, to be
|
|
88
|
+
* +_elementId+:: ID of the DOM element, or the element itself, to be
|
|
89
89
|
* modified.
|
|
90
90
|
* +_cssClass+:: Name of the CSS class to be added or removed.
|
|
91
|
-
* +_setOn+:: Boolean value that tells should the CSS class be added or
|
|
91
|
+
* +_setOn+:: Boolean value that tells should the CSS class be added or
|
|
92
92
|
* removed.
|
|
93
93
|
*
|
|
94
94
|
* = Returns
|
data/js/foundation/view/view.js
CHANGED
|
@@ -299,7 +299,6 @@ HView = HClass.extend({
|
|
|
299
299
|
*
|
|
300
300
|
**/
|
|
301
301
|
constructor: function(_rect, _parent, _options) {
|
|
302
|
-
|
|
303
302
|
if( !_options ){
|
|
304
303
|
_options = {};
|
|
305
304
|
}
|
|
@@ -625,7 +624,6 @@ HView = HClass.extend({
|
|
|
625
624
|
i = 0,
|
|
626
625
|
_this = this,
|
|
627
626
|
_elemId = _this.elemId,
|
|
628
|
-
_styl = ELEM.setStyle,
|
|
629
627
|
_rect = _this.rect,
|
|
630
628
|
_auto = 'auto',
|
|
631
629
|
_left = _this.flexLeft?_rect.left:_auto,
|
|
@@ -655,9 +653,11 @@ HView = HClass.extend({
|
|
|
655
653
|
if( i < 6 && _value !== _auto ){
|
|
656
654
|
_value += 'px';
|
|
657
655
|
}
|
|
658
|
-
|
|
656
|
+
ELEM.setStyle(_elemId,_key,_value,true);
|
|
657
|
+
}
|
|
658
|
+
if(this.drawn === false){
|
|
659
|
+
_this._updateZIndex();
|
|
659
660
|
}
|
|
660
|
-
(this.drawn === false) && _this._updateZIndex();
|
|
661
661
|
|
|
662
662
|
if ( _this._cachedLeft !== _rect.left || _this._cachedTop !== _rect.top) {
|
|
663
663
|
_this.invalidatePositionCache();
|
|
@@ -698,6 +698,7 @@ HView = HClass.extend({
|
|
|
698
698
|
* +self+
|
|
699
699
|
*
|
|
700
700
|
**/
|
|
701
|
+
_ieNoThrough: null,
|
|
701
702
|
draw: function() {
|
|
702
703
|
var _isDrawn = this.drawn;
|
|
703
704
|
this.drawRect();
|
|
@@ -706,6 +707,11 @@ HView = HClass.extend({
|
|
|
706
707
|
if(this['componentName']!==undefined){
|
|
707
708
|
this.drawMarkup();
|
|
708
709
|
}
|
|
710
|
+
else if(BROWSER_TYPE.ie && this._ieNoThrough === null){
|
|
711
|
+
this._ieNoThrough = ELEM.make( this.elemId );
|
|
712
|
+
ELEM.setCSS( this._ieNoThrough, 'position:absolute;left:0;top:0;bottom:0;right:0;background-color:#ffffff;font-size:0;line-height:0' );
|
|
713
|
+
ELEM.setStyle( this._ieNoThrough, 'opacity', 0.01 );
|
|
714
|
+
}
|
|
709
715
|
this.drawSubviews();
|
|
710
716
|
if(this.options.style){
|
|
711
717
|
this.setStyles( this.options.style );
|
|
@@ -837,7 +843,7 @@ HView = HClass.extend({
|
|
|
837
843
|
_reFrom = _reArr[i][0];
|
|
838
844
|
_reTo = _reArr[i][1];
|
|
839
845
|
_html = _html.replace( _reFrom, _reTo );
|
|
840
|
-
}
|
|
846
|
+
}
|
|
841
847
|
return _html;
|
|
842
848
|
},
|
|
843
849
|
_escapeHTMLArr: [
|
|
@@ -875,8 +881,17 @@ HView = HClass.extend({
|
|
|
875
881
|
/** Gets the size of the parent. If the parent is the document body, uses the browser window size.
|
|
876
882
|
**/
|
|
877
883
|
parentSize: function(){
|
|
884
|
+
if(!this.parent){
|
|
885
|
+
return [ 0, 0 ];
|
|
886
|
+
}
|
|
878
887
|
if(this.parent.elemId === 0){
|
|
879
|
-
var
|
|
888
|
+
var
|
|
889
|
+
_winSize = ELEM.windowSize(),
|
|
890
|
+
_docSize = ELEM.getScrollSize(0);
|
|
891
|
+
// console.log('winSize:',JSON.stringify(_winSize),', docSize:',JSON.stringify(_docSize));
|
|
892
|
+
if( _docSize[0] > _winSize[0] || _docSize[1] > _winSize[1] ){
|
|
893
|
+
_winSize = _docSize;
|
|
894
|
+
}
|
|
880
895
|
return [ _winSize[0], _winSize[1] ];
|
|
881
896
|
}
|
|
882
897
|
else {
|
|
@@ -885,7 +900,7 @@ HView = HClass.extend({
|
|
|
885
900
|
_width, // = _rect.width,
|
|
886
901
|
_height, // = _rect.height;
|
|
887
902
|
_parentElemId = ( this.parent.markupElemIds && this.parent.markupElemIds.subview ) ? this.parent.markupElemIds.subview : this.parent.elemId;
|
|
888
|
-
|
|
903
|
+
if (this.parent.flexLeft && this.parent.flexRight){
|
|
889
904
|
_width = parseInt( ELEM.getStyle( _parentElemId, 'width', true ), 10 );
|
|
890
905
|
}
|
|
891
906
|
else {
|
|
@@ -956,11 +971,13 @@ HView = HClass.extend({
|
|
|
956
971
|
_validWidth = (typeof _width === 'number'),
|
|
957
972
|
_validHeight = (typeof _height === 'number'),
|
|
958
973
|
_right,
|
|
959
|
-
_bottom
|
|
974
|
+
_bottom,
|
|
975
|
+
_parentSize,
|
|
976
|
+
_parentWidth,
|
|
977
|
+
_parentHeight;
|
|
960
978
|
if(_arrLen === 6){
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
_parentWidth = _parentSize[0],
|
|
979
|
+
_parentSize = this.parentSize();
|
|
980
|
+
_parentWidth = _parentSize[0];
|
|
964
981
|
_parentHeight = _parentSize[1];
|
|
965
982
|
}
|
|
966
983
|
|
|
@@ -987,7 +1004,9 @@ HView = HClass.extend({
|
|
|
987
1004
|
}
|
|
988
1005
|
else if(_validLeftOffset && _validRightOffset){
|
|
989
1006
|
_right = _parentWidth - _rightOffset;
|
|
990
|
-
|
|
1007
|
+
if( _validWidth ){
|
|
1008
|
+
this.setMinWidth( _width );
|
|
1009
|
+
}
|
|
991
1010
|
_right = _parentWidth - _rightOffset;
|
|
992
1011
|
}
|
|
993
1012
|
|
|
@@ -1000,11 +1019,18 @@ HView = HClass.extend({
|
|
|
1000
1019
|
}
|
|
1001
1020
|
else if(_validTopOffset && _validBottomOffset){
|
|
1002
1021
|
_bottom = _parentHeight - _bottomOffset;
|
|
1003
|
-
|
|
1022
|
+
if( _validHeight ){
|
|
1023
|
+
this.setMinHeight( _height );
|
|
1024
|
+
}
|
|
1004
1025
|
_bottom = _parentHeight - _bottomOffset;
|
|
1005
1026
|
}
|
|
1027
|
+
if( _leftOffset > _right ){
|
|
1028
|
+
_right = _leftOffset;
|
|
1029
|
+
}
|
|
1030
|
+
if( _topOffset > _bottom ){
|
|
1031
|
+
_bottom = _topOffset;
|
|
1032
|
+
}
|
|
1006
1033
|
this.rect = HRect.nu(_leftOffset,_topOffset,_right,_bottom);
|
|
1007
|
-
|
|
1008
1034
|
if(!this.rect.isValid){
|
|
1009
1035
|
console.log('---------------------------------------------');
|
|
1010
1036
|
console.log('invalid rect:', this.rect.left, ',', this.rect.top, ',', this.rect.width, ',', this.rect.height, ',', this.rect.right, ',', this.rect.bottom );
|
|
@@ -1113,7 +1139,7 @@ HView = HClass.extend({
|
|
|
1113
1139
|
* +self+
|
|
1114
1140
|
*
|
|
1115
1141
|
**/
|
|
1116
|
-
setStyleOfPart: function(_partName, _name, _value,
|
|
1142
|
+
setStyleOfPart: function(_partName, _name, _value, _force) {
|
|
1117
1143
|
if (!this['markupElemIds']){
|
|
1118
1144
|
console.log('Warning, setStyleOfPart: no markupElemIds');
|
|
1119
1145
|
}
|
|
@@ -1121,7 +1147,7 @@ HView = HClass.extend({
|
|
|
1121
1147
|
console.log('Warning, setStyleOfPart: partName "'+_partName+'" does not exist for viewId '+this.viewId+'.');
|
|
1122
1148
|
}
|
|
1123
1149
|
else {
|
|
1124
|
-
ELEM.setStyle(this.markupElemIds[_partName], _name, _value,
|
|
1150
|
+
ELEM.setStyle(this.markupElemIds[_partName], _name, _value, _force);
|
|
1125
1151
|
}
|
|
1126
1152
|
return this;
|
|
1127
1153
|
},
|
|
@@ -1138,12 +1164,12 @@ HView = HClass.extend({
|
|
|
1138
1164
|
* The style of a specified markup element.
|
|
1139
1165
|
*
|
|
1140
1166
|
**/
|
|
1141
|
-
styleOfPart: function(_partName, _name) {
|
|
1167
|
+
styleOfPart: function(_partName, _name, _force) {
|
|
1142
1168
|
if (this.markupElemIds[_partName]===undefined) {
|
|
1143
1169
|
console.log('Warning, styleOfPart: partName "'+_partName+'" does not exist for viewId '+this.viewId+'.');
|
|
1144
1170
|
return '';
|
|
1145
1171
|
}
|
|
1146
|
-
return ELEM.getStyle(this.markupElemIds[_partName], _name);
|
|
1172
|
+
return ELEM.getStyle(this.markupElemIds[_partName], _name, _force);
|
|
1147
1173
|
},
|
|
1148
1174
|
|
|
1149
1175
|
/** = Description
|
|
@@ -1176,7 +1202,7 @@ HView = HClass.extend({
|
|
|
1176
1202
|
* +_partName+:: The identifier of the markup element.
|
|
1177
1203
|
*
|
|
1178
1204
|
* = Returns
|
|
1179
|
-
* The
|
|
1205
|
+
* The markup of a specified markup element.
|
|
1180
1206
|
*
|
|
1181
1207
|
**/
|
|
1182
1208
|
markupOfPart: function(_partName) {
|
|
@@ -1186,6 +1212,66 @@ HView = HClass.extend({
|
|
|
1186
1212
|
}
|
|
1187
1213
|
return ELEM.getHTML(this.markupElemIds[_partName]);
|
|
1188
1214
|
},
|
|
1215
|
+
|
|
1216
|
+
/** = Description
|
|
1217
|
+
* Sets a element attribute of a specified markup element that has been bound to this
|
|
1218
|
+
* view.
|
|
1219
|
+
*
|
|
1220
|
+
* = Parameters
|
|
1221
|
+
* +_partName+:: The identifier of the markup element.
|
|
1222
|
+
* +_value+:: Value for markup element.
|
|
1223
|
+
*
|
|
1224
|
+
* = Returns
|
|
1225
|
+
* +self+
|
|
1226
|
+
*
|
|
1227
|
+
**/
|
|
1228
|
+
setAttrOfPart: function( _partName, _value, _force ) {
|
|
1229
|
+
if (this.markupElemIds[_partName]===undefined) {
|
|
1230
|
+
console.log('Warning, setAttrOfPart: partName "'+_partName+'" does not exist for viewId '+this.viewId+'.');
|
|
1231
|
+
}
|
|
1232
|
+
else {
|
|
1233
|
+
ELEM.setAttr( this.markupElemIds[_partName], _value, _force );
|
|
1234
|
+
}
|
|
1235
|
+
return this;
|
|
1236
|
+
},
|
|
1237
|
+
|
|
1238
|
+
/** = Description
|
|
1239
|
+
* Returns a element attribute of a specified markup element that has been bound to this
|
|
1240
|
+
* view.
|
|
1241
|
+
*
|
|
1242
|
+
* = Parameters
|
|
1243
|
+
* +_partName+:: The identifier of the markup element.
|
|
1244
|
+
*
|
|
1245
|
+
* = Returns
|
|
1246
|
+
* The attribute of a specified markup element.
|
|
1247
|
+
*
|
|
1248
|
+
**/
|
|
1249
|
+
attrOfPart: function(_partName, _force) {
|
|
1250
|
+
if (this.markupElemIds[_partName]===undefined) {
|
|
1251
|
+
console.log('Warning, attrOfPart: partName "'+_partName+'" does not exist for viewId '+this.viewId+'.');
|
|
1252
|
+
return '';
|
|
1253
|
+
}
|
|
1254
|
+
return ELEM.getAttr(this.markupElemIds[_partName], _force);
|
|
1255
|
+
},
|
|
1256
|
+
|
|
1257
|
+
/** = Description
|
|
1258
|
+
* Returns a element itself of a specified markup element that has been bound to this
|
|
1259
|
+
* view.
|
|
1260
|
+
*
|
|
1261
|
+
* = Parameters
|
|
1262
|
+
* +_partName+:: The identifier of the markup element.
|
|
1263
|
+
*
|
|
1264
|
+
* = Returns
|
|
1265
|
+
* The element of a specified markup element.
|
|
1266
|
+
*
|
|
1267
|
+
**/
|
|
1268
|
+
elemOfPart: function(_partName) {
|
|
1269
|
+
if (this.markupElemIds[_partName]===undefined) {
|
|
1270
|
+
console.log('Warning, elemOfPart: partName "'+_partName+'" does not exist for viewId '+this.viewId+'.');
|
|
1271
|
+
return '';
|
|
1272
|
+
}
|
|
1273
|
+
return ELEM.get( this.markupElemIds[_partName] );
|
|
1274
|
+
},
|
|
1189
1275
|
|
|
1190
1276
|
/** = Description
|
|
1191
1277
|
* Hides the component's main DOM element (and its children).
|
|
@@ -1293,9 +1379,12 @@ HView = HClass.extend({
|
|
|
1293
1379
|
// this._domElementBindings = [];
|
|
1294
1380
|
}
|
|
1295
1381
|
|
|
1382
|
+
if( this._ieNoThrough !== null ){
|
|
1383
|
+
ELEM.del( this._ieNoThrough );
|
|
1384
|
+
}
|
|
1296
1385
|
// Remove the DOM object itself
|
|
1297
1386
|
ELEM.del(this.elemId);
|
|
1298
|
-
|
|
1387
|
+
|
|
1299
1388
|
this.rect = null;
|
|
1300
1389
|
var _this = this;
|
|
1301
1390
|
for( i in _this ){
|
|
@@ -1306,11 +1395,11 @@ HView = HClass.extend({
|
|
|
1306
1395
|
|
|
1307
1396
|
/** Recursive idle poller. Should be extended if functionality is desired.
|
|
1308
1397
|
**/
|
|
1309
|
-
onIdle: function() {
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
},
|
|
1398
|
+
// onIdle: function() {
|
|
1399
|
+
// for(var i = 0; i < this.views.length; i++) {
|
|
1400
|
+
// HSystem.views[this.views[i]].onIdle();
|
|
1401
|
+
// }
|
|
1402
|
+
//},
|
|
1314
1403
|
|
|
1315
1404
|
/** Used by addView to build a parents array of parent classes.
|
|
1316
1405
|
**/
|
|
@@ -1361,7 +1450,7 @@ HView = HClass.extend({
|
|
|
1361
1450
|
*
|
|
1362
1451
|
**/
|
|
1363
1452
|
removeView: function(_viewId) {
|
|
1364
|
-
|
|
1453
|
+
this.app.removeView( _viewId ); // no reason to duplicate this functionality here
|
|
1365
1454
|
return this;
|
|
1366
1455
|
},
|
|
1367
1456
|
|
|
@@ -1799,7 +1888,9 @@ HView = HClass.extend({
|
|
|
1799
1888
|
**/
|
|
1800
1889
|
invalidatePositionCache: function() {
|
|
1801
1890
|
for(var i=0; i<this.views.length; i++) {
|
|
1802
|
-
HSystem.views[this.views[i]]
|
|
1891
|
+
if( typeof HSystem.views[this.views[i]]['invalidatePositionCache'] === 'function' ){
|
|
1892
|
+
HSystem.views[this.views[i]].invalidatePositionCache();
|
|
1893
|
+
}
|
|
1803
1894
|
}
|
|
1804
1895
|
return this;
|
|
1805
1896
|
},
|
|
@@ -1843,6 +1934,109 @@ HView = HClass.extend({
|
|
|
1843
1934
|
ELEM.del(_elementId);
|
|
1844
1935
|
this._domElementBindings.splice(_indexOfElementId, 1);
|
|
1845
1936
|
}
|
|
1937
|
+
},
|
|
1938
|
+
|
|
1939
|
+
|
|
1940
|
+
/** = Description
|
|
1941
|
+
* Finds a string from the locale of the component.
|
|
1942
|
+
* The attrPath is a string or array to find an object.
|
|
1943
|
+
* For instance, if a component has a structure like this defined:
|
|
1944
|
+
* HLocale.components.FooComponent = {
|
|
1945
|
+
* strings: {
|
|
1946
|
+
* defaultLabel: 'Default Label',
|
|
1947
|
+
* otherLabel: 'Other Label',
|
|
1948
|
+
* }
|
|
1949
|
+
* };
|
|
1950
|
+
*
|
|
1951
|
+
* To get the defaultLabel, call getLocaleString like this:
|
|
1952
|
+
* this.getLocaleString( 'FooComponent', 'strings.defaultLabel' );
|
|
1953
|
+
* ..or:
|
|
1954
|
+
* this.getLocaleString( 'FooComponent', ['strings','defaultLabel'] );
|
|
1955
|
+
* ..or:
|
|
1956
|
+
* this.getLocaleString( 'FooComponent.strings.defaultLabel' );
|
|
1957
|
+
*
|
|
1958
|
+
* = Parameters
|
|
1959
|
+
* +_componentClassName+:: The name of the item in HLocale.components
|
|
1960
|
+
* +_attrPath+:: The object path to the string. String or Array.
|
|
1961
|
+
* +_default+:: The default object to return if nothing matched.
|
|
1962
|
+
*
|
|
1963
|
+
**/
|
|
1964
|
+
getLocaleString: function( _componentClassName, _attrPath, _default ){
|
|
1965
|
+
if( _default === undefined ){
|
|
1966
|
+
_default = '';
|
|
1967
|
+
}
|
|
1968
|
+
var
|
|
1969
|
+
_searchTarget = HLocale.components[_componentClassName],
|
|
1970
|
+
i = 0,
|
|
1971
|
+
_key;
|
|
1972
|
+
if( _searchTarget === undefined && (typeof _componentClassName === 'string') ){
|
|
1973
|
+
_searchTarget = HLocale.components;
|
|
1974
|
+
_attrPath = _componentClassName;
|
|
1975
|
+
_default = _attrPath;
|
|
1976
|
+
}
|
|
1977
|
+
if( typeof _attrPath === 'string' ){
|
|
1978
|
+
if( _attrPath.indexOf( '.' ) > 0 ){
|
|
1979
|
+
_attrPath = _attrPath.split('.');
|
|
1980
|
+
}
|
|
1981
|
+
else {
|
|
1982
|
+
_attrPath = [ _attrPath ];
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
if( _searchTarget[ _attrPath[0] ] === undefined ){
|
|
1986
|
+
_searchTarget = HLocale;
|
|
1987
|
+
}
|
|
1988
|
+
if( _searchTarget[ _attrPath[0] ] === undefined ){
|
|
1989
|
+
return _default;
|
|
1990
|
+
}
|
|
1991
|
+
for( ; i < _attrPath.length; i++ ){
|
|
1992
|
+
_key = _attrPath[i];
|
|
1993
|
+
if( typeof _searchTarget[_key] === 'object' ){
|
|
1994
|
+
_searchTarget = _searchTarget[_key];
|
|
1995
|
+
}
|
|
1996
|
+
else if( typeof _searchTarget[_key] === 'string' ){
|
|
1997
|
+
return _searchTarget[_key];
|
|
1998
|
+
}
|
|
1999
|
+
else {
|
|
2000
|
+
return _default;
|
|
2001
|
+
}
|
|
2002
|
+
}
|
|
2003
|
+
return _default;
|
|
2004
|
+
},
|
|
2005
|
+
|
|
2006
|
+
isParentOf: function( _obj ){
|
|
2007
|
+
if( !_obj ){
|
|
2008
|
+
return false;
|
|
2009
|
+
}
|
|
2010
|
+
if( typeof _obj['hasAncestor'] === 'function' ){
|
|
2011
|
+
if( _obj.parents.indexOf( this ) !== -1 ){
|
|
2012
|
+
return true;
|
|
2013
|
+
}
|
|
2014
|
+
}
|
|
2015
|
+
return false;
|
|
2016
|
+
},
|
|
2017
|
+
|
|
2018
|
+
isChildOf: function( _obj ){
|
|
2019
|
+
if( !_obj ){
|
|
2020
|
+
return false;
|
|
2021
|
+
}
|
|
2022
|
+
if( typeof _obj['isParentOf'] === 'function' ){
|
|
2023
|
+
return _obj.isParentOf( this );
|
|
2024
|
+
}
|
|
2025
|
+
return false;
|
|
2026
|
+
},
|
|
2027
|
+
|
|
2028
|
+
isSiblingOf: function( _obj ){
|
|
2029
|
+
if( !_obj ){
|
|
2030
|
+
return false;
|
|
2031
|
+
}
|
|
2032
|
+
if( typeof _obj['parents'] === 'object' && _obj.parents instanceof Array ){
|
|
2033
|
+
if( _obj.parents.length !== this.parents.length ){
|
|
2034
|
+
return false;
|
|
2035
|
+
}
|
|
2036
|
+
var i = this.parents.length-1;
|
|
2037
|
+
return _obj.parents[i] === this.parents[i];
|
|
2038
|
+
}
|
|
2039
|
+
return false;
|
|
1846
2040
|
}
|
|
1847
2041
|
|
|
1848
2042
|
|