@@ -137,19 +137,19 @@ export default class helpers {
137137 const rootElement = xmlDoc . createElement ( "project" ) ;
138138 xmlDoc . appendChild ( rootElement ) ;
139139
140- for ( var x of addon . tab . redux . state . scratchGui . vm . runtime . targets ) {
141- // Create a child element with text content
142- const childElement = xmlDoc . createElement ( "sprite" ) ;
143- childElement . innerHTML = x . blocks . toXML ( ) ;
144- rootElement . appendChild ( childElement ) ;
140+ for ( var x of addon . tab . redux . state . scratchGui . vm . runtime . targets ) {
141+ // Create a child element with text content
142+ const childElement = xmlDoc . createElement ( "sprite" ) ;
143+ childElement . innerHTML = x . blocks . toXML ( ) ;
144+ rootElement . appendChild ( childElement ) ;
145145 }
146146 // Serialize XML to string
147147 const serializer = new XMLSerializer ( ) ;
148148 const xmlString = serializer . serializeToString ( xmlDoc ) ;
149149
150150 console . log ( xmlString ) ;
151151 }
152- static APIKeyRequiredModal ( ) {
152+ static APIKeyRequiredModal ( ) {
153153 const div = document . createElement ( 'div' ) ;
154154 div . className = 'container' ;
155155 div . id = 'torchyPopup' ;
@@ -181,8 +181,50 @@ export default class helpers {
181181 </div>` ;
182182 document . body . appendChild ( div ) ;
183183 document . getElementById ( 'closePopup' ) . addEventListener ( 'click' , ( ) => {
184- document . getElementById ( 'torchyPopup' ) . remove ( ) ;
185- document . AI_INTEGRATION . popupOpen = false ;
184+ document . getElementById ( 'torchyPopup' ) . remove ( ) ;
185+ document . AI_INTEGRATION . popupOpen = false ;
186186 } ) ;
187187 }
188+ static returnSterilizedToolbox ( Gaddon ) {
189+ if ( Gaddon == null ) return ;
190+ function extractBlockReturnType ( block ) {
191+ if ( block ) {
192+ var returnType = "Stack" ;
193+ if ( block . outputConnection ) {
194+ // Check if the block is a boolean
195+ if ( block . outputConnection . check_ && block . outputConnection . check_ . includes ( "Boolean" ) ) {
196+ returnType = "Reporter" ;
197+ } else {
198+ returnType = "Boolean" ;
199+ }
200+ }
201+ return returnType ;
202+ } else {
203+ return null ;
204+ }
205+ }
206+ var workspace = new Blockly . Workspace ( ) ;
207+
208+ var toolbox = Gaddon . tab . redux . state . scratchGui . toolbox . toolboxXML ;
209+ var parser = new DOMParser ( ) ;
210+ var xmlDoc = parser . parseFromString ( toolbox , "text/xml" ) ;
211+ var sterializedToolbox = document . implementation . createDocument ( "" , "" , null ) ;
212+ var rootElement = sterializedToolbox . createElement ( "toolbox" ) ;
213+ sterializedToolbox . appendChild ( rootElement ) ;
214+ var blocks = xmlDoc . getElementsByTagName ( "block" ) ;
215+ for ( var block of blocks ) {
216+ var blockElement = block . cloneNode ( true ) ;
217+ var newBlock = Blockly . Xml . domToBlock ( blockElement , workspace )
218+ var returnType = extractBlockReturnType ( newBlock ) ;
219+ var blockCopy = block . cloneNode ( true ) ;
220+ blockCopy . removeAttribute ( "id" ) ;
221+ blockCopy . setAttribute ( "blockType" , returnType ) ;
222+ rootElement . appendChild ( blockCopy ) ;
223+ }
224+ workspace . dispose ( ) ;
225+ var serializer = new XMLSerializer ( ) ;
226+ var xmlString = serializer . serializeToString ( sterializedToolbox ) ;
227+ console . log ( "[DEBUG] toolbox has # of blocks: " + blocks . length ) ;
228+ return xmlString . replace ( / > \s + < / g, '><' ) . trim ( ) ;
229+ }
188230}
0 commit comments