&post_type=wp-manga&op=&author=&artist=&release=&adult=&type=&language=",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "separator": "+",
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n};\nconst CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n};\nconst Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n};\nconst Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\nfunction Search ( request, extra, separator, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.separator = separator;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n}\n\nfunction Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n}\n\nfunction Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n}\n\nfunction Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n}\n\nfunction Size ( width, height ) {\n this.width = width;\n this.height = height;\n}\n\nfunction Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n}\n\nfunction Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction quickData ( link, image, title, field1 ) {\n return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link );\n}\n\nfunction shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = [ ];\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar lastAdded = document.querySelector( '.c-tabs-item' ).querySelectorAll( '.row.c-tabs-item__content' );\nlet lastAddedArray = [ ];\nfor ( var x = 0; x < lastAdded.length; x++ ) {\n let list = lastAdded[ x ];\n let title = list.querySelector( '.h4 a' ).textContent;\n var link = list.querySelector( '.h4 a' ).href;\n var image = list.querySelector( 'img' ).src;\n var desc = list.querySelector( '.post-content' ).textContent.replaceAll( '\\n', ' ' );\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n if ( title.includes( '(VF)' ) ) {\n var field2 = 'VF';\n } else {\n var field2 = 'VOSTFR';\n };\n var finalData = new Data( image, title, desc, '', field2, 'unknown', 'unknown', false, link );;\n lastAddedArray.push( finalData );\n}\nvar testLayout = new Layout( new Insets( 10, 10, 10, 10 ), 1, 2, 3, 1, 500, new Size( 400, 400 ), new Ratio( 'width', 4, 11 ), new Size( 0, 0 ), 10, 10 );\noutput.push( new Output( CellDesings.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', false ), testLayout, lastAddedArray ) );;\nlet searchPageObject = new Search( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), '', new JavascriptConfig( true, false, '' ), output );\nvar finalJson = JSON.stringify( searchPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIddpICGKbbGOLrREhRCblt": {
+ "path": "NMTxW",
+ "id": "search,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 0
+ }
+ }],
+ "info": [{
+ "request": {
+ "url": "https://v2.voiranime.com/anime/kimi-wo-aishita-hitori-no-boku-e/",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Info ( request, extra, javascriptConfig, output ) {\n\tthis.request = request;\n\tthis.extra = extra;\n\tthis.javascriptConfig = javascriptConfig;\n\tthis.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n\tthis.url = url;\n\tthis.method = method;\n\tthis.headers = headers;\n\tthis.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n\tthis.commands = commands;\n\tthis.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n\tthis.commandName = commandName;\n\tthis.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n\tthis.removeJavascript = removeJavascript;\n\tthis.loadInWebView = loadInWebView;\n\tthis.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n\tthis.key = key;\n\tthis.value = value;\n}\n\nfunction Chapter ( chapName, link, openInWebView ) {\n\tthis.chapName = chapName;\n\tthis.link = link;\n\tthis.openInWebView = openInWebView;\n}\n\nfunction Output ( image, title, link, description, genres, field1, field2, field3, field4, chapters ) {\n\tthis.image = image;\n\tthis.link = link;\n\tthis.title = title;\n\tthis.description = description;\n\tthis.genres = genres;\n\tthis.field1 = field1;\n\tthis.field2 = field2;\n\tthis.field3 = field3;\n\tthis.field4 = field4;\n\tthis.chapters = chapters;\n}\n\nfunction getStuff ( array, match ) {\n\tfor ( var x = 0; x < array.length; x++ ) {\n\t\t\tlet data = array[ x ].innerText;\n\t\t\tif ( data.includes( match ) ) {\n\t\t\t\t\treturn data.replace( match, '' ).trim( );\n\t\t\t}\n\t}\n}\n\nfunction getHtmlStuff ( array, match ) {\n\tfor ( var x = 0; x < array.length; x++ ) {\n\t\t\tlet data = array[ x ].innerText;\n\t\t\tif ( data.includes( match ) ) {\n\t\t\t\t\treturn array[ x ];\n\t\t\t}\n\t}\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar episodes = [ ];\n\nlet metadata = document.querySelectorAll('div.post-content div.post-content_item');\nlet type = '';\nlet status = '';\n\nfor(let info of metadata){\n\tif(info.querySelector('.summary-heading h5').textContent.includes('Status')){\n\t\tstatus = info.querySelector('.summary-content').textContent.trim();\n\t} else if (info.querySelector('.summary-heading h5').textContent.includes('Type')){\n\t\ttype = info.querySelector('.summary-content').textContent.trim();\n\t}\n}\n\nlet genres = [ ];\ngenres = Array.from( document.querySelectorAll( '.genres-content a' ) ).map( g => g.textContent );\nlet desc = document.querySelector( '.depion-summary' ).textContent.trim( );\nlet title = document.querySelector( '.post-title h1' ).textContent.trim( );\nif ( title.includes( 'VF' ) ) {\n\ttype = 'VF';\n} else {\n\ttype = 'VOSTFR'\n}\nlet image = document.querySelector( '.summary_image img' ).src;\nimage = new ModuleRequest( image, 'get', emptyKeyValue, null );\nvar chapters = document.querySelector( '.listing-chapters_wrap .main.version-chap' ).querySelectorAll( 'li' );\nfor ( let i = chapters.length - 1; i >= 0; i-- ) {\n\tvar element = chapters[ i ];\n\tvar fixedLink = element.querySelector( 'a' ).href;\n\tlet episodeName = ''\n\tif(!element.querySelector('a').textContent.includes('FILM')){\n\t\t\tepisodeName = `Episode ${element.querySelector('a').textContent.match(`(-)+(.[0-9]+.)+(${type})`)[2]} ${type}`;\n\t} else {\n\t\t\tepisodeName = element.querySelector('a').textContent;\n\t}\n\tlet chapter = new Chapter( episodeName, new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ), false );\n\tepisodes.push( chapter );\n}\nlet infoPageObject = new Info( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( false, false, '' ), new Output( image, title, parsedJson.request, desc, genres, status, 'Anime', type, 'Eps: ' + episodes.length, episodes ) );\nvar finalJson = JSON.stringify( infoPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "genres": [""],
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "chapters": [{
+ "chapName": "",
+ "openInWebView": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdpnDEppffsoGbIiOTyqjg": {
+ "path": "Kanvi",
+ "id": "info,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 6742.22216796875,
+ "openedMenu": "Request"
+ }
+ }],
+ "chapters": [{
+ "request": {
+ "url": "https://v2.voiranime.com/anime/kimi-wo-aishita-hitori-no-boku-e/",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Chapters ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( videos, images, text ) {\n this.videos = videos;\n this.images = images;\n this.text = text;\n}\n\nfunction Videos ( needsResolver, rawVideo ) {\n this.needsResolver = needsResolver;\n this.rawVideo = rawVideo;\n}\n\nfunction NeedsResolver ( resolverIdentifier, link ) {\n this.resolverIdentifier = resolverIdentifier;\n this.link = link;\n}\n\nfunction RawVideo ( video ) {\n this.video = video;\n}\n\nfunction Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n}\n\nfunction Text ( text ) {\n this.text = text;\n}\nvar output = [ ];\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nvar emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet newRequest = new ModuleRequest( parsedJson.request.url, 'get', emptyKeyValue, null );\nvar commands = [ new Commands( 'helperFunction', [ new KeyValue( 'isCustomRequest', 'true' ), new KeyValue( 'name', 'example' ) ] ) ];\nfor ( const data of parsedJson.global.variables ) {\n const link = data.value;\n if ( link.includes( 'streamtape.com' ) ) {\n var fixedLink = link.replace( 'https://streamtape.com/', 'https://streamta.pe/' );\n output.push( new NeedsResolver( '', new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ) ) );\n }\n if ( link.includes( 'videovard.sx' ) || link.includes( 'video.sibnet.ru/' ) || link.includes( 'yourupload.com' ) || link.includes( 'voe' ) ) {\n output.push( new NeedsResolver( '', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) );\n } else if ( link.includes( 'sbfull' ) || link.includes( 'watchsb' ) ) {\n output.push( new NeedsResolver( 'WATCHSB', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) );\n } else {\n output.push( new NeedsResolver( 'UNSUPPORTED', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) );\n }\n}\nif(output.length == 2){\n output.shift();\n}\nlet emptyExtra = new Extra( commands, emptyKeyValue );\nvar chaptersObject = new Chapters( newRequest, emptyExtra, new JavascriptConfig( false, false, '' ), new Output( new Videos( output, null ), null, null ), new Extra( '', emptyKeyValue ) );\nvar finalJson = JSON.stringify( chaptersObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "videos": {
+ "needsResolver": [{
+ "resolverIdentifier": "",
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }],
+ "rawVideo": [{
+ "video": [{
+ "videoQuality": "",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }]
+ },
+ "images": [{
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }],
+ "text": {
+ "text": ""
+ }
+ },
+ "moduleCreatorIdBWJCSKOfoKrejmbGQGch": {
+ "path": "ISJbw",
+ "id": "chapters,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Request",
+ "javascriptEditorScroll": 86
+ }
+ }],
+ "moduleResolvers": [{
+ "resolverInfo": {
+ "resolverName": "STREAMTA",
+ "nameMatches": ["STREAMTA"],
+ "developer": "ナビル",
+ "moduleID": "8465132120",
+ "resolverVersion": 1.6,
+ "baseURL": "",
+ "moduleCreatorIdDdQVDyzKmSpxcMcRbVYE": {
+ "path": "GAqBw",
+ "id": "moduleResolvers,1,resolverInfosection",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdljrxMpojqbKjPxMctHjj": {
+ "path": "bNwJI",
+ "id": "moduleResolvers,1,resolverInfocell",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver(request, extra, javascriptConfig, output) {this.request = request;this.extra = extra;this.javascriptConfig = javascriptConfig;this.output = output;}function ModuleRequest(url, method, headers, httpBody) {this.url = url;this.method = method;this.headers = headers;this.httpBody = httpBody;}function Extra(commands, extraInfo) {this.commands = commands;this.extraInfo = extraInfo;}function Commands(commandName, params) {this.commandName = commandName;this.params = params;}function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {this.removeJavascript = removeJavascript;this.loadInWebView = loadInWebView;this.javaScript = javaScript;}function KeyValue(key, value) {this.key = key;this.value = value;}function Output(video) {this.video = video;}function Video(videoQuality, videoLink) {this.videoQuality = videoQuality;this.videoLink = videoLink;}function getNext(match, array) {for(var x = 0; x < array.length; x++) {let mMatch = array[x];if(mMatch.includes(match)) {return array[x + 1];}}}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url)];var videos = [];let playerRegex = /innerHTML\\s=\\s*\"([^\"]+)\"\\s?\\+\\s?''\\+\\s?\\('([^']+)/;let body = document.body.innerText;let playerMatch = playerRegex.exec(body);if (playerMatch) { let matchedLink = playerMatch[2]; let index = matchedLink.indexOf('?');if (index == -1){try{firstpart = playerMatch[1].split('=')[1].replace('\"','');secondpart = playerMatch[2].substr(5);secondtry = playerMatch[2].substr(4);let videoLink = 'https://streamta.pe/get_video?id=' + firstpart + secondpart + '&stream=1';let fixedLink = 'https://streamta.pe/get_video?id=' + firstpart + secondtry + '&stream=1';console.log(videoLink,fixedLink);videos.push(new Video('THAI GUY WAS HERE', new ModuleRequest(fixedLink, 'get', emptyKeyValue, null)));videos.push(new Video('Normal',new ModuleRequest(videoLink,'get',emptyKeyValue,null)));}catch(e){}try{if (matchedLink.match(/^=/)){let videoLink = 'https://streamta.pe/get_video?id=' + matchedLink.substr(5) + '&stream=1';if (videoLink.includes('id==')) {videoLink = videoLink.replace('id==', 'id='); }console.log(videoLink);videos.push(new Video('Normal',new ModuleRequest(videoLink,'get',emptyKeyValue,null)));}}catch(e){}try{ if(matchedLink.match(/id=/)) { split = matchedLink.split('id='); let videoLink = 'https://streamta.pe/get_video?id=' + split[1] + '&stream=1'; console.log(videoLink); videos.push(new Video('Normal', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); } }catch(e){}try{if (matchedLink.match(/^([a-zA-Z]+d=)/)){split = matchedLink.split('d=');let videoLink = 'https://streamta.pe/get_video?id=' + split[1] + '&stream=1';console.log(videoLink);videos.push(new Video('Normal',new ModuleRequest(videoLink,'get',emptyKeyValue,null)));}}catch(e){}}else{let videoLink = `https://streamta.pe/get_video${matchedLink.substr(index)}&stream=1`;console.log(videoLink);videos.push(new Video('Normal',new ModuleRequest(videoLink,'get',emptyKeyValue,null)));}}let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue);var chaptersObject = new Resolver(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(videos));var finalJson = JSON.stringify(chaptersObject);savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "234234823",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdPhdjxlUMmSfMVumJRZxj": {
+ "path": "xlMVJ",
+ "id": "moduleResolvers,1,resolver,0cell",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdMomwtKdyMZnhCkeYbINM": {
+ "path": "jsrMJ",
+ "id": "moduleResolvers,1section",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdKxYzOSubqjWDmOlpEbZs": {
+ "path": "resolver",
+ "id": "moduleResolvers,1,resolversection",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }, {
+ "resolverInfo": {
+ "resolverName": "VOE",
+ "nameMatches": ["VOE"],
+ "developer": "ナビル",
+ "moduleID": "6546514333321567",
+ "resolverVersion": 1.21,
+ "baseURL": "https://voe.sx",
+ "moduleCreatorIdvnqYdEXcxexUNwcyOSXH": {
+ "path": "KDKBo",
+ "id": "moduleResolvers,2,resolverInfosection",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdJmJFDYwVwabWPJoWueYY": {
+ "path": "hOJYR",
+ "id": "moduleResolvers,2,resolverInfocell",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output; } function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody; } function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo; } function Commands(commandName, params) { this.commandName = commandName; this.params = params; } function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript; } function KeyValue(key, value) { this.key = key; this.value = value; } function Output(video) { this.video = video; } function Video(videoQuality, videoLink) { this.videoQuality = videoQuality; this.videoLink = videoLink; } function getNext(match, array) { for (var x = 0; x < array.length; x++) { let mMatch = array[x]; if (mMatch.includes(match)) { return array[x + 1]; } } } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url)]; var videos = []; let scripts = document.querySelectorAll('p'); for (script of scripts) { if (script.innerHTML.includes('sources')) { content = script.innerHTML; nextRequest = content.match(/(http.*?\\.m3u8+)/gm)[0]; console.log(nextRequest); } } let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var chaptersObject = new Resolver(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(videos)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdUhFRphPAIRrFAMpxxOuH": {
+ "path": "Czsvi",
+ "id": "moduleResolvers,2,resolver,0cell",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }, {
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output;}function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody;}function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo;}function Commands(commandName, params) { this.commandName = commandName; this.params = params;}function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript;}function KeyValue(key, value) { this.key = key; this.value = value;}function Output(video) { this.video = video;}function Video(videoQuality, videoLink) { this.videoQuality = videoQuality; this.videoLink = videoLink;}function getNext(match, array) { for (var x = 0; x < array.length; x++) { let mMatch = array[x]; if (mMatch.includes(match)) { return array[x + 1]; } }}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url)];var videos = [];var paramjs = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');var line = paramjs.split('#');for (lines of line) { if (lines.includes('EXT-X-STREAM-INF' || 'EXT-X-I-FRAME-STREAM-INF')) { var link = 'https:' + lines.split('URI=')[0].split('https:')[1].trim(); var resolution = lines.match(/RESOLUTION=(\\d+x\\d+)/gm)[0].split('=')[1]; videos.push(new Video(resolution, new ModuleRequest(link, 'get', emptyKeyValue, null))) }}let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue);videos.reverse();var chaptersObject = new Resolver(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(videos));var finalJson = JSON.stringify(chaptersObject);savedData.innerText = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdNqxcWDBPjREzMGHnErCD": {
+ "path": "rKquC",
+ "id": "moduleResolvers,2,resolver,1cell",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdaQmuPeMKdaEzrIiOEizg": {
+ "path": "MdyYF",
+ "id": "moduleResolvers,2section",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdcQnapwZhszknjOlpzQUk": {
+ "path": "resolver",
+ "id": "moduleResolvers,2,resolversection",
+ "sectionsHidden": ["moduleCreatorIdAbUXcfrzEZmkZAnVsLNg"],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "responseCodeFunctions": [{
+ "code": 0,
+ "msgTitle": "",
+ "msgBody": "",
+ "type": "normal",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ \n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdQCdJjNwItWywWIqEgHor": {
+ "path": "alfJU",
+ "id": "responseCodeFunctions,0,functions,0cell",
+ "sectionsHidden": ["moduleCreatorIduivPUCBKnzeizkSWgeQn"],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 0
+ }
+ }],
+ "moduleCreatorIdbHYRApMtEJnjzdSykaAD": {
+ "path": "Xnqdl",
+ "id": "responseCodeFunctions,0section",
+ "sectionsHidden": ["moduleCreatorIduivPUCBKnzeizkSWgeQn"],
+ "options": {
+ "name": "Function"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdyMAnFgPjNUtsQQewgVUo": {
+ "path": "UmYFw",
+ "id": "responseCodeFunctions,0,section",
+ "sectionsHidden": ["moduleCreatorIduivPUCBKnzeizkSWgeQn"],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdmyejrfrRpfXzheGCCfLk": {
+ "path": "NXrci",
+ "id": "responseCodeFunctions,0,cell",
+ "sectionsHidden": ["moduleCreatorIduivPUCBKnzeizkSWgeQn"],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdEBzVxpNBDnnxAwNKRSBX": {
+ "path": "functions",
+ "id": "responseCodeFunctions,0,functionssection",
+ "sectionsHidden": ["moduleCreatorIduivPUCBKnzeizkSWgeQn"],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "helperFunctions": [{
+ "functionName": "example",
+ "msgTitle": "RECAPTCHA",
+ "msgBody": "Complète d'abord le recaptcha présent sur la page et tu pourras ensuite clique sur le bouton 'Done'. Prends en compte le fait que seuls les serveurs STAPE,VOE et YU sont supportés pour le moment",
+ "type": "captcha",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": true,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Info ( request, extra, javascriptConfig ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\nconst savedData = document.getElementById( 'ketsu-final-data' );\nconst parsedJson = JSON.parse( savedData.innerHTML );\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nconst data = document.querySelector( '.chapter-video-frame p iframe' ).src;\nconst commands = [ new Commands( 'variable', [ new KeyValue( 'data', data ), new KeyValue( 'current', parsedJson.request.url ) ] ) ];\nconst infoPageObject = new Info( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( commands, emptyKeyValue ), new JavascriptConfig( false, false, '' ) );\nconst finalJson = JSON.stringify( infoPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdtdLRfUKiHxxfzYaFnAgq": {
+ "path": "BeoOS",
+ "id": "helperFunctions,0,functions,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Javascript",
+ "javascriptEditorScroll": 342.22222900390625
+ }
+ }],
+ "moduleCreatorIdDFSCSvEVFZzigwGtWhLD": {
+ "path": "hGIYM",
+ "id": "helperFunctions,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdwMlYuaMcdAfxKuoaEEgh": {
+ "path": "Mnvhz",
+ "id": "helperFunctions,0,section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdhWbxgpiqRvuTDhsddBug": {
+ "path": "DjyNG",
+ "id": "helperFunctions,0,cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdBNSKzjvlsNzGTpnUXwNi": {
+ "path": "functions",
+ "id": "helperFunctions,0,functionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorGlobalOptions": {
+ "selected": "moduleCreatorIdpnDEppffsoGbIiOTyqjg",
+ "notes": {},
+ "hideViews": [],
+ "id": "JLJIujxwZiupHvD",
+ "projectName": "VoirAnime",
+ "notesData": {
+ "openedNotes": ["oFwjzvDpdfxlaKQrGUwc"],
+ "activeNote": "oFwjzvDpdfxlaKQrGUwc",
+ "notes": {}
+ }
+ },
+ "moduleCreatorIdDouOnJJOgZHvszogVwVW": {
+ "path": "mainPage",
+ "id": "mainPagesection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Main Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdDJzEkDatgxzybQRBkOJY": {
+ "path": "search",
+ "id": "searchsection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Search Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdXeRhHaYvzLxtqeEqAAHQ": {
+ "path": "info",
+ "id": "infosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Info Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdLJqkPPevuGWpWDHEnptq": {
+ "path": "chapters",
+ "id": "chapterssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Chapters",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdAbUXcfrzEZmkZAnVsLNg": {
+ "path": "moduleResolvers",
+ "id": "moduleResolverssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolvers",
+ "listName": "Resolver"
+ },
+ "cellsHidden": true
+ },
+ "moduleCreatorIduivPUCBKnzeizkSWgeQn": {
+ "path": "responseCodeFunctions",
+ "id": "responseCodeFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Response Code Funtions",
+ "listName": "Function"
+ },
+ "cellsHidden": true
+ },
+ "moduleCreatorIdHHUBHGkfeEFYArxvnZFk": {
+ "path": "helperFunctions",
+ "id": "helperFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Helper Functions",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+}
\ No newline at end of file
diff --git a/Module Parser KETSU/VostFree Ketsu/Chapters/Chapters.html b/Module Parser KETSU/VostFree Ketsu/Chapters/Chapters.html
new file mode 100644
index 0000000..7ad1036
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/Chapters/Chapters.html
@@ -0,0 +1,128 @@
+
+
diff --git a/Module Parser KETSU/VostFree Ketsu/Chapters/chapters2.html b/Module Parser KETSU/VostFree Ketsu/Chapters/chapters2.html
new file mode 100644
index 0000000..6485f3c
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/Chapters/chapters2.html
@@ -0,0 +1,1277 @@
+
+
+
+
+ Sayonara Watashi no Cramer VOSTFR en DDL STREAMING
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {"javascriptConfig":{"removeJavascript":true,"loadInWebView":false,"javaScript":""},"output":{"images":[{"url":"empty","method":"get","headers":[{"key":"key","value":"value"}]}],"text":{"text":""},"videos":{"needsResolver":[{"link":{"url":"","method":"get","headers":[{"key":"key","value":"value"}]},"resolverIdentifier":""}],"rawVideo":[{"video":[{"videoLink":{"url":"http:\/\/commondatastorage.googleapis.com\/gtv-videos-bucket\/sample\/BigBuckBunny.mp4","method":"get","headers":[{"key":"key","value":"value"}]},"videoQuality":""}]}]}},"request":{"url":"https:\/\/vostfree.com\/993-sayonara-watashi-no-cramer-vostfr-ddl-streaming-1fichier-uptobox.html#1","method":"get","headers":[{"key":"key","value":"value"},{"key":"","value":""}]},"extra":{"commands":[{"commandName":"","params":[{"key":"","value":""}]}],"extraInfo":[{"key":"","value":""}]},"global":{"cookies":[{"key":"","value":""}],"variables":[],"headers":[{"key":"","value":""}]},"responseInfo":{"headers":[{"key":"Alt-Svc","value":"h3-27=%22%3A443%22;%20ma=86400,%20h3-28=%22%3A443%22;%20ma=86400,%20h3-29=%22%3A443%22;%20ma=86400"},{"key":"cf-request-id","value":"09678567ef0000065e75396000000001"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"Date","value":"Mon,%2012%20Apr%202021%2011%3A51%3A41%20GMT"},{"key":"x-powered-by","value":"PHP%2F7.4.16,%20PleskLin"},{"key":"report-to","value":"%7B%22max_age%22%3A604800,%22group%22%3A%22cf-nel%22,%22endpoints%22%3A%5B%7B%22url%22%3A%22https%3A%5C%2F%5C%2Fa.nel.cloudflare.com%5C%2Freport%3Fs=HhLeTd59iaI0KOe8AwHL1J9ue3dS%252BbkU%252FZgvy9tKj%252B%252Bw8rw3qPlFekvJyQQmZMkRdJqaoK6yksJgJHSDyIaJNYhy3OWmhznOFPZSCQARPmo8xngDxySQB94%253D%22%7D%5D%7D"},{"key":"nel","value":"%7B%22report_to%22%3A%22cf-nel%22,%22max_age%22%3A604800%7D"},{"key":"Content-Type","value":"text%2Fhtml;%20charset=utf-8"},{"key":"Content-Encoding","value":"br"},{"key":"Cache-Control","value":"no-store,%20no-cache,%20must-revalidate"},{"key":"cf-ray","value":"63ec3e864a90065e-LHR"},{"key":"expect-ct","value":"max-age=604800,%20report-uri=%22https%3A%2F%2Freport-uri.cloudflare.com%2Fcdn-cgi%2Fbeacon%2Fexpect-ct%22"},{"key":"Pragma","value":"no-cache"},{"key":"Last-Modified","value":"Sun,%2011%20Apr%202021%2023%3A53%3A47%20GMT"},{"key":"Expires","value":"Thu,%2019%20Nov%201981%2008%3A52%3A00%20GMT"}],"responseUrl":"https:\/\/vostfree.com\/993-sayonara-watashi-no-cramer-vostfr-ddl-streaming-1fichier-uptobox.html#1","httpBody":""},"layoutInfo":{"width":0,"height":0}}
+
+
+
+
+
+
+
+
+
+ window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-126989702-1');
+
+
+
+ /*/* */ (function(){var c0faf6cb05caf0b47d2fb54865703422="Ec1P3sv6Ml31PB-ZQSvTnXa1KEt3erRkfB9pQTMxAltF2chpxY1tpav-j1J20A5fcQITbODJh08aUyWstyNI";var a=['EsKeIlDClVNuwqx3w4t+wpjDlQ==','H8KZwojDvcKFByAuw6pCw7XCvMOnw4gYUFc+FhlIecKcfF0=','OSANw7I=','AMKawovCo8KQWG1r','c8KKa8KZdcOWFMKjw7k=','w4nDtMKZwpoOahBaw77DrH0Ew57DiMOTCcK7QkXDoDHDq8KWIcOSe8O2w6vDj8OoeMKRV1jCiMOvNMKF','wp44w5ZWw7HDjw==','P33CgBJCFMOjw7DClnfCsFDCrB7DicOdw5XCt8OMVw==','wonDrsKwBMKgKzYnwp1G','F8OJw5Q1wo0bSMOv','bTDCq8O0wpEow6IOw5HCjMOIA8K0w6gw','KDsawq7Cv03CtGY=','w5rDpsKIw5USaBA=','YcKswq7CpcOrcg==','w57DlMOvwqk=','L2/Cg3lWGsOgw7vCjWHCoGPCtCvChsOZw7TCu8KOXwTCjTU=','EirCmMOrwr/ClGB+w41PU1Y=','EsOVw44uwoM=','Bj3DrHDDr8KlA2JGw7MR','IMKUAw==','wrlpX8O2C0s=','AsKPNVjCkUI=','wpbDocKnE8K8MAo=','McKIwppAw7hIESDDmcKpUMOG','KWsWw7sSw5ITw6ZUdDXDpX51wpdWwrkCw4IGV8ORIEXDny3ClVDDpB9VSSNkZk/CiRfCqHPDlMKTw7YvRcODw7k=','w47DrMKew4EJYAFNw6HDkHERw7LDtg==','KDEVwrrCq2rCv2YRwrLCtsKD','w4vCtsKL','eiLDnMOnIm3Cq104QWlhwqk='];(function(b,c){var e=function(g){while(--g){b['push'](b['shift']());}};e(++c);}(a,0xbb));var b=function(c,d){c=c-0x0;var e=a[c];if(b['bfGAMm']===undefined){(function(){var h;try{var j=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');');h=j();}catch(k){h=window;}var i='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';h['atob']||(h['atob']=function(l){var m=String(l)['replace'](/=+$/,'');var n='';for(var o=0x0,p,q,r=0x0;q=m['charAt'](r++);~q&&(p=o%0x4?p*0x40+q:q,o++%0x4)?n+=String['fromCharCode'](0xff&p>>(-0x2*o&0x6)):0x0){q=i['indexOf'](q);}return n;});}());var g=function(h,l){var m=[],n=0x0,o,p='',q='';h=atob(h);for(var t=0x0,u=h['length'];t<u;t++){q+='%'+('00'+h['charCodeAt'](t)['toString'](0x10))['slice'](-0x2);}h=decodeURIComponent(q);var r;for(r=0x0;r<0x100;r++){m[r]=r;}for(r=0x0;r<0x100;r++){n=(n+m[r]+l['charCodeAt'](r%l['length']))%0x100;o=m[r];m[r]=m[n];m[n]=o;}r=0x0;n=0x0;for(var v=0x0;v<h['length'];v++){r=(r+0x1)%0x100;n=(n+m[r])%0x100;o=m[r];m[r]=m[n];m[n]=o;p+=String['fromCharCode'](h['charCodeAt'](v)^m[(m[r]+m[n])%0x100]);}return p;};b['lASgFE']=g;b['jrQaYM']={};b['bfGAMm']=!![];}var f=b['jrQaYM'][c];if(f===undefined){if(b['TxbjBi']===undefined){b['TxbjBi']=!![];}e=b['lASgFE'](e,d);b['jrQaYM'][c]=e;}else{e=f;}return e;};var u=window;u[b('0x1','k&z!')]=[[b('0x7','ZC2G'),0x2e82fe],[b('0x16','T7o9'),0x0],[b('0xc','ypdi'),b('0xe','WA]P')],[b('0xd','F6wi'),0x0],[b('0x1c','ypdi'),![]],[b('0xf','1@6J'),0x0],[b('0xa','DFk5'),!0x0]];var h=[b('0x15','ypdi'),b('0xb','yck0'),b('0x2','C2wl'),b('0x11','fc)l')],c=0x0,o,e=function(){if(!h[c])return;o=u[b('0x19','jYuU')][b('0x10','o1nv')](b('0x8','o1nv'));o[b('0x12','yck0')]=b('0x1a','5yLx');o[b('0x4','jYuU')]=!0x0;var d=u[b('0x1b','F6wi')][b('0x17','C2wl')](b('0x0','W$iV'))[0x0];o[b('0x6','fVtP')]=b('0x13','fc)l')+h[c];o[b('0x5','#C6x')]=b('0x14','H@^B');o[b('0x9','tuEu')]=function(){c++;e();};d[b('0x18','tuEu')][b('0x3','4AQG')](o,d);};e();})(); /*/* */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Episode 02
+
+
+
+
Sayonara Watashi no Cramer VOSTFR
+
+
+ Basé sur le manga Sayonara Watashi no Cramer de Arakawa Naoshi.
+
+ L'histoire nous entraîne dans le quotidien de Sumire Suo, une passionnée de foot qui n'a cependant jamais gagné un seul match durant ses années de collège. En entrant au lycée, Midori Soshizaki, sa rivale, l'invite à rejoindre la même équipe avec la promesse de ne jamais la laisser "jouer seule".
+
+ Ainsi, Suo et Soshizaki vont rejoindre une équipe remplie de joueuses aussi talentueuses qu'elles.
+
+ Acteur: Arakawa Naoshi...
+ Réalisateur: Takuno Seiki
+
+
+
+
+
2021 Année
+
10 Commentaires
+
24 minDurée
+
+
+ Afficher
+
+
+
+
+
+
+
+
+
+
+
if(!window.BB_a) { BB_a = [];} if(!window.BB_ind) { BB_ind = 0; } if(!window.BB_vrsa) { BB_vrsa = 'v3'; }if(!window.BB_r) { BB_r = Math.floor(Math.random()*1000000000)} BB_ind++; BB_a.push({ "pl" : 1000429, "index": BB_ind});
+
document.write('
+ ');
+
+
+
+ Streaming
+ Télécharger sur 1fichier
+ Télécharger sur Uptobox
+
+
+
+
+
+
+
+
+
+
+
+
+
Episode 01 Episode 02
+
+
+
+
+
+
+
+
+
+ 4286687
+
+
+ 8guocc7jav0d
+
+
+ https://upvid.co/embed-8icqwis62lq5.html
+
+
+ yaf657mdoa1wzjozt9fewaynzh
+
+
+ 4291852
+
+
+ 2an317ib2m9k
+
+
+ https://upvid.co/embed-u0k7vut9dhup.html
+
+
+ https://dood.so/e/czv4pbxaa05xlgqfeva2xnulok3bamwi
+
+
+ edgghd7mftywikmsefuyurcchw
+
+
$("select.new_player_selector").styler({ wrapper: "new_player_selector_box", singleSelectzIndex: "500", selectSearchPlaceholder: "Numéro de l'épisode.." });
+
+
+
+
+
+
+
+
+
+
+
+
+ Les épisodes sont en VOSTFR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Les épisodes sont en VOSTFR
+
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+ Episode 01
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+ Episode 02
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Les épisodes sont en VOSTFR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Les épisodes sont en VOSTFR
+
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+ Episode 01
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+ Episode 02
+
+
+
+
+
+
Qualité
+
FHD 1080p
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
$("#player-tabs .tab").click(function() { $("#player-tabs .tab").removeClass("current").eq($(this).index()).addClass("current"); $(".tab-content").hide().eq($(this).index()).fadeIn() }).eq(0).addClass("current");
+
+
+
+
+
+
+
+
function facechange (objName) { if ( $(objName).css('display') == 'none' ) { $(objName).animate({height: 'show'}, 400); } else { $(objName).animate({height: 'hide'}, 200); } };
$("#to-top").click(function(){ $('html, body').animate({ scrollTop: $(".header-top").offset().top }, '2000'); });
(function(){window['__CF$cv$params']={r:'63ec3e864a90065e',m:'424463ae22c4ac53cb35a8170c3428af7c14bac4-1618228301-1800-AV98STG7lazpcNs4KYw14VUqb28+uemoPHfX/NSMbn72+YvyWd337fYJKkY4yUmGHzxyMeTr4FcidbtM+3263R/YGOqU9kF8IaDV+SGe0Qp7sBHtVyxA5a6WYtefvic+g6AHqP5jCZBpMBUMHVG0mrAM69KCNzqR+vpTgWqGpDELGe80dhQaWvjizI7d2OJOIf9/UDt6+7RnRd2vKsxaWGs=',s:[0xd966b3b530,0x51d56ce6c4],}})();
+
+
+
+
diff --git a/Module Parser KETSU/VostFree Ketsu/Info/Info.html b/Module Parser KETSU/VostFree Ketsu/Info/Info.html
new file mode 100644
index 0000000..262f6c6
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/Info/Info.html
@@ -0,0 +1,105 @@
+
\ No newline at end of file
diff --git a/Module Parser KETSU/VostFree Ketsu/MainPage/mainPage1.html b/Module Parser KETSU/VostFree Ketsu/MainPage/mainPage1.html
new file mode 100644
index 0000000..8db2ae8
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/MainPage/mainPage1.html
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Module Parser KETSU/VostFree Ketsu/Search/Search.html b/Module Parser KETSU/VostFree Ketsu/Search/Search.html
new file mode 100644
index 0000000..5ca1fb5
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/Search/Search.html
@@ -0,0 +1,221 @@
+
\ No newline at end of file
diff --git a/Module Parser KETSU/VostFree Ketsu/moduleTemplate.json b/Module Parser KETSU/VostFree Ketsu/moduleTemplate.json
new file mode 100644
index 0000000..6e2d548
--- /dev/null
+++ b/Module Parser KETSU/VostFree Ketsu/moduleTemplate.json
@@ -0,0 +1,876 @@
+{
+ "moduleInfo": {
+ "moduleName": "VostFree",
+ "moduleInitials": "VF",
+ "moduleDesc": "Module Kestu pour VostFree",
+ "developer": "ナビル",
+ "moduleID": "15151615165165",
+ "moduleImage": "https://i.imgur.com/AYyMYiE.png",
+ "moduleVersion": 2.26,
+ "moduleLenguage": "FR",
+ "changelog": "Changement de domaine",
+ "moduleType": "Video",
+ "baseURL": "https://vostfree.ws/",
+ "searchPlaceHolder": "Entrez plus de 3 caractères.",
+ "moduleDeveloperSite": "https://bilnaa.github.io/main",
+ "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/VostFree%20Ketsu/moduleTemplate.json",
+ "preferedServer": "UQLOAD",
+ "preferedDownloadServer": "UQLOAD",
+ "blackListed": [""],
+ "moduleCreatorIdfiDMRyGvOLmpluzAhozY": {
+ "path": "NaFeb",
+ "id": "moduleInfosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Module Info",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIddaZmLaCKRiwXzrUsaQwY": {
+ "path": "Knlpz",
+ "id": "moduleInfocell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "global": {
+ "variables": [{
+ "key": "",
+ "value": ""
+ }],
+ "cookies": [{
+ "key": "",
+ "value": ""
+ }],
+ "headers": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "mainPage": [{
+ "request": {
+ "url": "https://vostfree.ws/",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n};\nconst CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n};\nconst Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n};\nconst Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\nfunction MainPage ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n}\n\nfunction Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n}\n\nfunction Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n}\n\nfunction Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n}\n\nfunction Size ( width, height ) {\n this.width = width;\n this.height = height;\n}\n\nfunction Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n}\n\nfunction Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction quickData ( link, image, title, field1 ) {\n return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link );\n}\n\nfunction shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = [ ];\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar baseURL = 'https://vostfree.com';\nvar dataArray = [ ];\nvar dataArray2 = [ ];\nvar dataArray3 = [ ];\nvar dataArray4 = [ ];\nvar dataArray5 = [ ];\ntopList = document.querySelector( '#content' ).querySelectorAll( '.block.half.last .new-episode' );\nfor ( var x = 0; x < topList.length; x++ ) {\n let list = topList[ x ];\n let title = list.querySelector( '.block.half.last .new-episode a' ).innerText.replace( 'VOSTFR', '' );\n var link = list.querySelector( '.last .new-episode a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( '.last .new-episode img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var ep = list.querySelector( '.block.half.last .new-episode .episode' ).innerText;\n var finalData = new Data( image, title, '', ep, '', '', '', false, link );\n dataArray.push( finalData );\n}\ndataArray2 = [ ];\nfilms = document.querySelector( '#featured-slider' ).querySelectorAll( '.featured-slider-block' );\nfor ( var x = 0; x < films.length; x++ ) {\n let list = films[ x ];\n let title = list.querySelector( '.featured-slider-block h2' ).textContent.replace( 'VOSTFR', '' ).replace( 'FRENCH', '' );\n var link = list.querySelector( '.featured-slider-block a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( '.featured-slider-block img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var type = list.querySelector( '.movie-present-slide .quality' ).textContent.trim( );\n var finalData = new Data( image, title, '', '', type, '', '', false, link );\n dataArray2.push( finalData );\n}\ndataArray3 = [ ];\nanimesfr = document.querySelector( '.home-anime .block.half' ).querySelectorAll( '.new-episode' );\nfor ( var x = 0; x < animesfr.length; x++ ) {\n let list = animesfr[ x ];\n let title = list.querySelector( '.block.half .new-episode a' ).innerText.replace( 'FRENCH', '' );\n var link = list.querySelector( '.block.half .new-episode a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( '.block.half .new-episode img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var ep = list.querySelector( '.block.half .new-episode .episode' ).innerText;\n var finalData = new Data( image, title, '', ep, '', '', '', false, link );\n dataArray3.push( finalData );\n}\ndataArray4 = [ ];\nososume = document.querySelectorAll( 'ul.movie-small li' );\nfor ( var x = 0; x < ososume.length; x++ ) {\n let list = ososume[ x ];\n let title = list.querySelector( 'a' ).title.replace( 'VOSTFR', '' );\n var link = list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( 'img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var ep = list.querySelector( '.alt .year b' ).innerText + ' épisodes';\n var desc = list.querySelector( '.desc' ).innerText.trim( );\n var finalData = new Data( image, title, desc, ep, 'VOSTFR', '', '', false, link );\n dataArray4.push( finalData );\n}\ndataArray5 = [ ];\nososumevf = document.querySelectorAll( 'div.block:nth-of-type(1) .top-vostfr,div.block:nth-of-type(1) .top-articles2' );\nfor ( var x = 0; x < ososumevf.length; x++ ) {\n let list = ososumevf[ x ];\n let title = list.querySelector( '.title' ).innerText.replace( 'FRENCH', '' );\n var link = list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( 'img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var ep = list.querySelector( '.year b' ).innerText + ' épisodes';\n desc = list.querySelector( '.desc' ).innerText.trim( );\n var finalData = new Data( image, title, desc, ep, 'VF', '', '', false, link );\n dataArray5.push( finalData );\n}\noutput.push( new Output( CellDesings.wide6, Orientation.horizontal, DefaultLayouts.wide, Paging.leading, new Section( 'Top Films : ', true ), null, dataArray2 ) );\noutput.push( new Output( CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section( 'Derniers épisodes VOSTFR', true ), null, dataArray ) );\noutput.push( new Output( CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section( 'Animes Populaires VOSTFR', true ), null, dataArray4 ) );\noutput.push( new Output( CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section( 'Derniers épisodes VF', true ), null, dataArray3 ) );\noutput.push( new Output( CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section( 'Derniers Animes VF', true ), null, dataArray5 ) );\nlet MainPageObject = new MainPage( new ModuleRequest( '', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( true, false, '' ), output );\nvar finalJson = JSON.stringify( MainPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "",
+ "method": "",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdifMZFdZVxNJYPCPiWoPq": {
+ "path": "vMlHc",
+ "id": "mainPage,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Javascript",
+ "javascriptEditorScroll": 275
+ }
+ }],
+ "search": [{
+ "request": {
+ "url": "https://vostfree.ws/index.php?story=&do=search&search_start=&subaction=search&submit=Submit",
+ "method": "post",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "separator": "%20",
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n};\nconst CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n};\nconst Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n};\nconst Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\nfunction Search ( request, extra, separator, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.separator = separator;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n}\n\nfunction Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n}\n\nfunction Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n}\n\nfunction Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n}\n\nfunction Size ( width, height ) {\n this.width = width;\n this.height = height;\n}\n\nfunction Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n}\n\nfunction Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction quickData ( link, image, title, field1 ) {\n return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link );\n}\n\nfunction shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = [ ];\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar baseURL = 'https://vostfree.tv';\nvar lastAdded = document.querySelector( '#content' ).querySelectorAll( '.search-result' );\nlet lastAddedArray = [ ];\nfor ( var x = 0; x < lastAdded.length; x++ ) {\n try {\n let list = lastAdded[ x ];\n let title = list.querySelector( '.title' ).innerText.replace( 'VOSTFR', '' ).replace( 'FRENCH', '' );\n var link = list.querySelector( '.title a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = baseURL + list.querySelector( '.image img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var desc = list.querySelector( '.info div.desc' ).textContent.trim( );\n var type = list.querySelector( '.additional .type' ).textContent.replace( 'Animes VOSTFR,', '' ).replace( 'Animes VF,', '' ).replace( ' Genre:', '' );\n var type1 = list.querySelector( '.additional .type a' ).textContent.replace( 'Animes', '' );\n var finalData = new Data( image, title, desc, type, type1, 'unknown', 'unknown', false, link );\n lastAddedArray.push( finalData );\n } catch ( e ) {}\n}\nvar testLayout = new Layout( new Insets( 10, 10, 10, 10 ), 1, 2, 3, 1, 500, new Size( 400, 400 ), new Ratio( 'width', 4, 11 ), new Size( 0, 0 ), 10, 10 );\noutput.push( new Output( CellDesings.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', false ), testLayout, lastAddedArray ) );\nlet searchPageObject = new Search( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), '', new JavascriptConfig( true, false, '' ), output );\nvar finalJson = JSON.stringify( searchPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdDqCPWswZHRNBsoWcBRsi": {
+ "path": "JqOJB",
+ "id": "search,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 29
+ }
+ }],
+ "info": [{
+ "request": {
+ "url": "https://vostfree.ws/1063-gekijouban-nanatsu-no-taizai-hikari-ni-norowareshi-monotachi-vostfr-ddl-streaming-1fichier-uptobox.html",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Info ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Chapter ( chapName, link, openInWebView ) {\n this.chapName = chapName;\n this.link = link;\n this.openInWebView = openInWebView;\n }\n\n function Output ( image, title, link, description, genres, field1, field2, field3, field4, chapters ) {\n this.image = image;\n this.link = link;\n this.title = title;\n this.description = description;\n this.genres = genres;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.chapters = chapters;\n }\n\n function getStuff ( array, match ) {\n for ( var x = 0; x < array.length; x++ ) {\n let data = array[ x ].innerText;\n if ( data.includes( match ) ) {\n return data.replace( match, '' ).trim( );\n }\n }\n }\n\n function getHtmlStuff ( array, match ) {\n for ( var x = 0; x < array.length; x++ ) {\n let data = array[ x ].innerText;\n if ( data.includes( match ) ) {\n return array[ x ];\n }\n }\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n let emptyKeyValue = [ new KeyValue( '', '' ) ];\n var episodes = [ ];\n var type = 'Anime';\n var status = '';\n var genres = [ ];\n genres = Array.from( document.querySelectorAll( '.slide-block > .slide-middle > ul > li > a' ) ).map( g => g.innerText );\n var desc = '';\n desc = document.querySelector( '.slide-block > .slide-middle > .slide-desc' ).textContent.trim( );\n var image = '';\n var title = '';\n title = document.querySelector( '.slide-block > .slide-middle > h1' ).innerHTML.replace( 'VOSTFR', '' ).replace( 'FRENCH', '' );\n image = 'https://vostfree.com/' + document.querySelector( '.slide-block > .slide-poster > img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var chapters = document.querySelectorAll( 'select.new_player_selector > option' );\n for ( var x = 0; x < chapters.length; x++ ) {\n var element = chapters[ x ];\n var getNum = element.value.split( '_' );\n var episodeNum = getNum.length > 1 ? parseInt( getNum[ 1 ] ) : 1;\n var fixedLink = parsedJson.request.url + '#' + episodeNum;\n let chapter = new Chapter( 'Épisode ' + episodeNum, new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ), false );\n episodes.push( chapter );\n }\n let infoPageObject = new Info( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( false, false, '' ), new Output( image, title, parsedJson.request, desc, genres, status, '', type, 'Eps: ' + episodes.length, episodes ) );\n var finalJson = JSON.stringify( infoPageObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "genres": [""],
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "chapters": [{
+ "chapName": "",
+ "openInWebView": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdLgYLxksyUoKWUOJTNXHq": {
+ "path": "jKOwh",
+ "id": "info,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 29
+ }
+ }],
+ "chapters": [{
+ "request": {
+ "url": "https://vostfree.ws/1063-gekijouban-nanatsu-no-taizai-hikari-ni-norowareshi-monotachi-vostfr-ddl-streaming-1fichier-uptobox.html",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Chapters ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( videos, images, text ) {\n this.videos = videos;\n this.images = images;\n this.text = text;\n }\n\n function Videos ( needsResolver, rawVideo ) {\n this.needsResolver = needsResolver;\n this.rawVideo = rawVideo;\n }\n\n function NeedsResolver ( resolverIdentifier, link ) {\n this.resolverIdentifier = resolverIdentifier;\n this.link = link;\n }\n\n function RawVideo ( video ) {\n this.video = video;\n }\n\n function Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n\n function Text ( text ) {\n this.text = text;\n }\n var output = [ ];\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n var server = '';\n var player = '';\n var emptyKeyValue = [ new KeyValue( 'Referer', 'https://vostfree.tv' ) ];;\n let getFirstEp = document.querySelector( '.new_player_selector > option' ).value.split( '_' );\n let getEpisode = parsedJson.request.url.split( '#' );\n let firstEpisode = getFirstEp.length > 1 ? getFirstEp[ 1 ] : 1;\n let episodeNumber = getEpisode.length > 1 ? getEpisode[ 1 ] : firstEpisode;\n episodeNumber = firstEpisode > episodeNumber ? firstEpisode : episodeNumber;\n var buttonBox = document.querySelectorAll( '#buttons_' + episodeNumber + ' > div' );\n var providers = {\n 'new_player_myvi': 'https://myvi.ru/player/embed/html/[REPLACE]',\n 'new_player_gtv': 'https://iframedream.com/embed/[REPLACE].html',\n 'new_player_mp4': 'https://www.mp4upload.com/embed-[REPLACE].html',\n 'new_player_uqload': 'https://uqload.com/embed-[REPLACE].html',\n 'new_player_vidfast': 'http://vosmanga.tk/watch/[REPLACE]',\n 'new_player_verystream': 'https://verystream.com/e/[REPLACE]',\n 'new_player_rapids': 'https://rapidstream.co/embed-[REPLACE].html',\n 'new_player_cloudvideo': 'https://cloudvideo.tv/embed-[REPLACE].html',\n 'new_player_mytv': 'https://www.myvi.xyz/embed/[REPLACE]',\n 'new_player_uptostream': 'https://uptostream.com/iframe/[REPLACE]',\n 'new_player_fembed': 'https://www.fembed.com/v/[REPLACE].html',\n 'new_player_tune': 'https://tune.pk/player/embed_player.php?vid=[REPLACE]',\n 'new_player_sibnet': 'https://video.sibnet.ru/shell.php?videoid=[REPLACE]',\n 'new_player_netu': 'https://waaw.tv/watch_video.php?v=[REPLACE]',\n 'new_player_rutube': 'https://rutube.ru/play/embed/[REPLACE]',\n 'new_player_ok': 'https://www.ok.ru/videoembed/[REPLACE]',\n 'new_player_google': 'https://drive.google.com/open?id=[REPLACE]',\n 'new_player_mail': 'https://videoapi.my.mail.ru/videos/embed/mail/[REPLACE]',\n 'new_player_mail2': 'https://my.mail.ru/video/embed/[REPLACE]'\n };\n for ( var x = 0; x < buttonBox.length; x++ ) {\n var element = buttonBox[ x ];\n var divId = element.id;\n var divClass = element.className;\n var player = document.querySelector( '#content_' + divId );\n var link = '';\n if ( player ) {\n player = player.innerText.trim( );\n if ( providers.hasOwnProperty( divClass ) ) {\n link = providers[ divClass ].replace( '[REPLACE]', player );\n } else {\n link = player;\n }\n }\n if ( link.includes( 'https:' ) ) {\n output.push( new NeedsResolver( '', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) );\n }\n }\n let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue );\n var chaptersObject = new Chapters( new ModuleRequest( '', '', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( new Videos( output, null ), null, null ) );\n var finalJson = JSON.stringify( chaptersObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "videos": {
+ "needsResolver": [{
+ "resolverIdentifier": "",
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }],
+ "rawVideo": [{
+ "video": [{
+ "videoQuality": "",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }]
+ },
+ "images": [{
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }],
+ "text": {
+ "text": ""
+ }
+ },
+ "moduleCreatorIdpXxxfeqvaChkvVwCDBfU": {
+ "path": "dVOyw",
+ "id": "chapters,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 29
+ }
+ }],
+ "moduleResolvers": [{
+ "resolverInfo": {
+ "resolverName": "VUDEO",
+ "nameMatches": ["VUDEO"],
+ "developer": "Frizrat",
+ "moduleID": "18511209",
+ "resolverVersion": 1,
+ "baseURL": "",
+ "moduleCreatorIdGmpfJEfubiGwmbuNsrfk": {
+ "path": "XdOPz",
+ "id": "moduleResolvers,0,resolverInfosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdufnuRnjLqUxJfrCeYboU": {
+ "path": "FYTrY",
+ "id": "moduleResolvers,0,resolverInfocell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output; } function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody; } function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo; } function Commands(commandName, params) { this.commandName = commandName; this.params = params; } function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript; } function KeyValue(key, value) { this.key = key; this.value = value; } function Output(video) { this.video = video; } function Video(videoQuality, videoLink) { this.videoQuality = videoQuality; this.videoLink = videoLink; } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('','')]; var videos = []; var scripts = document.querySelectorAll('p'); for (script of scripts) { var scriptText = script.innerHTML; if (scriptText.includes('var player')) { var json = scriptText.split('\"')[1]; json = '[{\"mp4\":\"' + json + '\"}]'; let parsedJ = JSON.parse(json); for (video of parsedJ) { let header = [new KeyValue('Referer', 'https://vudeo.net/'), new KeyValue('Content-Type', '')]; videos.push(new Video('', new ModuleRequest(video.mp4, 'get', header, null))); } break; } } let emptyExtra = new Extra([new Commands('',emptyKeyValue)],emptyKeyValue); var chaptersObject = new Resolver(new ModuleRequest('','',emptyKeyValue,null),emptyExtra,new JavascriptConfig(false,false,''), new Output(videos)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdDbAYVnvoZPOxTYbHDsqz": {
+ "path": "RjXsg",
+ "id": "moduleResolvers,0,resolver,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdNgtvJMaLhASHVPoiaici": {
+ "path": "tzmaA",
+ "id": "moduleResolvers,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdGDuCVWfAzgzfsJgpUXOH": {
+ "path": "resolver",
+ "id": "moduleResolvers,0,resolversection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }, {
+ "resolverInfo": {
+ "resolverName": "GETVID",
+ "nameMatches": ["GETVID"],
+ "developer": "ナビル",
+ "moduleID": "5112467698",
+ "resolverVersion": 1,
+ "baseURL": "",
+ "moduleCreatorIdWeTrYhrBCVaITdAPVKRd": {
+ "path": "rOnpg",
+ "id": "moduleResolvers,1,resolverInfosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdfYyCgVkGaeYySDKfqmkN": {
+ "path": "mbVHl",
+ "id": "moduleResolvers,1,resolverInfocell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output; } function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody; } function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo; } function Commands(commandName, params) { this.commandName = commandName; this.params = params; } function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript; } function KeyValue(key, value) { this.key = key; this.value = value; } function Output(video) { this.video = video; } function Video(videoQuality, videoLink) { this.videoQuality = videoQuality; this.videoLink = videoLink; } function getNext(match, array) { for (var x = 0; x < array.length; x++) { let mMatch = array[x]; if (mMatch.includes(match)) { return array[x + 1]; } } } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url)]; var videos = []; let videoLink = ''; var bodyEle = document.querySelector('body').innerHTML; var baseUrl = 'https://getvid.club/'; var ps = document.querySelectorAll('p'); for(p of ps){ if(p.innerText.includes('master.txt')){ videoLink = p.innerText.split('\"videoSources\":[{\"file\":\"')[1].split('\"').shift(); break; } } videoLink = new URL(videoLink); fixedLink = videoLink.href.replaceAll('//','/').replace('https:/0.0.0.1/',baseUrl) + '?s=1'; videos.push(new Video('Normal', new ModuleRequest(fixedLink, 'get', emptyKeyValue, null))); let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var chaptersObject = new Resolver(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(videos)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdqAnXHQAdNzsuhAbdPZpu": {
+ "path": "PQsVb",
+ "id": "moduleResolvers,1,resolver,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdTuMHmLwcZqSXfdFpApXz": {
+ "path": "WFMVN",
+ "id": "moduleResolvers,1section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdkyDuadBXLKhgPoHwQZWv": {
+ "path": "resolver",
+ "id": "moduleResolvers,1,resolversection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "responseCodeFunctions": [{
+ "code": 0,
+ "msgTitle": "",
+ "msgBody": "",
+ "type": "normal",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdVIZmGKIovwSXSGhqBklw": {
+ "path": "jLUTq",
+ "id": "responseCodeFunctions,0,functions,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdNBKdcLUFRXAfcrFfTqys": {
+ "path": "ujrmJ",
+ "id": "responseCodeFunctions,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdEVCvkYTlYpbCTkskWRVg": {
+ "path": "tOBsK",
+ "id": "responseCodeFunctions,0,section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdYEGZjgYEveoOIhPNyPYv": {
+ "path": "yqXlA",
+ "id": "responseCodeFunctions,0,cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdHzsGusgqCqwFuuqikbkf": {
+ "path": "functions",
+ "id": "responseCodeFunctions,0,functionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "helperFunctions": [{
+ "functionName": "example",
+ "msgTitle": "",
+ "msgBody": "",
+ "type": "normal",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdUtsWduhCztJFFEweJWlb": {
+ "path": "fNXWJ",
+ "id": "helperFunctions,0,functions,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdwrNhlFZmmIlkdwqFoxuI": {
+ "path": "jBQwd",
+ "id": "helperFunctions,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdWRqgkNpsjDEbqfkZFsba": {
+ "path": "DnXxM",
+ "id": "helperFunctions,0,section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdLePlbNNacyrutmPThTEi": {
+ "path": "vJgFT",
+ "id": "helperFunctions,0,cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdHqxFREFzarwRTyRwsWHI": {
+ "path": "functions",
+ "id": "helperFunctions,0,functionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorGlobalOptions": {
+ "selected": "moduleCreatorIdpXxxfeqvaChkvVwCDBfU",
+ "notesData": {
+ "openedNotes": [],
+ "activeNote": "oFwjzvDpdfxlaKQrGUwc",
+ "notes": {}
+ },
+ "hideViews": [],
+ "id": "tfXVeXLwGysECQF",
+ "projectName": "VostFree"
+ },
+ "moduleCreatorIdILCcXWEOjvBPSmRlhzOt": {
+ "path": "mainPage",
+ "id": "mainPagesection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Main Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdwqJncugNFsDnzePCmqix": {
+ "path": "search",
+ "id": "searchsection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Search Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdRQZbdmrhqIdBCxoYlBaY": {
+ "path": "info",
+ "id": "infosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Info Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdqdyMcLudkXhEIcTjsRYF": {
+ "path": "chapters",
+ "id": "chapterssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Chapters",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdMxlZMLqBanLbNJLRVOZD": {
+ "path": "moduleResolvers",
+ "id": "moduleResolverssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolvers",
+ "listName": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdypzsSYhPZicKJVOmYigv": {
+ "path": "responseCodeFunctions",
+ "id": "responseCodeFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Response Code Funtions",
+ "listName": "Function"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdurkvfuphzvLLEXyBbbMj": {
+ "path": "helperFunctions",
+ "id": "helperFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Helper Functions",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+}
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/.gitignore b/Module Parser KETSU/Zoro.to/.gitignore
new file mode 100644
index 0000000..18e210c
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/.gitignore
@@ -0,0 +1,2 @@
+app store version test.json
+recaptcha_version.json
diff --git a/Module Parser KETSU/Zoro.to/Chapters/chapters.js b/Module Parser KETSU/Zoro.to/Chapters/chapters.js
new file mode 100644
index 0000000..3b37249
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Chapters/chapters.js
@@ -0,0 +1,88 @@
+function Chapters(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output(videos, images, text) {
+ this.videos = videos;
+ this.images = images;
+ this.text = text;
+}
+
+function Videos(needsResolver, rawVideo) {
+ this.needsResolver = needsResolver;
+ this.rawVideo = rawVideo;
+}
+
+function NeedsResolver(resolverIdentifier, link) {
+ this.resolverIdentifier = resolverIdentifier;
+ this.link = link;
+}
+
+function RawVideo(video) {
+ this.video = video;
+}
+
+function Video(videoQuality, videoLink) {
+ this.videoQuality = videoQuality;
+ this.videoLink = videoLink;
+}
+var savedData = document.getElementById('ketsu-final-data');
+var parsedJson = JSON.parse(savedData.innerHTML);
+var extraInfo = parsedJson.extra.extraInfo;
+var emptyKeyValue = [new KeyValue('X-Requested-With', 'XMLHttpRequest')];
+var output = [];
+const script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', '');
+const data = JSON.parse(script);
+const html = data.html;
+const htmlObject = document.createElement('div');
+htmlObject.innerHTML = html;
+document.body.appendChild(htmlObject);
+var extraInfo = [new KeyValue('count', '0')];
+var links = document.querySelectorAll('.item.server-item');
+for (var x = 0; x < links.length; x++) {
+ var link = links[x];
+ var id = link.dataset.id;
+ var lang = link.dataset.type;
+ var url = 'https://zoro.to/ajax/v2/episode/sources?id=' + id + '?lang=' + lang;
+ if (x == 0) {
+ var nextRequest = url
+ } else {
+ extraInfo.push(new KeyValue(`${x}`, `${url}`));
+ }
+ console.log(url);
+}
+let emptyExtra = new Extra([new Commands('', emptyKeyValue)], extraInfo);
+var chaptersObject = new Chapters(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(new Videos([], []), null, null));
+var finalJson = JSON.stringify(chaptersObject);
+savedData.innerHTML = finalJson;
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/Chapters/chapters1.js b/Module Parser KETSU/Zoro.to/Chapters/chapters1.js
new file mode 100644
index 0000000..06d1656
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Chapters/chapters1.js
@@ -0,0 +1,103 @@
+function Chapters(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output(videos, images, text) {
+ this.videos = videos;
+ this.images = images;
+ this.text = text;
+}
+
+function Videos(needsResolver, rawVideo) {
+ this.needsResolver = needsResolver;
+ this.rawVideo = rawVideo;
+}
+
+function NeedsResolver(resolverIdentifier, link) {
+ this.resolverIdentifier = resolverIdentifier;
+ this.link = link;
+}
+
+function RawVideo(video) {
+ this.video = video;
+}
+
+function Video(videoQuality, videoLink) {
+ this.videoQuality = videoQuality;
+ this.videoLink = videoLink;
+}
+
+function getValueFromKey(keys, key) {
+ for (var x = 0; x < keys.length; x++) {
+ let tKey = keys[x];
+ if (tKey.key == key) {
+ return tKey.value;
+ }
+ }
+}
+var savedData = document.getElementById('ketsu-final-data');
+var parsedJson = JSON.parse(savedData.innerHTML);
+var extraInfo = parsedJson.extra.extraInfo;
+var emptyKeyValue = [new KeyValue('', '')];
+var output = parsedJson.output.videos;;
+var actualCount = getValueFromKey(extraInfo, 'count');
+var nextCount = parseInt(actualCount.match(/\\d+/g)[0]) + 1;
+var nextRequest = getValueFromKey(extraInfo, nextCount);
+if (actualCount == 0) {
+ output = new Videos([], []);
+}
+const script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', '');
+const data = JSON.parse(script);
+if (data.link.includes('streamtape.com')) {
+ var fixedLink = data.link.replace('https://streamtape.com/', 'https://streamta.pe/');
+ if (parsedJson.request.url.includes('?lang=dub')) {
+ output.needsResolver.push(new NeedsResolver('STREAMTA DUB', new ModuleRequest(fixedLink, 'get', emptyKeyValue, null)));
+ } else {
+ output.needsResolver.push(new NeedsResolver('', new ModuleRequest(fixedLink, 'get', emptyKeyValue, null)));
+ }
+}
+if (parsedJson.request.url.includes('?lang=dub') && !data.link.includes('streamtape.com')) {
+ resolver = data.link.split('/')[2].split('.')[0].toUpperCase();
+ output.needsResolver.push(new NeedsResolver(resolver + ' DUB', new ModuleRequest(data.link, 'get', emptyKeyValue, null)));
+} else if (data.link.includes('streamtape')) {} else {
+ output.needsResolver.push(new NeedsResolver('', new ModuleRequest(data.link, 'get', emptyKeyValue, null)));
+}
+extraInfo[0].value = '' + (parseInt(actualCount) + 1);
+if (nextRequest == undefined) {
+ nextRequest = '';
+}
+let emptyExtra = new Extra([new Commands('', emptyKeyValue)], extraInfo);
+var chaptersObject = new Chapters(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(output, null, null));
+var finalJson = JSON.stringify(chaptersObject);
+savedData.innerHTML = finalJson;
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/Info/Info.js b/Module Parser KETSU/Zoro.to/Info/Info.js
new file mode 100644
index 0000000..85c5e0c
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Info/Info.js
@@ -0,0 +1,87 @@
+ function Info(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+ }
+
+ function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+ }
+
+ function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+ }
+
+ function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+ }
+
+ function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+ }
+
+ function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ function Chapter(chapName, link, openInWebView) {
+ this.chapName = chapName;
+ this.link = link;
+ this.openInWebView = openInWebView;
+ }
+
+ function Output(image, title, link, description, genres, field1, field2, field3, field4, chapters) {
+ this.image = image;
+ this.link = link;
+ this.title = title;
+ this.description = description;
+ this.genres = genres;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.chapters = chapters;
+ }
+ var savedData = document.getElementById('ketsu-final-data');
+ var parsedJson = JSON.parse(savedData.innerHTML);
+ let emptyKeyValue = [new KeyValue('Referer', 'https://zoro.to')];
+ var airing;
+ var status;
+ var image = document.querySelector('.film-poster img').src;
+ image = new ModuleRequest(image, 'get', emptyKeyValue, null);
+ if (document.querySelector('.anisc-detail h2').textContent != document.querySelector('.anisc-detail h2').dataset.jname) {
+ var title = document.querySelector('.anisc-detail h2').textContent + '/' + document.querySelector('.anisc-detail h2').dataset.jname
+ } else {
+ var title = document.querySelector('.anisc-detail h2').dataset.jname
+ };
+ var desc = '';
+ try {
+ desc = document.querySelector('div.anis-content > div.anisc-detail > div.film-depion.m-hide > div').textContent.trim();
+ } catch (e) {
+ desc = document.querySelector('.anisc-info').textContent.trim();
+ }
+ var animeinfo = document.querySelector('div.anisc-info-wrap > div.anisc-info');
+ for (var x = 0; x < animeinfo.children.length; x++) {
+ if (animeinfo.children[x].textContent.trim().includes('Status')) {
+ var status = animeinfo.children[x].textContent.split('Status:')[1].trim();
+ } else if (animeinfo.children[x].textContent.trim().includes('Aired')) {
+ var airing = animeinfo.children[x].textContent.split('Aired:')[1].trim();
+ }
+ }
+ var genres = Array.from(document.querySelectorAll('.item.item-list a')).map(g => g.textContent);
+ var type = 'Anime';
+ var episodes = [];
+ var json = document.querySelector('#wrapper').dataset.id;
+ var nextRequest = `https://zoro.to/ajax/v2/episode/list/${json}`;
+ let infoPageObject = new Info(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(false, false, ''), new Output(image, title, parsedJson.request, desc, genres, status, airing, type, 'Eps: ' + episodes.length, episodes));
+ var finalJson = JSON.stringify(infoPageObject);
+ savedData.innerHTML = finalJson;
diff --git a/Module Parser KETSU/Zoro.to/Info/Info1.js b/Module Parser KETSU/Zoro.to/Info/Info1.js
new file mode 100644
index 0000000..a40ca59
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Info/Info1.js
@@ -0,0 +1,82 @@
+function Info(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+
+function Chapter(chapName, link, openInWebView) {
+ this.chapName = chapName;
+ this.link = link;
+ this.openInWebView = openInWebView;
+}
+
+function Output(image, title, link, description, genres, field1, field2, field3, field4, chapters) {
+ this.image = image;
+ this.link = link;
+ this.title = title;
+ this.description = description;
+ this.genres = genres;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.chapters = chapters;
+}
+var savedData = document.getElementById('ketsu-final-data');
+var parsedJson = JSON.parse(savedData.innerText);
+let emptyKeyValue = [new KeyValue('Referer', 'https://zoro.to'), new KeyValue('X-Requested-With', 'XMLHttpRequest')];
+var image = parsedJson.output.image;
+var title = parsedJson.output.title;
+var desc = parsedJson.output.description;
+var genres = parsedJson.output.genres;
+var type = '';
+var episodes = [];
+var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');
+var html = JSON.parse(script).html;
+var parser = new DOMParser();
+var doc = parser.parseFromString(html, 'text/html');
+var animes = doc.querySelectorAll('.ss-list a');
+for (var x = 0; x < animes.length; x++) {
+ var anime = animes[x];
+ var link = 'https://zoro.to/ajax/v2/episode/servers?episodeId=' + anime.dataset.id;
+ var name = anime.title;
+ if (!name.includes('Episode')) {
+ name = `${x+1} : ` + name;
+ }
+ let chapter = new Chapter(name, new ModuleRequest(link, 'get', emptyKeyValue, null), false);
+ episodes.push(chapter);
+}
+parsedJson.request.url = parsedJson.output.link.url;
+parsedJson.request.headers = [new KeyValue('', '')];
+let infoPageObject = new Info(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(false, false, ''), new Output(image, title, parsedJson.request, desc, genres, parsedJson.output.field1, parsedJson.output.field2, type, 'Eps: ' + episodes.length, episodes));
+var finalJson = JSON.stringify(infoPageObject);
+savedData.innerText = finalJson;
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/MainPage/mainPage1.js b/Module Parser KETSU/Zoro.to/MainPage/mainPage1.js
new file mode 100644
index 0000000..b5dce4d
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/MainPage/mainPage1.js
@@ -0,0 +1,332 @@
+const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+};
+const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+};
+const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+};
+const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+};
+
+function MainPage ( request, extra, javascriptConfig, output ) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest ( url, method, headers, httpBody ) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra ( commands, extraInfo ) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands ( commandName, params ) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue ( key, value ) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+}
+
+function Section ( sectionName, separator ) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+}
+
+function Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+}
+
+function Insets ( top, bottom, left, right ) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+}
+
+function Size ( width, height ) {
+ this.width = width;
+ this.height = height;
+}
+
+function Ratio ( inRelation, number1, number2 ) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+}
+
+function Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+}
+
+function shuffle ( a ) {
+ var j, x, i;
+ for ( i = a.length - 1; i > 0; i-- ) {
+ j = Math.floor( Math.random( ) * ( i + 1 ) );
+ x = a[ i ];
+ a[ i ] = a[ j ];
+ a[ j ] = x;
+ }
+ return a;
+}
+var savedData = document.getElementById( 'ketsu-final-data' );
+var parsedJson = JSON.parse( savedData.innerHTML );
+let emptyKeyValue = [ new KeyValue( '', '' ) ];
+let emptyKeyValue1 = [ new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];
+var LoadText = parsedJson.extra.extraInfo[ 0 ].value;
+const dummyQuest = new ModuleRequest( '', 'get', emptyKeyValue, null );
+const streamta = new ModuleRequest( 'ketsuapp://?moduleData=https://raw.githubusercontent.com/Bilnaa/beta-ketsu/main/zoro.json', 'get', emptyKeyValue, null );
+const infoText = new Data( dummyQuest, "Subs are only available on newer versions of Ketsu, on the Rapid-Cloud resolver and won't work if you have the App Store version.\nClick on this message if you are using the App Store version of KETSU and not getting subtitles. If you do so don't forget to refresh this page.", '', '', '', '', '', false, streamta, false );
+let output = [ ];
+var sliderArray = [ ];
+var slider = document.querySelectorAll( '#slider .swiper-wrapper .swiper-slide' );
+for ( let slide of slider ) {
+ let title = slide.querySelector( 'img' ).alt;
+ let image = slide.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, '' );
+ let link = 'https://zoro.to/' + slide.querySelector( '.btn.btn-secondary.btn-radius' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, '' );
+ let description = slide.querySelector( '.desi-depion' ).innerText;
+ let type = slide.querySelector( 'div.sc-detail > div:nth-child(1)' ).innerText;
+ let date = 'First Aired : ' + slide.querySelector( '.scd-item.m-hide' ).innerText;
+ sliderArray.push( new Data( image, title + ' ' + type, description, title, date, '', '', false, link ) );
+}
+var TopAiring = [ ];
+var best = document.querySelectorAll( '#anime-featured > div > div > div > div:nth-child(1) > div > div.anif-block-ul > ul li' );
+for ( list of best ) {
+ let title = list.querySelector( 'img' ).alt;
+ var link = 'https://zoro.to/' + list.querySelector( 'a' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, null );
+ var image = list.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, null );
+ let ep = list.querySelector( '.tick-item.tick-sub' ).textContent.trim( );
+ var language = '??';
+ try {
+ language = list.querySelector( 'span:nth-child(1)' ).textContent.trim( );
+ } catch {}
+ TopAiring.push( new Data( image, title, '', ep, language, '', '', false, link ) );
+}
+var LastEpisodes = [ ];
+var last = document.querySelectorAll( '#main-content > section:nth-child(2) > div.tab-content > div > div.film_list-wrap div.flw-item' );
+for ( list of last ) {
+ let ticks = list.querySelectorAll('.tick .tick-item');
+ let title = list.querySelector( 'img' ).alt;
+ var link = 'https://zoro.to/' + list.querySelector( 'a' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, null );
+ var image = list.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, null );
+ let epTotal = '';
+ epTotal = list.querySelector('.tick-item.tick-eps');
+ if(!epTotal){
+ epTotal = ticks[0].textContent;
+ } else {
+ epTotal = epTotal.textContent.trim();
+ }
+ let ep = `${ticks[0].textContent.trim()}/${epTotal}`;
+ let language = '';
+ for(let i = 0; i 1 && ticks[i].classList.contains('tick-sub') && ticks[i+1].classList.contains('tick-dub')){
+ language = 'SUB/DUB';
+ break;
+ } else if(ticks[i].classList.contains('tick-sub')){
+ language = 'SUB';
+ break;
+ } else if(ticks[i].classList.contains('tick-dub')){
+ language = 'DUB';
+ break;
+ }
+ }
+ LastEpisodes.push( new Data( image, title, 'test1', ep, language, 'test2', 'test3', false, link ) );
+}
+var NewAnimes = [ ];
+var newanimes = document.querySelectorAll( '#main-content > section:nth-child(5) div.film_list-wrap div.flw-item' );
+for ( list of newanimes ) {
+ let ticks = list.querySelectorAll('.tick.ltr .tick-item');
+ let title = list.querySelector( 'img' ).alt;
+ let link = 'https://zoro.to/' + list.querySelector( 'a' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, null );
+ let image = list.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, null );
+ let epTotal = '';
+ epTotal = list.querySelector('.tick-item.tick-eps');
+ if(!epTotal){
+ epTotal = ticks[0].textContent.trim();
+ } else {
+ epTotal = epTotal.textContent.trim();
+ }
+ let ep = ``;
+ if(epTotal== ''){
+ ep = `${ticks[0].textContent.trim()}`
+ } else {
+ ep = `${ticks[0].textContent.trim()}/${epTotal}`
+ }
+ let language = '';
+ for(let i = 0; i 1 && ticks[i].classList.contains('tick-sub') && ticks[i+1].classList.contains('tick-dub')){
+ language = 'SUB/DUB';
+ break;
+ } else if(ticks[i].classList.contains('tick-sub')){
+ language = 'SUB';
+ break;
+ } else if(ticks[i].classList.contains('tick-dub')){
+ language = 'DUB';
+ break;
+ }
+ }
+ NewAnimes.push( new Data( image, title, '', ep, language, '', '', false, link ) );
+}
+let MostViewed = [ ];
+var mostviewed = document.querySelectorAll( '#top-viewed-week > ul > li' );
+for ( list of mostviewed ) {
+ let title = list.querySelector( 'img' ).alt;
+ let link = 'https://zoro.to/' + list.querySelector( 'a' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, null );
+ let image = list.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, null );
+ let views = '??';
+ let viewCount = list.querySelector( '.fdi-item');
+ if(viewCount){
+ views = viewCount.textContent.trim();
+ }
+ MostViewed.push( new Data( image, title, '', views, '', '', '', false, link ) );
+}
+let layout = new Layout( new Insets( 0, 0, 0, 0 ), 1, 1, 1, 1, 0, new Size( 400, 105 ), new Ratio( 'width', 4, 10 ), new Size( 0, 0 ), 0, 0 );
+let layout1 = new Layout( new Insets( 0, 0, 10, 10 ), 1, 1, 1, 1, 0, new Size( 400, 105 ), new Ratio( 'width', 4, 10 ), new Size( 0, 0 ), 0, 0 );
+output.push( new Output( CellDesings.Special3, Orientation.horizontal, DefaultLayouts.wideStrechedFull, Paging.leading, new Section( '', true ), layout, shuffle( sliderArray ) ) );
+if ( LoadText == 'True' ) {
+ output.push( new Output( 'CELLHelperText', Orientation.horizontal, DefaultLayouts.wideFull, Paging.centered, new Section( '', true ), layout1, [ infoText ] ) );
+}
+output.push( new Output( CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.none, new Section( 'Top Airing : ', true ), null, TopAiring ) );
+output.push( new Output( CellDesings.normal1, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.leading, new Section( 'Last Episodes: ', true ), null, LastEpisodes ) );
+output.push( new Output( CellDesings.wide6, Orientation.horizontal, DefaultLayouts.longDoubletsFull, Paging.none, new Section( 'New On Zoro', true ), null, NewAnimes ) );
+output.push( new Output( CellDesings.normal2, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.none, new Section( 'Most Viewed Animes', true ), null, MostViewed ) );
+let date = new Date( );
+let year = date.getFullYear( );
+let day = date.getDate( );
+let month = date.getMonth( ) + 1;
+let timezoneOffset = date.getTimezoneOffset( );
+if ( month < 10 ) {
+ month = '0' + month;
+}
+if ( day < 10 ) {
+ day = '' + '0' + day
+}
+let nextRequest = `https://zoro.to/ajax/schedule/list?tzOffset=${timezoneOffset}&date=${year}-${month}-${day}`;
+let MainPageObject = new MainPage( new ModuleRequest( nextRequest, 'get', emptyKeyValue1, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( true, false, '' ), output );
+let finalJson = JSON.stringify( MainPageObject );
+savedData.innerHTML = finalJson;
diff --git a/Module Parser KETSU/Zoro.to/MainPage/mainpage2.js b/Module Parser KETSU/Zoro.to/MainPage/mainpage2.js
new file mode 100644
index 0000000..52c224d
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/MainPage/mainpage2.js
@@ -0,0 +1,509 @@
+<<<<<<< HEAD
+const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+};
+const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+};
+const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+};
+const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+};
+
+function MainPage(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+}
+
+function Section(sectionName, separator) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+}
+
+function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+}
+
+function Insets(top, bottom, left, right) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+}
+
+function Size(width, height) {
+ this.width = width;
+ this.height = height;
+}
+
+function Ratio(inRelation, number1, number2) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+}
+
+function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+}
+
+function shuffle(a) {
+ var j, x, i;
+ for (i = a.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = a[i];
+ a[i] = a[j];
+ a[j] = x;
+ }
+ return a;
+}
+
+function checkTime() {
+ var now = new Date();
+ var hour = now.getHours();
+ var minute = now.getMinutes();
+ var second = now.getSeconds();
+ var time = hour + ':' + minute;
+ return time;
+}
+
+function getDaysInMonth(month, year) {
+ return new Date(year, month, 0).getDate();
+}
+var savedData = document.getElementById('ketsu-final-data');
+var parsedJson = JSON.parse(savedData.innerHTML);
+let emptyKeyValue = [new KeyValue('', '')];
+let emptyKeyValue1 = [new KeyValue('X-Requested-With', 'XMLHttpRequest')];
+let output = parsedJson.output;
+var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');
+var json = JSON.parse(script).html;
+var nextRequest = '';
+var schedule = [];
+var htmldom = new DOMParser().parseFromString(json, 'text/html');
+var content = htmldom.querySelectorAll('li');
+var actualtime = checkTime();
+for (anime of content) {
+ var link = 'https://zoro.to' + anime.querySelector('a').getAttribute('href');
+ link = new ModuleRequest(link, 'get', emptyKeyValue, null);
+ var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null);
+ var episode = anime.querySelector('.fd-play').innerText.trim();
+ var time = anime.querySelector('.time').innerText.trim();
+ if ((parseInt(time.split(':')[0]) > parseInt(actualtime.split(':')[0])) || ((parseInt(time.split(':')[0]) == parseInt(actualtime.split(':')[0])) && (parseInt(time.split(':')[1]) > parseInt(actualtime.split(':')[1])))) {
+ console.log('not aired yet');
+ var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode;
+ schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false));
+ }
+}
+var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0);
+if (schedule.length == 0) {
+ var date = new Date();
+ var year = date.getFullYear();
+ var day = date.getDate();
+ var month = date.getMonth() + 1;
+ var daysinmonth = getDaysInMonth(month, year);
+ var timezoneOffset = date.getTimezoneOffset();
+ if (month < 10) {
+ month = '0' + month;
+ }
+ var nextDay = day + 1;
+ if (nextDay > daysinmonth) {
+ nextDay = '01';
+ month = month + 1;
+ if (month > 12) {
+ month = '01';
+ year = year + 1;
+ }
+ } else {
+ nextDay = day + 1;
+ };
+ if (nextDay < 10) {
+ nextDay = '' + '0' + nextDay
+ };
+ var nextRequest = `https://zoro.to/ajax/schedule/list?tzOffset=${timezoneOffset}&date=${year}-${month}-${nextDay}`;
+} else {
+ output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Today', true), testLayout, schedule));
+}
+let MainPageObject = new MainPage(new ModuleRequest(nextRequest, 'get', emptyKeyValue1, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);
+var finalJson = JSON.stringify(MainPageObject);
+savedData.innerHTML = finalJson;
+=======
+ const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+ };
+ const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+ };
+ const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+ };
+ const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+ };
+
+ function MainPage(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+ }
+
+ function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+ }
+
+ function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+ }
+
+ function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+ }
+
+ function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+ }
+
+ function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+ }
+
+ function Section(sectionName, separator) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+ }
+
+ function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+ }
+
+ function Insets(top, bottom, left, right) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+ }
+
+ function Size(width, height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ function Ratio(inRelation, number1, number2) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+ }
+
+ function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+ }
+
+ function shuffle(a) {
+ var j, x, i;
+ for (i = a.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = a[i];
+ a[i] = a[j];
+ a[j] = x;
+ }
+ return a;
+ }
+
+ function checkTime() {
+ var now = new Date();
+ var hour = now.getHours();
+ var minute = now.getMinutes();
+ var second = now.getSeconds();
+ var time = hour + ':' + minute;
+ return time;
+ }
+
+ function getDaysInMonth(month, year) {
+ return new Date(year, month, 0).getDate();
+ }
+ var savedData = document.getElementById('ketsu-final-data');
+ var parsedJson = JSON.parse(savedData.innerHTML);
+ let emptyKeyValue = [new KeyValue('', '')];
+ let output = parsedJson.output;
+ var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');
+ var json = JSON.parse(script).html;
+ var nextRequest = '';
+ var schedule = [];
+ var htmldom = new DOMParser().parseFromString(json, 'text/html');
+ var content = htmldom.querySelectorAll('li');
+ var actualtime = checkTime();
+ for (anime of content) {
+ var link = 'https://zoro.to' + anime.querySelector('a').getAttribute('href');
+ link = new ModuleRequest(link, 'get', emptyKeyValue, null);
+ var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null);
+ var episode = anime.querySelector('.fd-play').innerText.trim();
+ var time = anime.querySelector('.time').innerText.trim();
+ if ((parseInt(time.split(':')[0]) > parseInt(actualtime.split(':')[0])) || ((parseInt(time.split(':')[0]) == parseInt(actualtime.split(':')[0])) && (parseInt(time.split(':')[1]) > parseInt(actualtime.split(':')[1])))) {
+ console.log('not aired yet');
+ var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode;
+ schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false));
+ }
+ }
+ var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0);
+ if (schedule.length == 0) {
+ var date = new Date();
+ var year = date.getFullYear();
+ var day = date.getDate();
+ var month = date.getMonth() + 1;
+ var daysinmonth = getDaysInMonth(month, year);
+ var timezoneOffset = date.getTimezoneOffset();
+ if (month < 10) {
+ month = '0' + month;
+ }
+ var nextDay = day + 1;
+ if (nextDay > daysinmonth) {
+ nextDay = '01';
+ month = month + 1;
+ if (month > 12) {
+ month = '01';
+ year = year + 1;
+ }
+ } else {
+ nextDay = day + 1;
+ }
+ var nextRequest = `https://zoro.to/ajax/schedule/list?tzOffset=${timezoneOffset}&date=${year}-${month}-${nextDay}`;
+ } else {
+ output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Today', true), testLayout, schedule));
+ }
+ let MainPageObject = new MainPage(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);
+ var finalJson = JSON.stringify(MainPageObject);
+ savedData.innerHTML = finalJson;
+>>>>>>> 53b1fea (init linux)
diff --git a/Module Parser KETSU/Zoro.to/MainPage/mainpage3.js b/Module Parser KETSU/Zoro.to/MainPage/mainpage3.js
new file mode 100644
index 0000000..eb78462
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/MainPage/mainpage3.js
@@ -0,0 +1,422 @@
+<<<<<<< HEAD
+ const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+ };
+ const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+ };
+ const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+ };
+ const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+ };
+
+ function MainPage(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+ }
+
+ function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+ }
+
+ function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+ }
+
+ function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+ }
+
+ function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+ }
+
+ function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+ }
+
+ function Section(sectionName, separator) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+ }
+
+ function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+ }
+
+ function Insets(top, bottom, left, right) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+ }
+
+ function Size(width, height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ function Ratio(inRelation, number1, number2) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+ }
+
+ function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+ }
+
+ function shuffle(a) {
+ var j, x, i;
+ for (i = a.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = a[i];
+ a[i] = a[j];
+ a[j] = x;
+ }
+ return a;
+ }
+ var savedData = document.getElementById('ketsu-final-data');
+ var parsedJson = JSON.parse(savedData.innerHTML);
+ let emptyKeyValue = [new KeyValue('', '')];
+ let emptyKeyValue1 = [new KeyValue('X-Requested-With', 'XMLHttpRequest')];
+ let output = parsedJson.output;
+ var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');
+ var json = JSON.parse(script).html;
+ var schedule = [];
+ var htmldom = new DOMParser().parseFromString(json, 'text/html');
+ var content = htmldom.querySelectorAll('li');
+ for (anime of content) {
+ var link = 'https://zoro.to' + anime.querySelector('a').getAttribute('href');
+ link = new ModuleRequest(link, 'get', emptyKeyValue, null);
+ var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null);
+ var episode = anime.querySelector('.fd-play').innerText.trim();
+ var time = anime.querySelector('.time').innerText.trim();
+ var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode;
+ schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false));
+ }
+ var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0);
+ output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Tomorrow', true), testLayout, schedule));
+ let MainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);
+ var finalJson = JSON.stringify(MainPageObject);
+ savedData.innerHTML = finalJson;
+=======
+const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+};
+const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+};
+const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+};
+const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+};
+
+function MainPage(request, extra, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+}
+
+function Section(sectionName, separator) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+}
+
+function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+}
+
+function Insets(top, bottom, left, right) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+}
+
+function Size(width, height) {
+ this.width = width;
+ this.height = height;
+}
+
+function Ratio(inRelation, number1, number2) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+}
+
+function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+}
+
+function shuffle(a) {
+ var j, x, i;
+ for (i = a.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = a[i];
+ a[i] = a[j];
+ a[j] = x;
+ }
+ return a;
+}
+var savedData = document.getElementById('ketsu-final-data');
+var parsedJson = JSON.parse(savedData.innerHTML);
+let emptyKeyValue = [new KeyValue('', '')];
+let output = parsedJson.output;
+var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');
+var json = JSON.parse(script).html;
+var schedule = [];
+var htmldom = new DOMParser().parseFromString(json, 'text/html');
+var content = htmldom.querySelectorAll('li');
+for (anime of content) {
+ var link = 'https://zoro.to' + anime.querySelector('a').getAttribute('href');
+ link = new ModuleRequest(link, 'get', emptyKeyValue, null);
+ var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null);
+ var episode = anime.querySelector('.fd-play').innerText.trim();
+ var time = anime.querySelector('.time').innerText.trim();
+ var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode;
+ schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false));
+}
+var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0);
+output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Tomorrow', true), testLayout, schedule));
+let MainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);
+var finalJson = JSON.stringify(MainPageObject);
+savedData.innerHTML = finalJson;
+>>>>>>> 53b1fea (init linux)
diff --git a/Module Parser KETSU/Zoro.to/Search/search.js b/Module Parser KETSU/Zoro.to/Search/search.js
new file mode 100644
index 0000000..5c96df4
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Search/search.js
@@ -0,0 +1,237 @@
+const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+};
+const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+};
+const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+};
+const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+};
+
+function Search ( request, extra, separator, javascriptConfig, output ) {
+ this.request = request;
+ this.extra = extra;
+ this.separator = separator;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+}
+
+function ModuleRequest ( url, method, headers, httpBody ) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra ( commands, extraInfo ) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands ( commandName, params ) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue ( key, value ) {
+ this.key = key;
+ this.value = value;
+}
+
+function Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+}
+
+function Section ( sectionName, separator ) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+}
+
+function Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+}
+
+function Insets ( top, bottom, left, right ) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+}
+
+function Size ( width, height ) {
+ this.width = width;
+ this.height = height;
+}
+
+function Ratio ( inRelation, number1, number2 ) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+}
+
+function Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+}
+
+function quickData ( link, image, title, field1 ) {
+ return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link, false );
+}
+
+function shuffle ( a ) {
+ var j, x, i;
+ for ( i = a.length - 1; i > 0; i-- ) {
+ j = Math.floor( Math.random( ) * ( i + 1 ) );
+ x = a[ i ];
+ a[ i ] = a[ j ];
+ a[ j ] = x;
+ }
+ return a;
+}
+var savedData = document.getElementById( 'ketsu-final-data' );
+var parsedJson = JSON.parse( savedData.innerHTML );
+let output = [ ];
+let emptyKeyValue = [ new KeyValue( '', '' ) ];
+let nextRequest = '';
+let searchArray = [ ];
+if ( !parsedJson.request.url.split( 'keyword=' )[ 1 ].includes( 'random' ) ) {
+ let shorts = document.querySelectorAll( '.film_list-wrap .flw-item' );
+ for ( let short of shorts ) {
+ let image = short.querySelector( 'img' ).dataset.src;
+ image = new ModuleRequest( image, 'get', emptyKeyValue, null );
+ let title = short.querySelector( 'img' ).alt;
+ let nbEp = '';
+ let nbEpDub = '';
+ if (short.querySelector( '.tick.ltr' ) != null) {
+ nbEpDub = short.querySelector( '.tick.ltr' ).textContent.replaceAll( '\n', '' ).trim( ).replace( ' ', '/' ).replaceAll( ' ', '' );
+ }
+ if(short.querySelector( '.tick-item.tick-eps' ).textContent != null){
+ nbEp = short.querySelector( '.tick-item.tick-eps' ).textContent.trim();
+ } else {
+ nbEp = short.querySelector( '.tick-item.tick-sub' ).textContent.trim();
+ }
+ let type = '';
+ let field1 = '';
+ if (nbEpDub != '') {
+ field1 = nbEp + ' | ' + nbEpDub;
+ type = 'SUB/DUB'
+ } else if(nbEpDub == '') {
+ field1 = nbEp;
+ type = 'SUB'
+ } else {
+ field1 = nbEpDub;
+ type = 'DUB'
+ }
+ let link = 'https://zoro.to/' + short.querySelector( 'a' ).href;
+ link = new ModuleRequest( link, 'get', emptyKeyValue, null );
+ searchArray.push( new Data( image, title,field1 + ' ' + type , '', type, '', '', false, link ) );
+ }
+ var testLayout = new Layout( new Insets( 10, 10, 10, 10 ), 1, 2, 3, 1, 500, new Size( 400, 400 ), new Ratio( 'width', 4, 11 ), new Size( 0, 0 ), 10, 10 );
+ output.push( new Output( CellDesings.wide8, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', true ), testLayout, searchArray ) );
+} else {
+ nextRequest = 'https://zoro.to/random';
+}
+let searchPageObject = new Search( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), '', new JavascriptConfig( true, false, '' ), output );
+var finalJson = JSON.stringify( searchPageObject );
+savedData.innerHTML = finalJson;
diff --git a/Module Parser KETSU/Zoro.to/Search/search1.js b/Module Parser KETSU/Zoro.to/Search/search1.js
new file mode 100644
index 0000000..c38a0eb
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/Search/search1.js
@@ -0,0 +1,228 @@
+ const DefaultLayouts = {
+ ultraWideFull: 'ultraWideFull',
+ ultraWide: 'ultraWide',
+ wideFull: 'wideFull',
+ wide: 'wide',
+ wideStrechedFull: 'wideStrechedFull',
+ wideStrechedFullDouble: 'WideStrechedFullDouble',
+ wideStreched: 'wideStreched',
+ wideStrechedDouble: 'wideStrechedDouble',
+ wideStrechedFullList: 'wideStrechedFullList',
+ wideStrechedList: 'wideStrechedList',
+ doublets: 'doublets',
+ doubletsDouble: 'doubletsDouble',
+ doubletsFull: 'doubletsFull',
+ doubletsFullDouble: 'doubletsFullDouble',
+ doubletsConstant: 'doubletsConstant',
+ doubletsDoubleConstant: 'doubletsDoubleConstant',
+ doubletsFullConstant: 'doubletsFullConstant',
+ doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',
+ longDoublets: 'longDoublets',
+ longDoubletsDouble: 'longDoubletsDouble',
+ longDoubletsFull: 'longDoubletsFull',
+ longDoubletsFullDouble: 'longDoubletsFullDouble',
+ longDoubletsConstant: 'longDoubletsConstant',
+ longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',
+ longDoubletsFullConstant: 'longDoubletsFullConstant',
+ longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',
+ triplets: 'triplets',
+ tripletsDouble: 'tripletsDouble',
+ tripletsFull: 'tripletsFull',
+ tripletsFullDouble: 'tripletsFullDouble',
+ tripletsConstant: 'tripletsConstant',
+ tripletsDoubleConstant: 'tripletsDoubleConstant',
+ tripletsFullConstant: 'tripletsFullConstant',
+ tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',
+ longTriplets: 'longTriplets',
+ longTripletsDouble: 'longTripletsDouble',
+ longTripletsFull: 'longTripletsFull',
+ longTripletsFullDouble: 'longTripletsFullDouble',
+ longTripletsConstant: 'longTripletsConstant',
+ longTripletsDoubleConstant: 'longTripletsDoubleConstant',
+ longTripletsFullConstant: 'longTripletsFullConstant',
+ longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',
+ none: ''
+ };
+ const CellDesings = {
+ Special1: 'Special1',
+ Special2: 'Special2',
+ Special3: 'Special3',
+ CELLHelperText: 'CELLHelperText',
+ small1: 'small1',
+ small2: 'small2',
+ normal1: 'normal1',
+ normal2: 'normal2',
+ normal3: 'normal3',
+ normal4: 'normal4',
+ normal5: 'normal5',
+ normal6: 'normal6',
+ normal7: 'normal7',
+ wide1: 'wide1',
+ wide2: 'wide2',
+ wide3: 'wide3',
+ wide4: 'wide4',
+ wide5: 'wide5',
+ wide6: 'wide6',
+ wide7: 'wide7',
+ wide8: 'wide8',
+ wide9: 'wide9',
+ wide10: 'wide10',
+ wide11: 'wide11'
+ };
+ const Paging = {
+ leading: 'leading',
+ centered: 'centered',
+ none: ''
+ };
+ const Orientation = {
+ horizontal: 'horizontal',
+ vertical: 'vertical'
+ };
+
+ function Search(request, extra, separator, javascriptConfig, output) {
+ this.request = request;
+ this.extra = extra;
+ this.separator = separator;
+ this.javascriptConfig = javascriptConfig;
+ this.output = output;
+ }
+
+ function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+ }
+
+ function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+ }
+
+ function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+ }
+
+ function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+ }
+
+ function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) {
+ this.cellDesing = cellDesing;
+ this.orientation = orientation;
+ this.defaultLayout = defaultLayout;
+ this.paging = paging;
+ this.section = section;
+ this.layout = layout;
+ this.data = data;
+ }
+
+ function Section(sectionName, separator) {
+ this.sectionName = sectionName;
+ this.separator = separator;
+ }
+
+ function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) {
+ this.insets = insets;
+ this.visibleCellsWidthS = visibleCellsWidthS;
+ this.visibleCellsWidthM = visibleCellsWidthM;
+ this.visibleCellsWidthL = visibleCellsWidthL;
+ this.visibleCellsHeight = visibleCellsHeight;
+ this.heightForVisibleCells = heightForVisibleCells;
+ this.cellSize = cellSize;
+ this.ratio = ratio;
+ this.constant = constant;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
+ }
+
+ function Insets(top, bottom, left, right) {
+ this.top = top;
+ this.bottom = bottom;
+ this.left = left;
+ this.right = right;
+ }
+
+ function Size(width, height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ function Ratio(inRelation, number1, number2) {
+ this.inRelation = inRelation;
+ this.number1 = number1;
+ this.number2 = number2;
+ }
+
+ function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) {
+ this.image = image;
+ this.title = title;
+ this.description = description;
+ this.field1 = field1;
+ this.field2 = field2;
+ this.field3 = field3;
+ this.field4 = field4;
+ this.isChapter = isChapter;
+ this.link = link;
+ this.openInWebView = openInWebView;
+ }
+
+ function quickData(link, image, title, field1) {
+ return new Data(image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link);
+ }
+
+ function shuffle(a) {
+ var j, x, i;
+ for (i = a.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = a[i];
+ a[i] = a[j];
+ a[j] = x;
+ }
+ return a;
+ }
+ var savedData = document.getElementById('ketsu-final-data');
+ var parsedJson = JSON.parse(savedData.innerHTML);
+ let output = [];
+ let emptyKeyValue = [new KeyValue('', '')];
+ var anime = [];
+ var image = document.querySelector('.film-poster img').src;
+ image = new ModuleRequest(image, 'get', emptyKeyValue, null);
+ if (document.querySelector('.anisc-detail h2').textContent != document.querySelector('.anisc-detail h2').dataset.jname) {
+ var title = document.querySelector('.anisc-detail h2').textContent + '/' + document.querySelector('.anisc-detail h2').dataset.jname
+ } else {
+ var title = document.querySelector('.anisc-detail h2').dataset.jname
+ };
+ var desc = '';
+ try {
+ desc = document.querySelector('.text').innerText.replaceAll('\\n', ' ').trim().replaceAll('\\n', ' ').trim();
+ } catch {
+ desc = document.querySelector('.text').innerText.trim();
+ }
+ var link = 'https://zoro.to/' +document.querySelector('.btn.btn-radius.btn-primary.btn-play').href.replace('/watch/', '');
+ link = new ModuleRequest(link, 'get', emptyKeyValue, null);
+ try {
+ var field1 = document.querySelector('#ani_detail > div > div > div.anis-content > div.anisc-detail > div.film-stats').innerText.trim().replaceAll('\\n', ' ')
+ } catch (e) {
+ var field1 = document.querySelector('#ani_detail > div > div > div.anis-content > div.anisc-detail > div.film-stats').innerText.trim()
+ };
+ if (field1.includes('TV')) {
+ var field2 = 'TV';
+ } else if (field1.includes('Movie')) {
+ var field2 = 'Movie'
+ } else {
+ var field2 = 'Unknown'
+ };
+ anime.push(new Data(image, title, desc, field1, field2, '', '', false, link, false));
+ output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('', true), null, anime));;
+ let searchPageObject = new Search(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(true, false, ''), output);
+ var finalJson = JSON.stringify(searchPageObject);
+ savedData.innerHTML = finalJson;
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/helper/recaptcha.js b/Module Parser KETSU/Zoro.to/helper/recaptcha.js
new file mode 100644
index 0000000..2c9bb2e
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/helper/recaptcha.js
@@ -0,0 +1,98 @@
+function Info(request, extra, javascriptConfig) {
+ this.request = request;
+ this.extra = extra;
+ this.javascriptConfig = javascriptConfig;
+}
+
+function ModuleRequest(url, method, headers, httpBody) {
+ this.url = url;
+ this.method = method;
+ this.headers = headers;
+ this.httpBody = httpBody;
+}
+
+function Extra(commands, extraInfo) {
+ this.commands = commands;
+ this.extraInfo = extraInfo;
+}
+
+function Commands(commandName, params) {
+ this.commandName = commandName;
+ this.params = params;
+}
+
+function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {
+ this.removeJavascript = removeJavascript;
+ this.loadInWebView = loadInWebView;
+ this.javaScript = javaScript;
+}
+
+function KeyValue(key, value) {
+ this.key = key;
+ this.value = value;
+}
+const savedData = document.getElementById('ketsu-final-data');
+const parsedJson = JSON.parse(savedData.innerHTML);
+let emptyKeyValue = [new KeyValue('', '')];
+
+function createElementFromHTML(htmlString) {
+ var div = document.createElement('div');
+ div.innerHTML = htmlString.trim();
+ return div.firstChild;
+}
+var done = false;
+var mCode = '';
+try {
+ var _0x359c07 = _0x4666;
+ var _0x1cbce7 = _0x4666;
+ grecaptcha.ready(function () {
+ var _0x5c6fe9 = _0x1cbce7;
+ grecaptcha.execute(recaptchaSiteKey, {
+ 'action': _0x5c6fe9(0x3bb)
+ })['then'](function (_0x178b6b) {
+ if (_0x178b6b != undefined && _0x178b6b != '') {
+ localStorage.setItem('ketsu-code', _0x178b6b);
+ mCode = _0x178b6b;
+ document.body.prepend(createElementFromHTML("
KETSU FINISHED "));
+ window.scrollTo({
+ top: 0,
+ behavior: 'smooth'
+ });
+ done = true;
+ }
+ });
+ });
+} catch {}
+try {
+ var _0x3401d2 = _0x3de586;
+ var _0x359c07 = _0x3de586;
+ grecaptcha[_0x3401d2(0xcf3)](function () {
+ var _0x3bca0e = _0x3401d2;
+ grecaptcha['execute'](recaptchaSiteKey, {
+ 'action': _0x3bca0e(0x35e)
+ })[_0x3bca0e(0x3d6)](function (_0x2e4d0a) {
+ if (_0x2e4d0a != undefined && _0x2e4d0a != '') {
+ localStorage.setItem('ketsu-code', _0x2e4d0a);
+ mCode = _0x2e4d0a;
+ document.body.prepend(createElementFromHTML("
KETSU FINISHED "));
+ window.scrollTo({
+ top: 0,
+ behavior: 'smooth'
+ });
+ done = true;
+ }
+ });
+ });
+} catch {}
+for (var x = 0; x < 1500; x++) {
+ if (done) {
+ break;
+ }
+ var request = new XMLHttpRequest();
+ request.open('GET', 'https://zoro.to/js/app.min.js?v=6.8', false);
+ request.send(null);
+}
+const commands = [new Commands('variable', [new KeyValue('ketsu-code', localStorage.getItem('ketsu-code'))])];
+const infoPageObject = new Info(new ModuleRequest('', '', emptyKeyValue, null), new Extra(commands, emptyKeyValue), new JavascriptConfig(false, false, ''));
+const finalJson = JSON.stringify(infoPageObject);
+savedData.innerHTML = finalJson;
\ No newline at end of file
diff --git a/Module Parser KETSU/Zoro.to/moduleTemplate.json b/Module Parser KETSU/Zoro.to/moduleTemplate.json
new file mode 100644
index 0000000..922122f
--- /dev/null
+++ b/Module Parser KETSU/Zoro.to/moduleTemplate.json
@@ -0,0 +1,1439 @@
+{
+ "moduleInfo": {
+ "moduleName": "Aniwatch",
+ "moduleInitials": "AW",
+ "moduleDesc": "Module for aniwatch (ex-zoro), subs are now supported on newer versions of Ketsu",
+ "developer": "ナビル",
+ "moduleID": "114653268923213246",
+ "moduleImage": "https://i.postimg.cc/jSP7Srhr/zoro-gif.gif",
+ "moduleVersion": 2.15,
+ "moduleLenguage": "ENG",
+ "searchPlaceHolder": "If you want to search for a random anime, just type 'random'",
+ "changelog": "2.15 - Fixed the megacloud resolver",
+ "moduleType": "Video",
+ "baseURL": "https://aniwatch.to/",
+ "moduleDeveloperSite": "https://bilnaa.github.io/main/",
+ "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Zoro.to/moduleTemplate.json",
+ "preferedServer": "MEGACLOUD",
+ "preferedDownloadServer": "MEGACLOUD",
+ "blackListed": [""],
+ "moduleCreatorIdJNDjSvRFRiorSWgBagab": {
+ "path": "oxKdw",
+ "id": "moduleInfosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Module Info",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdbdPLcIAmNwtGqhIoaIcA": {
+ "path": "wfoFI",
+ "id": "moduleInfocell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "global": {
+ "variables": [{
+ "key": "",
+ "value": ""
+ }],
+ "cookies": [{
+ "key": "",
+ "value": ""
+ }],
+ "headers": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "mainPage": [{
+ "request": {
+ "url": "https://aniwatch.to/home/",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "LoadText",
+ "value": "False"
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n};\nconst CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n};\nconst Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n};\nconst Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\nfunction MainPage ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n}\n\nfunction Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n}\n\nfunction Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n}\n\nfunction Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n}\n\nfunction Size ( width, height ) {\n this.width = width;\n this.height = height;\n}\n\nfunction Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n}\n\nfunction Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet emptyKeyValue1 = [ new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\nvar LoadText = parsedJson.extra.extraInfo[ 0 ].value;\nconst dummyQuest = new ModuleRequest( '', 'get', emptyKeyValue, null );\nconst streamta = new ModuleRequest( 'ketsuapp://?moduleData=https://raw.githubusercontent.com/Bilnaa/beta-ketsu/main/zoro.json', 'get', emptyKeyValue, null );\nconst infoText = new Data( dummyQuest, \"Subs are only available on newer versions of Ketsu, on the Rapid-Cloud resolver and won't work if you have the App Store version.\\nClick on this message if you are using the App Store version of KETSU and not getting subtitles. If you do so don't forget to refresh this page.\", '', '', '', '', '', false, streamta, false );\nlet output = [ ];\nvar sliderArray = [ ];\nvar slider = document.querySelectorAll( '#slider .swiper-wrapper .swiper-slide' );\nfor ( let slide of slider ) {\n let title = slide.querySelector( 'img' ).alt;\n let image = slide.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, '' );\n let link = 'https://aniwatch.to' + slide.querySelector( '.btn.btn-secondary.btn-radius' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, '' );\n let description = slide.querySelector( '.desi-depion' ).innerText;\n let type = slide.querySelector( 'div.sc-detail > div:nth-child(1)' ).innerText;\n let date = 'First Aired : ' + slide.querySelector( '.scd-item.m-hide' ).innerText;\n sliderArray.push( new Data( image, title + ' ' + type, description, title, date, '', '', false, link ) );\n}\nvar TopAiring = [ ];\nvar best = document.querySelectorAll( '#anime-featured > div > div > div > div:nth-child(1) > div > div.anif-block-ul > ul li' );\nfor ( let list of best ) {\n try {\n let title = list.querySelector( 'img' ).alt;\n let link = 'https://aniwatch.to' + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n let image = list.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let ep = list.querySelector( '.tick-item.tick-sub' ).textContent.trim( );\n let language = '??';\n try {\n language = list.querySelector( 'span:nth-child(1)' ).textContent.trim( );\n } catch (e) {\n console.log(e)\n }\n TopAiring.push( new Data( image, title, '', ep, language, '', '', false, link ) );\n } catch(e){\n console.log(e)\n }\n}\nvar LastEpisodes = [ ];\nvar last = document.querySelectorAll( '#main-content > section:nth-child(2) > div.tab-content > div > div.film_list-wrap div.flw-item' );\nfor ( let list of last ) {\n try {\n let ticks = list.querySelectorAll('.tick .tick-item');\n let title = list.querySelector( 'img' ).alt;\n let link = 'https://aniwatch.to' + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n let image = list.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let epTotal = '';\n epTotal = list.querySelector('.tick-item.tick-eps');\n if(!epTotal){\n epTotal = ticks[0].textContent;\n } else {\n epTotal = epTotal.textContent.trim();\n }\n let ep = `${ticks[0].textContent.trim()}/${epTotal}`;\n let language = '';\n for(let i = 0; i 1 && ticks[i].classList.contains('tick-sub') && ticks[i+1].classList.contains('tick-dub')){\n language = 'SUB/DUB';\n break;\n } else if(ticks[i].classList.contains('tick-sub')){\n language = 'SUB';\n break;\n } else if(ticks[i].classList.contains('tick-dub')){\n language = 'DUB';\n break;\n }\n }\n LastEpisodes.push( new Data( image, title, 'test1', ep, language, 'test2', 'test3', false, link ) );\n }catch(e){\n console.log(e)\n }\n \n}\nvar NewAnimes = [ ];\nvar newanimes = document.querySelectorAll( '#main-content > section:nth-child(5) div.film_list-wrap div.flw-item' );\nfor ( let list of newanimes ) {\n try {\n let ticks = list.querySelectorAll('.tick.ltr .tick-item');\n let title = list.querySelector( 'img' ).alt;\n let link = 'https://aniwatch.to/' + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n let image = list.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let epTotal = '';\n epTotal = list.querySelector('.tick-item.tick-eps');\n if(!epTotal){\n epTotal = ticks[0].textContent.trim();\n } else {\n epTotal = epTotal.textContent.trim();\n }\n let ep = ``;\n if(epTotal== ''){\n ep = `${ticks[0].textContent.trim()}`\n } else {\n ep = `${ticks[0].textContent.trim()}/${epTotal}`\n }\n let language = '';\n for(let i = 0; i 1 && ticks[i].classList.contains('tick-sub') && ticks[i+1].classList.contains('tick-dub')){\n language = 'SUB/DUB';\n break;\n } else if(ticks[i].classList.contains('tick-sub')){\n language = 'SUB';\n break;\n } else if(ticks[i].classList.contains('tick-dub')){\n language = 'DUB';\n break;\n }\n }\n NewAnimes.push( new Data( image, title, '', ep, language, '', '', false, link ) );\n } catch(e){\n console.log(e)\n }\n \n}\nlet MostViewed = [ ];\nvar mostviewed = document.querySelectorAll( '#top-viewed-week > ul > li' );\nfor ( let list of mostviewed ) {\n try {\n let title = list.querySelector( 'img' ).alt;\n let link = 'https://aniwatch.to/' + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n let image = list.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let views = '??';\n let viewCount = list.querySelector( '.fdi-item');\n if(viewCount){\n views = viewCount.textContent.trim();\n }\n MostViewed.push( new Data( image, title, '', views, '', '', '', false, link ) );\n }catch(e){\n console.log(e)\n }\n}\nlet layout = new Layout( new Insets( 0, 0, 0, 0 ), 1, 1, 1, 1, 0, new Size( 400, 105 ), new Ratio( 'width', 4, 10 ), new Size( 0, 0 ), 0, 0 );\nlet layout1 = new Layout( new Insets( 0, 0, 10, 10 ), 1, 1, 1, 1, 0, new Size( 400, 105 ), new Ratio( 'width', 4, 10 ), new Size( 0, 0 ), 0, 0 );\noutput.push( new Output( CellDesings.Special3, Orientation.horizontal, DefaultLayouts.wideStrechedFull, Paging.leading, new Section( '', true ), layout, shuffle( sliderArray ) ) );\nif ( LoadText == 'True' ) {\n output.push( new Output( 'CELLHelperText', Orientation.horizontal, DefaultLayouts.wideFull, Paging.centered, new Section( '', true ), layout1, [ infoText ] ) );\n}\noutput.push( new Output( CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.none, new Section( 'Top Airing : ', true ), null, TopAiring ) );\noutput.push( new Output( CellDesings.normal1, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.leading, new Section( 'Last Episodes: ', true ), null, LastEpisodes ) );\noutput.push( new Output( CellDesings.wide6, Orientation.horizontal, DefaultLayouts.longDoubletsFull, Paging.none, new Section( 'New On Aniwatch', true ), null, NewAnimes ) );\noutput.push( new Output( CellDesings.normal2, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.none, new Section( 'Most Viewed Animes', true ), null, MostViewed ) );\nlet date = new Date( );\nlet year = date.getFullYear( );\nlet day = date.getDate( );\nlet month = date.getMonth( ) + 1;\nlet timezoneOffset = date.getTimezoneOffset( );\nif ( month < 10 ) {\n month = '0' + month;\n}\nif ( day < 10 ) {\n day = '' + '0' + day\n}\nlet nextRequest = `https://aniwatch.to/ajax/schedule/list?tzOffset=${timezoneOffset}&date=${year}-${month}-${day}`;\nlet MainPageObject = new MainPage( new ModuleRequest( nextRequest, 'get', emptyKeyValue1, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( true, false, '' ), output );\nlet finalJson = JSON.stringify( MainPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "",
+ "method": "",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdfTodgKWnHDxeyNehjvZE": {
+ "path": "MqWHq",
+ "id": "mainPage,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Request",
+ "openedRequestMenu": "Headers",
+ "javascriptEditorScroll": 73
+ }
+ }, {
+ "request": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = { ultraWideFull: 'ultraWideFull', ultraWide: 'ultraWide', wideFull: 'wideFull', wide: 'wide', wideStrechedFull: 'wideStrechedFull', wideStrechedFullDouble: 'WideStrechedFullDouble', wideStreched: 'wideStreched', wideStrechedDouble: 'wideStrechedDouble', wideStrechedFullList: 'wideStrechedFullList', wideStrechedList: 'wideStrechedList', doublets: 'doublets', doubletsDouble: 'doubletsDouble', doubletsFull: 'doubletsFull', doubletsFullDouble: 'doubletsFullDouble', doubletsConstant: 'doubletsConstant', doubletsDoubleConstant: 'doubletsDoubleConstant', doubletsFullConstant: 'doubletsFullConstant', doubletsFullDoubleConstant: 'doubletsFullDoubleConstant', longDoublets: 'longDoublets', longDoubletsDouble: 'longDoubletsDouble', longDoubletsFull: 'longDoubletsFull', longDoubletsFullDouble: 'longDoubletsFullDouble', longDoubletsConstant: 'longDoubletsConstant', longDoubletsDoubleConstant: 'longDoubletsDoubleConstant', longDoubletsFullConstant: 'longDoubletsFullConstant', longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant', triplets: 'triplets', tripletsDouble: 'tripletsDouble', tripletsFull: 'tripletsFull', tripletsFullDouble: 'tripletsFullDouble', tripletsConstant: 'tripletsConstant', tripletsDoubleConstant: 'tripletsDoubleConstant', tripletsFullConstant: 'tripletsFullConstant', tripletsFullDoubleConstant: 'tripletsFullDoubleConstant', longTriplets: 'longTriplets', longTripletsDouble: 'longTripletsDouble', longTripletsFull: 'longTripletsFull', longTripletsFullDouble: 'longTripletsFullDouble', longTripletsConstant: 'longTripletsConstant', longTripletsDoubleConstant: 'longTripletsDoubleConstant', longTripletsFullConstant: 'longTripletsFullConstant', longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant', none: '' }; const CellDesings = { Special1: 'Special1', Special2: 'Special2', Special3: 'Special3', CELLHelperText: 'CELLHelperText', small1: 'small1', small2: 'small2', normal1: 'normal1', normal2: 'normal2', normal3: 'normal3', normal4: 'normal4', normal5: 'normal5', normal6: 'normal6', normal7: 'normal7', wide1: 'wide1', wide2: 'wide2', wide3: 'wide3', wide4: 'wide4', wide5: 'wide5', wide6: 'wide6', wide7: 'wide7', wide8: 'wide8', wide9: 'wide9', wide10: 'wide10', wide11: 'wide11' }; const Paging = { leading: 'leading', centered: 'centered', none: '' }; const Orientation = { horizontal: 'horizontal', vertical: 'vertical' }; function MainPage(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output; } function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody; } function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo; } function Commands(commandName, params) { this.commandName = commandName; this.params = params; } function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript; } function KeyValue(key, value) { this.key = key; this.value = value; } function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) { this.cellDesing = cellDesing; this.orientation = orientation; this.defaultLayout = defaultLayout; this.paging = paging; this.section = section; this.layout = layout; this.data = data; } function Section(sectionName, separator) { this.sectionName = sectionName; this.separator = separator; } function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) { this.insets = insets; this.visibleCellsWidthS = visibleCellsWidthS; this.visibleCellsWidthM = visibleCellsWidthM; this.visibleCellsWidthL = visibleCellsWidthL; this.visibleCellsHeight = visibleCellsHeight; this.heightForVisibleCells = heightForVisibleCells; this.cellSize = cellSize; this.ratio = ratio; this.constant = constant; this.horizontalSpacing = horizontalSpacing; this.verticalSpacing = verticalSpacing; } function Insets(top, bottom, left, right) { this.top = top; this.bottom = bottom; this.left = left; this.right = right; } function Size(width, height) { this.width = width; this.height = height; } function Ratio(inRelation, number1, number2) { this.inRelation = inRelation; this.number1 = number1; this.number2 = number2; } function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) { this.image = image; this.title = title; this.description = description; this.field1 = field1; this.field2 = field2; this.field3 = field3; this.field4 = field4; this.isChapter = isChapter; this.link = link; this.openInWebView = openInWebView; } function shuffle(a) { var j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; a[i] = a[j]; a[j] = x; } return a; } function checkTime() { var now = new Date(); var hour = now.getHours(); var minute = now.getMinutes(); var second = now.getSeconds(); var time = hour + ':' + minute; return time; } function getDaysInMonth(month, year) { return new Date(year, month, 0).getDate(); } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); let emptyKeyValue = [new KeyValue('', '')]; let emptyKeyValue1 = [new KeyValue('X-Requested-With', 'XMLHttpRequest')]; let output = parsedJson.output; var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); var json = JSON.parse(script).html; var nextRequest = ''; var schedule = []; var htmldom = new DOMParser().parseFromString(json, 'text/html'); var content = htmldom.querySelectorAll('li'); var actualtime = checkTime(); for (anime of content) { var link = 'https://aniwatch.to' + anime.querySelector('a').getAttribute('href'); link = new ModuleRequest(link, 'get', emptyKeyValue, null); var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null); var episode = anime.querySelector('.fd-play').innerText.trim(); var time = anime.querySelector('.time').innerText.trim(); if ((parseInt(time.split(':')[0]) > parseInt(actualtime.split(':')[0])) || ((parseInt(time.split(':')[0]) == parseInt(actualtime.split(':')[0])) && (parseInt(time.split(':')[1]) > parseInt(actualtime.split(':')[1])))) { console.log('not aired yet'); var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode; schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false)); } } var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0); if (schedule.length == 0) { var date = new Date(); var year = date.getFullYear(); var day = date.getDate(); var month = date.getMonth() + 1; var daysinmonth = getDaysInMonth(month, year); var timezoneOffset = date.getTimezoneOffset(); if (month < 10) { month = '0' + month; } var nextDay = day + 1; if (nextDay > daysinmonth) { nextDay = '01'; month = month + 1; if (month > 12) { month = '01'; year = year + 1; } }else{ nextDay = day + 1; }; if (nextDay < 10) { nextDay = ''+'0' + nextDay } ;var nextRequest = `https://aniwatch.to/ajax/schedule/list?tzOffset=${timezoneOffset}&date=${year}-${month}-${nextDay}`; } else { output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Today', true), testLayout, schedule)); } let MainPageObject = new MainPage(new ModuleRequest(nextRequest, 'get', emptyKeyValue1, null), new Extra([ new Commands('', emptyKeyValue) ], emptyKeyValue), new JavascriptConfig(true, false, ''), output); var finalJson = JSON.stringify(MainPageObject); savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "",
+ "method": "",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdEeUzalXOKrstKukdZpWP": {
+ "path": "rzamQ",
+ "id": "mainPage,1cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }, {
+ "request": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = { ultraWideFull: 'ultraWideFull', ultraWide: 'ultraWide', wideFull: 'wideFull', wide: 'wide', wideStrechedFull: 'wideStrechedFull', wideStrechedFullDouble: 'WideStrechedFullDouble', wideStreched: 'wideStreched', wideStrechedDouble: 'wideStrechedDouble', wideStrechedFullList: 'wideStrechedFullList', wideStrechedList: 'wideStrechedList', doublets: 'doublets', doubletsDouble: 'doubletsDouble', doubletsFull: 'doubletsFull', doubletsFullDouble: 'doubletsFullDouble', doubletsConstant: 'doubletsConstant', doubletsDoubleConstant: 'doubletsDoubleConstant', doubletsFullConstant: 'doubletsFullConstant', doubletsFullDoubleConstant: 'doubletsFullDoubleConstant', longDoublets: 'longDoublets', longDoubletsDouble: 'longDoubletsDouble', longDoubletsFull: 'longDoubletsFull', longDoubletsFullDouble: 'longDoubletsFullDouble', longDoubletsConstant: 'longDoubletsConstant', longDoubletsDoubleConstant: 'longDoubletsDoubleConstant', longDoubletsFullConstant: 'longDoubletsFullConstant', longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant', triplets: 'triplets', tripletsDouble: 'tripletsDouble', tripletsFull: 'tripletsFull', tripletsFullDouble: 'tripletsFullDouble', tripletsConstant: 'tripletsConstant', tripletsDoubleConstant: 'tripletsDoubleConstant', tripletsFullConstant: 'tripletsFullConstant', tripletsFullDoubleConstant: 'tripletsFullDoubleConstant', longTriplets: 'longTriplets', longTripletsDouble: 'longTripletsDouble', longTripletsFull: 'longTripletsFull', longTripletsFullDouble: 'longTripletsFullDouble', longTripletsConstant: 'longTripletsConstant', longTripletsDoubleConstant: 'longTripletsDoubleConstant', longTripletsFullConstant: 'longTripletsFullConstant', longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant', none: ''};const CellDesings = { Special1: 'Special1', Special2: 'Special2', Special3: 'Special3', CELLHelperText: 'CELLHelperText', small1: 'small1', small2: 'small2', normal1: 'normal1', normal2: 'normal2', normal3: 'normal3', normal4: 'normal4', normal5: 'normal5', normal6: 'normal6', normal7: 'normal7', wide1: 'wide1', wide2: 'wide2', wide3: 'wide3', wide4: 'wide4', wide5: 'wide5', wide6: 'wide6', wide7: 'wide7', wide8: 'wide8', wide9: 'wide9', wide10: 'wide10', wide11: 'wide11'};const Paging = { leading: 'leading', centered: 'centered', none: ''};const Orientation = { horizontal: 'horizontal', vertical: 'vertical'};function MainPage(request, extra, javascriptConfig, output) { this.request = request; this.extra = extra; this.javascriptConfig = javascriptConfig; this.output = output;}function ModuleRequest(url, method, headers, httpBody) { this.url = url; this.method = method; this.headers = headers; this.httpBody = httpBody;}function Extra(commands, extraInfo) { this.commands = commands; this.extraInfo = extraInfo;}function Commands(commandName, params) { this.commandName = commandName; this.params = params;}function JavascriptConfig(removeJavascript, loadInWebView, javaScript) { this.removeJavascript = removeJavascript; this.loadInWebView = loadInWebView; this.javaScript = javaScript;}function KeyValue(key, value) { this.key = key; this.value = value;}function Output(cellDesing, orientation, defaultLayout, paging, section, layout, data) { this.cellDesing = cellDesing; this.orientation = orientation; this.defaultLayout = defaultLayout; this.paging = paging; this.section = section; this.layout = layout; this.data = data;}function Section(sectionName, separator) { this.sectionName = sectionName; this.separator = separator;}function Layout(insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing) { this.insets = insets; this.visibleCellsWidthS = visibleCellsWidthS; this.visibleCellsWidthM = visibleCellsWidthM; this.visibleCellsWidthL = visibleCellsWidthL; this.visibleCellsHeight = visibleCellsHeight; this.heightForVisibleCells = heightForVisibleCells; this.cellSize = cellSize; this.ratio = ratio; this.constant = constant; this.horizontalSpacing = horizontalSpacing; this.verticalSpacing = verticalSpacing;}function Insets(top, bottom, left, right) { this.top = top; this.bottom = bottom; this.left = left; this.right = right;}function Size(width, height) { this.width = width; this.height = height;}function Ratio(inRelation, number1, number2) { this.inRelation = inRelation; this.number1 = number1; this.number2 = number2;}function Data(image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView) { this.image = image; this.title = title; this.description = description; this.field1 = field1; this.field2 = field2; this.field3 = field3; this.field4 = field4; this.isChapter = isChapter; this.link = link; this.openInWebView = openInWebView;}function shuffle(a) { var j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; a[i] = a[j]; a[j] = x; } return a;}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);let emptyKeyValue = [new KeyValue('', '')]; let emptyKeyValue1 = [new KeyValue('X-Requested-With', 'XMLHttpRequest')]; let output = parsedJson.output;var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', '');var json = JSON.parse(script).html;var schedule = [];var htmldom = new DOMParser().parseFromString(json, 'text/html');var content = htmldom.querySelectorAll('li');for (anime of content) { var link = 'https://aniwatch.to' + anime.querySelector('a').getAttribute('href'); link = new ModuleRequest(link, 'get', emptyKeyValue, null); var dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null); var episode = anime.querySelector('.fd-play').innerText.trim(); var time = anime.querySelector('.time').innerText.trim(); var title = time + ' - ' + anime.querySelector('h3').innerText.trim() + ' ' + episode; schedule.push(new Data(dummyQuest, title, '', '', '', '', '', false, link, false));}var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 6, 300, new Size(0, 0), null, new Size(0, 0), 0, 0);output.push(new Output(CellDesings.small2, Orientation.vertical, DefaultLayouts.none, Paging.leading, new Section('Airs Tomorrow', true), testLayout, schedule));let MainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);var finalJson = JSON.stringify(MainPageObject);savedData.innerHTML = finalJson; /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "",
+ "method": "",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdYuYvSXXjQfxkgwEWDebd": {
+ "path": "MrlhA",
+ "id": "mainPage,2cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "search": [{
+ "request": {
+ "url": "https://aniwatch.to/search?keyword=&page=",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "separator": "%20",
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n};\nconst CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n};\nconst Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n};\nconst Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\nfunction Search ( request, extra, separator, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.separator = separator;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n}\n\nfunction ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n}\n\nfunction Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n}\n\nfunction Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n}\n\nfunction JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n}\n\nfunction KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n}\n\nfunction Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n}\n\nfunction Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n}\n\nfunction Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n}\n\nfunction Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n}\n\nfunction Size ( width, height ) {\n this.width = width;\n this.height = height;\n}\n\nfunction Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n}\n\nfunction Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction quickData ( link, image, title, field1 ) {\n return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link, false );\n}\n\nfunction shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = [ ];\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet nextRequest = '';\nlet searchArray = [ ];\nif ( !parsedJson.request.url.split( 'keyword=' )[ 1 ].includes( 'random' ) ) {\n let shorts = document.querySelectorAll( '.film_list-wrap .flw-item' );\n for ( let short of shorts ) {\n let image = short.querySelector( 'img' ).dataset.src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let title = short.querySelector( 'img' ).alt;\n let nbEp = '';\n let nbEpDub = '';\n if (short.querySelector( '.tick-item.tick-eps' ) != null) {\n nbEpDub = short.querySelector( '.tick-item.tick-eps' ).textContent.trim();\n }\n if(short.querySelector( '.tick-item.tick-sub' ) != null){\n nbEp = short.querySelector( '.tick-item.tick-sub' ).textContent.trim();\n }\n let type = '';\n let field1 = '';\n if (nbEpDub != '') {\n field1 = nbEp + ' subbed episodes | ' + nbEpDub + ' dubbed episodes';\n type = 'SUB/DUB'\n } else if(nbEpDub == '') {\n field1 = nbEp;\n if(parseInt(nbEp) > 1 ){\n field1 += ' episodes'\n } else {\n field1 += ' episode';\n }\n type = 'SUB'\n } else {\n field1 = nbEpDub;\n if(parseInt(nbEpDub) > 1 ){\n field1 += ' Episodes'\n } else {\n field1 += ' Episode';\n }\n type = 'DUB'\n }\n let link = 'https://aniwatch.to/' + short.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n searchArray.push( new Data( image, title,field1 + ' ' + type , '', type, '', '', false, link ) );\n }\n var testLayout = new Layout( new Insets( 10, 10, 10, 10 ), 1, 2, 3, 1, 500, new Size( 400, 400 ), new Ratio( 'width', 4, 11 ), new Size( 0, 0 ), 10, 10 );\n output.push( new Output( CellDesings.wide8, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', true ), testLayout, searchArray ) );\n} else {\n nextRequest = 'https://aniwatch.to/random';\n}\nlet searchPageObject = new Search( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), '', new JavascriptConfig( true, false, '' ), output );\nvar finalJson = JSON.stringify( searchPageObject );\nsavedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdZMfmBQNHwOWXVUqQQHeN": {
+ "path": "bgsng",
+ "id": "search,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedRequestMenu": "Headers",
+ "openedMenu": "Javascript",
+ "javascriptEditorScroll": 232
+ }
+ }, {
+ "request": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "separator": "%20",
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ const DefaultLayouts = {\n ultraWideFull: 'ultraWideFull',\n ultraWide: 'ultraWide',\n wideFull: 'wideFull',\n wide: 'wide',\n wideStrechedFull: 'wideStrechedFull',\n wideStrechedFullDouble: 'WideStrechedFullDouble',\n wideStreched: 'wideStreched',\n wideStrechedDouble: 'wideStrechedDouble',\n wideStrechedFullList: 'wideStrechedFullList',\n wideStrechedList: 'wideStrechedList',\n doublets: 'doublets',\n doubletsDouble: 'doubletsDouble',\n doubletsFull: 'doubletsFull',\n doubletsFullDouble: 'doubletsFullDouble',\n doubletsConstant: 'doubletsConstant',\n doubletsDoubleConstant: 'doubletsDoubleConstant',\n doubletsFullConstant: 'doubletsFullConstant',\n doubletsFullDoubleConstant: 'doubletsFullDoubleConstant',\n longDoublets: 'longDoublets',\n longDoubletsDouble: 'longDoubletsDouble',\n longDoubletsFull: 'longDoubletsFull',\n longDoubletsFullDouble: 'longDoubletsFullDouble',\n longDoubletsConstant: 'longDoubletsConstant',\n longDoubletsDoubleConstant: 'longDoubletsDoubleConstant',\n longDoubletsFullConstant: 'longDoubletsFullConstant',\n longDoubletsFullDoubleConstant: 'longDoubletsFullDoubleConstant',\n triplets: 'triplets',\n tripletsDouble: 'tripletsDouble',\n tripletsFull: 'tripletsFull',\n tripletsFullDouble: 'tripletsFullDouble',\n tripletsConstant: 'tripletsConstant',\n tripletsDoubleConstant: 'tripletsDoubleConstant',\n tripletsFullConstant: 'tripletsFullConstant',\n tripletsFullDoubleConstant: 'tripletsFullDoubleConstant',\n longTriplets: 'longTriplets',\n longTripletsDouble: 'longTripletsDouble',\n longTripletsFull: 'longTripletsFull',\n longTripletsFullDouble: 'longTripletsFullDouble',\n longTripletsConstant: 'longTripletsConstant',\n longTripletsDoubleConstant: 'longTripletsDoubleConstant',\n longTripletsFullConstant: 'longTripletsFullConstant',\n longTripletsFullDoubleConstant: 'longTripletsFullDoubleConstant',\n none: ''\n };\n const CellDesings = {\n Special1: 'Special1',\n Special2: 'Special2',\n Special3: 'Special3',\n CELLHelperText: 'CELLHelperText',\n small1: 'small1',\n small2: 'small2',\n normal1: 'normal1',\n normal2: 'normal2',\n normal3: 'normal3',\n normal4: 'normal4',\n normal5: 'normal5',\n normal6: 'normal6',\n normal7: 'normal7',\n wide1: 'wide1',\n wide2: 'wide2',\n wide3: 'wide3',\n wide4: 'wide4',\n wide5: 'wide5',\n wide6: 'wide6',\n wide7: 'wide7',\n wide8: 'wide8',\n wide9: 'wide9',\n wide10: 'wide10',\n wide11: 'wide11'\n };\n const Paging = {\n leading: 'leading',\n centered: 'centered',\n none: ''\n };\n const Orientation = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n };\n\n function Search ( request, extra, separator, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.separator = separator;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( cellDesing, orientation, defaultLayout, paging, section, layout, data ) {\n this.cellDesing = cellDesing;\n this.orientation = orientation;\n this.defaultLayout = defaultLayout;\n this.paging = paging;\n this.section = section;\n this.layout = layout;\n this.data = data;\n }\n\n function Section ( sectionName, separator ) {\n this.sectionName = sectionName;\n this.separator = separator;\n }\n\n function Layout ( insets, visibleCellsWidthS, visibleCellsWidthM, visibleCellsWidthL, visibleCellsHeight, heightForVisibleCells, cellSize, ratio, constant, horizontalSpacing, verticalSpacing ) {\n this.insets = insets;\n this.visibleCellsWidthS = visibleCellsWidthS;\n this.visibleCellsWidthM = visibleCellsWidthM;\n this.visibleCellsWidthL = visibleCellsWidthL;\n this.visibleCellsHeight = visibleCellsHeight;\n this.heightForVisibleCells = heightForVisibleCells;\n this.cellSize = cellSize;\n this.ratio = ratio;\n this.constant = constant;\n this.horizontalSpacing = horizontalSpacing;\n this.verticalSpacing = verticalSpacing;\n }\n\n function Insets ( top, bottom, left, right ) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n }\n\n function Size ( width, height ) {\n this.width = width;\n this.height = height;\n }\n\n function Ratio ( inRelation, number1, number2 ) {\n this.inRelation = inRelation;\n this.number1 = number1;\n this.number2 = number2;\n }\n\n function Data ( image, title, description, field1, field2, field3, field4, isChapter, link, openInWebView ) {\n this.image = image;\n this.title = title;\n this.description = description;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.isChapter = isChapter;\n this.link = link;\n this.openInWebView = openInWebView;\n }\n\n function quickData ( link, image, title, field1 ) {\n return new Data( image, title, 'unknown', field1, 'unknown', 'unknown', 'unknown', false, link );\n }\n\n function shuffle ( a ) {\n var j, x, i;\n for ( i = a.length - 1; i > 0; i-- ) {\n j = Math.floor( Math.random( ) * ( i + 1 ) );\n x = a[ i ];\n a[ i ] = a[ j ];\n a[ j ] = x;\n }\n return a;\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n let output = [ ];\n let emptyKeyValue = [ new KeyValue( '', '' ) ];\n var anime = [ ];\n var image = document.querySelector( '.film-poster img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n if ( document.querySelector( '.anisc-detail h2' ).textContent != document.querySelector( '.anisc-detail h2' ).dataset.jname ) {\n var title = document.querySelector( '.anisc-detail h2' ).textContent + '/' + document.querySelector( '.anisc-detail h2' ).dataset.jname\n } else {\n var title = document.querySelector( '.anisc-detail h2' ).dataset.jname\n };\n var desc = '';\n try {\n desc = document.querySelector( '.text' ).innerText.replaceAll( '\\n', ' ' ).trim( ).replaceAll( '\\n', ' ' ).trim( );\n } catch {\n desc = document.querySelector( '.text' ).innerText.trim( );\n }\n var link = 'https://aniwatch.to/' + document.querySelector( '.btn.btn-radius.btn-primary.btn-play' ).href.replace( '/watch/', '' );\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n try {\n var field1 = document.querySelector( '#ani_detail > div > div > div.anis-content > div.anisc-detail > div.film-stats' ).innerText.trim( ).replaceAll( '\\n', ' ' )\n } catch ( e ) {\n var field1 = document.querySelector( '#ani_detail > div > div > div.anis-content > div.anisc-detail > div.film-stats' ).innerText.trim( )\n };\n if ( field1.includes( 'TV' ) ) {\n var field2 = 'TV';\n } else if ( field1.includes( 'Movie' ) ) {\n var field2 = 'Movie'\n } else {\n var field2 = 'Unknown'\n };\n anime.push( new Data( image, title, desc, field1, field2, '', '', false, link, false ) );\n output.push( new Output( CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section( '', true ), null, anime ) );;\n let searchPageObject = new Search( new ModuleRequest( '', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), '', new JavascriptConfig( true, false, '' ), output );\n var finalJson = JSON.stringify( searchPageObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": [{
+ "cellDesing": "normal1",
+ "orientation": "vertical",
+ "defaultLayout": "wide",
+ "paging": "",
+ "section": {
+ "sectionName": "",
+ "separator": false
+ },
+ "layout": {
+ "insets": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "visibleCellsWidthS": 2,
+ "visibleCellsWidthM": 2,
+ "visibleCellsWidthL": 2,
+ "visibleCellsHeight": 2,
+ "heightForVisibleCells": 400,
+ "cellSize": {
+ "width": 300,
+ "height": 300
+ },
+ "ratio": {
+ "inRelation": "width",
+ "number1": 1,
+ "number2": 2
+ },
+ "constant": {
+ "width": 1,
+ "height": 2
+ },
+ "horizontalSpacing": 0,
+ "verticalSpacing": 0
+ },
+ "data": [{
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "openInWebView": false,
+ "isChapter": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }],
+ "moduleCreatorIdKzVDRbAVYhFdvJIWMRzu": {
+ "path": "xgalJ",
+ "id": "search,1cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 0
+ }
+ }],
+ "info": [{
+ "request": {
+ "url": "https://aniwatch.to/classroom-for-heroes-18485",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Info ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Chapter ( chapName, link, openInWebView ) {\n this.chapName = chapName;\n this.link = link;\n this.openInWebView = openInWebView;\n }\n\n function Output ( image, title, link, description, genres, field1, field2, field3, field4, chapters ) {\n this.image = image;\n this.link = link;\n this.title = title;\n this.description = description;\n this.genres = genres;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.chapters = chapters;\n }\n var savedData = document.getElementById( 'ketsu-final-data' ) || document.body.querySelector('div');\n var parsedJson = JSON.parse( savedData.innerHTML );\n let emptyKeyValue = [ new KeyValue( 'Referer', parsedJson.request.url ), new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\n var airing;\n var status;\n var image = document.querySelector( '.film-poster img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n if ( document.querySelector( '.anisc-detail h2' ).textContent != document.querySelector( '.anisc-detail h2' ).dataset.jname ) {\n var title = document.querySelector( '.anisc-detail h2' ).textContent + '/' + document.querySelector( '.anisc-detail h2' ).dataset.jname\n } else {\n var title = document.querySelector( '.anisc-detail h2' ).dataset.jname\n };\n var desc = '';\n try {\n desc = document.querySelector( 'div.anis-content > div.anisc-detail > div.film-depion.m-hide > div' ).textContent.trim( );\n } catch ( e ) {\n desc = document.querySelector( '.anisc-info' ).textContent.trim( );\n }\n var animeinfo = document.querySelector( 'div.anisc-info-wrap > div.anisc-info' );\n for ( var x = 0; x < animeinfo.children.length; x++ ) {\n if ( animeinfo.children[ x ].textContent.trim( ).includes( 'Status' ) ) {\n var status = animeinfo.children[ x ].textContent.split( 'Status:' )[ 1 ].trim( );\n } else if ( animeinfo.children[ x ].textContent.trim( ).includes( 'Aired' ) ) {\n var airing = animeinfo.children[ x ].textContent.split( 'Aired:' )[ 1 ].trim( );\n }\n }\n var genres = Array.from( document.querySelectorAll( '.item.item-list a' ) ).map( g => g.textContent );\n var type = 'Anime';\n var episodes = [ ];\n var json = document.querySelector( '#wrapper' ).dataset.id;\n var nextRequest = `https://aniwatch.to/ajax/v2/episode/list/${json}`;\n let infoPageObject = new Info( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( false, false, '' ), new Output( image, title, parsedJson.request, desc, genres, status, airing, type, 'Eps: ' + episodes.length, episodes ) );\n var finalJson = JSON.stringify( infoPageObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "genres": [""],
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "chapters": [{
+ "chapName": "",
+ "openInWebView": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdBtXsgUTzQtrjucgCwhKf": {
+ "path": "wKPvZ",
+ "id": "info,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Javascript",
+ "javascriptEditorScroll": 73
+ }
+ }, {
+ "request": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Info ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Chapter ( chapName, link, openInWebView ) {\n this.chapName = chapName;\n this.link = link;\n this.openInWebView = openInWebView;\n }\n\n function Output ( image, title, link, description, genres, field1, field2, field3, field4, chapters ) {\n this.image = image;\n this.link = link;\n this.title = title;\n this.description = description;\n this.genres = genres;\n this.field1 = field1;\n this.field2 = field2;\n this.field3 = field3;\n this.field4 = field4;\n this.chapters = chapters;\n }\n var savedData = document.getElementById( 'ketsu-final-data' ) || document.body.querySelector('div');\n var parsedJson = JSON.parse( savedData.innerText );\n let emptyKeyValue = [ new KeyValue( 'Referer', 'https://aniwatch.to' ), new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\n var image = parsedJson.output.image;\n var title = parsedJson.output.title;\n var desc = parsedJson.output.description;\n var genres = parsedJson.output.genres;\n var type = '';\n var episodes = [ ];\n var script = document.querySelector( 'script' ).innerText.replace( '*/', '' ).replace( '/*', '' );\n var html = JSON.parse( script ).html;\n var parser = new DOMParser( );\n var doc = parser.parseFromString( html, 'text/html' );\n var animes = doc.querySelectorAll( '.ss-list a' );\n for ( var x = 0; x < animes.length; x++ ) {\n var anime = animes[ x ];\n var link = 'https://aniwatch.to/ajax/v2/episode/servers?episodeId=' + anime.dataset.id;\n var name = anime.title;\n if ( !name.includes( 'Episode' ) ) {\n name = `${x+1} : ` + name;\n }\n let chapter = new Chapter( name, new ModuleRequest( link, 'get', emptyKeyValue, null ), false );\n episodes.push( chapter );\n }\n parsedJson.request.url = parsedJson.output.link.url;\n parsedJson.request.headers = [ new KeyValue( '', '' ) ];\n let infoPageObject = new Info( new ModuleRequest( '', '', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( false, false, '' ), new Output( image, title, parsedJson.request, desc, genres, parsedJson.output.field1, parsedJson.output.field2, type, 'Eps: ' + episodes.length, episodes ) );\n var finalJson = JSON.stringify( infoPageObject );\n savedData.innerText = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "image": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "",
+ "value": ""
+ }],
+ "httpBody": null
+ },
+ "title": "",
+ "description": "",
+ "genres": [""],
+ "field1": "",
+ "field2": "",
+ "field3": "",
+ "field4": "",
+ "chapters": [{
+ "chapName": "",
+ "openInWebView": false,
+ "link": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdVfFgzzOkPmGlLojnLBWZ": {
+ "path": "FXVvF",
+ "id": "info,1cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 73,
+ "openedMenu": "Javascript"
+ }
+ }],
+ "chapters": [{
+ "request": {
+ "url": "https://aniwatch.to/ajax/v2/episode/servers?episodeId=103008",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Chapters ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( videos, images, text ) {\n this.videos = videos;\n this.images = images;\n this.text = text;\n }\n\n function Videos ( needsResolver, rawVideo ) {\n this.needsResolver = needsResolver;\n this.rawVideo = rawVideo;\n }\n\n function NeedsResolver ( resolverIdentifier, link ) {\n this.resolverIdentifier = resolverIdentifier;\n this.link = link;\n }\n\n function RawVideo ( video ) {\n this.video = video;\n }\n\n function Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n var extraInfo = parsedJson.extra.extraInfo;\n var emptyKeyValue = [ new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\n var output = [ ];\n const script = document.querySelector( 'script' ).innerHTML.replace( '/*', '' ).replace( '*/', '' );\n const data = JSON.parse( script );\n const html = data.html;\n const htmlObject = document.createElement( 'div' );\n htmlObject.innerHTML = html;\n document.body.appendChild( htmlObject );\n var extraInfo = [ new KeyValue( 'count', '0' ) ];\n var links = document.querySelectorAll( '.item.server-item' );\n for ( var x = 0; x < links.length; x++ ) {\n var link = links[ x ];\n var id = link.dataset.id;\n var lang = link.dataset.type;\n var url = 'https://aniwatch.to/ajax/v2/episode/sources?id=' + id + '&lang=' + lang;\n if ( x == 0 ) {\n var nextRequest = url\n } else {\n extraInfo.push( new KeyValue( `${x}`, `${url}` ) );\n }\n console.log( url );\n }\n let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo );\n var chaptersObject = new Chapters( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( new Videos( [ ], [ ] ), null, null ) );\n var finalJson = JSON.stringify( chaptersObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "videos": {
+ "needsResolver": [{
+ "resolverIdentifier": "",
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }],
+ "rawVideo": [{
+ "video": [{
+ "videoQuality": "",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }]
+ },
+ "images": [{
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }],
+ "text": {
+ "text": ""
+ }
+ },
+ "moduleCreatorIdAcLPCPhyMLVrzKJkKJpm": {
+ "path": "vcHHY",
+ "id": "chapters,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 70,
+ "openedMenu": "Request"
+ }
+ }, {
+ "request": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Chapters ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( videos, images, text ) {\n this.videos = videos;\n this.images = images;\n this.text = text;\n }\n\n function Videos ( needsResolver, rawVideo ) {\n this.needsResolver = needsResolver;\n this.rawVideo = rawVideo;\n }\n\n function NeedsResolver ( resolverIdentifier, link ) {\n this.resolverIdentifier = resolverIdentifier;\n this.link = link;\n }\n\n function RawVideo ( video ) {\n this.video = video;\n }\n\n function Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n\n function getValueFromKey ( keys, key ) {\n for ( var x = 0; x < keys.length; x++ ) {\n let tKey = keys[ x ];\n if ( tKey.key == key ) {\n return tKey.value;\n }\n }\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n var extraInfo = parsedJson.extra.extraInfo;\n var emptyKeyValue = [ new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\n var emptyHeader = [ new KeyValue( 'Referer', 'https://aniwatch.to' ) ];\n var output = parsedJson.output.videos;;\n var actualCount = getValueFromKey( extraInfo, 'count' );\n var nextCount = parseInt( actualCount.match( /\\d+/g )[ 0 ] ) + 1;\n var nextRequest = getValueFromKey( extraInfo, nextCount );\n if ( actualCount == 0 ) {\n output = new Videos( [ ], [ ] );\n }\n const script = document.querySelector( 'script' ).innerHTML.replace( '/*', '' ).replace( '*/', '' );\n const data = JSON.parse( script );\n data.link = data.link.replace( '?vast=1', '' );\n if ( data.link.includes( 'streamtape.com' ) ) {\n var fixedLink = data.link.replace( 'https://streamtape.com/', 'https://streamta.pe/' );\n if ( parsedJson.request.url.includes( 'lang=dub' ) ) {\n output.needsResolver.push( new NeedsResolver( 'STREAMTA DUB', new ModuleRequest( fixedLink, 'get', emptyHeader, null ) ) );\n } else {\n output.needsResolver.push( new NeedsResolver( '', new ModuleRequest( fixedLink, 'get', emptyHeader, null ) ) );\n }\n }\n if ( parsedJson.request.url.includes( 'lang=dub' ) && !data.link.includes( 'streamtape.com' ) ) {\n resolver = data.link.split( '/' )[ 2 ].split( '.' )[ 0 ].toUpperCase( );\n output.needsResolver.push( new NeedsResolver( resolver + ' DUB', new ModuleRequest( data.link, 'get', emptyHeader, null ) ) );\n } else if ( data.link.includes( 'streamtape' ) ) {} else {\n output.needsResolver.push( new NeedsResolver( '', new ModuleRequest( data.link, 'get', emptyHeader, null ) ) );\n }\n extraInfo[ 0 ].value = '' + ( parseInt( actualCount ) + 1 );\n if ( nextRequest == undefined ) {\n nextRequest = '';\n }\n let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo );\n var chaptersObject = new Chapters( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( output, null, null ) );\n var finalJson = JSON.stringify( chaptersObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "videos": {
+ "needsResolver": [{
+ "resolverIdentifier": "",
+ "link": {
+ "url": "",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }],
+ "rawVideo": [{
+ "video": [{
+ "videoQuality": "",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ }]
+ },
+ "images": [{
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }],
+ "text": {
+ "text": ""
+ }
+ },
+ "moduleCreatorIdgtjcFnmqqwPJxDmMzrou": {
+ "path": "MbxvY",
+ "id": "chapters,1cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 106,
+ "openedMenu": "Javascript"
+ }
+ }],
+ "moduleResolvers": [{
+ "resolverInfo": {
+ "resolverName": "STREAMTA",
+ "nameMatches": ["STREAMTA", "STREAMTA DUB"],
+ "developer": "ナビル",
+ "moduleID": "8465132120",
+ "resolverVersion": 1.6,
+ "baseURL": "",
+ "moduleCreatorIdzSxRyOiacvfQfzGRfFWr": {
+ "path": "VDQem",
+ "id": "moduleResolvers,0,resolverInfosection",
+ "sectionsHidden": ["moduleCreatorIdyxClljcKHDoKwwLfMAXh"],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdjvdcuVFPbQzmLlntwbrL": {
+ "path": "THtBv",
+ "id": "moduleResolvers,0,resolverInfocell",
+ "sectionsHidden": ["moduleCreatorIdyxClljcKHDoKwwLfMAXh"],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( video ) {\n this.video = video;\n }\n\n function Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n\n function getNext ( match, array ) {\n for ( var x = 0; x < array.length; x++ ) {\n let mMatch = array[ x ];\n if ( mMatch.includes( match ) ) {\n return array[ x + 1 ];\n }\n }\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n var emptyKeyValue = [ new KeyValue( 'Referer', parsedJson.request.url ) ];\n var videos = [ ];\n let playerRegex = /innerHTML\\s=\\s*\"([^\"]+)\"\\s?\\+\\s?''\\+\\s?\\('([^']+)/;\n let body = document.body.innerText;\n let playerMatch = playerRegex.exec( body );\n if ( playerMatch ) {\n let matchedLink = playerMatch[ 2 ];\n let index = matchedLink.indexOf( '?' );\n if ( index == -1 ) {\n try {\n firstpart = playerMatch[ 1 ].split( '=' )[ 1 ].replace( '\"', '' );\n secondpart = playerMatch[ 2 ].substr( 5 );\n secondtry = playerMatch[ 2 ].substr( 4 );\n let videoLink = 'https://streamta.pe/get_video?id=' + firstpart + secondpart + '&stream=1';\n let fixedLink = 'https://streamta.pe/get_video?id=' + firstpart + secondtry + '&stream=1';\n console.log( videoLink, fixedLink );\n videos.push( new Video( 'THAI GUY WAS HERE', new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ) ) );\n videos.push( new Video( 'Normal', new ModuleRequest( videoLink, 'get', emptyKeyValue, null ) ) );\n } catch ( e ) {}\n try {\n if ( matchedLink.match( /^=/ ) ) {\n let videoLink = 'https://streamta.pe/get_video?id=' + matchedLink.substr( 5 ) + '&stream=1';\n if ( videoLink.includes( 'id==' ) ) {\n videoLink = videoLink.replace( 'id==', 'id=' );\n }\n console.log( videoLink );\n videos.push( new Video( 'Normal', new ModuleRequest( videoLink, 'get', emptyKeyValue, null ) ) );\n }\n } catch ( e ) {}\n try {\n if ( matchedLink.match( /id=/ ) ) {\n split = matchedLink.split( 'id=' );\n let videoLink = 'https://streamta.pe/get_video?id=' + split[ 1 ] + '&stream=1';\n console.log( videoLink );\n videos.push( new Video( 'Normal', new ModuleRequest( videoLink, 'get', emptyKeyValue, null ) ) );\n }\n } catch ( e ) {}\n try {\n if ( matchedLink.match( /^([a-zA-Z]+d=)/ ) ) {\n split = matchedLink.split( 'd=' );\n let videoLink = 'https://streamta.pe/get_video?id=' + split[ 1 ] + '&stream=1';\n console.log( videoLink );\n videos.push( new Video( 'Normal', new ModuleRequest( videoLink, 'get', emptyKeyValue, null ) ) );\n }\n } catch ( e ) {}\n } else {\n let videoLink = `https://streamta.pe/get_video${matchedLink.substr(index)}&stream=1`;\n console.log( videoLink );\n videos.push( new Video( 'Normal', new ModuleRequest( videoLink, 'get', emptyKeyValue, null ) ) );\n }\n }\n let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue );\n var chaptersObject = new Resolver( new ModuleRequest( '', '', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( videos ) );\n var finalJson = JSON.stringify( chaptersObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "234234823",
+ "video": [{
+ "videoQuality": "720",
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIddQYBQrdsjoafXkbzqoGB": {
+ "path": "cHcMK",
+ "id": "moduleResolvers,0,resolver,0cell",
+ "sectionsHidden": ["moduleCreatorIdyxClljcKHDoKwwLfMAXh"],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 43
+ }
+ }],
+ "moduleCreatorIdyxClljcKHDoKwwLfMAXh": {
+ "path": "OZvQL",
+ "id": "moduleResolvers,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": true
+ },
+ "moduleCreatorIdDwtRTSakDwhxpXQuWTeu": {
+ "path": "resolver",
+ "id": "moduleResolvers,0,resolversection",
+ "sectionsHidden": ["moduleCreatorIdyxClljcKHDoKwwLfMAXh"],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }, {
+ "resolverInfo": {
+ "resolverName": "VidCloud",
+ "nameMatches": ["RAPID-CLOUD", "RAPID-CLOUD DUB", "MEGACLOUD", "MEGACLOUD DUB"],
+ "developer": "ナビル",
+ "moduleID": "rapidcloud",
+ "resolverVersion": 1.08,
+ "baseURL": "https://rapid-cloud.ru/",
+ "moduleCreatorIdMWafgCAtwrbjviOpbjii": {
+ "path": "FTgwj",
+ "id": "moduleResolvers,1,resolverInfosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Parameters",
+ "listName": "parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdZTrVLEjfPfbpMOQBbuxz": {
+ "path": "VBvaT",
+ "id": "moduleResolvers,1,resolverInfocell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "parameters"
+ },
+ "cellsHidden": false
+ }
+ },
+ "resolver": [{
+ "request": {
+ "url": "https://megacloud.tv/embed-2/e-1/juBmKKVsySkF",
+ "method": "get",
+ "headers": [{
+ "key": "Referer",
+ "value": "https://megacloud.tv/embed-2/e-1/juBmKKVsySkF",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": false
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": true,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ var script = document.createElement('script');\nscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js';\ndocument.head.appendChild(script);\nscript.addEventListener('load', function () {\n function Resolver(request, extra, javascriptConfig, output) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest(url, method, headers, httpBody) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra(commands, extraInfo) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands(commandName, params) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig(removeJavascript, loadInWebView, javaScript) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue(key, value) {\n this.key = key;\n this.value = value;\n }\n\n function Output(video, subs) {\n this.video = video;\n this.subs = subs;\n }\n\n function Video(videoQuality, videoLink) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n\n function VideoSub(language, link) {\n this.language = language;\n this.link = link;\n }\n\n function getNext(match, array) {\n for (var x = 0; x < array.length; x++) {\n let mMatch = array[x];\n if (mMatch.includes(match)) {\n return array[x + 1];\n }\n }\n }\n\n function getValueFromKey(keys, key) {\n for (var x = 0; x < keys.length; x++) {\n let tKey = keys[x];\n if (tKey.key == key) {\n return tKey.value;\n }\n }\n }\n\n function getFile(url) {\n var request = new XMLHttpRequest();\n request.open('GET', url, false);\n request.send(null);\n if (request.status === 200) {\n return request.responseText;\n } else {\n return null;\n }\n }\n\n function extractAndConcatenateString(originalString, stops) {\n let decryptedKey = '';\n let offset = 0;\n let encryptedString = originalString\n \n for (const i in stops) {\n const start = stops[i][0];\n const end = stops[i][1];\n decryptedKey += encryptedString.slice(\n start - offset,\n end - offset\n )\n \n encryptedString = encryptedString.slice(0, start - offset) + encryptedString.slice(end - offset);\n offset += end - start;\n }\n \n return {\n dec_key: decryptedKey,\n enc_string: encryptedString\n }\n }\n\n var savedData = document.getElementById('ketsu-final-data');\n var parsedJson = JSON.parse(savedData.innerHTML);\n var emptyKeyValue = [new KeyValue('Referer', window.location.href)];\n var videos = [];\n let subs = [];\n var extraInfo = [];\n let id = window.location.href.split('/')[5].split('?')[0];\n let url = 'https://megacloud.tv/embed-2/ajax/e-1/getSources?id=' + id;\n let json = JSON.parse(getFile(url));\n let key;\n if (json.encrypted) {\n let data = json.sources;\n let enc_key = JSON.parse(getFile(\"https://raw.githubusercontent.com/enimax-anime/key/e6/key.txt\"));\n \n try {\n console.log(data)\n console.log(enc_key)\n key = extractAndConcatenateString(data, enc_key);\n } catch(e){\n console.log(e);\n }\n console.log(key);\n let decrypted = CryptoJS.AES.decrypt(key.enc_string, key.dec_key).toString(CryptoJS.enc.Utf8);\n let videoLink = JSON.parse(decrypted)[0].file;\n var nextRequest = videoLink;\n var substracks = json.tracks;\n if (substracks == undefined) {\n substracks = '';\n } else {\n for (let x = 0; x < substracks.length; x++) {\n let sub = substracks[x];\n let sublink = sub.file;\n sublink = new ModuleRequest(sublink, 'get', emptyKeyValue, null);\n let sublang = sub.label;\n let subobj = new VideoSub(sublang, sublink);\n subs.push(subobj);\n }\n for (let y = 0; y < subs.length; y++) {\n let string = JSON.stringify(subs[y]);\n let keyvalue = new KeyValue(`${y+1}`, `${string}`);\n extraInfo.push(keyvalue);\n }\n }\n } else {\n let paramjson = json;\n var nextRequest = paramjson.sources[0].file;\n var substracks = paramjson.tracks;\n if (substracks == undefined) {\n substracks = '';\n } else {\n for (var x = 0; x < substracks.length; x++) {\n var sub = substracks[x];\n var sublink = sub.file;\n sublink = new ModuleRequest(sublink, 'get', emptyKeyValue, null);\n var sublang = sub.label;\n var subobj = new VideoSub(sublang, sublink);\n subs.push(subobj);\n }\n for (var y = 0; y < subs.length; y++) {\n var string = JSON.stringify(subs[y]);\n var keyvalue = new KeyValue(`${y+1}`, `${string}`);\n extraInfo.push(keyvalue);\n }\n }\n }\n let emptyExtra = new Extra([new Commands('', emptyKeyValue)], extraInfo);\n var chaptersObject = new Resolver(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(videos));\n var finalJson = JSON.stringify(chaptersObject);\n console.log(finalJson);\n savedData.innerHTML = finalJson;\n}) /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoSubs": [{
+ "language": "",
+ "link": ""
+ }],
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdNmRiTmTdLWPAEVpkGJcN": {
+ "path": "pvhcS",
+ "id": "moduleResolvers,1,resolver,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 127,
+ "openedMenu": "Javascript"
+ }
+ }, {
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": false,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ function Resolver ( request, extra, javascriptConfig, output ) {\n this.request = request;\n this.extra = extra;\n this.javascriptConfig = javascriptConfig;\n this.output = output;\n }\n\n function ModuleRequest ( url, method, headers, httpBody ) {\n this.url = url;\n this.method = method;\n this.headers = headers;\n this.httpBody = httpBody;\n }\n\n function Extra ( commands, extraInfo ) {\n this.commands = commands;\n this.extraInfo = extraInfo;\n }\n\n function Commands ( commandName, params ) {\n this.commandName = commandName;\n this.params = params;\n }\n\n function JavascriptConfig ( removeJavascript, loadInWebView, javaScript ) {\n this.removeJavascript = removeJavascript;\n this.loadInWebView = loadInWebView;\n this.javaScript = javaScript;\n }\n\n function KeyValue ( key, value ) {\n this.key = key;\n this.value = value;\n }\n\n function Output ( video, subs ) {\n this.video = video;\n this.subs = subs;\n }\n\n function Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n }\n\n function VideoSub ( language, link ) {\n this.language = language;\n this.link = link;\n }\n\n function getNext ( match, array ) {\n for ( var x = 0; x < array.length; x++ ) {\n let mMatch = array[ x ];\n if ( mMatch.includes( match ) ) {\n return array[ x + 1 ];\n }\n }\n }\n var savedData = document.getElementById( 'ketsu-final-data' );\n var parsedJson = JSON.parse( savedData.innerHTML );\n var emptyKeyValue = [ new KeyValue( 'Referer', 'https://aniwatch.to/watch' ) ];\n var videos = [ ];\n var extraInfo = parsedJson.extra.extraInfo;\n var subs = [ ];\n var body = document.querySelector( 'script' ).innerText.replace( '*/', '' ).replace( '/*', '' );\n var lines = body.split( '\\n' );\n if ( extraInfo.length >= 1 ) {\n for ( var y = 0; y < extraInfo.length; y++ ) {\n var sub = JSON.parse( extraInfo[ y ].value );\n subs.push( sub );\n }\n } else {\n subs = undefined;\n }\n for ( var x = 0; x < lines.length; x++ ) {\n var line = lines[ x ];\n if ( line.includes( 'EXT-X-STREAM-INF:PROGRAM-ID=1' ) ) {\n var videoQuality = line.split( 'RESOLUTION=' )[ 1 ].match( /(\\d)+x+(\\d)+/g )[ 0 ];\n var videoLink = lines[ x + 1 ];\n var fixedLink = parsedJson.request.url.replace( 'master.m3u8', videoLink );\n videos.push( new Video( videoQuality, new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ) ) );\n }\n }\n let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue );\n var chaptersObject = new Resolver( new ModuleRequest( '', 'get', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( videos, subs ) );\n var finalJson = JSON.stringify( chaptersObject );\n savedData.innerHTML = finalJson;\n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "output": {
+ "moduleID": "",
+ "video": [{
+ "videoQuality": "720",
+ "videoSubs": [{
+ "language": "",
+ "link": ""
+ }],
+ "videoLink": {
+ "url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ }
+ }]
+ },
+ "moduleCreatorIdgoIhAoToEslrwnHAaiFa": {
+ "path": "FMRYZ",
+ "id": "moduleResolvers,1,resolver,1cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "openedMenu": "Javascript",
+ "javascriptEditorScroll": 86
+ }
+ }],
+ "moduleCreatorIddAGQjePJomIydfOKMKiE": {
+ "path": "deChS",
+ "id": "moduleResolvers,1section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdQkhEiwSCZPVfpiMFqCyG": {
+ "path": "resolver",
+ "id": "moduleResolvers,1,resolversection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolver Request",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "responseCodeFunctions": [{
+ "code": 0,
+ "msgTitle": "",
+ "msgBody": "",
+ "type": "normal",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value",
+ "moduleCreatorHeaderisActive": true
+ }, {
+ "key": "",
+ "value": "",
+ "moduleCreatorHeaderisActive": true
+ }]
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ \n /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdvDFVLxfXyghHLvscLpdz": {
+ "path": "fRhVY",
+ "id": "responseCodeFunctions,0,functions,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false,
+ "javascriptEditorScroll": 2
+ }
+ }],
+ "moduleCreatorIdRJMUxMvWVQrbnOKtMoFr": {
+ "path": "TznBl",
+ "id": "responseCodeFunctions,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdYokFBafXmbBSZLLsZltl": {
+ "path": "DYWCZ",
+ "id": "responseCodeFunctions,0,section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdhwkGBCMfLMQzpgLJhQHx": {
+ "path": "BFRov",
+ "id": "responseCodeFunctions,0,cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdkzHDzNgRihDYYIjXpOAL": {
+ "path": "functions",
+ "id": "responseCodeFunctions,0,functionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "helperFunctions": [{
+ "functionName": "example",
+ "msgTitle": "",
+ "msgBody": "",
+ "type": "normal",
+ "functions": [{
+ "request": {
+ "url": "empty",
+ "method": "get",
+ "headers": [{
+ "key": "key",
+ "value": "value"
+ }],
+ "httpBody": null
+ },
+ "extra": {
+ "commands": [{
+ "commandName": "",
+ "params": [{
+ "key": "",
+ "value": ""
+ }]
+ }],
+ "extraInfo": [{
+ "key": "",
+ "value": ""
+ }]
+ },
+ "javascriptConfig": {
+ "removeJavascript": true,
+ "loadInWebView": false,
+ "javaScript": "\n try {\n\n /* JAVASCRIPT STARTS */ /* JAVASCRIPT ENDS */\n\n } catch (e) {\n console.error(e.message);\n\n if (typeof KETSU_ASYNC !== 'undefined') {\n window.webkit.messageHandlers.EXECUTE_KETSU_ASYNC.postMessage('');\n }\n\n }\n \n "
+ },
+ "moduleCreatorIdxFTuhGOYAuGcbiSaanIR": {
+ "path": "WsyFa",
+ "id": "helperFunctions,0,functions,0cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorIdptntGCRvsTvpTFryBNlI": {
+ "path": "fAyzR",
+ "id": "helperFunctions,0section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdszJpUbsJdibpFGTneXAs": {
+ "path": "OYKiY",
+ "id": "helperFunctions,0,section",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Parameters",
+ "listName": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdCrCcdOvzrhzyjfaoKwkn": {
+ "path": "KJpIu",
+ "id": "helperFunctions,0,cell",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Parameters"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdpBbAVSznojReZUHjXNsk": {
+ "path": "functions",
+ "id": "helperFunctions,0,functionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Function Requests",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+ }],
+ "moduleCreatorGlobalOptions": {
+ "selected": "moduleCreatorIdbdPLcIAmNwtGqhIoaIcA",
+ "notes": {},
+ "hideViews": [],
+ "id": "EoRKhocLaueROPw",
+ "projectName": "Aniwatch",
+ "notesData": {
+ "openedNotes": [],
+ "activeNote": "oFwjzvDpdfxlaKQrGUwc",
+ "notes": {}
+ }
+ },
+ "moduleCreatorIdGzPXNgxSFrWKHppRMKWu": {
+ "path": "mainPage",
+ "id": "mainPagesection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Main Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdYdmnknilvifajOEYwucG": {
+ "path": "search",
+ "id": "searchsection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Search Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdNLtjeYlURhmWlZPuaQhI": {
+ "path": "info",
+ "id": "infosection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Info Page",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdojVvZGmdwSvCLscMuBcF": {
+ "path": "chapters",
+ "id": "chapterssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Chapters",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdnVdZtyjiwEicZJfdGMIb": {
+ "path": "moduleResolvers",
+ "id": "moduleResolverssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Resolvers",
+ "listName": "Resolver"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdvgQopbNlHmQMRtROkUCa": {
+ "path": "responseCodeFunctions",
+ "id": "responseCodeFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Response Code Funtions",
+ "listName": "Function"
+ },
+ "cellsHidden": false
+ },
+ "moduleCreatorIdRjzfFiUPHcXeRGMKFrus": {
+ "path": "helperFunctions",
+ "id": "helperFunctionssection",
+ "sectionsHidden": [],
+ "options": {
+ "name": "Helper Functions",
+ "listName": "Request"
+ },
+ "cellsHidden": false
+ }
+}
\ No newline at end of file
diff --git a/modules.json b/modules.json
index 804f8d6..b413965 100644
--- a/modules.json
+++ b/modules.json
@@ -11,7 +11,7 @@
"Most Used",
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/Zoro.to/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Zoro.to/moduleTemplate.json"
},
{
"categories": [
@@ -70,7 +70,7 @@
"Most Used",
"Manga"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/MangaDex/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/MangaDex/moduleTemplate.json"
},
{
"categories": [
@@ -200,43 +200,43 @@
"categories": [
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/VostFree%20Ketsu/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/VostFree%20Ketsu/moduleTemplate.json"
},
{
"categories": [
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/VoirAnime/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/VoirAnime/moduleTemplate.json"
},
{
"categories": [
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/FrenchAnime/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/FrenchAnime/moduleTemplate.json"
},
{
"categories": [
"Drama"
],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/Drama_Cool/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Drama_Cool/moduleTemplate.json"
},
{
"categories": [
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/AnimeWorld/AnimeWorld.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/AnimeWorld/AnimeWorld.json"
},
{
"categories": [
"Anime"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/NineAnime/9anime.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/NineAnime/9anime.json"
},
{
"categories": [
"Manga"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/Otakufr/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Otakufr/moduleTemplate.json"
},
{
"categories": [
@@ -262,42 +262,36 @@
],
"url": "https://raw.githubusercontent.com/Danyspb/Modules-Ketsu/main/SuperCartoons/moduleTemplate.json"
},
- {
- "categories": [
- "Anime"
- ],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/ADKami/ADKami.json"
- },
{
"categories": [
"Manga"
],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/ScansMangas/ScansMangasKETSU.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/ScansMangas/ScansMangasKETSU.json"
},
{
"categories": [
"Manga"
],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/NineManga/NineMangaFR.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/NineManga/NineMangaFR.json"
},
{
"categories": [
"WebToon"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/Asura/asura.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Asura/asura.json"
},
{
"categories": [
"Manga",
"WebToon"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/Manga%20Weeb/moduleTemplate.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Manga%20Weeb/moduleTemplate.json"
},
{
"categories": [
"Manga"
],
- "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/Senmanga/senmanga.json"
+ "url": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Senmanga/senmanga.json"
},
{
"categories": [
@@ -305,12 +299,6 @@
],
"url": "https://raw.githubusercontent.com/Danyspb/Modules-Ketsu/main/Mangas-Origines/moduleTemplate.json"
},
- {
- "categories": [
- "Books"
- ],
- "url": "https://raw.githubusercontent.com/Bilna95/bilna95.github.io/main/Livre1/Livre1.json"
- },
{
"categories": [
"Anime"
Information +
Seuls les membres peuvent ajouter un commentaire. +
+ Merci de vous enregister ! +