@@ -3,6 +3,7 @@ var $table = null;
3
3
function Array2DTracer ( module ) {
4
4
if ( Tracer . call ( this , module || Array2DTracer ) ) {
5
5
initTable ( ) ;
6
+ initNavigator ( this ) ;
6
7
return true ;
7
8
}
8
9
return false ;
@@ -45,12 +46,18 @@ Array2DTracer.prototype.setData = function (D) {
45
46
this . D = D ;
46
47
if ( Tracer . prototype . setData . call ( this , arguments ) ) return true ;
47
48
49
+ this . viewX = this . viewY = 0 ;
50
+ this . paddingH = 6 ;
51
+ this . paddingV = 3 ;
52
+ this . fontSize = 16 ;
48
53
$table . empty ( ) ;
49
54
for ( var i = 0 ; i < D . length ; i ++ ) {
50
55
var $row = $ ( '<div class="mtbl-row">' ) ;
51
56
$table . append ( $row ) ;
52
57
for ( var j = 0 ; j < D [ i ] . length ; j ++ ) {
53
- var $cell = $ ( '<div class="mtbl-cell">' ) . text ( D [ i ] [ j ] ) ;
58
+ var $cell = $ ( '<div class="mtbl-cell">' )
59
+ . css ( this . getCellCss ( ) )
60
+ . text ( D [ i ] [ j ] ) ;
54
61
$row . append ( $cell ) ;
55
62
}
56
63
}
@@ -158,23 +165,22 @@ Array2DTracer.prototype.processStep = function (step, options) {
158
165
}
159
166
} ;
160
167
168
+ Array2DTracer . prototype . getCellCss = function ( ) {
169
+ return {
170
+ padding : this . paddingV + 'px ' + this . paddingH + 'px' ,
171
+ 'font-size' : this . fontSize
172
+ } ;
173
+ } ;
174
+
161
175
// Override
162
176
Array2DTracer . prototype . refresh = function ( ) {
163
177
Tracer . prototype . refresh . call ( this ) ;
164
178
165
179
var $parent = $table . parent ( ) ;
166
- var top = $parent . height ( ) / 2 - $table . height ( ) / 2 ;
167
- var left = $parent . width ( ) / 2 - $table . width ( ) / 2 ;
168
- if ( top < 0 ) {
169
- $table . css ( 'margin-top' , 0 ) ;
170
- $parent . scrollTop ( - top ) ;
171
- }
172
- else $table . css ( 'margin-top' , top ) ;
173
- if ( left < 0 ) {
174
- $table . css ( 'margin-left' , 0 ) ;
175
- $parent . scrollLeft ( - left ) ;
176
- }
177
- else $table . css ( 'margin-left' , left ) ;
180
+ var top = $parent . height ( ) / 2 - $table . height ( ) / 2 + this . viewY ;
181
+ var left = $parent . width ( ) / 2 - $table . width ( ) / 2 + this . viewX ;
182
+ $table . css ( 'margin-top' , top ) ;
183
+ $table . css ( 'margin-left' , left ) ;
178
184
} ;
179
185
180
186
// Override
@@ -198,6 +204,44 @@ var initTable = function () {
198
204
$ ( '.module_container' ) . append ( $table ) ;
199
205
} ;
200
206
207
+ var initNavigator = function ( tracer ) {
208
+ var x , y , dragging = false ;
209
+ var $parent = $table . parent ( ) ;
210
+ $parent . mousedown ( function ( e ) {
211
+ x = e . pageX ;
212
+ y = e . pageY ;
213
+ dragging = true ;
214
+ } ) ;
215
+ $parent . mousemove ( function ( e ) {
216
+ if ( dragging ) {
217
+ tracer . viewX += e . pageX - x ;
218
+ tracer . viewY += e . pageY - y ;
219
+ x = e . pageX ;
220
+ y = e . pageY ;
221
+ tracer . refresh ( ) ;
222
+ }
223
+ } ) ;
224
+ $ ( document ) . mouseup ( function ( e ) {
225
+ dragging = false ;
226
+ } ) ;
227
+
228
+ $parent . bind ( 'DOMMouseScroll mousewheel' , function ( e , delta ) {
229
+ e = e . originalEvent ;
230
+ var delta = ( e . wheelDelta !== undefined && e . wheelDelta ) ||
231
+ ( e . detail !== undefined && - e . detail ) ;
232
+ var weight = 1.01 ;
233
+ var ratio = delta > 0 ? 1 / weight : weight ;
234
+ if ( tracer . fontSize < 8 && ratio < 1 ) return false ;
235
+ if ( tracer . fontSize > 36 && ratio > 1 ) return false ;
236
+ tracer . paddingV *= ratio ;
237
+ tracer . paddingH *= ratio ;
238
+ tracer . fontSize *= ratio ;
239
+ $ ( '.mtbl-cell' ) . css ( tracer . getCellCss ( ) ) ;
240
+ tracer . refresh ( ) ;
241
+ e . preventDefault ( ) ;
242
+ } ) ;
243
+ } ;
244
+
201
245
var paintColor = function ( sx , sy , ex , ey , colorClass , addClass ) {
202
246
for ( var i = sx ; i <= ex ; i ++ ) {
203
247
var $row = $table . find ( '.mtbl-row' ) . eq ( i ) ;
0 commit comments