@@ -137,7 +137,13 @@ function($, _, Backbone, gettext, BasePage,
137
137
if ( ! data ) return ;
138
138
139
139
const xblockElement = this . findXBlockElement ( this . targetXBlock ) ;
140
- const xblockWrapper = $ ( "li.studio-xblock-wrapper[data-locator='" + data . payload . locator + "']" ) ;
140
+ let xblockWrapper ;
141
+
142
+ if ( data . payload && data . payload . locator ) {
143
+ xblockWrapper = $ ( "li.studio-xblock-wrapper[data-locator='" + data . payload . locator + "']" ) ;
144
+ } else {
145
+ xblockWrapper = $ ( ) ;
146
+ }
141
147
142
148
switch ( data . type ) {
143
149
case 'refreshXBlock' :
@@ -147,11 +153,11 @@ function($, _, Backbone, gettext, BasePage,
147
153
this . refreshXBlock ( xblockElement , false ) ;
148
154
break ;
149
155
case 'completeXBlockMoving' :
150
- xblockWrapper . hide ( )
151
- break ;
156
+ xblockWrapper . hide ( )
157
+ break ;
152
158
case 'rollbackMovedXBlock' :
153
- xblockWrapper . show ( )
154
- break ;
159
+ xblockWrapper . show ( )
160
+ break ;
155
161
case 'updateXBlockName' :
156
162
case 'addXBlock' :
157
163
this . createComponent ( this , xblockElement , event . data ) ;
@@ -225,24 +231,24 @@ function($, _, Backbone, gettext, BasePage,
225
231
}
226
232
227
233
if ( self . options . isIframeEmbed ) {
228
- const scrollOffset = parseInt ( localStorage . getItem ( 'modalEditLastYPosition' ) ) ;
229
- if ( localStorage . getItem ( 'modalEditLastYPosition' ) ) {
230
- try {
231
- setTimeout ( ( ) => {
232
- window . parent . postMessage (
233
- {
234
- type : 'scrollToXBlock' ,
235
- message : 'Scroll to XBlock' ,
236
- payload : { scrollOffset}
237
- } , document . referrer
238
- ) ;
239
- localStorage . removeItem ( 'modalEditLastYPosition' ) ;
240
- } , 1000 ) ;
241
- } catch ( e ) {
242
- console . error ( e ) ;
234
+ const scrollOffsetString = localStorage . getItem ( 'modalEditLastYPosition' ) ;
235
+ const scrollOffset = scrollOffsetString ? parseInt ( scrollOffsetString , 10 ) : 0 ;
236
+
237
+ if ( scrollOffset ) {
238
+ try {
239
+ window . parent . postMessage (
240
+ {
241
+ type : 'scrollToXBlock' ,
242
+ message : 'Scroll to XBlock' ,
243
+ payload : { scrollOffset }
244
+ } , document . referrer
245
+ ) ;
246
+ localStorage . removeItem ( 'modalEditLastYPosition' ) ;
247
+ } catch ( e ) {
248
+ console . error ( e ) ;
249
+ }
243
250
}
244
251
}
245
- }
246
252
} ,
247
253
block_added : options && options . block_added
248
254
} ) ;
@@ -476,8 +482,8 @@ function($, _, Backbone, gettext, BasePage,
476
482
|| ( useNewProblemEditor === 'True' && blockType === 'problem' )
477
483
) {
478
484
var destinationUrl = primaryHeader . attr ( 'authoring_MFE_base_url' )
479
- + '/' + blockType
480
- + '/' + encodeURI ( primaryHeader . attr ( 'data-usage-id' ) ) ;
485
+ + '/' + blockType
486
+ + '/' + encodeURI ( primaryHeader . attr ( 'data-usage-id' ) ) ;
481
487
482
488
try {
483
489
if ( this . options . isIframeEmbed ) {
@@ -670,7 +676,7 @@ function($, _, Backbone, gettext, BasePage,
670
676
type : 'toggleCourseXBlockDropdown' ,
671
677
message : 'Adjust the height of the dropdown menu' ,
672
678
payload : {
673
- courseXBlockDropdownHeight : courseXBlockDropdownHeight / 2 ,
679
+ courseXBlockDropdownHeight : courseXBlockDropdownHeight / 2 ,
674
680
} ,
675
681
} , document . referrer
676
682
) ;
@@ -804,6 +810,10 @@ function($, _, Backbone, gettext, BasePage,
804
810
payload : { courseXBlockDropdownHeight : 0 }
805
811
} , document . referrer
806
812
) ;
813
+ if ( [ 'html' , 'problem' , 'video' ] . includes ( blockType ) ) {
814
+ const scrollHeight = event . clientY + this . findXBlockElement ( event . target ) . height ( ) ;
815
+ localStorage . setItem ( 'modalEditLastYPosition' , scrollHeight . toString ( ) ) ;
816
+ }
807
817
}
808
818
} catch ( e ) {
809
819
console . error ( e ) ;
@@ -830,13 +840,13 @@ function($, _, Backbone, gettext, BasePage,
830
840
type : 'showMoveXBlockModal' ,
831
841
payload : {
832
842
sourceXBlockInfo : {
833
- id : sourceXBlockInfo . attributes . id ,
834
- displayName : sourceXBlockInfo . attributes . display_name ,
843
+ id : sourceXBlockInfo . attributes . id ,
844
+ displayName : sourceXBlockInfo . attributes . display_name ,
835
845
} ,
836
846
sourceParentXBlockInfo : {
837
- id : sourceParentXBlockInfo . attributes . id ,
838
- category : sourceParentXBlockInfo . attributes . category ,
839
- hasChildren : sourceParentXBlockInfo . attributes . has_children ,
847
+ id : sourceParentXBlockInfo . attributes . id ,
848
+ category : sourceParentXBlockInfo . attributes . category ,
849
+ hasChildren : sourceParentXBlockInfo . attributes . has_children ,
840
850
} ,
841
851
} ,
842
852
} , document . referrer
@@ -947,15 +957,15 @@ function($, _, Backbone, gettext, BasePage,
947
957
{
948
958
type : 'scrollToXBlock' ,
949
959
message : 'Scroll to XBlock' ,
950
- payload : { scrollOffset }
960
+ payload : { scrollOffset : xblockElement . height ( ) }
951
961
} , document . referrer
952
962
) ;
953
963
} catch ( e ) {
954
964
console . error ( e ) ;
955
965
}
956
966
return window . addEventListener ( 'message' , ( event ) => {
957
967
if ( event . data && event . data . type === 'completeXBlockDuplicating' ) {
958
- return self . onNewXBlock ( placeholderElement , scrollOffset , true , event . data . payload ) ;
968
+ return self . onNewXBlock ( placeholderElement , null , true , event . data . payload ) ;
959
969
}
960
970
} ) ;
961
971
}
@@ -1112,7 +1122,7 @@ function($, _, Backbone, gettext, BasePage,
1112
1122
rootLocator = this . xblockView . model . id ;
1113
1123
if ( xblockElement . length === 0 || xblockElement . data ( 'locator' ) === rootLocator ) {
1114
1124
if ( block_added ) {
1115
- this . render ( { refresh : true , block_added : block_added } ) ;
1125
+ this . render ( { refresh : true , block_added : block_added } ) ;
1116
1126
}
1117
1127
} else if ( parentElement . hasClass ( 'reorderable-container' ) ) {
1118
1128
this . refreshChildXBlock ( xblockElement , block_added , is_duplicate ) ;
0 commit comments