@@ -16,7 +16,8 @@ define([
16
16
'vp_base/js/com/com_util' ,
17
17
'vp_base/js/com/com_String' ,
18
18
'vp_base/js/com/component/Component' ,
19
- ] , function ( com_util , com_String , Component ) {
19
+ './CodeView'
20
+ ] , function ( com_util , com_String , Component , CodeView ) {
20
21
'use strict' ;
21
22
22
23
class BlockMenu extends Component {
@@ -32,6 +33,8 @@ define([
32
33
left : 0 ,
33
34
top : 0
34
35
} ;
36
+
37
+ this . prevBlockCodeview = null ;
35
38
}
36
39
37
40
_bindEvent ( ) {
@@ -48,7 +51,7 @@ define([
48
51
} ) ;
49
52
/** add block */
50
53
$ ( this . wrapSelector ( '#vp_block_menu_add' ) ) . on ( 'click' , function ( ) {
51
- that . boardFrame . runBlock ( that . block , false ) ;
54
+ that . boardFrame . runBlock ( that . block , true , false ) ;
52
55
that . close ( ) ;
53
56
} ) ;
54
57
/** duplicate block */
@@ -62,6 +65,36 @@ define([
62
65
that . boardFrame . removeBlock ( that . block ) ;
63
66
that . close ( ) ;
64
67
} ) ;
68
+ /** code view */
69
+ $ ( this . wrapSelector ( '#vp_block_menu_codeview' ) ) . on ( 'click' , function ( ) {
70
+ let overallCode = new com_String ( ) ;
71
+ let groupCode = that . boardFrame . runBlock ( that . block , false , false ) ;
72
+ if ( that . block . id == 'apps_markdown' ) {
73
+ // if markdown, add #
74
+ groupCode = '#' + groupCode . replaceAll ( '\n' , '\n# ' ) ;
75
+ }
76
+ overallCode . appendFormatLine ( '# VisualPython [{0}]{1}' , that . block . blockNumber ,
77
+ that . block . id == 'apps_markdown' ? ' - Markdown' :'' ) ;
78
+ overallCode . append ( groupCode ) ;
79
+
80
+ // open codeview
81
+ let codeview = new CodeView ( {
82
+ codeview : overallCode . toString ( ) ,
83
+ config : {
84
+ id : 'blockCodeview' ,
85
+ name : 'Block Codeview' ,
86
+ path : ''
87
+ }
88
+ } ) ;
89
+ if ( that . prevBlockCodeview != null ) {
90
+ // remove prev code view
91
+ that . prevBlockCodeview . remove ( ) ;
92
+ }
93
+ that . prevBlockCodeview = codeview ;
94
+ codeview . open ( ) ;
95
+
96
+ that . close ( ) ;
97
+ } ) ;
65
98
}
66
99
67
100
template ( ) {
@@ -79,6 +112,9 @@ define([
79
112
sbBlockMenu . appendLine ( '<div id="vp_block_menu_duplicate" class="vp-block-menu-item">Duplicate</div>' ) ;
80
113
// delete button
81
114
sbBlockMenu . appendLine ( '<div id="vp_block_menu_delete" class="vp-block-menu-item">Delete</div>' ) ;
115
+ // codeview button
116
+ sbBlockMenu . appendLine ( '<hr class="vp-extra-menu-line" id="vp_block_menu_line_2">' ) ;
117
+ sbBlockMenu . appendLine ( '<div id="vp_block_menu_codeview" class="vp-block-menu-item">Code view</div>' ) ;
82
118
sbBlockMenu . appendLine ( '</div>' ) ;
83
119
return sbBlockMenu . toString ( ) ;
84
120
}
@@ -89,6 +125,20 @@ define([
89
125
left : left ,
90
126
top : top
91
127
} ;
128
+
129
+ // handling menu box to show inside visible area
130
+ let docWidth = $ ( document ) . width ( ) ;
131
+ let docHeight = $ ( document ) . height ( ) ;
132
+ let menuWidth = $ ( this . wrapSelector ( ) ) . outerWidth ( ) ;
133
+ let menuHeight = $ ( this . wrapSelector ( ) ) . outerHeight ( ) ;
134
+ if ( docWidth < left + menuWidth ) {
135
+ // horizontally out of view
136
+ this . position . left -= menuWidth ;
137
+ }
138
+ if ( docHeight < top + menuHeight ) {
139
+ // vertically out of view
140
+ this . position . top -= menuHeight ;
141
+ }
92
142
93
143
$ ( this . wrapSelector ( ) ) . css ( this . position ) ;
94
144
// show items
0 commit comments