rsence-pre 3.0.0.9 → 3.0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/client/ext/Rakefile +18 -0
- data/client/js/controls/button/themes/default/button.html +1 -1
- data/client/js/controls/checkbox/checkbox.js +9 -4
- data/client/js/controls/checkbox/themes/default/checkbox.css +19 -29
- data/client/js/controls/checkbox/themes/default/checkbox.html +8 -6
- data/client/js/controls/dialogs/sheet/themes/default/sheet.css +25 -30
- data/client/js/controls/dialogs/sheet/themes/default/sheet.html +10 -10
- data/client/js/controls/numerictextcontrol/numerictextcontrol.coffee +7 -14
- data/client/js/controls/passwordcontrol/passwordcontrol.js +1 -5
- data/client/js/controls/radiobutton/themes/default/radiobutton.css +21 -31
- data/client/js/controls/radiobutton/themes/default/radiobutton.html +8 -6
- data/client/js/controls/searchfield/themes/default/searchfield.css +1 -1
- data/client/js/controls/sliders/slider/themes/default/slider.css +3 -3
- data/client/js/controls/sliders/vslider/themes/default/vslider.css +3 -3
- data/client/js/controls/stepper/themes/default/stepper.css +1 -1
- data/client/js/controls/stringview/stringview.js +9 -16
- data/client/js/controls/stringview/themes/default/stringview.css +10 -2
- data/client/js/controls/tab/themes/default/tab.css +3 -3
- data/client/js/controls/textarea/textarea.js +1 -3
- data/client/js/controls/textcontrol/textcontrol.coffee +173 -36
- data/client/js/controls/textcontrol/themes/default/textcontrol.css +64 -100
- data/client/js/controls/textcontrol/themes/default/textcontrol.html +14 -19
- data/client/js/controls/uploader/themes/default/uploader.css +1 -1
- data/client/js/controls/window/themes/default/window.css +8 -8
- data/client/js/core/elem/elem.coffee +6 -4
- data/client/js/core/event/event.js +6 -0
- data/client/js/datetime/datepicker/datepicker.coffee +7 -3
- data/client/js/foundation/eventmanager/eventmanager.coffee +9 -4
- data/client/js/foundation/thememanager/thememanager.coffee +8 -1
- data/client/js/foundation/view/view.js +19 -4
- data/client/js/menus/combobox/combobox.coffee +2 -2
- data/client/js/menus/menuitem/themes/default/menuitem.css +15 -27
- data/client/js/menus/menuitem/themes/default/menuitem.html +2 -4
- data/client/js/menus/minimenu/minimenu.js +11 -3
- data/client/js/menus/minimenu/themes/default/minimenu.css +23 -18
- data/client/js/menus/minimenu/themes/default/minimenu.html +6 -8
- data/client/js/menus/minimenuitem/minimenuitem.js +1 -1
- data/client/js/menus/minimenuitem/themes/default/minimenuitem.css +15 -27
- data/client/js/menus/minimenuitem/themes/default/minimenuitem.html +2 -4
- data/client/js/menus/popupmenu/themes/default/popupmenu.css +27 -19
- data/client/js/menus/popupmenu/themes/default/popupmenu.html +6 -8
- data/plugins/client_pkg/lib/client_pkg_build.rb +33 -4
- metadata +3 -7
- data/client/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/client/js/controls/passwordcontrol/themes/default/passwordcontrol.html +0 -18
- data/client/js/controls/stringview/themes/default/stringview.html +0 -1
- data/client/js/controls/textarea/themes/default/textarea.css +0 -36
- data/client/js/controls/textarea/themes/default/textarea.html +0 -20
@@ -89,6 +89,9 @@ Event = {
|
|
89
89
|
**/
|
90
90
|
observe: function(_elem, _name, _function, _useCapture) {
|
91
91
|
_useCapture = _useCapture || false;
|
92
|
+
if( typeof _elem === 'number' ){
|
93
|
+
_elem = ELEM.get(_elem);
|
94
|
+
}
|
92
95
|
Event._observeAndCache(_elem, _name, _function, _useCapture);
|
93
96
|
return _function;
|
94
97
|
},
|
@@ -97,6 +100,9 @@ Event = {
|
|
97
100
|
* removes the callback function.
|
98
101
|
**/
|
99
102
|
stopObserving: function(_elem, _name, _function, _useCapture) {
|
103
|
+
if( typeof _elem === 'number' ){
|
104
|
+
_elem = ELEM.get(_elem);
|
105
|
+
}
|
100
106
|
if (_elem === undefined) {
|
101
107
|
console.log('Warning Event.stopObserving of event name: "' + _name + '" called with an undefined elem!');
|
102
108
|
return;
|
@@ -50,15 +50,19 @@ HDatePicker = HTextControl.extend
|
|
50
50
|
_date.seconds( _seconds )
|
51
51
|
fieldToValue: (_value)->
|
52
52
|
_date = @moment(_value,@options.fieldFormat)
|
53
|
-
|
53
|
+
if _date.isValid()
|
54
|
+
@setValid(true)
|
55
|
+
else
|
56
|
+
@setValid(false)
|
57
|
+
return @value
|
54
58
|
@_dateRestore(_date)
|
55
59
|
_date.unix()
|
56
60
|
refreshValue: ->
|
57
61
|
@base()
|
58
62
|
@calendar.setValue(@value) if @calendar?
|
59
|
-
@setStyleOfPart('value','textAlign','right')
|
60
63
|
drawSubviews: ->
|
61
|
-
@
|
64
|
+
@setStyleOfPart('value','textAlign','right')
|
65
|
+
# @base()
|
62
66
|
if @options.calendarPicker
|
63
67
|
@setStyleOfPart('label','right','26px')
|
64
68
|
@calendar = HCalendarPulldown.extend(
|
@@ -775,6 +775,7 @@ EventManagerApp = HApplication.extend
|
|
775
775
|
#
|
776
776
|
# Sets the active control
|
777
777
|
changeActiveControl: (_ctrl)->
|
778
|
+
return if _ctrl != null and @_views[@_listeners.active[0]] == _ctrl
|
778
779
|
_prevActive = @delActiveControl(_ctrl)
|
779
780
|
@addActiveControl(_ctrl, _prevActive) if _ctrl != null
|
780
781
|
#
|
@@ -1123,13 +1124,17 @@ EventManagerApp = HApplication.extend
|
|
1123
1124
|
# that responds true to _methodName. If _ctrl is undefined, use
|
1124
1125
|
# a special default rule of auto-selecting the active control and
|
1125
1126
|
# checking all of its siblings before traversing.
|
1126
|
-
defaultKey: (_methodName,_ctrl)->
|
1127
|
+
defaultKey: (_methodName,_ctrl,_testedIds)->
|
1127
1128
|
return true if _ctrl? and _ctrl[_methodName]? and _ctrl[_methodName]() == true
|
1128
1129
|
return null unless @_listeners.active
|
1129
|
-
_ctrl = @_views[@_listeners.active[0]]
|
1130
|
+
_ctrl = @_views[@_listeners.active[0]] unless _ctrl?
|
1131
|
+
_ctrlId = _ctrl.viewId
|
1132
|
+
return null if ~_testedIds.indexOf(_ctrlId)
|
1130
1133
|
return true if _ctrl[_methodName]? and _ctrl[_methodName]() == true
|
1131
1134
|
_stop = null
|
1135
|
+
_testedIds.push(_ctrlId)
|
1132
1136
|
for _viewId in _ctrl.parent.views
|
1137
|
+
continue if ~_testedIds.indexOf(_viewId)
|
1133
1138
|
continue if _ctrl.viewId == _viewId
|
1134
1139
|
_ctrl = @_views[_viewId]
|
1135
1140
|
if _ctrl[_methodName]?
|
@@ -1137,7 +1142,7 @@ EventManagerApp = HApplication.extend
|
|
1137
1142
|
if _stopStatus == false or _stopStatus == true
|
1138
1143
|
_stop = _stopStatus unless _stop
|
1139
1144
|
return _stop if _stop != null
|
1140
|
-
return true if _ctrl.parent? and @defaultKey(_methodName,_ctrl.parent) == true
|
1145
|
+
return true if _ctrl.parent? and @defaultKey(_methodName,_ctrl.parent,_testedIds) == true
|
1141
1146
|
null
|
1142
1147
|
#
|
1143
1148
|
# Handles the keyDown event
|
@@ -1168,7 +1173,7 @@ EventManagerApp = HApplication.extend
|
|
1168
1173
|
# to instances of HControl, but any parent object will work.
|
1169
1174
|
if not _repeating and @_defaultKeyActions[_keyCode.toString()]
|
1170
1175
|
_defaultKeyMethod = @_defaultKeyActions[_keyCode.toString()]
|
1171
|
-
_stop = true if @defaultKey(_defaultKeyMethod)
|
1176
|
+
_stop = true if @defaultKey(_defaultKeyMethod,null,[])
|
1172
1177
|
@_lastKeyDown = _keyCode
|
1173
1178
|
Event.stop(e) if _stop
|
1174
1179
|
keyUp: (e)->
|
@@ -141,11 +141,18 @@ HThemeManager = HClass.extend
|
|
141
141
|
return ''
|
142
142
|
return '' unless @themeCSSTemplates[_themeName][_componentName]?
|
143
143
|
[_tmplJS, _tmplCSS] = @themeCSSTemplates[_themeName][_componentName]
|
144
|
-
return _tmplCSS if _tmplJS.length == 0
|
145
144
|
[_variableMatch, _assignmentMatch] = [@_variableMatch, @_assignmentMatch]
|
146
145
|
@getThemeGfxFile = (_fileName)-> @_buildThemePath(_fileName,_themeName)
|
147
146
|
@getCssFilePath = (_fileName)->
|
148
147
|
"url(#{@_buildThemePath(_fileName,_themeName)})"
|
148
|
+
_cssThemeUrlMatch = /#url\((.+?)\)/gm
|
149
|
+
# while _cssThemeUrlMatch.test(_tmplCSS)
|
150
|
+
if _cssThemeUrlMatch.test(_tmplCSS)
|
151
|
+
_tmplCSS = _tmplCSS.replace(
|
152
|
+
_cssThemeUrlMatch, (_match,_fileName)=>
|
153
|
+
"url(#{@_buildThemePath(_fileName,_themeName)})"
|
154
|
+
)
|
155
|
+
return _tmplCSS if _tmplJS.length == 0
|
149
156
|
_callValue = (_id,_isAssign)->
|
150
157
|
_oid = _id
|
151
158
|
_id = parseInt(_id,36)-10
|
@@ -601,16 +601,23 @@ HView = UtilMethods.extend({
|
|
601
601
|
if(this.isAbsolute){ ELEM.setStyle(this.elemId,'position','absolute'); }
|
602
602
|
else { ELEM.setStyle(this.elemId,'position','relative'); }
|
603
603
|
|
604
|
-
// Theme name
|
604
|
+
// Theme name => CSS class name
|
605
605
|
if(this.preserveTheme){
|
606
606
|
ELEM.addClassName( this.elemId, this.theme );
|
607
607
|
}
|
608
608
|
else {
|
609
609
|
ELEM.addClassName( this.elemId, HThemeManager.currentTheme );
|
610
610
|
}
|
611
|
+
// componentName => CSS class name
|
611
612
|
if( this.componentName !== undefined ){
|
612
613
|
ELEM.addClassName( this.elemId, this.componentName );
|
613
614
|
}
|
615
|
+
// BROWSER_TYPE.* = true => CSS class names
|
616
|
+
for( var _browserName in BROWSER_TYPE ){
|
617
|
+
if( BROWSER_TYPE[_browserName] === true ){
|
618
|
+
ELEM.addClassName( this.elemId, _browserName );
|
619
|
+
}
|
620
|
+
}
|
614
621
|
if( this.options.textSelectable !== undefined ){
|
615
622
|
this.textSelectable = this.options.textSelectable;
|
616
623
|
}
|
@@ -674,10 +681,10 @@ HView = UtilMethods.extend({
|
|
674
681
|
_this._updateZIndex();
|
675
682
|
}
|
676
683
|
|
677
|
-
_this.drawn = true;
|
678
684
|
if( _this.themeStyle !== undefined ){
|
679
685
|
_this.themeStyle.call(_this);
|
680
686
|
}
|
687
|
+
_this.drawn = true;
|
681
688
|
}
|
682
689
|
return this;
|
683
690
|
},
|
@@ -1964,22 +1971,30 @@ HView = UtilMethods.extend({
|
|
1964
1971
|
* The width in pixels required to draw a string in the font.
|
1965
1972
|
*
|
1966
1973
|
**/
|
1974
|
+
_stringSizeImportantAttrs: ['fontSize','fontWeight','fontFamily','lineHeight'],
|
1967
1975
|
stringSize: function(_string, _length, _elemId, _wrap, _customStyle) {
|
1968
1976
|
if(!_customStyle){_customStyle = {};}
|
1969
1977
|
if(this.typeChr(_customStyle) === 's'){
|
1970
|
-
console.warn("#stringSize: use
|
1978
|
+
console.warn("#stringSize: use style objects instead of css text!");
|
1971
1979
|
_customStyle = {};
|
1972
1980
|
}
|
1973
1981
|
if (_length || _length === 0) {
|
1974
1982
|
_string = _string.substring(0, _length);
|
1975
1983
|
}
|
1976
1984
|
if (!_elemId && _elemId !== 0) {
|
1977
|
-
_elemId = 0;
|
1985
|
+
_elemId = this.elemId || 0;
|
1978
1986
|
}
|
1979
1987
|
_customStyle.visibility = 'hidden';
|
1980
1988
|
if (!_wrap){
|
1981
1989
|
_customStyle.whiteSpace = 'nowrap';
|
1982
1990
|
}
|
1991
|
+
var i=0,_attr;
|
1992
|
+
for(;i<this._stringSizeImportantAttrs.length;i++){
|
1993
|
+
_attr = this._stringSizeImportantAttrs[i];
|
1994
|
+
if (!_customStyle[_attr]){
|
1995
|
+
_customStyle[_attr] = ELEM.getStyle(_elemId,_attr);
|
1996
|
+
}
|
1997
|
+
}
|
1983
1998
|
var
|
1984
1999
|
_stringParent = ELEM.make(_elemId,'div'),
|
1985
2000
|
_stringElem = ELEM.make(_stringParent,'span');
|
@@ -51,5 +51,5 @@ HComboBoxInterface =
|
|
51
51
|
@unitSuffix.drawRect()
|
52
52
|
@setStyleOfPart('label','right',this._extraLabelRight+'px')
|
53
53
|
@menu.bringToFront()
|
54
|
-
HComboBox = HTextControl.extend(HComboBoxInterface)
|
55
|
-
HNumericComboBox = HNumericTextControl.extend(HComboBoxInterface)
|
54
|
+
HComboBox = HTextControl.extend(HComboBoxInterface).extend({_comboNumber:false})
|
55
|
+
HNumericComboBox = HNumericTextControl.extend(HComboBoxInterface).extend({_comboNumber:true})
|
@@ -1,31 +1,24 @@
|
|
1
|
+
.default.menuitem { cursor: pointer; }
|
1
2
|
|
2
|
-
.
|
3
|
-
.menuitem_label,
|
4
|
-
.menuitem_state {
|
5
|
-
position: absolute;
|
6
|
-
top: 0px; height: 24px;
|
7
|
-
}
|
3
|
+
.default.menuitem:hover { background-color: #fff; }
|
8
4
|
|
9
|
-
.
|
10
|
-
left: 0px; right: 0px;
|
11
|
-
cursor: pointer;
|
12
|
-
}
|
13
|
-
.menuitem_control:hover {
|
14
|
-
background-color: #fff;
|
15
|
-
}
|
5
|
+
.default.menuitem.disabled { cursor: default; opacity: 0.8; }
|
16
6
|
|
17
|
-
.
|
18
|
-
|
19
|
-
|
7
|
+
.default.menuitem > .label,
|
8
|
+
.default.menuitem.state {
|
9
|
+
position: absolute; height: 24px;
|
20
10
|
}
|
21
|
-
.
|
22
|
-
|
11
|
+
.default.menuitem.state {
|
12
|
+
left: 4px; top: 7px; height: 12px; width: 12px;
|
13
|
+
background-image: #url(menuitem_checkmark.png);
|
23
14
|
}
|
24
|
-
.
|
15
|
+
.default.menuitem.state {
|
25
16
|
visibility: hidden;
|
26
17
|
}
|
27
|
-
|
28
|
-
|
18
|
+
.default.menuitem.state.checked {
|
19
|
+
visibility: inherit;
|
20
|
+
}
|
21
|
+
.default.menuitem > .label {
|
29
22
|
left: 20px; right: 11px; top: 0px;
|
30
23
|
height: 24px; line-height: 24px;
|
31
24
|
text-align: left;
|
@@ -37,9 +30,4 @@
|
|
37
30
|
font-size: 12px;
|
38
31
|
color: #333;
|
39
32
|
}
|
40
|
-
.
|
41
|
-
color: #000;
|
42
|
-
}
|
43
|
-
.disabled .menuitem_control {
|
44
|
-
opacity: 0.8;
|
45
|
-
}
|
33
|
+
.default.menuitem:hover > .label { color: #000; }
|
@@ -1,4 +1,2 @@
|
|
1
|
-
<div class="
|
2
|
-
|
3
|
-
<div class="menuitem_label" id="label]I[">#{this.label}</div>
|
4
|
-
</div>
|
1
|
+
<div class="state" id="state]I["></div>
|
2
|
+
<div class="label" id="label]I[">#{this.label}</div>
|
@@ -81,9 +81,17 @@ HMiniMenu = HRadioButtonList.extend({
|
|
81
81
|
this.base();
|
82
82
|
if(this.listItems && this.listItems.length !== 0 && this.valueMatrix !== undefined ) {
|
83
83
|
for(var i=0;i<this.listItems.length;i++){
|
84
|
-
if(this.listItems[i]
|
85
|
-
|
86
|
-
|
84
|
+
if(this.typeChr(this.listItems[i]) === 'a'){
|
85
|
+
if(this.listItems[i][0]===this.value){
|
86
|
+
this.setLabel( this.listItems[i][1] );
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
else {
|
91
|
+
if(this.listItems[i].value===this.value){
|
92
|
+
this.setLabel( this.listItems[i].value );
|
93
|
+
return;
|
94
|
+
}
|
87
95
|
}
|
88
96
|
}
|
89
97
|
}
|
@@ -1,44 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
.
|
5
|
-
|
6
|
-
|
1
|
+
.default.minimenu {
|
2
|
+
cursor: pointer;
|
3
|
+
}
|
4
|
+
.default.minimenu.disabled {
|
5
|
+
cursor: default;
|
6
|
+
}
|
7
|
+
.default.minimenu > .bg,
|
8
|
+
.default.minimenu > .bg > .w,
|
9
|
+
.default.minimenu > .bg > .c,
|
10
|
+
.default.minimenu > .bg > .e,
|
11
|
+
.default.minimenu > .label {
|
7
12
|
position: absolute;
|
8
13
|
top: 0px; height: 15px;
|
9
14
|
}
|
10
15
|
|
11
|
-
.
|
16
|
+
.default.minimenu > .bg {
|
12
17
|
left: 0px; right: 0px;
|
13
18
|
cursor: pointer;
|
14
19
|
}
|
15
|
-
.disabled .
|
20
|
+
.disabled .default.minimenu > .bg {
|
16
21
|
cursor: default;
|
17
22
|
}
|
18
23
|
|
19
|
-
.
|
20
|
-
.
|
21
|
-
.
|
22
|
-
background-image: #
|
24
|
+
.default.minimenu > .bg > .w,
|
25
|
+
.default.minimenu > .bg > .c,
|
26
|
+
.default.minimenu > .bg > .e {
|
27
|
+
background-image: #url(minimenu.png);
|
23
28
|
}
|
24
29
|
|
25
|
-
.
|
30
|
+
.default.minimenu > .bg > .w {
|
26
31
|
left: 0px; width: 7px;
|
27
32
|
background-position: 0px 0px;
|
28
33
|
}
|
29
34
|
|
30
|
-
.
|
35
|
+
.default.minimenu > .bg > .e {
|
31
36
|
right: 0px; width: 13px;
|
32
37
|
background-position: -7px 0px;
|
33
38
|
}
|
34
39
|
|
35
|
-
.
|
40
|
+
.default.minimenu > .bg > .c {
|
36
41
|
left: 7px; right: 13px;
|
37
42
|
background-position: 0px -15px;
|
38
43
|
background-repeat: repeat-x;
|
39
44
|
}
|
40
45
|
|
41
|
-
.
|
46
|
+
.default.minimenu > .label {
|
42
47
|
left: 6px; right: 11px; top: 0px;
|
43
48
|
height: 15px; line-height: 15px;
|
44
49
|
text-align: left;
|
@@ -50,9 +55,9 @@
|
|
50
55
|
font-size: 11px;
|
51
56
|
color: #333;
|
52
57
|
}
|
53
|
-
.
|
58
|
+
.default.minimenu > .bg:hover > .default.minimenu > .label {
|
54
59
|
color: #000;
|
55
60
|
}
|
56
|
-
.disabled .
|
61
|
+
.disabled .default.minimenu > .bg {
|
57
62
|
opacity: 0.8;
|
58
63
|
}
|
@@ -1,8 +1,6 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<div class="minimenu_label" id="label]I[">#{this.label}</div>
|
8
|
-
</div>
|
1
|
+
<span class="bg" id="bg]I[">
|
2
|
+
<div class="w"></div>
|
3
|
+
<div class="c"></div>
|
4
|
+
<div class="e"></div>
|
5
|
+
</span>
|
6
|
+
<div class="label" id="label]I[">#{this.label}</div>
|
@@ -26,8 +26,8 @@ HMiniMenuItem = HRadioButton.extend({
|
|
26
26
|
click: function(){
|
27
27
|
var _now = this.msNow();
|
28
28
|
if( _now - this._parentLastActivation > 200 ){
|
29
|
-
this.base();
|
30
29
|
this._parentLastActivation = _now;
|
30
|
+
this.base();
|
31
31
|
EVENT.changeActiveControl(null);
|
32
32
|
}
|
33
33
|
return true;
|
@@ -1,31 +1,24 @@
|
|
1
|
+
.default.minimenuitem { cursor: pointer; }
|
1
2
|
|
2
|
-
.
|
3
|
-
.minimenuitem_label,
|
4
|
-
.minimenuitem_state {
|
5
|
-
position: absolute;
|
6
|
-
top: 0px; height: 16px;
|
7
|
-
}
|
3
|
+
.default.minimenuitem:hover { background-color: #fff; }
|
8
4
|
|
9
|
-
.
|
10
|
-
left: 0px; right: 0px;
|
11
|
-
cursor: pointer;
|
12
|
-
}
|
13
|
-
.minimenuitem_control:hover {
|
14
|
-
background-color: #fff;
|
15
|
-
}
|
5
|
+
.default.minimenuitem.disabled { cursor: default; opacity: 0.8; }
|
16
6
|
|
17
|
-
.
|
18
|
-
|
19
|
-
|
7
|
+
.default.minimenuitem > .label,
|
8
|
+
.default.minimenuitem.state {
|
9
|
+
position: absolute; height: 16px;
|
20
10
|
}
|
21
|
-
.
|
22
|
-
|
11
|
+
.default.minimenuitem.state {
|
12
|
+
left: 0px; top: 1px; height: 12px; width: 12px;
|
13
|
+
background-image: #url(minimenuitemitem_checkmark.png);
|
23
14
|
}
|
24
|
-
.
|
15
|
+
.default.minimenuitem.state {
|
25
16
|
visibility: hidden;
|
26
17
|
}
|
27
|
-
|
28
|
-
|
18
|
+
.default.minimenuitem.state.checked {
|
19
|
+
visibility: inherit;
|
20
|
+
}
|
21
|
+
.default.minimenuitem > .label {
|
29
22
|
left: 14px; right: 11px; top: 0px;
|
30
23
|
height: 15px; line-height: 14px;
|
31
24
|
text-align: left;
|
@@ -37,9 +30,4 @@
|
|
37
30
|
font-size: 11px;
|
38
31
|
color: #333;
|
39
32
|
}
|
40
|
-
.
|
41
|
-
color: #000;
|
42
|
-
}
|
43
|
-
.disabled .minimenuitem_control {
|
44
|
-
opacity: 0.8;
|
45
|
-
}
|
33
|
+
.default.minimenuitem:hover > .label { color: #000; }
|
@@ -1,4 +1,2 @@
|
|
1
|
-
<div class="
|
2
|
-
|
3
|
-
<div class="minimenuitem_label" id="label]I[">#{this.label}</div>
|
4
|
-
</div>
|
1
|
+
<div class="state" id="state]I["></div>
|
2
|
+
<div class="label" id="label]I[">#{this.label}</div>
|
@@ -1,46 +1,51 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
.
|
5
|
-
|
6
|
-
|
1
|
+
.default.popupmenu {
|
2
|
+
cursor: pointer;
|
3
|
+
}
|
4
|
+
.default.popupmenu.disabled {
|
5
|
+
cursor: default;
|
6
|
+
}
|
7
|
+
.default.popupmenu > .bg,
|
8
|
+
.default.popupmenu > .bg > .w,
|
9
|
+
.default.popupmenu > .bg > .c,
|
10
|
+
.default.popupmenu > .bg > .e,
|
11
|
+
.default.popupmenu > .label {
|
7
12
|
position: absolute;
|
8
13
|
top: 0px; height: 23px;
|
9
14
|
}
|
10
15
|
|
11
|
-
.
|
16
|
+
.default.popupmenu > .bg {
|
12
17
|
left: 0px; right: 0px;
|
13
18
|
cursor: pointer;
|
14
19
|
}
|
15
|
-
.disabled .
|
20
|
+
.default.popupmenu > .disabled .bg {
|
16
21
|
cursor: default;
|
17
22
|
}
|
18
23
|
|
19
|
-
.
|
20
|
-
.
|
21
|
-
.
|
22
|
-
background-image: #
|
24
|
+
.default.popupmenu > .bg > .w,
|
25
|
+
.default.popupmenu > .bg > .c,
|
26
|
+
.default.popupmenu > .bg > .e {
|
27
|
+
background-image: #url(popupmenu.png);
|
23
28
|
}
|
24
29
|
|
25
|
-
.
|
30
|
+
.default.popupmenu > .bg > .w {
|
26
31
|
left: 0px; width: 9px;
|
27
32
|
background-position: 0px 0px;
|
28
33
|
background-repeat: no-repeat;
|
29
34
|
}
|
30
35
|
|
31
|
-
.
|
36
|
+
.default.popupmenu > .bg > .e {
|
32
37
|
right: 0px; width: 17px;
|
33
38
|
background-position: -9px 0px;
|
34
39
|
background-repeat: no-repeat;
|
35
40
|
}
|
36
41
|
|
37
|
-
.
|
42
|
+
.default.popupmenu > .bg > .c {
|
38
43
|
left: 9px; right: 17px;
|
39
44
|
background-position: 0px -23px;
|
40
45
|
background-repeat: repeat-x;
|
41
46
|
}
|
42
47
|
|
43
|
-
.
|
48
|
+
.default.popupmenu > .label {
|
44
49
|
left: 13px; right: 11px; top: 0px;
|
45
50
|
height: 22px;
|
46
51
|
text-align: left;
|
@@ -51,11 +56,14 @@
|
|
51
56
|
font-family: Helvetica, Arial, sans-serif;
|
52
57
|
font-size: 12px;
|
53
58
|
color: #333;
|
54
|
-
line-height:
|
59
|
+
line-height: 22px;
|
60
|
+
}
|
61
|
+
.default.popupmenu.ie7 > .label{
|
62
|
+
line-height: 20px;
|
55
63
|
}
|
56
|
-
.
|
64
|
+
.default.popupmenu > .bg:hover > .label {
|
57
65
|
color: #000;
|
58
66
|
}
|
59
|
-
.disabled .
|
67
|
+
.default.popupmenu.disabled > .bg {
|
60
68
|
opacity: 0.6;
|
61
69
|
}
|
@@ -1,8 +1,6 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<div class="popupmenu_label" id="label]I[">#{this.label}</div>
|
8
|
-
</div>
|
1
|
+
<span class="bg" id="bg]I[">
|
2
|
+
<div class="w"></div>
|
3
|
+
<div class="c"></div>
|
4
|
+
<div class="e"></div>
|
5
|
+
</span>
|
6
|
+
<div class="label" id="label]I[">#{this.label}</div>
|
@@ -51,6 +51,7 @@ class ClientPkgBuild
|
|
51
51
|
def read_file( path )
|
52
52
|
filehandle = open( path, 'rb' )
|
53
53
|
filedata = filehandle.read
|
54
|
+
filedata.force_encoding( 'UTF-8' ) if filedata.encoding != 'UTF-8'
|
54
55
|
filehandle.close
|
55
56
|
return filedata
|
56
57
|
end
|
@@ -108,9 +109,13 @@ class ClientPkgBuild
|
|
108
109
|
tmpl.gsub!( TMPL_RE ) do
|
109
110
|
( js_type, js_code ) = [ $1, $2 ]
|
110
111
|
begin
|
111
|
-
|
112
|
+
if js_code.start_with?('#!coffee')
|
113
|
+
js_code = CoffeeScript.compile( js_code, :bare => true )
|
114
|
+
end
|
112
115
|
rescue ExecJS::RuntimeError
|
113
|
-
js_code = "console.log('Invalid
|
116
|
+
js_code = "console.log('Invalid CoffeeScript in template #{theme_name}/#{component_name}:',#{js_code.to_json});"
|
117
|
+
rescue Encoding::CompatibilityError
|
118
|
+
js_code = "console.log('Invalid charset in CoffeeScript template #{theme_name}/#{component_name}:',#{js_code.to_json});"
|
114
119
|
end
|
115
120
|
if cached_idx.has_key?( js_code )
|
116
121
|
seq_id = cached_idx[ js_code ]
|
@@ -127,6 +132,7 @@ class ClientPkgBuild
|
|
127
132
|
else
|
128
133
|
fn_args = ''
|
129
134
|
end
|
135
|
+
js_code.force_encoding 'UTF-8' if js_code.encoding != 'UTF-8'
|
130
136
|
if js_type == '$'
|
131
137
|
js_cmds << "function(#{fn_args}){#{js_code};}"
|
132
138
|
else
|
@@ -135,6 +141,7 @@ class ClientPkgBuild
|
|
135
141
|
end
|
136
142
|
"#{js_type}{#{seq_id}}"
|
137
143
|
end
|
144
|
+
tmpl.force_encoding 'UTF-8' if tmpl.encoding != 'UTF-8'
|
138
145
|
%{[[#{js_cmds.join(',')}],#{tmpl.to_json}]}
|
139
146
|
end
|
140
147
|
|
@@ -290,13 +297,18 @@ class ClientPkgBuild
|
|
290
297
|
begin
|
291
298
|
coffee_src = read_file( src_path )
|
292
299
|
js_data = CoffeeScript.compile( coffee_src, :bare => true )
|
293
|
-
rescue CoffeeScript::CompilationError, ExecJS::RuntimeError
|
300
|
+
rescue CoffeeScript::CompilationError, ExecJS::RuntimeError => e
|
294
301
|
if has_js
|
302
|
+
warn "CoffeeScript Compilation failure #1: #{e.inspect}"
|
295
303
|
js_data = %{console.log( 'WARNING: CoffeeScript complilation failed for source file #{src_path.to_json}, using the js variant instead.' );}
|
296
304
|
js_data += read_file( File.join( bundle_path, bundle_name+'.js' ) )
|
297
305
|
else
|
306
|
+
warn "CoffeeScript Compilation failure #2: #{e.inspect}"
|
298
307
|
js_data = %{console.log( 'WARNING: CoffeeScript complilation failed for source file #{src_path.to_json}' );}
|
299
308
|
end
|
309
|
+
rescue => e
|
310
|
+
warn "CoffeeScript Compilation failure #3: #{e.inspect}"
|
311
|
+
js_data = %{console.log( 'WARNING CoffeeScript complilation failed for source file #{src_path.to_json}' );}
|
300
312
|
end
|
301
313
|
else
|
302
314
|
js_data = read_file( src_path )
|
@@ -565,6 +577,19 @@ class ClientPkgBuild
|
|
565
577
|
end
|
566
578
|
end
|
567
579
|
|
580
|
+
def package_array_cleanup_encodings( package_array )
|
581
|
+
outp = ''
|
582
|
+
package_array.each do |item|
|
583
|
+
if item.encoding != 'UTF-8'
|
584
|
+
puts "item has invalid encoding(#{item.encoding.to_s}): #{item[0..70]}"
|
585
|
+
outp += item.force_encoding( 'UTF-8' )
|
586
|
+
else
|
587
|
+
outp += item
|
588
|
+
end
|
589
|
+
end
|
590
|
+
outp
|
591
|
+
end
|
592
|
+
|
568
593
|
def compose_destinations
|
569
594
|
@destination_files = {} # rename to package_products
|
570
595
|
@destination_origsize = {}
|
@@ -580,7 +605,11 @@ class ClientPkgBuild
|
|
580
605
|
end
|
581
606
|
end
|
582
607
|
@destination_files.each do | package_name, package_array |
|
583
|
-
|
608
|
+
begin
|
609
|
+
package_data = package_array.join("\n")
|
610
|
+
rescue Encoding::CompatibilityError
|
611
|
+
package_data = package_array_cleanup_encodings( package_array )
|
612
|
+
end
|
584
613
|
@destination_files[ package_name ] = package_data
|
585
614
|
end
|
586
615
|
end
|