{"version":3,"sources":["webpack:///./store/modules/StudioLauncher.js","webpack:///./store/modules/StudioProps.js","webpack:///./plugins/gtag.js","webpack:///./plugins/vee-validate.js","webpack:///./plugins/vue-observer-visibility.js","webpack:///./plugins/vue-slider.js","webpack:///./plugins/directives.js","webpack:///./plugins/readerLauncher.js","webpack:///./plugins/api.js","webpack:///./plugins/vue-lazyload.js","webpack:///./modules/vue-audio-visual/src/components/AvBase.js","webpack:///./modules/vue-audio-visual/src/components/AvBars.js","webpack:///./modules/vue-audio-visual/src/components/AvLine.js","webpack:///./modules/vue-audio-visual/src/components/AvCircle.js","webpack:///./modules/vue-audio-visual/src/components/AvWaveform.js","webpack:///./modules/vue-audio-visual/src/index.js","webpack:///./plugins/vue-audio-visual.js","webpack:///./middleware/redirects.js","webpack:///./assets/style/app.styl?5796","webpack:///./assets/style/app.styl","webpack:///./store/index.js","webpack:///./node_modules/vee-validate/dist/locale lazy ^\\.\\/.*$ namespace object","webpack:///./layouts/error.vue","webpack:///./layouts/error.vue?3bd7","webpack:///layouts/error.vue","webpack:///./layouts/error.vue?6c5d"],"names":["state","initialState","createProject","previewDialog","soundPanel","chatHistoryDialog","chatHistory","project","author_username","layout","event","thumb","sounds","global_variables","pageScale","fonts","slug","projectDetails","title","synoposis","tags","genre","status","classroom","assignment","studentmilestone","has_room_edit_perms","student_proxy","tabIndex","tabActive","activeFonts","transferStoryDialog","transferIsOn","fontsLoaded","generateCover","isLessonEditorMode","nextMilestone","nextMilestoneDialog","editDialog","showConfirmMilestone","showProgress","hideConfirmMilestone","fadeProgress","showNextMilestone","hideCloseBtn","selectedEmoji","selectedSatisfactionEmoji","progressValue","addFeedback","comment","category","lessonEditorAssignment","currentTutorial","mutations","CHAT_HISTORY_DIALOG","value","CHAT_HISTORY","stat","GENERATE_COVER","FONTS_LOADED","SET_PREVIEW_DIALOG","SET_SOUND_PANEL","RESET_STATE","Object","assign","SET_CREATE_PROJECT_LAYOUT","layoutName","IS_LESSON_EDITOR_MODE","SET_CURRENT_TUTORIAL","RESET_CREATE_PROJECT_LAYOUT","SET_PROJECT_AUTHOR_USERNAME","id","SET_PROJECT_SLUG","SET_PROJECT_LAYOUT","i","l","length","push","JSON","parse","LZString","decompressFromBase64","SET_PROJECT_EVENTGRAPH","SET_PROJECT_SOUNDS","SET_TRANSFER_IS_ON","SET_TRANSFER_STORY_DIALOG","SET_PROJECT_GLOBAL_VARIABLES","SET_PROJECT_FONTS","SET_ADDFEEDBACK_COMMENT","SET_ADDFEEDBACK_CATEGORY","SET_PROJECT_TITLE","SET_PROJECT_SYNOPOSIS","SET_PROJECT_TAGS","SET_PROJECT_ASSIGNMENT","SET_PROJECT_STUDENT_PROXY","SET_PROJECT_CLASSROOM","SET_LESSON_EDITOR_ASSIGNMENT","SET_NEXT_MILESTONE_EDIT_DIALOG","SHOW_NEXT_MILESTONE_DIALOG","CLOSE_NEXT_MILESTONE_DIALOG","SET_NEXT_MILESTONE_HIDE_CLOSE_BTN","SET_NEXT_MILESTONE_SHOW_PROGRESS","SET_NEXT_MILESTONE_FADE_PROGRESS","SET_NEXT_MILESTONE_SHOW_NEXT_MILESTONE","SET_NEXT_MILESTONE_HIDE_CONFIRM_MILESTONE","SET_NEXT_MILESTONE_SHOW_CONFIRM_MILESTONE","SET_NEXT_MILESTONE_PROGRESS_VALUE","completed","milestone","index","total_milestones","SET_PROJECT_ROOM_PERMISSIONS","SUBMIT_STUDENT_MILESTONE","is_submitted","is_ongoing","SET_STUDENT_PROXY","e","console","error","SET_PROJECT_MILESTONE","SET_PROJECT_GENRE","SET_PROJECT_STATUS","RESTORE_LAYOUT_PAGE","data","splice","pageNumber","switchMode","eventGraphMode","addPage","pageSelected","deletePage","setPageIndex","setTabIndex","setPageScale","addActiveFont","font","setLayoutPageDimensions","setHeight","height","setWidth","width","setLayoutPageDirty","dirty","namespaced","getters","actions","_ref","commit","_ref2","resetStudioLauncherState","_ref3","_ref4","_ref5","_ref6","languages","Afrikaans","አማርኛ","العربية","Azərbaycanca","বাংলা","Indonesian","Melayu","Català","Čeština","Dansk","Deutsch","English","Español","Filipino","Français","Basa_Jawa","Galego","ગુજરાતી","Hrvatski","IsiZulu","Íslenska","Italiano","ಕನ್ನಡ","ភាសាខ្មែរ","Latviešu","Lietuvių","മലയാളം","मराठी","Magyar","ລາວ","Nederlands","नेपाली","Norsk_bokmål","Polski","Português","Português_Brasil","Română","සිංහල","Slovenščina","Sunda","Slovenčina","Suomi","Svenska","Kiswahili_Kenya","Kiswahili_Tanzania","ქართული","Հայերեն","தமிழ்","తెలుగు","Tiếng_Việt","Türkçe","اُردُو","Ελληνικά","български","Pусский","Српски","Українська","한국어","普通话_中国大陆","普通话_台灣","粵語","日本語","हिन्दी","ภาษาไทย","templates","left","bottom","right","top","fontSizes","assetCategories","icon","name","blockCategories","color","blocks","functions","src","thumb_height","controls","variables","type","logic","events","textEffects","easings","percents","durations","objectAttributes","attr","moveDirections","speeds","textAssets","padding","style","spineAssets","json","tintedImg","basicShapes","widgetAssets","paletteColors","userColors","musicMoods","Happy","Aggressive","Sad","Relaxing","Romantic","Suspenseful","Epic","soundEffectGenres","Animals","Bells","Human","Foley","Instrument","Cartoon","Nature","PublicPlaces","tween","tweenThreshold","layoutContainer","mainObjectsContainer","mainFunctionsContainer","rightSidebar","positions","centerContainer","recordVoiceOver","templateKeys","code","editLayoutKeys","text","fontWeight","fontFamily","fontSize","fill","opacity","lockMovementX","tailPointx","scaleX","angle","currentSkin","stroke","strokeWidth","lineWidth","btnBgColor","rx","shadow","textAlign","center","justify","fontStyle","underline","flipX","bgColor","toFront","toBack","editBlockKeys","tutorials","animation","media_url","task","layout_objects","url","is_added","proxy","initActions","layoutMode","click_next_btn","event_figures","cssClass","target_object","source","port","node_proxy","target","click_preview_btn","record","sound","fadeIn","textEffect","effect","createTextVariable","add_variable","variable_proxy","edit_variable","entity","createVariable","test","imagetoolbar","shapetoolbar","animationtoolbar","attachments","texttoolbar","bubbletoolbar","buttontoolbar","Vue","use","VueGtag","deferScriptLoad","config","installed","localized","en","fr","es","it","pt","de","el","_ref10","app","VeeValidate","inject","i18n","Validator","extend","getMessage","field","validate","_arguments","arguments","_asyncToGenerator","regeneratorRuntime","mark","_callee","valid","res","wrap","_context","prev","next","undefined","_slicedToArray","$api","checkUsername","sent","taken","t0","log","abrupt","stop","_arguments2","_callee2","_context2","checkEmail","_arguments3","_callee3","Filter","filter","cleaned","_context3","require","addWords","clean","includes","_arguments4","_callee4","_ref8","_context4","substr","substring","installRules","locale","concat","then","localeObj","localize","_defineProperty","VueObserveVisibility","SlideVerify","directive","bind","binding","vnode","clickOutsideEvent","contains","classList","context","expression","document","body","addEventListener","unbind","removeEventListener","_appendLogMsg","_startHighlightInspectConnection","prototype","$elementari","SpeechRecognition","SpeechTargetsList","goToLinkStatus","timeThresholdBetweenTwoGoToLink","page","reader","selectedBtnObj","nextFrameTime","animationDelay","blur","offsetX","offsetY","fillShadow","strokeShadow","glow","eventCodeCounter","highlightBlocksList","eventBlocks","blocksWithObjectPort","blockWithLogicPort","setVarValBlocks","initEventStatus","eventObjectId","maxIterations","this","setGlobalVariables","m","getObjectBlockName","o","setPage","callback","setReader","checkIfEventIsActive","eventCode","eventStatus","activeStack","checkIfEventCodeIsCompleted","options","currentIteration","counter","block","getBlock","executeOnEventCode","getBlockConnections","animateCanvas","self","time","myRequestAnimation","requestAnimationFrame","isAnimating","requestRenderAll","stopAllRendering","cancelAnimationFrame","window","mozCancelAnimationFrame","animatedObjects","startObjectAnimationFrame","objectID","animationName","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","stopObjectAnimationFrame","displayNextPageHint","goToPageBlock","log_pageNumber","isValueAVariableField","isNumber","Number","$t","toLowerCase","appendLogMsg","goToPage","parseInt","goToLinkBlock","Date","getTime","goToLink","hideBlock","_this","getItemById","visible","timeouts","setTimeout","pop","showBlock","_this2","popObject","testCollision","scaleBlock","pageScales","isStudio","duration","scale","dragAnimationTrigger","isScaling","factor","easing","fabric","util","ease","abortAnimation","animate","scaleY","abort","bounce","isRotating","moveX","moveY","fade","inspectMode","$nuxt","$store","onChange","setImageLanczosFilter","onComplete","rotateBlock","originalAngle","waitBlock","parseFloat","moveToBlockAbsolute","testX","testY","coords","xCoord","yCoord","moveToBlockRelative","collisionWatchList","threshold","forEach","intersectsWithObject","event_id","hasOwnProperty","stringify","collisionTriggered","name1","name2","setTriggerObject","conn","connection","originalScaleY","playSoundEffectBlock","easeOutExpo","easeOutElastic","bounceBlock","easeOutBounce","fadeBlock","shift","ownCaching","objectCaching","_originalProperties","dontAddToActiveStack","setCoords","animateParams","easeOutQuart","textEffectBlock","texteffect1","textLength","_unwrappedTextLines","j","_renderTextCommon","canvas","getContext","originalStyles","styles","s","Color","setAlpha","toRgba","setSelectionStyles","fade_options","direction","speed","totalSteps","tumbleAnimation","flipAnimation","breatheAnimation","whirlpoolAnimation","rollAnimation","fadeTextEffect","texteffect2","typeTextEffect","lineIndex","charIndex","_this3","_text","urls","Math","floor","random","volume","getRandomNumber","deltaX","deltaY","_this4","_index","_lineIndex","_charIndex","fadeCharEffect","_fadeCharEffect","step","_this5","easeInBounce","t","easeOutBack","thirdSteps","c","max","sign","x","pow","easeInExpo","c1","easeInQuint","easeOutQuint","n1","d1","easeInElastic","c4","PI","sin","easeInOutElastic","c5","hexToRGBA","hex","replace","blinkBlock","blink","animateSpineBlock","endless","tracks","setAnimation","$tc","clearTrack","setVarVal","_this6","_typeof","showplaceholder","transformStringValue","$set","variable","updateObjectsTextValue","waitForGlowList","condition","generateConditionCode","layout_obj","obj_id","glowObject","setCookie","numberVariableEqualsRandomBlock","_this7","nameB","nameC","ceil","incrementBlock","_this8","decrementBlock","_this9","insertTextBlock","_this10","toString","setObjAttr","attribute","__callback","set","editable","setColor","flipY","lockMovementY","srcArray","setSrc","eventId","makeObjectGlow","parseBoolStr","hoverCursor","stopGlow","isGlowing","setShadow","easeInQuad","evented","clicked","easeOutQuad","slice","soundUrl","artist","Howl","preload","onload","soundEffects","play","mute","onplay","unload","onend","_src","playRecordBlock","recordSounds","stopMusicBlock","_this11","music","playMusicBlock","repeat","bg_sound","loop","_loop","changeImageBlock","imagePrefixPath","sourcePath","objects","loadSVGFromURL","obj","groupSVGElements","_objects","crossOrigin","arithmeticCalculatorBlock","_this12","String","eval","operation","textObjectEqualsVariableBlock","_this13","newTransformStringValue","getSelectionStyles","textObjectEqualsValueBlock","_this14","eventBlock","original_text","original_style","isVariable","removeChars","insertChars","start","indexOf","end","trim","substring_start","varName","varValue","getVariableValue","styles_start","original_styles","original_value","isVar","lockSwipeRightBlock","_this15","lockSwipeRight","lockSwipeLeftBlock","_this16","lockSwipeLeft","variableHasChanged","getObjects","dontPopActiveStack","oldText","flipObjectBlock","_this17","setObjectPositionBlock","_this18","y","setDraggableBlock","_this19","drag","restoreObjectBlock","_this20","btnHandler","btn","tinycolor","on","isHovered","isActive","lighten","darken","str","expressions","expressionRegex","RegExp","expressionIndex","match","evalBoolStr","conditions","split","validity","toBoolean","comparer","inversed","initCode","generateInitCode","generateCode","nextBlock","nextConn","connections","getBlockOutputConnections","checkLogicGatePorts","portCounter","getLogicGateChildren","children","child","canNegative","isInt","isFloat","isNaN","n","term1","term2","result","logicConnections","highlightBlock","hasTimeout","highlightConnection","onPageStartBlock","_this21","hasOutputFlowConn","delay","onPronounceBlock","word","array_words","initSpeechRecognition","isRecording","searchForSpeechMatch","colored","map","array_res","indexes_to_delete","speechTargetsList","match_counter","target_index","v","event_triggered","removeFromSpeechTargetsList","onClickBlock","_this22","_ret","enableObjectIsTouched","other_layout_obj","disableObjectIsTouched","onClickOnceBlock","onCollisionBlock","target_objects","collider_object","collisionWatch","initCollisionWatch","collision_is_active","targets","onDragOverBlock","_this23","targetObjConnection","dragged_obj","_ret2","_loop2","dragEventTriggered","onDragOverOnceBlock","onTextInputBlock","_this24","_ret3","_loop3","exitTextEditing","inputTriggered","onTextInputOnceBlock","generateOnCompleteCode","executeScript","objectConn","testCondition","obj_name1","obj_name2","obj_name","clicked_object","functionBlock","onCompleteTrigger","block_has_objectPort","eventGraphIsReady","stopHighlightInspectBlock","block_has_logicPort","branchBlock","conditionResult","targetBlock","sourceBlock","numberComparisonBlock","textComparisonBlock","includes_port_connected","is_exact","is_includes","_this25","startHighlightInspectBlock","_this26","startHighlightInspectConnection","stopHighlightInspectConnection","figure","highlightList","array","f","eventPage","getFigure","rect","draw2d","shape","basic","Rectangle","dasharray","show","groupId","setCanvas","transition","strokeDashoffset","_x","apply","hide","setPosition","getAbsolutePosition","translate","setDimension","getWidth","getHeight","sendError","method","message","traceback","remove","lines","strokeDasharray","$nextTick","_x2","_x3","msg","isEvent","isGoToPage","isSpeech","isError","container","scrollDown","getElementById","offsetHeight","scrollTop","scrollHeight","inspectLog","_x4","_x5","_x6","_x7","_x8","axios","$axios","registerUser","passwordReset","email","passwordResetConfirm","passwordChange","refreshToken","localLogin","autoLogin","resetStudentLoginLink","username","getAllStudentLogins","$get","facebookLogin","googleLogin","cleverGetToken","uri","cleverLogin","importCleverClassroom","classlinkGetToken","classlinkLogin","importClasslinkClassroom","resendVerifyEmail","verifyEmail","token","getInvoices","getSubscription","getUserSettings","setSubscription","cancelSubscription","reactivateSubscription","reactivate","checkCoupon","getClubs","getTrainings","getPastMyAssignments","params","cloneAssignment","getAASL","getCCELA","getCSTA","getISTE","getVocab","getHelperText","getEvent","getBanners","selectClassBanner","getClassbyClasscode","classcode","invite_url","setClassbyClasscode","getStudentClassrooms","active","getActiveShortListClassrooms","getClassrooms","getClassroomByGrade","grade","getClassroomBySubject","subject","getCoteachingClassrooms","getClassroom","createClassroom","editClassroom","deleteClassroom","archiveClassroom","unarchiveClassroom","setPasswordForStudents","password","teacher","getGoogleClassrooms","importGoogleClassroom","createStudent","removeStudent","setUserForGuestStory","storySlug","deleteOldGuestStories","transferStory","getLibrary","getLibraryAssignmentStories","getStudentRoster","query","getStudentRosterProfile","getStudentRosterOnline","progress","getClassroomAssignments","classSlug","getAssignmentDropdown","getAssignment","getStudentClassroomAssignments","getStudentClassroomAssignmentsName","getStoryBasic","createAssignment","editAssignment","deleteAssignment","submitToLessons","getAssignmentStats","getCurrentMilestoneIndex","getLibraryAssignmentStatus","editAssignmentStatus","closeAssignmentStatus","reopenAssignmentStatus","deleteAssignmentStatus","getAssignmentStatusUserStories","assignment_status_slug","created_by","getAssignmentStatusStories","getAssignmentStatusPublicStories","createSchool","editSchool","deleteSchool","getSchool","getSchoolTeachers","getSchoolInvitations","inviteTeacher","editInvite","sendTeacherInvite","removeTeacher","checkSchoolcode","connectSchool","getPurchaseOrders","school_slug","getQuote","createQuote","editQuote","getNumFeedbacksforStories","getStoryFeedback","story_slug","createFeedback","editFeedback","deleteFeedback","getChatHistory","getStoryComment","getComment","comment_id","getStoryCommentBy","editor","createComment","editComment","deleteComment","getAssetFolders","getAssetFolder","folder_id","createAssetFolder","editAssetFolder","deleteAssetFolder","addAssetToFolder","getUsers","getUser","editUser","editUserSettings","addEmail","editUserPk","pk","deleteUser","getNotificationFeed","feed_length","createStory","editStory","sendThumbnail","deleteStory","getMyUsedLessons","getMyLessons","getPublishedLessons","q","queryString","getSimilarPublishedLessons","getLesson","assignLessonToClassroom","getUserStories","is_student","getReadStory","getReviewStory","getFeaturedStories","getPublishedStories","search","searchQ","getAssetsList","group","categoryQ","groupQ","getAssetsSVGList","getFeaturedAssets","getAssetsInCollection","col_id","getAssetsDetailsInCollection","getAssetsFromAsset","getSVGCollectionFromAsset","getAssetSvgInCollection","getAssetCollections","getSVGCollections","filterSoundsList","params_list","mood","instrument","collection_id","join","getSoundEffectCollectionsList","getSoundsInCollection","getFeaturedSounds","getSoundCollectionsByArtist","getDisplayMessages","removeMessage","display","getSuggestedUsers","pagesize","_readOnlyError","getUserProfile","editUserProfile","getAvatars","changeAvatar","getFollowers","getFollowing","getBadges","getVersion","like","follow","report","remixStory","sendStoryLog","$post","hit","updateNotifications","updateTutorial","getTags","model","getCurrency","serverStatus","contactForm","errorForm","subscribeForm","addMember","removeMember","getAllRoomMembers","changeMember","getEditStory","deleteRecordSound","addRecordSound","getPageTemplatesList","getPageTemplate","getTutorialsList","getTutorial","searchGifs","searchTerm","apiKey","VueLazyload","observer","lazyComponent","observerOptions","rootMargin","methods","createHTMLElements","canv","createElement","canvDiv","audioDiv","audio","refLink","$parent","$refs","setAttribute","backgroundColor","audioSrc","audioControls","audioClass","corsAnonym","appendChild","$el","canvClass","canvWidth","canvHeight","canvTop","insertBefore","ctxWrapper","ctx","setAnalyser","$avAudioRefs","analyser","createAnalyser","AudioContext","createMediaElementSource","connect","fftSize","destination","audioCtx","fillGradient","colorsArray","w","h","gradient","createLinearGradient","offset","addColorStop","props","default","Boolean","canvFillColor","Array","render","mounted","mainLoop","beforeDestroy","close","AvBars","mixins","BaseMixin","barWidth","barSpace","barColor","capsHeight","capsDropSpeed","capsColor","brickHeight","brickSpace","symmetric","caps","frqBits","frequencyBinCount","Uint8Array","round","barFill","isArray","getByteFrequencyData","_fillCanvasBG","_","bits","reduce","barHeight","_drawCap","fillStyle","_drawBar","clearRect","fillRect","barX","_drawBrickBar","_symAlign","b","barwidth","barY","cap","capY","AvLine","lineColor","_setCanvas","strokeStyle","beginPath","reverse","moveTo","_drawLine","lineTo","canvColor","AvCircle","radius","lineSpace","outlineColor","outlineWidth","barLength","progressWidth","progressColor","progressClockwise","outlineMeterSpace","playtime","playtimeFont","playtimeColor","rotateGraph","rotateSpeed","rotate","cx","cy","r","arcStep","barLen","_rotate","_drawOutline","_drawProgress","_drawPlaytime","_setBarColor","blen","cos","elapsed","currentTime","angleEnd","arc","sec","tsizew","measureText","fillText","createRadialGradient","AvWaveform","playedLineWidth","playedLineColor","noplayedLineWidth","noplayedLineColor","playtimeWithMs","playtimeFontSize","playtimeFontFamily","playtimeFontColor","playtimeTextBottom","playtimeSlider","playtimeSliderColor","playtimeSliderWidth","playtimeClickable","peaks","downloadProgress","fetch","headers","responseType","response","arrayBuffer","decode","decodeAudioData","audioBuffer","setPeaks","buffer","min","segSize","$emit","numberOfChannels","getChannelData","updateTime","waveform","playX","draw","drawSlider","drawTime","timeFormat","timeSec","frmStr","ms","timeStr","textWidth","textX","textY","ev","progressX","loaded","total","AVPlugin","webkitAudioContext","mozAudioContext","msAudioContext","component","route","redirect","normalizedPath","path","endsWith","newLocation","ruleFound","_i","_redirects","from","to","rule","content","__esModule","module","locals","exports","add","___CSS_LOADER_EXPORT___","___CSS_LOADER_API_IMPORT___","pkg","VueI18n","store","Vuex","Store","version","assignmentDev","baseURL","socketBaseURL","frontendBaseURL","cleverKey","classlinkKey","stripeAPIKey","getStream","appId","ap","ga","st","an","currency","plans","accountType","amount","planId","discount","cookie_exp_date","searchQuery","placeholder","avatar_sm","avatar_md","story","navigationDrawer","onlineStatusDrawer","loginDialog","studentSignupDialog","teacherSignupDialog","signupDialog","contactDialog","submitAssetDialog","schoolContactDialog","featuredStories","featuredCurriculums","featuredClassrooms","featuredAssets","featuredSounds","previewSoundItem","previewSoundLoading","previewSoundPlaying","howl","initReaderAudio","hasLoginCookie","showLayoutLoader","suggestedUsers","displayMessages","currentProfile","currentClass","currentLibrary","studentSelectClass","studentSelectStory","collectionAssets","badgesCard","readerHelpDocumentationDialog","studioHelpDocumentationDialog","documentationArticle","getCurrentProfile","loggedIn","auth","appVersion","symbol","modules","StudioLauncher","StudioProps","SET_NUM_STUDENTS","num","num_students","SET_INSPECT_MODE","SET_DOCUMENTATION_ARTICLE","SET_READER_HELP_DOCUMENTATION_DIALOG","SET_STUDIO_HELP_DOCUMENTATION_DIALOG","HAS_LOGIN_COOKIE","SET_SHOW_LAYOUT_LOADER","LOGOUT","$auth","logout","setUser","setHeader","localStorage","clear","$cookies","removeAll","user","INIT_READER_AUDIO","setSearchQuery","setNavigationDrawer","setOnlineStatusDrawer","setLoginDialog","setStudentSignupDialog","setTeacherSignupDialog","setSubmitAssetDialog","setSignupDialog","setContactDialog","setSchoolContactDialog","SET_FEATURED_CURRICULUMS","list","SET_FEATURED_STORIES","SET_FEATURED_CLASSROOMS","SET_FEATURED_ASSETS","SET_FEATURED_SOUNDS","SET_STUDENT_SELECT_STORY","SET_STUDENT_SELECT_CLASS","SET_STUDENT_SELECT_ASSIGNMENT","SET_CURRENT_CLASS","SET_CURRENT_LIBRARY","SET_CURRENT_CLASS_LIBRARY_PASSWORD","student_password","SET_CURRENT_LIBRARY_ARCHIVE","archived_at","SET_CURRENT_ASSIGNMENT","SET_CURRENT_PROFILE","ADD_SOCIAL_LINK","profile","social","title_verbose","REMOVE_SOCIAL_LINK","SET_CLEVER_TOKEN","clever_token","SET_CLASSLINK_TOKEN","classlink_token","SET_LEVEL","level","CHANGE_LANG","lang","SET_STUDENT_PASS_IS_CODE","student_data","need_pass_change","SET_TEACHER_PASS_IS_CODE","teacher_data","SET_DISPLAY_MESSAGES","CHANGE_AVATAR","REMOVE_MESSAGE","findIndex","item","SET_CURRENCY","SET_SUGGESTED_USERS","SET_ASSETS_IN_COLLECTION","_ref7","SET_BADGES_CARD","SET_UNSEEN_NOTIFICATIONS","count","unseen_notifications","SET_PREVIEW_SOUND_ITEM","PLAY_SOUND_ITEM","audio_file","STOP_SOUND_ITEM","SET_FEEDBACK_FOR_STORIES","draft_stories","results","itm","_objectSpread","find","_ref9","_ref11","_ref12","DISPLAY_HELP","_ref13","payload","_ref14","_ref15","_ref16","_ref17","_ref18","_ref19","_ref20","_ref21","_ref22","_ref23","_ref24","GET_CURRENCY","_ref25","success","GET_SUGGESTED_USERS","_ref26","GET_FEATURED_CURRICULUMS","_ref27","_callee5","_context5","getCurriculums","GET_FEATURED_STORIES","_ref28","_callee6","_context6","GET_FEATURED_CLASSROOMS","_ref29","_callee7","_context7","getFeaturedClassrooms","GET_FEATURED_ASSETS","_ref30","_callee8","_context8","GET_FEATURED_SOUNDS","_ref31","_callee9","_context9","GET_DISPLAY_MESSAGES","_ref32","_callee10","_context10","GET_BADGES_CARD","_ref33","getting_started_done","_ref34","_ref35","_ref36","_ref37","_ref38","_ref39","_ref40","_ref41","SUBSCRIBE_PLAN","_ref42","_ref43","CANCEL_TRIAL","_ref44","CANCEL_PLAN","_ref45","SEND_CONTACT_FORM","_ref46","SEND_SUBSCRIBER","_ref47","UPDATE_UNSEEN_NOTIFICATIONS","_ref48","_ref49","_ref50","webpackAsyncContext","req","__webpack_require__","Promise","resolve","Error","ids","keys","required","head","meta","statusCode","refreshPage","location","reload","computed","_vm","_c","_self","attrs","staticClass","_v","_s","localePath","_e","VBtn","VContainer","VLayout"],"mappings":"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,EAFMK,EAANL,QAEO,kBAAmB/I,EAC5B,EACAsH,oBAAmB,SAAA+B,EAEhB9B,OACDwB,EAFMM,EAANN,QAEO,sBAAuBxB,KAChC,GAkWAtE,Y,mCClgBF,OAi5Fe,WACb0F,YAAY,EACZ/I,MAn5FY,CACZ0J,UAAW,CACTC,UAAW,QACXC,OAAM,QACNC,UAAS,QACTC,eAAc,QACdC,QAAO,QACPC,WAAY,QACZC,OAAQ,QACRC,SAAQ,QACRC,UAAS,QACTC,MAAO,QACPC,QAAS,QACTC,QAAS,QACTC,UAAS,QACTC,SAAU,SACVC,WAAU,QACVC,UAAW,QACXC,OAAQ,QACRC,UAAS,QACTC,SAAU,QACVC,QAAS,QACTC,WAAU,QACVC,SAAU,QACVC,QAAO,QACPC,YAAW,QACXC,WAAU,QACVC,WAAU,QACVC,SAAQ,QACRC,QAAO,QACPC,OAAQ,QACRC,MAAK,QACLC,WAAY,QACZC,SAAQ,QACRC,eAAc,QACdC,OAAQ,QACRC,YAAW,QACXC,mBAAkB,QAClBC,SAAQ,QACRC,QAAO,QACPC,cAAa,QACbC,MAAO,QACPC,aAAY,QACZC,MAAO,QACPC,QAAS,QACTC,gBAAiB,QACjBC,mBAAoB,QACpBC,UAAS,QACTC,UAAS,QACTC,QAAO,QACPC,SAAQ,QACRC,aAAY,QACZC,SAAQ,QACRC,SAAQ,QACRC,WAAU,QACVC,YAAW,QACXC,UAAS,QACTC,SAAQ,QACRC,aAAY,QACZC,MAAK,QACLC,WAAU,cACVC,SAAQ,cACRC,KAAI,cACJC,MAAK,QACLC,SAAQ,QACRC,UAAS,SAEX3M,MAAO,CACL,SACA,gBACA,OACA,WACA,aACA,gBACA,kBACA,SACA,QACA,mBACA,YACA,2BACA,QACA,sBACA,aACA,OACA,OACA,YACA,oBACA,aACA,UACA,SACA,aACA,YACA,kBACA,gBACA,WACA,eACA,kBACA,aACA,eACA,eACA,eACA,QACA,WACA,SACA,WACA,QACA,qBACA,oBACA,YACA,eACA,YACA,SACA,iBACA,aACA,QACA,cACA,QACA,eACA,MACA,eACA,UACA,cACA,uBACA,UACA,gBACA,WACA,gBACA,oBACA,cACA,aACA,cACA,cACA,SACA,UACA,cACA,iBACA,0BACA,eACA,eACA,eACA,eACA,eACA,kBACA,QACA,iBACA,WACA,QACA,SACA,OACA,aACA,oBACA,iBACA,YACA,cACA,kBACA,kBACA,OACA,wBACA,eACA,eACA,YACA,WACA,eACA,cACA,mBACA,UACA,aACA,gBACA,qBACA,mBACA,SACA,uBACA,SACA,YACA,WACA,UACA,SACA,mBACA,WACA,WACA,aACA,eACA,mBACA,UACA,mBACA,iBACA,aACA,iBACA,cACA,SACA,eACA,YACA,kBACA,UACA,eACA,QACA,eACA,gBACA,SACA,SACA,mBACA,cACA,YACA,UACA,iBACA,cACA,aACA,UACA,cACA,YACA,aACA,aACA,aACA,YACA,yBACA,kBACA,YACA,gBACA,UACA,gBACA,gBACA,cACA,YACA,UACA,OACA,SACA,UACA,mBACA,cACA,QACA,YACA,cACA,WACA,QACA,aACA,gBAEF4M,UAAW,CACTC,KAAM,0CACNC,OAAQ,4CACRC,MAAO,2CACPC,IAAK,0CAEPC,UAAW,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KACrEC,gBAAiB,CAEf,CACEC,KAAM,iBACNC,KAAM,QAER,CACED,KAAM,eACNC,KAAM,UAER,CACED,KAAM,aACNC,KAAM,eAER,CACED,KAAM,SACNC,KAAM,cAER,CACED,KAAM,kBACNC,KAAM,UAER,CACED,KAAM,wBACNC,KAAM,WAER,CACED,KAAM,eACNC,KAAM,aAER,CACED,KAAM,wBACNC,KAAM,YAIVC,gBAAiB,CACf,CACEF,KAAM,kBACNC,KAAM,YACNE,MAAO,oBAET,CACEH,KAAM,eACNC,KAAM,SACNE,MAAO,oBAET,CACEH,KAAM,eACNC,KAAM,WACNE,MAAO,oBAET,CACEH,KAAM,cACNC,KAAM,aAER,CACED,KAAM,eACNC,KAAM,QACNE,MAAO,oBAET,CACEH,KAAM,+BACNC,KAAM,SACNE,MAAO,oBAGT,CA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B,IAAK,eACLmB,KAAM,0BACNC,WAAW,IASfC,YAAa,CACX,CACErB,IAAK,wBAELI,KAAM,QAER,CACEJ,IAAK,wBAELI,KAAM,UAER,CACEJ,IAAK,0BAELI,KAAM,aAIVkB,aAAc,CACZ,CACEtB,IAAK,aACLI,KAAM,cAER,CACEJ,IAAK,gBACLI,KAAM,cAGVmB,cAAe,CAGb,YACA,YACA,YACA,YACA,YAEA,YACA,YACA,YACA,YACA,YACA,YAEA,YACA,YACA,YACA,YACA,YACA,aAGFC,WAAY,CAEV,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YAEA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YAEA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aAEFC,WAAY,CACVC,MAAO,0BACPC,WAAY,kBACZC,IAAK,wBACLC,SAAU,kBACVC,SAAU,WACVC,YAAa,iBACbC,KAAM,WAERC,kBAAmB,CACjBC,QAAS,SACTC,MAAO,qBACPC,MAAO,4BACPC,MAAO,iBACPC,WAAY,eACZC,QAAS,qBACTC,OAAQ,cACRC,aAAc,oBAGhBC,MAAO,CACLC,eAAgB,OAElB1Q,OAAQ,CACN2Q,gBAAiB,KACjBC,qBAAsB,KACtBC,uBAAwB,KACxBC,aAAc,MAEhBC,UAAW,CACTC,gBAAiB,CACf7D,KAAM,EACNG,IAAK,IAIT2D,gBAAiB,CACf,4BACA,4BACA,8BACA,8BAwBFC,aAAc,CACZ,CACExD,KAAM,QACNyD,KAAM,MAER,CACEzD,KAAM,eACNyD,KAAM,MAER,CACEzD,KAAM,aACNyD,KAAM,MAER,CACEzD,KAAM,kBACNyD,KAAM,MAER,CACEzD,KAAM,YACNyD,KAAM,MAER,CACEzD,KAAM,aACNyD,KAAM,MAER,CACEzD,KAAM,qBACNyD,KAAM,MAER,CACEzD,KAAM,YACNyD,KAAM,OAGVC,eAAgB,CACd,CAACC,KAAM,MACP,CAACC,WAAY,iBACb,CAACC,WAAY,MACb,CAACC,SAAU,MACX,CAACC,KAAM,sBACP,CAACC,QAAS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E,uBAAsB,SAAAkF,EAEnB15B,GAAK,IADN/lB,EAAMy/C,EAANz/C,OAEAA,EAAO,yBAA0B+lB,GACjC/lB,EAAO,kBAAmB+lB,EAC5B,EACA20B,gBAAe,SAAAgF,IAGb1/C,EAFM0/C,EAAN1/C,QAEO,kBACT,IAGN,C,ygHCx2BA,IAAI4sB,IAAM,CACT,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,gBAAiB,CAChB,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,KAGF,SAAS+yB,EAAoBC,GAC5B,IAAIC,EAAoBxrC,EAAEuY,IAAKgzB,GAC9B,OAAOE,QAAQC,UAAU9uC,MAAK,WAC7B,IAAIhT,EAAI,IAAI+hD,MAAM,uBAAyBJ,EAAM,KAEjD,MADA3hD,EAAEwK,KAAO,mBACHxK,CACP,IAGD,IAAIgiD,EAAMrzB,IAAIgzB,GAAMxkD,EAAK6kD,EAAI,GAC7B,OAAOJ,EAAoB5hD,EAAEgiD,EAAI,IAAIhvC,MAAK,WACzC,OAAO4uC,EAAoBzgC,EAAEhkB,EAAI,EAClC,GACD,CACAukD,EAAoBO,KAAO,WAC1B,OAAOtlD,OAAOslD,KAAKtzB,IACpB,EACA+yB,EAAoBvkD,GAAK,IACzBu1C,EAAOE,QAAU8O,C,wCC5ZjB,ICAwL,ECgCzK,CACf36C,KAAA,QACAwhC,MAAA,CACAroC,MAAA,CACAsH,KAAA7K,OACAulD,UAAA,EACA1Z,QAAA,WACA,QACA,IAGA2Z,KAAA,WACA,OACAroD,MAAA,KAAA26B,QACA2tB,KAAA,GAEA,EACAvZ,QAAA,eAAAtvB,EAAA,KACAtZ,QAAAqR,IAAA,KAAApR,SAGA,KAAAA,MAAAmiD,YAAA,WAAAniD,MAAAmiD,YAAA,WAAAniD,MAAAmiD,aACA1oC,YAAA,WACAJ,EAAA+oC,aACA,OAEA,EACA1c,QAAA,CACA0c,YAAA,WACAzqC,OAAA0qC,SAAAC,QAAA,EACA,GAEAC,SAAA,CACAhuB,QAAA,WACA,YAAAv0B,MAAAu0B,SAAA,8BACA,I,qDC5DIkd,UAAY,YACd,GHRW,WAAkB,IAAI+Q,EAAI1sC,KAAK2sC,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,cAAc,CAACE,MAAM,CAAC,cAAc,KAAK,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,iBAAiB,GAAG,eAAe,GAAG,OAAS,KAAK,CAACF,EAAG,KAAK,CAACG,YAAY,SAAS,CAACJ,EAAIK,GAAGL,EAAIM,GAAGN,EAAIjuB,YAAYiuB,EAAIK,GAAG,KAAML,EAAIxiD,OAAkC,MAAzBwiD,EAAIxiD,MAAMmiD,WAAoBM,EAAG,KAAK,CAACD,EAAIK,GAAG,oBAAqBL,EAAIxiD,OAAkC,MAAzBwiD,EAAIxiD,MAAMmiD,WAAoBM,EAAG,KAAK,CAACD,EAAIK,GAAG,uBAAuBJ,EAAG,KAAK,CAACD,EAAIK,GAAG,uBAAuBL,EAAIK,GAAG,KAAuB,YAAjBL,EAAIxiD,MAAMoyC,GAAkBqQ,EAAG,QAAQ,CAACE,MAAM,CAAC,UAAY,GAAG,MAAQ,UAAU,GAAKH,EAAIO,WAAW,OAAO,CAACP,EAAIK,GAAG,kCAAkCL,EAAIQ,KAAKR,EAAIK,GAAG,KAA+B,MAAzBL,EAAIxiD,MAAMmiD,YAA+C,MAAzBK,EAAIxiD,MAAMmiD,WAAoBM,EAAG,QAAQ,CAACE,MAAM,CAAC,UAAY,GAAG,GAAKH,EAAIO,WAAW,OAAO,CAACP,EAAIK,GAAG,wBAAwBJ,EAAG,QAAQ,CAACE,MAAM,CAAC,UAAY,GAAG,MAAQ,WAAWv3B,GAAG,CAAC,MAAQo3B,EAAIJ,cAAc,CAACI,EAAIK,GAAG,4BAA4B,IAAI,EAC55B,GACsB,IGSpB,EACA,KACA,KACA,MAIa,IAAApR,UAAiB,QAOhC,IAAkBA,UAAW,CAACwR,OAAA,EAAKC,aAAA,EAAWC,UAAA,G","file":"d8d988d518378c76a94d.v4.9.9.js","sourcesContent":["\r\nimport LZString from 'lz-string'\r\n\r\nfunction initialState() {\r\n return {\r\n createProject: null,\r\n previewDialog: false,\r\n soundPanel: null,\r\n chatHistoryDialog: false,\r\n chatHistory: null,\r\n project: {\r\n author_username: null,\r\n layout: [],\r\n event: [],\r\n thumb: [],\r\n sounds: [\r\n []\r\n ],\r\n global_variables: [],\r\n pageScale: [],\r\n fonts: {},\r\n slug: null\r\n },\r\n projectDetails: {\r\n title: '',\r\n synoposis: '',\r\n tags: [],\r\n genre: null,\r\n status: null,\r\n slug: null,\r\n classroom: null,\r\n assignment: {},\r\n studentmilestone: {},\r\n has_room_edit_perms: false,\r\n student_proxy: {}\r\n },\r\n tabIndex: 0,\r\n tabActive: false,\r\n activeFonts: {},\r\n transferStoryDialog: false,\r\n transferIsOn: false,\r\n fontsLoaded: false,\r\n generateCover: false,\r\n isLessonEditorMode: false,\r\n nextMilestone: {\r\n nextMilestoneDialog: false,\r\n editDialog: false,\r\n showConfirmMilestone: true,\r\n showProgress: false,\r\n hideConfirmMilestone: false,\r\n fadeProgress: false,\r\n showNextMilestone: false,\r\n hideCloseBtn: false,\r\n selectedEmoji: null,\r\n selectedSatisfactionEmoji: null,\r\n progressValue: 0\r\n },\r\n addFeedback: {\r\n comment: null,\r\n category: null\r\n },\r\n lessonEditorAssignment: {},\r\n currentTutorial: {}\r\n }\r\n}\r\n\r\nconst state = {\r\n initialState: initialState(),\r\n createProject: initialState().createProject,\r\n previewDialog: initialState().previewDialog,\r\n soundPanel: initialState().soundPanel,\r\n chatHistoryDialog: initialState().chatHistoryDialog,\r\n chatHistory: initialState().chatHistory,\r\n project: {\r\n author_username: initialState().project.author_username,\r\n layout: initialState().project.layout,\r\n event: initialState().project.event,\r\n thumb: initialState().project.thumb,\r\n sounds: initialState().project.sounds,\r\n global_variables: initialState().project.global_variables,\r\n pageScale: initialState().project.pageScale,\r\n fonts: initialState().project.fonts,\r\n slug: initialState().project.slug,\r\n },\r\n projectDetails: {\r\n title: initialState().projectDetails.title,\r\n synoposis: initialState().projectDetails.synoposis,\r\n tags: initialState().projectDetails.tags,\r\n genre: initialState().projectDetails.genre,\r\n status: initialState().projectDetails.status,\r\n slug: initialState().projectDetails.slug,\r\n classroom: initialState().projectDetails.classroom,\r\n assignment: initialState().projectDetails.assignment,\r\n studentmilestone: initialState().projectDetails.studentmilestone,\r\n has_room_edit_perms: initialState().projectDetails.has_room_edit_perms,\r\n student_proxy: initialState().projectDetails.student_proxy\r\n },\r\n tabIndex: initialState().tabIndex,\r\n tabActive: initialState().tabActive,\r\n activeFonts: initialState().activeFonts,\r\n transferStoryDialog: initialState().transferStoryDialog,\r\n transferIsOn: initialState().transferIsOn,\r\n fontsLoaded: initialState().fontsLoaded,\r\n generateCover: initialState().generateCover,\r\n isLessonEditorMode: initialState().isLessonEditorMode,\r\n nextMilestone: {\r\n nextMilestoneDialog: initialState().nextMilestone.nextMilestoneDialog,\r\n editDialog: initialState().nextMilestone.editDialog,\r\n showConfirmMilestone: initialState().nextMilestone.showConfirmMilestone,\r\n showProgress: initialState().nextMilestone.showProgress,\r\n hideConfirmMilestone: initialState().nextMilestone.hideConfirmMilestone,\r\n fadeProgress: initialState().nextMilestone.fadeProgress,\r\n showNextMilestone: initialState().nextMilestone.showNextMilestone,\r\n hideCloseBtn: initialState().nextMilestone.hideCloseBtn,\r\n selectedEmoji: initialState().nextMilestone.selectedEmoji,\r\n selectedSatisfactionEmoji: initialState().nextMilestone.selectedSatisfactionEmoji,\r\n progressValue: initialState().nextMilestone.progressValue\r\n },\r\n addFeedback: {\r\n comment: initialState().addFeedback.comment,\r\n category: initialState().addFeedback.category\r\n },\r\n lessonEditorAssignment: initialState().lessonEditorAssignment,\r\n currentTutorial: initialState().currentTutorial\r\n}\r\n\r\n// getters\r\nconst getters = {}\r\n\r\n// actions\r\nconst actions = {\r\n GENERATE_COVER({\r\n commit\r\n }, status) {\r\n commit('GENERATE_COVER', status)\r\n },\r\n FONTS_LOADED({\r\n commit\r\n }) {\r\n commit('FONTS_LOADED')\r\n },\r\n resetStudioLauncherState({\r\n commit\r\n }) {\r\n commit('RESET_STATE')\r\n },\r\n SET_PREVIEW_DIALOG({\r\n commit\r\n }, previewDialog) {\r\n commit('SET_PREVIEW_DIALOG', previewDialog)\r\n },\r\n SET_SOUND_PANEL({\r\n commit\r\n }, soundPanel) {\r\n commit('SET_SOUND_PANEL', soundPanel)\r\n },\r\n RESTORE_LAYOUT_PAGE({\r\n commit\r\n }, data) {\r\n commit('RESTORE_LAYOUT_PAGE', data)\r\n }\r\n}\r\n\r\n// mutations\r\nconst mutations = {\r\n CHAT_HISTORY_DIALOG(state, value) {\r\n state.chatHistoryDialog = value\r\n },\r\n CHAT_HISTORY(stat, value){\r\n stat.chatHistory = value\r\n },\r\n GENERATE_COVER(state, status) {\r\n state.generateCover = status\r\n },\r\n FONTS_LOADED(state) {\r\n state.fontsLoaded = true\r\n },\r\n SET_PREVIEW_DIALOG(state, previewDialog) {\r\n state.previewDialog = previewDialog\r\n },\r\n SET_SOUND_PANEL(state, soundPanel) {\r\n state.soundPanel = soundPanel\r\n },\r\n RESET_STATE(state) {\r\n Object.assign(state, initialState())\r\n },\r\n SET_CREATE_PROJECT_LAYOUT(state, layoutName) {\r\n state.createProject = {\r\n layout: layoutName\r\n }\r\n },\r\n IS_LESSON_EDITOR_MODE(state, value) {\r\n state.isLessonEditorMode = value\r\n },\r\n SET_CURRENT_TUTORIAL(state, value){\r\n state.currentTutorial = value\r\n },\r\n RESET_CREATE_PROJECT_LAYOUT(state) {\r\n state.createProject = null\r\n },\r\n SET_PROJECT_AUTHOR_USERNAME(state, id) {\r\n state.project.author_username = id\r\n },\r\n SET_PROJECT_SLUG(state, slug) {\r\n state.project.slug = slug\r\n state.projectDetails.slug = slug\r\n },\r\n SET_PROJECT_LAYOUT(state, layout) {\r\n state.project.layout = []\r\n if (layout) {\r\n for (var i = 0, l = layout.length; i < l; i++) { \r\n if (typeof layout[i] == 'string') {\r\n state.project.layout.push(\r\n JSON.parse(LZString.decompressFromBase64(layout[i]))\r\n )\r\n } else {\r\n state.project.layout.push(\r\n layout[i]\r\n )\r\n }\r\n \r\n }\r\n }\r\n },\r\n SET_PROJECT_EVENTGRAPH(state, event) {\r\n state.project.event = []\r\n if (event) {\r\n for (var i = 0, l = event.length; i < l; i++) {\r\n if (typeof event[i] == 'string') {\r\n state.project.event.push(\r\n JSON.parse(LZString.decompressFromBase64(event[i]))\r\n )\r\n } else {\r\n state.project.event.push(event[i])\r\n }\r\n }\r\n }\r\n },\r\n SET_PROJECT_SOUNDS(state, sounds) {\r\n if (sounds) {\r\n state.project.sounds = sounds\r\n } else {\r\n state.project.sounds = [\r\n []\r\n ]\r\n }\r\n },\r\n SET_TRANSFER_IS_ON(state, value) {\r\n state.transferIsOn = value\r\n },\r\n SET_TRANSFER_STORY_DIALOG(state, value) {\r\n state.transferStoryDialog = value\r\n },\r\n SET_PROJECT_GLOBAL_VARIABLES(state, global_variables) {\r\n if (global_variables) {\r\n state.project.global_variables = JSON.parse(global_variables)\r\n } else {\r\n state.project.global_variables = []\r\n }\r\n },\r\n SET_PROJECT_FONTS(state, fonts) {\r\n if (fonts) {\r\n state.project.fonts = JSON.parse(fonts)\r\n } else {\r\n state.project.fonts = {}\r\n }\r\n },\r\n\r\n // feedback form details\r\n SET_ADDFEEDBACK_COMMENT(state, comment) {\r\n state.addFeedback.comment = comment\r\n },\r\n SET_ADDFEEDBACK_CATEGORY(state, category) {\r\n state.addFeedback.category = category\r\n },\r\n\r\n // form details\r\n SET_PROJECT_TITLE(state, title) {\r\n state.projectDetails.title = title\r\n },\r\n SET_PROJECT_SYNOPOSIS(state, synoposis) {\r\n state.projectDetails.synoposis = synoposis\r\n },\r\n SET_PROJECT_TAGS(state, tags) {\r\n state.projectDetails.tags = tags\r\n },\r\n SET_PROJECT_ASSIGNMENT(state, assignment) {\r\n if (assignment) {\r\n state.projectDetails.assignment = assignment\r\n } else {\r\n state.projectDetails.assignment = {}\r\n }\r\n },\r\n\r\n SET_PROJECT_STUDENT_PROXY(state, student_proxy) {\r\n state.projectDetails.student_proxy = student_proxy\r\n },\r\n SET_PROJECT_CLASSROOM(state, classroom) {\r\n if (classroom) {\r\n state.projectDetails.classroom = classroom\r\n } else {\r\n state.projectDetails.classroom = null\r\n }\r\n },\r\n SET_LESSON_EDITOR_ASSIGNMENT(state, assignment) {\r\n if(assignment){\r\n state.lessonEditorAssignment = assignment \r\n }else {\r\n state.lessonEditorAssignment = null\r\n }\r\n },\r\n SET_NEXT_MILESTONE_EDIT_DIALOG(state, value) {\r\n state.nextMilestone.editDialog = value\r\n },\r\n\r\n SHOW_NEXT_MILESTONE_DIALOG(state) {\r\n state.nextMilestone.nextMilestoneDialog = true\r\n },\r\n\r\n CLOSE_NEXT_MILESTONE_DIALOG(state) {\r\n state.nextMilestone.nextMilestoneDialog = false\r\n state.nextMilestone.showProgress = false\r\n state.nextMilestone.showNextMilestone = false\r\n state.nextMilestone.hideConfirmMilestone = false\r\n state.nextMilestone.showConfirmMilestone = true\r\n },\r\n\r\n SET_NEXT_MILESTONE_HIDE_CLOSE_BTN(state, value) {\r\n state.nextMilestone.hideCloseBtn = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_PROGRESS(state, value) {\r\n state.nextMilestone.showProgress = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_FADE_PROGRESS(state, value) {\r\n state.nextMilestone.fadeProgress = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_NEXT_MILESTONE(state, value) {\r\n state.nextMilestone.showNextMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_HIDE_CONFIRM_MILESTONE(state, value) {\r\n state.nextMilestone.hideConfirmMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_CONFIRM_MILESTONE(state, value) {\r\n state.nextMilestone.showConfirmMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_PROGRESS_VALUE(state, completed) {\r\n if (completed){\r\n state.nextMilestone.progressValue = 100\r\n }else{\r\n state.nextMilestone.progressValue = ((state.projectDetails.studentmilestone.milestone.index - 1) / state.projectDetails.studentmilestone.milestone.total_milestones) * 100\r\n }\r\n },\r\n\r\n SET_PROJECT_ROOM_PERMISSIONS(state, has_room_edit_perms) {\r\n state.projectDetails.has_room_edit_perms = has_room_edit_perms\r\n },\r\n SUBMIT_STUDENT_MILESTONE(state) {\r\n if (state.projectDetails.studentmilestone) {\r\n state.projectDetails.studentmilestone.status = '1'\r\n state.projectDetails.studentmilestone.is_submitted = true\r\n state.projectDetails.studentmilestone.is_ongoing = false\r\n }\r\n },\r\n SET_STUDENT_PROXY(state, student_proxy) {\r\n if (typeof student_proxy === 'string') {\r\n try {\r\n state.projectDetails.student_proxy = JSON.parse(student_proxy);\r\n } catch (e) {\r\n console.error('Invalid JSON:', e);\r\n state.projectDetails.student_proxy = [];\r\n }\r\n } else if (student_proxy) {\r\n state.projectDetails.student_proxy = student_proxy;\r\n } else {\r\n state.projectDetails.student_proxy = [];\r\n }\r\n },\r\n SET_PROJECT_MILESTONE(state, studentmilestone) {\r\n if (studentmilestone) {\r\n state.projectDetails.studentmilestone = studentmilestone\r\n } else {\r\n state.projectDetails.studentmilestone = {}\r\n }\r\n },\r\n SET_PROJECT_GENRE(state, genre) {\r\n state.projectDetails.genre = genre\r\n },\r\n SET_PROJECT_STATUS(state, status) {\r\n state.projectDetails.status = status\r\n },\r\n\r\n RESTORE_LAYOUT_PAGE(state, data) {\r\n // console.log(JSON.parse(data.layout))\r\n // state.project.layout[data.pageNumber] = JSON.parse(data.layout)\r\n state.project.layout.splice(data.pageNumber, 0, JSON.parse(data.layout))\r\n },\r\n // methods\r\n switchMode: state => {\r\n state.tabActive = false\r\n state.eventGraphMode = !state.eventGraphMode\r\n },\r\n addPage: state => {\r\n state.project.layout.splice(state.pageSelected, 0, 'newPage')\r\n state.project.event.splice(state.pageSelected, 0, 'newPage')\r\n state.project.thumb.splice(state.pageSelected, 0, 'newPage')\r\n state.pageSelected++\r\n },\r\n\r\n deletePage: state => {\r\n if (state.project.layout.length <= 1) return\r\n\r\n state.project.layout.splice(state.pageSelected, 1)\r\n state.project.event.splice(state.pageSelected, 1)\r\n state.project.thumb.splice(state.pageSelected, 1)\r\n\r\n if (state.pageSelected > 0) {\r\n state.pageSelected--\r\n }\r\n },\r\n setPageIndex(state, index) {\r\n state.pageSelected = index\r\n },\r\n setTabIndex(state, index) {\r\n state.tabIndex = index\r\n state.tabActive = true\r\n },\r\n setPageScale(state, data) {\r\n state.project.pageScale[data.pageNumber] = data.pageScale\r\n },\r\n addActiveFont(state, data) {\r\n if (!state.activeFonts[state.pageSelected]) {\r\n state.activeFonts[state.pageSelected] = {}\r\n }\r\n state.activeFonts[state.pageSelected][data.id] = data.font\r\n },\r\n setLayoutPageDimensions(state, data) {\r\n state.project.layout[state.pageSelected].setHeight(data.height)\r\n state.project.layout[state.pageSelected].setWidth(data.width)\r\n },\r\n setLayoutPageDirty: state => {\r\n state.project.layout[state.pageSelected].dirty = true\r\n }\r\n // incrementObjectCounter(state, objectName) {\r\n // state.objectsCounters[objectName]++\r\n // }\r\n // insertObjOnPage(state, o){\r\n\r\n // if (o.left - o.width * o.scaleX / 2 < 0) {\r\n // o.left = 20 + o.width * o.scaleX / 2;\r\n // }\r\n\r\n // if (o.top - o.height * o.scaleY < 0) {\r\n // o.top = 20 + o.height * o.scaleY / 2;\r\n // }\r\n\r\n // state.project.layout[0].add(o);\r\n\r\n // o.animate(\"opacity\", 1, {\r\n // duration: 500,\r\n // easing: fabric.util.ease.easeOutQuart,\r\n // abort: function() {\r\n // if (!state.project.layout[state.pageSelected]) {\r\n // callback();\r\n // return true;\r\n // }\r\n // },\r\n // onChange: state.project.layout[\r\n // state.pageSelected\r\n // ].renderAll.bind(\r\n // state.project.layout[state.pageSelected]\r\n // ),\r\n // onComplete: function onComplete() {\r\n // if (state.project.layout[state.pageSelected]) {\r\n // state.project.layout[\r\n // state.pageSelected\r\n // ].setActiveObject(o);\r\n // // setTimeout(function() {\r\n // // callback();\r\n // // }, 10);\r\n // console.log(state.project.layout[state.pageSelected]);\r\n // state.project.layout[0].dirty = true;\r\n // state.project.layout[0].requestRenderAll();\r\n // }\r\n // }\r\n // });\r\n\r\n // o.animate(\r\n // \"top\",\r\n // o.top +\r\n // 10 * state.project.pageScale[state.pageSelected],\r\n // {\r\n // duration: 700,\r\n // easing: fabric.util.ease.easeOutBounce,\r\n // abort: function() {\r\n // if (!state.project.layout[state.pageSelected]) {\r\n // return true;\r\n // }\r\n // }\r\n // }\r\n // );\r\n // }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n}\r\n","const state = {\r\n languages: {\r\n Afrikaans: 'af-ZA',\r\n አማርኛ: 'am-ET',\r\n العربية: 'ar-EG',\r\n Azərbaycanca: 'az-AZ',\r\n বাংলা: 'bn-IN',\r\n Indonesian: 'id-ID',\r\n Melayu: 'ms-MY',\r\n Català: 'ca-ES',\r\n Čeština: 'cs-CZ',\r\n Dansk: 'da-DK',\r\n Deutsch: 'de-DE',\r\n English: 'en-US',\r\n Español: 'es-ES',\r\n Filipino: 'fil-PH',\r\n Français: 'fr-FR',\r\n Basa_Jawa: 'jv-ID',\r\n Galego: 'gl-ES',\r\n ગુજરાતી: 'gu-IN',\r\n Hrvatski: 'hr-HR',\r\n IsiZulu: 'zu-ZA',\r\n Íslenska: 'is-IS',\r\n Italiano: 'it-IT',\r\n ಕನ್ನಡ: 'kn-IN',\r\n ភាសាខ្មែរ: 'km-KH',\r\n Latviešu: 'lv-LV',\r\n Lietuvių: 'lt-LV',\r\n മലയാളം: 'ml-IN',\r\n मराठी: 'mr-IN',\r\n Magyar: 'hu-HU',\r\n ລາວ: 'lo-LA',\r\n Nederlands: 'nl-NL',\r\n नेपाली: 'ne-NP',\r\n Norsk_bokmål: 'nb-NO',\r\n Polski: 'pl-PL',\r\n Português: 'pt-PT',\r\n Português_Brasil: 'pt-BR',\r\n Română: 'ro-RO',\r\n සිංහල: 'si-LK',\r\n Slovenščina: 'sl-SI',\r\n Sunda: 'su-ID',\r\n Slovenčina: 'sk-SK',\r\n Suomi: 'sl-SI',\r\n Svenska: 'sv-SE',\r\n Kiswahili_Kenya: 'sw-KE',\r\n Kiswahili_Tanzania: 'sw-TZ',\r\n ქართული: 'ka-GE',\r\n Հայերեն: 'hy-AM',\r\n தமிழ்: 'ta-IN',\r\n తెలుగు: 'te-IN',\r\n Tiếng_Việt: 'vi-VN',\r\n Türkçe: 'tr-TR',\r\n اُردُو: 'ur-PK',\r\n Ελληνικά: 'el-GR',\r\n български: 'bg-BG',\r\n Pусский: 'ru-RU',\r\n Српски: 'sr-RS',\r\n Українська: 'uk-UA',\r\n 한국어: 'ko-KR',\r\n 普通话_中国大陆: 'cmn-Hans-TW',\r\n 普通话_台灣: 'cmn-Hant-TW',\r\n 粵語: 'yue-Hant-HK',\r\n 日本語: 'ja-JP',\r\n हिन्दी: 'hi-IN',\r\n ภาษาไทย: 'th-TH'\r\n },\r\n fonts: [\r\n 'Lexend',\r\n 'Abril Fatface',\r\n 'Acme',\r\n 'Alegreya',\r\n 'Alex Brush',\r\n 'Alfa Slab One',\r\n 'Allerta Stencil',\r\n 'Allura',\r\n 'Alice',\r\n 'Almendra Display',\r\n 'Amatic SC',\r\n 'Annie Use Your Telescope',\r\n 'Anton',\r\n 'Architects Daughter',\r\n 'Aref Ruqaa',\r\n 'Arvo',\r\n 'Atma',\r\n 'Audiowide',\r\n 'Averia Sans Libre',\r\n 'Bad Script',\r\n 'Bangers',\r\n 'Barrio',\r\n 'Bebas Neue',\r\n 'BenchNine',\r\n 'Berkshire Swash',\r\n 'Bigelow Rules',\r\n 'Boogaloo',\r\n 'Cabin Sketch',\r\n 'Caesar Dressing',\r\n 'Carter One',\r\n 'Caveat Brush',\r\n 'Chakra Petch',\r\n 'Cherry Swash',\r\n 'Chewy',\r\n 'Chilanka',\r\n 'Cinzel',\r\n 'Codystar',\r\n 'Combo',\r\n 'Cormorant Garamond',\r\n 'Cormorant Unicase',\r\n 'Courgette',\r\n 'Crafty Girls',\r\n 'Creepster',\r\n 'Damion',\r\n 'Dancing Script',\r\n 'Devonshire',\r\n 'Dosis',\r\n 'Dr Sugiyama',\r\n 'Eater',\r\n 'Emilys Candy',\r\n 'Exo',\r\n 'Finger Paint',\r\n 'Flavors',\r\n 'Fredoka One',\r\n 'Fredericka the Great',\r\n 'Frijole',\r\n 'Gentium Basic',\r\n 'Girassol',\r\n 'Glass Antiqua',\r\n 'Gloria Hallelujah',\r\n 'Great Vibes',\r\n 'Gochi Hand',\r\n 'Grand Hotel',\r\n 'Great Vibes',\r\n 'Griffy',\r\n 'Handlee',\r\n 'Henny Penny',\r\n 'Homemade Apple',\r\n 'IM Fell French Canon SC',\r\n 'Indie Flower',\r\n 'Irish Grover',\r\n 'Jolly Lodger',\r\n 'Josefin Sans',\r\n 'Josefin Slab',\r\n 'Julius Sans One',\r\n 'Kalam',\r\n 'Kaushan Script',\r\n 'Kite One',\r\n 'Kreon',\r\n 'Lateef',\r\n 'Lato',\r\n 'Lato Heavy',\r\n 'Libre Baskerville',\r\n 'Libre Franklin',\r\n 'Limelight',\r\n 'Lobster Two',\r\n 'Londrina Shadow',\r\n 'Londrina Sketch',\r\n 'Lora',\r\n 'Love Ya Like A Sister',\r\n 'Luckiest Guy',\r\n 'Marck Script',\r\n 'Margarine',\r\n 'Merienda',\r\n 'Merriweather',\r\n 'Metal Mania',\r\n 'Miltonian Tattoo',\r\n 'Monoton',\r\n 'Montserrat',\r\n 'Mystery Quest',\r\n 'Nanum Brush Script',\r\n 'Nanum Pen Script',\r\n 'Neucha',\r\n 'Nothing You Could Do',\r\n 'Nunito',\r\n 'Open Sans',\r\n 'Orbitron',\r\n 'Oregano',\r\n 'Oswald',\r\n 'Over the Rainbow',\r\n 'Pacifico',\r\n 'Pangolin',\r\n 'Parisienne',\r\n 'Patrick Hand',\r\n 'Permanent Marker',\r\n 'Poppins',\r\n 'Port Lligat Slab',\r\n 'Press Start 2P',\r\n 'Prosto One', \r\n 'Princess Sofia',\r\n 'Proza Libre',\r\n 'Quando',\r\n 'Quattrocento',\r\n 'Quicksand',\r\n 'Racing Sans One',\r\n 'Raleway',\r\n 'Rammetto One',\r\n 'Ranga',\r\n 'Ravi Prakash',\r\n 'Reenie Beanie',\r\n 'Ribeye',\r\n 'Roboto',\r\n 'Roboto Condensed',\r\n 'Roboto Slab',\r\n 'Rock Salt',\r\n 'Rosario',\r\n 'Rubik 80s Fade',\r\n 'Ruge Boogie',\r\n 'Sacramento',\r\n 'Satisfy',\r\n 'Secular One',\r\n 'Sevillana',\r\n 'Sigmar One',\r\n 'Spicy Rice',\r\n 'Schoolbell',\r\n 'Sevillana',\r\n 'Shadows Into Light Two',\r\n 'Share Tech Mono',\r\n 'Shojumaru',\r\n 'Sirin Stencil',\r\n 'Slackey',\r\n 'Snowburst One',\r\n 'Special Elite',\r\n 'Staatliches',\r\n 'Tangerine',\r\n 'Taviraj',\r\n 'Teko',\r\n 'Tienne',\r\n 'Tillana',\r\n 'Times Neue Roman',\r\n 'Trade Winds',\r\n 'Ultra',\r\n 'Unica One',\r\n 'Vast Shadow',\r\n 'Voltaire',\r\n 'VT323',\r\n 'Yellowtail',\r\n 'ZCOOL KuaiLe'\r\n ],\r\n templates: {\r\n left: '/img/studio/templates/template-left.jpg',\r\n bottom: '/img/studio/templates/template-bottom.jpg',\r\n right: '/img/studio/templates/template-right.jpg',\r\n top: '/img/studio/templates/template-top.jpg'\r\n },\r\n fontSizes: [20, 22, 24, 26, 28, 36, 40, 48, 60, 72, 80, 88, 96, 106, 114],\r\n assetCategories: [\r\n \r\n {\r\n icon: 'mdiFormatTitle',\r\n name: 'text',\r\n },\r\n {\r\n icon: 'mdiWallpaper',\r\n name: 'images'\r\n },\r\n {\r\n icon: 'mdiTexture',\r\n name: 'backgrounds'\r\n },\r\n {\r\n icon: 'mdiRun',\r\n name: 'animations'\r\n },\r\n {\r\n icon: 'mdiShapeOutline',\r\n name: 'shapes'\r\n },\r\n {\r\n icon: 'mdiLightbulbOnOutline',\r\n name: 'widgets'\r\n },\r\n {\r\n icon: 'mdiLandPlots',\r\n name: 'templates'\r\n },\r\n {\r\n icon: 'mdiCloudUploadOutline',\r\n name: 'uploads'\r\n },\r\n \r\n ],\r\n blockCategories: [\r\n {\r\n icon: 'mdiFlaskOutline',\r\n name: 'transform', \r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiMusicNote',\r\n name: 'sounds',\r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiShipWheel',\r\n name: 'controls',\r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiVariable',\r\n name: 'variables',\r\n },\r\n {\r\n icon: 'mdiCallSplit',\r\n name: 'logic',\r\n color: 'rgb(255,255,255)'\r\n },\r\n {\r\n icon: 'mdiCursorDefaultClickOutline',\r\n name: 'events',\r\n color: 'rgb(251, 140, 0)' \r\n\r\n },\r\n {\r\n icon: 'mdiWidgetsOutline',\r\n name: 'objects',\r\n color: 'rgb(154, 103, 234)'\r\n }\r\n ],\r\n blocks: {\r\n functions: [\r\n {\r\n id: 'textEffectBlock',\r\n src: '/functions/textEffectBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'animateSpineBlock',\r\n src: '/functions/animateSpineBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'fadeBlock',\r\n src: '/functions/fadeBlock.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'moveToBlockAbsolute',\r\n src: '/functions/moveToBlockAbsolute.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'moveToBlockRelative',\r\n src: '/functions/moveToBlockRelative.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'blinkBlock',\r\n src: '/functions/blinkBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'bounceBlock',\r\n src: '/functions/bounceBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'setObjectAttribute',\r\n // src: '/functions/set-obj-attr.png'\r\n // },\r\n {\r\n id: 'scaleBlock',\r\n src: '/functions/scaleBlock.svg',\r\n thumb_height: 212\r\n },\r\n {\r\n id: 'rotateBlock',\r\n src: '/functions/rotateBlock.svg',\r\n thumb_height: 157\r\n },\r\n // {\r\n // id: 'scrollingObjectsBlock',\r\n // src: '/functions/scrolling-obj.png'\r\n // },\r\n {\r\n id: 'changeImageBlock',\r\n src: '/functions/changeImageBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'showBlock',\r\n src: '/functions/showBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'hideBlock',\r\n src: '/functions/hideBlock.svg',\r\n thumb_height: 149.7\r\n },\r\n {\r\n id: 'textObjectEqualsValueBlock',\r\n src: '/functions/textObjectEqualsValueBlock.svg',\r\n thumb_height: 149.7\r\n },\r\n {\r\n id: 'textObjectEqualsVariableBlock',\r\n src: '/functions/textObjectEqualsVariableBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'restoreObjectBlock',\r\n src: '/functions/restoreObjectBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'setObjectPositionBlock',\r\n src: '/functions/setObjectPositionBlock.svg',\r\n thumb_height: 152\r\n },\r\n {\r\n id: 'flipObjectBlock',\r\n src: '/functions/flipObjectBlock.svg',\r\n thumb_height: 145\r\n },\r\n ],\r\n sounds: [\r\n {\r\n id: 'playRecordBlock',\r\n src: '/functions/playRecordBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'playMusicBlock',\r\n src: '/functions/playMusicBlock.svg',\r\n thumb_height: 152\r\n },\r\n {\r\n id: 'playSoundEffectBlock',\r\n src: '/functions/playSoundEffectBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'stopMusicBlock',\r\n src: '/functions/stopMusicBlock.svg',\r\n thumb_height: 152\r\n },\r\n ],\r\n controls: [\r\n {\r\n id: 'goToPageBlock',\r\n src: '/functions/goToPageBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'goToLinkBlock',\r\n src: '/functions/goToLinkBlock.svg',\r\n thumb_height: 122\r\n\r\n },\r\n {\r\n id: 'lockSwipeRightBlock',\r\n src: '/functions/lockSwipeRightBlock.svg',\r\n thumb_height: 127\r\n },\r\n {\r\n id: 'lockSwipeLeftBlock',\r\n src: '/functions/lockSwipeLeftBlock.svg',\r\n thumb_height: 84.22\r\n },\r\n {\r\n id: 'waitBlock',\r\n src: '/functions/waitBlock.svg',\r\n thumb_height: 78.67\r\n },\r\n {\r\n id: 'setDraggableBlock',\r\n src: '/functions/setDraggableBlock.svg',\r\n thumb_height: 122\r\n }\r\n ],\r\n variables: [\r\n {\r\n id: 'createTextVariables',\r\n src: '/variables/createTextVariables.svg',\r\n type: 'text',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'textVariableEqualsValueBlock',\r\n src: '/variables/textVariableEqualsValueBlock.svg',\r\n type: 'text',\r\n thumb_height: 99.16\r\n },\r\n {\r\n id: 'textVariableEqualsVariableBlock',\r\n src: '/variables/textVariableEqualsVariableBlock.svg',\r\n type: 'text',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'textVariableEqualsTextObjectBlock',\r\n src: '/variables/textVariableEqualsTextObjectBlock.svg',\r\n type: 'text',\r\n thumb_height: 149.48\r\n },\r\n {\r\n id: 'insertTextBlock',\r\n src: '/variables/insertTextBlock.svg',\r\n type: 'text',\r\n thumb_height: 140.45\r\n },\r\n {\r\n id: 'arithmeticCalculatorBlock',\r\n src: '/variables/arithmeticCalculatorBlock.svg',\r\n type: 'text',\r\n thumb_height: 173.39\r\n },\r\n {\r\n id: 'createBooleanVariables',\r\n src: '/variables/createBooleanVariables.svg',\r\n type: 'boolean',\r\n thumb_height: 154.42\r\n },\r\n {\r\n id: 'variableBlock',\r\n src: '/variables/variableBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 93.59\r\n },\r\n {\r\n id: 'booleanVariableEqualsValueBlock',\r\n src: '/variables/booleanVariableEqualsValueBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 97\r\n },\r\n {\r\n id: 'booleanVariableEqualsVariableBlock',\r\n src: '/variables/booleanVariableEqualsVariableBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'createNumberVariables',\r\n src: '/variables/createNumberVariables.svg',\r\n type: 'number',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'numberVariableEqualsValueBlock',\r\n src: '/variables/numberVariableEqualsValueBlock.svg',\r\n type: 'number',\r\n thumb_height: 93.59\r\n },\r\n {\r\n id: 'numberVariableEqualsVariableBlock',\r\n src: '/variables/numberVariableEqualsVariableBlock.svg',\r\n type: 'number',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'numberVariableEqualsRandomBlock',\r\n src: '/variables/numberVariableEqualsRandomBlock.svg',\r\n type: 'number',\r\n thumb_height: 149.48\r\n },\r\n {\r\n id: 'incrementBlock',\r\n src: '/variables/incrementBlock.svg',\r\n type: 'number',\r\n thumb_height: 170.47\r\n },\r\n {\r\n id: 'decrementBlock',\r\n src: '/variables/decrementBlock.svg',\r\n type: 'number',\r\n thumb_height: 144.94\r\n }\r\n ],\r\n logic: [\r\n {\r\n id: 'ANDGateBlock',\r\n src: '/logics/ANDGateBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'ORGateBlock',\r\n src: '/logics/ORGateBlock.svg',\r\n thumb_height: 137\r\n },\r\n {\r\n id: 'branchBlock',\r\n src: '/logics/branchBlock.svg',\r\n thumb_height: 137\r\n },\r\n {\r\n id: 'numberComparisonBlock',\r\n src: '/logics/numberComparisonBlock.svg',\r\n thumb_height: 116.48\r\n },\r\n {\r\n id: 'textComparisonBlock',\r\n src: '/logics/textComparisonBlock.svg',\r\n thumb_height: 154.42\r\n }\r\n ],\r\n events: [\r\n {\r\n id: 'onPageStartBlock',\r\n src: '/events/onPageStartBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'onClickBlock',\r\n src: '/events/onClickBlock.svg',\r\n thumb_height: 152\r\n },\r\n // {\r\n // id: 'onTouchBlock',\r\n // src: '/events/onClickBlock.svg'\r\n // },\r\n // {\r\n // id: 'onClickOnceBlock',\r\n // src: '/events/onClickOnceBlock.png'\r\n // },\r\n {\r\n id: 'onDragOverBlock',\r\n src: '/events/onDragOverBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'onDragOverOnceBlock',\r\n // src: '/events/onDragOverOnceBlock.png'\r\n // },\r\n {\r\n id: 'onTextInputBlock',\r\n src: '/events/onTextInputBlock.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'onPronounceBlock',\r\n src: '/events/onPronounceBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'onCollisionBlock',\r\n src: '/events/onCollisionBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'onTextInputOnceBlock',\r\n // src: '/events/onTextInputOnceBlock.png'\r\n // }\r\n ]\r\n },\r\n\r\n textEffects: [\r\n 'typeWriter',\r\n 'fadeIn',\r\n 'breathe',\r\n 'pop',\r\n 'pan',\r\n 'rise',\r\n // 'tumble',\r\n 'flipObject',\r\n 'scrap',\r\n // 'stomp',\r\n 'wave',\r\n 'starfall',\r\n 'whirlpool',\r\n // 'roll'\r\n ],\r\n\r\n easings: [\r\n {\r\n 'name': 'InSine',\r\n 'path': 'M1 84c14 1 47.75 1 123-83',\r\n 'transition': '0.12, 0, 0.39, 0',\r\n 'maths': 'return 1 - cos((x * PI) / 2);',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutSine',\r\n 'path': 'M1 84C76.25 0 110 0 124 1',\r\n 'transition': '0.61, 1, 0.88, 1',\r\n 'maths': 'return sin((x * PI) / 2);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutSine',\r\n 'path': 'M1 84C46.25 85 78.75 0 124 1',\r\n 'transition': '0.37, 0, 0.63, 1',\r\n 'maths': 'return -(cos(PI * x) - 1) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuad',\r\n 'path': 'M1 84c12.75 1 61.5 1 123-83',\r\n 'transition': '0.11, 0, 0.5, 0',\r\n 'maths': 'return x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuad',\r\n 'path': 'M1 84C62.5 0 111.25 0 124 1',\r\n 'transition': '0.5, 1, 0.89, 1',\r\n 'maths': 'return 1 - (1 - x) * (1 - x);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuad',\r\n 'path': 'M1 84C56.25 85 68.75 0 124 1',\r\n 'transition': '0.45, 0, 0.55, 1',\r\n 'maths': 'return x < 0.5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InCubic',\r\n 'path': 'M1 84c39 1 82.75 1 123-83',\r\n 'transition': '0.32, 0, 0.67, 0',\r\n 'maths': 'return x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutCubic',\r\n 'path': 'M1 84C41.25 0 85 0 124 1',\r\n 'transition': '0.33, 1, 0.68, 1',\r\n 'maths': 'return 1 - pow(1 - x, 3);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutCubic',\r\n 'path': 'M1 84C81.25 85 43.75 0 124 1',\r\n 'transition': '0.65, 0, 0.35, 1',\r\n 'maths': 'return x < 0.5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuart',\r\n 'path': 'M1 84c61.5 1 92.75 1 123-83',\r\n 'transition': '0.5, 0, 0.75, 0',\r\n 'maths': 'return x * x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuart',\r\n 'path': 'M1 84C31.25 0 62.5 0 124 1',\r\n 'transition': '0.25, 1, 0.5, 1',\r\n 'maths': 'return 1 - pow(1 - x, 4);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuart',\r\n 'path': 'M1 84C95 85 30 0 124 1',\r\n 'transition': '0.76, 0, 0.24, 1',\r\n 'maths': 'return x < 0.5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuint',\r\n 'path': 'M1 84c79 1 96.5 1 123-83',\r\n 'transition': '0.64, 0, 0.78, 0',\r\n 'maths': 'return x * x * x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuint',\r\n 'path': 'M1 84C27.5 0 45 0 124 1',\r\n 'transition': '0.22, 1, 0.36, 1',\r\n 'maths': 'return 1 - pow(1 - x, 5);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuint',\r\n 'path': 'M1 84C103.75 85 21.25 0 124 1',\r\n 'transition': '0.83, 0, 0.17, 1',\r\n 'maths': 'return x < 0.5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n \r\n {\r\n 'name': 'InExpo',\r\n 'path': 'M1 84c86.5 1 104 1 123-83',\r\n 'transition': '0.7, 0, 0.84, 0',\r\n 'maths': 'return x === 0 ? 0 : pow(2, 10 * x - 10);',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutExpo',\r\n 'path': 'M1 84C20 0 37.5 0 124 1',\r\n 'transition': '0.16, 1, 0.3, 1',\r\n 'maths': 'return x === 1 ? 1 : 1 - pow(2, -10 * x);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutExpo',\r\n 'path': 'M1 84C108.75 85 16.25 0 124 1',\r\n 'transition': '0.87, 0, 0.13, 1',\r\n 'maths': 'return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InCirc',\r\n 'path': 'M1 84c67.75 1 124-37.25 123-83',\r\n 'transition': '0.55, 0, 1, 0.45',\r\n 'maths': 'return 1 - sqrt(1 - pow(x, 2));',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutCirc',\r\n 'path': 'M1 84C0 38.25 56.25 0 124 1',\r\n 'transition': '0, 0.55, 0.45, 1',\r\n 'maths': 'return sqrt(1 - pow(x - 1, 2));',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutCirc',\r\n 'path': 'M1 84C106.25 85 18.75 0 124 1',\r\n 'transition': '0.85, 0, 0.15, 1)\"',\r\n 'maths': 'return x < 0.5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InBack',\r\n 'path': 'M1 84c44 1 81.5 48.6 123-83',\r\n 'transition': '0.36, 0, 0.66, -0.56',\r\n 'maths': 'const c1 = 1.70158;const c3 = c1 + 1;return c3 * x * x * x - c1 * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutBack',\r\n 'path': 'M1 84C42.5-47.6 80 0 124 1',\r\n 'transition': '0.34, 1.56, 0.64, 1',\r\n 'maths': 'const c1 = 1.70158;const c3 = c1 + 1;return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutBack',\r\n 'path': 'M1 84C85 136 40-51 124 1',\r\n 'transition': '0.68, -0.6, 0.32, 1.6',\r\n 'maths': 'const c1 = 1.70158; const c2 = c1 * 1.525; return x < 0.5 ? (pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InElastic',\r\n 'path': 'M1 84l.24.03 1.24-.02 1.24-.02 1.24-.02 1.24-.03 1.24-.02 1.24-.03 1.24-.02 1.24-.02 1.24-.01 1.24-.01h1.24l1.24.01 1.24.02 1.24.02 1.24.04 1.24.05 1.24.06 1.24.06 1.24.07 1.24.08 1.24.06 1.24.07 1.24.05 1.24.04 1.24.03h1.24l1.24-.03 1.24-.05 1.24-.08 1.24-.11 1.24-.14 1.24-.16 1.24-.19 1.24-.19 1.24-.21 1.24-.19 1.24-.18 1.24-.16 1.24-.11 1.24-.07h1.24l1.24.07 1.24.15 1.24.23 1.24.32 1.24.39 1.24.46 1.24.52 1.24.55 1.24.57 1.24.56 1.24.51 1.24.44 1.24.32 1.24.18 1.24.01 1.24-.2 1.24-.42 1.24-.66 1.24-.88 1.24-1.11 1.24-1.31 1.24-1.46 1.24-1.57 1.24-1.61 1.24-1.58 1.24-1.45 1.24-1.23 1.24-.92 1.24-.51 1.24-.01 1.24.56 1.24 1.19L93 76.58l1.24 2.5 1.24 3.14 1.24 3.69 1.24 4.14 1.24 4.45 1.24 4.56 1.24 4.46 1.24 4.1 1.24 3.48 1.24 2.6 1.24 1.43 1.24.04 1.24-1.59 1.24-3.36 1.24-5.22 1.24-7.09 1.24-8.87 1.24-10.44 1.24-11.73 1.24-12.57 1.24-12.9 1.24-12.6 1.24-11.6 1.24-9.86',\r\n 'transition': '', \r\n 'maths': 'const c4 = (2 * Math.PI) / 3; return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4);',\r\n 'InElastic': true,\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutElastic',\r\n 'path': 'M1 84l.24-7.34 1.24-9.86 1.24-11.6 1.24-12.6L6.2 29.7l1.24-12.57L8.68 5.4 9.92-5.04l1.24-8.87L12.4-21l1.24-5.22 1.24-3.36 1.24-1.59 1.24.04 1.24 1.43 1.24 2.6 1.24 3.48 1.24 4.1 1.24 4.46 1.24 4.56 1.24 4.45 1.24 4.14 1.24 3.69 1.24 3.14L31 7.42l1.24 1.85 1.24 1.19 1.24.56 1.24-.01 1.24-.51 1.24-.92 1.24-1.23 1.24-1.45 1.24-1.58 1.24-1.61 1.24-1.57L45.88.68l1.24-1.31 1.24-1.11 1.24-.89 1.24-.65 1.24-.42 1.24-.2 1.24.01 1.24.18 1.24.32 1.24.44 1.24.51 1.24.56 1.24.57 1.24.55 1.24.52 1.24.46 1.24.39 1.24.32 1.24.23 1.24.15 1.24.07h1.24l1.24-.07 1.24-.11 1.24-.16 1.24-.18 1.24-.19L80.6.46l1.24-.19 1.24-.19 1.24-.16 1.24-.14 1.24-.11 1.24-.08 1.24-.05 1.24-.03h1.24L93-.46l1.24.04 1.24.05 1.24.07 1.24.06 1.24.08 1.24.07 1.24.06 1.24.06 1.24.05 1.24.04 1.24.02 1.24.02 1.24.01h1.24l1.24-.01 1.24-.01 1.24-.02 1.24-.02 1.24-.03 1.24-.02 1.24-.03 1.24-.02 1.24-.02 1.24-.02',\r\n 'transition': '',\r\n 'maths': 'const c4 = (2 * Math.PI) / 3; return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * c4) + 1;',\r\n 'OutElastic': true,\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutElastic',\r\n 'path': 'M1 84l.24-.02 1.24-.02 1.24-.01 1.24-.02 1.24-.01 1.24-.01h1.24l1.24.01 1.24.02 1.24.03 1.24.05 1.24.06 1.24.07 1.24.08 1.24.08 1.24.07 1.24.04 1.24.02 1.24-.03 1.24-.08 1.24-.15 1.24-.21 1.24-.28 1.24-.33 1.24-.37 1.24-.37 1.24-.33 1.24-.26 1.24-.12 1.24.08 1.24.32 1.24.62 1.24.93 1.24 1.25 1.24 1.52 1.24 1.71 1.24 1.78 1.24 1.66 1.24 1.34 1.24.75 1.24-.11 1.24-1.23 1.24-2.57 1.24-4.05 1.24-5.56 1.24-6.92 1.24-7.97 1.24-8.45 1.24-8.16L62 42l1.24-6.85 1.24-8.16 1.24-8.45 1.24-7.97 1.24-6.92 1.24-5.56 1.24-4.05 1.24-2.57 1.24-1.23 1.24-.11 1.24.75 1.24 1.34 1.24 1.66 1.24 1.78 1.24 1.72 1.24 1.51L83.08.14l1.24.93 1.24.62 1.24.32 1.24.08 1.24-.12 1.24-.26 1.24-.33L93 1.01l1.24-.37 1.24-.33 1.24-.28 1.24-.21 1.24-.15 1.24-.08 1.24-.03 1.24.02 1.24.04 1.24.07 1.24.08 1.24.08 1.24.07 1.24.06 1.24.05 1.24.03 1.24.02 1.24.01h1.24l1.24-.01 1.24-.01 1.24-.02 1.24-.01 1.24-.02',\r\n 'transition': '',\r\n 'maths': 'const c5 = (2 * Math.PI) / 4.5; return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : (pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5)) / 2 + 1;',\r\n 'InOutElastic': true,\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InBounce',\r\n 'path': 'M1 84l.24-.51 1.24-.39 1.24-.26 1.24-.13 1.24-.01 1.24.12 1.24.25 1.24.38 1.24.5L12.4 83l1.24-.97 1.24-.85 1.24-.72 1.24-.6 1.24-.47 1.24-.34 1.24-.21 1.24-.09 1.24.04 1.24.17 1.24.29 1.24.43 1.24.54 1.24.68 1.24.8 1.24.93 1.24 1.06 1.24-1.34 1.24-2.15 1.24-2.03 1.24-1.9 1.24-1.77 1.24-1.65 1.24-1.52 1.24-1.39 1.24-1.26 1.24-1.14 1.24-1.01 1.24-.88 1.24-.76 1.24-.63 1.24-.5 1.24-.38 1.24-.25 1.24-.12 1.24.01 1.24.13 1.24.26 1.24.39 1.24.51 1.24.64 1.24.77 1.24.9 1.24 1.02 1.24 1.15 1.24 1.27 1.24 1.41L71.92 73l1.24 1.66 1.24 1.78 1.24 1.91 1.24 2.04 1.24 2.17 1.24-.23 1.24-4.51 1.24-4.39 1.24-4.25 1.24-4.13 1.24-4 1.24-3.88 1.24-3.75 1.24-3.62 1.24-3.49 1.24-3.37L93 39.7l1.24-3.11 1.24-2.99 1.24-2.85 1.24-2.74 1.24-2.6 1.24-2.48 1.24-2.35 1.24-2.22 1.24-2.1 1.24-1.97 1.24-1.84 1.24-1.71 1.24-1.59 1.24-1.46 1.24-1.34 1.24-1.2 1.24-1.08 1.24-.96 1.24-.82 1.24-.7 1.24-.57 1.24-.45 1.24-.32 1.24-.19',\r\n 'transition': '',\r\n 'maths': 'return 1 - easeOutBounce(1 - x);',\r\n 'InBounce': true,\r\n 'gradient': 'url(#in)'\r\n \r\n },\r\n {\r\n 'name': 'OutBounce',\r\n 'path': 'M1 84l.24-.06 1.24-.19 1.24-.32 1.24-.45 1.24-.57 1.24-.7 1.24-.82 1.24-.96 1.24-1.08 1.24-1.2 1.24-1.34 1.24-1.46 1.24-1.59 1.24-1.71 1.24-1.84 1.24-1.97 1.24-2.1 1.24-2.22 1.24-2.35 1.24-2.48 1.24-2.6 1.24-2.74 1.24-2.85 1.24-2.99L31 44.3l1.24-3.24 1.24-3.37 1.24-3.49 1.24-3.62 1.24-3.75 1.24-3.88 1.24-4 1.24-4.13 1.24-4.25 1.24-4.39 1.24-4.51 1.24-.23 1.24 2.17 1.24 2.04 1.24 1.91 1.24 1.78L52.08 11l1.24 1.53 1.24 1.41 1.24 1.27 1.24 1.15 1.24 1.02 1.24.9 1.24.77 1.24.64 1.24.51 1.24.39 1.24.26 1.24.13 1.24.01 1.24-.12 1.24-.25 1.24-.38 1.24-.5 1.24-.63 1.24-.76 1.24-.88 1.24-1.01 1.24-1.14 1.24-1.26 1.24-1.39 1.24-1.52 1.24-1.65 1.24-1.77 1.24-1.9 1.24-2.03 1.24-2.15L90.52.31l1.24 1.06L93 2.3l1.24.8 1.24.68 1.24.54 1.24.43 1.24.29 1.24.17 1.24.04 1.24-.09 1.24-.21 1.24-.34 1.24-.47 1.24-.6 1.24-.72 1.24-.85L111.6 1l1.24-.95 1.24.5 1.24.38 1.24.25 1.24.12 1.24-.01 1.24-.13 1.24-.26 1.24-.39',\r\n 'transition': '',\r\n 'maths': 'const n1 = 7.5625; const d1 = 2.75; if (x < 1 / d1) { return n1 * x * x; } else if (x < 2 / d1) { return n1 * (x -= 1.5 / d1) * x + 0.75; } else if (x < 2.5 / d1) { return n1 * (x -= 2.25 / d1) * x + 0.9375; } else { return n1 * (x -= 2.625 / d1) * x + 0.984375; }',\r\n 'OutBounce': true,\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutBounce',\r\n 'path': 'M1 84l.24-.45 1.24-.2 1.24.06 1.24.31 1.24-.22 1.24-.91 1.24-.66 1.24-.4 1.24-.15 1.24.1 1.24.36 1.24.61 1.24.87 1.24-.14 1.24-2.09 1.24-1.84 1.24-1.58 1.24-1.33 1.24-1.07 1.24-.83 1.24-.56 1.24-.31 1.24-.06 1.24.2 1.24.45 1.24.7 1.24.96 1.24 1.21 1.24 1.47 1.24 1.72 1.24 1.98 1.24.96 1.24-4.44 1.24-4.2 1.24-3.93 1.24-3.69 1.24-3.43 1.24-3.17 1.24-2.93 1.24-2.67 1.24-2.41 1.24-2.16 1.24-1.9 1.24-1.66 1.24-1.39 1.24-1.15 1.24-.89 1.24-.63 1.24-.38L62 42l1.24-.13 1.24-.38 1.24-.63 1.24-.89 1.24-1.15 1.24-1.39 1.24-1.66 1.24-1.9 1.24-2.16 1.24-2.42 1.24-2.66 1.24-2.93 1.24-3.17 1.24-3.43 1.24-3.69 1.24-3.93 1.24-4.2L84.32.84l1.24.96 1.24 1.98 1.24 1.72 1.24 1.47 1.24 1.21 1.24.96 1.24.7 1.24.45 1.24.2 1.24-.06 1.24-.31 1.24-.57 1.24-.82 1.24-1.07 1.24-1.33 1.24-1.58 1.24-1.84 1.24-2.09 1.24-.14 1.24.87 1.24.61 1.24.36 1.24.1 1.24-.15 1.24-.4 1.24-.66L117.8.5l1.24-.22 1.24.31 1.24.06 1.24-.2',\r\n 'transition': '',\r\n 'maths': 'return x < 0.5 ? (1 - easeOutBounce(1 - 2 * x)) / 2: (1 + easeOutBounce(2 * x - 1)) / 2;',\r\n 'InOutBounce': true,\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'default',\r\n 'path': 'M 0,85\tL 125,0',\r\n 'transition': '',\r\n 'maths': '',\r\n 'default': true,\r\n 'gradient': 'url(#inOut)'\r\n }\r\n ],\r\n\r\n percents: [\r\n '100%',\r\n '90%',\r\n '80%',\r\n '70%',\r\n '60%',\r\n '50%',\r\n '40%',\r\n '30%',\r\n '20%',\r\n '10%'\r\n ],\r\n\r\n durations: [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '10',\r\n '11',\r\n '12',\r\n '13',\r\n '14',\r\n '15',\r\n '16',\r\n '17',\r\n '18',\r\n '19',\r\n '20',\r\n '25',\r\n '30',\r\n '35',\r\n '40',\r\n '45',\r\n '50',\r\n '55',\r\n '60'\r\n ],\r\n\r\n objectAttributes: [\r\n { attr: 'left', type: 0 },\r\n { attr: 'top', type: 0 },\r\n { attr: 'lock_movement', type: 0 },\r\n { attr: 'opacity', type: 0 },\r\n { attr: 'shadow', type: 0 },\r\n { attr: 'opacity', type: 0 },\r\n { attr: 'flip_horizontally', type: 0 },\r\n { attr: 'flip_vertically', type: 0 },\r\n { attr: 'text', type: 1 },\r\n { attr: 'editable', type: 1 },\r\n { attr: 'text_fill_color', type: 1 },\r\n { attr: 'fill_color', type: 1 },\r\n { attr: 'background_color', type: 0 },\r\n { attr: 'font_family', type: 1 },\r\n { attr: 'font_size', type: 1 },\r\n { attr: 'text_alignment', type: 1 },\r\n { attr: 'source_image', type: 2 },\r\n { attr: 'height', type: 0 },\r\n { attr: 'width', type: 0 }\r\n ],\r\n\r\n moveDirections: [\r\n 'none',\r\n 'left-to-right',\r\n 'right-to-left',\r\n 'top-to-bottom',\r\n 'bottom-to-top'\r\n ],\r\n\r\n speeds: ['slow', 'medium', 'fast', 'veryFast'],\r\n\r\n textAssets: [\r\n {\r\n padding: 20,\r\n src: 'bubble1.png',\r\n style: '1'\r\n },\r\n {\r\n padding: 40,\r\n src: 'bubble2.png',\r\n style: '2'\r\n },\r\n {\r\n padding: 5,\r\n src: 'bubble3.png',\r\n style: '3'\r\n },\r\n {\r\n padding: 20,\r\n src: 'bubble4.png',\r\n style: '4'\r\n }\r\n ],\r\n\r\n spineAssets: [\r\n {\r\n src: '/img/spineboy.png',\r\n json: \"/img/Spine/spineboy/spineboy.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/hero.png',\r\n json: \"/img/Spine/hero/hero.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/alien.png',\r\n json: \"/img/Spine/alien/alien.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/dragon.png',\r\n json: \"/img/Spine/dragon/dragon.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/yeti.png',\r\n json: \"/img/Spine/yeti/yeti.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/bluebuck2.png',\r\n json: \"/img/Spine/bluebuck2/bluebuck2.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/Goat.png',\r\n json: \"/img/Spine/Goat/Goat.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/TasmanianTiger.png',\r\n json: \"/img/Spine/TasmanianTiger/TasmanianTiger.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/JerseyDevil.png',\r\n json: \"/img/Spine/JerseyDevil/JerseyDevil.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/girl.png',\r\n json: \"/img/Spine/girl/girl.json\",\r\n tintedImg: true\r\n },\r\n {\r\n src: '/img/boy.png',\r\n json: \"/img/Spine/boy/boy.json\",\r\n tintedImg: true\r\n },\r\n // {\r\n // src: '/img/raptor.png',\r\n // json: \"/img/Spine/raptor/raptor.json\",\r\n // tintedImg: true\r\n // }\r\n ],\r\n\r\n basicShapes: [\r\n {\r\n src: '/img/square-thumb.png',\r\n // type: 'squ'\r\n type: 'rect'\r\n },\r\n {\r\n src: '/img/circle-thumb.png',\r\n // type: 'cir'\r\n type: 'circle'\r\n },\r\n {\r\n src: '/img/triangle-thumb.png',\r\n // type: 'tri'\r\n type: 'triangle'\r\n\r\n }\r\n ],\r\n widgetAssets: [\r\n {\r\n src: 'button.png',\r\n type: 'Textbutton'\r\n },\r\n {\r\n src: 'textfield.png',\r\n type: 'textfield'\r\n }\r\n ],\r\n paletteColors: [\r\n // pallette colors\r\n // first row\r\n '#ff5c5cff',\r\n '#ffbd4aff',\r\n '#fff952ff',\r\n '#99e265ff',\r\n '#35b729ff',\r\n // second row\r\n '#44d9e6ff',\r\n '#2eb2ffff',\r\n '#5271ffff',\r\n '#b760e6ff',\r\n '#ff63b1ff',\r\n '#663300ff',\r\n // third row\r\n '#000000ff',\r\n '#333333ff',\r\n '#666666ff',\r\n '#a8a8a8ff',\r\n '#d9d9d9ff',\r\n '#ffffffff'\r\n ],\r\n\r\n userColors: [\r\n // pallette colors\r\n '#ff5c5cff',\r\n '#ffbd4aff',\r\n '#fff952ff',\r\n '#99e265ff',\r\n '#35b729ff',\r\n '#44d9e6ff',\r\n '#2eb2ffff',\r\n '#5271ffff',\r\n '#b760e6ff',\r\n '#ff63b1ff',\r\n '#663300ff',\r\n // darker\r\n '#db0000FF',\r\n '#C98000FF',\r\n '#D1CA00FF',\r\n '#58A820FF',\r\n '#174F12FF',\r\n '#148C96FF',\r\n '#006EADFF',\r\n '#0026D1FF',\r\n '#F7A0FFFF',\r\n '#E20071FF',\r\n '#000000FF',\r\n // lighten\r\n '#FF9C9CFF',\r\n '#FFFD8AFF',\r\n '#FFFF92FF',\r\n '#D9FFA5FF',\r\n '#75F769FF',\r\n '#84FFFFFF',\r\n '#6EF2FFFF',\r\n '#92B1FFFF',\r\n '#791BACFF',\r\n '#FFA3F1FF',\r\n '#A67340FF'\r\n ],\r\n musicMoods: {\r\n Happy: 'mdiEmoticonHappyOutline',\r\n Aggressive: 'mdiFlashOutline',\r\n Sad: 'mdiEmoticonSadOutline',\r\n Relaxing: 'mdiCloudOutline',\r\n Romantic: 'mdiHeart',\r\n Suspenseful: 'mdiBrightness2',\r\n Epic: 'mdiFire'\r\n },\r\n soundEffectGenres: {\r\n Animals: 'mdiCat',\r\n Bells: 'mdiBellRingOutline',\r\n Human: 'mdiAccountTieVoiceOutline',\r\n Foley: 'mdiChartBubble',\r\n Instrument: 'mdiMusicNote',\r\n Cartoon: 'mdiBabyFaceOutline',\r\n Nature: 'mdiPineTree',\r\n PublicPlaces: 'mdiSubwayVariant'\r\n },\r\n\r\n tween: {\r\n tweenThreshold: '50%'\r\n },\r\n layout: {\r\n layoutContainer: null,\r\n mainObjectsContainer: null,\r\n mainFunctionsContainer: null,\r\n rightSidebar: null\r\n },\r\n positions: {\r\n centerContainer: {\r\n left: 0,\r\n top: 0\r\n }\r\n },\r\n\r\n recordVoiceOver: [\r\n 'recordTutorialGoToStepOne',\r\n 'recordTutorialGoToStepTwo',\r\n 'recordTutorialGoToStepThree',\r\n 'recordTutorialGoToStepFour',\r\n ],\r\n\r\n // editLayoutKeys: [\r\n // \"text\", \r\n // \"fontFamily\",\r\n // \"fill\", \r\n // \"opacity\",\r\n // \"lockMovementX\",\r\n // \"tailPointx\", //speechbubble tail\r\n // \"scaleX\",\r\n // \"angle\",\r\n // \"currentSkin\", //always sent along with 'attachments' when Spine character is modified\r\n // \"stroke\", //for shapes\r\n // \"strokeWidth\", //for shapes\r\n // \"btnBgColor\",\r\n // \"rx\", //button corner radius\r\n // \"shadow\",\r\n // \"textAlign\", \r\n // \"fontWeight\", \r\n // \"fontStyle\",\r\n // \"underline\",\r\n // ],\r\n\r\n templateKeys: [\r\n {\r\n name: 'title',\r\n code: 'ti',\r\n },\r\n {\r\n name: 'forward page',\r\n code: 'fw',\r\n },\r\n {\r\n name: 'voice over',\r\n code: 'vo',\r\n }, \r\n {\r\n name: 'multiple choice',\r\n code: 'mc',\r\n },\r\n {\r\n name: 'game over',\r\n code: 'go',\r\n },\r\n {\r\n name: 'text input',\r\n code: 'te',\r\n },\r\n {\r\n name: 'speech recognition',\r\n code: 'sp',\r\n },\r\n {\r\n name: 'collision',\r\n code: 'co',\r\n },\r\n ], \r\n editLayoutKeys: [\r\n {text: null },\r\n {fontWeight: \"mdiFormatBold\" },\r\n {fontFamily: null},\r\n {fontSize: null},\r\n {fill: \"mdiFormatColorText\"},\r\n {opacity: \"mdiOpacity\"},\r\n {lockMovementX: 'mdiCheckboxBlankOutline'},\r\n {tailPointx: null},\r\n {scaleX: null},\r\n {angle: null},\r\n {currentSkin: null},\r\n {stroke: 'mdiSelectColor'},\r\n {strokeWidth: \"mdiFormatLineWeight\"},\r\n {lineWidth: \"mdiFormatLineWeight\"}, \r\n {btnBgColor: \"mdiFormatColorFill\"},\r\n {rx: \"mdiRoundedCorner\"},\r\n {shadow: 'mdiCheckboxBlankOutline'},\r\n {textAlign: {\r\n left: \"mdiFormatAlignLeft\",\r\n center: \"mdiFormatAlignCenter\",\r\n justify: \"mdiFormatAlignJustify\",\r\n right: \"mdiFormatAlignRight\"\r\n }},\r\n {fontStyle: \"mdiFormatItalic\"},\r\n {underline: \"mdiFormatUnderline\"},\r\n {flipX: \"mdiFlipHorizontal\"},\r\n {bgColor: \"mdiFormatColorFill\"}, \r\n {toFront: \"mdiFlipToFront\"},\r\n {toBack: \"mdiFlipToBack\"}\r\n ],\r\n \r\n editBlockKeys: [\r\n \"threshold\",\r\n \"rotation\",\r\n \"angle\",\r\n \"delay\",\r\n \"direction\",\r\n \"drag\",\r\n \"duration\",\r\n \"easing\",\r\n \"effect\",\r\n \"flip\",\r\n \"glow\",\r\n \"lang\",\r\n \"loop\",\r\n \"name\",\r\n \"nameA\",\r\n \"nameB\",\r\n \"nameC\",\r\n \"once\",\r\n \"operation\",\r\n \"page\",\r\n \"repeat\",\r\n \"scale\",\r\n \"sound\",\r\n \"speed\",\r\n \"url\",\r\n \"value\",\r\n \"variable\",\r\n \"volume\",\r\n \"word\",\r\n \"xCoord\",\r\n \"yCoord\",\r\n \"add_variable\", \r\n \"edit_variable\"\r\n ],\r\n tutorials: {\r\n animation: {\r\n media_url: \"/img/studio/tutorials/gifs/animate_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n url: \"/img/Spine/dragon/dragon.json\",\r\n type: 'Spine',\r\n is_added: true,\r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n initActions: ['addNewPage'],\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'animateSpineBlock',\r\n proxy: 'animateSpineBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'animation 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'animateSpineBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'animateSpineBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n name: \"flying\",\r\n cssClass: 'animateSpineBlock',\r\n proxy: 'animateSpineBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n\r\n record: {\r\n data: [\r\n {\r\n task: {\r\n record: 'record 1'\r\n },\r\n initActions: ['addNewPage'],\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'playRecordBlock',\r\n proxy: 'playRecordBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'playRecordBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n cssClass: 'playRecordBlock',\r\n sound: null,\r\n proxy: 'playRecordBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n ]\r\n }, \r\n fadeIn: {\r\n media_url: \"/img/studio/tutorials/gifs/fade_in_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n url: null,\r\n is_added: true,\r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'fadeBlock',\r\n proxy: 'fadeBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'image 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'fadeBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'fadeBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n textEffect: {\r\n media_url: \"/img/studio/tutorials/gifs/text_effect_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n text: null,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'textEffectBlock',\r\n proxy: 'textEffectBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'textbox 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'textEffectBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'textEffectBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n effect: \"fadeIn\",\r\n cssClass: 'textEffectBlock',\r\n proxy: 'textEffectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n createTextVariable: {\r\n media_url: \"/img/studio/tutorials/gifs/variable_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textfield',\r\n is_added: true,\r\n proxy: 'textfield 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n proxy: 'textfield 0',\r\n text: 'What is your name?'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: true,\r\n entity: {\r\n name: 'name'\r\n },\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'textfield 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onTextInputBlock',\r\n proxy: 'onTextInputBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'textVariableEqualsTextObjectBlock',\r\n proxy: 'textVariableEqualsTextObjectBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'onTextInputBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'textVariableEqualsTextObjectBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onTextInputBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'textVariableEqualsTextObjectBlock 1'\r\n },\r\n proxy: 'connection 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n proxy: 'textbox 0',\r\n text: 'Hello {{ name }}!'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n }\r\n }\r\n ]\r\n },\r\n createVariable: {\r\n media_url: \"/img/studio/tutorials/gifs/variable_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n \r\n \r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n }, \r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1',\r\n variable_proxy: 'variable 4'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1',\r\n variable_proxy: 'variable 4'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n ]\r\n },\r\n test: {\r\n media_url: \"/img/studio/tutorials/gifs/animate_tutorial.gif\",\r\n\r\n data: [\r\n {\r\n \"id\": \"K6Hk46\", \r\n \"task\": {\r\n \"page_proxy\": \"CrL0ae\",\r\n \"layout_objects\": [\r\n {\r\n \"type\": \"textbox\",\r\n \"proxy\": \"bRCV6q\",\r\n \"is_added\": true,\r\n \"page_proxy\": \"CrL0ae\"\r\n }\r\n ]\r\n }, \r\n \"layoutMode\": true\r\n }, \r\n {\r\n \"id\": \"QM3AyL\",\r\n \"task\": {\r\n \"page_proxy\": \"CrL0ae\",\r\n \"layout_objects\": [\r\n {\r\n \"proxy\": \"bRCV6q\",\r\n \"fontFamily\": null,\r\n \"page_proxy\": \"CrL0ae\"\r\n }\r\n ]\r\n }, \r\n \"layoutMode\": true\r\n }, {\"id\": \"3tBb0I\", \"task\": {\"page_proxy\": \"CrL0ae\", \"layout_objects\": [{\"proxy\": \"bRCV6q\", \"fontSize\": null, \"page_proxy\": \"CrL0ae\"}]}, \"layoutMode\": true}, {\"id\": \"8mqWjl\", \"task\": {\"page_proxy\": \"CrL0ae\", \"layout_objects\": [{\"proxy\": \"bRCV6q\", \"shadow\": null, \"page_proxy\": \"CrL0ae\"}]}, \"layoutMode\": true}\r\n\r\n // {\r\n // \"task\": {\r\n // layout_objects: [{\r\n // \"is_added\": true,\r\n // \"proxy\": \"eqmRwa\",\r\n // \"type\": \"textbox\"\r\n // }]\r\n // },\r\n // \"layoutMode\": true\r\n // },\r\n // {\r\n // \"task\": {\r\n // layout_objects: [{\r\n // \"is_paste\": true,\r\n // \"proxy\": \"gY8O9Q\",\r\n // \"original_proxy\": \"eqmRwa\",\r\n // }]\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"isduplicatepage\": true,\r\n // \"previous_page_proxy\": \"ulhysp\",\r\n // \"page_proxy\": \"5oeZNy\"\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"isnewpage\": true,\r\n // \"previous_page_proxy\": \"5oeZNy\",\r\n // \"page_proxy\": \"5oeZNr\"\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"layout_objects\": [\r\n // {\r\n // \"type\": \"textbox\",\r\n // \"left\": null,\r\n // \"top\": null,\r\n // \"is_added\": true,\r\n // \"proxy\": \"LV6zo5\",\r\n // \"page_proxy\": \"5oeZNy\"\r\n // }\r\n // ]\r\n // },\r\n // \"layoutMode\": true\r\n // },\r\n // {\r\n // task: {\r\n // uploadImage: true\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // addImageFolder: true\r\n // },\r\n // layoutMode: true,\r\n // },\r\n \r\n // {\r\n // task: {\r\n // addTemplate: true,\r\n // slug: \"UtiXIlVHIZ\",\r\n // code: 'ti' \r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'textbox',\r\n // text: null,\r\n // is_added: true,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // scaleX: null,\r\n // scaleY: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // width: null,\r\n // height: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // angle: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'rotateBlock',\r\n // proxy: 'rotateBlock 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'createBooleanVariables',\r\n // proxy: 'createBooleanVariables 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'createNumberVariables',\r\n // proxy: 'createNumberVariables 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // }\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // add_variable: true,\r\n // cssClass: 'createTextVariables',\r\n // proxy: 'createTextVariables 1',\r\n // variable_proxy: 'variable 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // variable_proxy: 'variable 1',\r\n // edit_variable: true,\r\n // entity: {\r\n // name: 'rawr'\r\n // },\r\n // cssClass: 'createTextVariables',\r\n // proxy: 'createTextVariables 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'textEffectBlock',\r\n // proxy: 'textEffectBlock 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // effect: \"fadeIn\",\r\n // cssClass: 'textEffectBlock',\r\n // proxy: 'textEffectBlock 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // }\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'image',\r\n // is_bg: true\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'image',\r\n // is_added: true,\r\n // proxy: 'image 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'Textbutton',\r\n // is_added: true,\r\n // proxy: 'button 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'textfield',\r\n // is_added: true,\r\n // proxy: 'textfield 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n ]\r\n },\r\n imagetoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n is_added: true,\r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n shadow: null, \r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n flipX: true, \r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n ]\r\n },\r\n\r\n shapetoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n is_added: true,\r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n shadow: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n fill: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n stroke: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n strokeWidth: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n opacity: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n ]\r\n },\r\n\r\n animationtoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n url: \"/img/Spine/girl/girl.json\",\r\n type: 'Spine',\r\n is_added: true,\r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n initActions: ['addNewPage'],\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n opacity: null, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n flipX: true, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n currentSkin: null,\r\n attachments: null, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n ]\r\n },\r\n\r\n texttoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n shadow: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontFamily: \"Lexend\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontSize: 24, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n textAlign: \"left\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontWeight: \"bold\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontStyle: \"italic\",\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n underline: true, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fill: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n opacity: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n },\r\n bubbletoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n is_added: true,\r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n shadow: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontFamily: \"Lexend\", \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontSize: 24, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontWeight: \"bold\", \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontStyle: \"italic\",\r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n underline: true, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n bgColor: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fill: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n lineWidth: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n opacity: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n },\r\n buttontoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n is_added: true,\r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n shadow: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontFamily: \"Lexend\", \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontSize: 24, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontWeight: \"bold\", \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontStyle: \"italic\",\r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n btnBgColor: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fill: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n opacity: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n rx: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n }\r\n }\r\n\r\n // dimensions: {\r\n // page: {\r\n // height: 0,\r\n // width: 0\r\n // }\r\n // }\r\n}\r\n\r\n// getters\r\nconst getters = {}\r\n\r\n// actions\r\nconst actions = {}\r\n\r\n// mutations\r\nconst mutations = {\r\n // setPageDimensions(state, dimensions) {\r\n // state.dimensions.page = dimensions;\r\n // }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n}\r\n","import Vue from \"vue\";\r\nimport VueGtag from \"vue-gtag\";\r\n\r\nVue.use(VueGtag, {\r\n deferScriptLoad: true,\r\n config: { id: \"G-BRH3E70VNP\" },\r\n\r\n})","import Vue from 'vue'\r\nimport VeeValidate from 'vee-validate'\r\n\r\nfunction installRules({ app }) {\r\n VeeValidate.Validator.extend('unique_username', {\r\n getMessage(field) {\r\n return 'username is already taken'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n try {\r\n const res = await app.$api.checkUsername(value)\r\n if (res.data.taken) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n valid = false\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n VeeValidate.Validator.extend('unique_email', {\r\n getMessage(field) {\r\n return 'email is already registered'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n try {\r\n const res = await app.$api.checkEmail(value)\r\n if (res.data.taken) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n valid = false\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n VeeValidate.Validator.extend('blacklist_username', {\r\n getMessage(field) {\r\n return 'this username is not available'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n var Filter = require('bad-words'),\r\n filter = new Filter()\r\n filter.addWords(\r\n 'about',\r\n 'account',\r\n 'accounts',\r\n 'art',\r\n 'arts',\r\n 'artist',\r\n 'artcontest',\r\n 'artcontests',\r\n 'artists',\r\n 'background',\r\n 'backgrounds',\r\n 'billing',\r\n 'class',\r\n 'classes',\r\n 'contest',\r\n 'contests',\r\n 'code',\r\n 'coding',\r\n 'coding-club',\r\n 'community',\r\n 'contact',\r\n 'club',\r\n 'clubs',\r\n 'doc',\r\n 'docs',\r\n 'educator',\r\n 'educators',\r\n 'elementari',\r\n 'elementary',\r\n 'email',\r\n 'emails',\r\n 'explore',\r\n 'feature',\r\n 'features',\r\n 'file',\r\n 'files',\r\n 'fieldtrip',\r\n 'field_trip',\r\n 'grant',\r\n 'grants',\r\n 'hobby',\r\n 'hourcode',\r\n 'hourofcode',\r\n 'illustration',\r\n 'illustrations',\r\n 'live',\r\n 'livestream',\r\n 'login',\r\n 'logout',\r\n 'music',\r\n 'musics',\r\n 'notification',\r\n 'notifications',\r\n 'password',\r\n 'payment',\r\n 'payments',\r\n 'plans',\r\n 'premium',\r\n 'privacy',\r\n 'pro',\r\n 'researcher',\r\n 'researchers',\r\n 'reset_password',\r\n 'reset',\r\n 'school',\r\n 'school-connect',\r\n 'schools',\r\n 'setting',\r\n 'settings',\r\n 'signin',\r\n 'sign_in',\r\n 'signout',\r\n 'sign_out',\r\n 'sound_effect',\r\n 'sound_effects',\r\n 'sound',\r\n 'sounds',\r\n 'soundeffect',\r\n 'soundeffects',\r\n 'stories',\r\n 'story',\r\n 'studio',\r\n 'subscribe',\r\n 'support',\r\n 'teacher',\r\n 'teachers',\r\n 'terms',\r\n 'virtual',\r\n 'virtual_fieldtrip',\r\n 'web',\r\n 'webmonetize',\r\n 'webmonetization', \r\n 'monetization',\r\n 'monetize'\r\n )\r\n let cleaned = filter.clean(value)\r\n if (cleaned.includes('*')) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n VeeValidate.Validator.extend('blacklist_words', {\r\n getMessage(field) {\r\n return 'inappropriate'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value) {\r\n\r\n let valid = false\r\n var Filter = require('bad-words'),\r\n filter = new Filter()\r\n value = value + ' ABC'\r\n let cleaned = filter.clean(value)\r\n // remove ABC from string - workaround for emojis\r\n let substring = cleaned.substr(-3)\r\n if (substring == \"ABC\"){\r\n value = cleaned.substring(0, cleaned.length - 3);\r\n }\r\n\r\n if (cleaned.includes('*')) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n}\r\n\r\nlet installed = false\r\nlet localized = {\r\n en: false,\r\n fr: false,\r\n es: false,\r\n // zh_CN: false,\r\n // zh_TW: false,\r\n it: false,\r\n pt: false,\r\n de: false,\r\n el: false\r\n}\r\n\r\nexport default ({ app }) => {\r\n if (!installed) {\r\n Vue.use(VeeValidate, {\r\n inject: false,\r\n i18n: app.i18n\r\n })\r\n // extend the rules after vee-validate is installed.\r\n installRules({ app })\r\n installed = true\r\n }\r\n\r\n const locale = app.i18n.locale\r\n // skip if already localized.\r\n if (localized[locale]) return\r\n\r\n // dynamically load a vee-validate locale\r\n return import(`vee-validate/dist/locale/${locale}`).then(localeObj => {\r\n VeeValidate.Validator.localize({ [locale]: localeObj })\r\n localized[locale] = true\r\n })\r\n}\r\n\r\n// Vue.use(VueI18n)\r\n// const i18n = new VueI18n()\r\n// Vue.use(VeeValidate, {\r\n// inject: false,\r\n// i18nRootKey: 'validations',\r\n// i18n,\r\n// dictionary: {\r\n// en: en,\r\n// fr: fr,\r\n// es: es\r\n// }\r\n// })\r\n\r\n// installRules()\r\n","import Vue from 'vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\n\r\nVue.use(VueObserveVisibility)\r\n","import Vue from 'vue';\r\nimport SlideVerify from 'vue-monoplasty-slide-verify';\r\n\r\nVue.use(SlideVerify);\r\n","import Vue from 'vue'\r\n\r\nVue.directive('studio-click-outside', {\r\n bind: function(el, binding, vnode) {\r\n el.clickOutsideEvent = function(event) {\r\n // here I check that click was outside the el and his childrens\r\n if (\r\n !(el == event.target || el.contains(event.target)) &&\r\n // check if event.target is select element (for image categories)\r\n (!event.target.classList.contains('v-list-item__title') &&\r\n !event.target.classList.contains('v-subheader') && \r\n !event.target.classList.contains('v-list-item') &&\r\n !event.target.classList.contains('v-list-item__content'))\r\n ) {\r\n // and if it did, call method provided in attribute value\r\n vnode.context[binding.expression](event)\r\n }\r\n }\r\n document.body.addEventListener('click', el.clickOutsideEvent)\r\n document.body.addEventListener('touchstart', el.clickOutsideEvent)\r\n },\r\n unbind: function(el) {\r\n document.body.removeEventListener('click', el.clickOutsideEvent)\r\n document.body.removeEventListener('touchstart', el.clickOutsideEvent)\r\n }\r\n})\r\n","import Vue from 'vue'\r\nimport {\r\n Howl,\r\n Howler\r\n} from 'howler';\r\nimport { compressToEncodedURIComponent } from 'lz-string';\r\nimport { mdiConsoleNetworkOutline } from '@mdi/js';\r\n\r\nVue.prototype.$elementari = {\r\n SpeechRecognition: null,\r\n SpeechTargetsList: [],\r\n goToLinkStatus: {},\r\n timeThresholdBetweenTwoGoToLink: 1000,\r\n page: null,\r\n reader: null,\r\n selectedBtnObj: null,\r\n nextFrameTime: 0,\r\n animationDelay: 27,\r\n shadow: {\r\n color: 'rgba(0,0,0,0.6)',\r\n blur: 10,\r\n offsetX: 10,\r\n offsetY: 10,\r\n opacity: 0.6,\r\n fillShadow: true,\r\n strokeShadow: true\r\n },\r\n glow: {\r\n color: 'rgba(0,0,255,1)',\r\n blur: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n opacity: 1,\r\n fillShadow: true,\r\n strokeShadow: true\r\n },\r\n eventCodeCounter: 0,\r\n global_variables: {},\r\n highlightBlocksList: {},\r\n // collisionWatchList: {},\r\n eventBlocks: [\r\n 'onPageStartBlock',\r\n // 'onTouchBlock',\r\n 'onClickBlock',\r\n 'onClickOnceBlock',\r\n 'onDragOverBlock',\r\n 'onDragOverOnceBlock',\r\n 'onTextInputBlock',\r\n 'onTextInputOnceBlock',\r\n 'onPronounceBlock',\r\n 'onCollisionBlock'\r\n ],\r\n\r\n blocksWithObjectPort: [\r\n 'animateSpineBlock',\r\n 'blinkBlock',\r\n 'bounceBlock',\r\n 'fadeBlock',\r\n 'textEffectBlock',\r\n 'changeImageBlock',\r\n 'hideBlock',\r\n 'moveToBlockAbsolute',\r\n 'moveToBlockRelative',\r\n 'rotateBlock',\r\n 'scaleBlock',\r\n 'restoreObjectBlock',\r\n 'flipObjectBlock',\r\n 'setObjectAngleBlock',\r\n 'setObjectScaleBlock',\r\n 'setObjectPositionBlock',\r\n 'setDraggableBlock',\r\n 'showBlock', \r\n 'textObjectEqualsValueBlock',\r\n 'textObjectEqualsVariableBlock'\r\n ],\r\n\r\n blockWithLogicPort: [\r\n 'branchBlock', \r\n 'numberComparisonBlock',\r\n 'textComparisonBlock'\r\n ],\r\n\r\n setVarValBlocks: [\r\n 'textVariableEqualsVariableBlock',\r\n 'textVariableEqualsValueBlock',\r\n 'textVariableEqualsTextObjectBlock',\r\n 'numberVariableEqualsVariableBlock',\r\n 'numberVariableEqualsValueBlock',\r\n 'booleanVariableEqualsVariableBlock',\r\n 'booleanVariableEqualsValueBlock'\r\n ],\r\n\r\n initEventStatus: function (eventObjectId, maxIterations) {\r\n this.reader.initEventStatus(eventObjectId, maxIterations)\r\n },\r\n\r\n setGlobalVariables: function(events) {\r\n // search for variables through each event page \r\n // and store them into $elementari.global_variables\r\n for (let i = 0; i < events.length; i++) {\r\n for (let l = 0; l < events[i].length; l++) {\r\n if (events[i][l]['entities'] == undefined) continue\r\n \r\n var type = \"Text\"\r\n var value = \"\"\r\n if (events[i][l]['cssClass'] == 'createNumberVariables') {\r\n type = \"Number\"\r\n value = '0'\r\n } else if (events[i][l]['cssClass'] == 'createBooleanVariables') {\r\n type = \"Boolean\"\r\n value = 'false'\r\n }\r\n\r\n for (var m = 0; m < events[i][l]['entities'].length; m++) {\r\n this.reader.global_variables[events[i][l]['entities'][m]['text']] = {\r\n value: value,\r\n type: type\r\n }\r\n }\r\n }\r\n }\r\n }, \r\n getObjectBlockName: function(o){\r\n let obj_name\r\n if ('name' in o && o[\"name\"] !== null){\r\n obj_name = o[\"name\"]\r\n }else{\r\n obj_name = o[\"id\"]\r\n }\r\n return obj_name\r\n },\r\n\r\n setPage: function (page, callback) {\r\n this.page = page\r\n typeof callback === 'function' && callback()\r\n },\r\n\r\n setPageScale: function (pageScale) {\r\n this.pageScale = pageScale\r\n },\r\n setReader: function (reader) {\r\n this.reader = reader\r\n },\r\n\r\n checkIfEventIsActive: function (eventCode) {\r\n if (this.reader.eventStatus[eventCode] && this.reader.eventStatus[eventCode].activeStack.length > 0) return true\r\n return false\r\n },\r\n\r\n checkIfEventCodeIsCompleted: function (options) {\r\n // console.log('checkIfEventCodeIsCompleted', options)\r\n // console.log('counter', this.reader.eventStatus[options.eventCode].counter)\r\n if (this.reader.eventStatus[options.eventCode] == undefined) {\r\n return false\r\n }\r\n\r\n if (this.reader.eventStatus[options.eventCode].activeStack.length > 0) return false\r\n\r\n if (options.currentIteration != this.reader.eventStatus[options.eventCode].counter) return false\r\n if (\r\n this.reader.eventStatus[options.eventCode].maxIterations > 0 &&\r\n this.reader.eventStatus[options.eventCode].counter >= this.reader.eventStatus[options.eventCode].maxIterations - 1\r\n ) {\r\n // make sure counter is reset before ending the loop\r\n this.reader.eventStatus[options.eventCode].counter = 0\r\n return false\r\n }\r\n\r\n this.reader.eventStatus[options.eventCode].counter++\r\n\r\n // get event block from id and call it again\r\n const block = this.getBlock(options.eventCode)\r\n\r\n if (block == null) return false\r\n\r\n this.executeOnEventCode(block, this.getBlockConnections(block[\"id\"]))\r\n\r\n return true\r\n\r\n },\r\n\r\n animateCanvas: function (self, time) {\r\n if (!this.page) {\r\n this.stopAllRendering()\r\n return\r\n }\r\n // if we're not animating anything or if desired delay\r\n // hasn't occurred, just request another loop and return\r\n if (time < this.nextFrameTime) {\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n self.animateCanvas(self, time)\r\n })\r\n // this.animateCanvas(this, new Date())\r\n return\r\n }\r\n\r\n if (this.reader && !this.reader.isAnimating) {\r\n this.stopAllRendering()\r\n return\r\n }\r\n\r\n // set nextTime to the next elapsed time\r\n this.nextFrameTime = time + this.animationDelay\r\n // re-render everything\r\n this.page.requestRenderAll()\r\n // request another loop\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n self.animateCanvas(self, time)\r\n })\r\n },\r\n\r\n stopAllRendering: function () {\r\n if (this.page) {\r\n this.page.requestRenderAll()\r\n }\r\n cancelAnimationFrame =\r\n window.cancelAnimationFrame || window.mozCancelAnimationFrame\r\n cancelAnimationFrame(this.myRequestAnimation)\r\n this.myRequestAnimation = null\r\n //reset list\r\n this.reader.animatedObjects = []\r\n },\r\n\r\n startObjectAnimationFrame: function (objectID, animationName) {\r\n let self = this\r\n this.reader.isAnimating = true\r\n\r\n this.reader.animatedObjects.push({\r\n id: objectID,\r\n animationName: animationName\r\n })\r\n\r\n if (this.myRequestAnimation) return\r\n\r\n requestAnimationFrame =\r\n window.requestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.msRequestAnimationFrame\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n \r\n self.animateCanvas(self, time)\r\n })\r\n },\r\n\r\n stopObjectAnimationFrame: function (objectID, animationName) {\r\n for (var i = 0, l = this.reader.animatedObjects.length; i < l; i++) {\r\n if (\r\n this.reader.animatedObjects[i].id === objectID &&\r\n this.reader.animatedObjects[i].animationName === animationName\r\n ) {\r\n this.reader.animatedObjects.splice(i, 1)\r\n break\r\n }\r\n }\r\n\r\n if (!this.reader.animatedObjects.length) {\r\n this.reader.isAnimating = false\r\n if (this.reader.displayNextPageHint) {\r\n this.reader.displayNextPageHint(\r\n this.reader,\r\n this.reader.pageSelected,\r\n 500\r\n )\r\n }\r\n }\r\n },\r\n\r\n goToPageBlock: function (self, block, callback) {\r\n\r\n // let pageNumber = parseInt(block['page'])\r\n\r\n\r\n let pageNumber = this.isValueAVariableField(block[\"page\"])\r\n if (!this.isNumber(pageNumber, true)) return\r\n\r\n // if (isNaN(parseInt(block['page']))){\r\n // // check if 'page' is a Variable\r\n // if (this.reader.global_variables[block['page']] != undefined) {\r\n // pageNumber = this.reader.global_variables[block['page']]['value']\r\n // } else {\r\n // return\r\n // }\r\n // }\r\n let log_pageNumber\r\n if(Number(pageNumber.value) == 0){\r\n // is origin page\r\n log_pageNumber = this.reader.$t('studio.blocks.originPage')\r\n } else if(Number(pageNumber.value) == -1) { \r\n log_pageNumber = this.reader.$t('actions.next').toLowerCase()\r\n } else if(Number(pageNumber.value) == -2) { \r\n log_pageNumber = this.reader.$t('actions.previous').toLowerCase()\r\n }else{\r\n log_pageNumber= pageNumber.value\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.goToPage', {\r\n page: log_pageNumber\r\n }),\r\n null,\r\n true\r\n )\r\n \r\n this.reader.goToPage(parseInt(pageNumber.value) - 1)\r\n callback()\r\n },\r\n\r\n goToLinkBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n // check if tab are already open with url\r\n\r\n if (!this.goToLinkStatus[block[\"url\"]]) {\r\n this.goToLinkStatus[block[\"url\"]] = new Date()\r\n } else {\r\n // check if at least 1 second happend since last gotolink call\r\n const now = new Date()\r\n if (now.getTime() - this.goToLinkStatus[block[\"url\"]].getTime() < this.timeThresholdBetweenTwoGoToLink) {\r\n this.timeThresholdBetweenTwoGoToLink = 60000\r\n return\r\n }\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.goToLink', {\r\n url: block['url']\r\n }))\r\n\r\n this.reader.goToLink(block[\"url\"])\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n callback()\r\n \r\n },\r\n\r\n hideBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n o.visible = false\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.hide', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n showBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n o.visible = true\r\n o.opacity = 1\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.show', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n this.popObject(this, block)\r\n\r\n this.testCollision(this, block, o)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n scaleBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = this.page.getItemById(block[\"obj_id\"]),\r\n coeff = 1\r\n\r\n if (!o) return\r\n\r\n let pageSelected = self.reader.pageSelected\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) {\r\n return\r\n } \r\n\r\n let scale = this.isValueAVariableField(block[\"scale\"])\r\n \r\n if (!this.isNumber(scale, false)) {\r\n return\r\n }\r\n\r\n //check if object is being dragged\r\n if (o.dragAnimationTrigger) {\r\n coeff = 1.2\r\n scale *= coeff\r\n }\r\n\r\n if (o.isScaling) return\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.scale', {\r\n name: this.getObjectBlockName(o),\r\n factor: scale.value,\r\n duration: duration.value\r\n }))\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n o.isScaling = true\r\n\r\n // if (o._originalProperties && o._originalProperties.scaleX == undefined) {\r\n // o._originalProperties.scaleX = o.scaleX\r\n // o._originalProperties.scaleY = o.scaleY\r\n // }\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n if (o.abortAnimation) { \r\n delete o.abortAnimation\r\n }\r\n o.animate({\r\n scaleX: o.scaleX * scale.value,\r\n scaleY: o.scaleY * scale.value\r\n }, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n console.log(\"aborting animation\")\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.isScaling = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n // update LanczosFilter\r\n self.reader.setImageLanczosFilter(o)\r\n self.testCollision(self, block, o)\r\n //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] !== pageScale) {\r\n // o.left *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // }\r\n\r\n },\r\n onComplete: function onComplete() {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.isScaling = false\r\n //save original scale\r\n // if (o._originalProperties) {\r\n // o._originalProperties.scaleX = o.scaleX / coeff\r\n // o._originalProperties.scaleY = o.scaleY / coeff\r\n // }\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n // if (typeof callback !== 'function') {\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n // }\r\n // if (c) return\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n rotateBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) return\r\n if (o.isRotating) return\r\n let pageSelected = self.reader.pageSelected\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n o.isRotating = true\r\n //save original angle\r\n if (!o.originalAngle) {\r\n o.originalAngle = o.angle\r\n }\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n \r\n let angle = this.isValueAVariableField(block[\"rotation\"])\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n\r\n if (!this.isNumber(angle, true)) return\r\n if (!this.isNumber(duration, false)) return\r\n // if (this.isNumber(angle, true)) {\r\n // angle = parseInt(angle)\r\n // } else {\r\n // angle = parseInt(this.isValueAVariableField(block[\"rotation\"]).value)\r\n \r\n // if (!this.isNumber(angle, true)) return\r\n // }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.rotate', {\r\n name: this.getObjectBlockName(o),\r\n angle: angle.value,\r\n duration: duration.value\r\n }))\r\n\r\n \r\n if (o.abortAnimation) { \r\n delete o.abortAnimation\r\n }\r\n\r\n o.animate('angle', o.angle + angle.value, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.isRotating = false\r\n \r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n self.testCollision(self, block, o)\r\n },\r\n onComplete: function onComplete() {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.isRotating = false\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n waitBlock: function (self, block, callback) {\r\n \r\n const pageSelected = self.reader.pageSelected\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n\r\n if (!this.isNumber(duration, false)) return\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.wait', {\r\n duration: duration.value\r\n }))\r\n\r\n self.reader.timeouts.push(\r\n setTimeout(function () {\r\n self.reader.timeouts.pop()\r\n if (pageSelected == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }, parseFloat(duration.value) * 1000)\r\n )\r\n },\r\n\r\n moveToBlockAbsolute: function (self, block, callback) {\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n if (o.moveX && o.moveY) return\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n let pageSelected = self.reader.pageSelected\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n\r\n var duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) return\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX, true)) return\r\n\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY, true)) return\r\n\r\n if (Number(testX.value) != 0) {\r\n o.moveX = true\r\n }\r\n if (Number(testY.value) != 0) {\r\n o.moveY = true\r\n }\r\n\r\n const coords = {}\r\n coords['left'] = Number(testX.value) * pageScale\r\n coords['top'] = Number(testY.value) * pageScale\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.moveToAbs', {\r\n name: this.getObjectBlockName(o),\r\n xCoord: testX.value,\r\n yCoord: testY.value,\r\n duration: duration.value\r\n }))\r\n \r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.animate(coords, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n\r\n \r\n if (!self.page || !o || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function() {\r\n\r\n self.testCollision(self, block, o)\r\n // //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] === pageScale) {\r\n // return\r\n // }\r\n // o.left *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (!c) {\r\n typeof callback === 'function' && callback()\r\n // }\r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n moveToBlockRelative: function (self, block, callback) {\r\n \r\n // let self = this\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n if (!o) return\r\n if (o.moveX && o.moveY) return\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n // o.move = true\r\n\r\n const coords = {}\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX, true)) return\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY, true)) return\r\n\r\n var duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) return\r\n\r\n\r\n if (Number(duration.value) < 0) {\r\n duration.value = 0\r\n }\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (Number(testX.value) != 0) {\r\n coords['left'] = o.left + (Number(testX.value) * pageScale)\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n coords['top'] = o.top + (Number(testY.value) * pageScale)\r\n }\r\n\r\n if (!coords['left'] && !coords['top']) return\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.moveTo', {\r\n name: this.getObjectBlockName(o),\r\n xCoord: testX.value,\r\n yCoord: testY.value,\r\n duration: duration.value\r\n }))\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.animate(coords, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n\r\n if (!o || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n \r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n },\r\n onChange: function() {\r\n\r\n self.testCollision(self, block, o)\r\n //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] === pageScale) {\r\n // return\r\n // }\r\n // o.left *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n \r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n \r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n // if (typeof callback !== 'function') {\r\n \r\n // return\r\n // }\r\n // self.reader.eventStatus[block[\"eventCode\"]].backOrder++\r\n\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (!c) {\r\n typeof callback === 'function' && callback()\r\n // } \r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n testCollision: function (self, block, o) {\r\n if (o.visible == false) return\r\n \r\n if (!self.reader.collisionWatchList[block[\"obj_id\"]]) return\r\n\r\n const threshold = self.reader.collisionWatchList[block[\"obj_id\"]]['threshold']\r\n \r\n self.reader.collisionWatchList[block[\"obj_id\"]][\"targets\"].forEach(function(target){\r\n \r\n if (target.visible == false) return\r\n \r\n if (!o.intersectsWithObject(target, false, true, threshold)) {\r\n\r\n for (var event_id in target['collisionWatch'][o.id]['events']) {\r\n if (target['collisionWatch'][o.id]['events'].hasOwnProperty(event_id)) {\r\n target['collisionWatch'][o.id]['events'][event_id]['collision_is_active'] = false\r\n }\r\n }\r\n return\r\n }\r\n \r\n for (var event_id in target[\"collisionWatch\"][o.id][\"events\"]) {\r\n if (target[\"collisionWatch\"][o.id][\"events\"].hasOwnProperty(event_id)) {\r\n \r\n if (target['collisionWatch'][o.id]['events'][event_id]['collision_is_active']) return\r\n\r\n let event = JSON.parse(JSON.stringify(target[\"collisionWatch\"][o.id][\"events\"][event_id]))\r\n\r\n if (event.collisionTriggered) continue\r\n\r\n\r\n self.appendLogMsg(self.reader.$t('reader.inspect.onCollision', {\r\n name1: self.getObjectBlockName(o),\r\n name2: self.getObjectBlockName(target),\r\n \r\n }), true)\r\n\r\n self.reader.setTriggerObject(event.block[\"id\"], target.id)\r\n \r\n let isExecuting = self.executeOnEventCode(event.block, event.conn, event.connection, true)\r\n\r\n if (isExecuting == false) return\r\n\r\n target['collisionWatch'][o.id]['events'][event_id]['collision_is_active'] = true\r\n \r\n // check if layout_obj is already evented\r\n if (event.block[\"once\"] == true) {\r\n event.collisionTriggered = true\r\n }\r\n \r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n // flipObject: function (id, image, direction, center, easing) {\r\n // let o = self.page.getItemById(id)\r\n\r\n // if (!o) return\r\n\r\n // if (o.flipping) return\r\n\r\n // o.flipping = true\r\n // let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n // if (image != 'main') {\r\n // o.srcArray.forEach(function (e, i) {\r\n // if (e.title == image) {\r\n // image = i\r\n // return\r\n // }\r\n // })\r\n // }\r\n\r\n // if (!o.flipToggle) o.flipToggle = false\r\n\r\n // let midToggle = true,\r\n // url = null,\r\n // targetOrigin = 'center',\r\n // coeff = 1,\r\n // scale = o.scaleX,\r\n // flipProperty = 'flipX',\r\n // scaleProperty = 'scaleX',\r\n // originProperty = 'originX',\r\n // positionProperty = 'left',\r\n // dimensionProperty = 'width'\r\n // switch (direction) {\r\n // case 'right-to-left':\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originX = 'left'\r\n // o.left -= (o.width / 2) * o.scaleX\r\n // targetOrigin = 'right'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originX = 'right'\r\n // o.left += (o.width / 2) * o.scaleX\r\n // targetOrigin = 'left'\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'left-to-right':\r\n // scale = o.scaleX\r\n // flipProperty = 'flipX'\r\n // scaleProperty = 'scaleX'\r\n // originProperty = 'originX'\r\n // positionProperty = 'left'\r\n // dimensionProperty = 'width'\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originX = 'right'\r\n // o.left += (o.width / 2) * o.scaleX\r\n // targetOrigin = 'left'\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originX = 'left'\r\n // o.left -= (o.width / 2) * o.scaleX\r\n // targetOrigin = 'right'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'top-to-bottom':\r\n // ;\r\n // (scale = o.scaleY), (flipProperty = 'flipY')\r\n // scaleProperty = 'scaleY'\r\n // originProperty = 'originY'\r\n // positionProperty = 'top'\r\n // dimensionProperty = 'height'\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originY = 'bottom'\r\n // o.top += (o.height / 2) * o.scaleY\r\n // targetOrigin = 'top'\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originY = 'top'\r\n // o.top -= (o.height / 2) * o.scaleY\r\n // targetOrigin = 'bottom'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'bottom-to-top':\r\n // ;\r\n // (scale = o.scaleY),\r\n // (flipProperty = 'flipY'),\r\n // (scaleProperty = 'scaleY'),\r\n // (originProperty = 'originY'),\r\n // (positionProperty = 'top'),\r\n // (dimensionProperty = 'height')\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originY = 'top'\r\n // o.top -= (o.height / 2) * o.scaleY\r\n // targetOrigin = 'bottom'\r\n // // coeff = - 1;\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originY = 'bottom'\r\n // o.top += (o.height / 2) * o.scaleY\r\n // targetOrigin = 'top'\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // }\r\n\r\n // self.startObjectAnimationFrame(id, 'flipObject')\r\n // o.animate(scaleProperty, -scale, {\r\n // duration: 1000,\r\n // easing: easing,\r\n // onComplete: function onComplete() {\r\n // o.setCoords()\r\n // o.flipToggle = !o.flipToggle\r\n // o.flipping = false\r\n // // o[flipProperty] =\r\n // if (!center) {\r\n // o[originProperty] = 'center'\r\n // o[positionProperty] +=\r\n // ((coeff * o[dimensionProperty]) / 2) * o[scaleProperty]\r\n // self.page.requestRenderAll()\r\n // }\r\n // self.stopObjectAnimationFrame(id, 'flipObject')\r\n // },\r\n // onAbort: function () {\r\n // if (!self.page) {\r\n // return true\r\n // }\r\n // }\r\n // // onChange: function() {\r\n // // //readjusting in case of page re-scaling\r\n // // o[scaleProperty] *=\r\n // // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // // // look wether we passed 50% of the animation\r\n // // if (midToggle && o[scaleProperty] < scale * 0.05) {\r\n // // midToggle = false\r\n // // o[originProperty] = targetOrigin\r\n // // if (!center) {\r\n // // o[positionProperty] +=\r\n // // coeff * o[dimensionProperty] * o[scaleProperty]\r\n // // }\r\n // // o.setSrc(url, function() {})\r\n // // }\r\n // // // o[\"flipProperty\"] = o.flipToggle;\r\n // // }\r\n // })\r\n // },\r\n\r\n // scrollingObject: function (id, speed, direction) {\r\n // if (!this.page) return\r\n\r\n // let self = this,\r\n // o = self.page.getItemById(id),\r\n // pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n // if (o.scrolling) return\r\n\r\n // let reference = null,\r\n // duration1 = null,\r\n // duration2 = null,\r\n // target = null\r\n // o.scrolling = true\r\n\r\n // if (direction === 'left-to-right') {\r\n // reference = 'left'\r\n // target = self.page.width + (o.width * o.scaleX) / 2\r\n // duration1 =\r\n // (1000 * (self.page.width - (o.left + (o.width * o.scaleX) / 2))) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 =\r\n // (1000 * (self.page.width - o.left)) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // } else if (direction === 'right-to-left') {\r\n // reference = 'left'\r\n // target = (-o.width * o.scaleX) / 2\r\n // duration1 =\r\n // (1000 * o.left) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 = duration1\r\n // } else if (direction === 'bottom-to-top') {\r\n // reference = 'top'\r\n // target = (-o.height * o.scaleY) / 2\r\n // duration1 =\r\n // (1000 * o.top) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 = duration1\r\n // } else if (direction === 'top-to-bottom') {\r\n // reference = 'top'\r\n // target = self.page.height + (o.height * o.scaleY) / 2\r\n // duration1 =\r\n // (1000 * (self.page.height - (o.top + (o.height * o.scaleY) / 2))) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 =\r\n // (1000 * (self.page.height - o.top)) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // }\r\n\r\n // self.startObjectAnimationFrame(id, 'scrollingObject')\r\n // o.animate(reference, target, {\r\n // duration: duration1,\r\n // abort: function () {\r\n // if (!self.page) {\r\n // self.stopObjectAnimationFrame(id, 'scrollingObject')\r\n // return true\r\n // }\r\n // },\r\n // onChange: function () {\r\n // //readjusting in case of page re-scaling\r\n // o[reference] *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // },\r\n // onComplete: function onComplete() {\r\n // if (!self.page) return\r\n\r\n // //reset object position\r\n // if (direction === 'left-to-right') {\r\n // o.left = (-o.width * o.scaleX) / 2\r\n // } else if (direction === 'right-to-left') {\r\n // o.left = self.page.width + (o.width * o.scaleX) / 2\r\n // } else if (direction === 'bottom-to-top') {\r\n // o.top = self.page.height + (o.height * o.scaleY) / 2\r\n // } else if (direction === 'top-to-bottom') {\r\n // o.top = (-o.height * o.scaleY) / 2\r\n // }\r\n // // console.log(duration2)\r\n // // console.log(o.left)\r\n // o.animate(reference, target, {\r\n // duration: duration2,\r\n // abort: function () {\r\n // if (!self.page) {\r\n // self.stopObjectAnimationFrame(id, 'scrollingObject')\r\n // return true\r\n // }\r\n // },\r\n // onChange: function () {\r\n // o[reference] *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // },\r\n // onComplete: function () {\r\n // if (!self.page) return\r\n // // if (direction === \"left-to-right\") {\r\n // // o.left = -o.width * o.scaleX / 2;\r\n // // } else if (direction === \"right-to-left\") {\r\n // // o.left = self.options.pageWidth + o.width * o.scaleX / 2;\r\n // // } else if (direction === \"bottom-to-top\") {\r\n // // o.top = self.options.pageHeight + o.height * o.scaleY / 2;\r\n // // } else if (direction === \"top-to-bottom\") {\r\n // // o.top = -o.height * o.scaleY / 2;\r\n // // }\r\n // onComplete()\r\n // }\r\n // })\r\n // }\r\n // })\r\n // },\r\n\r\n popObject: function (self, block) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected],\r\n pageSelected = self.reader.pageSelected\r\n // if (self.reader.isStudio) {\r\n // pageScale =\r\n // self.reader.pageScales[self.reader.pageSelected] *\r\n // self.reader.project.pageScale[self.reader.pageSelected]\r\n // }\r\n\r\n if (o.pop) return\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n o.originalScaleY = o.scaleY\r\n o.pop = true\r\n block['soundUrl'] = '/sounds/pop-effect.wav'\r\n block['volume'] = 30\r\n block['pageNumber'] = self.reader.pageSelected\r\n block['dontAddToActiveStack'] = true\r\n self.playSoundEffectBlock(self, block)\r\n o.animate('scaleY', o.scaleY * 1.2, {\r\n duration: 100,\r\n easing: fabric.util.ease.easeOutExpo,\r\n abort: function () {\r\n \r\n \r\n\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n \r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n\r\n },\r\n onChange: function () {\r\n //readjusting in case of page re-scaling\r\n o.scaleY *=\r\n self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function onComplete() {\r\n if (self.page != null) {\r\n o.animate('scaleY', o.originalScaleY, {\r\n duration: 400,\r\n easing: fabric.util.ease.easeOutElastic,\r\n abort: function () { \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n //readjusting in case of page re-scaling\r\n o.scaleY *=\r\n self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n if (self.page) {\r\n if (o.scaleY != o.originalScaleY) {\r\n onComplete()\r\n } else {\r\n o.pop = false\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n if (!block['dontPopActiveStack']) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n self.checkIfEventCodeIsCompleted(block)\r\n }\r\n // o.originY = 'center'\r\n // typeof callback === 'function' && callback()\r\n }\r\n }\r\n }\r\n })\r\n // self.stopObjectAnimationFrame(id, 'popObject')\r\n }\r\n }\r\n })\r\n\r\n },\r\n\r\n bounceBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n let pageSelected = self.reader.pageSelected\r\n\r\n if (o.bounce) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.bounce', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n o.bounce = true\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n\r\n o.animate(\r\n 'top',\r\n o.top - 100 * self.reader.pageScales[self.reader.pageSelected], {\r\n duration: 700,\r\n easing: fabric.util.ease.easeOutExpo,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.bounce = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n \r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n },\r\n onChange: function() {\r\n \r\n self.testCollision(self, block, o)\r\n \r\n //readjusting in case of page re-scaling\r\n // o.left *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function onComplete() {\r\n if (self.page != null) {\r\n o.animate(\r\n 'top',\r\n // o.top == o.originalTop ?\r\n // o.top -\r\n // 100 * self.reader.pageScales[self.reader.pageSelected] :\r\n // o.top +\r\n // 100 * self.reader.pageScales[self.reader.pageSelected],\r\n o.top + 100 * self.reader.pageScales[self.reader.pageSelected], {\r\n duration: 700,\r\n easing: fabric.util.ease.easeOutBounce,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.bounce = false\r\n \r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n \r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n\r\n },\r\n onChange: function() {\r\n self.testCollision(self, block, o)\r\n // //readjusting in case of page re-scaling\r\n // o['top'] *=\r\n // self.reader.pageScales[self.reader.pageSelected] /\r\n // pageScale\r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.bounce = false\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (c) return\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n }\r\n )\r\n }\r\n }\r\n }\r\n )\r\n\r\n },\r\n\r\n fadeBlock: function (self, block, callback) {\r\n\r\n\r\n if (!this.page) return\r\n\r\n let shift = 0,\r\n o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected],\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (!o) return\r\n if (o.fade) return\r\n \r\n if (o.type === 'textbox') {\r\n o.ownCaching = false\r\n o.objectCaching = false\r\n }\r\n\r\n \r\n // o.ownCaching = false\r\n // o.objectCaching = false\r\n \r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n let effect = 0\r\n if (block[\"effect\"] == 'fade in') {\r\n effect = o._originalProperties.opacity * 100\r\n // effect = 100\r\n }\r\n\r\n if (o.visible && effect != 0) {\r\n o.visible = false\r\n o.opacity = 0\r\n }\r\n\r\n if (!o.visible && effect == 0) {\r\n o.visible = true\r\n o.opacity = o._originalProperties.opacity\r\n // o.opacity = 1\r\n }\r\n\r\n // if (o.visible && effect != 0 || !o.visible && effect == 0) {\r\n\r\n // const t = self.checkIfEventCodeIsCompleted(block)\r\n\r\n // if (t) return\r\n\r\n // if (typeof callback == 'function') {\r\n // typeof callback === 'function' && callback()\r\n // }\r\n // return\r\n // }\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n\r\n if (effect == 100) {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeIn', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n } else {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeOut', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n }\r\n }\r\n\r\n if (block[\"direction\"] === 'right-to-left') {\r\n block[\"direction\"] = 'left'\r\n if (!o.visible) {\r\n o.left += 20 * pageScale\r\n }\r\n\r\n shift = -20\r\n } else if (block[\"direction\"] === 'left-to-right') {\r\n block[\"direction\"] = 'left'\r\n if (!o.visible) {\r\n o.left -= 20 * pageScale\r\n }\r\n shift = 20\r\n } else if (block[\"direction\"] === 'top-to-bottom') {\r\n block[\"direction\"] = 'top'\r\n if (!o.visible) {\r\n o.top -= 20 * pageScale\r\n }\r\n shift = 20\r\n } else if (block[\"direction\"] === 'bottom-to-top') {\r\n block[\"direction\"] = 'top'\r\n if (!o.visible) {\r\n o.top += 20 * pageScale\r\n }\r\n shift = -20\r\n }\r\n\r\n o.setCoords()\r\n o.fade = true\r\n self.reader.timeouts.push(\r\n setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n\r\n let animateParams = {\r\n opacity: effect / 100\r\n }\r\n \r\n if (block[\"direction\"] != 'none') {\r\n animateParams[block[\"direction\"]] = parseInt(o[block[\"direction\"]]) + shift * self.reader.pageScales[self.reader.pageSelected]\r\n }\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.visible = true\r\n o.animate(animateParams, {\r\n duration: 710,\r\n easing: fabric.util.ease.easeOutQuart,\r\n abort: function () {\r\n\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.fade = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n\r\n },\r\n onChange: function () {\r\n self.testCollision(self, block, o)\r\n },\r\n onComplete: function onComplete() {\r\n \r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n if (effect === 0) {\r\n o.visible = false\r\n }\r\n o.fade = false\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n }\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n }, 500)\r\n )\r\n },\r\n\r\n textEffectBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) return\r\n if (o.texteffect1) return\r\n\r\n \r\n\r\n let textLength = 0\r\n for (var i = 0; i < o._unwrappedTextLines.length; i++) {\r\n for (var j = 0; j < o._unwrappedTextLines[i].length; j++) {\r\n textLength += 1\r\n }\r\n }\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n \r\n o._renderTextCommon(o.canvas.getContext('2d'), 'fillText')\r\n // this._renderTextCommon(ctx, 'fillText')\r\n\r\n o.texteffect1 = true\r\n \r\n o.originalStyles = JSON.parse(JSON.stringify(o.styles))\r\n\r\n let s = {\r\n fill: new fabric.Color(o.fill).setAlpha(0).toRgba()\r\n // fill: this.hexToRGBA(o.fill, 0),\r\n }\r\n\r\n // if (block[\"effect\"] == 'pop') {\r\n // s['fontSize'] = 0\r\n // }\r\n\r\n // get text color and convert to rgba\r\n o.setSelectionStyles(s, 0, o.text.length)\r\n\r\n let pageSelected = self.reader.pageSelected\r\n\r\n if (!o.fade) {\r\n let fade_options = JSON.parse(JSON.stringify(block))\r\n fade_options.effect = 'fade in'\r\n fade_options.direction = 'none'\r\n fade_options.dontAddToActiveStack = true\r\n self.fadeBlock(this, fade_options)\r\n }\r\n \r\n let speed = 40\r\n if (block[\"speed\"] == 'fast') {\r\n speed = 60\r\n } else if (block[\"speed\"] == 'medium') {\r\n speed = 100\r\n } else if (block[\"speed\"] == 'slow') {\r\n speed = 200\r\n }\r\n\r\n if (block[\"effect\"] == 'typeWriter') {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.typeTextEffect', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n } else {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeTextEffect', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n }\r\n\r\n self.reader.timeouts.push(\r\n setTimeout(() => {\r\n\r\n self.reader.timeouts.pop()\r\n\r\n // necessary to avoid text flickering and text not being rendered\r\n if (o.type === 'textbox') {\r\n o.objectCaching = false\r\n }\r\n \r\n if (\r\n block[\"effect\"] == 'typeWriter' ||\r\n block[\"effect\"] == 'scrap'\r\n ) {\r\n\r\n o.texteffect2 = true\r\n\r\n let s = {\r\n speed: speed,\r\n pageSelected: pageSelected,\r\n block: block,\r\n textLength: textLength\r\n }\r\n\r\n self.typeTextEffect(o, 0, 0, 0, o._originalProperties.opacity, s,\r\n function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n if (pageSelected == self.reader.pageSelected) {\r\n o.texteffect1 = false\r\n o.texteffect2 = false\r\n if (o.type === 'textbox') o.objectCaching = true\r\n \r\n o.styles = JSON.parse(JSON.stringify(o.originalStyles))\r\n \r\n delete o.originalStyles\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n )\r\n return\r\n // } else if (block[\"effect\"] == 'fadeIn') {\r\n }\r\n\r\n let s = {\r\n totalSteps: 30,\r\n speed: speed,\r\n pageSelected: pageSelected,\r\n textLength: textLength,\r\n block: block\r\n }\r\n\r\n // here, adjust speed if necessary\r\n if (block[\"effect\"] == 'pop') {\r\n\r\n } else if (block[\"effect\"] == 'pan') {\r\n // horizontal slide in\r\n } else if (block[\"effect\"] == 'rise') {\r\n // vertical slide in\r\n } else if (block[\"effect\"] == 'wave') {\r\n // fade in then grow fontsize\r\n s[\"totalSteps\"] = 300\r\n } else if (block[\"effect\"] == 'tumble') {\r\n // rotate letter while slide in \r\n // s[\"totalSteps\"] = 20\r\n // s[\"speed\"] = s[\"speed\"] / 2\r\n o.tumbleAnimation = true\r\n } else if (block[\"effect\"] == 'flipObject') {\r\n o.flipAnimation = true\r\n } else if (block[\"effect\"] == 'scrap') {\r\n // pop up in random position then set in right position\r\n } else if (block[\"effect\"] == 'stomp') {\r\n // like pop but all char pop at the same time\r\n } else if (block[\"effect\"] == 'starfall') {\r\n \r\n } else if (block[\"effect\"] == 'breathe') {\r\n o.breatheAnimation = true\r\n s[\"totalSteps\"] = 150\r\n } else if (block[\"effect\"] == 'whirlpool') {\r\n o.whirlpoolAnimation = true\r\n } else if (block[\"effect\"] == 'roll') {\r\n o.rollAnimation = true\r\n s[\"totalSteps\"] = 60\r\n s[\"thirdSteps\"] = s[\"totalSteps\"] / 3\r\n }\r\n\r\n self.fadeTextEffect(o, -1, 0, -1, s,\r\n function () {\r\n // end animation\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n if (self.page && pageSelected == self.reader.pageSelected && o.originalStyles) {\r\n delete o.texteffect1\r\n delete o.texteffect2\r\n delete o.breatheAnimation\r\n delete o.whirlpoolAnimation\r\n delete o.tumbleAnimation\r\n delete o.flipAnimation\r\n delete o.rollAnimation\r\n if (o.type === 'textbox') o.objectCaching = true\r\n \r\n o.styles = JSON.parse(JSON.stringify(o.originalStyles))\r\n delete o.originalStyles\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n )\r\n \r\n }, 1000)\r\n )\r\n },\r\n\r\n typeTextEffect: function (o, lineIndex, charIndex, index, opacity, options, callback) {\r\n \r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n if (o._text[index] == \"\\n\") {\r\n // skip line break\r\n index++\r\n charIndex++\r\n }\r\n\r\n const urls = [\r\n '/sounds/typewriter-1.mp3',\r\n '/sounds/typewriter-2.mp3',\r\n '/sounds/typewriter-3.mp3',\r\n '/sounds/typewriter-4.mp3',\r\n '/sounds/typewriter-5.mp3',\r\n '/sounds/typewriter-6.mp3',\r\n '/sounds/typewriter-7.mp3',\r\n '/sounds/typewriter-8.mp3'\r\n ]\r\n\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n\r\n this.reader.timeouts.pop()\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n return\r\n }\r\n \r\n // index++\r\n // charIndex++\r\n if (o._unwrappedTextLines[lineIndex][charIndex] == undefined) {\r\n charIndex = 0\r\n // index = index - 1\r\n lineIndex++\r\n }\r\n \r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n return\r\n }\r\n\r\n if (options.block.effect == \"typeWriter\") {\r\n this.playSoundEffectBlock(\r\n this, {\r\n url: urls[Math.floor(Math.random() * urls.length)],\r\n volume: 20,\r\n pageSelected: options.pageSelected,\r\n eventCode: options.block[\"eventCode\"],\r\n dontAddToActiveStack: true\r\n }\r\n )\r\n }\r\n\r\n var style = {}\r\n style[\"fill\"] = new fabric.Color(o.originalStyles[lineIndex][charIndex].fill).toRgba()\r\n\r\n if (options.block.effect == \"scrap\") {\r\n style[\"deltaX\"] = this.getRandomNumber(400)\r\n style[\"deltaY\"] = this.getRandomNumber(400)\r\n }\r\n\r\n o.setSelectionStyles(\r\n style,\r\n index,\r\n index + 1\r\n )\r\n // }\r\n\r\n if (options.block.effect == \"scrap\") {\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n \r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n this.reader.timeouts.pop()\r\n o.setSelectionStyles({\r\n deltaX: 0,\r\n deltaY: 0\r\n },\r\n index,\r\n index + 1\r\n )\r\n \r\n if (index < options.textLength - 1) return\r\n \r\n typeof callback === 'function' && callback()\r\n\r\n }, options.speed * 10)\r\n )\r\n }\r\n \r\n if (index < o.text.length - 1) {\r\n // if (index < options.textLength - 1) {\r\n\r\n this.typeTextEffect(o, lineIndex, charIndex + 1, index + 1, opacity, options, function () {\r\n typeof callback === 'function' && callback()\r\n })\r\n } else if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n }, options.speed)\r\n )\r\n },\r\n\r\n fadeTextEffect: function (o, index, lineIndex, charIndex, options, callback) {\r\n\r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n return\r\n }\r\n\r\n index++\r\n charIndex++\r\n\r\n if (o._text[index] == \"\\n\") {\r\n // skip line break\r\n index++\r\n charIndex++\r\n }\r\n\r\n if (o._unwrappedTextLines[lineIndex][charIndex] == undefined) {\r\n charIndex = 0\r\n lineIndex++\r\n }\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n return\r\n }\r\n \r\n const _index = index\r\n const _lineIndex = lineIndex\r\n const _charIndex = charIndex\r\n\r\n o.isAnimating = true\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n \r\n this.reader.timeouts.pop()\r\n if (o.objectCaching && o.type === 'textbox') o.objectCaching = false\r\n \r\n if (index < o.text.length) {\r\n \r\n this.fadeTextEffect(o, _index, _lineIndex, _charIndex, options, function () {\r\n typeof callback === 'function' && callback()\r\n })\r\n }\r\n }, options.speed)\r\n )\r\n\r\n // this.fadeCharEffect(o, index, opacity, opacity / 30, 0, pageSelected, 0, block, function () {\r\n\r\n \r\n this.fadeCharEffect(o, _index, _lineIndex, _charIndex, 0, options, function () {\r\n o.isAnimating = false\r\n typeof callback === 'function' && callback()\r\n })\r\n },\r\n\r\n _fadeCharEffect: function (o, index, lineIndex, charIndex, step, options, callback) {\r\n\r\n if (this.reader.pageSelected != options.pageSelected)\r\n return;\r\n \r\n if (o.originalStyles && o.originalStyles[lineIndex] && o.originalStyles[lineIndex][charIndex]) {\r\n \r\n var style = {};\r\n\r\n if (step < 11) {\r\n style[\"fill\"] = new fabric.Color(o.originalStyles[lineIndex][charIndex].fill).setAlpha(step / 10).toRgba()\r\n }\r\n\r\n if (options.block[\"effect\"] == 'pop') {\r\n style[\"fontSize\"] = o.originalStyles[lineIndex][charIndex].fontSize * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'pan') {\r\n // horizontal slide in\r\n style[\"deltaX\"] = 1 - options.totalSteps / step;\r\n } else if (options.block[\"effect\"] == 'rise') {\r\n // vertical slide in\r\n style[\"deltaY\"] = options.totalSteps / step - 1;\r\n } else if (options.block[\"effect\"] == 'wave') {\r\n // fade in then grow fontsize\r\n style[\"fontSize\"] = o.originalStyles[lineIndex][charIndex].fontSize * this.easeOutElastic(step / options.totalSteps);\r\n // } else if (options.block[\"effect\"] == 'tumble') {\r\n // rotate letter while slide in\r\n // if (index % 2 == 1) {\r\n // style[\"deltaX\"] = options.totalSteps / step - 1\r\n // style[\"angle\"] = 360 * step / options.totalSteps\r\n // } else {\r\n // style[\"deltaX\"] = 1 - options.totalSteps / step \r\n // style[\"angle\"] = -360 * step / options.totalSteps\r\n // }\r\n } else if (options.block[\"effect\"] == 'flipObject') {\r\n style[\"angle\"] = 360 * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'whirlpool') {\r\n // rotate letter while slide in\r\n style[\"angle\"] = 360 * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'scrap') {\r\n // pop up in random position then set in right position\r\n } else if (options.block[\"effect\"] == 'stomp') {\r\n // like pop but all char pop at the same time\r\n } else if (options.block[\"effect\"] == 'starfall') {\r\n style[\"deltaY\"] = -500 * this.easeInBounce((options.totalSteps - step) / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'breathe') {\r\n // const t = o.originalStyles[options.loc[\"lineIndex\"].toString()][options.loc[\"charIndex\"].toString()].fontSize / 2;\r\n const t = o.originalStyles[lineIndex][charIndex].fontSize / 2;\r\n\r\n style[\"fontSize\"] = t + t * this.easeOutBack(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'roll') {\r\n if (options.thirdSteps >= step) {\r\n // fade in + vert down to 0\r\n style[\"deltaY\"] = -100 * ((options.thirdSteps - step) / options.thirdSteps);\r\n let c = step / options.thirdSteps * 0.6\r\n if (c > 1) {\r\n c = 1\r\n }\r\n } else if (options.thirdSteps < step && 2 * options.thirdSteps >= step) {\r\n \r\n style[\"deltaY\"] = 100 * ((step - options.thirdSteps) / options.thirdSteps);\r\n\r\n } else {\r\n const t = 2 * options.thirdSteps;\r\n style[\"deltaY\"] = -100 * ((options.thirdSteps - (step - t)) / options.thirdSteps);\r\n\r\n }\r\n\r\n }\r\n \r\n o.setSelectionStyles(style, index, index + 1);\r\n }\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n this.reader.timeouts.pop();\r\n \r\n if (options.totalSteps > step) {\r\n step += 1;\r\n this.fadeCharEffect(o, index, lineIndex, charIndex, step, options, function () {\r\n typeof callback === 'function' && callback();\r\n });\r\n } else if (index >= options.textLength - 1) {\r\n typeof callback === 'function' && callback();\r\n }\r\n }, 30)\r\n );\r\n },\r\n get fadeCharEffect () {\r\n return this._fadeCharEffect;\r\n },\r\n set fadeCharEffect (value) {\r\n this._fadeCharEffect = value;\r\n },\r\n\r\n getRandomNumber: function(max) {\r\n const rand_sign = Math.random()\r\n let sign = 1\r\n if (rand_sign > 0.5) {\r\n sign = -1\r\n }\r\n\r\n return sign * Math.floor(Math.random() * max)\r\n\r\n },\r\n\r\n easeOutExpo: function(x) {\r\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\r\n },\r\n\r\n easeInExpo: function(x) {\r\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\r\n },\r\n\r\n easeOutBack: function (x) {\r\n const c1 = 1.70158;\r\n const c3 = c1 + 1;\r\n\r\n return 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2);\r\n },\r\n\r\n easeInQuint: function (x) {\r\n // return 1 - Math.pow(1 - x, 5);\r\n // return x * x * x * x * x;\r\n return x * x * x * x * x;\r\n },\r\n\r\n easeOutQuint: function (x) {\r\n return 1 - Math.pow(1 - x, 5);\r\n },\r\n\r\n easeOutBounce: function(x) {\r\n const n1 = 7.5625;\r\n const d1 = 2.75;\r\n \r\n if (x < 1 / d1) {\r\n return n1 * x * x;\r\n } else if (x < 2 / d1) {\r\n return n1 * (x -= 1.5 / d1) * x + 0.75;\r\n } else if (x < 2.5 / d1) {\r\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\r\n } else {\r\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\r\n }\r\n },\r\n\r\n easeInBounce: function(x) {\r\n return 1 - this.easeOutBounce(1 - x);\r\n },\r\n \r\n easeInElastic: function(x) {\r\n const c4 = (2 * Math.PI) / 3;\r\n\r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\r\n },\r\n\r\n\r\n easeOutElastic: function (x) {\r\n const c4 = (2 * Math.PI) / 3;\r\n\r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1;\r\n },\r\n\r\n easeInOutElastic: function(x) {\r\n const c5 = (2 * Math.PI) / 4.5;\r\n \r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : x < 0.5\r\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2\r\n : (Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\r\n },\r\n \r\n hexToRGBA: function (hex, opacity) {\r\n hex = hex.replace('#', '')\r\n const r = parseInt(hex.substring(0, 2), 16),\r\n g = parseInt(hex.substring(2, 4), 16),\r\n b = parseInt(hex.substring(4, 6), 16),\r\n result = 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')'\r\n return result\r\n },\r\n\r\n blinkBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (o.blink) return\r\n o.blink = true\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.blink', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n o.animate('opacity', 0, {\r\n duration: 700,\r\n easing: fabric.util.ease.easeInExpo,\r\n abort: function () { \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onComplete: function onComplete() {\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.animate('opacity', o._originalProperties.opacity, {\r\n duration: 700,\r\n easing: fabric.util.ease.easeInExpo,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.blink = false\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n } else {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n }\r\n }\r\n })\r\n } else {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n }\r\n }\r\n })\r\n },\r\n\r\n animateSpineBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n if (block[\"name\"] == 'none') return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (!o) return\r\n o.endless = true\r\n // o.skeleton.updateCache()\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n if (o.state.tracks[0]) {\r\n // o.state.data.setMix(o.state.tracks[0].name, options.animation, 0.5)\r\n } else {\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'animateSpineObject')\r\n }\r\n o.state.setAnimation(0, block[\"name\"], o.endless)\r\n o.state.tracks[0].name = block[\"name\"]\r\n\r\n this.appendLogMsg(this.reader.$tc('reader.inspect.animateSpine', \r\n parseInt(block[\"duration\"]),\r\n {\r\n name: this.getObjectBlockName(o),\r\n animation: block['name'],\r\n duration: block['duration']\r\n }\r\n ))\r\n\r\n // return\r\n self.reader.timeouts.push(\r\n setTimeout(function () {\r\n self.reader.timeouts.pop()\r\n if (pageSelected != self.reader.pageSelected) return\r\n if (!o.state.tracks[0]) return\r\n \r\n if (parseInt(block[\"duration\"]) == 0) return\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n //check if object must stop being animated\r\n // if (\r\n // o.state.tracks[0].name != block[\"animation\"] &&\r\n // o.state.tracks[0].name != 'none'\r\n // ) {\r\n // self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n // // if (typeof callback !== 'function') {\r\n // self.checkIfEventCodeIsCompleted(block)\r\n // // }\r\n // return\r\n // }\r\n\r\n // self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n //stop all animations\r\n o.state.clearTrack(0)\r\n\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'animateSpineObject')\r\n\r\n typeof callback === 'function' && callback()\r\n \r\n }, parseInt(block[\"duration\"] * 1000))\r\n )\r\n },\r\n\r\n setVarVal: function (self, block, callback) {\r\n \r\n if (block[\"nameA\"] == \"none\") {\r\n callback()\r\n return\r\n } \r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n // check if nameB is undefined\r\n // if yes, block is\r\n if (typeof block[\"nameB\"] == 'object') {\r\n if (block[\"nameB\"].showplaceholder) {\r\n block[\"nameB\"] = ''\r\n } else {\r\n block[\"nameB\"] = block[\"nameB\"].text \r\n }\r\n } else if (typeof block[\"nameB\"] == 'string') {\r\n block[\"nameB\"] = this.transformStringValue(block[\"nameB\"])\r\n }\r\n \r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n // if variable is equal to variable block\r\n if (block[\"cssClass\"] == \"textVariableEqualsVariableBlock\" || block[\"cssClass\"] == \"numberVariableEqualsVariableBlock\" || block[\"cssClass\"] == \"booleanVariableEqualsVariableBlock\"){\r\n // get variable B current value\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = this.reader.global_variables[block[\"nameB\"]]['value']\r\n // this.reader.$set(this.reader.global_variables[block[\"nameA\"]], 'value', this.reader.global_variables[block[\"nameB\"]]['value'])\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: this.reader.global_variables[block[\"nameB\"]]['value'],\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n \r\n this.appendLogMsg(this.reader.$t('reader.inspect.setVarVal', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameB\"]]['value']\r\n }))\r\n }else{\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = block[\"nameB\"]\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: block[\"nameB\"],\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setVarVal', {\r\n variable: block[\"nameA\"],\r\n value: block['nameB']\r\n }))\r\n\r\n }\r\n\r\n this.updateObjectsTextValue(true, block)\r\n // check for wait for glow list\r\n for (var i = 0, l = this.reader.waitForGlowList.length; i < l; i++) {\r\n // update condition\r\n var conn = this.getBlockConnections(this.reader.waitForGlowList[i][\"event_id\"])\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n this.reader.waitForGlowList[i].condition = this.generateConditionCode(conn[m][\"source\"][\"node\"])\r\n break\r\n }\r\n\r\n // retest glowobject\r\n var layout_obj = this.page.getItemById(this.reader.waitForGlowList[i].obj_id)\r\n if (layout_obj) {\r\n this.glowObject(\r\n this,\r\n layout_obj,\r\n this.reader.waitForGlowList[i].condition,\r\n block['id'],\r\n block['glow']\r\n )\r\n }\r\n }\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n typeof callback === 'function' && callback()\r\n }, 600))\r\n },\r\n\r\n numberVariableEqualsRandomBlock: function (self, block, callback) {\r\n \r\n if (block[\"nameA\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n var nameB = this.isValueAVariableField(block[\"nameB\"])\r\n if (!this.isNumber(nameB, true)) return\r\n\r\n var nameC = this.isValueAVariableField(block[\"nameC\"])\r\n if (!this.isNumber(nameC, true)) return\r\n\r\n nameB.value = Math.floor(parseInt(nameB.value))\r\n nameC.value = Math.ceil(parseInt(nameC.value))\r\n // block[\"nameC\"] = Math.ceil(parseInt(block[\"nameC\"]))\r\n // block[\"nameB\"] = Math.floor(parseInt(block[\"nameB\"]))\r\n\r\n // window[options.variable] = Math.floor(Math.random() * (options.max - options.min)) + options.min\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = Math.floor(Math.random() * (block[\"nameB\"] + 1 - block[\"nameC\"])) + block[\"nameC\"]\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: Math.floor(Math.random() * (nameB.value + 1 - nameC.value)) + nameC.value,\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n // post message in log if inspectmode == true\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setRandomValue', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.setCookie(\r\n block[\"nameA\"],\r\n this.reader.global_variables[block[\"nameA\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n incrementBlock: function (self, block, callback) {\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n var value = this.isValueAVariableField(block[\"value\"])\r\n if (!this.isNumber(value, true)) return\r\n\r\n // this.reader.global_variables[block[\"variable\"]]['value'] = parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) + parseInt(block[\"value\"])\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) + parseInt(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.increment', {\r\n variable: block[\"variable\"],\r\n value: block['value']\r\n }))\r\n\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n decrementBlock: function (self, block, callback) {\r\n\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n let value = this.isValueAVariableField(block[\"value\"])\r\n if (!this.isNumber(value, true)) return\r\n \r\n // this.reader.global_variables[block[\"variable\"]]['value'] = parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) - parseInt(block[\"value\"])\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) - parseInt(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.decrement', {\r\n variable: block[\"variable\"],\r\n value: block['value']\r\n }))\r\n\r\n this.updateObjectsTextValue(true, block)\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n insertTextBlock: function (self, block, callback) {\r\n\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n let value = this.isValueAVariableField(block[\"value\"])\r\n value.value = value.value.toString() \r\n\r\n if (block[\"operation\"] != \"prepend\") {\r\n // this.reader.global_variables[block[\"variable\"]][\"value\"] = this.reader.global_variables[block[\"variable\"]][\"value\"].toString().concat(block['value'])\r\n\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: this.reader.global_variables[block[\"variable\"]][\"value\"].toString().concat(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n // post message in log if inspectmode == true\r\n this.appendLogMsg(this.reader.$t('reader.inspect.insertTextBefore', {\r\n variable: block[\"variable\"],\r\n value: value.value\r\n }))\r\n } else {\r\n // this.reader.global_variables[block[\"variable\"]][\"value\"] = block[\"value\"].concat(this.reader.global_variables[block[\"variable\"]].toString())\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: value.value.concat(this.reader.global_variables[block[\"variable\"]].toString()),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n this.appendLogMsg(this.reader.$t('reader.inspect.insertTextBefore', {\r\n variable: block[\"variable\"],\r\n value: value.value\r\n }))\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n \r\n\r\n this.updateObjectsTextValue(true, block)\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n setObjAttr: function (id, attribute, value, __callback) {\r\n // if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n\r\n let o = this.page.getItemById(id)\r\n if (!o) return\r\n switch (attribute) {\r\n case 'background color':\r\n attribute = 'backgroundColor'\r\n break\r\n case 'text fill color':\r\n attribute = 'fill'\r\n break\r\n case 'text stroke color':\r\n attribute = 'stroke'\r\n break\r\n case 'flip horizontally':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'flipX'\r\n break\r\n case 'flip vertically':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'flipY'\r\n break\r\n case 'font family':\r\n attribute = 'fontFamily'\r\n break\r\n case 'font size':\r\n attribute = 'fontSize'\r\n break\r\n case 'font style':\r\n attribute = 'fontStyle'\r\n break\r\n case 'lock movement':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'lockMovementX'\r\n break\r\n case 'text alignment':\r\n attribute = 'textAlign'\r\n break\r\n case 'source image':\r\n attribute = 'src'\r\n break\r\n // case \"background color\":\r\n }\r\n switch (attribute) {\r\n case 'text':\r\n o.text = value.toString()\r\n break\r\n case 'backgroundColor':\r\n o.set('backgroundColor', value)\r\n break\r\n case 'editable':\r\n o.editable = value\r\n break\r\n case 'fill':\r\n o.setColor(value)\r\n break\r\n case 'stroke':\r\n o.stroke = value\r\n break\r\n case 'flipX':\r\n o.flipX = value\r\n break\r\n case 'flipY':\r\n o.flipY = value\r\n break\r\n case 'fontFamily':\r\n o.fontFamily = '\"' + value + '\"'\r\n break\r\n case 'fontSize':\r\n o.fontSize = value\r\n break\r\n case 'fontStyle':\r\n o.fontStyle = value\r\n break\r\n case 'height':\r\n o.height = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'left':\r\n o.left = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'lockMovementX':\r\n o.lockMovementY = value\r\n o.lockMovementX = value\r\n break\r\n case 'opacity':\r\n value /= 100\r\n if (value > 1) {\r\n value = 1\r\n } else if (value < 0) {\r\n value = 0\r\n }\r\n o.opacity = value\r\n break\r\n case 'shadow':\r\n if (value === true) {\r\n o.shadow = this.shadow\r\n } else {\r\n o.shadow = null\r\n }\r\n\r\n break\r\n case 'textAlign':\r\n value = value.toLowerCase()\r\n o.textAlign = value\r\n break\r\n case 'top':\r\n o.top = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'width':\r\n o.width = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'src':\r\n o.srcArray.forEach(function (e) {\r\n if (e.title === value) {\r\n o.setSrc(e.url, function () {})\r\n return\r\n }\r\n })\r\n this.popObject(this, o.id)\r\n break\r\n }\r\n o.setColor(o.fill)\r\n o.setCoords()\r\n this.page.requestRenderAll()\r\n typeof __callback === 'function' && __callback()\r\n },\r\n\r\n glowObject: function (self, o, condition, eventId, makeObjectGlow) {\r\n\r\n if (!self.page) return\r\n\r\n var pageSelected = self.reader.pageSelected\r\n\r\n if (eventId) {\r\n this.reader.waitForGlowList.push({\r\n obj_id: o.id,\r\n condition: condition,\r\n event_id: eventId\r\n })\r\n // this.reader.waitForGlowList[eventId] = condition\r\n }\r\n\r\n if (this.parseBoolStr(condition) == false) {\r\n o.hoverCursor = 'default'\r\n o.stopGlow = true\r\n return\r\n }\r\n\r\n if (o.isGlowing) return\r\n\r\n o.hoverCursor = 'pointer'\r\n\r\n if (\r\n o.type == 'Textbutton' ||\r\n o.type == 'Quiz' ||\r\n o.type == 'Spine' ||\r\n o.type == 'textbox' ||\r\n o.type == 'textfield'\r\n )\r\n return\r\n\r\n if (makeObjectGlow == false) return\r\n\r\n self.startObjectAnimationFrame(o.id, 'glowObject')\r\n o.isGlowing = true\r\n o.stopGlow = false\r\n \r\n o.setShadow(self.glow)\r\n o.animate('shadow.blur', 30, {\r\n duration: 1000,\r\n easing: fabric.util.ease.easeInQuad,\r\n abort: function () {\r\n \r\n if (!o) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n o.isGlowing = false\r\n return true\r\n }\r\n\r\n if (!o.evented || !self.page || o.stopGlow || pageSelected != self.reader.pageSelected) {\r\n o.setShadow({\r\n offsetX: 0,\r\n offsetY: 0,\r\n blur: 0,\r\n color: 'rgba(0,0,0,0.3)',\r\n opacity: 0.6\r\n })\r\n o.hoverCursor = 'default'\r\n o.clicked = false\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n }\r\n },\r\n onComplete: function onComplete() {\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return\r\n }\r\n\r\n if (!o.shadow || o.stopGlow || !o.evented) {\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return\r\n }\r\n\r\n o.animate('shadow.blur', o.shadow.blur === 30 ? 1 : 30, {\r\n duration: 1000,\r\n easing: fabric.util.ease.easeOutQuad,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n }\r\n\r\n if (!o.evented || !self.page || o.stopGlow) {\r\n o.hoverCursor = 'default'\r\n o.setShadow({\r\n offsetX: 0,\r\n offsetY: 0,\r\n blur: 0,\r\n color: 'rgba(0,0,0,0.3)',\r\n opacity: 0.6\r\n })\r\n o.clicked = false\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n } \r\n \r\n },\r\n onComplete: onComplete\r\n })\r\n }\r\n })\r\n },\r\n\r\n playSoundEffectBlock: function (self, block, callback) {\r\n // if (options.pageSelected != self.reader.pageSelected) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n }\r\n \r\n const pageSelected = self.reader.pageSelected\r\n\r\n if (typeof block[\"volume\"] == 'string') {\r\n block[\"volume\"] = parseInt(block[\"volume\"].slice(0, 2))\r\n }\r\n\r\n let soundUrl = block[\"url\"]\r\n if (block[\"soundUrl\"]){\r\n // case of change image, we use url for the image path => we want another another keyname for the sound url\r\n soundUrl = block[\"soundUrl\"]\r\n }\r\n\r\n if (block[\"dontAddToActiveStack\"] == undefined) {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playSoundEffect', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n }\r\n // Check if the value is greater than 1\r\n let volume = block[\"volume\"] / 50\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n var sound = new Howl({\r\n src: [soundUrl],\r\n volume: volume,\r\n // html5: true,\r\n preload: true,\r\n onload: function () {\r\n // if (options.pageSelected != self.reader.pageSelected) return\r\n self.reader.soundEffects.push(sound)\r\n sound.play()\r\n if (self.reader.mute) {\r\n sound.mute(true)\r\n }\r\n },\r\n onplay: function () {\r\n if (self.reader.soundEffects.length == 0) return\r\n if (pageSelected != self.reader.pageSelected) {\r\n for (var i = 0, l = self.reader.soundEffects.length; i < l; i++) {\r\n self.reader.soundEffects[i].unload()\r\n }\r\n }\r\n },\r\n onend: function () {\r\n self.reader.soundEffects.forEach(function (e, i) {\r\n if (e._src == block[\"url\"]) {\r\n self.reader.soundEffects.splice(i, 1)\r\n return\r\n }\r\n })\r\n if (pageSelected == self.reader.pageSelected) {\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n }\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n playRecordBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n const pageNumber = self.reader.pageSelected\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playRecord', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n\r\n // Check if the value is greater than 1\r\n let volume = parseInt(block[\"volume\"]) / 100\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n\r\n var sound = new Howl({\r\n src: [block[\"url\"]],\r\n // html5: true,\r\n preload: true,\r\n volume: volume,\r\n onload: function () {\r\n if (pageNumber != self.reader.pageSelected) return\r\n self.reader.recordSounds.push(sound)\r\n sound.play()\r\n if (self.reader.mute) {\r\n sound.mute(true)\r\n }\r\n },\r\n onplay: function () {\r\n if (self.reader.recordSounds.length == 0) return\r\n\r\n if (pageNumber != self.reader.pageSelected) {\r\n sound.unload()\r\n }\r\n },\r\n onend: function () {\r\n self.reader.recordSounds.forEach(function (e, i) {\r\n if (e._src == block[\"url\"]) {\r\n self.reader.recordSounds.splice(i, 1)\r\n return\r\n }\r\n })\r\n\r\n if (pageNumber == self.reader.pageSelected) {\r\n\r\n self.reader.displayNextPageHint(self.reader, pageNumber, 500)\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n stopMusicBlock: function (self, block, callback) {\r\n if (!this.reader.music) return\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.music.unload()\r\n this.reader.music = null\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.stopMusic'))\r\n\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n playMusicBlock: function (self, block, callback) {\r\n\r\n // if (options.pageNumber != self.reader.pageSelected) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let repeat = false\r\n if (block[\"repeat\"] == \"true\") {\r\n repeat = true\r\n }\r\n\r\n const pageNumber = self.reader.pageSelected\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playMusic', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n\r\n if (!self.reader.music) {\r\n let volume = parseInt(block[\"volume\"]) / 600\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n self.reader.music = new Howl({\r\n src: [block[\"url\"]],\r\n loop: repeat,\r\n volume: volume,\r\n // preload: true,\r\n // html5: true,\r\n onload: function () {\r\n if (!self.reader.music) return\r\n self.reader.music.play()\r\n if (self.reader.mute) {\r\n self.reader.music.mute(true)\r\n }\r\n // self.core.reader.music.fade(0, volume / 500, 1500);\r\n },\r\n onplay: function () {\r\n if (!self.reader.music) return\r\n if (self.reader.music._loop) return\r\n if (pageNumber != self.reader.pageSelected) {\r\n self.reader.music.unload()\r\n }\r\n },\r\n onend: function () {\r\n if (self.reader.music == null) return\r\n if (!self.reader.music._loop) {\r\n self.reader.music = null\r\n }\r\n\r\n if (pageNumber == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n } else if (self.reader.music._src != block[\"url\"]) {\r\n self.reader.music.fade(parseInt(block[\"volume\"]) / 600, 0, 2000)\r\n self.reader.timeouts.push(setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n let bg_sound = new Howl({\r\n src: [block[\"url\"]],\r\n loop: repeat,\r\n volume: parseInt(block[\"volume\"]) / 600,\r\n preload: true,\r\n // html5: true,\r\n onload: function () {\r\n if (!self.reader.music) return\r\n // setTimeout(function() {\r\n // if (self.reader.music) {\r\n self.reader.music.unload()\r\n // }\r\n self.reader.music = bg_sound\r\n bg_sound = null\r\n self.reader.music.play()\r\n if (self.reader.mute) {\r\n self.reader.music.mute(true)\r\n }\r\n // self.reader.music.fade(0, volume / 600, 2000)\r\n // }, 1500)\r\n },\r\n onplay: function () {\r\n if (!self.reader.music) return\r\n if (self.reader.music._loop) return\r\n if (pageNumber != self.reader.pageSelected) {\r\n self.reader.music.unload()\r\n }\r\n },\r\n onend: function () {\r\n if (!self.reader.music) return\r\n if (!self.reader.music._loop) {\r\n self.reader.music = null\r\n }\r\n if (pageNumber == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n }, 1500))\r\n }\r\n },\r\n\r\n changeImageBlock: function (self, block, callback) {\r\n\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n\r\n if (block[\"url\"].includes($nuxt.$store.state.imagePrefixPath)){\r\n block[\"url\"] = block[\"url\"]\r\n }else{\r\n block[\"url\"] = $nuxt.$store.state.imagePrefixPath + block[\"url\"]\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n if (o.src === block[\"url\"] || o.sourcePath === block[\"url\"]) {\r\n typeof callback === 'function' && callback()\r\n return\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.changeImage', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n if (o.type == 'group' || o.type == 'path') {\r\n block[\"url\"] = block[\"url\"].replace('/assets/', '/svgs/')\r\n block[\"url\"] = block[\"url\"] + '?x-request=html'\r\n\r\n o.sourcePath = block[\"url\"]\r\n o.objects = block[\"url\"]\r\n fabric.loadSVGFromURL(block[\"url\"], function (objects, options) {\r\n var obj = fabric.util.groupSVGElements(objects, block[\"url\"])\r\n o._objects = obj._objects\r\n })\r\n self.popObject(self, block)\r\n } else {\r\n o.setSrc(\r\n block[\"url\"],\r\n function () {\r\n self.popObject(self, block)\r\n typeof callback === 'function' && callback()\r\n }, {\r\n crossOrigin: 'Anonymous'\r\n }\r\n )\r\n }\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n },\r\n\r\n arithmeticCalculatorBlock: function (self, block, callback) {\r\n if (block[\"nameA\"] == \"none\" || block[\"nameB\"] == \"none\") {\r\n typeof callback === 'function' && callback()\r\n return\r\n }\r\n\r\n\r\n\r\n try {\r\n // this.reader.global_variables[block[\"nameB\"]]['value'] = String(eval(this.reader.global_variables[block[\"nameA\"]]['value']))\r\n this.reader.$set(this.reader.global_variables, block[\"nameB\"], \r\n {\r\n value: String(eval(this.reader.global_variables[block[\"nameA\"]]['value'])),\r\n type: this.reader.global_variables[block[\"nameB\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.calculate', {\r\n operation: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n } catch (e) {\r\n // this.reader.global_variables[block[\"nameB\"]]['value'] = 'error'\r\n this.reader.$set(this.reader.global_variables, block[\"nameB\"], \r\n {\r\n value: 'error',\r\n type: this.reader.global_variables[block[\"nameB\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.errors.cannotCalculate', {\r\n name: block[\"nameA\"],\r\n operation: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n }\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n textObjectEqualsVariableBlock: function (self, block, callback) {\r\n let obj = this.page.getItemById(block[\"obj_id\"])\r\n if (!obj) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.textObjEqualsVariable', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n\r\n this.newTransformStringValue(obj, '{{' + block[\"nameA\"] + '}}', obj.getSelectionStyles(0, obj.text.length, true))\r\n obj._originalProperties.text = obj.text\r\n\r\n const eventBlock = this.getBlock(block[\"eventCode\"])\r\n let pop = true\r\n if (eventBlock['cssClass'] == \"onPageStartBlock\") pop = false\r\n if (pop) {\r\n this.popObject(this, block)\r\n } else if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.testCollision(this, block, obj)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n textObjectEqualsValueBlock: function (self, block, callback) {\r\n let obj = this.page.getItemById(block[\"obj_id\"])\r\n if (!obj) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.textObjEqualsValue', {\r\n value: block[\"nameA\"]\r\n }))\r\n\r\n // obj.text = this.transformStringValue(options.text)\r\n this.newTransformStringValue(obj, block[\"nameA\"], obj.getSelectionStyles(0, obj.text.length, true))\r\n obj._originalProperties.text = obj.text\r\n\r\n let pop = true\r\n if (eventBlock['cssClass'] == \"onPageStartBlock\") pop = false\r\n\r\n if (pop) {\r\n this.popObject(this, block)\r\n } else if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.testCollision(this, block, obj)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n newTransformStringValue(obj, original_text, original_style) {\r\n let isVariable = false\r\n // reset to original styles and value\r\n obj.removeChars(0, obj.text.length)\r\n\r\n do {\r\n original_style = original_style.concat(original_style)\r\n } while (original_text.length > original_style.length);\r\n //make sure original styles is same length as inserted varValue\r\n if (original_text.length <= original_style.length) {\r\n original_style.length = original_text.length\r\n }\r\n\r\n\r\n obj.insertChars(original_text, original_style, 0)\r\n\r\n // get substring between the 2 mustaches\r\n const start = original_text.indexOf('{{'),\r\n end = original_text.indexOf('}}')\r\n\r\n\r\n if (start == -1 || end == -1 || start >= end) return\r\n const substring = original_text.substring(start + 2, end).trim()\r\n const substring_start = original_text.indexOf(substring, start)\r\n // remove empty space and bracket {{\r\n obj.removeChars(start, substring_start)\r\n // remove empty space and }}\r\n obj.removeChars(obj.text.indexOf(substring, start) + substring.length, obj.text.indexOf('}}') + 2)\r\n\r\n // lookup if substring is a variable\r\n for (var varName in this.reader.global_variables) {\r\n if (varName != substring) continue\r\n isVariable = true\r\n break\r\n }\r\n\r\n let varValue = substring\r\n if (isVariable) {\r\n varValue = this.getVariableValue(substring)\r\n // check if value is a variable (variableEqualsVariableBlock)\r\n }\r\n const styles_start = obj.text.indexOf(substring, start)\r\n // get styles\r\n let original_styles = obj.getSelectionStyles(styles_start, styles_start + substring.length, true)\r\n // remove substring\r\n obj.removeChars(styles_start, styles_start + substring.length)\r\n\r\n do {\r\n original_styles = original_styles.concat(original_styles)\r\n } while (varValue.length > original_styles.length);\r\n //make sure original styles is same length as inserted varValue\r\n if (varValue.length <= original_styles.length) {\r\n original_styles.length = varValue.length\r\n }\r\n // insert variable value\r\n obj.insertChars(varValue, original_styles, styles_start)\r\n // call itself again for next {{ variable }}\r\n this.newTransformStringValue(obj, obj.text, obj.getSelectionStyles(0, obj.text.length, true))\r\n },\r\n\r\n isValueAVariableField: function (original_value) {\r\n\r\n if (typeof original_value == 'number') {\r\n return { value: original_value }\r\n }\r\n\r\n const start = original_value.indexOf('{{'),\r\n end = original_value.indexOf('}}')\r\n\r\n if (start >= end) return { isVar: false, value: original_value }\r\n\r\n let substring = original_value\r\n\r\n if (start !== -1 || end !== -1) substring = original_value.substring(start + 2, end).trim()\r\n\r\n // lookup if substring is a variable\r\n for (var varName in this.reader.global_variables) {\r\n if (varName === substring) return { varName: substring, value: this.getVariableValue(substring)}\r\n }\r\n return { value: original_value }\r\n\r\n },\r\n\r\n getVariableValue: function (varName) {\r\n return String(this.reader.global_variables[varName]['value'])\r\n },\r\n\r\n transformStringValue: function (value, type ) {\r\n let isVariable = false\r\n let varType = null\r\n\r\n // get substring betwween the 2 mustaches\r\n const start = value.indexOf('{{'),\r\n end = value.indexOf('}}')\r\n\r\n if (start > -1 && end > -1 && start < end) {\r\n\r\n let substring = value.substring(start + 2, end).trim()\r\n\r\n for (var varName in this.reader.global_variables) {\r\n if (varName != substring) continue\r\n isVariable = true\r\n break\r\n }\r\n\r\n if (!isVariable) {\r\n\r\n value =\r\n value.substring(0, start) +\r\n substring +\r\n value.substring(end + 2, value.length)\r\n } else {\r\n\r\n value =\r\n value.substring(0, start) +\r\n this.reader.global_variables[substring].value.toString() +\r\n value.substring(end + 2, value.length)\r\n }\r\n return this.transformStringValue(value, 'Number')\r\n }\r\n\r\n if (varType == 'Number' || type == 'Number') {\r\n if (/^-?\\d+$/.test(value)) {\r\n return parseInt(value)\r\n }\r\n }\r\n return value\r\n },\r\n\r\n lockSwipeRightBlock: function (self, block, callback) {\r\n this.page.lockSwipeRight = true\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.lockNextPage'))\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n lockSwipeLeftBlock: function (self, block, callback) {\r\n this.page.lockSwipeLeft = true\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.lockPreviousPage'))\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n updateObjectsTextValue: function (variableHasChanged, block) {\r\n\r\n if (this.reader === undefined) return\r\n\r\n let objects = this.page.getObjects()\r\n if (block) {\r\n block.dontPopActiveStack = false\r\n }\r\n\r\n for (var i = 0, l = objects.length; i < l; i++) {\r\n if (\r\n objects[i].type === 'textbox' ||\r\n objects[i].type === 'Textbutton' ||\r\n objects[i].type === 'speechbubble'\r\n ) {\r\n var oldText = objects[i].text\r\n this.newTransformStringValue(objects[i], objects[i]._originalProperties.text, objects[i]._originalProperties.style)\r\n\r\n if (variableHasChanged && oldText != objects[i].text && block[\"pop\"]) {\r\n block[\"obj_id\"] = objects[i].id\r\n this.popObject(this, block)\r\n block['dontPopActiveStack'] = true\r\n }\r\n }\r\n }\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n if (!block) return\r\n // this.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.checkIfEventCodeIsCompleted(block)\r\n },\r\n\r\n flipObjectBlock: function (self, block, callback) {\r\n // this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n\r\n o[block[\"flip\"]] = !o[block[\"flip\"]]\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.flip', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n setObjectPositionBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter \r\n \r\n\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX)) return\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY)) return\r\n\r\n o.left = Number(testX.value) * pageScale\r\n o.top = Number(testY.value) * pageScale\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setObjectPosition', {\r\n name: this.getObjectBlockName(o),\r\n x: Number(testX.value),\r\n y: Number(testY.value)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n \r\n this.testCollision(this, block, o)\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n setDraggableBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n \r\n let drag = false\r\n if (block[\"drag\"] == \"true\") drag = true\r\n\r\n o.lockMovementX = !drag\r\n o.lockMovementY = !drag\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setDraggable', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n restoreObjectBlock: function (self, block, callback, o) {\r\n \r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n if (!o) {\r\n o = this.page.getItemById(block[\"obj_id\"])\r\n }\r\n\r\n if (o && o._originalProperties) {\r\n \r\n if (o.bounce || o.isScaling || o.isRotating || o.moveX || o.moveY || o.fade) {\r\n o.abortAnimation = true\r\n setTimeout(() => {\r\n this.restoreObjectBlock(self, block, callback, o) \r\n }, 100);\r\n return\r\n } else if (o.abortAnimation) {\r\n return\r\n }\r\n \r\n o.left = o._originalProperties.left * self.reader.pageScales[self.reader.pageSelected]\r\n o.top = o._originalProperties.top * self.reader.pageScales[self.reader.pageSelected]\r\n o.scaleX = o._originalProperties.scaleX * self.reader.pageScales[self.reader.pageSelected]\r\n o.scaleY = o._originalProperties.scaleY * self.reader.pageScales[self.reader.pageSelected]\r\n o.flipX = o._originalProperties.flipX\r\n o.flipY = o._originalProperties.flipY\r\n o.lockMovementX = o._originalProperties.lockMovementX\r\n o.lockMovementY = o._originalProperties.lockMovementY\r\n o.opacity = o._originalProperties.opacity\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.restoreObj', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (\r\n o.type === 'textbox' ||\r\n o.type === 'Textbutton' ||\r\n o.type === 'speechbubble' ||\r\n o.type === 'textfield'\r\n ) {\r\n o.removeChars(0, o.text.length)\r\n o.insertChars(o._originalProperties['text'], o._originalProperties['style'], 0)\r\n }\r\n // }\r\n\r\n o.setCoords()\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n this.testCollision(this, block, o)\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n btnHandler: function (self, btn) {\r\n\r\n var tinycolor = require('tinycolor2')\r\n\r\n btn.on('mouseover', function() {\r\n // btn.set('btnBgColor', btn.btnBgColorActive)\r\n btn._originalProperties.btnBgColor = btn.btnBgColor\r\n btn.isHovered = true\r\n if (btn.isActive == true) return\r\n\r\n btn.set('btnBgColor', tinycolor(btn.btnBgColor).lighten(5).toString()) \r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mouseout', function() {\r\n btn.set('btnBgColor', btn._originalProperties.btnBgColor)\r\n btn.isHovered = false\r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mousedown', function() {\r\n btn.isActive = true\r\n btn.set('btnBgColor', tinycolor(btn._originalProperties.btnBgColor).darken(5).toString())\r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mouseup', function() {\r\n btn.isActive = false\r\n if (btn.isHovered == true) {\r\n btn.set('btnBgColor', tinycolor(btn._originalProperties.btnBgColor).lighten(5).toString())\r\n } else {\r\n btn.set('btnBgColor', btn._originalProperties.btnBgColor)\r\n }\r\n \r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n },\r\n\r\n parseBoolStr: function(str) {\r\n var expressions = {};\r\n var expressionRegex = new RegExp(\"\\\\((?:(?:!*true)|(?:!*false)|(?:&&)|(?:\\\\|\\\\|)|\\\\s|(?:!*\\\\w+))+\\\\)\");\r\n var expressionIndex = 0;\r\n \r\n if (typeof str == 'string') {\r\n str = str.trim();\r\n }\r\n\r\n while (str.match(expressionRegex)) {\r\n var match = str.match(expressionRegex)[0];\r\n var expression = 'boolExpr' + expressionIndex;\r\n str = str.replace(match, expression);\r\n match = match.replace('(', '').replace(')', '');\r\n expressions[expression] = match;\r\n expressionIndex++;\r\n }\r\n return this.evalBoolStr(str, expressions);\r\n },\r\n\r\n evalBoolStr: function(str, expressions) {\r\n\r\n var conditions = str.split(' ');\r\n if (conditions.length > 0) {\r\n var validity = this.toBoolean(conditions[0], expressions);\r\n for (var i = 1; i + 1 < conditions.length; i += 2) {\r\n var comparer = conditions[i];\r\n var value = this.toBoolean(conditions[i + 1], expressions);\r\n switch (comparer) {\r\n case '&&':\r\n validity = validity && value;\r\n break;\r\n case '||':\r\n validity = validity || value;\r\n break;\r\n }\r\n }\r\n return validity;\r\n }\r\n return 'Invalid input';\r\n },\r\n\r\n toBoolean: function(str, expressions) {\r\n\r\n var inversed = 0;\r\n while (str.indexOf('!') === 0) {\r\n str = str.replace('!', '');\r\n inversed++;\r\n }\r\n var validity;\r\n if (str.indexOf('boolExpr') === 0) {\r\n validity = this.evalBoolStr(expressions[str], expressions);\r\n } else if (str == 'true' || str == 'false' || str == 'undefined') {\r\n validity = str == 'true';\r\n } else if (window[str]){\r\n validity = window[str]();\r\n }\r\n for (var i = 0; i < inversed; i++) {\r\n validity = !validity;\r\n }\r\n return validity;\r\n },\r\n\r\n initCode: function(blocks) {\r\n\r\n if (this.reader === undefined) return\r\n\r\n this.blocks = JSON.parse(JSON.stringify(blocks))\r\n\r\n // first get init setup code (e.g play text effect. needs to hide the text object on page start)\r\n for (var i = 0; i < blocks.length; i++) {\r\n\r\n if (!this.eventBlocks.includes(blocks[i]['cssClass'])) continue\r\n\r\n this.generateInitCode(blocks[i])\r\n\r\n }\r\n },\r\n\r\n generateCode: function (blocks) {\r\n // then execute regular script\r\n for (var i = 0; i < blocks.length; i++) {\r\n if (this.eventBlocks.includes(blocks[i]['cssClass'])) {\r\n\r\n if (blocks[i]['loop'] == undefined){\r\n blocks[i]['loop'] = 1\r\n }\r\n\r\n this.initEventStatus(blocks[i]['id'], parseInt(blocks[i]['loop']))\r\n \r\n this[blocks[i]['cssClass']](\r\n this,\r\n blocks[i],\r\n this.getBlockConnections(blocks[i]['id'])\r\n )\r\n }\r\n }\r\n },\r\n\r\n generateInitCode: function(block) {\r\n // console.log('generateInitCode', block)\r\n // get event block conn\r\n var conn = this.getBlockConnections(block['id'])\r\n for (var i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i]['target']['node'] == block['id']) continue\r\n\r\n var nextBlock = this.getBlock(conn[i]['target']['node'])\r\n if (\r\n (nextBlock['cssClass'] == 'fadeBlock' && nextBlock['effect'] == \"fade in\") ||\r\n nextBlock['cssClass'] == 'textEffectBlock'\r\n ) {\r\n \r\n var nextConn = this.getBlockConnections(conn[i]['target']['node'])\r\n for (let l = 0; l < nextConn.length; l++) {\r\n // look up for connection to object object\r\n if (nextConn[l][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var layout_obj = this.page.getItemById(nextConn[l][\"source\"][\"port\"])\r\n\r\n if (layout_obj == null) continue\r\n layout_obj.opacity = 0\r\n layout_obj.visible = false\r\n }\r\n }\r\n // go to next function block\r\n this.generateInitCode(nextBlock)\r\n }\r\n },\r\n\r\n getBlock: function (id) {\r\n let block = null\r\n for (let i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['id'] != id) continue\r\n block = this.blocks[i]\r\n break\r\n }\r\n return block\r\n },\r\n\r\n getBlockConnections: function (id) {\r\n let connections = []\r\n for (var i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['cssClass'] != 'draw2d_Connection') continue\r\n if (this.blocks[i]['target']['node'] == id || this.blocks[i]['source']['node'] == id) {\r\n connections.push(this.blocks[i])\r\n }\r\n }\r\n return connections\r\n },\r\n\r\n getBlockOutputConnections: function(id) {\r\n let connections = []\r\n for (var i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['cssClass'] != 'draw2d_Connection') continue\r\n if (this.blocks[i]['source']['node'] == id) {\r\n connections.push(this.blocks[i])\r\n }\r\n }\r\n return connections\r\n },\r\n\r\n checkLogicGatePorts: function (id, conn) {\r\n let portCounter = 0\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"node\"] != id) continue\r\n portCounter += 1\r\n }\r\n \r\n if (portCounter > 0) return true\r\n\r\n return false \r\n },\r\n\r\n getLogicGateChildren: function(id, conn) {\r\n let children = []\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"node\"] != id) continue\r\n\r\n var child = {\r\n block: this.getBlock(conn[i][\"source\"][\"node\"]),\r\n conn: conn[i]\r\n }\r\n\r\n if (child) children.push(child)\r\n }\r\n return children\r\n },\r\n\r\n isNumber: function (text, canNegative) {\r\n\r\n var value = typeof text == 'object' ? text.value : text\r\n var varName = typeof text == 'object' ? text.varName : null\r\n \r\n if (typeof value == 'string' && value.includes('\\u25be')) {\r\n var index = value.indexOf('\\u25be')\r\n value = value.substring(0, index - 1)\r\n }\r\n\r\n const valueIsNumber = \r\n (/^\\d+$/.test(value) ||\r\n /^-\\d+$/.test(value) ||\r\n this.isInt(parseInt(value)) ||\r\n this.isFloat(parseFloat(value))\r\n ) && !isNaN(value)\r\n \r\n if (!valueIsNumber) {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.errors.valueIsNotNumber', {\r\n name: varName\r\n }),\r\n null,\r\n null,\r\n null,\r\n true\r\n )\r\n return false\r\n }\r\n\r\n \r\n\r\n if (value < 0) {\r\n if (!canNegative) {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.errors.valueCannotBeNegativeNumber', {\r\n name: varName\r\n }),\r\n null,\r\n null,\r\n null,\r\n true\r\n )\r\n return false\r\n }\r\n }\r\n\r\n\r\n // if (canNegative) {\r\n // if (\r\n // isnum ||\r\n // isNegativeNum ||\r\n // this.isInt(parseInt(value)) ||\r\n // this.isFloat(parseFloat(value))\r\n // ) {\r\n // if (!isNaN(value)) {\r\n // // testNumber = true\r\n // valueIsNotNumber = true\r\n // }\r\n // }\r\n // } else if (\r\n // (this.isInt(parseInt(value)) || this.isFloat(parseFloat(value))) &&\r\n // value >= 0\r\n // ) {\r\n // // testNumber = true\r\n // valueIsNegative = true\r\n // }\r\n\r\n // if (!isnum || !testNumber) {\r\n // // display error log in inspector\r\n // if (canNegative)\r\n\r\n // return false\r\n // }\r\n return true\r\n },\r\n \r\n isInt: function (n) {\r\n return Number(n) === n && n % 1 === 0\r\n },\r\n\r\n isFloat: function (n) {\r\n return Number(n) === n && n % 1 !== 0\r\n },\r\n\r\n generateConditionCode: function(id, term1, term2) {\r\n\r\n if (term1 == undefined) term1 = ''\r\n if (term2 == undefined) term2 = ''\r\n let result = \"false\"\r\n let logicConnections = this.getBlockConnections(id)\r\n let block = this.getBlock(id)\r\n\r\n if (block == null) return result\r\n\r\n if (block['cssClass'] == \"ANDGateBlock\" || block['cssClass'] == \"ORGateBlock\") {\r\n if (this.checkLogicGatePorts(id, logicConnections)) {\r\n const children = this.getLogicGateChildren(id, logicConnections)\r\n // test 1st child\r\n if (children[0][\"block\"][\"cssClass\"] == \"variableBlock\") {\r\n \r\n this.highlightBlock({\r\n block: children[0][\"block\"],\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n\r\n if (this.reader.global_variables[children[0][\"block\"][\"name\"]] == undefined) {\r\n term1 = \"false\"\r\n } else {\r\n term1 = this.reader.global_variables[children[0][\"block\"][\"name\"]][\"value\"].toString()\r\n // highlight connection\r\n\r\n if (term1 == \"true\") {\r\n this.highlightConnection({\r\n conn: children[0][\"conn\"],\r\n hasTimeout: true,\r\n })\r\n }\r\n }\r\n } else if (children[0][\"block\"][\"cssClass\"] == \"ANDGateBlock\" || children[0][\"block\"][\"cssClass\"] == \"ORGateBlock\") {\r\n term1 = this.generateConditionCode(children[0][\"block\"][\"id\"], term1, term2)\r\n } \r\n \r\n if (children.length > 1) {\r\n // test 2nd child\r\n if (children[1][\"block\"][\"cssClass\"] == \"variableBlock\") {\r\n\r\n this.highlightBlock({\r\n block: children[1][\"block\"],\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n \r\n if (this.reader.global_variables[children[1][\"block\"][\"name\"]] == undefined) {\r\n term2 = \"false\"\r\n } else {\r\n term2 = this.reader.global_variables[children[1][\"block\"][\"name\"]][\"value\"].toString()\r\n \r\n if (term2 == \"true\") {\r\n this.highlightConnection({\r\n conn: children[1][\"conn\"],\r\n hasTimeout: true\r\n })\r\n }\r\n }\r\n } else if (children[1][\"block\"][\"cssClass\"] == \"ANDGateBlock\" || children[1][\"block\"][\"cssClass\"] == \"ORGateBlock\") {\r\n term2 = this.generateConditionCode(children[1][\"block\"][\"id\"], term1, term2)\r\n }\r\n } else {\r\n term2 = \"false\"\r\n }\r\n \r\n\r\n if (block[\"cssClass\"] == \"ANDGateBlock\") {\r\n\r\n if ($nuxt.$store.state.inspectMode && this.parseBoolStr(term1) == true && this.parseBoolStr(term2) == true) {\r\n\r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n }\r\n\r\n result = term1 + \" && \" + term2\r\n } else {\r\n\r\n if ($nuxt.$store.state.inspectMode && (this.parseBoolStr(term1) == true || this.parseBoolStr(term2) == true)) {\r\n\r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n }\r\n\r\n result = term1 + \" || \" + term2\r\n } \r\n }\r\n } else if (block[\"cssClass\"] == \"variableBlock\") {\r\n if (this.reader.global_variables[block[\"name\"]] == undefined) {\r\n result = \"false\"\r\n } else {\r\n result = this.reader.global_variables[block[\"name\"]][\"value\"].toString()\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n\r\n if (result == \"true\") {\r\n \r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i]['source']['node'] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n },\r\n\r\n onPageStartBlock: function (self, block, conn) {\r\n // console.log('onPageStartBlock', block)\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n let hasOutputFlowConn = false\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[i][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[i][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // // test if condition is true or false\r\n // // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return\r\n // // init event status\r\n\r\n var delay = this.isValueAVariableField(block[\"delay\"])\r\n\r\n if (!this.isNumber(delay, false)) return\r\n\r\n if (block['loop'] == undefined) block['loop'] = 1\r\n\r\n if (Number(delay.value) > 0) {\r\n \r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block\r\n })\r\n \r\n this.reader.timeouts.pop()\r\n this.executeOnEventCode(block, conn, null, true)\r\n }, parseFloat(delay.value) * 1000)\r\n )\r\n return\r\n }\r\n\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block\r\n })\r\n this.executeOnEventCode(block, conn, null, true)\r\n\r\n },\r\n\r\n // onTouchBlock: function (self, block, conn) {\r\n // // loop through block connections\r\n // // search uniquely for conditionLogicPort first\r\n // let condition = 'true', hasOutputFlowConn = false\r\n // for (let l = 0; l < conn.length; l++) {\r\n\r\n // if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n // condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n // }\r\n\r\n // if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n // hasOutputFlowConn = true\r\n // }\r\n // }\r\n\r\n // // test if event block has output connections\r\n // if (hasOutputFlowConn == false) return\r\n \r\n // for (let i = 0; i < conn.length; i++) { \r\n\r\n // if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n // var layout_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n\r\n // if (layout_obj == null) return\r\n // // make object glow\r\n // this.glowObject(this, layout_obj, condition, block['id'])\r\n \r\n // layout_obj.on('mouseup', function () {\r\n // self.reader.disableObjectIsTouched()\r\n // })\r\n \r\n // // add mouse up listerner to trigger the event\r\n // layout_obj.on('mousedown', function () {\r\n\r\n // self.reader.enableObjectIsTouched()\r\n\r\n // conn[i]['name'] = layout_obj['name']\r\n\r\n // const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n // if (isExecuting == false) return\r\n\r\n // // check if layout_obj is already evented\r\n // if (block[\"once\"] == true) {\r\n // layout_obj.evented = false\r\n // // look for other objects linked to the same event to disable them as well\r\n // for (let n = 0; n < conn.length; n++) { \r\n\r\n // if (conn[n][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n // var other_layout_obj = self.page.getItemById(conn[n][\"source\"][\"port\"])\r\n\r\n // if (other_layout_obj == null) continue\r\n\r\n // other_layout_obj.evented = false\r\n // }\r\n // }\r\n // })\r\n // }\r\n // },\r\n\r\n onPronounceBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n let hasOutputFlowConn = false\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[i][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[i][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // // test if condition is true or false\r\n // // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return\r\n // // init event status\r\n if (block['loop'] == undefined) block['loop'] = 1\r\n\r\n\r\n let word = this.transformStringValue(block[\"word\"])\r\n block.array_words = word.toLowerCase().split(\" \")\r\n\r\n // block.array_words = word.value.toLowerCase().split(\" \")\r\n // store block with string to recognize\r\n // this.SpeechTargetsList.push({\r\n // block: block,\r\n // conn: conn\r\n // })\r\n\r\n this.reader.initSpeechRecognition(this.reader, block, conn)\r\n this.reader.isRecording = true\r\n // if (Object.keys(this.reader.SpeechRecognition).length !== 0) return\r\n \r\n // let SpeechRecognition = SpeechRecognition || window.webkitSpeechRecognition\r\n // let SpeechRecognitionEvent = SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent\r\n \r\n // this.reader.SpeechRecognition = new SpeechRecognition();\r\n\r\n // this.reader.SpeechRecognition.continuous = true;\r\n // this.reader.SpeechRecognition.lang = $nuxt.$store.state.StudioProps.languages[block.lang]\r\n // this.reader.SpeechRecognition.interimResults = false;\r\n // this.reader.SpeechRecognition.maxAlternatives = 1;\r\n\r\n // this.reader.SpeechRecognition.start();\r\n\r\n // this.reader.SpeechRecognition.onend = function(event) {\r\n \r\n // if (self.reader.not_transition && self.reader.pageSelected != null) {\r\n // // console.log('onend')\r\n // self.reader.SpeechRecognition.start();\r\n // }\r\n // }\r\n \r\n // this.reader.SpeechRecognition.onresult = function(event) {\r\n // var res = event.results[event.results.length - 1][0].transcript.toLowerCase();\r\n // self.searchForSpeechMatch(res.split(\" \"))\r\n // }\r\n },\r\n\r\n searchForSpeechMatch: function(self, res) {\r\n \r\n let full_match = false\r\n let colored = res.split(\" \").map(x => {\r\n return {\r\n word: x,\r\n match: null\r\n }\r\n })\r\n\r\n const array_res = res.toLowerCase().split(\" \")\r\n let post_log = false\r\n let indexes_to_delete = []\r\n\r\n this.reader.speechTargetsList.forEach(function(e, index) {\r\n\r\n if (e.block.word == undefined) return\r\n\r\n let match_counter = 0\r\n let target_index = 0\r\n let v = false\r\n let event_triggered = false\r\n \r\n for (var i = 0; i < array_res.length; i++) {\r\n \r\n if (e.block.array_words.includes(array_res[i])) {\r\n // turning word yellow\r\n colored[i].match = false\r\n }\r\n \r\n for (var l = target_index; l < e.block.array_words.length; l++) {\r\n \r\n if (e.block.array_words[l] !== array_res[i]) {\r\n match_counter = 0\r\n full_match = false\r\n \r\n } else {\r\n v =true\r\n // colored[i].match = false\r\n match_counter++\r\n }\r\n\r\n if (match_counter == e.block.array_words.length) {\r\n full_match = true\r\n post_log = true\r\n\r\n // turning words green\r\n for (var m = 0; m < match_counter; m++) {\r\n colored[i - m].match = true\r\n }\r\n\r\n if (event_triggered == false) {\r\n\r\n event_triggered = true\r\n\r\n self.highlightBlock({\r\n block: e.block\r\n })\r\n self.executeOnEventCode(e.block, e.conn, null, true)\r\n if (e.block[\"once\"]) {\r\n indexes_to_delete.push(index)\r\n } \r\n } \r\n match_counter = 0\r\n }\r\n\r\n if (match_counter != 0) {\r\n if (e.block.array_words.length > l + 1) {\r\n target_index = l + 1\r\n }\r\n break\r\n } else {\r\n if (v) {\r\n v = false\r\n l = l - 2\r\n if (l < 0) l = 0\r\n continue\r\n }\r\n target_index = 0\r\n }\r\n }\r\n }\r\n })\r\n\r\n\r\n this.reader.removeFromSpeechTargetsList(indexes_to_delete)\r\n \r\n self.appendLogMsg(colored, false, false, true)\r\n\r\n return colored\r\n },\r\n\r\n onClickBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true', hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n \r\n for (let i = 0; i < conn.length; i++) { \r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var layout_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n\r\n if (layout_obj == null) return\r\n // make object glow\r\n this.glowObject(this, layout_obj, condition, block['id'], block['glow'])\r\n\r\n layout_obj.on('mousedown', function () {\r\n self.reader.enableObjectIsTouched()\r\n \r\n block['triggerObjId'] = layout_obj[\"id\"]\r\n\r\n conn[i]['name'] = layout_obj['name']\r\n\r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n\r\n // check if layout_obj is already evented\r\n if (block[\"once\"] == true) {\r\n // console.log('disable click event')\r\n layout_obj.evented = false\r\n // look for other objects linked to the same event to disable them as well\r\n for (let n = 0; n < conn.length; n++) { \r\n\r\n if (conn[n][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var other_layout_obj = self.page.getItemById(conn[n][\"source\"][\"port\"])\r\n\r\n if (other_layout_obj == null) continue\r\n\r\n other_layout_obj.evented = false\r\n }\r\n }\r\n\r\n })\r\n // add mouse up listerner to trigger the event\r\n layout_obj.on('mouseup', function () {\r\n\r\n self.reader.disableObjectIsTouched()\r\n\r\n })\r\n }\r\n },\r\n\r\n onClickOnceBlock: function (self, block, conn) {\r\n this.onClickBlock(self, block, conn)\r\n },\r\n\r\n onCollisionBlock: function(self, block, conn) {\r\n \r\n // let source_object = null\r\n let target_objects = []\r\n let collider_object = null\r\n\r\n for (let i = 0; i < conn.length; i++) { \r\n // get source object\r\n if (conn[i][\"target\"][\"port\"] === \"objectPort\") {\r\n collider_object = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n break\r\n }\r\n }\r\n\r\n if (collider_object == null) return\r\n\r\n for (let l = 0; l < conn.length; l++) { \r\n // get target object\r\n if (conn[l][\"target\"][\"port\"] === \"targetedObjectPort\") {\r\n // target_objects.push(this.page.getItemById(conn[i][\"source\"][\"port\"]))\r\n var o = this.page.getItemById(conn[l][\"source\"][\"port\"])\r\n\r\n if (!o) continue\r\n \r\n target_objects.push(o)\r\n\r\n if (o.collisionWatch == undefined) {\r\n o.collisionWatch = {}\r\n }\r\n\r\n if (o.collisionWatch[collider_object[\"id\"]] === undefined) {\r\n o.collisionWatch[collider_object[\"id\"]] = {\r\n // collision_is_active: false,\r\n events: {}\r\n }\r\n }\r\n\r\n o.collisionWatch[collider_object[\"id\"]][\"events\"][block[\"id\"]] = {\r\n block: block,\r\n conn: conn,\r\n // objectConn: objectConn\r\n }\r\n }\r\n }\r\n\r\n if (target_objects.length === 0) return\r\n \r\n // store objects in list \r\n this.reader.initCollisionWatch(collider_object.id, {\r\n collision_is_active: false,\r\n targets: target_objects,\r\n threshold: block['threshold']\r\n })\r\n },\r\n\r\n onDragOverBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true', hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n \r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // set target\r\n let target_object = null\r\n let targetObjConnection = null\r\n for (let m = 0; m < conn.length; m++) {\r\n\r\n if (conn[m][\"target\"][\"port\"] != \"targetedObjectPort\") continue\r\n\r\n targetObjConnection = conn[m]\r\n \r\n target_object = this.page.getItemById(conn[m][\"source\"][\"port\"])\r\n\r\n break\r\n\r\n }\r\n\r\n if (target_object == null) return\r\n\r\n for (let i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n \r\n var dragged_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n // make object glow\r\n this.glowObject(this, dragged_obj, condition, block['id'], block['glow'])\r\n\r\n if (dragged_obj == null) return\r\n\r\n dragged_obj.lockMovementX = false\r\n dragged_obj.lockMovementY = false\r\n\r\n dragged_obj.on('moving', function() {\r\n\r\n if(!dragged_obj.intersectsWithObject(target_object, undefined, undefined, block['threshold']) || dragged_obj.dragEventTriggered) return\r\n\r\n conn[i]['name1'] = dragged_obj['name']\r\n conn[i]['name2'] = target_object['name']\r\n\r\n self.appendLogMsg(self.reader.$t('reader.inspect.onDragOver', {\r\n name1: self.getObjectBlockName(dragged_obj),\r\n name2: self.getObjectBlockName(target_object), \r\n }), true)\r\n\r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n // check if layout_obj is already evented\r\n if (block[\"once\"] == true) {\r\n // dragged_obj.evented = false\r\n dragged_obj.dragEventTriggered = true\r\n }\r\n // highlight target object block\r\n self.highlightBlock({\r\n block: self.getBlock(targetObjConnection[\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: '#9a67ea'\r\n })\r\n // highlight target object connection\r\n self.highlightConnection({\r\n conn: targetObjConnection,\r\n hasTimeout: true\r\n })\r\n });\r\n }\r\n },\r\n\r\n onDragOverOnceBlock: function (self, block, conn) {\r\n block[\"once\"] = true\r\n this.onDragOverBlock(self, block, conn)\r\n },\r\n\r\n onTextInputBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n if (conn[l][\"source\"][\"node\"] != block[\"id\"]) continue\r\n hasOutputFlowConn = true\r\n break\r\n }\r\n\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n var layout_obj = {}\r\n\r\n for (let i = 0; i < conn.length; i++) { \r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n layout_obj[i] = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n \r\n if (layout_obj[i.toString()] == null) return\r\n // add event listerner to trigger the event\r\n layout_obj[i].on('editing:exited', function () { \r\n self.reader.exitTextEditing()\r\n\r\n if(layout_obj[i].inputTriggered || layout_obj[i].showplaceholder) return\r\n conn[i]['name'] = layout_obj[i]['name'] \r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n\r\n if (block[\"once\"] == true) {\r\n layout_obj[i].inputTriggered = true\r\n }\r\n })\r\n }\r\n },\r\n\r\n onTextInputOnceBlock: function (self, block, conn) {\r\n block[\"once\"] = true\r\n this.onTextInputBlock(self, block, conn)\r\n },\r\n\r\n generateOnCompleteCode: function(block, conn, eventId) {\r\n // console.log('generateOnCompleteCode', block)\r\n if (this.reader === undefined) return\r\n \r\n for (let i = 0; i < conn.length; i++) {\r\n \r\n if (conn[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n var nextBlock = this.getBlock(conn[i][\"target\"][\"node\"])\r\n\r\n\r\n if (nextBlock == null) continue\r\n\r\n if (block[\"pop\"] == true) nextBlock[\"pop\"] = true\r\n\r\n nextBlock[\"depth\"] = block[\"depth\"] + 1\r\n\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n\r\n this.executeScript(\r\n this,\r\n nextBlock,\r\n this.getBlockConnections(nextBlock[\"id\"]),\r\n eventId\r\n )\r\n }\r\n },\r\n\r\n executeOnEventCode: function(block, conn, objectConn, testCondition) {\r\n // check if this event is already running\r\n // console.log('executeOnEventCode', block)\r\n if (this.checkIfEventIsActive(block[\"id\"])) return false\r\n \r\n if (this.reader === undefined) return false\r\n\r\n if (testCondition) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n condition = this.generateConditionCode(conn[m][\"source\"][\"node\"])\r\n break\r\n }\r\n // test if condition is true or false\r\n // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return false\r\n\r\n // var triggeredObject = null\r\n if (block[\"cssClass\"] == 'onPageStartBlock') {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onPageStart', {\r\n page: this.reader.pageSelected + 1,\r\n }),\r\n true\r\n )\r\n // } else {\r\n // // necessary for 'self' object block\r\n // console.log(objectConn)\r\n // triggeredObject = this.page.getItemById(objectConn[\"source\"][\"port\"])\r\n }\r\n \r\n if (block[\"cssClass\"] == 'onClickBlock' || block[\"cssClass\"] == 'onClickOnceBlock') {\r\n // this.appendLogMsg(\r\n // this.reader.$t('reader.inspect.onClick', {\r\n // name: objectConn[\"name\"]\r\n // }),\r\n // true\r\n // )\r\n let obj_name\r\n\r\n if(objectConn.name == undefined){\r\n\r\n obj_name = objectConn[\"source\"][\"port\"]\r\n\r\n }else{\r\n\r\n var clicked_object = this.page.getItemById(objectConn[\"source\"][\"port\"])\r\n\r\n if (clicked_object) {\r\n obj_name = clicked_object['name']\r\n }\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onClick', {\r\n name: obj_name\r\n }),\r\n true\r\n )\r\n \r\n \r\n }\r\n\r\n if (block[\"cssClass\"] == 'onDragOverBlock' || block[\"cssClass\"] == 'onDragOverOnceBlock') {\r\n\r\n let obj_name1, obj_name2\r\n if(objectConn['name1'] == undefined){\r\n obj_name1 = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name1 = objectConn[\"name1\"]\r\n }\r\n\r\n if(objectConn['name2'] == undefined){\r\n obj_name2 = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name2 = objectConn[\"name2\"]\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onDragOver', {\r\n name1: obj_name1,\r\n name2: obj_name2\r\n }),\r\n true\r\n )\r\n }\r\n\r\n if (block[\"cssClass\"] == 'onTextInputBlock' || block[\"cssClass\"] == 'onTextInputOnceBlock') {\r\n // this.appendLogMsg(\r\n // this.reader.$t('reader.inspect.onInput', {\r\n // name: objectConn[\"name\"]\r\n // }),\r\n // true\r\n // )\r\n let obj_name\r\n if(objectConn['name'] == undefined){\r\n obj_name = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name = this.page.getItemById(objectConn[\"source\"][\"port\"])[\"name\"]\r\n }\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onInput', {\r\n name: obj_name\r\n }),\r\n true\r\n ) \r\n }\r\n }\r\n\r\n if (objectConn) {\r\n // highlight object block\r\n this.highlightBlock({\r\n block: this.getBlock(objectConn[\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: '#9a67ea'\r\n })\r\n // highlight object connection\r\n this.highlightConnection({\r\n conn: objectConn,\r\n hasTimeout: true\r\n })\r\n }\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true\r\n })\r\n\r\n // loop through connections\r\n // search for flow connections only\r\n for (let o = 0; o < conn.length; o++) {\r\n \r\n if (conn[o][\"target\"][\"port\"] == \"conditionLogicPort\") continue\r\n \r\n if (conn[o][\"target\"][\"port\"] == \"objectPort\") continue\r\n\r\n if (conn[o][\"target\"][\"port\"] == \"targetedObjectPort\") continue\r\n\r\n var functionBlock = this.getBlock(conn[o][\"target\"][\"node\"])\r\n \r\n if (functionBlock == null) continue\r\n\r\n functionBlock['pop'] = true\r\n\r\n var connections = this.getBlockConnections(functionBlock[\"id\"])\r\n functionBlock['depth'] = 1\r\n \r\n this.highlightConnection({\r\n conn: conn[o],\r\n hasTimeout: true\r\n })\r\n this.executeScript(this, functionBlock, connections, block['id'])\r\n }\r\n\r\n return true\r\n },\r\n\r\n executeScript: function (self, block, conn, eventId) {\r\n let onCompleteTrigger = false\r\n // if (this.reader.eventStatus[eventId]) {\r\n // console.log(this.page.getItemById(this.reader.eventStatus[eventId][\"triggerObjId\"]))\r\n\r\n // }\r\n \r\n block['eventCode'] = eventId\r\n // first check if block has an object port\r\n let block_has_objectPort = false\r\n if (this.blocksWithObjectPort.includes(block[\"cssClass\"])) block_has_objectPort = true\r\n\r\n if (block_has_objectPort) {\r\n for (let i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n \r\n if (conn[i][\"source\"][\"port\"] !== 'self') {\r\n block['obj_id'] = conn[i][\"source\"][\"port\"]\r\n } else if (this.reader.eventStatus[eventId][\"triggerObjId\"]) {\r\n block['obj_id'] = this.reader.eventStatus[eventId][\"triggerObjId\"]\r\n } else {\r\n continue\r\n }\r\n \r\n // highlight object block\r\n this.highlightBlock({\r\n block: this.getBlock(conn[i][\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: \"#9a67ea\"\r\n })\r\n // highlight object block\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n // hightlight block\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: false\r\n })\r\n \r\n this[block['cssClass']](this, block, function() {\r\n\r\n if (self.reader === undefined) return\r\n\r\n if ($nuxt.$store.state.inspectMode) {\r\n if (self.reader.eventGraphIsReady) {\r\n // remove hightlight box\r\n self.stopHighlightInspectBlock(block[\"id\"], self.highlightBlocksList)\r\n }\r\n }\r\n\r\n if (onCompleteTrigger) return\r\n\r\n onCompleteTrigger = true\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n if (self.checkIfEventCodeIsCompleted(block) == false) onCompleteTrigger = false\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n }\r\n return\r\n }\r\n\r\n // also check if block is setvarval block\r\n if (this.setVarValBlocks.includes(block[\"cssClass\"])) {\r\n\r\n // TextVariableEqualsTextObject => set nameB to the object text\r\n if (block[\"cssClass\"] == \"textVariableEqualsTextObjectBlock\"){\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"objectPort\") continue\r\n var layout_obj = this.page.getItemById(conn[m][\"source\"][\"port\"])\r\n block['nameB'] = layout_obj.text\r\n }\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true\r\n })\r\n\r\n this.setVarVal(this, block, function() {\r\n if (onCompleteTrigger) return\r\n\r\n onCompleteTrigger = true\r\n\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n self.checkIfEventCodeIsCompleted(block)\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n\r\n return\r\n }\r\n\r\n // check for logic block\r\n let block_has_logicPort = false\r\n if (this.blockWithLogicPort.includes(block[\"cssClass\"])) block_has_logicPort = true\r\n \r\n\r\n if (block_has_logicPort) {\r\n this[block['cssClass']](this, block, conn, eventId)\r\n return\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: false\r\n })\r\n\r\n // else, block has only a flow port (e.g playSoundEffect)\r\n this[block['cssClass']](this, block, function() {\r\n \r\n if ($nuxt.$store.state.inspectMode) {\r\n if (self.reader.eventGraphIsReady) {\r\n // remove hightlight box\r\n self.stopHighlightInspectBlock(block[\"id\"], self.highlightBlocksList)\r\n }\r\n }\r\n \r\n if (onCompleteTrigger) return\r\n \r\n onCompleteTrigger = true\r\n\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n self.checkIfEventCodeIsCompleted(block)\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n },\r\n\r\n branchBlock: function (self, block, conn, eventId) {\r\n let condition = 'false'\r\n // first get the condition result\r\n for (let l = 0; l < conn.length; l++) {\r\n if (conn[l][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"])\r\n break\r\n }\r\n\r\n const conditionResult = this.parseBoolStr(condition)\r\n\r\n for (let i = 0; i < conn.length; i++) {\r\n var targetBlock = this.getBlock(conn[i][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[i][\"source\"][\"node\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n // test if condition is true or false\r\n if (\r\n conditionResult == true &&\r\n conn[i]['source']['port'] == \"trueOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n conditionResult == false &&\r\n conn[i]['source']['port'] == \"falseOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n numberComparisonBlock: function (self, block, conn, eventId) {\r\n if (block[\"nameA\"] == \"none\") return\r\n\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n var targetBlock = this.getBlock(conn[l][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[l][\"source\"][\"node\"])\r\n\r\n let nameB = this.isValueAVariableField(block[\"nameB\"])\r\n if (!this.isNumber(nameB, true)) return\r\n // var nameB = this.transformStringValue(block[\"nameB\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n\r\n // if (this.reader.global_variables[block[\"nameB\"]] == undefined) {\r\n // block[\"nameB\"] = this.transformStringValue(block[\"nameB\"])\r\n // } else {\r\n // block[\"nameB\"] = this.reader.global_variables[block[\"nameB\"].value]\r\n // }\r\n\r\n if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) > parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"greaterOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) == parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"equalsOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) < parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"smallerOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n textComparisonBlock: function (self, block, conn, eventId) {\r\n // console.log('textcomparison block')\r\n if (block[\"nameA\"] == \"none\") return\r\n // console.log(\"rawr\")\r\n\r\n let includes_port_connected = false\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m]['source']['port'] == \"includesOutputBranchPort\") {\r\n includes_port_connected = true\r\n break\r\n }\r\n }\r\n\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n var targetBlock = this.getBlock(conn[l][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[l][\"source\"][\"node\"])\r\n var nameB = this.transformStringValue(block[\"nameB\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n \r\n // if (this.reader.global_variables.hasOwnProperty(block[\"nameB\"])) {\r\n // nameB = this.reader.global_variables[this.transformStringValue(nameB)]['value']\r\n // }\r\n \r\n var is_exact = this.reader.global_variables[block[\"nameA\"]][\"value\"] == nameB\r\n var is_includes = this.reader.global_variables[block[\"nameA\"]][\"value\"] && this.reader.global_variables[block[\"nameA\"]][\"value\"].includes(nameB) && includes_port_connected\r\n // console.log('is_exact', is_exact)\r\n // console.log('is_includes', is_includes)\r\n // console.log(conn[l]['source']['port'])\r\n // console.log(sourceBlock['id'] == block['id'])\r\n\r\n if (\r\n is_exact &&\r\n conn[l]['source']['port'] == \"equalsOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n is_includes &&\r\n conn[l]['source']['port'] == \"includesOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n conn[l]['source']['port'] == \"elseOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id'] &&\r\n !is_includes && !is_exact\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n highlightBlock: function(options) {\r\n if (!$nuxt.$store.state.inspectMode) return\r\n\r\n if (!this.reader.eventGraphIsReady) return\r\n\r\n this.startHighlightInspectBlock(this, options.block, this.highlightBlocksList, options.color)\r\n\r\n if (options.hasTimeout == false) return\r\n\r\n if (options.duration == undefined) options.duration = 600\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n // remove block highlight\r\n this.stopHighlightInspectBlock(options.block[\"id\"], this.highlightBlocksList)\r\n }, options.duration));\r\n },\r\n\r\n highlightConnection: function(options) {\r\n if (!$nuxt.$store.state.inspectMode) return\r\n\r\n if (!this.reader.eventGraphIsReady) return\r\n\r\n this.startHighlightInspectConnection(options.conn, this.highlightBlocksList)\r\n\r\n if (options.hasTimeout == false) return\r\n\r\n if (options.duration == undefined) options.duration = 600\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n // remove block highlight\r\n this.stopHighlightInspectConnection(options.conn[\"id\"], this.highlightBlocksList)\r\n }, options.duration));\r\n \r\n },\r\n\r\n\r\n startHighlightInspectBlock: function(self, figure, highlightList, color) {\r\n try {\r\n if (!figure) return\r\n\r\n if (highlightList[figure[\"id\"]]) {\r\n highlightList[figure[\"id\"]].array.push(true)\r\n return\r\n }\r\n\r\n const f = this.reader.eventPage.getFigure(figure[\"id\"])\r\n\r\n if (!f) return\r\n\r\n if (color == undefined) color = \"#FFFFFF\"\r\n\r\n const rect = new draw2d.shape.basic.Rectangle({\r\n bgColor: null,\r\n stroke: 7,\r\n color: color,\r\n dasharray: '-'\r\n })\r\n\r\n rect.show = async function (canvas) {\r\n rect.groupId = figure[\"id\"]\r\n await rect.setCanvas(canvas)\r\n rect.shape[0].style.transition = \"stroke-width 0.3s linear\"\r\n rect.shape[0].style.animation = \"dash 1000s linear\"\r\n \r\n await rect.shape.toFront()\r\n rect.shape[0].style.strokeDashoffset = 50000 \r\n }\r\n\r\n rect.hide = function (callback) {\r\n\r\n rect.groupId = figure[\"id\"]\r\n \r\n rect.shape[0].style.strokeWidth = 0\r\n \r\n self.reader.timeouts.push(setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n rect.setCanvas(null)\r\n callback() \r\n }, 300))\r\n }\r\n\r\n rect.show(this.reader.eventPage)\r\n rect.setPosition(f.getAbsolutePosition().translate(-7, -7))\r\n rect.setDimension(f.getWidth(), f.getHeight())\r\n\r\n highlightList[figure[\"id\"]] = {\r\n el: rect,\r\n array: [true]\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/startHighlightInspectBlock', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n stopHighlightInspectBlock: function(id, highlightList) {\r\n try {\r\n if (highlightList[id] == undefined) return\r\n\r\n highlightList[id].array.pop()\r\n\r\n if (highlightList[id].array > 0) return\r\n\r\n let rect = highlightList[id].el\r\n\r\n let self = this.reader.eventPage\r\n rect.hide(function() {\r\n self.remove(rect, true)\r\n })\r\n\r\n delete highlightList[id]\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/stopHighlightInspectBlock', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n startHighlightInspectConnection: async function(conn, highlightList) {\r\n try {\r\n if (!conn) return\r\n\r\n if (highlightList[conn[\"id\"]]) {\r\n highlightList[conn[\"id\"]].array.push(true)\r\n return\r\n }\r\n\r\n // const c = this.getFigure(conn[\"id\"])\r\n let c = null\r\n for (var i = 0; i < this.reader.eventPage.lines.data.length; i++) {\r\n if (this.reader.eventPage.lines.data[i][\"id\"] != conn[\"id\"]) continue\r\n\r\n c = this.reader.eventPage.lines.data[i]\r\n\r\n break\r\n \r\n }\r\n\r\n if (!c) return\r\n\r\n c.shape[1][0].style.transition = \"stroke-dashoffset 1000s linear, stroke-width 0.3s linear, stroke-dasharray 0.3s linear\"\r\n c.shape[1][0].style.strokeWidth = 7\r\n c.shape[1][0].style.strokeDasharray = \"7, 11\"\r\n \r\n await this.reader.$nextTick()\r\n\r\n if (c.shape == null) return\r\n\r\n c.shape[1][0].style.strokeDashoffset = -50000 \r\n // }, 10)\r\n\r\n highlightList[conn[\"id\"]] = {\r\n el: c.shape[1][0],\r\n array: [true]\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/startHighlightInspectConnection', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n stopHighlightInspectConnection: function(id, highlightList) {\r\n try {\r\n if (highlightList[id] == undefined) return\r\n\r\n highlightList[id].array.pop()\r\n\r\n if (highlightList[id].array > 0) return\r\n\r\n let conn = highlightList[id].el\r\n\r\n conn.style.transition = \"stroke-width 0.3s linear, stroke-dasharray 0.3s linear\"\r\n conn.style.strokeDashoffset = 0\r\n conn.style.strokeWidth = 2\r\n conn.style.strokeDasharray = \"0, 0\"\r\n\r\n delete highlightList[id]\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/stopHighlightInspectConnection', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n appendLogMsg: async function(msg, isEvent, isGoToPage, isSpeech, isError) {\r\n // post message in log if inspectmode == true\r\n if (!this.reader || !this.reader.inspectMode) return;\r\n\r\n let container = document.getElementById(\"inspectLogContainer\")\r\n let scrollDown = false\r\n\r\n if (\r\n container.offsetHeight + container.scrollTop ==\r\n container.scrollHeight\r\n ) {\r\n scrollDown = true\r\n } else scrollDown = false\r\n\r\n this.reader.inspectLog.push({\r\n msg: msg,\r\n isSpeech: isSpeech,\r\n isEvent: isEvent,\r\n isError: isError,\r\n isGoToPage: isGoToPage,\r\n time: new Date()\r\n })\r\n\r\n if(!scrollDown) return\r\n \r\n await this.reader.$nextTick()\r\n\r\n container.scrollTop = container.scrollHeight\r\n \r\n }\r\n\r\n}","const apiFactory = axios => ({\r\n //DJANGO REST AUTH\r\n registerUser(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/registration/',\r\n data: data\r\n })\r\n },\r\n passwordReset(email) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/reset/',\r\n data: email\r\n })\r\n },\r\n\r\n passwordResetConfirm(data) {\r\n // uid, token, new_password1, new_password2\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/reset/confirm/',\r\n data: data\r\n })\r\n },\r\n passwordChange(data) {\r\n // new_password1, new_password2, old password\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/change/',\r\n data: data\r\n })\r\n },\r\n refreshToken(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/token/refresh/',\r\n data: data\r\n })\r\n },\r\n localLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/login/',\r\n data: data\r\n })\r\n },\r\n autoLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/autologin/',\r\n data: data\r\n })\r\n },\r\n resetStudentLoginLink(username, data){\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/' + username +'/reset_qr_code_token/',\r\n data: data\r\n })\r\n },\r\n getAllStudentLogins(slug) {\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_logins/')\r\n },\r\n facebookLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/facebook/',\r\n data: data\r\n })\r\n },\r\n googleLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/google/',\r\n data: data\r\n })\r\n },\r\n cleverGetToken(data) {\r\n if (data.uri) {\r\n var uri = '&uri=' + data.uri\r\n }else{\r\n var uri = ''\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/clever/get_token/?' + data.code + uri,\r\n data: data\r\n })\r\n },\r\n cleverLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/clever/',\r\n data: data\r\n })\r\n },\r\n importCleverClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_clever_classroom/',\r\n data: data\r\n })\r\n },\r\n classlinkGetToken(data) {\r\n if (data.uri) {\r\n var uri = '&uri=' + data.uri\r\n }else{\r\n var uri = ''\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/classlink/get_token/?' + data.code + uri,\r\n data: data\r\n })\r\n },\r\n classlinkLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/classlink/',\r\n data: data\r\n })\r\n },\r\n importClasslinkClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_classlink_classroom/',\r\n data: data\r\n })\r\n },\r\n resendVerifyEmail(email) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/email/verify/',\r\n data: email\r\n })\r\n },\r\n verifyEmail(token) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/registration/verify-email/',\r\n data: token\r\n })\r\n },\r\n\r\n //SUBSCRIPTION\r\n getInvoices(username) {\r\n return axios.$get('api/v1/stripe/invoices/' + username + '/')\r\n },\r\n getSubscription() {\r\n return axios.$get('api/v1/stripe/subscription/')\r\n },\r\n getUserSettings(username) {\r\n return axios.$get('api/v1/accounts/' + username + '/user_settings/')\r\n },\r\n setSubscription(data) {\r\n // plan-id and stripe token\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/stripe/subscription/',\r\n data: data\r\n })\r\n },\r\n cancelSubscription() {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/stripe/subscription/'\r\n })\r\n },\r\n reactivateSubscription() {\r\n let data = {\r\n reactivate: true\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/stripe/subscription/',\r\n data: data\r\n })\r\n },\r\n checkCoupon(code) {\r\n return axios.$get('api/v1/stripe/check_coupon/' + code + '/')\r\n },\r\n //CLUBS\r\n getClubs() {\r\n return axios.$get('api/v1/clubs/')\r\n },\r\n\r\n //TRAININGS\r\n getTrainings() {\r\n return axios.$get('api/v1/trainings/')\r\n },\r\n\r\n // //NEW ASSIGNMENT REPLACING CURRICULUMS\r\n // getMyLessons(page, username, status){\r\n // var params = ''\r\n // params = '&user=' + username\r\n // if(!page){\r\n // page = 1\r\n // }\r\n // return axios.$get('api/v1/assignments/show_my_lessons/?page=' + page + params)\r\n // },\r\n getPastMyAssignments(page, username) {\r\n var params = ''\r\n params = '&user=' + username\r\n if(!page){\r\n page = 1\r\n }\r\n return axios.$get('api/v1/assignments/show_my_past_assignments/?page=' + page + params)\r\n },\r\n // previously setCurriculumAsAssignment / add_as_assignment\r\n cloneAssignment(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/clone_assignment/',\r\n data: data\r\n })\r\n },\r\n\r\n\r\n \r\n //END\r\n\r\n // //CURRICULUMS\r\n // getCurriculum(slug) {\r\n // return axios.$get('api/v1/curriculums/' + slug + '/')\r\n // },\r\n // getCurriculums(grade, subject) {\r\n \r\n // let query = ''\r\n\r\n // if (grade) {\r\n // query = '&grade=' + grade\r\n // }\r\n // if (subject) {\r\n // query = query + '&subject=' + subject\r\n // }\r\n\r\n // return axios.$get('api/v1/curriculums/?published_time__isnull=False' + query)\r\n // },\r\n // getRelatedCurriculums(grade, exclude) {\r\n // let query = ''\r\n // if (grade) {\r\n // query = '&grade=' + grade\r\n // }\r\n // if (exclude) {\r\n // query = query + '&exclude=' + exclude\r\n // }\r\n // return axios.$get('api/v1/curriculums/get_related_curriculums/?' + query)\r\n\r\n // },\r\n // setCurriculumAsAssignment(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/add_as_assignment/',\r\n // data: data\r\n // })\r\n // },\r\n\r\n\r\n\r\n \r\n // //EDIT CURRICULUMS\r\n // getMyCurriculums() {\r\n // return axios.$get('api/v1/curriculums/my_curriculums/')\r\n // },\r\n // createCurriculum(data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculum(slug, data) {\r\n // return axios({\r\n // method: 'patch',\r\n // url: 'api/v1/curriculums/' + slug + '/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculumStandards(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/save_standards/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculumVocab(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/save_vocab/',\r\n // data: data\r\n // })\r\n // },\r\n \r\n //LIST STANDARDS\r\n getAASL(page) {\r\n return axios.$get('api/v1/standards/AASL/?page=' + page)\r\n },\r\n getCCELA(page) {\r\n return axios.$get('api/v1/standards/CCELA/?page=' + page)\r\n },\r\n getCSTA(page) {\r\n return axios.$get('api/v1/standards/CSTA/?page=' + page)\r\n },\r\n getISTE(page) {\r\n return axios.$get('api/v1/standards/ISTE/?page=' + page)\r\n },\r\n getVocab(page) {\r\n return axios.$get('api/v1/vocab/?page=' + page)\r\n },\r\n getHelperText(page) {\r\n return axios.$get('api/v1/helpertext/?page=' + page)\r\n },\r\n\r\n //EVENTS\r\n getEvent(slug) {\r\n return axios.$get('api/v1/events/' + slug + '/')\r\n },\r\n\r\n //CLASSES\r\n getBanners() {\r\n return axios.$get('api/v1/banners/')\r\n },\r\n selectClassBanner(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/class_banner_select/',\r\n data: data\r\n })\r\n },\r\n getClassbyClasscode(classcode, invite_url, username) {\r\n let params = ''\r\n if (invite_url){\r\n params = '?invite=true'\r\n if (username){\r\n params = params + '&username=' + username\r\n }\r\n }\r\n return axios.$get('api/v1/get_classroom/' + classcode + '/' + params)\r\n },\r\n setClassbyClasscode(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/connect_classroom/',\r\n data: data\r\n })\r\n },\r\n getStudentClassrooms(username, page, active) {\r\n const data = {\r\n \"username\": username\r\n }\r\n // used only for transfer dialog of story to different classroom/assignment\r\n if (active) data.active = true\r\n var params = ''\r\n if (page) {\r\n params = '?page=' + page\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/student_classroom_list/' + params,\r\n data: data\r\n })\r\n },\r\n getActiveShortListClassrooms(data) {\r\n // Classroom List returns ('slug', 'name', 'active_assignments_count')\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/active_short_list/',\r\n data: data\r\n })\r\n },\r\n getClassrooms(username, page) {\r\n var params = ''\r\n params = '?teacher__username=' + username\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n },\r\n getClassroomByGrade(grade, page) {\r\n var params = ''\r\n params = '?grade=' + grade\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n\r\n // work in progress\r\n // return axios.$get('api/v1/classrooms/public_classrooms_list/' + params)\r\n },\r\n getClassroomBySubject(subject, page) {\r\n var params = ''\r\n params = '?subject=' + subject\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n // work in progress\r\n // return axios.$get('api/v1/classrooms/public_classrooms_list/' + params)\r\n },\r\n getCoteachingClassrooms(username) {\r\n var params = ''\r\n params = '?coteacher=' + username\r\n return axios.$get('api/v1/classrooms/' + params)\r\n },\r\n getClassroom(slug) {\r\n return axios.$get('api/v1/classrooms/' + slug + '/')\r\n },\r\n\r\n createClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/',\r\n data: data\r\n })\r\n },\r\n editClassroom(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/classrooms/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteClassroom(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/classrooms/' + slug + '/'\r\n })\r\n },\r\n archiveClassroom(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/archive/'\r\n })\r\n },\r\n unarchiveClassroom(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/unarchive/'\r\n })\r\n },\r\n setPasswordForStudents(slug, password, teacher) {\r\n const data = {\r\n password: password,\r\n teacher: teacher\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/set_password_for_students/',\r\n data: data\r\n })\r\n },\r\n getGoogleClassrooms(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/get_google_classroom/',\r\n data: data\r\n })\r\n },\r\n importGoogleClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_google_classroom/',\r\n data: data\r\n })\r\n },\r\n createStudent(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/create_student/',\r\n data: data\r\n })\r\n },\r\n removeStudent(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/remove_student/',\r\n data: data\r\n })\r\n },\r\n setUserForGuestStory(storySlug, data){\r\n // data => username \r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/products/' + storySlug + '/set_user_for_guest_story/',\r\n data: data\r\n })\r\n\r\n },\r\n deleteOldGuestStories(){\r\n return axios.$get('api/v1/products/delete_old_guest_stories/')\r\n },\r\n transferStory(data) {\r\n // data => product_slug and classroom_slug\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/transfer_story/',\r\n data: data\r\n })\r\n },\r\n\r\n // PUBLIC LIBRARY\r\n getLibrary(slug) {\r\n return axios.$get('api/v1/library/' + slug + '/')\r\n },\r\n getLibraryAssignmentStories(slug) {\r\n return axios.$get('api/v1/products/?status=p&short=True&assignment__slug=' + slug)\r\n },\r\n getStudentRoster(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_roster/' + query)\r\n },\r\n getStudentRosterProfile(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_roster_profile/' + query)\r\n },\r\n getStudentRosterOnline(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_online_student_roster/' + query, {\r\n progress: false\r\n })\r\n },\r\n\r\n //ASSIGNMENTS\r\n getClassroomAssignments(classSlug, page) {\r\n const data = {\r\n \"class_slug\": classSlug\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/assignments_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n getAssignmentDropdown(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/detail_dropdown_milestones/')\r\n },\r\n getAssignment(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/')\r\n },\r\n getStudentClassroomAssignments(classSlug, username, page) {\r\n const data = {\r\n \"class_slug\": classSlug,\r\n \"username\": username\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/student_assignments_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n getStudentClassroomAssignmentsName(classSlug, username, page) {\r\n const data = {\r\n \"class_slug\": classSlug,\r\n \"username\": username\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/student_assignments_names_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n\r\n\r\n getStoryBasic(slug) {\r\n return axios.$get('api/v1/products/' + slug + '/basic/')\r\n },\r\n\r\n createAssignment(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/',\r\n data: data\r\n })\r\n },\r\n editAssignment(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assignments/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteAssignment(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assignments/' + slug + '/'\r\n })\r\n },\r\n\r\n submitToLessons(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/submit_to_lessons/'\r\n })\r\n },\r\n getAssignmentStats(slug) {\r\n return axios.$get('api/v1/assignment_student_stats/' + slug + '/')\r\n },\r\n\r\n getCurrentMilestoneIndex(storySlug) {\r\n return axios.$get(\r\n 'api/v1/products/' + storySlug + '/current_milestone_index/'\r\n )\r\n },\r\n\r\n\r\n //ASSIGNMENT STATUS\r\n getLibraryAssignmentStatus(slug){\r\n return axios.$get('api/v1/assignmentstatus/' + slug + '/library/')\r\n },\r\n editAssignmentStatus(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assignmentstatus/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n closeAssignmentStatus(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignmentstatus/' + slug + '/close/'\r\n })\r\n },\r\n reopenAssignmentStatus(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignmentstatus/' + slug + '/reopen/'\r\n })\r\n },\r\n deleteAssignmentStatus(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assignmentstatus/' + slug + '/'\r\n })\r\n },\r\n\r\n getAssignmentStatusUserStories(assignment_status_slug, page, username, created_by){\r\n \r\n var params = ''\r\n\r\n params = '&user=' + username\r\n if (created_by) {\r\n // options: me, not_me\r\n let created_by_params = '&created_by=' + created_by\r\n params += created_by_params\r\n }\r\n\r\n return axios.$get('api/v1/assignmentstatus/'+ assignment_status_slug + '/user_stories/?page=' + page + params)\r\n },\r\n getAssignmentStatusStories(assignment_status_slug, status, page, ) {\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios.$get(\r\n 'api/v1/assignmentstatus/' + assignment_status_slug + '/get_stories/?status=' + status + '&page=' + page\r\n )\r\n },\r\n getAssignmentStatusPublicStories(assignment_status_slug, page, ) {\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios.$get(\r\n 'api/v1/assignmentstatus/' + assignment_status_slug + '/get_public_stories/?page=' + page\r\n )\r\n },\r\n\r\n //SCHOOLS\r\n createSchool(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/',\r\n data: data\r\n })\r\n },\r\n editSchool(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/schools/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteSchool(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/schools/' + slug + '/'\r\n })\r\n },\r\n getSchool(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/')\r\n },\r\n getSchoolTeachers(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/get_teachers/')\r\n },\r\n getSchoolInvitations(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/get_invites/')\r\n },\r\n inviteTeacher(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/invite_teacher/',\r\n data: data\r\n })\r\n },\r\n editInvite(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/invitations/' + id + '/',\r\n data: data\r\n })\r\n },\r\n sendTeacherInvite(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/send_invite/',\r\n data: data\r\n })\r\n },\r\n removeTeacher(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/remove_teacher/',\r\n data: data\r\n })\r\n },\r\n checkSchoolcode(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/check_schoolcode/',\r\n data: data\r\n })\r\n },\r\n connectSchool(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/connect_school/',\r\n data: data\r\n })\r\n },\r\n getPurchaseOrders(school_slug) {\r\n return axios.$get('api/v1/pos/?school__slug=' + school_slug)\r\n },\r\n getQuote(slug) {\r\n return axios.$get('api/v1/quotes/' + slug + '/')\r\n },\r\n createQuote(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/quotes/',\r\n data: data\r\n })\r\n },\r\n editQuote(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/quotes/' + id + '/',\r\n data: data\r\n })\r\n },\r\n //FEEDBACK\r\n getNumFeedbacksforStories(data) {\r\n // data is list of story slugs\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/num_for_stories/',\r\n data: data\r\n })\r\n },\r\n getStoryFeedback(story_slug) {\r\n let data = {\r\n \"slug\": story_slug\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/get_feedbacks_by_page/',\r\n data: data\r\n })\r\n // var query = '?product__slug=' + story_slug\r\n // if (page) {\r\n // query = query + '&page=' + page\r\n // }\r\n // return axios.$get('api/v1/feedback/' + query)\r\n },\r\n createFeedback(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/',\r\n data: data\r\n })\r\n },\r\n editFeedback(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/feedback/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteFeedback(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/feedback/' + id + '/'\r\n })\r\n },\r\n\r\n //CHAT\r\n getChatHistory(story_slug) {\r\n return axios.$get('api/v1/rooms/' + story_slug + '/get_chat_history/')\r\n },\r\n\r\n //COMMENT\r\n getStoryComment(story_slug, page) {\r\n var query = '?product__slug=' + story_slug\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + query)\r\n },\r\n getComment(comment_id, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + comment_id + '/' + query)\r\n },\r\n getStoryCommentBy(story_slug, editor, page) {\r\n var query = 'product__slug=' + story_slug + '&commenter__username=' + editor\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + query)\r\n },\r\n createComment(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/comment/',\r\n data: data\r\n })\r\n },\r\n editComment(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/comment/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteComment(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/comment/' + id + '/'\r\n })\r\n },\r\n\r\n //ASSET FOLDER\r\n getAssetFolders(username, page) {\r\n var query = '?user__username=' + username\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/assets/assetfolders/' + query)\r\n },\r\n getAssetFolder(folder_id, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/assets/assetfolders/' + folder_id + '/' + query)\r\n },\r\n createAssetFolder(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/assetfolders/',\r\n data: data\r\n })\r\n },\r\n editAssetFolder(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assets/assetfolders/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteAssetFolder(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assets/assetfolders/' + id + '/'\r\n })\r\n },\r\n addAssetToFolder(folder_id, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/assetfolders/' + folder_id + '/' + 'add_asset_to_folder/',\r\n data: data\r\n })\r\n\r\n },\r\n\r\n\r\n //USER\r\n checkUsername(username) {\r\n const data = {\r\n username: username\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/check_username/',\r\n data: data\r\n })\r\n },\r\n checkEmail(email) {\r\n const data = {\r\n email: email\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/check_email/',\r\n data: data\r\n })\r\n },\r\n getUsers(params) {\r\n var query = ''\r\n if (params) {\r\n query = '?' + params\r\n }\r\n return axios.$get('api/v1/accounts/' + query)\r\n },\r\n getUser(username) {\r\n if (username) {\r\n return axios.$get('api/v1/accounts/' + username + '/')\r\n }\r\n },\r\n editUser(username, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/accounts/' + username + '/',\r\n data: data\r\n })\r\n },\r\n editUserSettings(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/usersettings/' + id + '/',\r\n data: data\r\n })\r\n },\r\n addEmail(username, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/' + username + '/add_email/',\r\n data: data\r\n })\r\n },\r\n editUserPk(pk, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/accountsPk/' + pk + '/',\r\n data: data\r\n })\r\n },\r\n deleteUser(username) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/accounts/' + username + '/'\r\n })\r\n },\r\n\r\n // FEED\r\n getNotificationFeed(feed_length) {\r\n var params = ''\r\n if (feed_length) {\r\n params = '&feed_length=' + feed_length\r\n }\r\n return axios.$get('api/v1/list_news_feed/?notification=true' + params)\r\n },\r\n\r\n // STORIES\r\n createStory(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/studio/create/',\r\n data: data\r\n })\r\n },\r\n editStory(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/products/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n sendThumbnail(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/products/' + slug + '/send_thumb/',\r\n data: data\r\n })\r\n },\r\n deleteStory(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/products/' + slug + '/'\r\n })\r\n },\r\n getMyUsedLessons(page, username) {\r\n var params = ''\r\n if(username !== undefined) {\r\n params = '&user=' + username\r\n }\r\n return axios.$get('api/v1/assignments/get_my_used_lessons/?page=' + page + params)\r\n },\r\n getMyLessons(page, username) {\r\n var params = ''\r\n if(username !== undefined) {\r\n params = '&user=' + username\r\n }\r\n return axios.$get('api/v1/assignments/get_my_lessons/?page=' + page + params)\r\n },\r\n getPublishedLessons(page, q) {\r\n // console.log('Query in getPublishedLessons:', q);\r\n // Append the query string only if it's provided and not empty\r\n const queryString = q ? `&${q}` : '';\r\n return axios.$get(`api/v1/assignments/published_lessons/?page=${page}${queryString}`);\r\n },\r\n getSimilarPublishedLessons(slug){\r\n return axios.$get('api/v1/assignments/' + slug + '/similar_published_lessons/')\r\n },\r\n getLesson(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/read_lesson/')\r\n },\r\n assignLessonToClassroom(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/assign_to_classroom/',\r\n data: data\r\n })\r\n },\r\n\r\n getUserStories(page, username, is_student, status, assignment, created_by) {\r\n var params = ''\r\n\r\n params = '&user=' + username\r\n if (is_student) {\r\n let student_params = '&is_student=' + is_student\r\n params += student_params\r\n }\r\n\r\n if (status) {\r\n // options: draft, public\r\n let status_params = '&status=' + status\r\n params += status_params\r\n }\r\n if (assignment) {\r\n let assignment_params = '&assignment=' + assignment\r\n params += assignment_params\r\n }\r\n if (created_by) {\r\n // options: me, not_me\r\n let created_by_params = '&created_by=' + created_by\r\n params += created_by_params\r\n }\r\n\r\n return axios.$get('api/v1/products/user_stories/?page=' + page + params)\r\n },\r\n getReadStory(slug) {\r\n return axios.$get('api/v1/productsread/' + slug + '/')\r\n },\r\n getReviewStory(slug) {\r\n return axios.$get('api/v1/productsreview/' + slug + '/')\r\n },\r\n getFeaturedStories() {\r\n return axios.$get('api/v1/featured_stories/')\r\n },\r\n getPublishedStories(page, search) {\r\n var searchQ = ''\r\n if (search) {\r\n searchQ = '&q=' + search\r\n }\r\n return axios.$get('api/v1/products/published_stories/?page=' + page + searchQ)\r\n },\r\n // ASSETS\r\n getAssetsList(page, category, search, group){\r\n var searchQ = ''\r\n if (search) {\r\n searchQ = '&q=' + search\r\n }\r\n let categoryQ = ''\r\n if(category){\r\n categoryQ = '&category=' + category\r\n }\r\n let groupQ = ''\r\n if(group){\r\n groupQ = '&group=' + group\r\n }\r\n\r\n return axios.$get('api/v1/assets/studio_assets/?page=' + page + categoryQ + searchQ + groupQ)\r\n },\r\n getAssetsSVGList(page){\r\n return axios.$get('api/v1/assets/studio_svgs/?page=' + page)\r\n },\r\n getFeaturedAssets() {\r\n return axios.$get('api/v1/assets/featured_assets/')\r\n },\r\n getAssetsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assets/' + col_id + '/')\r\n },\r\n getAssetsDetailsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assets_details/' + col_id + '/')\r\n },\r\n getAssetsFromAsset(slug) {\r\n return axios.$get('api/v1/assets/get_col_assets_from_asset/' + slug + '/')\r\n },\r\n getSVGCollectionFromAsset(slug) {\r\n return axios.$get('api/v1/assets/get_col_svg_from_asset/' + slug + '/')\r\n },\r\n\r\n getAssetSvgInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assetsvgs/' + col_id + '/')\r\n },\r\n getAssetCollections(username) {\r\n return axios.$get('api/v1/assets/asset_collections/' + username + '/')\r\n },\r\n getSVGCollections(username) {\r\n return axios.$get('api/v1/assets/svg_collections/' + username + '/')\r\n },\r\n\r\n filterSoundsList(options){\r\n let params_list = []\r\n let params = ''\r\n \r\n if (options.category){\r\n params_list.push('category=' + options.category)\r\n }\r\n if (options.genre){\r\n params_list.push('genre=' + options.genre)\r\n }\r\n if (options.mood){\r\n params_list.push('mood=' + options.mood)\r\n }\r\n if(options.instrument){\r\n params_list.push('has_instrument=' + options.instrument)\r\n }\r\n if(options.collection_id){\r\n params_list.push('collection__id=' + options.collection_id)\r\n }\r\n if (params_list.length > 0){\r\n params = params_list.join('&')\r\n }\r\n return axios.$get('api/v1/assets/get_sounds/?' + params)\r\n\r\n },\r\n getSoundEffectCollectionsList(genre){\r\n return axios.$get('api/v1/assets/get_sound_effect_collections/?genre=' + genre)\r\n },\r\n\r\n\r\n \r\n getSoundsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_sounds/' + col_id + '/')\r\n },\r\n getFeaturedSounds() {\r\n return axios.$get('api/v1/assets/featured_sounds/')\r\n },\r\n getSoundCollectionsByArtist(username) {\r\n return axios.$get('api/v1/assets/sound_collections_by_artist/' + username + '/')\r\n },\r\n\r\n \r\n //MESSAGES\r\n getDisplayMessages() {\r\n return axios.$get('api/v1/messages/?display=true')\r\n },\r\n removeMessage(id) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/messages/' + id + '/',\r\n data: {\r\n display: false\r\n }\r\n })\r\n },\r\n getSuggestedUsers(pagesize) {\r\n //default pagesize is 12\r\n const params = ''\r\n if (pagesize) {\r\n params = '?page_size=' + pagesize\r\n }\r\n return axios.$get('api/v1/suggested_users/' + params)\r\n },\r\n // PROFILE\r\n getUserProfile(username) {\r\n return axios.$get('api/v1/accounts/' + username + '/')\r\n },\r\n editUserProfile(username, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/profile/' + username + '/',\r\n data: data\r\n })\r\n },\r\n getAvatars(page) {\r\n return axios.$get('api/v1/avatars/?page=' + page)\r\n },\r\n\r\n changeAvatar(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/avatar_select/',\r\n data: data\r\n })\r\n },\r\n getFollowers(username) {\r\n return axios({\r\n method: 'get',\r\n url: 'api/v1/accounts/' + username + '/get_followers/'\r\n })\r\n },\r\n getFollowing(username) {\r\n return axios({\r\n method: 'get',\r\n url: 'api/v1/accounts/' + username + '/get_following/'\r\n })\r\n },\r\n // BADGES\r\n getBadges() {\r\n return axios.$get('api/v1/badges/?category=wr')\r\n },\r\n\r\n // ACTIONS\r\n\r\n getVersion() {\r\n return axios.$get('api/v1/actions/getversion')\r\n },\r\n like(data) {\r\n // data = {object_id, type}\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/like/',\r\n data: data\r\n })\r\n },\r\n follow(username) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/follow/',\r\n data: {\r\n username: username\r\n }\r\n })\r\n },\r\n report(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/report/',\r\n data: data\r\n })\r\n },\r\n remixStory(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/remix/',\r\n data: data\r\n })\r\n },\r\n sendStoryLog(data) {\r\n return axios.$post('api/v1/actions/send_log/', data, {\r\n progress: false\r\n })\r\n },\r\n hit(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/hit/',\r\n data: data,\r\n options: {\r\n progress: false\r\n }\r\n })\r\n },\r\n updateNotifications(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/update_notification/',\r\n data: data\r\n })\r\n },\r\n updateTutorial(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/update_notification/?rand=' + Math.random(),\r\n data: data\r\n })\r\n },\r\n getTags(model) {\r\n if (!model) {\r\n model = 'product'\r\n }\r\n return axios.$get('api/v1/actions/get_tags?model=' + model)\r\n },\r\n getCurrency() {\r\n return axios.$get('api/v1/actions/get_currency/')\r\n },\r\n\r\n // FORMS\r\n serverStatus() {\r\n return axios.$get('api/v1/server_status/')\r\n },\r\n contactForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/contact/',\r\n data: data\r\n })\r\n },\r\n errorForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/error/',\r\n data: data\r\n })\r\n },\r\n subscribeForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/subscribe/',\r\n data: data\r\n })\r\n },\r\n\r\n // ROOMS\r\n addMember(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/add_member/',\r\n data: data\r\n })\r\n },\r\n removeMember(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/remove_member/',\r\n data: data\r\n })\r\n },\r\n getAllRoomMembers(slug, page) {\r\n // returns list of all members in the room\r\n return axios.$get('api/v1/rooms/' + slug + '/get_all_members/?page=' + page)\r\n },\r\n changeMember(slug, data) {\r\n // username, data\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/change_member/',\r\n data: data\r\n })\r\n },\r\n\r\n //STUDIO\r\n getEditStory(slug) {\r\n return axios.$get('api/v1/studio/edit/' + slug + '/')\r\n },\r\n deleteRecordSound(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assets/recordsounds/' + id + '/'\r\n })\r\n },\r\n addRecordSound(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/recordsounds/',\r\n data: data\r\n })\r\n },\r\n getPageTemplatesList(category, page) {\r\n let params = ''\r\n if(!page){\r\n page = 1\r\n }\r\n if (category) {\r\n params = '&category=' + category\r\n }\r\n return axios.$get('api/v1/pagetemplates/?page=' + page + params)\r\n },\r\n getPageTemplate(slug) {\r\n return axios.$get('api/v1/pagetemplates/' + slug + '/')\r\n },\r\n\r\n getTutorialsList(category, page) {\r\n let params = ''\r\n if(!page){\r\n page = 1\r\n }\r\n if (category) {\r\n params = '&category=' + category\r\n }\r\n return axios.$get('api/v1/tutorials/?page=' + page + params)\r\n },\r\n getTutorial(slug) {\r\n return axios.$get('api/v1/tutorials/' + slug + '/')\r\n },\r\n\r\n searchGifs(searchTerm, apiKey){\r\n return axios.$get(`https://api.giphy.com/v1/gifs/search?api_key=${apiKey}&q=${searchTerm}&rating=g`)\r\n }\r\n\r\n})\r\n\r\n/*\r\n ** Executed by ~/.nuxt/index.js with context given\r\n ** This method can be asynchronous\r\n */\r\nexport default ({\r\n app\r\n}, inject) => {\r\n // Inject `api` key\r\n // -> app.$api\r\n // -> this.$api in vue components\r\n // -> this.$api in store actions/mutations\r\n // app.$axios.defaults.xsrfHeaderName = 'X-CSRFToken'\r\n // app.$axios.defaults.xsrfCookieName = 'csrftoken'\r\n const api = apiFactory(app.$axios)\r\n inject('api', api)\r\n}\r\n","import Vue from 'vue'\r\nimport VueLazyload from 'vue-lazyload'\r\n\r\nVue.use(VueLazyload, {\r\n // set observer to true\r\n observer: true,\r\n lazyComponent: true,\r\n\r\n // optional\r\n observerOptions: {\r\n rootMargin: '0px',\r\n threshold: 0.2\r\n }\r\n})\r\n\r\n// // or with options\r\n// Vue.use(VueLazyload, {\r\n// preLoad: 1.3,\r\n// error: 'dist/error.png',\r\n// loading: 'dist/loading.gif',\r\n// attempt: 1\r\n// })\r\n","/**\n * Mixin component with base and common properties and functions.\n */\n\n/**\n * Base properties common for the audio-visual components\n */\nconst props = {\n /**\n * prop: 'audio-src'\n * Audio element src attribute. When provided creates audio element\n */\n audioSrc: {\n type: String,\n default: null\n },\n /**\n * prop: 'ref-link'\n * Refrence to Audio element. When provided, then local audio element\n * is not created and use refrence to the element. Component will\n * search only for its parent refs.\n */\n refLink: {\n type: String,\n default: null\n },\n /**\n * prop: 'audio-controls'\n * Audio element controls attribute. When provided should\n * display audio element with controls\n */\n audioControls: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'cors-anonym'\n * CORS requests for this element will not have the credentials flag set.\n * Set crossOrigin property of audio element to 'anonymous'.\n * Default: null\n */\n corsAnonym: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'audio-class'\n * Audio element css class name.\n */\n audioClass: {\n type: String,\n default: null\n },\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 300\n */\n canvWidth: {\n type: Number,\n default: 300\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 80\n */\n canvHeight: {\n type: Number,\n default: 80\n },\n /**\n * prop: 'canv-class'\n * Canvas element css class name.\n */\n canvClass: {\n type: String,\n default: null\n },\n /**\n * prop: 'canv-top'\n * Canvas element position on top relatively to audio element.\n * Default: false\n */\n canvTop: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'canv-fill-color'\n * Canvas fill background color. Can be string RGB color or canvas gradients array.\n * Default is transperent.\n */\n canvFillColor: {\n type: [String, Array],\n default: null\n }\n}\n\nconst methods = {\n /**\n * Create audio and canvas elements and insert in the HTML template.\n * Using document.createElement to avoid Vue virtual DOM re-rendering\n * which can lead to infinit loops.\n */\n createHTMLElements: function() {\n const canv = document.createElement('canvas')\n const canvDiv = document.createElement('div')\n let audioDiv = null\n let audio = null\n\n if (this.refLink) {\n audio = this.$parent.$refs[this.refLink]\n } else {\n audio = document.createElement('audio')\n audio.setAttribute('id', 'recordAudio')\n canvDiv.style.backgroundColor = '#d4ebf2'\n audioDiv = document.createElement('div')\n audio.setAttribute('src', this.audioSrc)\n if (this.audioControls) audio.setAttribute('controls', true)\n if (this.audioClass) audio.setAttribute('class', this.audioClass)\n if (this.corsAnonym) audio.crossOrigin = 'anonymous'\n audioDiv.appendChild(audio)\n this.$el.appendChild(audioDiv)\n }\n\n if (this.canvClass) canv.setAttribute('class', this.canvClass)\n if (this.canvWidth) canv.setAttribute('width', this.canvWidth)\n if (this.canvHeight) canv.setAttribute('height', this.canvHeight)\n canvDiv.appendChild(canv)\n\n if (this.canvTop) {\n this.$el.insertBefore(canvDiv, audioDiv)\n } else {\n this.$el.appendChild(canvDiv)\n }\n this.ctxWrapper = canv\n this.ctx = canv.getContext('2d')\n\n this.audio = audio\n },\n /**\n * Set audio context analyser.\n */\n setAnalyser: function() {\n let src = null\n let ctx = null\n if (this.refLink) {\n if (this.$avAudioRefs[this.refLink]) {\n src = this.$avAudioRefs[this.refLink].src\n ctx = this.$avAudioRefs[this.refLink].ctx\n this.analyser = ctx.createAnalyser()\n } else {\n ctx = new AudioContext()\n this.analyser = ctx.createAnalyser()\n src = ctx.createMediaElementSource(this.audio)\n this.$avAudioRefs[this.refLink] = { src: src, ctx: ctx }\n }\n } else {\n ctx = new AudioContext()\n this.analyser = ctx.createAnalyser()\n src = ctx.createMediaElementSource(this.audio)\n }\n\n src.connect(this.analyser)\n this.analyser.fftSize = this.fftSize\n this.analyser.connect(ctx.destination)\n\n this.audioCtx = ctx\n },\n /**\n * Canvas gradient. Vertical, from top down\n */\n fillGradient: function(colorsArray) {\n const w = this.canvWidth\n const h = this.canvHeight\n const gradient = this.ctx.createLinearGradient(w / 2, 0, w / 2, h)\n let offset = 0\n colorsArray.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / colorsArray.length\n })\n return gradient\n }\n}\n\nexport default {\n props,\n render: h => h('div'),\n mounted() {\n this.createHTMLElements()\n this.setAnalyser()\n this.mainLoop()\n },\n beforeDestroy() {\n if (this.audioCtx) {\n this.audioCtx.close()\n }\n },\n methods\n}\n","import BaseMixin from './AvBase'\n/**\n * Component props Object\n */\nconst props = {\n /**\n * prop: 'bar-width'\n * Width of the bar in pixels.\n * Default: 5\n */\n barWidth: {\n type: Number,\n default: 5\n },\n /**\n * prop: 'bar-space'\n * Space between bars.\n * Default: 1\n */\n barSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'bar-color'\n * Bar fill color. Can be string RGB color or canvas gradients array.\n */\n barColor: {\n type: [String, Array],\n default: '#0A0AFF'\n },\n /**\n * prop: 'caps-height'\n * Create caps on bars with given height in pixels.\n * If zero caps then skip creating bars.\n * Default: 0\n */\n capsHeight: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'caps-drop-speed'\n * Caps drop down animation speed.\n * Default: 0.9\n */\n capsDropSpeed: {\n type: Number,\n default: 0.9\n },\n /**\n * prop: 'caps-color'\n * Caps rectangles RGB color.\n */\n capsColor: {\n type: String,\n default: '#A0A0FF'\n },\n /**\n * prop: 'brick-height'\n * Draw bar as bricks with set height.\n */\n brickHeight: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'brick-space'\n * Space between bricks.\n */\n brickSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'symmetric'\n * Draw bars symmetric to canvas vertical center\n * Default: false\n */\n symmetric: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 1024\n */\n fftSize: {\n type: Number,\n default: 1024\n }\n}\n\n/**\n * Component AvBars\n */\nconst AvBars = {\n name: 'av-bars',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null,\n caps: Array.apply(null, Array(this.fftSize / 2)).map(() => 0)\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const frqBits = this.analyser.frequencyBinCount\n const data = new Uint8Array(frqBits)\n const barWidth =\n this.barWidth >= this.canvWidth ? this.canvWidth : this.barWidth\n const step = Math.round(\n ((barWidth + this.barSpace) / frqBits) * this.canvWidth\n )\n const barFill = Array.isArray(this.barColor)\n ? this.fillGradient(this.barColor)\n : this.barColor\n let x = 0\n\n this.analyser.getByteFrequencyData(data)\n this._fillCanvasBG()\n\n data.forEach((_, index) => {\n if (index % step) return\n const bits = Math.round(\n data.slice(index, index + step).reduce((v, t) => t + v, 0) / step\n )\n const barHeight = (bits / 255) * this.canvHeight\n if (this.capsHeight) {\n this._drawCap(index, barWidth, x, bits)\n }\n this.ctx.fillStyle = barFill\n this._drawBar(barWidth, barHeight, x)\n x += barWidth + this.barSpace\n })\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas background fill\n * @private\n */\n _fillCanvasBG: function() {\n const w = this.canvWidth\n const h = this.canvHeight\n this.ctx.clearRect(0, 0, w, h)\n if (this.canvFillColor) {\n this.ctx.fillStyle = Array.isArray(this.canvFillColor)\n ? this.fillGradient(this.canvFillColor)\n : this.canvFillColor\n this.ctx.fillRect(0, 0, w, h)\n }\n },\n /**\n * Draw bar. Solid bar or brick bar.\n * @private\n */\n _drawBar: function(barWidth, barHeight, barX) {\n if (this.brickHeight) {\n this._drawBrickBar(barWidth, barHeight, barX)\n } else {\n this.ctx.fillRect(\n barX,\n this.canvHeight - barHeight - this._symAlign(barHeight),\n barWidth,\n barHeight\n )\n }\n },\n /**\n * Draw bricks bar.\n * @private\n */\n _drawBrickBar: function(barWidth, barHeight, barX) {\n for (let b = 0; b < barHeight; b += this.brickHeight + this.brickSpace) {\n this.ctx.fillRect(\n barX,\n this.canvHeight - barHeight + b - this._symAlign(barHeight),\n barWidth,\n this.brickHeight\n )\n }\n },\n /**\n * Draw cap for each bar and animate caps falling down.\n * @private\n */\n _drawCap: function(index, barwidth, barX, barY) {\n const cap =\n this.caps[index] <= barY ? barY : this.caps[index] - this.capsDropSpeed\n const y = (cap / 255.0) * this.canvHeight\n const capY = this.canvHeight - y - this.capsHeight - this._symAlign(y)\n this.ctx.fillStyle = this.capsColor\n this.ctx.fillRect(barX, capY, barwidth, this.capsHeight)\n if (this.symmetric) {\n this.ctx.fillRect(\n barX,\n this.canvHeight - capY - this.capsHeight,\n barwidth,\n this.capsHeight\n )\n }\n this.caps[index] = cap\n },\n /**\n * Shift for symmetric alignment\n * @private\n */\n _symAlign: function(barHeight) {\n return this.symmetric ? (this.canvHeight - barHeight) / 2 : 0\n }\n }\n}\n\nexport default AvBars\n","import BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'line-width'\n * Draw line width in px\n */\n lineWidth: {\n type: Number,\n default: 2\n },\n /**\n * prop: 'line-color'\n * Draw line color or gradient array\n */\n lineColor: {\n type: [String, Array],\n default: '#9F9'\n },\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 128\n */\n fftSize: {\n type: Number,\n default: 128\n }\n}\n\n/**\n * Component AvLine\n */\nconst AvLine = {\n name: 'av-line',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const frqBits = this.analyser.frequencyBinCount\n const step = this.canvWidth / 2.0 / frqBits\n const data = new Uint8Array(frqBits)\n let x = 0\n\n this._setCanvas()\n this.analyser.getByteFrequencyData(data)\n\n this.ctx.lineWidth = this.lineWidth\n this.ctx.strokeStyle = Array.isArray(this.lineColor)\n ? this.fillGradient(this.lineColor)\n : this.lineColor\n this.ctx.beginPath()\n\n data.reverse()\n this.ctx.moveTo(x, this.canvHeight / 2)\n x = this._drawLine(data, x, step)\n data.reverse()\n x = this._drawLine(data, x, step)\n this.ctx.lineTo(this.canvWidth, this.canvHeight / 2)\n this.ctx.stroke()\n\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas clear background fill\n * @private\n */\n _setCanvas: function() {\n const w = this.canvWidth\n const h = this.canvHeight\n const canvColor = this.canvFillColor\n const gradient = this.ctx.createLinearGradient(w / 2, 0, w / 2, h)\n let offset = 0\n this.ctx.clearRect(0, 0, w, h)\n\n if (!canvColor) return\n\n if (Array.isArray(canvColor)) {\n canvColor.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / canvColor.length\n })\n this.ctx.fillStyle = gradient\n } else {\n this.ctx.fillStyle = canvColor\n }\n this.ctx.fillRect(0, 0, w, h)\n },\n /**\n * Draw line and return last X\n * @private\n */\n _drawLine: function(data, x, step) {\n const h = this.canvHeight\n let y = 0\n data.forEach((v, i) => {\n // (h / 2) - v / 255 * (h / 2)\n y = (h * (255 - v)) / 510\n if (i % 2) y = h - y\n this.ctx.lineTo(x, y)\n x += step\n })\n return x\n }\n }\n}\n\nexport default AvLine\n","import BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 1024\n */\n fftSize: {\n type: Number,\n default: 1024\n },\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 100\n */\n canvWidth: {\n type: Number,\n default: 100\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 100\n */\n canvHeight: {\n type: Number,\n default: 100\n },\n /**\n * prop: 'radius'\n * Set cercle radius. If zero will be calculated from canvas\n * width: (canv-width / 2) * 0.7\n * Default: 0\n */\n radius: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'line-width'\n * Frequency bit line width to draw.\n */\n lineWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'line-space'\n * Space between lines to draw.\n */\n lineSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'outline-color'\n * Outline (contour) style RGB color.\n * Default: #00f\n */\n outlineColor: {\n type: String,\n default: '#0000FF'\n },\n /**\n * prop: 'outline-width'\n * Outline (contour) line width. Float value.\n * Default: 0.3\n */\n outlineWidth: {\n type: Number,\n default: 0.3\n },\n /**\n * prop: 'bar-width'\n * Frequency graph bar width.\n */\n barWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'bar-length'\n * Frequency graph bar length.\n * Default is a difference between radius and canvas width.\n */\n barLength: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'bar-color'\n * Bar style RGB color or radient gradient when array.\n * Default: [ #FFFFFF, #0000FF ]\n */\n barColor: {\n type: [String, Array],\n default: () => ['#FFFFFF', '#0000FF']\n },\n /**\n * prop: 'progress'\n * Draw play progress meter.\n * Default: false\n */\n progress: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'progress-width'\n * Progress meter width.\n * Default: 1\n */\n progressWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'progress-color'\n * Progress meter color.\n * Default: 1\n */\n progressColor: {\n type: String,\n default: '#0000FF'\n },\n /**\n * prop: 'progress-clockwise'\n * Progress meter arc draw direction. Default clockwise\n * Default: true\n */\n progressClockwise: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'outline-meter-space'\n * Space between outline and progress meter.\n * Default: 2\n */\n outlineMeterSpace: {\n type: Number,\n default: 3\n },\n /**\n * prop: 'playtime'\n * Draw playtime text in the center of the circle.\n * Default: false\n */\n playtime: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'playtime-font'\n * Played time print font.\n * Default: '14px Monaco'\n */\n playtimeFont: {\n type: String,\n default: '14px Monaco'\n },\n /**\n * prop: 'playtime-color'\n * Played time font color.\n * Default: '#00f'\n */\n playtimeColor: {\n type: String,\n default: '#00f'\n },\n /**\n * prop: 'rotate-graph'\n * Rotate graph clockwise enable.\n * Default: false\n */\n rotateGraph: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'rotate-speed'\n * Rotate graph speed.\n * Default: 0.001\n */\n rotateSpeed: {\n type: Number,\n default: 0.001\n }\n}\n\n/**\n * Component AvCircle\n */\nconst AvCircle = {\n name: 'av-circle',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n rotate: 1.5,\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const cx = this.canvWidth / 2 // center X\n const cy = this.canvHeight / 2 // center Y\n const r = this.radius\n ? this.radius\n : Math.round((this.canvWidth / 2) * 0.7)\n const lineWidth = this.lineWidth\n const lineSpace = this.lineSpace\n const arcStep = Math.ceil(lineWidth + lineSpace)\n const frqBits = this.analyser.frequencyBinCount\n const data = new Uint8Array(frqBits)\n const step = ((lineWidth + lineSpace) / data.length) * (2 * Math.PI)\n const barLen =\n this.barLength > 0 ? this.barLength : this.canvWidth / 2 - r\n let angle = Math.PI * this._rotate() // start from top\n\n this._setCanvas()\n this.analyser.getByteFrequencyData(data)\n\n // contour outline\n if (this.outlineWidth > 0) {\n this._drawOutline(r, cx, cy)\n }\n\n // draw play progress meter\n if (this.progress) {\n this._drawProgress(r, cx, cy)\n }\n\n // draw played time\n if (this.playtime) {\n this._drawPlaytime(cx, cy)\n }\n\n // circle bar lines\n this.ctx.lineWidth = this.barWidth\n this.ctx.strokeStyle = this._setBarColor(cx, cy)\n\n data.forEach((_, index) => {\n angle += step\n if (index % arcStep) {\n return\n }\n const bits = Math.round(\n data.slice(index, index + arcStep).reduce((v, t) => t + v, 0) /\n arcStep\n )\n\n const blen = r + (bits / 255.0) * barLen\n this.ctx.beginPath()\n this.ctx.moveTo(r * Math.cos(angle) + cx, r * Math.sin(angle) + cy)\n this.ctx.lineTo(\n blen * Math.cos(angle) + cx,\n blen * Math.sin(angle) + cy\n )\n this.ctx.stroke()\n })\n\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas clear background fill\n * @private\n */\n _setCanvas: function() {\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n\n if (!this.canvFillColor) return\n\n this.ctx.fillStyle = Array.isArray(this.canvFillColor)\n ? this.fillGradient(this.canvFillColor)\n : this.canvFillColor\n this.ctx.fillRect(0, 0, this.canvWidth, this.canvHeight)\n },\n /**\n * Draw play progress meter\n */\n _drawProgress: function(r, cx, cy) {\n const elapsed =\n (this.audio.currentTime / this.audio.duration) * 2 * Math.PI\n const angleEnd = Math.PI * 1.5 + elapsed\n\n if (!elapsed) return\n\n this.ctx.lineWidth = this.progressWidth\n this.ctx.strokeStyle = this.progressColor\n\n this.ctx.beginPath()\n this.ctx.arc(\n cx,\n cy,\n r - this.outlineWidth - this.outlineMeterSpace,\n 1.5 * Math.PI,\n angleEnd,\n this.progressClockwise\n )\n this.ctx.stroke()\n },\n /**\n * Draw outline circle\n */\n _drawOutline: function(r, cx, cy) {\n this.ctx.beginPath()\n this.ctx.strokeStyle = this.outlineColor\n this.ctx.lineWidth = this.outlineWidth\n this.ctx.arc(cx, cy, r, 0, 2 * Math.PI)\n this.ctx.stroke()\n },\n /**\n * Draw played time\n */\n _drawPlaytime: function(cx, cy) {\n const m = Math.floor(this.audio.currentTime / 60)\n const sec = Math.floor(this.audio.currentTime) % 60\n const s = sec < 10 ? `0${sec}` : `${sec}`\n const text = `${m}:${s}`\n const tsizew = Math.ceil(this.ctx.measureText(text).width)\n\n this.ctx.font = this.playtimeFont\n this.ctx.fillStyle = this.playtimeColor\n this.ctx.fillText(\n text,\n cx - Math.round(tsizew / 2),\n cy + 0.25 * parseInt(this.playtimeFont)\n )\n },\n /**\n * If rotate is enabled will return rotated angle\n */\n _rotate: function() {\n if (this.rotateGraph) {\n this.rotate = this.rotate === 3.5 ? 1.5 : this.rotate + this.rotateSpeed\n } else {\n this.rotate = 1.5\n }\n return this.rotate\n },\n /**\n * Set bars color.\n */\n _setBarColor: function(cx, cy) {\n if (!Array.isArray(this.barColor)) {\n return this.barColor\n }\n const gradient = this.ctx.createRadialGradient(\n cx,\n cy,\n this.canvWidth / 2,\n cx,\n cy,\n 0\n )\n let offset = 0\n\n this.barColor.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / this.barColor.length\n })\n return gradient\n }\n }\n}\n\nexport default AvCircle\n","import axios from 'axios'\nimport BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 500\n */\n canvWidth: {\n type: Number,\n default: 500\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 80\n */\n canvHeight: {\n type: Number,\n default: 80\n },\n /**\n * prop: 'played-line-width'\n * Waveform line width for played segment of audio\n * Default: 0.5\n */\n playedLineWidth: {\n type: Number,\n default: 0.5\n },\n /**\n * prop: 'played-line-color'\n * Waveform line color for played segment of audio\n * Default: navy\n */\n playedLineColor: {\n type: String,\n default: 'navy'\n },\n /**\n * prop: 'noplayed-line-width'\n * Waveform line width for not yet played segment of audio\n * Default: 0.5\n */\n noplayedLineWidth: {\n type: Number,\n default: 0.5\n },\n /**\n * prop: 'noplayed-line-color'\n * Waveform line color for not yet played segment of audio\n * Default: lime\n */\n noplayedLineColor: {\n type: String,\n default: 'lime'\n },\n /**\n * prop: 'playtime'\n * Display played time next to progress slider.\n * Default: true\n */\n playtime: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-with-ms'\n * Display milliseconds in played when true.\n * For example: 02:55.054\n * Default: true\n */\n playtimeWithMs: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-font-size'\n * Played time print font size in pixels.\n * Default: 12\n */\n playtimeFontSize: {\n type: Number,\n default: 12\n },\n /**\n * prop: 'playtime-font-family'\n * Played time print font family.\n * Default: monospace\n */\n playtimeFontFamily: {\n type: String,\n default: 'monospace'\n },\n /**\n * prop: 'playtime-font-color'\n * Played time print font RGB color string.\n * Default: grey\n */\n playtimeFontColor: {\n type: String,\n default: 'grey'\n },\n /**\n * prop: 'playtime-text-bottom'\n * Position playtime text bottom.\n * Default on top.\n * Default: false\n */\n playtimeTextBottom: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'playtime-slider'\n * Draw played slider\n * Default: true\n */\n playtimeSlider: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-slider-color'\n * Played slider color\n * Default: red\n */\n playtimeSliderColor: {\n type: String,\n default: 'red'\n },\n /**\n * prop: 'playtime-slider-width'\n * Played slider width\n * Default: 1\n */\n playtimeSliderWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'playtime-clickable'\n * Allow click on waveform to change playtime.\n * Default: true\n */\n playtimeClickable: {\n type: Boolean,\n default: true\n }\n}\n\n/**\n * Component AvLine\n */\nconst AvWaveform = {\n name: 'av-waveform',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n ctxWrapper: null,\n ctx: null,\n audio: null,\n duration: null,\n peaks: []\n }\n },\n mounted() {\n const conf = {\n responseType: 'arraybuffer',\n onDownloadProgress: this.downloadProgress\n }\n // axios\n // .get(this.audio.src + '?nocache=' + new Date().getTime() + '/', conf)\n // .then(response => {\n // this.decode(response)\n // })\n // .catch(err => {\n // console.error(`Failed to get file '${this.audio.src}'`)\n // console.log(err)\n\n // console.log(err.response.status)\n // // response data\n // const data = err.response.data\n // console.log(err.response.data)\n // })\n\n fetch(this.audio.src, {\n headers: {\n 'Content-Type': 'audio/mpeg'\n },\n responseType: 'arraybuffer'\n })\n .then(response => {\n return response.arrayBuffer()\n })\n .then(response => {\n this.decode(response)\n })\n },\n methods: {\n // Stub set analyser method from Mixin AvBase\n // as there is no need of analyser in that component\n // this method is called from mixin mounted()\n setAnalyser: function() {\n /* istanbul ignore next */\n return null\n },\n // Stub mainLoop method from Mixin AvBase as\n // here different init method will be used.\n // This method is called from mixin mounted()\n mainLoop: function() {\n /* istanbul ignore next */\n return null\n },\n /**\n * Decode audio source response array buffer\n */\n decode: function(response) {\n /* istanbul ignore next */\n const ctx = new AudioContext()\n /* istanbul ignore next */\n // ctx\n // .decodeAudioData(response)\n // .then(audioBuffer => {\n // console.log('rawr')\n // this.setPeaks(audioBuffer)\n // })\n // .catch(err => {\n // console.error('Failed to decode audio data.')\n // console.log(err)\n // })\n\n ctx.decodeAudioData(\n response,\n audioBuffer => {\n this.setPeaks(audioBuffer)\n },\n error => console.error(error)\n )\n },\n /**\n * Set peaks array for waveform.\n * For now use only one channel\n */\n setPeaks: function(buffer) {\n const peaks = []\n let min = 0\n let max = 0\n let top = 0\n let bottom = 0\n const segSize = Math.ceil(buffer.length / this.canvWidth)\n const width = this.canvWidth\n const height = this.canvHeight\n this.$emit('duration', buffer.duration)\n this.duration = buffer.duration\n\n for (let c = 0; c < buffer.numberOfChannels; c++) {\n const data = buffer.getChannelData(c)\n for (let s = 0; s < width; s++) {\n const start = ~~(s * segSize)\n const end = ~~(start + segSize)\n min = 0\n max = 0\n for (let i = start; i < end; i++) {\n min = data[i] < min ? data[i] : min\n max = data[i] > max ? data[i] : max\n }\n // merge multi channel data\n if (peaks[s]) {\n peaks[s][0] = peaks[s][0] < max ? max : peaks[s][0]\n peaks[s][1] = peaks[s][1] > min ? min : peaks[s][1]\n }\n peaks[s] = [max, min]\n }\n }\n // set peaks relativelly to canvas dimensions\n for (let i = 0; i < peaks.length; i++) {\n max = peaks[i][0]\n min = peaks[i][1]\n top = height / 2 - (max * height) / 2\n bottom = height / 2 - (min * height) / 2\n peaks[i] = [top, bottom === top ? top + 1 : bottom]\n }\n this.peaks = peaks\n\n if (this.playtimeClickable) {\n this.ctxWrapper.addEventListener('click', e => this.updateTime(e))\n }\n this.waveform()\n },\n /**\n * Draw wave form.\n */\n waveform: function() {\n const peaks = this.peaks\n const time = this.audio.currentTime\n const playX = this.playX(time)\n let x = 0\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n x = this.draw(\n peaks.slice(0, playX),\n this.playedLineWidth,\n this.playedLineColor,\n x\n )\n this.draw(\n peaks.slice(playX),\n this.noplayedLineWidth,\n this.noplayedLineColor,\n x\n )\n this.drawSlider(time)\n this.drawTime(time)\n\n requestAnimationFrame(this.waveform)\n },\n /**\n * Draw segment.\n */\n draw: function(data, lineWidth, color, x) {\n this.ctx.lineWidth = lineWidth\n this.ctx.strokeStyle = color\n this.ctx.beginPath()\n data.forEach(v => {\n this.ctx.moveTo(x, v[0])\n this.ctx.lineTo(x, v[1])\n x++\n })\n this.ctx.stroke()\n return x\n },\n /**\n * Formatted string of current play time.\n * @param {Number} Current play time\n * @return {String}\n */\n timeFormat: function(timeSec) {\n let frmStr = ''\n const time = parseFloat(timeSec)\n if (isNaN(time)) {\n return frmStr\n }\n\n const min = ~~(time / 60)\n const sec = ~~(time % 60)\n const ms = ~~((time % 1) * 1000)\n\n frmStr = min < 10 ? `0${min}:` : `${min}:`\n frmStr += `0${sec}`.substr(-2)\n if (this.playtimeWithMs) {\n frmStr += '.' + `00${ms}`.substr(-3)\n }\n\n return frmStr\n },\n /**\n * Draw play time next to slider.\n * @param {Number} Played time sec.millisec.\n * @return {Void}\n */\n drawTime: function(time) {\n const timeStr = this.timeFormat(time)\n const offset = 3\n const textWidth = ~~this.ctx.measureText(timeStr).width\n const playX = this.playX(time)\n const textX =\n playX > this.canvWidth - textWidth - offset\n ? playX - textWidth - offset\n : playX + offset\n const textY = this.playtimeTextBottom\n ? this.canvHeight - this.playtimeFontSize + offset\n : this.playtimeFontSize + offset\n this.ctx.fillStyle = this.playtimeFontColor\n this.ctx.font = `${this.playtimeFontSize}px ${this.playtimeFontFamily}`\n this.ctx.fillText(timeStr, textX, textY)\n },\n /**\n * Draw played slider.\n * @param {Number} Played time sec.millisec.\n * @return {Void}\n */\n drawSlider: function(time) {\n const playX = this.playX(time)\n this.ctx.lineWidth = this.playtimeSliderWidth\n this.ctx.strokeStyle = this.playtimeSliderColor\n this.ctx.beginPath()\n this.ctx.moveTo(playX, 0)\n this.ctx.lineTo(playX, this.canvHeight)\n this.ctx.stroke()\n },\n /**\n * Get x coodrinate for play time.\n * @param {Number}\n * @return {Number}\n */\n playX: function(time) {\n return ~~((time / this.duration) * this.canvWidth)\n },\n /**\n * Audio playback update time callback.\n * @param event\n */\n updateTime: function(e) {\n this.audio.currentTime = (e.offsetX / this.canvWidth) * this.duration\n },\n /**\n * Audio source download progress\n */\n downloadProgress: function(ev) {\n const progressX = Math.round((ev.loaded / ev.total) * this.canvWidth)\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n this.ctx.beginPath()\n this.ctx.strokeStyle = this.noplayedLineColor\n this.ctx.moveTo(0, this.canvHeight / 2)\n this.ctx.lineTo(progressX, this.canvHeight / 2)\n this.ctx.stroke()\n }\n }\n}\nexport default AvWaveform\n","import AvBars from './components/AvBars'\nimport AvLine from './components/AvLine'\nimport AvCircle from './components/AvCircle'\nimport AvWaveform from './components/AvWaveform'\n\nconst AVPlugin = {}\n\nAVPlugin.install = function(Vue) {\n // browsers compatibility\n window.AudioContext =\n window.AudioContext ||\n window.webkitAudioContext ||\n window.mozAudioContext ||\n window.msAudioContext\n window.requestAnimationFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame\n // Components\n Vue.component(AvBars.name, AvBars)\n Vue.component(AvLine.name, AvLine)\n Vue.component(AvCircle.name, AvCircle)\n Vue.component(AvWaveform.name, AvWaveform)\n Vue.prototype.$avAudioRefs = {}\n}\n\nexport default AVPlugin\n","import Vue from 'vue'\r\n// const AudioVisual = require('vue-audio-visual')\r\n\r\n// import AVPlugin from 'vue-audio-visual'\r\nimport AVPlugin from '@/modules/vue-audio-visual'\r\n\r\nVue.use(AVPlugin)\r\n","export default function ({ route, redirect }) {\r\n // Normalize the route path by removing the trailing slash (except if it's just '/')\r\n let normalizedPath = route.path;\r\n if (normalizedPath.length > 1 && normalizedPath.endsWith('/')) {\r\n normalizedPath = normalizedPath.slice(0, -1);\r\n }\r\n\r\n // Define your custom redirect rules.\r\n // Each rule uses a regex (that accepts an optional trailing slash) and a replacement.\r\n const redirects = [\r\n {\r\n // For review URLs: e.g. /review/abc or /review/abc/ → /studio/edit/abc\r\n from: /^\\/review\\/(.+?)\\/?$/,\r\n to: \"/studio/edit/$1\"\r\n },\r\n {\r\n // For curriculums: e.g. /curriculums or /curriculums/ → /lessons\r\n from: /^\\/curriculums\\/?$/,\r\n to: \"/lessons\"\r\n },\r\n {\r\n // For stories:\r\n // This rule matches:\r\n // - \"/stories\" or \"/stories/\" \r\n // - \"/stories/slug\" or \"/stories/slug/\"\r\n // and always redirects to the /projects version (without a trailing slash)\r\n from: /^\\/stories(\\/.*)?\\/?$/,\r\n to: \"/projects$1\"\r\n },\r\n ];\r\n\r\n // Check if one of the rules applies.\r\n let newLocation = normalizedPath;\r\n let ruleFound = false;\r\n for (const rule of redirects) {\r\n if (rule.from.test(normalizedPath)) {\r\n newLocation = normalizedPath.replace(rule.from, rule.to);\r\n ruleFound = true;\r\n break;\r\n }\r\n }\r\n\r\n // Ensure the new location does NOT have a trailing slash (unless it is the root '/').\r\n if (newLocation !== '/' && newLocation.endsWith('/')) {\r\n newLocation = newLocation.slice(0, -1);\r\n }\r\n\r\n // If a rule was matched and the new location differs from the normalized path, redirect.\r\n if (ruleFound && newLocation !== normalizedPath) {\r\n return redirect(301, newLocation);\r\n }\r\n\r\n // Global catch: if no custom rule was triggered but the route originally ended with a slash,\r\n // redirect to the version without a trailing slash.\r\n if (!ruleFound && route.path.length > 1 && route.path.endsWith('/')) {\r\n return redirect(301, normalizedPath);\r\n }\r\n}\r\n","// style-loader: Adds some css to the DOM by adding a