rsence 2.0.0.0.pre
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 +295 -0
- data/LICENSE +622 -0
- data/README.rdoc +24 -0
- data/VERSION +1 -0
- data/bin/build_client.rb +254 -0
- data/bin/help +6 -0
- data/bin/launch.rb +120 -0
- data/bin/rdoc.sh +2 -0
- data/bin/restart +6 -0
- data/bin/rsence +120 -0
- data/bin/run +6 -0
- data/bin/run.rb +6 -0
- data/bin/save +6 -0
- data/bin/start +6 -0
- data/bin/status +6 -0
- data/bin/stop +6 -0
- data/conf/config.ru +5 -0
- data/conf/default_conf.yaml +337 -0
- data/conf/default_strings.yaml +77 -0
- data/conf/local_conf.yaml +14 -0
- data/conf/unicorn.conf +78 -0
- data/js/comm/comm/autosync/autosync.js +18 -0
- data/js/comm/comm/autosync/js.inc +0 -0
- data/js/comm/comm/comm.js +195 -0
- data/js/comm/comm/js.inc +0 -0
- data/js/comm/comm/queue/js.inc +0 -0
- data/js/comm/comm/queue/queue.js +183 -0
- data/js/comm/comm/session/js.inc +0 -0
- data/js/comm/comm/session/session.js +51 -0
- data/js/comm/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/comm/sessionwatcher/sessionwatcher.js +43 -0
- data/js/comm/comm/transporter/js.inc +0 -0
- data/js/comm/comm/transporter/transporter.js +257 -0
- data/js/comm/comm/urlresponder/js.inc +0 -0
- data/js/comm/comm/urlresponder/urlresponder.js +148 -0
- data/js/comm/comm/values/js.inc +0 -0
- data/js/comm/comm/values/values.js +432 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +114 -0
- data/js/comm/reloadapp/js.inc +0 -0
- data/js/comm/reloadapp/reloadapp.js +150 -0
- data/js/comm/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/comm/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/comm/sha/js.inc +0 -0
- data/js/comm/sha/sha.js +432 -0
- data/js/comm/values/value/js.inc +0 -0
- data/js/comm/values/value/value.js +182 -0
- data/js/comm/values/valuematrix/js.inc +0 -0
- data/js/comm/values/valuematrix/valuematrix.js +138 -0
- data/js/controls/button/button.js +57 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +47 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/datetime/calendar/calendar.js +197 -0
- data/js/controls/datetime/calendar/js.inc +0 -0
- data/js/controls/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/controls/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/controls/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/controls/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/controls/datetime/datetimevalue/datetimevalue.js +246 -0
- data/js/controls/datetime/datetimevalue/js.inc +0 -0
- data/js/controls/datetime/timesheet/js.inc +0 -0
- data/js/controls/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/controls/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/controls/datetime/timesheet/timesheet.js +182 -0
- data/js/controls/datetime/timesheet_item/js.inc +0 -0
- data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/controls/datetime/timesheet_item/timesheet_item.js +247 -0
- data/js/controls/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/controls/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +62 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +36 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +83 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +108 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/lists/checkboxlist/checkboxlist.js +170 -0
- data/js/controls/lists/checkboxlist/js.inc +0 -0
- data/js/controls/lists/listitems/js.inc +0 -0
- data/js/controls/lists/listitems/listitems.js +65 -0
- data/js/controls/lists/radiobuttonlist/js.inc +0 -0
- data/js/controls/lists/radiobuttonlist/radiobuttonlist.js +126 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +22 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +36 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +43 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +41 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +356 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +40 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +212 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +276 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +23 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +372 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +153 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +55 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +284 -0
- data/js/core/class/class.js +317 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1376 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +1021 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/debugg/debugg.js +43 -0
- data/js/debugg/js.inc +0 -0
- data/js/foundation/application/application.js +209 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +342 -0
- data/js/foundation/control/controldefaults/controldefaults.js +59 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +50 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +494 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +713 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +77 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +610 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +231 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +369 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +387 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +113 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +236 -0
- data/js/foundation/view/view.js +1804 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +25 -0
- data/js/views/centerview/centerview.js +45 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +14 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +39 -0
- data/lib/conf/default.rb +220 -0
- data/lib/conf/wizard.rb +303 -0
- data/lib/daemon/daemon.rb +293 -0
- data/lib/http/broker.rb +102 -0
- data/lib/http/rackup.rb +88 -0
- data/lib/http/request.rb +69 -0
- data/lib/http/response.rb +63 -0
- data/lib/plugins/gui_plugin.rb +129 -0
- data/lib/plugins/guiparser.rb +114 -0
- data/lib/plugins/plugin.rb +652 -0
- data/lib/plugins/plugin_plugins.rb +47 -0
- data/lib/plugins/plugin_sqlite_db.rb +72 -0
- data/lib/plugins/plugin_util.rb +96 -0
- data/lib/plugins/pluginmanager.rb +517 -0
- data/lib/plugins/servlet.rb +69 -0
- data/lib/session/msg.rb +291 -0
- data/lib/session/sessionmanager.rb +491 -0
- data/lib/session/sessionstorage.rb +314 -0
- data/lib/transporter/transporter.rb +254 -0
- data/lib/util/gzstring.rb +5 -0
- data/lib/values/hvalue.rb +323 -0
- data/lib/values/valuemanager.rb +152 -0
- data/plugins/client_pkg/client_pkg.rb +186 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +569 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +210 -0
- data/plugins/client_pkg/log/build_log +0 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +150 -0
- data/plugins/index_html/tmpl/index.html +22 -0
- data/plugins/index_html/tmpl/startup_index.html +29 -0
- data/plugins/legacy/disabled +0 -0
- data/plugins/legacy/disabled- +0 -0
- data/plugins/legacy/info.yaml +22 -0
- data/plugins/legacy/legacy.rb +15 -0
- data/plugins/main/js/riassence_ns.js +87 -0
- data/plugins/main/main.rb +234 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticketservices/lib/common.rb +300 -0
- data/plugins/ticketservices/lib/favicon.rb +38 -0
- data/plugins/ticketservices/lib/file.rb +58 -0
- data/plugins/ticketservices/lib/img.rb +50 -0
- data/plugins/ticketservices/lib/objblob.rb +66 -0
- data/plugins/ticketservices/lib/rsrc.rb +34 -0
- data/plugins/ticketservices/lib/upload.rb +206 -0
- data/plugins/ticketservices/ticketservices.rb +268 -0
- data/var/db/.git_include +0 -0
- data/var/log/.git_include +0 -0
- data/var/run/.git_include +0 -0
- metadata +390 -0
|
File without changes
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
.calendar_control {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0px; top: 0px; right: 1px; bottom: 1px;
|
|
4
|
+
border: 1px solid #999;
|
|
5
|
+
}
|
|
6
|
+
.calendar_head {
|
|
7
|
+
position: absolute;
|
|
8
|
+
left: 0px; top: 0px; right: 0px; height: 20px;
|
|
9
|
+
}
|
|
10
|
+
.calendar_head_prev_month,
|
|
11
|
+
.calendar_head_next_month {
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: 2px; width: 16px; height: 16px;
|
|
14
|
+
font-size: 0; line-height: 0;
|
|
15
|
+
line-height: 20px;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
background-image: #{this.getCssFilePath('calendar_arrows.png')};
|
|
18
|
+
}
|
|
19
|
+
.calendar_head_prev_month {
|
|
20
|
+
background-position: 0px 0px;
|
|
21
|
+
left: 2px;
|
|
22
|
+
}
|
|
23
|
+
.calendar_head_next_month {
|
|
24
|
+
background-position: -16px 0px;
|
|
25
|
+
right: 2px;
|
|
26
|
+
}
|
|
27
|
+
.calendar_head_prev_month:hover {
|
|
28
|
+
background-position: 0px -16px;
|
|
29
|
+
}
|
|
30
|
+
.calendar_head_next_month:hover {
|
|
31
|
+
background-position: -16px -16px;
|
|
32
|
+
}
|
|
33
|
+
.calendar_head_prev_month:active,
|
|
34
|
+
.calendar_head_next_month:active {
|
|
35
|
+
background-color: #fff;
|
|
36
|
+
}
|
|
37
|
+
.calender_head_month_year {
|
|
38
|
+
position: absolute;
|
|
39
|
+
top: 0px; left: 20px; right: 20px; height: 20px;
|
|
40
|
+
color: #000;
|
|
41
|
+
font-family: Arial, sans-serif;
|
|
42
|
+
font-weight: bold;
|
|
43
|
+
font-size: 13px;
|
|
44
|
+
line-height: 20px;
|
|
45
|
+
vertical-align: middle;
|
|
46
|
+
text-align: center;
|
|
47
|
+
}
|
|
48
|
+
.calendar_weekdays {
|
|
49
|
+
position: absolute;
|
|
50
|
+
top: 20px; left: 0px; right: 0px; height: 15px;
|
|
51
|
+
}
|
|
52
|
+
.calendar_weekdays div {
|
|
53
|
+
position: absolute;
|
|
54
|
+
top: 0px; height: 15px; width: 25px;
|
|
55
|
+
color: #000;
|
|
56
|
+
font-family: Arial, sans-serif;
|
|
57
|
+
font-size: 11px;
|
|
58
|
+
line-height: 15px;
|
|
59
|
+
vertical-align: middle;
|
|
60
|
+
text-align: center;
|
|
61
|
+
}
|
|
62
|
+
.calendar_weeks {
|
|
63
|
+
position: absolute;
|
|
64
|
+
top: 34px; left: 0px; right: 2px; bottom: 2px;
|
|
65
|
+
}
|
|
66
|
+
.calendar_weeks_week_row {
|
|
67
|
+
position: absolute;
|
|
68
|
+
left: 0px; right: 0px;
|
|
69
|
+
}
|
|
70
|
+
.calendar_weeks_week_col_no,
|
|
71
|
+
.calendar_weeks_week_col_sel,
|
|
72
|
+
.calendar_weeks_week_col_wk,
|
|
73
|
+
.calendar_weeks_week_col_yes {
|
|
74
|
+
position: absolute;
|
|
75
|
+
text-decoration: none;
|
|
76
|
+
top: 0px;
|
|
77
|
+
font-family: Arial, sans-serif;
|
|
78
|
+
font-size: 15px;
|
|
79
|
+
vertical-align: middle;
|
|
80
|
+
text-align: center;
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
}
|
|
83
|
+
.calendar_weeks_week_col_wk {
|
|
84
|
+
color: #000;
|
|
85
|
+
cursor: default;
|
|
86
|
+
}
|
|
87
|
+
.calendar_weeks_week_col_no {
|
|
88
|
+
color: #666;
|
|
89
|
+
border-left: 1px solid #999;
|
|
90
|
+
border-top: 1px solid #999;
|
|
91
|
+
}
|
|
92
|
+
.calendar_weeks_week_col_no:hover {
|
|
93
|
+
background-color: #fff;
|
|
94
|
+
color: #000;
|
|
95
|
+
}
|
|
96
|
+
.calendar_weeks_week_col_yes,
|
|
97
|
+
.calendar_weeks_week_col_sel {
|
|
98
|
+
color: #000;
|
|
99
|
+
background-color: #ddd;
|
|
100
|
+
font-weight: bold;
|
|
101
|
+
border-left: 1px solid #666;
|
|
102
|
+
border-top: 1px solid #666;
|
|
103
|
+
}
|
|
104
|
+
.calendar_weeks_week_col_sel,
|
|
105
|
+
.calendar_weeks_week_col_yes:hover {
|
|
106
|
+
background-color: #fff;
|
|
107
|
+
}
|
|
108
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="calendar_control" id="control#{_ID}">
|
|
2
|
+
<div class="calendar_head">
|
|
3
|
+
<div class="calendar_head_prev_month" onclick="HSystem.views[#{this.viewId}].prevMonth();"></div>
|
|
4
|
+
<div class="calender_head_month_year" id="state#{_ID}"></div>
|
|
5
|
+
<div class="calendar_head_next_month" onclick="HSystem.views[#{this.viewId}].nextMonth();"></div>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="calendar_weekdays" id="label#{_ID}"></div>
|
|
8
|
+
<div class="calendar_weeks" id="value#{_ID}"></div>
|
|
9
|
+
</div>
|
|
Binary file
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/* Riassence Framework
|
|
2
|
+
* Copyright 2009 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
|
+
|
|
10
|
+
/*** = Description
|
|
11
|
+
** Auxiliary class for time handling.
|
|
12
|
+
***/
|
|
13
|
+
HDateTime = HClass.extend({
|
|
14
|
+
msWeek: 604800000,
|
|
15
|
+
msDay: 86400000,
|
|
16
|
+
msHour: 3600000,
|
|
17
|
+
msMinute: 60000,
|
|
18
|
+
months_localized: [
|
|
19
|
+
'January', 'February', 'March', 'April', 'May', 'June', 'July',
|
|
20
|
+
'August', 'September', 'October', 'November', 'December'
|
|
21
|
+
],
|
|
22
|
+
|
|
23
|
+
/** = Description
|
|
24
|
+
* Returns month name of the given date.
|
|
25
|
+
*
|
|
26
|
+
* = Parameters
|
|
27
|
+
* +_date+:: Date to return month name from.
|
|
28
|
+
*
|
|
29
|
+
* = Returns
|
|
30
|
+
* Month name
|
|
31
|
+
*
|
|
32
|
+
**/
|
|
33
|
+
monthName: function(_date){
|
|
34
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
35
|
+
return this.months_localized[_date.getUTCMonth()];
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
/** = Description
|
|
39
|
+
* Returns week number for date given as input.
|
|
40
|
+
*
|
|
41
|
+
* = Parameters
|
|
42
|
+
* +_date+:: Date to return week number from.
|
|
43
|
+
*
|
|
44
|
+
* = Returns
|
|
45
|
+
* Number of the week.
|
|
46
|
+
*
|
|
47
|
+
**/
|
|
48
|
+
week: function(_date){
|
|
49
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
50
|
+
var _firstDateOfYear = this.firstDateOfYear(_date),
|
|
51
|
+
_firstWeekOfYear = this.firstDateOfWeek(_firstDateOfYear);
|
|
52
|
+
if(_firstWeekOfYear.getUTCDate()<=28){
|
|
53
|
+
_firstWeekOfYear = new Date(_firstWeekOfYear.getTime()+this.msWeek-this.tzMs(_firstWeekOfYear));
|
|
54
|
+
}
|
|
55
|
+
var _week = Math.ceil(
|
|
56
|
+
( ( ( _date.getTime() - _firstWeekOfYear - this.tzMs(_date) ) / this.msDay ) + _firstDateOfYear.getUTCDay() + 1 ) / 7
|
|
57
|
+
);
|
|
58
|
+
if((_week === 53) && (this.firstDateOfWeek(this.lastDateOfYear(_date)).getUTCDate() > 28 )){
|
|
59
|
+
_week = 1;
|
|
60
|
+
}
|
|
61
|
+
return _week;
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/** = Description
|
|
65
|
+
* Returns day of the month for the date given as input.
|
|
66
|
+
*
|
|
67
|
+
* = Parameters
|
|
68
|
+
* +_date+:: Date to return day of the month.
|
|
69
|
+
*
|
|
70
|
+
* = Returns
|
|
71
|
+
* Day of the month
|
|
72
|
+
*
|
|
73
|
+
**/
|
|
74
|
+
mday: function(_date){
|
|
75
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
76
|
+
return _date.getUTCDate();
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
/** = Description
|
|
80
|
+
* Returns month number for the date given as input.
|
|
81
|
+
* Note that months are numbered from 0 to 11.
|
|
82
|
+
*
|
|
83
|
+
* = Parameters
|
|
84
|
+
* +_date+:: Date to return month number from.
|
|
85
|
+
*
|
|
86
|
+
* = Returns
|
|
87
|
+
* Number of the month 0 (January) to 11 (December).
|
|
88
|
+
*
|
|
89
|
+
**/
|
|
90
|
+
month: function(_date){
|
|
91
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
92
|
+
return _date.getUTCMonth();
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
/** = Description
|
|
96
|
+
* Returns year for given date.
|
|
97
|
+
*
|
|
98
|
+
* = Parameters
|
|
99
|
+
* +_date+:: Date to return year from.
|
|
100
|
+
*
|
|
101
|
+
* = Returns
|
|
102
|
+
* Year
|
|
103
|
+
*
|
|
104
|
+
**/
|
|
105
|
+
year: function(_date){
|
|
106
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
107
|
+
return _date.getUTCFullYear();
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
/** = Description
|
|
111
|
+
* Returns the timezone offset in milliseconds.
|
|
112
|
+
*
|
|
113
|
+
* = Parameters
|
|
114
|
+
* +_date+:: The date to get timezone offset from.
|
|
115
|
+
*
|
|
116
|
+
* = Returns
|
|
117
|
+
* Timezone offset in milliseconds.
|
|
118
|
+
*
|
|
119
|
+
**/
|
|
120
|
+
tzMs: function(_date){
|
|
121
|
+
return _date.getTimezoneOffset()*this.msMinute;
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
/** = Description
|
|
125
|
+
* Returns a Date instance for epoch given in seconds.
|
|
126
|
+
*
|
|
127
|
+
* = Parameters
|
|
128
|
+
* +epoch_seconds+:: Point of time given in seconds
|
|
129
|
+
* since 1 January 1970 00:00:00 UTC.
|
|
130
|
+
*
|
|
131
|
+
* = Returns
|
|
132
|
+
* Date object
|
|
133
|
+
*
|
|
134
|
+
**/
|
|
135
|
+
date: function(epoch_seconds){
|
|
136
|
+
epoch_seconds = (typeof epoch_seconds === 'number')?epoch_seconds:this.value;
|
|
137
|
+
var _date = new Date(epoch_seconds*1000);
|
|
138
|
+
return _date;
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
/** = Description
|
|
142
|
+
* Returns a Date object with first millisecond of the year.
|
|
143
|
+
*
|
|
144
|
+
* = Parameters
|
|
145
|
+
* +_date+:: The date to get the first millisecond of the same year.
|
|
146
|
+
*
|
|
147
|
+
* = Returns
|
|
148
|
+
* The Date object for the first millisecond of the year
|
|
149
|
+
*
|
|
150
|
+
**/
|
|
151
|
+
firstDateOfYear: function(_date){
|
|
152
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
153
|
+
var _date1 = new Date( _date.getUTCFullYear(), 0, 1 ),
|
|
154
|
+
_date2 = new Date( _date1.getTime() - this.tzMs(_date1) );
|
|
155
|
+
return _date2;
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
/** = Description
|
|
159
|
+
* Get last millisecond of the input given date's year as a Date object.
|
|
160
|
+
*
|
|
161
|
+
* = Parameters
|
|
162
|
+
* +_date+:: The last millisecond of the year on the date given.
|
|
163
|
+
*
|
|
164
|
+
* = Returns
|
|
165
|
+
* Last millisecond of the year as a Date object.
|
|
166
|
+
*
|
|
167
|
+
**/
|
|
168
|
+
lastDateOfYear: function(_date){
|
|
169
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
170
|
+
var _date1 = new Date( new Date( _date.getUTCFullYear()+1, 0, 1 ) - 1 ),
|
|
171
|
+
_date2 = new Date( _date1.getTime() - this.tzMs(_date1) );
|
|
172
|
+
return _date2;
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
/** = Description
|
|
176
|
+
* Returns the first millisecond of the input given date's month.
|
|
177
|
+
*
|
|
178
|
+
* = Parameters
|
|
179
|
+
* +_date+:: The date to get the first millisecond of the month
|
|
180
|
+
*
|
|
181
|
+
* = Returns
|
|
182
|
+
* The first millisecond on the given date's month as a Date object.
|
|
183
|
+
*
|
|
184
|
+
**/
|
|
185
|
+
firstDateOfMonth: function(_date){
|
|
186
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
187
|
+
var _date1 = new Date( _date.getUTCFullYear(), _date.getUTCMonth(), 1 ),
|
|
188
|
+
_date2 = new Date( _date1.getTime() - this.tzMs(_date1) );
|
|
189
|
+
return _date2;
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
/** = Description
|
|
193
|
+
* Returns the last millisecond of the input given date's month.
|
|
194
|
+
*
|
|
195
|
+
* = Parameters
|
|
196
|
+
* +_date+:: The date to get the last millisecond of the month.
|
|
197
|
+
*
|
|
198
|
+
* = Returns
|
|
199
|
+
* The last millisecond of the given date's month as a Date object.
|
|
200
|
+
*
|
|
201
|
+
**/
|
|
202
|
+
lastDateOfMonth: function(_date){
|
|
203
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
204
|
+
var _date1 = new Date( new Date( _date.getUTCFullYear(), _date.getUTCMonth()+1, 1 ) - 1 ),
|
|
205
|
+
_date2 = new Date( _date1.getTime() - this.tzMs(_date1) );
|
|
206
|
+
return _date2;
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
/** = Description
|
|
210
|
+
* Returns the first millisecond when the week starts for date given as input.
|
|
211
|
+
*
|
|
212
|
+
* = Parameters
|
|
213
|
+
* +_date+:: The date to get the first millisecond.
|
|
214
|
+
*
|
|
215
|
+
* = Returns
|
|
216
|
+
* Date for the first millisecond of the week.
|
|
217
|
+
*
|
|
218
|
+
**/
|
|
219
|
+
firstDateOfWeek: function(_date){
|
|
220
|
+
_date = (_date instanceof Date)?_date:this.date();
|
|
221
|
+
var _wday = _date.getUTCDay();
|
|
222
|
+
if(_wday===0){
|
|
223
|
+
_wday = 7;
|
|
224
|
+
}
|
|
225
|
+
var _dateMs = ((_wday-1)*this.msDay),
|
|
226
|
+
_date1 = new Date( _date.getTime() - _dateMs ),
|
|
227
|
+
_date2 = new Date( _date1.getTime() );
|
|
228
|
+
return _date2;
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
/** = Description
|
|
232
|
+
* Returns the last millisecond of the week for the given date.
|
|
233
|
+
*
|
|
234
|
+
* = Parameters
|
|
235
|
+
* +_date+:: The date to get the last millisecond
|
|
236
|
+
*
|
|
237
|
+
* = Returns
|
|
238
|
+
* The last millisecond of the week as a Date object.
|
|
239
|
+
*
|
|
240
|
+
**/
|
|
241
|
+
lastDateOfWeek: function(_date){
|
|
242
|
+
var _firstDateOfWeek = this.firstDateOfWeek(_date),
|
|
243
|
+
_lastDateOfWeek = new Date( _firstDateOfWeek.getTime() + this.msWeek - this.msDay - 1 );
|
|
244
|
+
return _lastDateOfWeek;
|
|
245
|
+
}
|
|
246
|
+
});
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.timesheet_hours_col {
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 0px; left: 0px; width: 32px;
|
|
4
|
+
font-family: Arial, sans-serif;
|
|
5
|
+
font-size: 11px;
|
|
6
|
+
color: #666;
|
|
7
|
+
vertical-align: middle;
|
|
8
|
+
text-align: right;
|
|
9
|
+
}
|
|
10
|
+
.timesheet_hours_row {
|
|
11
|
+
position: absolute;
|
|
12
|
+
left: 0px; width: 32px;
|
|
13
|
+
}
|
|
14
|
+
.timesheet_lines_col {
|
|
15
|
+
position: absolute;
|
|
16
|
+
top: 0px; left: 36px; right: 0px;
|
|
17
|
+
border-left: 1px solid #aaa;
|
|
18
|
+
border-bottom: 1px solid #aaa;
|
|
19
|
+
border-right: 1px solid #aaa;
|
|
20
|
+
}
|
|
21
|
+
.timesheet_lines_row0,
|
|
22
|
+
.timesheet_lines_row1 {
|
|
23
|
+
position: absolute;
|
|
24
|
+
left: 0px; right: 0px; height: 1px;
|
|
25
|
+
line-height: 1px; font-size: 0px;
|
|
26
|
+
background-color: #ccc;
|
|
27
|
+
}
|
|
28
|
+
.timesheet_lines_row0 {
|
|
29
|
+
background-color: #aaa;
|
|
30
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/* Riassence Framework
|
|
2
|
+
* Copyright 2009 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
|
+
/*** = Description
|
|
10
|
+
** HTimesheet is a simple timesheet control.
|
|
11
|
+
***/
|
|
12
|
+
HTimeSheet = HControl.extend({
|
|
13
|
+
componentName: 'timesheet',
|
|
14
|
+
pxPerHour: 24,
|
|
15
|
+
itemOffsetLeft: 36,
|
|
16
|
+
itemOffsetRight: 0,
|
|
17
|
+
/** = Description
|
|
18
|
+
* Redraws the timesheet.
|
|
19
|
+
*
|
|
20
|
+
**/
|
|
21
|
+
refresh: function(){
|
|
22
|
+
if(this.drawn){
|
|
23
|
+
var _areaHeight = this.rect.height;
|
|
24
|
+
this.pxPerHour = (_areaHeight-(_areaHeight%48)) / 24;
|
|
25
|
+
if(this.options['hideLabel']){
|
|
26
|
+
this.setStyleOfPart( 'label', 'display', 'none' );
|
|
27
|
+
this.setStyleOfPart( 'state', 'left', '0px' );
|
|
28
|
+
this.itemOffsetLeft = 0;
|
|
29
|
+
}
|
|
30
|
+
else{
|
|
31
|
+
this.setStyleOfPart( 'label', 'height', (this.pxPerHour*24)+'px' );
|
|
32
|
+
}
|
|
33
|
+
this.setStyleOfPart( 'state', 'height', (this.pxPerHour*24)+'px' );
|
|
34
|
+
}
|
|
35
|
+
this.base();
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
/** = Description
|
|
39
|
+
* Refreshes the hour labels.
|
|
40
|
+
*
|
|
41
|
+
**/
|
|
42
|
+
refreshLabel: function(){
|
|
43
|
+
var hour = 1,
|
|
44
|
+
hours = [],
|
|
45
|
+
rowHeight = this.pxPerHour;
|
|
46
|
+
lineHeight = Math.round(this.pxPerHour/2);
|
|
47
|
+
for(; hour < 24; hour++){
|
|
48
|
+
hours.push('<div style="line-height:'+rowHeight+'px;height:'+rowHeight+'px;top:'+Math.round((hour*rowHeight)-lineHeight)+'px" class="timesheet_hours_row">'+hour+':00</div>');
|
|
49
|
+
}
|
|
50
|
+
this.markupElemIds && this.markupElemIds.label && ELEM.setHTML(this.markupElemIds.label,hours.join(''));
|
|
51
|
+
this.refreshState();
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
/** = Description
|
|
55
|
+
* Refreshes the lines which mark hours and half-hours.
|
|
56
|
+
*
|
|
57
|
+
**/
|
|
58
|
+
refreshState: function(){
|
|
59
|
+
var line = 0,
|
|
60
|
+
lines = [],
|
|
61
|
+
lineHeight = Math.round(this.pxPerHour/2);
|
|
62
|
+
for(; line < 48; line++){
|
|
63
|
+
lines.push('<div style="top:'+(line*lineHeight)+'px" class="timesheet_lines_row'+(line%2)+'"></div>');
|
|
64
|
+
}
|
|
65
|
+
this.markupElemIds && this.markupElemIds.label && ELEM.setHTML(this.markupElemIds.state,lines.join(''));
|
|
66
|
+
},
|
|
67
|
+
dragItem: false,
|
|
68
|
+
|
|
69
|
+
/** = Description
|
|
70
|
+
* Creates an item into timesheet with default label 'New Item'.
|
|
71
|
+
*
|
|
72
|
+
* = Parameters
|
|
73
|
+
* +origY+:: Y coordinate of the new item.
|
|
74
|
+
*
|
|
75
|
+
**/
|
|
76
|
+
createItem: function(origY){
|
|
77
|
+
var _lineHeight = Math.round(this.pxPerHour/2);
|
|
78
|
+
origY = Math.floor( origY / _lineHeight )*_lineHeight;
|
|
79
|
+
var maxY = _lineHeight*48,
|
|
80
|
+
lineHeight = Math.round(this.pxPerHour/2);
|
|
81
|
+
if(origY>maxY){
|
|
82
|
+
origY = maxY;
|
|
83
|
+
}
|
|
84
|
+
var item = HTimeSheetItem.nu(
|
|
85
|
+
this.createItemRect(origY,lineHeight),
|
|
86
|
+
this, {
|
|
87
|
+
label: 'New Item',
|
|
88
|
+
events: {
|
|
89
|
+
draggable: true
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
this.dragItem = item;
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
/** = Description
|
|
97
|
+
* Dragging is used to mark items on the timesheet.
|
|
98
|
+
*
|
|
99
|
+
* = Parameters
|
|
100
|
+
* +x+:: x coordinate of the origin of drag
|
|
101
|
+
* +y+:: y coordinate of the origin of drag
|
|
102
|
+
*
|
|
103
|
+
**/
|
|
104
|
+
startDrag: function(x,y){
|
|
105
|
+
this.createItem(y-this.pageY());
|
|
106
|
+
EVENT.startDragging( this.dragItem );
|
|
107
|
+
},
|
|
108
|
+
listItemViews: false,
|
|
109
|
+
|
|
110
|
+
/** = Description
|
|
111
|
+
* Sets the editor given as parameter as the editor of instance.
|
|
112
|
+
*
|
|
113
|
+
* = Parameters
|
|
114
|
+
* +_editor+::
|
|
115
|
+
*
|
|
116
|
+
**/
|
|
117
|
+
setEditor: function( _editor ){
|
|
118
|
+
this.editor = _editor;
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
/** = Description
|
|
122
|
+
* Returns HRect the size of given parameters and suitable for timesheet.
|
|
123
|
+
*
|
|
124
|
+
* = Parameters
|
|
125
|
+
* +_origY+:: Y coordinate.
|
|
126
|
+
* +_lineHeight+:: The height of item on time sheet.
|
|
127
|
+
*
|
|
128
|
+
**/
|
|
129
|
+
createItemRect: function(_origY, _lineHeight){
|
|
130
|
+
var _left = this.itemOffsetLeft,
|
|
131
|
+
_top = _origY,
|
|
132
|
+
_right = this.rect.width - this.itemOffsetRight,
|
|
133
|
+
_bottom = _origY + _lineHeight;
|
|
134
|
+
return HRect.nu( _left, _top, _right, _bottom );
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
/** = Description
|
|
138
|
+
* Destructor; destroys the editor first and commences inherited die.
|
|
139
|
+
*
|
|
140
|
+
**/
|
|
141
|
+
die: function(){
|
|
142
|
+
this.editor.die();
|
|
143
|
+
this.base();
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
/** = Description
|
|
147
|
+
* Redraws and refreshes the values on timesheet.
|
|
148
|
+
*
|
|
149
|
+
**/
|
|
150
|
+
refreshValue: function(){
|
|
151
|
+
var _data = this.value, i;
|
|
152
|
+
if(this.listItemViews === false){
|
|
153
|
+
this.listItemViews = [];
|
|
154
|
+
}
|
|
155
|
+
if(this.listItemViews.length !== 0){
|
|
156
|
+
for( i=0; i<this.listItemViews.length; i++){
|
|
157
|
+
this.listItemViews[i].die();
|
|
158
|
+
}
|
|
159
|
+
this.listItemViews = [];
|
|
160
|
+
}
|
|
161
|
+
if(_data instanceof Array){
|
|
162
|
+
var _value, _label, _item;
|
|
163
|
+
for( i=0; i<_data.length; i++){
|
|
164
|
+
_value = _data[i];
|
|
165
|
+
_label = _value['label'];
|
|
166
|
+
_item = HTimeSheetItem.nu(
|
|
167
|
+
this.createItemRect( 0, 12 ),
|
|
168
|
+
this, {
|
|
169
|
+
label: _label,
|
|
170
|
+
value: _value,
|
|
171
|
+
events: {
|
|
172
|
+
draggable: true
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
_item.dragMode = 'normal';
|
|
177
|
+
this.listItemViews.push( _item );
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|