9
9
*/
10
10
JX . behavior ( 'pholio-mock-view' , function ( config ) {
11
11
var is_dragging = false ;
12
- var is_typing = false ;
13
12
14
13
var wrapper = JX . $ ( 'mock-wrapper' ) ;
15
- var startPos ;
16
- var endPos ;
14
+ var drag_begin ;
15
+ var drag_end ;
17
16
18
17
var selection_border ;
19
18
var selection_fill ;
@@ -55,72 +54,31 @@ JX.behavior('pholio-mock-view', function(config) {
55
54
// Select and show the first image.
56
55
select_image ( config . images [ 0 ] . id ) ;
57
56
58
- function draw_rectangle ( nodes , current , init ) {
59
- for ( var ii = 0 ; ii < nodes . length ; ii ++ ) {
60
- var node = nodes [ ii ] ;
61
-
62
- JX . $V (
63
- Math . abs ( current . x - init . x ) ,
64
- Math . abs ( current . y - init . y ) )
65
- . setDim ( node ) ;
66
-
67
- JX . $V (
68
- ( current . x - init . x < 0 ) ? current . x :init . x ,
69
- ( current . y - init . y < 0 ) ? current . y :init . y )
70
- . setPos ( node ) ;
71
- }
72
- }
73
-
74
- function getRealXY ( parent , point ) {
75
- var pos = { x : ( point . x - parent . x ) , y : ( point . y - parent . y ) } ;
76
- var dim = JX . Vector . getDim ( JX . $ ( config . mainID ) ) ;
77
-
78
- pos . x = Math . max ( 0 , Math . min ( pos . x , dim . x ) ) ;
79
- pos . y = Math . max ( 0 , Math . min ( pos . y , dim . y ) ) ;
80
-
81
- return pos ;
82
- }
83
-
84
57
JX . Stratcom . listen ( 'mousedown' , 'mock-wrapper' , function ( e ) {
85
58
if ( ! e . isNormalMouseEvent ( ) ) {
86
59
return ;
87
60
}
88
61
89
- if ( is_typing ) {
90
- JX . DOM . remove ( JX . $ ( 'pholio-new-inline-comment-dialog' ) ) ;
91
- JX . DOM . remove ( selection_fill ) ;
92
- JX . DOM . remove ( selection_border ) ;
62
+ if ( drag_begin ) {
63
+ return ;
93
64
}
94
65
95
- e . getRawEvent ( ) . target . draggable = false ;
96
- is_dragging = true ;
97
-
98
- startPos = getRealXY ( JX . $V ( wrapper ) , JX . $V ( e ) ) ;
66
+ e . kill ( ) ;
99
67
100
- selection_border = JX . $N (
101
- 'div' ,
102
- { className : 'pholio-mock-select-border' } ) ;
103
-
104
- selection_fill = JX . $N (
105
- 'div' ,
106
- { className : 'pholio-mock-select-fill' } ) ;
107
-
108
- JX . $V ( startPos . x , startPos . y ) . setPos ( selection_border ) ;
109
- JX . $V ( startPos . x , startPos . y ) . setPos ( selection_fill ) ;
68
+ is_dragging = true ;
69
+ drag_begin = get_image_xy ( JX . $V ( e ) ) ;
70
+ drag_end = drag_begin ;
110
71
111
- JX . DOM . appendContent ( wrapper , [ selection_border , selection_fill ] ) ;
72
+ redraw_selection ( ) ;
112
73
} ) ;
113
74
114
75
JX . enableDispatch ( document . body , 'mousemove' ) ;
115
- JX . Stratcom . listen ( 'mousemove' , null , function ( e ) {
76
+ JX . Stratcom . listen ( 'mousemove' , null , function ( e ) {
116
77
if ( ! is_dragging ) {
117
78
return ;
118
79
}
119
-
120
- draw_rectangle (
121
- [ selection_border , selection_fill ] ,
122
- getRealXY ( JX . $V ( wrapper ) ,
123
- JX . $V ( e ) ) , startPos ) ;
80
+ drag_end = get_image_xy ( JX . $V ( e ) ) ;
81
+ redraw_selection ( ) ;
124
82
} ) ;
125
83
126
84
JX . Stratcom . listen (
@@ -145,9 +103,8 @@ JX.behavior('pholio-mock-view', function(config) {
145
103
return ;
146
104
}
147
105
is_dragging = false ;
148
- is_typing = true ;
149
106
150
- endPos = getRealXY ( JX . $V ( wrapper ) , JX . $V ( e ) ) ;
107
+ drag_end = get_image_xy ( JX . $V ( e ) ) ;
151
108
152
109
var create_inline = new JX . Request ( "/pholio/inline/save/" , function ( r ) {
153
110
JX . DOM . appendContent ( JX . $ ( 'pholio-mock-image-container' ) , JX . $H ( r ) ) ;
@@ -158,8 +115,9 @@ JX.behavior('pholio-mock-view', function(config) {
158
115
var wrapperDimensions = JX . Vector . getDim ( wrapper ) ;
159
116
160
117
JX . $V (
161
- wrapperVector . x + Math . max ( startPos . x , endPos . x ) ,
162
- wrapperVector . y + Math . max ( startPos . y , endPos . y )
118
+ // TODO: This is a little funky for now.
119
+ Math . max ( drag_begin . x , drag_end . x ) ,
120
+ Math . max ( drag_begin . y , drag_end . y )
163
121
) . setPos ( dialog ) ;
164
122
165
123
} ) ;
@@ -206,7 +164,7 @@ JX.behavior('pholio-mock-view', function(config) {
206
164
207
165
position_inline_rectangle ( inline , inlineSelection ) ;
208
166
209
- if ( inline . transactionphid == null ) {
167
+ if ( ! inline . transactionphid ) {
210
168
211
169
var inlineDraft = JX . $N (
212
170
'div' ,
@@ -232,6 +190,49 @@ JX.behavior('pholio-mock-view', function(config) {
232
190
JX . $V ( inline . width , inline . height ) . setDim ( rect ) ;
233
191
}
234
192
193
+ function get_image_xy ( p ) {
194
+ var main = JX . $ ( config . mainID ) ;
195
+ var mainp = JX . $V ( main ) ;
196
+
197
+ var x = Math . max ( 0 , Math . min ( p . x - mainp . x , main . naturalWidth ) ) ;
198
+ var y = Math . max ( 0 , Math . min ( p . y - mainp . y , main . naturalHeight ) ) ;
199
+
200
+ return {
201
+ x : x ,
202
+ y : y
203
+ } ;
204
+ }
205
+
206
+ function redraw_selection ( ) {
207
+ selection_border = selection_border || JX . $N (
208
+ 'div' ,
209
+ { className : 'pholio-mock-select-border' } ) ;
210
+
211
+ selection_fill = selection_fill || JX . $N (
212
+ 'div' ,
213
+ { className : 'pholio-mock-select-fill' } ) ;
214
+
215
+ var p = JX . $V (
216
+ Math . min ( drag_begin . x , drag_end . x ) ,
217
+ Math . min ( drag_begin . y , drag_end . y ) ) ;
218
+
219
+ var d = JX . $V (
220
+ Math . max ( drag_begin . x , drag_end . x ) - p . x ,
221
+ Math . max ( drag_begin . y , drag_end . y ) - p . y ) ;
222
+
223
+ var nodes = [ selection_border , selection_fill ] ;
224
+ for ( var ii = 0 ; ii < nodes . length ; ii ++ ) {
225
+ var node = nodes [ ii ] ;
226
+ wrapper . appendChild ( node ) ;
227
+ p . setPos ( node ) ;
228
+ d . setDim ( node ) ;
229
+ }
230
+ }
231
+
232
+ function clear_selection ( ) {
233
+ selection_fill && JX . DOM . remove ( selection_fill ) ;
234
+ selection_border && JX . DOM . remove ( selection_border ) ;
235
+ }
235
236
236
237
function load_inline_comments ( ) {
237
238
var comment_holder = JX . $ ( 'mock-inline-comments' ) ;
@@ -324,7 +325,6 @@ JX.behavior('pholio-mock-view', function(config) {
324
325
'inline-save-cancel' ,
325
326
function ( e ) {
326
327
e . kill ( ) ;
327
-
328
328
interrupt_typing ( ) ;
329
329
}
330
330
) ;
@@ -347,36 +347,28 @@ JX.behavior('pholio-mock-view', function(config) {
347
347
var saveURI = "/pholio/inline/save/" ;
348
348
349
349
var inlineComment = new JX . Request ( saveURI , function ( r ) {
350
- if ( ! r . success ) return ;
351
-
352
- JX . DOM . appendContent (
353
- JX . $ ( 'mock-inline-comments' ) ,
354
- JX . $H ( r . contentHTML ) ) ;
355
-
356
- JX . Stratcom . addSigil ( selection_fill , 'image_selection' ) ;
357
- selection_fill . id = r . phid + '_fill' ;
358
- JX . Stratcom . addData ( selection_fill , { phid : r . phid } ) ;
359
- selection_border . id = r . phid + '_selection' ;
350
+ if ( ! inline_comments [ active_image . id ] ) {
351
+ inline_comments [ active_image . id ] = [ ] ;
352
+ }
353
+ inline_comments [ active_image . id ] . push ( r ) ;
360
354
361
- JX . DOM . remove ( JX . $ ( 'pholio-new-inline-comment-dialog' ) ) ;
362
- is_typing = false ;
363
- } ) ;
355
+ interrupt_typing ( ) ;
356
+ redraw_inlines ( active_image . id ) ;
357
+ } ) ;
364
358
365
359
var commentToAdd = {
366
360
mockID : config . mockID ,
367
361
op : 'save' ,
368
362
imageID : active_image . id ,
369
- startX : Math . min ( startPos . x , endPos . x ) ,
370
- startY : Math . min ( startPos . y , endPos . y ) ,
371
- endX : Math . max ( startPos . x , endPos . x ) ,
372
- endY : Math . max ( startPos . y , endPos . y ) ,
363
+ startX : Math . min ( drag_begin . x , drag_end . x ) ,
364
+ startY : Math . min ( drag_begin . y , drag_end . y ) ,
365
+ endX : Math . max ( drag_begin . x , drag_end . x ) ,
366
+ endY : Math . max ( drag_begin . y , drag_end . y ) ,
373
367
comment : new_content
374
368
} ;
375
369
376
370
inlineComment . addData ( commentToAdd ) ;
377
371
inlineComment . send ( ) ;
378
-
379
-
380
372
}
381
373
) ;
382
374
@@ -389,12 +381,15 @@ JX.behavior('pholio-mock-view', function(config) {
389
381
}
390
382
391
383
function interrupt_typing ( ) {
392
- if ( is_typing == true ) {
393
- JX . DOM . remove ( selection_fill ) ;
394
- JX . DOM . remove ( selection_border ) ;
384
+ clear_selection ( ) ;
385
+
386
+ try {
395
387
JX . DOM . remove ( JX . $ ( 'pholio-new-inline-comment-dialog' ) ) ;
396
- is_typing = false ;
388
+ } catch ( x ) {
389
+ // TODO: For now, ignore this.
397
390
}
391
+
392
+ drag_begin = null ;
398
393
}
399
394
400
395
load_inline_comments ( ) ;
0 commit comments