diff --git a/Module Parser KETSU/Asura/Chapters/.DS_Store b/Module Parser KETSU/Asura/Chapters/.DS_Store new file mode 100644 index 0000000..e932f2c Binary files /dev/null and b/Module Parser KETSU/Asura/Chapters/.DS_Store differ diff --git a/Module Parser KETSU/Asura/Chapters/Chapters.html b/Module Parser KETSU/Asura/Chapters/Chapters.html new file mode 100644 index 0000000..ed745f6 --- /dev/null +++ b/Module Parser KETSU/Asura/Chapters/Chapters.html @@ -0,0 +1,87 @@ + + diff --git a/Module Parser KETSU/Asura/Info/.DS_Store b/Module Parser KETSU/Asura/Info/.DS_Store new file mode 100644 index 0000000..0522256 Binary files /dev/null and b/Module Parser KETSU/Asura/Info/.DS_Store differ diff --git a/Module Parser KETSU/Asura/Info/Info.js b/Module Parser KETSU/Asura/Info/Info.js new file mode 100644 index 0000000..1db47a4 --- /dev/null +++ b/Module Parser KETSU/Asura/Info/Info.js @@ -0,0 +1,99 @@ +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; +} + +function getStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return data.replace(match, '').trim(); + } + } +} + +function getHtmlStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return array[x]; + } + } +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let emptyKeyValue = [new KeyValue('', '')]; +var episodes = []; +var type = document.querySelector('div.tsinfo > div:nth-child(2) a').textContent; +var status = document.querySelector('div.tsinfo > div:nth-child(1) i').textContent; +var genres = []; +genres = Array.from(document.querySelectorAll('.wd-full a')).map(g => g.textContent); +var desc; +try { + desc = document.querySelector('[itemprop=\"depion\"]').textContent.replaceAll('\n','').trim(); +} catch{} +var title = document.querySelector('.entry-title').textContent.trim(); +var image = document.querySelector('.thumb img').src; +image = new ModuleRequest(image, 'get', emptyKeyValue, null); +var chapters = document.querySelector('.clstyle').querySelectorAll('li'); +for (var i = chapters.length - 1; i >= 0; i--) { + var element = chapters[i]; + var fixedLink = element.querySelector('a').href; + let chapter = new Chapter('Chapter ' + (chapters.length - i), new ModuleRequest(fixedLink, 'get', + emptyKeyValue, null), false); + episodes.push(chapter); +} +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, '', 'Chapters : ' + episodes.length, episodes)); +var finalJson = JSON.stringify(infoPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Asura/MainPage/mainPage1.js b/Module Parser KETSU/Asura/MainPage/mainPage1.js new file mode 100644 index 0000000..e37ab3f --- /dev/null +++ b/Module Parser KETSU/Asura/MainPage/mainPage1.js @@ -0,0 +1,250 @@ + + 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 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 = []; + var emptyKeyValue = [new KeyValue('', '')]; + let newRequest = new ModuleRequest(parsedJson.request.url, 'get', emptyKeyValue, null); + var commands = [new Commands('helperFunction', [new KeyValue('isCustomRequest', 'true'), new KeyValue('name', + 'example')])]; + let emptyExtra = new Extra(commands, emptyKeyValue); + + + let pop = []; +popchap = document.querySelectorAll('.hothome div.bs'); + for (list of popchap) { + let title = list.querySelector('.tt').textContent; + var link = list.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = list.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var ep = list.querySelector('.epxs').textContent; + pop.push(new Data(image, title, '', ep, '', '', '', false, link)); + } +let lastchap = []; + lastchapchap = document.querySelectorAll('div.uta'); + for (list of lastchapchap) { + let title = list.querySelector('h4').textContent; + var link = list.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = list.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var ep =''; + try { + ep = list.querySelector('ul li a').textContent; + } catch{} + lastchap.push(new Data(image, title, ep, '', '', '', '', false, link)); + } +let bestmanhwa = []; + bestmanhwa1 = document.querySelectorAll('.serieslist.pop.wpop.wpop-alltime li'); + for (list of bestmanhwa1) { + let title = list.querySelector('h2').textContent.replace(' ',''); + var link = list.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = list.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var ep =''; + try { + ep = list.querySelector('div.leftseries > span').textContent; + } catch{} + var rating = 'Rating: ' + list.querySelector('.numscore').textContent.replaceAll('\n','').replaceAll(' ',''); + bestmanhwa.push(new Data(image, title, ep, '', rating, '', '', false, link)); + } + + output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('', false), null, bestmanhwa)); + output.push(new Output(CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.leading, new Section('Popular Today', true), null,pop)); + output.push(new Output(CellDesings.wide9, Orientation.horizontal, DefaultLayouts.wideStrechedList, Paging.leading, new Section('Last Chapters', true), null,lastchap)); + + 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; \ No newline at end of file diff --git a/Module Parser KETSU/Asura/Search/.DS_Store b/Module Parser KETSU/Asura/Search/.DS_Store new file mode 100644 index 0000000..499fe27 Binary files /dev/null and b/Module Parser KETSU/Asura/Search/.DS_Store differ diff --git a/Module Parser KETSU/Asura/Search/Search.js b/Module Parser KETSU/Asura/Search/Search.js new file mode 100644 index 0000000..402e645 --- /dev/null +++ b/Module Parser KETSU/Asura/Search/Search.js @@ -0,0 +1,238 @@ +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 lastAdded = document.querySelector('.listupd').querySelectorAll('.bs'); + let lastAddedArray = []; + for(var x = 0; x < lastAdded.length; x++) { + var last = lastAdded[x]; + var image = last.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + let title = last.querySelector('.bsx a').title; + var link = last.querySelector('.bsx a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var lastchap = 'Last chapter : ' + last.querySelector('.adds .epxs').textContent.replaceAll('\n',''); + let data = new Data(image, title, lastchap, 'Manhwa', '', '', '', false, link); + lastAddedArray.push(data); + } + 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('', false), testLayout, lastAddedArray)); + let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output); + var finalJson = JSON.stringify(searchPageObject); + savedData.innerHTML = finalJson; + + \ No newline at end of file diff --git a/Module Parser KETSU/Asura/asura.json b/Module Parser KETSU/Asura/asura.json new file mode 100644 index 0000000..5e412ea --- /dev/null +++ b/Module Parser KETSU/Asura/asura.json @@ -0,0 +1,619 @@ +{ + "moduleInfo": { + "moduleName": "AsuraScans", + "moduleInitials": "AS", + "moduleDesc": "Module for AsuraScans, don't forget to go on the website first to resolve the recaptcha to make it work (when you click on ModuleSite it should redirect you to it), Enjoy ! ", + "developer": "ナビル", + "moduleID": "20020901", + "moduleImage": "https://i.postimg.cc/MK0y10tY/asura-logo.png", + "moduleVersion": 1.02, + "moduleLenguage": "ENG", + "changelog":"added the separator for the search to work when you have more than two words", + "moduleType": "Image", + "baseURL": "https://www.asurascans.com/", + "moduleDeveloperSite": "https://www.asurascans.com/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//Asura/asura.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [ + "" + ] + }, + "global": { + "variables": [ + { + "key": "", + "value": "" + } + ], + "cookies": [ + { + "key": "", + "value": "" + } + ], + "headers": [ + { + "key": "", + "value": "" + } + ] + }, + "mainPage": [ + { + "request": { + "url": "https://www.asurascans.com/", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 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 = []; var emptyKeyValue = [new KeyValue('', '')]; let newRequest = new ModuleRequest(parsedJson.request.url, 'get', emptyKeyValue, null); var commands = [new Commands('helperFunction', [new KeyValue('isCustomRequest', 'true'), new KeyValue('name', 'example')])]; let emptyExtra = new Extra(commands, emptyKeyValue); let pop = [];popchap = document.querySelectorAll('.hothome div.bs'); for (list of popchap) { let title = list.querySelector('.tt').textContent; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep = list.querySelector('.epxs').textContent; pop.push(new Data(image, title, '', ep, '', '', '', false, link)); }let lastchap = []; lastchapchap = document.querySelectorAll('div.uta'); for (list of lastchapchap) { let title = list.querySelector('h4').textContent; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep =''; try { ep = list.querySelector('ul li a').textContent; } catch{} lastchap.push(new Data(image, title, ep, '', '', '', '', false, link)); }let bestmanhwa = []; bestmanhwa1 = document.querySelectorAll('.serieslist.pop.wpop.wpop-alltime li'); for (list of bestmanhwa1) { let title = list.querySelector('h2').textContent.replace(' ',''); var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep =''; try { ep = list.querySelector('div.leftseries > span').textContent; } catch{} var rating = 'Rating: ' + list.querySelector('.numscore').textContent.replaceAll('\\n','').replaceAll(' ',''); bestmanhwa.push(new Data(image, title, ep, '', rating, '', '', false, link)); } output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('', false), null, bestmanhwa)); output.push(new Output(CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.leading, new Section('Popular Today', true), null,pop)); output.push(new Output(CellDesings.wide9, Orientation.horizontal, DefaultLayouts.wideStrechedList, Paging.leading, new Section('Last Chapters', true), null,lastchap)); 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;" + }, + "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 + } + } + ] + } + ] + } + ], + "search": [ + { + "request": { + "url": "https://www.asurascans.com/page//?s=", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "separator": "+", + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 lastAdded = document.querySelector('.listupd').querySelectorAll('.bs'); let lastAddedArray = []; for(var x = 0; x < lastAdded.length; x++) { var last = lastAdded[x]; var image = last.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = last.querySelector('.bsx a').title; var link = last.querySelector('.bsx a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var lastchap = 'Last chapter : ' + last.querySelector('.adds .epxs').textContent.replaceAll('\\n',''); let data = new Data(image, title, lastchap, 'Manhwa', '', '', '', false, link); lastAddedArray.push(data); } 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('', false), testLayout, lastAddedArray)); let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output); var finalJson = JSON.stringify(searchPageObject); savedData.innerHTML = finalJson; " + }, + "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 + } + } + ] + } + ] + } + ], + "info": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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;}function getStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return data.replace(match, '').trim(); } }}function getHtmlStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return array[x]; } }}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);let emptyKeyValue = [new KeyValue('', '')];var episodes = [];var type = document.querySelector('div.tsinfo > div:nth-child(2) a').textContent;var status = document.querySelector('div.tsinfo > div:nth-child(1) i').textContent;var genres = [];genres = Array.from(document.querySelectorAll('.wd-full a')).map(g => g.textContent);var desc;try { desc = document.querySelector('[itemprop=\"depion\"]').textContent.replaceAll('\\n','').trim();} catch{}var title = document.querySelector('.entry-title').textContent.trim();var image = document.querySelector('.thumb img').src;image = new ModuleRequest(image, 'get', emptyKeyValue, null);var chapters = document.querySelector('.clstyle').querySelectorAll('li');for (var i = chapters.length - 1; i >= 0; i--) { var element = chapters[i]; var fixedLink = element.querySelector('a').href; let chapter = new Chapter('Chapter ' + (chapters.length - i), new ModuleRequest(fixedLink, 'get', emptyKeyValue, null), false); episodes.push(chapter);}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, '', 'Chapters : ' + episodes.length, episodes));var finalJson = JSON.stringify(infoPageObject);savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + } + ], + "chapters": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 Text(text) { this.text = text; } var output = []; var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('', '')]; var images = document.querySelectorAll('p > img'); for (var x = 0; x < images.length; x++) { var img = images[x].currentSrc; output.push(new ModuleRequest(img, 'get', emptyKeyValue, null)); } let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(null, output, null)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson;" + }, + "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": "" + } + } + } + ], + "moduleResolvers": [ + { + "resolverInfo": { + "resolverName": "", + "nameMatches": [ + "" + ], + "developer": "", + "moduleID": "", + "resolverVersion": 1, + "baseURL": "" + }, + "resolver": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": false, + "loadInWebView": false, + "javaScript": "" + }, + "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 + } + } + ] + } + } + ] + } + ], + "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": "" + } + } + ] + } + ], + "helperFunctions": [ + { + "functionName": "example", + "msgTitle": "RECAPTCHA", + "msgBody": "Validate the recaptcha and when you finished click on Done", + "type": "captcha", + "functions": [ + { + "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": true, + "javaScript": "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 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 = [];var emptyKeyValue = [new KeyValue('', '')];const pop = [];popchap = document.querySelectorAll('.hothome div.bs'); for (list of popchap) { let title = list.querySelector('.tt').textContent; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep = list.querySelector('.epxs').textContent; pop.push(new Data(image, title, '', ep, '', '', '', false, link)); } const lastchap = []; lastchapchap = document.querySelectorAll('div.uta'); for (list of lastchapchap) { let title = list.querySelector('h4').textContent; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep =''; try { ep = list.querySelector('ul li').innerText.split('\\n')[0]; } catch{} lastchap.push(new Data(image, title, '', ep, '', '', '', false, link)); } const commands = [ new Commands('variable', [ new KeyValue('data_pop', pop), new KeyValue('data_last', lastchap), new KeyValue('current', parsedJson.request.url) ])];let MainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra('', emptyKeyValue), new JavascriptConfig(true, false, ''), output);var finalJson = JSON.stringify(MainPageObject);savedData.innerHTML = finalJson;" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/Module Parser KETSU/Drama_Cool/.DS_Store b/Module Parser KETSU/Drama_Cool/.DS_Store new file mode 100644 index 0000000..198c7d7 Binary files /dev/null and b/Module Parser KETSU/Drama_Cool/.DS_Store differ diff --git a/Module Parser KETSU/Drama_Cool/Chapters/.DS_Store b/Module Parser KETSU/Drama_Cool/Chapters/.DS_Store new file mode 100644 index 0000000..e932f2c Binary files /dev/null and b/Module Parser KETSU/Drama_Cool/Chapters/.DS_Store differ diff --git a/Module Parser KETSU/Drama_Cool/Chapters/Chapters.js b/Module Parser KETSU/Drama_Cool/Chapters/Chapters.js new file mode 100644 index 0000000..576d381 --- /dev/null +++ b/Module Parser KETSU/Drama_Cool/Chapters/Chapters.js @@ -0,0 +1,82 @@ +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 Text ( text ) { + this.text = text; +} +var output = [ ]; +var savedData = document.getElementById( 'ketsu-final-data' ); +var parsedJson = JSON.parse( savedData.innerHTML ); +var emptyKeyValue = [ new KeyValue( '', '' ) ]; +let buttonBox = document.querySelector( 'div.anime_muti_link' ).querySelectorAll( 'li' ); +for (let x = 0; x < buttonBox.length; x++ ) { + let link = buttonBox[ x ].dataset.video; + if ( link.startsWith( '//' ) ) { + link = 'https:' + link; + } else if (link.includes('dood')){ + link = link.replace( 'ws', 'so' ) + } + output.push( new NeedsResolver( '', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) ); +} + +let emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ); +var chaptersObject = new Chapters( new ModuleRequest( '', '', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( new Videos( output, null ), null, null ) ); +var finalJson = JSON.stringify( chaptersObject ); +savedData.innerHTML = finalJson; diff --git a/Module Parser KETSU/Drama_Cool/Info/.DS_Store b/Module Parser KETSU/Drama_Cool/Info/.DS_Store new file mode 100644 index 0000000..0522256 Binary files /dev/null and b/Module Parser KETSU/Drama_Cool/Info/.DS_Store differ diff --git a/Module Parser KETSU/Drama_Cool/Info/Info.html b/Module Parser KETSU/Drama_Cool/Info/Info.html new file mode 100644 index 0000000..1412e4a --- /dev/null +++ b/Module Parser KETSU/Drama_Cool/Info/Info.html @@ -0,0 +1,125 @@ + \ No newline at end of file diff --git a/Module Parser KETSU/Drama_Cool/MainPage/mainPage1.html b/Module Parser KETSU/Drama_Cool/MainPage/mainPage1.html new file mode 100644 index 0000000..5b291d0 --- /dev/null +++ b/Module Parser KETSU/Drama_Cool/MainPage/mainPage1.html @@ -0,0 +1,244 @@ + + + + \ No newline at end of file diff --git a/Module Parser KETSU/Drama_Cool/Search/.DS_Store b/Module Parser KETSU/Drama_Cool/Search/.DS_Store new file mode 100644 index 0000000..499fe27 Binary files /dev/null and b/Module Parser KETSU/Drama_Cool/Search/.DS_Store differ diff --git a/Module Parser KETSU/Drama_Cool/Search/Search.html b/Module Parser KETSU/Drama_Cool/Search/Search.html new file mode 100644 index 0000000..418f52b --- /dev/null +++ b/Module Parser KETSU/Drama_Cool/Search/Search.html @@ -0,0 +1,245 @@ + + \ No newline at end of file diff --git a/Module Parser KETSU/Drama_Cool/moduleTemplate.json b/Module Parser KETSU/Drama_Cool/moduleTemplate.json new file mode 100644 index 0000000..21a483b --- /dev/null +++ b/Module Parser KETSU/Drama_Cool/moduleTemplate.json @@ -0,0 +1,880 @@ +{ + "moduleInfo": { + "moduleName": "Drama Cool", + "moduleInitials": "DC", + "moduleDesc": "Ketsu module to access Data from Drama Cool", + "developer": "ナビル", + "moduleID": "2849626", + "moduleImage": "https://yt3.ggpht.com/a-/AAuE7mAW2MBlo2Dg0vVQBmQTl8ex6dhwNZHmObqHwQ=s900-mo-c-c0xffffffff-rj-k-no", + "moduleVersion": 2.64, + "moduleLenguage": "ENG", + "moduleType": "Video", + "changelog": "2.64 - ASIANPLAY is back", + "baseURL": "https://www.dramacool.sk/", + "moduleDeveloperSite": "https://bilnaa.github.io/main", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//Drama_Cool/moduleTemplate.json", + "preferedServer": "ASIANHDPLAY", + "preferedDownloadServer": "ASIANHDPLAY", + "blackListed": [""], + "moduleCreatorIdMUjhQOFImAcMcDtsnlsZ": { + "path": "hQZFG", + "id": "moduleInfosection", + "sectionsHidden": [], + "options": { + "name": "Module Info", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdhaiVOgiBksqyjSHSMrXH": { + "path": "CcDmm", + "id": "moduleInfocell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + } + }, + "global": { + "variables": [{ + "key": "", + "value": "" + }], + "cookies": [{ + "key": "", + "value": "" + }], + "headers": [{ + "key": "", + "value": "" + }] + }, + "mainPage": [{ + "request": { + "url": "https://dramacool.sk/most-popular-drama", + "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 };\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 MainPage ( 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 ( 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 baseURL = 'https://dramacool.sk/';\n var dataArray = [ ];\n films = document.querySelector( '.switch-block.list-episode-item' ).querySelectorAll( 'li' );\n for ( var x = 0; x < films.length; x++ ) {\n let list = films[ x ];\n let title = list.querySelector( 'a' ).title;\n var link = baseURL + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = list.querySelector( 'img' ).dataset.original;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var finalData = new Data( image, title, 'unknown', '', 'unknown', 'unknown', 'unknown', false, link );\n dataArray.push( finalData );\n }\n output.push( new Output( CellDesings.normal2, Orientation.vertical, DefaultLayouts.longDoubletsFullConstant, Paging.leading, new Section( 'Drama', true ), null, dataArray ) );\n let MainPageObject = new MainPage( new ModuleRequest( '', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( true, false, '' ), output );\n var finalJson = JSON.stringify( MainPageObject );\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": "", + "method": "", + "headers": [{ + "key": "", + "value": "" + }], + "httpBody": null + } + }] + }], + "moduleCreatorIdVisrLromJXawGyBdkRYy": { + "path": "UImZd", + "id": "mainPage,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }], + "search": [{ + "request": { + "url": "https://dramacool.sk/search?type=movies&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 };\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 baseURL = 'https://dramacool.sk/';\n var lastAdded = document.querySelector( 'ul.switch-block.list-episode-item' ).querySelectorAll( 'li' );\n let lastAddedArray = [ ];\n for ( var x = 0; x < lastAdded.length; x++ ) {\n try {\n let list = lastAdded[ x ];\n let title = list.querySelector( 'a img' ).alt;\n var link = baseURL + list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = list.querySelector( 'a img' ).dataset.original;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var finalData = new Data( image, title, '', '', 'Drama', 'unknown', 'unknown', false, link );\n lastAddedArray.push( finalData );\n } catch ( e ) {}\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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', false ), testLayout, lastAddedArray ) );;\n let searchPageObject = new Search( new ModuleRequest( '', '', 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 + } + }] + }], + "moduleCreatorIdvXXdvOchtXayrLfeJHlq": { + "path": "VtWCZ", + "id": "search,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }], + "info": [{ + "request": { + "url": "", + "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 ].textContent;\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 ].textContent;\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 baseURL = 'https://dramacool.ch/';\n var episodes = [ ];\n var type = 'Drama';\n var status = document.querySelector( '.info' ).textContent.match( /Status: .+/g )[ 0 ].replace( 'Status: ', '' ).trim( );\n var lang = document.querySelector( '.info' ).textContent.match( /Country: .+/g )[ 0 ].replace( 'Country: ', '' ).trim( );\n var genres = Array.from( document.querySelector( '.info' ).textContent.match( /Genre: .+/g )[ 0 ].replace( 'Genre: ', '' ).split( ';' ) );\n var desc = '';\n var title = document.querySelector( '.info h1' ).textContent;\n var image = document.querySelector( '.img img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var episode = document.querySelector( '.list-episode-item-2.all-episode' ).querySelectorAll( 'li' );\n for ( var i = episode.length - 1; i >= 0; i-- ) {\n var fixedLink = baseURL + episode[ i ].querySelector( 'a' ).href;\n let chapter = new Chapter( 'Episode ' + ( episode.length - i ), new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ), false );\n episodes.push( chapter );\n }\n try {\n desc = document.querySelector( '.info' ).textContent.match( / Depion: \\n \\n .+/g )[ 0 ].replace( ' Depion: \\n \\n ', '' ) + '3';\n } catch {}\n try {\n desc = document.querySelector( '.info p:nth-of-type(n+4)' ).textContent, document.querySelector( '.info p:nth-of-type(n+5)' ).textContent;\n } catch {}\n try {\n desc = document.querySelector( '.info' ).textContent.match( /Depion: \\n.+/g )[ 0 ].replace( 'Depion: \\n ', '' ).trim( );\n } catch {}\n try {\n desc1 = document.querySelectorAll( '.info p' );\n for ( var i = 0; i < desc1.length; i++ ) {\n if ( desc1[ i ].textContent.includes( 'Depion:' ) ) {\n desc = desc1[ i + 1 ].textContent.trim( );\n if ( desc == '' ) {\n desc = desc1[ i + 2 ].textContent.trim( );\n }\n }\n }\n } catch ( e ) {}\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, lang + ' | ' + 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 + } + }] + }, + "moduleCreatorIdDzwiQCCnuilmKvwXliiJ": { + "path": "JOrDr", + "id": "info,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }], + "chapters": [{ + "request": { + "url": "https://www1.dramacool.cr/kokdu-season-of-deity-2023-episode-7.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\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 Output ( videos, images, text ) {\n\tthis.videos = videos;\n\tthis.images = images;\n\tthis.text = text;\n}\n\nfunction Videos ( needsResolver, rawVideo ) {\n\tthis.needsResolver = needsResolver;\n\tthis.rawVideo = rawVideo;\n}\n\nfunction NeedsResolver ( resolverIdentifier, link ) {\n\tthis.resolverIdentifier = resolverIdentifier;\n\tthis.link = link;\n}\n\nfunction RawVideo ( video ) {\n\tthis.video = video;\n}\n\nfunction Video ( videoQuality, videoLink ) {\n\tthis.videoQuality = videoQuality;\n\tthis.videoLink = videoLink;\n}\n\nfunction Text ( text ) {\n\tthis.text = text;\n}\nvar output = [ ];\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nvar emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet buttonBox = document.querySelector( 'div.anime_muti_link' ).querySelectorAll( 'li' );\nfor (let x = 0; x < buttonBox.length; x++ ) {\n\tlet link = buttonBox[ x ].dataset.video;\n\tif ( link.startsWith( '//' ) ) {\n\t\tlink = 'https:' + link;\n\t} else if (link.includes('dood')){\n\t\tlink = link.replace( 'ws', 'so' )\n\t}\n output.push( new NeedsResolver( '', new ModuleRequest( link, 'get', emptyKeyValue, null ) ) );\n}\n\nlet emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue );\nvar chaptersObject = new Chapters( new ModuleRequest( '', '', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, false, '' ), new Output( new Videos( output, null ), null, null ) );\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": "" + } + }, + "moduleCreatorIdXTvzLjYEaKiqoeThxzzr": { + "path": "pwjRC", + "id": "chapters,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "openedMenu": "Javascript", + "javascriptEditorScroll": 1132.2222900390625 + } + }], + "moduleResolvers": [{ + "resolverInfo": { + "resolverName": "VIDSTREAMING", + "nameMatches": ["ASIANPLAY", "ASIANHDPLAY"], + "developer": "Uknown", + "moduleID": "56464964116", + "resolverVersion": 1, + "baseURL": "", + "moduleCreatorIdAodJYfCMCCAZkjKGMoKX": { + "path": "yMQah", + "id": "moduleResolvers,0,resolverInfosection", + "sectionsHidden": [], + "options": { + "name": "Resolver Parameters", + "listName": "parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdYRZbDurhxAvrVmDEyHfu": { + "path": "ZkbHp", + "id": "moduleResolvers,0,resolverInfocell", + "sectionsHidden": [], + "options": { + "name": "parameters" + }, + "cellsHidden": false + } + }, + "resolver": [{ + "request": { + "url": "https://asianhdplay.net/streaming.php?id=MzY5Mjc5&title=Kokdu%3A+Season+of+Deity+%282023%29+episode+7&typesub=RAW", + "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\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 ( video ) {\n this.video = video;\n}\n\nfunction Video ( videoQuality, videoLink ) {\n this.videoQuality = videoQuality;\n this.videoLink = videoLink;\n}\n\nfunction 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}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nvar emptyKeyValue = [ new KeyValue( 'Referer', parsedJson.request.url ) ];\nvar videos = [ ];\nvar parsedJson = JSON.parse( savedData.innerHTML );\nvar nextRequest = parsedJson.request.url + '&done=done';\nvar found = false;\nvar newFound = false;\ntry {\n for ( source of playerInstance.getPlaylist( ) ) {\n for ( vid of source.allSources ) {\n let mviD = vid.file;\n let quality = vid.label;\n if ( mviD != undefined && quality != undefined ) {\n videos.push( new Video( quality, new ModuleRequest( mviD, 'get', emptyKeyValue, null ) ) );\n newFound = true;\n }\n }\n }\n} catch {\n newFound = false;\n}\nif ( newFound ) {\n nextRequest = '';\n}\nfor ( var x = 0; x < videos.length; x++ ) {\n let video = videos[ x ];\n if ( video.videoQuality.includes( '480' ) ) {\n videos.unshift( videos.splice( x, 1 )[ 0 ] );\n found = true;\n continue;\n }\n if ( found && !video.videoQuality.includes( '480' ) ) {\n break;\n }\n}\nvar found = false;\nfor ( var x = 0; x < videos.length; x++ ) {\n let video = videos[ x ];\n if ( video.videoQuality.includes( '480' ) ) {\n videos.unshift( videos.splice( x, 1 )[ 0 ] );\n found = true;\n continue;\n }\n if ( found && !video.videoQuality.includes( '480' ) ) {\n break;\n }\n}\nlet emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue );\nvar chaptersObject = new Resolver( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( true, false, '' ), new Output( videos ) );\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": { + "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 + } + }] + }, + "moduleCreatorIdYuIOivxnfjLNWsWrqpLz": { + "path": "IIbro", + "id": "moduleResolvers,0,resolver,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }, { + "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 */ var script = document.createElement('script');script.src = 'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js';document.head.appendChild(script);script.addEventListener('load', function () { 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('Referer', parsedJson.request.url), new KeyValue('X-Requested-With', 'XMLHttpRequest') ]; var emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var newRequest = new ModuleRequest('', '', emptyKeyValue, null); var parseUrl = new URL(parsedJson.request.url); var key = '93422192433952489752342908585752'; var IV = '9262859232435825'; var cryptoToken = document.querySelector('p[data-name=crypto]').getAttribute('data-value'); var decryptedData = CryptoJS.AES.decrypt(cryptoToken, CryptoJS.enc.Utf8.parse(key), { 'iv': CryptoJS.enc.Utf8.parse(IV) }); decryptedData = CryptoJS.enc.Utf8.stringify(decryptedData); var id = decryptedData.substr(0, decryptedData.indexOf('&')); id = CryptoJS.AES.encrypt(id, CryptoJS.enc.Utf8.parse(key), { 'iv': CryptoJS.enc.Utf8.parse(IV) }).toString(); let rest = decryptedData.substr(decryptedData.indexOf('&')); newRequest = new ModuleRequest(`${parseUrl.origin}/encrypt-ajax.php?id=${id + rest}`, 'get', emptyKeyValue, null); var chaptersObject = new Resolver(newRequest, emptyExtra, new JavascriptConfig(false, false, ''), new Output([])); 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 + } + }] + }, + "moduleCreatorIdmTbHKghARjhkpyBRIPSX": { + "path": "UWCcR", + "id": "moduleResolvers,0,resolver,1cell", + "sectionsHidden": [], + "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 */ var script = document.createElement('script');script.src = 'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js';document.head.appendChild(script);script.addEventListener('load', function () { 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('Referer', parsedJson.request.url) ]; var emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var videos = []; var key = '93422192433952489752342908585752'; var IV = '9262859232435825'; var script = document.querySelector('script:nth-child(2)'); var parsedData = JSON.parse(script.innerHTML.replace('/*', '').replace('*/', '')); var decryptedData = CryptoJS.AES.decrypt(parsedData.data, CryptoJS.enc.Utf8.parse(key), { 'iv': CryptoJS.enc.Utf8.parse(IV) }); decryptedData = CryptoJS.enc.Utf8.stringify(decryptedData); decryptedData = JSON.parse(decryptedData); for (const source of decryptedData.source) { videos.push(new Video(`${source.label.replace(' ', '').toLowerCase()} | ${source.type}`, new ModuleRequest(source.file, 'get', emptyKeyValue))); } for (const source of decryptedData.source_bk) { videos.push(new Video(`${source.label.replace(' ', '').toLowerCase()} | ${source.type}`, new ModuleRequest(source.file, 'get', emptyKeyValue))); } var found = false;for (var x = 0; x < videos.length; x++) { let video = videos[x]; if (video.videoQuality.includes('480')) { videos.unshift(videos.splice(x, 1)[0]); found = true; continue; } if (found && !video.videoQuality.includes('480')) { break; }} 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 + } + }] + }, + "moduleCreatorIdKjbqjzdeThSGGfhZmcIK": { + "path": "WVEYo", + "id": "moduleResolvers,0,resolver,2cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdICKrRPWdZOgmQThbgZgo": { + "path": "TcxFT", + "id": "moduleResolvers,0section", + "sectionsHidden": [], + "options": { + "name": "Resolver" + }, + "cellsHidden": false + }, + "moduleCreatorIdjDQloZVgQLupEnBAoVLZ": { + "path": "resolver", + "id": "moduleResolvers,0,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 " + }, + "moduleCreatorIdovhfsktymmSiOuujxdOG": { + "path": "mSXQf", + "id": "responseCodeFunctions,0,functions,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdjCUcyNvbhaNZegHcODRQ": { + "path": "tvOBC", + "id": "responseCodeFunctions,0section", + "sectionsHidden": [], + "options": { + "name": "Function" + }, + "cellsHidden": false + }, + "moduleCreatorIdGRXGWLTlHbgdAHhybPPD": { + "path": "etPVt", + "id": "responseCodeFunctions,0,section", + "sectionsHidden": [], + "options": { + "name": "Function Parameters", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdqPQLaiiQIblXizIgFSlc": { + "path": "jaDlr", + "id": "responseCodeFunctions,0,cell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdSzYbPBvXEssFLlugpnWS": { + "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 " + }, + "moduleCreatorIdgCBKyGrrVigTBjanmwKy": { + "path": "PbXOE", + "id": "helperFunctions,0,functions,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdsJfOjRuqUnEdFiLzMsmI": { + "path": "IxoMq", + "id": "helperFunctions,0section", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdtsgucmsMQofvsWCBDuVa": { + "path": "IMUgT", + "id": "helperFunctions,0,section", + "sectionsHidden": [], + "options": { + "name": "Function Parameters", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdVHyijYDLNGMdUTBUJHdU": { + "path": "irizz", + "id": "helperFunctions,0,cell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdZGvtAhQhYGzkLXClnMJR": { + "path": "functions", + "id": "helperFunctions,0,functionssection", + "sectionsHidden": [], + "options": { + "name": "Function Requests", + "listName": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorGlobalOptions": { + "selected": "moduleCreatorIdXTvzLjYEaKiqoeThxzzr", + "notes": {}, + "hideViews": [], + "id": "hWXMaSZWeyWkmjO", + "projectName": "Drama Cool" + }, + "moduleCreatorIdtGjAElvPZpRoblgYNOVU": { + "path": "mainPage", + "id": "mainPagesection", + "sectionsHidden": [], + "options": { + "name": "Main Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdAksWvOYrMavlqUsQEllb": { + "path": "search", + "id": "searchsection", + "sectionsHidden": [], + "options": { + "name": "Search Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdZJPVKiYwxhuDBwJjMPXs": { + "path": "info", + "id": "infosection", + "sectionsHidden": [], + "options": { + "name": "Info Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdqbFoNsGAygRcbSqwPRuJ": { + "path": "chapters", + "id": "chapterssection", + "sectionsHidden": [], + "options": { + "name": "Chapters", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdHJGvsMnuQyITkbRuuwLc": { + "path": "moduleResolvers", + "id": "moduleResolverssection", + "sectionsHidden": [], + "options": { + "name": "Resolvers", + "listName": "Resolver" + }, + "cellsHidden": false + }, + "moduleCreatorIdPHiExQGTaBoIvaKlUIaI": { + "path": "responseCodeFunctions", + "id": "responseCodeFunctionssection", + "sectionsHidden": [], + "options": { + "name": "Response Code Funtions", + "listName": "Function" + }, + "cellsHidden": false + }, + "moduleCreatorIdWWTUcTqNwjBtlycPgGqE": { + "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/Manga Weeb/.DS_Store b/Module Parser KETSU/Manga Weeb/.DS_Store new file mode 100644 index 0000000..198c7d7 Binary files /dev/null and b/Module Parser KETSU/Manga Weeb/.DS_Store differ diff --git a/Module Parser KETSU/Manga Weeb/Chapters/.DS_Store b/Module Parser KETSU/Manga Weeb/Chapters/.DS_Store new file mode 100644 index 0000000..e932f2c Binary files /dev/null and b/Module Parser KETSU/Manga Weeb/Chapters/.DS_Store differ diff --git a/Module Parser KETSU/Manga Weeb/Chapters/Chapters.js b/Module Parser KETSU/Manga Weeb/Chapters/Chapters.js new file mode 100644 index 0000000..8446f65 --- /dev/null +++ b/Module Parser KETSU/Manga Weeb/Chapters/Chapters.js @@ -0,0 +1,77 @@ +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 Text(text) { + this.text = text; +} +var output = []; +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +var emptyKeyValue = [new KeyValue('', '')]; +var images = document.querySelectorAll('img.wp-manga-chapter-img'); // Get all images +for (var x = 0; x < images.length; x++) { // Loop through all images + var img = images[x].src; // Get the image source + output.push(new ModuleRequest(img, 'get', emptyKeyValue, null)); // Push the image source to the output +} +let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); +var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, + new JavascriptConfig(false, false, ''), new Output(null, output, null)); +var finalJson = JSON.stringify(chaptersObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Manga Weeb/Info/.DS_Store b/Module Parser KETSU/Manga Weeb/Info/.DS_Store new file mode 100644 index 0000000..0522256 Binary files /dev/null and b/Module Parser KETSU/Manga Weeb/Info/.DS_Store differ diff --git a/Module Parser KETSU/Manga Weeb/Info/Info.js b/Module Parser KETSU/Manga Weeb/Info/Info.js new file mode 100644 index 0000000..3d017fa --- /dev/null +++ b/Module Parser KETSU/Manga Weeb/Info/Info.js @@ -0,0 +1,99 @@ +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; +} + +function getStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return data.replace(match, '').trim(); + } + } +} + +function getHtmlStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return array[x]; + } + } +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let emptyKeyValue = [new KeyValue('', '')]; +var episodes = []; +var type = ''; +var status = document.querySelector('.post-status .summary-content').textContent.trim(); // Status +var genres = []; +genres = Array.from(document.querySelectorAll('.genres-content a')).map(g => g.textContent.trim()); // Genres +var desc = ''; // Description +desc = document.querySelector('.summary__content.show-more').textContent.trim(); // Description +var image = ''; +var title = ''; +title = document.querySelector('.post-title h1').textContent; // Title +image = document.querySelector('.summary_image img').src; // Image +image = new ModuleRequest(image, 'get', emptyKeyValue, null); +var chapters = document.querySelector('.main.version-chap').querySelectorAll('.wp-manga-chapter '); // Get all chapters +for (var i = chapters.length - 1; i >= 0; i--) { // Loop through chapters + var element = chapters[i]; // Get chapter + var fixedLink = element.querySelector('a').href; // Get chapter link + var episodeName = element.querySelector('a').textContent; // Get chapter name + let chapter = new Chapter(episodeName,new ModuleRequest(fixedLink, 'get',emptyKeyValue, null), false); // Create chapter + episodes.push(chapter); // Add chapter to episodes +} +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)); +var finalJson = JSON.stringify(infoPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Manga Weeb/MainPage/mainPage1.js b/Module Parser KETSU/Manga Weeb/MainPage/mainPage1.js new file mode 100644 index 0000000..b66d38f --- /dev/null +++ b/Module Parser KETSU/Manga Weeb/MainPage/mainPage1.js @@ -0,0 +1,209 @@ + 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 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 dataArray = []; + var sections = document.querySelectorAll('.col-6.col-md-3.badge-pos-1'); // Get all last chapters from the mainpage + for (chapters of sections) { // Loop through all chapters + var title = chapters.querySelector('.h5').textContent.trim(); // Get the title of the chapter + var image = chapters.querySelector('img').src; // Get the image of the chapter + image = new ModuleRequest(image, 'get', emptyKeyValue, null); // Create a new ModuleRequest for the image + var link = chapters.querySelector('h3 a').href; // Get the link of the chapter + link = new ModuleRequest(link, 'get', emptyKeyValue, null); // Create a new ModuleRequest for the link + var lastchapter = chapters.querySelector('.chapter.font-meta').textContent.trim(); // Get the last chapter of the chapter + dataArray.push(new Data(image, title, '', lastchapter, '', '', '', false, link)); // Create a new Data object for the chapter + } + output.push(new Output(CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section('Last Chapters', true), null, dataArray)); // Create a new Output object for the last chapters (that's the thing that set for us the layout with want on the app) + 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; \ No newline at end of file diff --git a/Module Parser KETSU/Manga Weeb/Search/.DS_Store b/Module Parser KETSU/Manga Weeb/Search/.DS_Store new file mode 100644 index 0000000..499fe27 Binary files /dev/null and b/Module Parser KETSU/Manga Weeb/Search/.DS_Store differ diff --git a/Module Parser KETSU/Manga Weeb/Search/Search.js b/Module Parser KETSU/Manga Weeb/Search/Search.js new file mode 100644 index 0000000..f73ffc9 --- /dev/null +++ b/Module Parser KETSU/Manga Weeb/Search/Search.js @@ -0,0 +1,236 @@ +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 lastAdded = document.querySelector('.c-tabs-item').querySelectorAll('.row.c-tabs-item__content'); // Get all search results +let lastAddedArray = []; // Create an array to store the search results +for(var x = 0; x < lastAdded.length; x++) { // Loop through the search results + var last = lastAdded[x]; // Get the current search result + var image = last.querySelector('img').src; // Get the image + image = new ModuleRequest(image, 'get', emptyKeyValue, null); // Create a new ModuleRequest object + let title = last.querySelector('a').title; // Get the title + var link = last.querySelector(' a').href; // Get the link + link = new ModuleRequest(link, 'get', emptyKeyValue, null); // Create a new ModuleRequest object + var lastchap = last.querySelector('.meta-item.latest-chap a').textContent.trim(); // Get the latest chapter + let data = new Data(image, title, lastchap, 'Manhwa', '', '', '', false, link); // Create a new Data object + lastAddedArray.push(data); // Push the Data object to the array +} +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); // Create a new Layout object +output.push(new Output(CellDesings.wide8, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('', false), testLayout, lastAddedArray)); // Create a new Output object +let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output); +var finalJson = JSON.stringify(searchPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Manga Weeb/moduleTemplate.json b/Module Parser KETSU/Manga Weeb/moduleTemplate.json new file mode 100644 index 0000000..8e4a2ef --- /dev/null +++ b/Module Parser KETSU/Manga Weeb/moduleTemplate.json @@ -0,0 +1,618 @@ +{ + "moduleInfo": { + "moduleName": "Manga Weeb", + "moduleInitials": "MW", + "moduleDesc": "Module for MangaWeeb", + "developer": "ナビル", + "moduleID": "654441634654", + "moduleImage": "https://i.postimg.cc/rptLRW8s/mangaweeb-logo.png", + "moduleVersion": 1.00, + "moduleLenguage": "ENG", + "moduleType": "Image", + "baseURL": "https://mangaweebs.in/", + "moduleDeveloperSite": "https://bilnaa.github.io/main", + "UpdateSite": "", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [ + "" + ] + }, + "global": { + "variables": [ + { + "key": "", + "value": "" + } + ], + "cookies": [ + { + "key": "", + "value": "" + } + ], + "headers": [ + { + "key": "", + "value": "" + } + ] + }, + "mainPage": [ + { + "request": { + "url": "https://mangaweebs.in/", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 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 dataArray = []; var sections = document.querySelectorAll('.col-6.col-md-3.badge-pos-1'); for (chapters of sections) { var title = chapters.querySelector('.h5').textContent.trim(); var image = chapters.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var link = chapters.querySelector('h3 a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var lastchapter = chapters.querySelector('.chapter.font-meta').textContent.trim(); dataArray.push(new Data(image, title, '', lastchapter, '', '', '', false, link)); } output.push(new Output(CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section('Last Chapters', true), null, dataArray)); 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;" + }, + "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 + } + } + ] + } + ] + } + ], + "search": [ + { + "request": { + "url": "https://mangaweebs.in/page//?s=&post_type=wp-manga&op=&author=&artist=&release=&adult=", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "separator": "+", + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 lastAdded = document.querySelector('.c-tabs-item').querySelectorAll('.row.c-tabs-item__content');let lastAddedArray = [];for(var x = 0; x < lastAdded.length; x++) { var last = lastAdded[x]; var image = last.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = last.querySelector('a').title; var link = last.querySelector(' a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var lastchap = last.querySelector('.meta-item.latest-chap a').textContent.trim(); let data = new Data(image, title, lastchap, 'Manhwa', '', '', '', false, link); lastAddedArray.push(data);}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('', false), testLayout, lastAddedArray));let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output);var finalJson = JSON.stringify(searchPageObject);savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + ] + } + ], + "info": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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;}function getStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return data.replace(match, '').trim(); } }}function getHtmlStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return array[x]; } }}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);let emptyKeyValue = [new KeyValue('', '')];var episodes = [];var type = '';var status = document.querySelector('.post-status .summary-content').textContent.trim();var genres = [];genres = Array.from(document.querySelectorAll('.genres-content a')).map(g => g.textContent.trim());var desc = '';desc = document.querySelector('.summary__content.show-more').textContent.trim();var image = '';var title = '';title = document.querySelector('.post-title h1').textContent;image = document.querySelector('.summary_image img').src;image = new ModuleRequest(image, 'get', emptyKeyValue, null);var chapters = document.querySelector('.main.version-chap').querySelectorAll('.wp-manga-chapter ');for (var i = chapters.length - 1; i >= 0; i--) { var element = chapters[i]; var fixedLink = element.querySelector('a').href; var episodeName = element.querySelector('a').textContent; let chapter = new Chapter(episodeName,new ModuleRequest(fixedLink, 'get',emptyKeyValue, null), false); episodes.push(chapter);}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));var finalJson = JSON.stringify(infoPageObject);savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + } + ], + "chapters": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 Text(text) { this.text = text;}var output = [];var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);var emptyKeyValue = [new KeyValue('', '')];var images = document.querySelectorAll('img.wp-manga-chapter-img');for (var x = 0; x < images.length; x++) { var img = images[x].src; output.push(new ModuleRequest(img, 'get', emptyKeyValue, null));}let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue);var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(null, output, null));var finalJson = JSON.stringify(chaptersObject);savedData.innerHTML = finalJson;" + }, + "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": "" + } + } + } + ], + "moduleResolvers": [ + { + "resolverInfo": { + "resolverName": "", + "nameMatches": [ + "" + ], + "developer": "", + "moduleID": "", + "resolverVersion": 1, + "baseURL": "" + }, + "resolver": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": false, + "loadInWebView": false, + "javaScript": "" + }, + "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 + } + } + ] + } + } + ] + } + ], + "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": "" + } + } + ] + } + ], + "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": "" + } + } + ] + } + ] +} diff --git a/Module Parser KETSU/MangaDex/Chapters/Chapters.js b/Module Parser KETSU/MangaDex/Chapters/Chapters.js new file mode 100644 index 0000000..295bdf6 --- /dev/null +++ b/Module Parser KETSU/MangaDex/Chapters/Chapters.js @@ -0,0 +1,86 @@ +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 Text(text) { + this.text = text; +} +var output = []; +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +var emptyKeyValue = [new KeyValue('', '')]; +var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var json = JSON.parse(script); +try { + var baseUrl = json.baseUrl + '/data/'; + var hash = json.chapter.hash; + for (image of json.chapter.data) { + var link = baseUrl + hash + '/' + image; + output.push(new ModuleRequest(link, 'get', emptyKeyValue, null)); + } +} catch{} +if(output.length < 1 ){ + var link = 'https://th.bing.com/th/id/OIP.yYBFzWZ0R970KK2bJhwO9AHaEi?pid=ImgDet&rs=1'; + output.push(new ModuleRequest(link, 'get', emptyKeyValue, null)); +} +let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); +var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, + new JavascriptConfig(false, false, ''), new Output(null, output, null)); +var finalJson = JSON.stringify(chaptersObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/Info/Info.js b/Module Parser KETSU/MangaDex/Info/Info.js new file mode 100644 index 0000000..d487472 --- /dev/null +++ b/Module Parser KETSU/MangaDex/Info/Info.js @@ -0,0 +1,110 @@ +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; +} + +function getStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return data.replace(match, '').trim(); + } + } +} + +function getHtmlStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return array[x]; + } + } +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let emptyKeyValue = [new KeyValue('', '')]; +var episodes = []; +var genresArray = []; +var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var json = JSON.parse(script); +var genres = json.data.attributes.tags; +for (genre of genres) { + genre = genre.attributes.name.en; + genresArray.push(genre); +} +var type = json.data.attributes.originalLanguage.toUpperCase(); +var statut = json.data.attributes.status; +var genres = []; +try { + var desc = json.data.attributes.depion.en.trim(); +} catch (e) { + var desc = json.data.attributes.depion.ja; + if (desc == null) { + desc = ''; + } +} +var title = json.data.attributes.title.en; +if (title == undefined) { + title = json.data.attributes.title.ja +} +var relationships = json.data.relationships; +for (relationship of relationships) { + if (relationship.type == 'cover_art') { + var coverArt = relationship.attributes.fileName; + } +} +var image = 'https://uploads.mangadex.org/covers/' + json.data.id + '/' + coverArt; +image = new ModuleRequest(image, 'get', emptyKeyValue, null); +var nextRequest = `https://api.mangadex.org/manga/${json.data.id}/feed?order[chapter]=asc&order[volume]=asc&limit=500&translatedLanguage[]=en`; +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, genresArray, status, 'Manga', type, 'Eps: ' + episodes.length, episodes)); +var finalJson = JSON.stringify(infoPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/Info/Info1.js b/Module Parser KETSU/MangaDex/Info/Info1.js new file mode 100644 index 0000000..a95185a --- /dev/null +++ b/Module Parser KETSU/MangaDex/Info/Info1.js @@ -0,0 +1,295 @@ +<<<<<<< HEAD + 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; + } + + function getValueFromKey(keys, key) { + for (var x = 0; x < keys.length; x++) { + let tKey = keys[x]; + if (tKey.key == key) { + return tKey.value; + } + } + return ''; + } + var savedData = document.getElementById('ketsu-final-data'); + var parsedJson = JSON.parse(savedData.innerText); + let emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')]; + var image = parsedJson.output.image; + var title = parsedJson.output.title; + var desc = parsedJson.output.description; + var genres = parsedJson.output.genres; + var type = parsedJson.output.field3; + var episodes = parsedJson.output.chapters; + let extraInfo = [new KeyValue('count', '0')]; + var count = parseInt(getValueFromKey(extraInfo, 'count')); + var nextRequest = ''; + var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); + var json = JSON.parse(script); + var total = json.total; + for (chapter of json.data) { + var volume = 'Volume ' + chapter.attributes.volume + ' '; + if (volume == 'Volume ' + null + ' ') { + volume = ''; + } + try { + var chapter1 = 'Chapter ' + chapter.attributes.chapter; + if (chapter1 == 'Chapter ' + null) { + chapter1 = 'Chapter ??'; + } + } catch (e) { + var chapter1 = ''; + } + var chapterName = volume + '' + chapter1; + var link = 'https://api.mangadex.org/at-home/server/' + chapter.id; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + let finalData = new Chapter(chapterName, link, false); + episodes.push(finalData); + } + var url = parsedJson.request.url; + parsedJson.request.url = parsedJson.output.link.url; + if (episodes.length == 0) { + let finalData = new Chapter('NO ENGLISH CHAPTERS AVAILABLE', new ModuleRequest(parsedJson.request.url.replace('api.', ''), 'get', emptyKeyValue, null), true); + episodes.push(finalData); + } + if (episodes.length < total) { + var totalregistered = episodes.length; + var nbChapNotRegistered = total - totalregistered; + if (!url.includes('&offset=500')) { + extraInfo.push(new KeyValue('0', url + '&offset=' + 500)); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=500')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=500', '&offset=1000'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=1000')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=1000', '&offset=1500'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=1500')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=1500', '&offset=2000'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=2000')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=2000', '&offset=2500'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } + } + let infoPageObject = new Info(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(false, false, ''), new Output(image, title, parsedJson.request, desc, genres, status, 'Manga', type, 'Chapters : ' + episodes.length, episodes)); + var finalJson = JSON.stringify(infoPageObject); + savedData.innerHTML = finalJson; +======= + 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; + } + + function getValueFromKey(keys, key) { + for (var x = 0; x < keys.length; x++) { + let tKey = keys[x]; + if (tKey.key == key) { + return tKey.value; + } + } + return ''; + } + var savedData = document.getElementById('ketsu-final-data'); + var parsedJson = JSON.parse(savedData.innerText); + let emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')]; + var image = parsedJson.output.image; + var title = parsedJson.output.title; + var desc = parsedJson.output.description; + var genres = parsedJson.output.genres; + var type = parsedJson.output.field3; + var episodes = parsedJson.output.chapters; + let extraInfo = [new KeyValue('count', '0')]; + var count = parseInt(getValueFromKey(extraInfo, 'count')); + var nextRequest = ''; + var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); + var json = JSON.parse(script); + var total = json.total; + for (chapter of json.data) { + var volume = 'Volume ' + chapter.attributes.volume + ' '; + if (volume == 'Volume ' + null + ' ') { + volume = ''; + } + try { + var chapter1 = 'Chapter ' + chapter.attributes.chapter; + if (chapter1 == 'Chapter ' + null) { + chapter1 = 'Chapter ??'; + } + } catch (e) { + var chapter1 = ''; + } + var chapterName = volume + '' + chapter1; + var link = 'https://api.mangadex.org/at-home/server/' + chapter.id; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + let finalData = new Chapter(chapterName, link, false); + episodes.push(finalData); + } + var url = parsedJson.request.url; + parsedJson.request.url = parsedJson.output.link.url; + if (episodes.length == 0) { + let finalData = new Chapter('NO ENGLISH CHAPTERS AVAILABLE', new ModuleRequest(parsedJson.request.url.replace('api.', ''), 'get', emptyKeyValue, null), true); + episodes.push(finalData); + } + if (episodes.length < total) { + var totalregistered = episodes.length; + var nbChapNotRegistered = total - totalregistered; + if (!url.includes('&offset=500')) { + extraInfo.push(new KeyValue('0', url + '&offset=' + 500)); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=500')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=500', '&offset=1000'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=1000')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=1000', '&offset=1500'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=1500')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=1500', '&offset=2000'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } else if (url.includes('&offset=2000')) { + extraInfo.push(new KeyValue('0', url.replace('&offset=2000', '&offset=2500'))); + extraInfo[0].value = '' + count; + var nextRequest = getValueFromKey(extraInfo, '' + count); + if (episodes.length == total) { + var nextRequest = ''; + } + } + } + let infoPageObject = new Info(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(false, false, ''), new Output(image, title, parsedJson.request, desc, genres, status, 'Manga', type, 'Chapters : ' + episodes.length, episodes)); + var finalJson = JSON.stringify(infoPageObject); + savedData.innerHTML = finalJson; +>>>>>>> 53b1fea (init linux) diff --git a/Module Parser KETSU/MangaDex/MainPage/mainPage1.js b/Module Parser KETSU/MangaDex/MainPage/mainPage1.js new file mode 100644 index 0000000..5de832f --- /dev/null +++ b/Module Parser KETSU/MangaDex/MainPage/mainPage1.js @@ -0,0 +1,236 @@ +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 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 script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var json = JSON.parse(script); +var dataArray = []; +var slides = json.data; +for (slide of slides) { + var relationships = slide.relationships; + for (relationship of relationships) { + if (relationship.type == 'cover_art') { + var coverArt = relationship.attributes.fileName; + } + } + var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + try { + var title = slide.attributes.title.en.trim(); + } catch (err) { + var title = slide.attributes.title.ja.trim(); + } + try { + var desc = slide.attributes.depion.en.trim().replaceAll('\\n', ' '); + } catch (e) { + var desc = slide.attributes.depion.jp; + if (desc == null) { + desc = ''; + } + } + let genras = []; + var genres = slide.attributes.tags; + for (genre of genres) { + genre = genre.attributes.name.en; + genras.push(genre); + } + var finalGenre = genras.toString(); + var statut = slide.attributes.status; + var link = 'https://api.mangadex.org/manga/' + slide.id + '?includes[]=cover_art'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + dataArray.push(new Data(image, title, desc, finalGenre, statut, '', '', false, link)); +} +output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('Seasonal', true), null, dataArray)); +let MainPageObject = new MainPage(new ModuleRequest('https://api.mangadex.org/chapter?limit=32&offset=0&includes[]=user&includes[]=scanlation_group&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&order[readableAt]=desc', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/MainPage/mainpage.js b/Module Parser KETSU/MangaDex/MainPage/mainpage.js new file mode 100644 index 0000000..4740512 --- /dev/null +++ b/Module Parser KETSU/MangaDex/MainPage/mainpage.js @@ -0,0 +1,201 @@ +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 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 script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var nextRequest = script; +var dataArray = []; + +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; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/MainPage/mainpage2.js b/Module Parser KETSU/MangaDex/MainPage/mainpage2.js new file mode 100644 index 0000000..d216638 --- /dev/null +++ b/Module Parser KETSU/MangaDex/MainPage/mainpage2.js @@ -0,0 +1,231 @@ +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 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 = parsedJson.output; +let emptyKeyValue = [new KeyValue('', '')]; +var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var json = JSON.parse(script); +var dataArray = []; +var slides = json.data; +for (slide of slides) { + var title = slide.attributes.title; + if (title == null) {} else { + var relationships = slide.relationships; + for (relationship of relationships) { + if (relationship.type == 'cover_art') { + var coverArt = relationship.attributes.fileName; + } + } + var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + try { + var desc = 'Chapter ' + slide.attributes.chapter; + } catch (e) { + var desc = ''; + } + var statut = slide.attributes.status; + var relationships1 = slide.relationships; + for (relationship of relationships1) { + if (relationship.type == 'manga') { + var id = relationship.id; + } + } + var link = 'https://api.mangadex.org/manga/' + id + '?includes[]=cover_art'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + dataArray.push(new Data(image, title + ' ' + desc, desc, '', '', '', '', false, link)); + } +} +var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 5, 300, new Size(0, 0), null, new Size(0, 0), 10, 0); +output.push(new Output(CellDesings.small2, Orientation.horizontal, DefaultLayouts.none, Paging.leading, new Section('Last Updates', true), testLayout, dataArray)); +let MainPageObject = new MainPage(new ModuleRequest('https://api.mangadex.org/manga?limit=20&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&order[createdAt]=desc&includes[]=cover_art', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/MainPage/mainpage3.js b/Module Parser KETSU/MangaDex/MainPage/mainpage3.js new file mode 100644 index 0000000..ef24ef6 --- /dev/null +++ b/Module Parser KETSU/MangaDex/MainPage/mainpage3.js @@ -0,0 +1,236 @@ +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 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 = parsedJson.output; +let emptyKeyValue = [new KeyValue('', '')]; +var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); +var json = JSON.parse(script); +var dataArray = []; +var slides = json.data; +for (slide of slides) { + var relationships = slide.relationships; + for (relationship of relationships) { + if (relationship.type == 'cover_art') { + var coverArt = relationship.attributes.fileName; + } + } + var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + try { + var title = slide.attributes.title.en.trim(); + } catch (err) { + var title = slide.attributes.title.ja.trim(); + } + try { + var desc = slide.attributes.depion.en.trim().replaceAll('\\n', ' '); + } catch (e) { + var desc = slide.attributes.depion.jp; + if (desc == null) { + desc = ''; + } + } + let genras = []; + var genres = slide.attributes.tags; + for (genre of genres) { + genre = genre.attributes.name.en; + genras.push(genre); + } + var finalGenre = genras.toString(); + var statut = slide.attributes.status; + var link = 'https://api.mangadex.org/manga/' + slide.id + '?includes[]=cover_art'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + dataArray.push(new Data(image, title, desc, finalGenre, statut, '', '', false, link)); +} +output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('Recently added', true), null, dataArray)); +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; \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/Search/Search.js b/Module Parser KETSU/MangaDex/Search/Search.js new file mode 100644 index 0000000..7668c16 --- /dev/null +++ b/Module Parser KETSU/MangaDex/Search/Search.js @@ -0,0 +1,229 @@ +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 paramjs = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); +var parser = JSON.parse(paramjs); +var searchArray = []; +var searchs = parser.data; +for (search of searchs) { + var title = search.attributes.title.en; + if (search.attributes.title.en == undefined) { + title = search.attributes.title.ja; + } + var relationships = search.relationships; + for (relationship of relationships) { + if (relationship.type == 'cover_art') { + var coverArt = relationship.attributes.fileName; + } + } + var image = 'https://uploads.mangadex.org/covers/' + search.id + '/' + coverArt; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var link = 'https://api.mangadex.org/manga/' + search.id + '?includes[]=cover_art'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + try { + var desc = search.attributes.depion.en.trim(); + } catch (e) { + var desc = search.attributes.depion.ja; + if (desc == null) { + desc = ''; + } + } + searchArray.push(new Data(image, title, desc, '', '', '', '', 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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('', false), testLayout, searchArray)); +let searchPageObject = new Search(new ModuleRequest('', '', 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/MangaDex/link.txt b/Module Parser KETSU/MangaDex/link.txt new file mode 100644 index 0000000..67b26d2 --- /dev/null +++ b/Module Parser KETSU/MangaDex/link.txt @@ -0,0 +1 @@ +https://api.mangadex.org/manga?includes[]=cover_art&order[followedCount]=desc&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&hasAvailableChapters=true&ids[]=cc4d6e0e-bb54-4d50-b364-9e52e1a6c962&ids[]=9ebb9963-6b92-4cfc-a570-fbf99294dadb&ids[]=d5261282-fdbf-424a-8e09-48c487085a68&ids[]=cc8dc41e-1f7e-4e52-9a8f-2e24de5e5c9c&ids[]=4ee7159c-9b8c-4fbf-a460-58c4014b28d7&ids[]=64eb46ed-8939-4a13-86a6-ae4d16845716&ids[]=b1ad0635-702d-4762-b7bd-1f9475688b5d&ids[]=e3ffe9c5-29a4-472a-b6f0-79bafa894184&ids[]=73364066-6ef4-4a98-b5f2-e9d4db62f980&ids[]=3a2ac3ce-24ca-46e0-82f7-5408774466e0&ids[]=59e90a84-655d-42c9-b1c3-740e055528b9&ids[]=79f3faba-ec45-4fe0-939a-37dc3ff7ef83&ids[]=bde14646-2fd1-45d3-8ae5-34f5acd52d47&ids[]=055f05ec-30ed-4dde-94e0-7f7cc3c86abb&ids[]=7d0379e6-4358-40bf-b303-f84121cd0b84&ids[]=937bfb69-1c3d-4b1b-8ca5-6fa5b21181aa&ids[]=5befe311-7a61-4940-8f38-dca6578d2543&ids[]=823f0015-aa41-49f5-b893-01d48089882e&ids[]=761a324d-b6e9-4b41-90e5-3bc95184c742&ids[]=61ffa74c-26a2-4a17-8f73-58708e336be5&ids[]=f1b0052a-6290-4c9b-b6ef-a9c8dbe9ed61&ids[]=d73077f0-2355-4314-a907-9dddf04c4d4b&ids[]=6e477e5b-d90c-43be-8324-1516868dfd9c&ids[]=259dfd8a-f06a-4825-8fa6-a2dcd7274230&ids[]=05f282b4-5010-48ff-8729-90059e90de57&ids[]=425f2ccf-581f-42cf-aed3-c3312fcde926&ids[]=db2227a7-7551-4233-991f-cc9dc1f20be2&ids[]=e0c9100e-287d-4417-8c17-b4e696254dc7&ids[]=733fc3ac-deca-444e-bb79-14186e00ccf1&ids[]=0861e776-968f-4549-847b-7e33c6d6555e&ids[]=d8f1d7da-8bb1-407b-8be3-10ac2894d3c6&ids[]=f81026af-1b41-465c-932b-291ce4760c00&ids[]=51573075-d985-442b-94ee-2b2e5dd8d0f8&ids[]=ea57752d-acb7-469e-aa60-43e694ded9a9&ids[]=aed24b2e-b574-4204-9702-cda5cfc567de&ids[]=55a96d76-10a2-4c4b-bc60-3a4aa8325e50&ids[]=4002af95-b501-4cce-b1bd-ccf0b21d5bdc&ids[]=12968534-b5e3-40df-9daf-a939f5586b16&ids[]=dc332d04-d3b0-413c-a767-70f5e451b031&ids[]=32fdfe9b-6e11-4a13-9e36-dcd8ea77b4e4&ids[]=d8d8ca2d-19c1-4c4c-9401-fbe32ec0cdd5&ids[]=1389d660-b9b1-4c6a-81af-eab4dbf3f22b&ids[]=da7bb886-7e6b-4174-83a9-2c478475b846&ids[]=267db3f7-fd9c-4395-ac36-9ffacd772473&ids[]=a1422bad-4598-4018-95ae-888435bafe67&ids[]=bc5f9952-4bb0-4f60-a1ff-b3b2186b560f&ids[]=80422e14-b9ad-4fda-970f-de370d5fa4e5&ids[]=ac4e2459-d995-45ae-8421-4c4cf4a87770&ids[]=0504da67-e636-4b3e-ab9b-48e8d4264fc6&ids[]=cee2ab81-2ab5-4c91-8715-92848ef5b2d4&ids[]=8b459a49-b40f-4614-90a2-dc0a9209a42f&ids[]=3f28c47a-bf8d-4e79-83ca-2e64fe906372&ids[]=fc83ffc3-8ec2-476c-a436-34acd795a1a7&ids[]=98052ef1-49a9-4722-a8f5-60baac437e2e&ids[]=278956f5-4f37-404e-981d-46a171f23279&ids[]=cb43467f-8e3a-4e7f-9af9-7e48c1d6d0dc&ids[]=f801e9c5-b9dc-4aee-987e-fcc16eef2f45&ids[]=a67996ca-ef48-4fd1-84d5-5319afd49108&ids[]=6ebe8b8a-7bac-45f0-8652-4b9d52b95644&limit=59 \ No newline at end of file diff --git a/Module Parser KETSU/MangaDex/moduleTemplate.json b/Module Parser KETSU/MangaDex/moduleTemplate.json new file mode 100644 index 0000000..f85e809 --- /dev/null +++ b/Module Parser KETSU/MangaDex/moduleTemplate.json @@ -0,0 +1,1038 @@ +{ + "moduleInfo": { + "moduleName": "MangaDex", + "moduleInitials": "MD", + "moduleDesc": "Module for MangaDex", + "developer": "ナビル", + "moduleID": "3261521415421", + "moduleImage": "https://i.postimg.cc/4d38NsqH/Manga-Dex-logo.png", + "moduleVersion": 1.1, + "moduleLenguage": "ENG", + "moduleType": "Image", + "changelog": "1.1 - MangaDex can now support more than 500 chapters", + "baseURL": "https://mangadex.org/", + "moduleDeveloperSite": "https://bilnaa.github.io/main", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//MangaDex/moduleTemplate.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [ + "" + ] + }, + "global": { + "variables": [ + { + "key": "", + "value": "" + } + ], + "cookies": [ + { + "key": "", + "value": "" + } + ], + "headers": [ + { + "key": "", + "value": "" + } + ] + }, + "mainPage": [ + { + "request": { + "url": "https://raw.githubusercontent.com/Bilnaa/bilnaa.github.io/main/MangaDex/link.txt", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 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('Referer', 'https://mangadex.org/')];var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', '');var nextRequest = script;var dataArray = [];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;" + }, + "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 + } + } + ] + } + ] + },{ + "request": { + "url": "https://api.mangadex.org/manga?includes[]=cover_art&order[followedCount]=desc&ids[]=f721d5ed-7667-4ff5-8a2f-5e46afaea7d6&ids[]=26937e2f-de0e-498f-9295-7eed381b88b3&ids[]=7e2933d2-8587-4c0f-b69c-4233864b96a8&ids[]=151d1758-f871-46ac-8edc-75ab69b688fe&ids[]=b6b87e4d-c1cc-4d0b-8588-df715dd98624&ids[]=563355c9-65cc-4011-8665-15bdc013d00a&ids[]=975f3334-8395-4393-84a2-50fcaccbcdc0&ids[]=24c0f6c0-ec09-4b83-ab52-a855283bb6e3&ids[]=e3d2897c-ca52-4675-ae0b-0af1bfe534dd&ids[]=4e166e00-a9b3-4f17-8075-441b9745715a&ids[]=4c05b1b4-7da6-4e7a-ae39-5cc2363093f0&ids[]=55a96d76-10a2-4c4b-bc60-3a4aa8325e50&ids[]=aa6c76f7-5f5f-46b6-a800-911145f81b9b&ids[]=c8aebcc7-678e-4682-a727-48febbc325fd&ids[]=70fe972b-3c88-4165-b9a5-3db96d6d2c14&ids[]=1ef6ddce-7930-45ae-a335-9a45604b99f7&ids[]=62608082-d81d-4513-af7d-ae3ffe2423d2&ids[]=770c61b9-0ef2-460b-8c25-c10ab23349ce&ids[]=7433b48f-0bb1-4b72-b88d-07b2939db1ff&ids[]=b603c211-d1f9-4145-a2ac-04dcd5f06329&ids[]=10227f74-9134-4262-b01d-8966bc149c4d&ids[]=308f0355-fedb-4861-a4e0-56fe35ae61d3&ids[]=789642f8-ca89-4e4e-8f7b-eee4d17ea08b&ids[]=248525ed-ad1c-4ddc-a834-5d6ce66a3ad2&ids[]=e1d8b192-fa28-4651-bdaf-d4e0d4418ea8&ids[]=dc34064e-3cd4-48c4-9ec5-550845b96ffb&ids[]=6e445564-d9a8-4862-bff1-f4d6be6dba2c&ids[]=808fdeae-5ea2-4839-8f95-8183dfdddddc&ids[]=b30540c7-bde6-4279-9645-a3eddc5c9e97&ids[]=5ce0d9df-a3cc-421e-bc33-796869b6b9f7&ids[]=304ceac3-8cdb-4fe7-acf7-2b6ff7a60613&limit=31&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 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('Referer', 'https://mangadex.org/')]; var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); var json = JSON.parse(script); var dataArray = []; var slides = json.data; for (slide of slides) { var relationships = slide.relationships; for (relationship of relationships) { if (relationship.type == 'cover_art') { var coverArt = relationship.attributes.fileName; }} var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; image = new ModuleRequest(image, 'get', emptyKeyValue, null); try{ var title = slide.attributes.title.en.trim();} catch(err){ var title = slide.attributes.title.ja.trim(); } try { var desc = slide.attributes.depion.en.trim().replaceAll('\\n', ' '); } catch (e) { var desc = slide.attributes.depion.ja; if (desc == null) { desc = ''; } } let genras = []; var genres = slide.attributes.tags; for (genre of genres) { genre = genre.attributes.name.en; genras.push(genre); } var finalGenre = genras.toString(); var statut = slide.attributes.status; var link = 'https://api.mangadex.org/manga/' + slide.id + '?includes[]=cover_art'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, desc, finalGenre, statut, '', '', false, link)); } output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('Seasonal', true), null, dataArray)); let MainPageObject = new MainPage(new ModuleRequest('https://api.mangadex.org/chapter?includes[]=manga&includes[]=scanlation_group&limit=24&translatedLanguage[]=en&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&order[readableAt]=desc', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); var finalJson = JSON.stringify(MainPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + ] + }, + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 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 = parsedJson.output; let emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')]; var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); var json = JSON.parse(script); var dataArray = []; var slides = json.data; for (slide of slides) { var title = slide.attributes.title; if(title == null){}else{ var relationships = slide.relationships; for (relationship of relationships) { if (relationship.type == 'cover_art') { var coverArt = relationship.attributes.fileName; } } var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; image = new ModuleRequest(image, 'get', emptyKeyValue, null); try { var desc = 'Chapter ' + slide.attributes.chapter; } catch (e) { var desc = ''; } var statut = slide.attributes.status; var relationships1 = slide.relationships; for(relationship of relationships1){ if (relationship.type == 'manga') { var id = relationship.id; }} var link = 'https://api.mangadex.org/manga/' + id + '?includes[]=cover_art'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title + ' ' + desc, desc, '', '', '', '', false, link)); }} var testLayout = new Layout(new Insets(0, 0, 10, 10), 1, 2, 3, 5, 250, new Size(0, 0), null, new Size(0, 0), 10, 0); output.push(new Output(CellDesings.small2, Orientation.horizontal, DefaultLayouts.none, Paging.leading,new Section('Last Updates', true), testLayout, dataArray)); let MainPageObject = new MainPage(new ModuleRequest( 'https://api.mangadex.org/manga?limit=20&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&order[createdAt]=desc&includes[]=cover_art', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); var finalJson = JSON.stringify(MainPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + ] + }, + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 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 = parsedJson.output;let emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')];var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', '');var json = JSON.parse(script);var dataArray = [];var slides = json.data;for (slide of slides) { var relationships = slide.relationships; for (relationship of relationships) { if (relationship.type == 'cover_art') { var coverArt = relationship.attributes.fileName; }} var image = 'https://uploads.mangadex.org/covers/' + slide.id + '/' + coverArt; image = new ModuleRequest(image, 'get', emptyKeyValue, null); try { var title = slide.attributes.title.en.trim(); } catch (err) { var title = slide.attributes.title.ja.trim(); } try { var desc = slide.attributes.depion.en.trim().replaceAll('\\n', ' '); } catch (e) { var desc = slide.attributes.depion.ja; if (desc == null) { desc = ''; } } let genras = []; var genres = slide.attributes.tags; for (genre of genres) { genre = genre.attributes.name.en; genras.push(genre); } var finalGenre = genras.toString(); var statut = slide.attributes.status; var link = 'https://api.mangadex.org/manga/' + slide.id + '?includes[]=cover_art'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, desc, finalGenre, statut, '', '', false, link));}output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('Recently added', true), null, dataArray));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;" + }, + "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 + } + } + ] + } + ] + } + ], + "search": [ + { + "request": { + "url": "https://api.mangadex.org/manga?title=&limit=100&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&includes[]=cover_art&order[createdAt]=asc", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "separator": "+", + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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('Referer', 'https://mangadex.org/')]; var paramjs = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); var parser = JSON.parse(paramjs); var searchArray = []; var searchs = parser.data; for (search of searchs) { var title = search.attributes.title.en; if (search.attributes.title.en == undefined){ title = search.attributes.title.ja; } var relationships = search.relationships; for (relationship of relationships) { if (relationship.type == 'cover_art') { var coverArt = relationship.attributes.fileName; }} var image = 'https://uploads.mangadex.org/covers/' + search.id + '/' + coverArt; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var link = 'https://api.mangadex.org/manga/' + search.id + '?includes[]=cover_art'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); try { var desc = search.attributes.depion.en.trim(); } catch (e) { var desc = search.attributes.depion.ja; if (desc == null) { desc = ''; } } searchArray.push(new Data(image, title, desc, '', '', '', '', 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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section( '', false), testLayout, searchArray)); let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(true, false, ''), output); var finalJson = JSON.stringify(searchPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + ] + } + ], + "info": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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; } function getStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return data.replace(match, '').trim(); } } } function getHtmlStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return array[x]; } } } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); let emptyKeyValue = [new KeyValue('', '')]; var episodes = []; var genresArray = []; var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); var json = JSON.parse(script); var genres = json.data.attributes.tags; for (genre of genres) { genre = genre.attributes.name.en; genresArray.push(genre); } var type = json.data.attributes.originalLanguage.toUpperCase(); var statut = json.data.attributes.status; var genres = []; try { var desc = json.data.attributes.depion.en.trim(); } catch (e) { var desc = json.data.attributes.depion.ja; if (desc == null) { desc = ''; } } var title = json.data.attributes.title.en; if(title==undefined){title = json.data.attributes.title.ja}var relationships = json.data.relationships; for (relationship of relationships) { if (relationship.type == 'cover_art') { var coverArt = relationship.attributes.fileName; }} var image = 'https://uploads.mangadex.org/covers/' + json.data.id + '/' + coverArt; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var nextRequest = `https://api.mangadex.org/manga/${json.data.id}/feed?order[chapter]=asc&order[volume]=asc&limit=500&translatedLanguage[]=en`; 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, genresArray, status, 'Manga', type, 'Eps: ' + episodes.length, episodes)); var finalJson = JSON.stringify(infoPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + }, + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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; } function getValueFromKey(keys, key) { for (var x = 0; x < keys.length; x++) { let tKey = keys[x]; if (tKey.key == key) { return tKey.value; } } return ''; } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerText); let emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')]; var image = parsedJson.output.image; var title = parsedJson.output.title; var desc = parsedJson.output.description; var genres = parsedJson.output.genres; var type = parsedJson.output.field3; var episodes = parsedJson.output.chapters; let extraInfo = [new KeyValue('count', '0')]; var count = parseInt(getValueFromKey(extraInfo, 'count')); var nextRequest = ''; var script = document.querySelector('script').innerText.replace('*/', '').replace('/*', ''); var json = JSON.parse(script); var total = json.total; for (chapter of json.data) { var volume = 'Volume ' + chapter.attributes.volume + ' '; if (volume == 'Volume ' + null + ' ') { volume = ''; } try { var chapter1 = 'Chapter ' + chapter.attributes.chapter; if (chapter1 == 'Chapter ' + null) { chapter1 = 'Chapter ??'; } } catch (e) { var chapter1 = ''; } var chapterName = volume + '' + chapter1; var link = 'https://api.mangadex.org/at-home/server/' + chapter.id; link = new ModuleRequest(link, 'get', emptyKeyValue, null); let finalData = new Chapter(chapterName, link, false); episodes.push(finalData); } var url = parsedJson.request.url; parsedJson.request.url = parsedJson.output.link.url; if (episodes.length == 0) { let finalData = new Chapter('NO ENGLISH CHAPTERS AVAILABLE', new ModuleRequest(parsedJson.request.url .replace('api.', ''), 'get', emptyKeyValue, null), true); episodes.push(finalData); } if (episodes.length < total) { var totalregistered = episodes.length; var nbChapNotRegistered = total - totalregistered; if(!url.includes('&offset=500')){ extraInfo.push(new KeyValue('0', url + '&offset=' + 500)); extraInfo[0].value = '' + count; var nextRequest = getValueFromKey(extraInfo, '' + count); if(episodes.length == total){ var nextRequest = ''; } } else if(url.includes('&offset=500')){ extraInfo.push(new KeyValue('0', url.replace('&offset=500', '&offset=1000'))); extraInfo[0].value = '' + count; var nextRequest = getValueFromKey(extraInfo, '' + count); if(episodes.length == total){ var nextRequest = ''; } } else if(url.includes('&offset=1000')){ extraInfo.push(new KeyValue('0', url.replace('&offset=1000', '&offset=1500'))); extraInfo[0].value = '' + count; var nextRequest = getValueFromKey(extraInfo, '' + count); if(episodes.length == total){ var nextRequest = ''; } } else if(url.includes('&offset=1500')){ extraInfo.push(new KeyValue('0', url.replace('&offset=1500', '&offset=2000'))); extraInfo[0].value = '' + count; var nextRequest = getValueFromKey(extraInfo, '' + count); if(episodes.length == total){ var nextRequest = ''; } } else if(url.includes('&offset=2000')){ extraInfo.push(new KeyValue('0', url.replace('&offset=2000', '&offset=2500'))); extraInfo[0].value = '' + count; var nextRequest = getValueFromKey(extraInfo, '' + count); if(episodes.length == total){ var nextRequest = ''; } } } let infoPageObject = new Info(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), new Extra([ new Commands('', emptyKeyValue) ], extraInfo), new JavascriptConfig(false, false, ''), new Output(image, title, parsedJson.request, desc, genres, status, 'Manga', type, 'Chapters : ' + episodes.length, episodes)); var finalJson = JSON.stringify(infoPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + } + ], + "chapters": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 Text(text) { this.text = text; } var output = []; var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('Referer', 'https://mangadex.org/')]; var script = document.querySelector('script').innerHTML.replace('/*', '').replace('*/', ''); var json = JSON.parse(script); try { var baseUrl = json.baseUrl + '/data/'; var hash = json.chapter.hash; for (image of json.chapter.data) { var link = baseUrl + hash + '/' + image; output.push(new ModuleRequest(link, 'get', emptyKeyValue, null)); } } catch{} if(output.length < 1 ){ var link = 'https://th.bing.com/th/id/OIP.yYBFzWZ0R970KK2bJhwO9AHaEi?pid=ImgDet&rs=1'; output.push(new ModuleRequest(link, 'get', emptyKeyValue, null)); } let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(null, output, null)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson;" + }, + "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": "" + } + } + } + ], + "moduleResolvers": [ + { + "resolverInfo": { + "resolverName": "", + "nameMatches": [ + "" + ], + "developer": "", + "moduleID": "", + "resolverVersion": 1, + "baseURL": "" + }, + "resolver": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": false, + "loadInWebView": false, + "javaScript": "" + }, + "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 + } + } + ] + } + } + ] + } + ], + "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": "" + } + } + ] + } + ], + "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": "" + } + } + ] + } + ] +} diff --git a/Module Parser KETSU/NineMangaFR/Chapters/Chapters1.js b/Module Parser KETSU/NineMangaFR/Chapters/Chapters1.js new file mode 100644 index 0000000..9aab0c9 --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/Chapters/Chapters1.js @@ -0,0 +1,68 @@ +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 getValueFromKey(keys,key) { + for (var x = 0; x < keys.length; x++) { + let tKey = keys[x]; + if (tKey.key == key) { + return tKey.value; + } + } return ''; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('', '')]; + +const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)]; + +var extraInfo = parsedJson.extra.extraInfo; +const count = parseInt(getValueFromKey(extraInfo,'count')) + 1; +var output = []; +if (count > 2) { output = parsedJson.output.images; } + +var newRequest = parsedJson.request.url.replace((count -1)+'.html', count+'.html'); +extraInfo[0].value = ''+count; + +var images = document.querySelectorAll('.pic_box'); +for (image of images) { + let img = image.querySelector('img').src; + output.push(new ModuleRequest(img, 'get', imgsHeaders, null)); +} +if (images.length < 10) { newRequest = ''; } + +const chaptersPageObject = new Chapters(new ModuleRequest(newRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), new Output(null, output, null)); + +savedData.innerHTML = JSON.stringify(chaptersPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/NineMangaFR/Info/Info.js b/Module Parser KETSU/NineMangaFR/Info/Info.js new file mode 100644 index 0000000..ee77a84 --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/Info/Info.js @@ -0,0 +1,78 @@ +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'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('', '')]; + +var image = document.querySelector('.bookface > img').src; +image = new ModuleRequest(image,'get',emptyKeyValue,null); +var title = document.querySelector('[itemprop=\"name').textContent; +var desc = ''; +var statut = ''; +var author = ''; +var chapters = []; + +try { var genres = Array.from(document.querySelector('[itemprop=\"genre').querySelectorAll('a')).map(genre => genre.textContent); } +catch { var genres = ['Manga', title]; } + +try { + desc = document.querySelector('p[itemprop=\"depion\"]').textContent.replace('Résumé: ', ''); + statut = document.querySelector('.red').textContent; + author = document.querySelector('a[itemprop=\"author\"]').textContent; +} catch {} + +for (chapter of document.querySelector('.silde').querySelectorAll('li > a')) { + let chapTitle = chapter.title.replaceAll('\n', '').trim(); + let chapLink = chapter.href.replace('.html', '-10-1.html'); + chapters.push(new Chapter(chapTitle,new ModuleRequest(chapLink,'get',emptyKeyValue,null),false)); +} +chapters.reverse(); + +const 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, statut, 'Chaps: ' + chapters.length, author, '', chapters)); + +savedData.innerHTML = JSON.stringify(infoPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/NineMangaFR/MainPage/MainPage1.js b/Module Parser KETSU/NineMangaFR/MainPage/MainPage1.js new file mode 100644 index 0000000..af834ec --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/MainPage/MainPage1.js @@ -0,0 +1,187 @@ +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', + 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 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 getFile(url) { + var xhr = new XMLHttpRequest(); + xhr.open('get', url, false); + xhr.send(); + return xhr.responseText; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('','')]; + +var output = []; +const datas = [ + {query: '.pop_update', layout: DefaultLayouts.longDoubletsFullConstant, title:'.bookname'}, + {query: '.rightbox', layout: DefaultLayouts.longTripletsDouble, title:'.show_book_desc'} +]; + +for (let data of datas) { + var dataArray = []; + for (manga of document.querySelectorAll(data.query+' li')) { + let image = manga.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + let title = manga.querySelector(data.title).textContent; + let link = manga.querySelector('a').href + '?waring=1'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); + } + output.push(new Output(CellDesings.normal1,Orientation.horizontal,data.layout,Paging.leading, new Section(document.querySelector(data.query+' h1').textContent, true), null, dataArray)); +} + +for (url of ['Update' , 'Book']) { + dataArray = []; + const req = getFile(`https://fr.ninemanga.com/list/New-${url}/`); + const parser = new DOMParser(); + const doc = parser.parseFromString(req, 'text/html'); + + for (manga of doc.querySelectorAll('.leftbox li')) { + let image = manga.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + let title = manga.querySelector('.bookname').innerHTML; + let link = manga.querySelector('a').href + '?waring=1'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); + } + output.push(new Output(CellDesings.normal1, Orientation.horizontal, DefaultLayouts.longTripletsDoubleConstant, Paging.leading, new Section(document.querySelector('.leftbox h1').textContent, true), null, dataArray)); +} + +const mainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); + +savedData.innerHTML = JSON.stringify(mainPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/NineMangaFR/NineMangaFR.json b/Module Parser KETSU/NineMangaFR/NineMangaFR.json new file mode 100644 index 0000000..eb303bc --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/NineMangaFR.json @@ -0,0 +1,119 @@ +{ + "moduleInfo": { + "moduleName": "NineManga", + "moduleInitials": "NM", + "moduleDesc": "Module Ketsu pour NineManga FR", + "developer": "Frizrat", + "moduleID": "23310521", + "moduleImage": "https://i.postimg.cc/6pvDJNKt/ninemanga.png", + "moduleVersion": 1.45, + "changelog": "MainPage : + rapide;", + "moduleLenguage": "FR", + "moduleType": "Image", + "nsfw": false, + "baseURL": "https://fr.ninemanga.com/", + "moduleDeveloperSite": "https://bilnaa.github.io/main/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//NineManga/NineMangaFR.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [] + }, + "global": { "variables": [], "cookies": [], "headers": [] }, + "mainPage": [ + { + "request": { + "url": "https://fr.ninemanga.com/", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": true, + "javaScript": "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', 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 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 getFile(url) { var xhr = new XMLHttpRequest(); xhr.open('get', url, false); xhr.send(); return xhr.responseText;} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')]; var output = [];const datas = [ {query: '.pop_update', layout: DefaultLayouts.longDoubletsFullConstant, title:'.bookname'}, {query: '.rightbox', layout: DefaultLayouts.longTripletsDouble, title:'.show_book_desc'}];for (let data of datas) { var dataArray = []; for (manga of document.querySelectorAll(data.query+' li')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector(data.title).textContent; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); } output.push(new Output(CellDesings.normal1,Orientation.horizontal,data.layout,Paging.leading, new Section(document.querySelector(data.query+' h1').textContent, true), null, dataArray));}for (url of ['Update' , 'Book']) { dataArray = []; const req = getFile(`https://fr.ninemanga.com/list/New-${url}/`); const parser = new DOMParser(); const doc = parser.parseFromString(req, 'text/html'); for (manga of doc.querySelectorAll('.leftbox li')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector('.bookname').innerHTML; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); } output.push(new Output(CellDesings.normal1, Orientation.horizontal, DefaultLayouts.longTripletsDoubleConstant, Paging.leading, new Section(document.querySelector('.leftbox h1').textContent, true), null, dataArray));}const mainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);savedData.innerHTML = JSON.stringify(mainPageObject);" + }, + "output": [] + } + ], + "search": [ { + "request": { + "url": "https://fr.ninemanga.com/search/?wd=&page=.html", + "method": "get", + "headers": [], + "httpBody": null + }, + "separator": "+", + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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', 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 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 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;}var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')];var output = [];var searchArray = [];for (manga of document.querySelectorAll('.bookinfo')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector('.bookname').textContent; let desc = manga.querySelector('dd > p').textContent; let chapName = manga.querySelector('.chaptername').textContent; let views = manga.querySelector('span').textContent; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); searchArray.push( new Data(image, title, desc, chapName, views,'','', false, link));}const layout = 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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('',false), layout, searchArray));const searchPageObject = new Search(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),'',new JavascriptConfig(true,false,''),output);savedData.innerHTML = JSON.stringify(searchPageObject);" + }, + "output": [] + } ], + "info": [ { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];var image = document.querySelector('.bookface > img').src;image = new ModuleRequest(image,'get',emptyKeyValue,null);var title = document.querySelector('[itemprop=\"name').textContent;var desc = '';var statut = '';var author = '';var chapters = [];try { var genres = Array.from(document.querySelector('[itemprop=\"genre').querySelectorAll('a')).map(genre => genre.textContent); }catch { var genres = ['Manga', title]; }try { desc = document.querySelector('p[itemprop=\"depion\"]').textContent.replace('Résumé: ', ''); statut = document.querySelector('.red').textContent; author = document.querySelector('a[itemprop=\"author\"]').textContent;} catch {}for (chapter of document.querySelector('.silde').querySelectorAll('li > a')) { let chapTitle = chapter.title.replaceAll('\\n', '').trim(); let chapLink = chapter.href.replace('.html', '-10-1.html'); chapters.push(new Chapter(chapTitle,new ModuleRequest(chapLink,'get',emptyKeyValue,null),false));}chapters.reverse();const 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, statut, 'Chaps: ' + chapters.length, author, '', chapters));savedData.innerHTML = JSON.stringify(infoPageObject);" + }, + "output": { + "image": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "link": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "title": "", + "description": "", + "genres": [], + "field1": "", + "field2": "", + "field3": "", + "field4": "", + "chapters": [] + } + } ], + "chapters": [ { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { + "commands": [], + "extraInfo": [ { + "key": "count", + "value": "1" + } ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 getValueFromKey(keys,key) { for (var x = 0; x < keys.length; x++) { let tKey = keys[x]; if (tKey.key == key) { return tKey.value; } } return '';} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)];var extraInfo = parsedJson.extra.extraInfo;const count = parseInt(getValueFromKey(extraInfo,'count')) + 1;var output = [];if (count > 2) { output = parsedJson.output.images; }var newRequest = parsedJson.request.url.replace((count -1)+'.html', count+'.html');extraInfo[0].value = ''+count;var images = document.querySelectorAll('.pic_box');for (image of images) { let img = image.querySelector('img').src; output.push(new ModuleRequest(img, 'get', imgsHeaders, null));}if (images.length < 10) { newRequest = ''; }const chaptersPageObject = new Chapters(new ModuleRequest(newRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), new Output(null, output, null));savedData.innerHTML = JSON.stringify(chaptersPageObject);" + }, + "output": { + "videos": { "needsResolver": [], "rawVideo": [] }, + "images": [], + "text": { "text": "" } + } + } ], + "moduleResolvers": [], + "responseCodeFunctions": [], + "helperFunctions": [] +} \ No newline at end of file diff --git a/Module Parser KETSU/NineMangaFR/NineMangaITA.json b/Module Parser KETSU/NineMangaFR/NineMangaITA.json new file mode 100644 index 0000000..5fd45cd --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/NineMangaITA.json @@ -0,0 +1,119 @@ +{ + "moduleInfo": { + "moduleName": "NineManga", + "moduleInitials": "NM", + "moduleDesc": "Ketsu Module for NineManga ITA", + "developer": "Frizrat", + "moduleID": "15271222", + "moduleImage": "https://i.postimg.cc/6pvDJNKt/ninemanga.png", + "moduleVersion": 1.0, + "changelog": "", + "moduleLenguage": "ITA", + "moduleType": "Image", + "nsfw": false, + "baseURL": "https://it.ninemanga.com/", + "moduleDeveloperSite": "https://bilnaa.github.io/main/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//NineManga/NineMangaITA.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [] + }, + "global": { "variables": [], "cookies": [], "headers": [] }, + "mainPage": [ + { + "request": { + "url": "https://it.ninemanga.com/", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": true, + "javaScript": "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', 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 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 getFile(url) { var xhr = new XMLHttpRequest(); xhr.open('get', url, false); xhr.send(); return xhr.responseText;} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')]; var output = [];const datas = [ {query: '.pop_update', layout: DefaultLayouts.longDoubletsFullConstant, title:'.bookname'}, {query: '.rightbox', layout: DefaultLayouts.longTripletsDouble, title:'.show_book_desc'}];for (let data of datas) { var dataArray = []; for (manga of document.querySelectorAll(data.query+' li')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector(data.title).textContent; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); } output.push(new Output(CellDesings.normal1,Orientation.horizontal,data.layout,Paging.leading, new Section(document.querySelector(data.query+' h1').textContent, true), null, dataArray));}for (url of ['Update' , 'Book']) { dataArray = []; const req = getFile(`https://it.ninemanga.com/list/New-${url}/`); const parser = new DOMParser(); const doc = parser.parseFromString(req, 'text/html'); for (manga of doc.querySelectorAll('.leftbox li')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector('.bookname').innerHTML; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); dataArray.push(new Data(image, title, '', '', '', '', '', false, link)); } output.push(new Output(CellDesings.normal1, Orientation.horizontal, DefaultLayouts.longTripletsDoubleConstant, Paging.leading, new Section(document.querySelector('.leftbox h1').textContent, true), null, dataArray));}const mainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output);savedData.innerHTML = JSON.stringify(mainPageObject);" + }, + "output": [] + } + ], + "search": [ { + "request": { + "url": "https://it.ninemanga.com/search/?wd=&page=.html", + "method": "get", + "headers": [], + "httpBody": null + }, + "separator": "+", + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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', 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 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 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;}var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')];var output = [];var searchArray = [];for (manga of document.querySelectorAll('.bookinfo')) { let image = manga.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = manga.querySelector('.bookname').textContent; let desc = manga.querySelector('dd > p').textContent; let chapName = manga.querySelector('.chaptername').textContent; let views = manga.querySelector('span').textContent; let link = manga.querySelector('a').href + '?waring=1'; link = new ModuleRequest(link, 'get', emptyKeyValue, null); searchArray.push( new Data(image, title, desc, chapName, views,'','', false, link));}const layout = 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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('',false), layout, searchArray));const searchPageObject = new Search(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),'',new JavascriptConfig(true,false,''),output);savedData.innerHTML = JSON.stringify(searchPageObject);" + }, + "output": [] + } ], + "info": [ { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { "commands": [], "extraInfo": [] }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];var image = document.querySelector('.bookface > img').src;image = new ModuleRequest(image,'get',emptyKeyValue,null);var title = document.querySelector('[itemprop=\"name').textContent;var desc = '';var statut = '';var author = '';var chapters = [];try { var genres = Array.from(document.querySelector('[itemprop=\"genre').querySelectorAll('a')).map(genre => genre.textContent); }catch { var genres = ['Manga', title]; }try { desc = document.querySelector('p[itemprop=\"depion\"]').textContent.replace('Résumé: ', ''); statut = document.querySelector('.red').textContent; author = document.querySelector('a[itemprop=\"author\"]').textContent;} catch {}for (chapter of document.querySelector('.silde').querySelectorAll('li > a')) { let chapTitle = chapter.title.replaceAll('\\n', '').trim(); let chapLink = chapter.href.replace('.html', '-10-1.html'); chapters.push(new Chapter(chapTitle,new ModuleRequest(chapLink,'get',emptyKeyValue,null),false));}chapters.reverse();const 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, statut, 'Chaps: ' + chapters.length, author, '', chapters));savedData.innerHTML = JSON.stringify(infoPageObject);" + }, + "output": { + "image": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "link": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "title": "", + "description": "", + "genres": [], + "field1": "", + "field2": "", + "field3": "", + "field4": "", + "chapters": [] + } + } ], + "chapters": [ { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { + "commands": [], + "extraInfo": [ { + "key": "count", + "value": "1" + } ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 getValueFromKey(keys,key) { for (var x = 0; x < keys.length; x++) { let tKey = keys[x]; if (tKey.key == key) { return tKey.value; } } return '';} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)];var extraInfo = parsedJson.extra.extraInfo;const count = parseInt(getValueFromKey(extraInfo,'count')) + 1;var output = [];if (count > 2) { output = parsedJson.output.images; }var newRequest = parsedJson.request.url.replace((count -1)+'.html', count+'.html');extraInfo[0].value = ''+count;var images = document.querySelectorAll('.pic_box');for (image of images) { let img = image.querySelector('img').src; output.push(new ModuleRequest(img, 'get', imgsHeaders, null));}if (images.length < 10) { newRequest = ''; }const chaptersPageObject = new Chapters(new ModuleRequest(newRequest, 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), new Output(null, output, null));savedData.innerHTML = JSON.stringify(chaptersPageObject);" + }, + "output": { + "videos": { "needsResolver": [], "rawVideo": [] }, + "images": [], + "text": { "text": "" } + } + } ], + "moduleResolvers": [], + "responseCodeFunctions": [], + "helperFunctions": [] +} \ No newline at end of file diff --git a/Module Parser KETSU/NineMangaFR/Search/Search.js b/Module Parser KETSU/NineMangaFR/Search/Search.js new file mode 100644 index 0000000..2986d51 --- /dev/null +++ b/Module Parser KETSU/NineMangaFR/Search/Search.js @@ -0,0 +1,190 @@ +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', + 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 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 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; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('','')]; + +var output = []; +var searchArray = []; + +for (manga of document.querySelectorAll('.bookinfo')) { + let image = manga.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + let title = manga.querySelector('.bookname').textContent; + let desc = manga.querySelector('dd > p').textContent; + let chapName = manga.querySelector('.chaptername').textContent; + let views = manga.querySelector('span').textContent; + let link = manga.querySelector('a').href + '?waring=1'; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + searchArray.push( new Data(image, title, desc, chapName, views,'','', false, link)); +} +const layout = 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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('',false), layout, searchArray)); + +const searchPageObject = new Search(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),'',new JavascriptConfig(true,false,''),output); + +savedData.innerHTML = JSON.stringify(searchPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/Otakufr/Chapters/Chapters.js b/Module Parser KETSU/Otakufr/Chapters/Chapters.js new file mode 100644 index 0000000..48d865f --- /dev/null +++ b/Module Parser KETSU/Otakufr/Chapters/Chapters.js @@ -0,0 +1,121 @@ +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 Text(text) { + this.text = text; +} +var output = []; +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +<<<<<<< HEAD +var nextRequest = ''; +var extraInfo = parsedJson.extra.extraInfo; +var videos = new Videos([], []); +var extraInfo = [new KeyValue('count', '1')]; +var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url), new KeyValue('X-Requested-With', 'XMLHttpRequest')]; +var links = document.querySelectorAll('iframe'); +for (var x = 0; x < links.length; x++) { + var link = links[x]; + if (link.src.includes('https:')) { + output.push(new NeedsResolver('', new ModuleRequest(link.src, 'get', emptyKeyValue, null))); + videos = new Videos(output, null); + } +} +var count = 1; +for (var y = 0; y < links.length; y++) { + var link = links[y]; + if (link.src.includes('parisanime.com')) { + var url = 'https:' + link.src; + if (x == 0) { + nextRequest = url; + } else { + extraInfo.push(new KeyValue(`${count}`, `${url}`)); + count++; + } + console.log(url); + } +} +if (extraInfo.length >= 2) { + nextRequest = extraInfo[1].value; +} +let emptyExtra = new Extra([new Commands('', emptyKeyValue)], extraInfo); +var chaptersObject = new Chapters(new ModuleRequest(nextRequest, 'get', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, true, ''), new Output(videos, null, null)); +======= +var extraInfo = parsedJson.extra.extraInfo; +var extraInfo = [new KeyValue('count', '0')]; +var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url), new KeyValue('X-Requested-With', 'XMLHttpRequest')]; +var links = document.querySelectorAll('iframe'); +for (var x = 1; x < links.length; x++) { + var link = links[x]; + var id = link.dataset.id; + var lang = link.dataset.type; + var url = 'https:' + link.src; + if (x == 1) { + 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, true, ''), new Output(new Videos([], []), null, null)); +>>>>>>> 53b1fea (init linux) +var finalJson = JSON.stringify(chaptersObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Otakufr/Chapters/chapters1.js b/Module Parser KETSU/Otakufr/Chapters/chapters1.js new file mode 100644 index 0000000..ad591d2 --- /dev/null +++ b/Module Parser KETSU/Otakufr/Chapters/chapters1.js @@ -0,0 +1,114 @@ +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('Referer', parsedJson.request.url), new KeyValue('X-Requested-With', 'XMLHttpRequest')]; +<<<<<<< HEAD +var output = parsedJson.output.videos; +var actualCount = '' + (parseInt(getValueFromKey(extraInfo, 'count'))); +var nextCount = parseInt(actualCount) + 1; +var nextRequest = getValueFromKey(extraInfo, nextCount); +if (!(output.needsResolver.length >= 1)) { + output = new Videos([], []); +} +var videoLink = document.querySelector('.ui.embed').getAttribute('data-url'); +if (!videoLink.includes('sendvid.com')) { + if (!videoLink.includes('https')) { + output.needsResolver.push(new NeedsResolver('', new ModuleRequest('https:' + videoLink, 'get', emptyKeyValue, null))); + } else if (videoLink.includes('sendvid.net')) { + output.needsResolver.push(new NeedsResolver('FEMBED', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); + } else { + output.needsResolver.push(new NeedsResolver('', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); + } +} +extraInfo[0].value = '' + (nextCount); +======= +var output = parsedJson.output.videos;; +var actualCount = getValueFromKey(extraInfo, 'count'); +var nextCount = parseInt(actualCount.match(/\\d+/g)[0]) + 2; +var nextRequest = getValueFromKey(extraInfo, nextCount); +if (actualCount == 0) { + output = new Videos([], []); +} +var videoLink = document.querySelector('.ui.embed').getAttribute('data-url'); +if(videoLink.includes('https')){ + output.needsResolver.push(new NeedsResolver('', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); +} else { + output.needsResolver.push(new NeedsResolver('', new ModuleRequest('https:'+videoLink, 'get', emptyKeyValue, null))); +} +extraInfo[0].value = '' + (parseInt(actualCount) + 1); +>>>>>>> 53b1fea (init linux) +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, true, ''), 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/Otakufr/Info/info.js b/Module Parser KETSU/Otakufr/Info/info.js new file mode 100644 index 0000000..482b1bd --- /dev/null +++ b/Module Parser KETSU/Otakufr/Info/info.js @@ -0,0 +1,112 @@ +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; +} + +function getStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return data.replace(match, '').trim(); + } + } +} + +function getHtmlStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return array[x]; + } + } +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let emptyKeyValue = [new KeyValue('', '')]; +var episodes = []; +var type = 'empty'; +var status = 'Unknown'; +var genres = Array.from(document.querySelectorAll('ul > li:nth-child(5) > ul li a')).map(g => g.textContent.trim()); +var otherinfos = document.querySelectorAll('.list-unstyled li'); +for (var i = 0; i < otherinfos.length; i++) { + let data = otherinfos[i].innerText; + if (data.includes('Type:')) { + type = data.replace('Type:', '').trim(); + } else if (data.includes('Studio d\'animation:')) { + studio = data.replace('Studio d\'animation:', '').trim(); + } else if (data.includes('Statut:')) { + status = data.replace('Statut:', '').trim(); + } +} +var desc = ''; +var synopsysdiv = document.querySelectorAll('.episode.fz-sm.synop p'); +for (var x = 1; x < synopsysdiv.length; x++) { + desc = desc + synopsysdiv[x].innerText; +} +var descdiv = document.querySelector('div.depion'); +if (descdiv) { + desc = descdiv.innerText; +} +var title = document.querySelector('figure > img').title; +var image = document.querySelector('figure > img').src; +image = new ModuleRequest(image, 'get', emptyKeyValue, null); +var chapters = document.querySelectorAll('div.float-right > a'); +for (var i = chapters.length - 1; i >= 0; i--) { + var element = chapters[i]; + var fixedLink = element.href; + var episodeName = element.innerText.split('\n')[0]; + let chapter = new Chapter(episodeName, new ModuleRequest(fixedLink, 'get', emptyKeyValue, null), false); + episodes.push(chapter); +} +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, studio, type, 'Eps: ' + episodes.length, episodes)); +var finalJson = JSON.stringify(infoPageObject); +savedData.innerHTML = finalJson; diff --git a/Module Parser KETSU/Otakufr/MainPage/mainPage1.js b/Module Parser KETSU/Otakufr/MainPage/mainPage1.js new file mode 100644 index 0000000..e6bb82c --- /dev/null +++ b/Module Parser KETSU/Otakufr/MainPage/mainPage1.js @@ -0,0 +1,233 @@ +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 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 emptyKeyValue = [new KeyValue('', '')]; +let output = []; +var last = []; +var animes = []; + +var asks = document.querySelectorAll('.list-group .list-group-item.list-group-item-action'); +for (var i = 0; i < asks.length; i++) { + var ask = asks[i]; + var title = ask.querySelector('figure img').title; + var link = ask.href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = ask.querySelector('figure > img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var status = ask.querySelector('.episode-name').textContent.replace('Statut :', '').trim(); + var finalData = new Data(image, title, '', '', status, 'unknown3', 'unknown4', false, link); + animes.push(finalData); + +} + +var lastepisodes = document.querySelectorAll('.col-md-8.order-1 .episode'); +for (epi of lastepisodes) { + var title = epi.querySelector('figure img').title; + var link = epi.querySelector('a').href; + link = new ModuleRequest(link.replace('episode', 'anime').replace(/-[0-9]+.+/gm, ''), 'get', emptyKeyValue, null); + var image = epi.querySelector('figure > a > img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var langue = epi.querySelector('div.h6 > span').textContent; + var ep = title.match(/[0-9].+/gm)[0]; + title = title.replace(ep, ''); + var finalData = new Data(image, title, '', ep, langue, 'unknown2', 'unknown3', false, link); + last.push(finalData); +} +const dummyQuest = new ModuleRequest('', 'get', emptyKeyValue, null); +const infoText = new Data(dummyQuest, 'Si l\'épisode vous amène vers rien faites une recherche le module n\' pas pu avoir le bon lien', '', '', '', '', '', false, dummyQuest, false); +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.wide6, Orientation.horizontal, DefaultLayouts.wide, Paging.leading, new Section('Dernières ajouts ', true), null, animes)); +output.push(new Output('CELLHelperText', Orientation.horizontal, DefaultLayouts.wideFull, Paging.centered, new Section('', true), layout1, [infoText])); +output.push(new Output(CellDesings.normal2, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.leading, new Section('Derniers Épisodes', true), null, last)); +let MainPageObject = new MainPage(new ModuleRequest('https://otakufr.co/film/', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Otakufr/MainPage/mainPage2.js b/Module Parser KETSU/Otakufr/MainPage/mainPage2.js new file mode 100644 index 0000000..f7fe03d --- /dev/null +++ b/Module Parser KETSU/Otakufr/MainPage/mainPage2.js @@ -0,0 +1,210 @@ +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 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 emptyKeyValue = [new KeyValue('', '')]; +let output = parsedJson.output; +var film = document.querySelectorAll('.card.my-3'); +var nouv = []; +for (fi of film) { + var title = fi.querySelector('.m-0 >a >img').title; + var link = fi.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = fi.querySelector('.m-0 >a >img').src; + var image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var desc = fi.querySelector('.except p').textContent.replace('Synospis: ', ''); + var finalData = new Data(image, title, desc, 'Film', 'Film', 'Film', 'Film', false, link); + nouv.push(finalData); +} +output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('Films', true), null, nouv)); +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; \ No newline at end of file diff --git a/Module Parser KETSU/Otakufr/Search/Search.js b/Module Parser KETSU/Otakufr/Search/Search.js new file mode 100644 index 0000000..81a3992 --- /dev/null +++ b/Module Parser KETSU/Otakufr/Search/Search.js @@ -0,0 +1,218 @@ +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 lastAdded = document.querySelectorAll('div.col-md-8.order-1 > div > article'); +let lastAddedArray = []; +for(var x = 0; x < lastAdded.length; x++) { + let list = lastAdded[x]; + let title = list.querySelector('img').title; + var link = list.querySelector('div.action a').href; + var image = list.querySelector('img').src; + var desc = list.querySelector('.except p').textContent.replaceAll('Synopsis: ', ''); + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + if(title.includes('VF')) { + var field2 = 'VF'; + } else { + var field2 = 'VOSTFR'; + }; + var finalData = new Data(image, title, desc, '', field2, 'unknown', 'unknown', false, link);; + lastAddedArray.push(finalData); +} +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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('', false), testLayout, lastAddedArray));; +let searchPageObject = new Search(new ModuleRequest('', '', 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/Otakufr/moduleTemplate.json b/Module Parser KETSU/Otakufr/moduleTemplate.json new file mode 100644 index 0000000..582ba46 --- /dev/null +++ b/Module Parser KETSU/Otakufr/moduleTemplate.json @@ -0,0 +1,960 @@ +{ + "moduleInfo": { + "moduleName": "OtakuFR", + "moduleInitials": "OT", + "moduleDesc": "Un module qui permet de regarder des en VF et en Vostfr", + "developer": "ナビル", + "moduleID": "6156521323655645", + "moduleImage": "https://i.postimg.cc/2j9g6m8d/otakufr.png", + "changelog": "1.2 - Le module supporte maintenant assez de serveurs pour fonctionner correctement, les titres des épisodes sont tel qu'ils sont sur le site.", + "moduleVersion": 1.22, + "moduleLenguage": "FR", + "moduleType": "Video", + "baseURL": "https://otakufr.co/", + "moduleDeveloperSite": "https://bilnaa.github.io/main/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//Otakufr/moduleTemplate.json", + "preferedServer": "VIDEO", + "preferedDownloadServer": "DOOD", + "blackListed": [""], + "moduleCreatorIdtgGlSmYrWxuwgNcDNYdX": { + "path": "CzppK", + "id": "moduleInfosection", + "sectionsHidden": [], + "options": { + "name": "Module Info", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdsOiJGNwsHpAIMSxBxFMW": { + "path": "XMYuF", + "id": "moduleInfocell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + } + }, + "global": { + "variables": [{ + "key": "", + "value": "" + }], + "cookies": [{ + "key": "", + "value": "" + }], + "headers": [{ + "key": "", + "value": "" + }] + }, + "mainPage": [{ + "request": { + "url": "https://otakufr.co/", + "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 };\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 MainPage ( 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 ( 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 emptyKeyValue = [ new KeyValue( '', '' ) ];\n let output = [ ];\n let last = [ ];\n let animes = [ ];\n let asks = document.querySelectorAll( '.list-group .list-group-item.list-group-item-action' );\n for ( let i = 0; i < asks.length; i++ ) {\n let ask = asks[ i ];\n let title = ask.querySelector( 'figure img' ).title;\n let link = ask.href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n let image = ask.querySelector( 'figure > img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n let status = ask.querySelector( '.episode-name' ).textContent.replace( 'Statut :', '' ).trim( );\n let finalData = new Data( image, title, '', '', status, 'unknown3', 'unknown4', false, link );\n animes.push( finalData );\n }\n let lastepisodes = document.querySelectorAll( '.col-md-8.order-1 .episode' );\n for ( let epi of lastepisodes ) {\n let title = epi.querySelector( 'figure img' ).title;\n let link = epi.querySelector( 'a' ).href;\n link = new ModuleRequest( link.replace( 'episode', 'anime' ).replace( /-[0-9]+.+/gm, '' ), 'get', emptyKeyValue, null );\n let image = epi.querySelector( 'figure > a > img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null ); \n let langue = epi.querySelector( 'div.h6 > span' ).textContent;\n let ep = title.match( /[0-9].+/gm )[ 0 ]; \n langue += ' ' + epi.querySelector('.traduction.float-right.px-2').textContent;\n title = title.replace( ep, '' ); var finalData = new Data( image, title, '', ep, langue, 'unknown2', 'unknown3', false, link ); \n last.push( finalData );\n }\n const dummyQuest = new ModuleRequest( 'https://otakufr.co', 'get', emptyKeyValue, null );\n const infoText = new Data(dummyQuest, 'Si l\\'épisode vous amène vers rien faites une recherche le module n\\'a pas pu avoir le bon lien', '', '', '', '', '', false, dummyQuest, false);\n 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 );\n output.push( new Output( CellDesings.wide6, Orientation.horizontal, DefaultLayouts.wide, Paging.leading, new Section( 'Dernières ajouts', true ), null, animes ) );\n output.push( new Output( 'CELLHelperText', Orientation.horizontal, DefaultLayouts.wideFull, Paging.centered, new Section( '', true ), layout1, [ infoText ] ) );\n output.push( new Output( CellDesings.normal2, Orientation.horizontal, DefaultLayouts.longTripletsDouble, Paging.leading, new Section( 'Derniers Épisodes', true ), null, last ) );\n let MainPageObject = new MainPage( new ModuleRequest( 'https://otakufr.co/film/', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], emptyKeyValue ), new JavascriptConfig( true, false, '' ), output );\n let finalJson = JSON.stringify( MainPageObject );\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": "", + "method": "", + "headers": [{ + "key": "", + "value": "" + }], + "httpBody": null + } + }] + }], + "moduleCreatorIdIbQFGWZhyBORkUWBePNm": { + "path": "WezlQ", + "id": "mainPage,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "openedMenu": "Javascript", + "javascriptEditorScroll": 223 + } + }, { + "request": { + "url": "https://otakufr.co/film/", + "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 */ 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 emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet output = parsedJson.output;\nvar film = document.querySelectorAll( '.card.my-3' );\nvar nouv = [ ];\nfor ( fi of film ) {\n var title = fi.querySelector( '.m-0 >a >img' ).title;\n var link = fi.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = fi.querySelector( '.m-0 >a >img' ).src;\n var image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var desc = fi.querySelector( '.except p' ).textContent.replace( 'Synopsis: ', '' );\n var finalData = new Data( image, title, desc, 'Film', '', 'Film', 'Film', false, link );\n nouv.push( finalData );\n}\noutput.push( new Output( CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section( 'Films', true ), null, nouv ) );\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 + } + }] + }], + "moduleCreatorIdNxZmCTnfncrHoFZyHemc": { + "path": "Udkni", + "id": "mainPage,1cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 29 + } + }], + "search": [{ + "request": { + "url": "https://otakufr.co/toute-la-liste-affiches/page//?q=", + "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.querySelectorAll( 'div.col-md-8.order-1 > div > article' );\nlet lastAddedArray = [ ];\nfor ( var x = 0; x < lastAdded.length; x++ ) {\n let list = lastAdded[ x ];\n let title = list.querySelector( 'img' ).title;\n var link = list.querySelector( 'div.action a' ).href;\n var image = list.querySelector( 'img' ).src;\n var desc = list.querySelector( '.except p' ).textContent.replaceAll( 'Synopsis: ', '' );\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 + } + }] + }], + "moduleCreatorIdEaDgpshivwMvrHLIxpga": { + "path": "IYwdR", + "id": "search,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "openedRequestMenu": "Headers", + "javascriptEditorScroll": 29 + } + }], + "info": [{ + "request": { + "url": "https://otakufr.co/anime/benriya-saitou-san-isekai-ni-iku/", + "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\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 Chapter ( chapName, link, openInWebView ) {\n this.chapName = chapName;\n this.link = link;\n this.openInWebView = openInWebView;\n}\n\nfunction 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\nfunction 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\nfunction 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}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nlet episodes = [ ];\nlet type = 'empty';\nlet status = 'Unknown';\nlet desc = '';\nlet genres = Array.from( document.querySelectorAll( 'ul > li:nth-child(5) > ul li a' ) ).map( g => g.textContent.trim( ) );\nlet otherinfos = document.querySelectorAll( '.list-unstyled li' );\nfor ( var i = 0; i < otherinfos.length; i++ ) {\n let data = otherinfos[ i ].innerText;\n if ( data.includes( 'Type:' ) ) {\n type = data.replace( 'Type:', '' ).trim( );\n } else if ( data.includes( 'Studio d\\'animation:' ) ) {\n studio = data.replace( 'Studio d\\'animation:', '' ).trim( );\n } else if ( data.includes( 'Statut:' ) ) {\n status = data.replace( 'Statut:', '' ).trim( );\n }\n}\n\nlet synopsysdiv = document.querySelectorAll( '.episode.fz-sm.synop p' );\nfor ( let x = 1; x < synopsysdiv.length; x++ ) {\n desc = desc + synopsysdiv[ x ].innerText;\n}\nlet descdiv = document.querySelector( 'div.depion' );\nif ( descdiv ) {\n desc = descdiv.innerText;\n}\nlet title = document.querySelector( 'figure > img' ).title;\nlet image = document.querySelector( 'figure > img' ).src;\nimage = new ModuleRequest( image, 'get', emptyKeyValue, null );\nlet genresArray = [ ];\nlet chapters = document.querySelectorAll( 'div.float-right > a' );\nfor ( let i = chapters.length - 1; i >= 0; i-- ) {\n let element = chapters[ i ];\n let fixedLink = element.href;\n let episodeName = element.innerText.split( '\\n' )[ 0 ];\n let chapter = new Chapter( episodeName, new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ), false );\n episodes.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, studio, 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 + } + }] + }, + "moduleCreatorIdNSDVxtiRoaZrslaSqosI": { + "path": "cbIRm", + "id": "info,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 115, + "openedMenu": "Javascript" + } + }], + "chapters": [{ + "request": { + "url": "https://otakufr.co/episode/isekai-de-cheat-skill-wo-te-ni-shita-ore-wa-08-vostfr/", + "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 nextRequest = '';\nvar extraInfo = parsedJson.extra.extraInfo;\nvar videos = new Videos( [ ], [ ] );\nvar extraInfo = [ new KeyValue( 'count', '1' ) ];\nvar emptyKeyValue = [ new KeyValue( 'Referer', 'parsedJson.request.url' ), new KeyValue( 'X-Requested-With', 'XMLHttpRequest' ) ];\nvar links = document.querySelectorAll( 'iframe' );\nfor ( var x = 0; x < links.length; x++ ) {\n var link = links[ x ];\n if ( link.src.includes( 'https:' ) ) {\n output.push( new NeedsResolver( '', new ModuleRequest( link.src, 'get', emptyKeyValue, null ) ) );\n videos = new Videos( output, null );\n }\n}\nvar count = 1;\nfor ( var y = 0; y < links.length; y++ ) {\n var link = links[ y ];\n if ( link.src.includes( 'parisanime.com' ) ) {\n var url = 'https:' + link.src;\n if ( x == 0 ) {\n nextRequest = url;\n } else {\n extraInfo.push( new KeyValue( `${count}`, `${url}` ) );\n count++;\n }\n console.log( url );\n }\n}\nif ( extraInfo.length >= 2 ) {\n nextRequest = extraInfo[ 1 ].value;\n}\nlet emptyExtra = new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo );\nvar chaptersObject = new Chapters( new ModuleRequest( nextRequest, 'get', emptyKeyValue, null ), emptyExtra, new JavascriptConfig( false, true, '' ), new Output( videos, null, null ) );\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": "" + } + }, + "moduleCreatorIdXyusXjnjpZFNEMiOYHZU": { + "path": "fwfuK", + "id": "chapters,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 29 + } + }, { + "request": { + "url": "", + "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 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('Referer', parsedJson.request.url), new KeyValue('X-Requested-With', 'XMLHttpRequest')];var output = parsedJson.output.videos;var actualCount = '' + (parseInt(getValueFromKey(extraInfo, 'count')));var nextCount = parseInt(actualCount) + 1;var nextRequest = getValueFromKey(extraInfo, nextCount);if (!(output.needsResolver.length >= 1)) { output = new Videos([], []);}var videoLink = document.querySelector('.ui.embed').getAttribute('data-url');if (!videoLink.includes('sendvid.com')) { if (!videoLink.includes('https')) { output.needsResolver.push(new NeedsResolver('', new ModuleRequest('https:' + videoLink, 'get', emptyKeyValue, null))); } else if (videoLink.includes('sendvid.net')) { output.needsResolver.push(new NeedsResolver('FEMBED', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); } else { output.needsResolver.push(new NeedsResolver('', new ModuleRequest(videoLink, 'get', emptyKeyValue, null))); }}extraInfo[0].value = '' + (nextCount);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, true, ''), new Output(output, null, null));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": { + "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": "" + } + }, + "moduleCreatorIdgpsnjPdrfJXqUZvcwaSN": { + "path": "BDWjz", + "id": "chapters,1cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleResolvers": [{ + "resolverInfo": { + "resolverName": "UPSTREAM", + "nameMatches": ["UPSTREAM"], + "developer": "ナビル", + "moduleID": "465456844534345665", + "resolverVersion": 1, + "baseURL": "", + "moduleCreatorIdBSJlGQtnwqqgHExxvbrN": { + "path": "DzAvH", + "id": "moduleResolvers,0,resolverInfosection", + "sectionsHidden": [], + "options": { + "name": "Resolver Parameters", + "listName": "parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdJtftjsApSFWGLyrpGtUo": { + "path": "JaMin", + "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;}function getNext(match, array) { for (var x = 0; x < array.length; x++) { let mMatch = array[x]; if (mMatch.includes(match)) { return array[x + 1]; } }}function unPack(code) { function indent(code) { try { var tabs = 0, old = -1, add = ''; for (var i = 0; i < code.length; i++) { if (code[i].indexOf('{') != -1) tabs++; if (code[i].indexOf('}') != -1) tabs--; if (old != tabs) { old = tabs; add = ''; while (old > 0) { add += '\\t'; old--; } old = tabs; } code[i] = add + code[i]; } } finally { tabs = null; old = null; add = null; } return code; } var env = { eval: function (c) { code = c; }, window: {}, document: {} }; eval('with(env) {' + code + '}'); code = (code + '').replace(/;/g, ';\\n').replace(/{/g, '\\n{\\n').replace(/}/g, '\\n}\\n').replace(/\\n;\\n/g, ';\\n').replace(/\\n\\n/g, '\\n'); code = code.split('\\n'); code = indent(code); code = code.join('\\n'); return code;}var savedData = document.getElementById('ketsu-final-data');var parsedJson = JSON.parse(savedData.innerHTML);var emptyKeyValue = [new KeyValue('Referer', parsedJson.request.url)];var videos = [];var scripts = document.querySelectorAll('p');for(script of scripts){ if(script.innerHTML.includes('eval(function(p,a,c,k,e,d)')){ var unpack = unPack(script.innerText); break; }}var videoLink = unpack.match(/(http.*?\\.m3u8+)/gm)[0];videos.push(new Video('Auto', new ModuleRequest(videoLink, 'get', emptyKeyValue, null)));let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue);var chaptersObject = new Resolver(new ModuleRequest('', '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": "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 + } + }] + }, + "moduleCreatorIdGnSSzkTJKkecVUdRdvsu": { + "path": "suVdv", + "id": "moduleResolvers,0,resolver,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdyVbLsOAVMfUzeoAqwEka": { + "path": "jiPuM", + "id": "moduleResolvers,0section", + "sectionsHidden": [], + "options": { + "name": "Resolver" + }, + "cellsHidden": false + }, + "moduleCreatorIdcmsdibcfpytIuxGopXdJ": { + "path": "resolver", + "id": "moduleResolvers,0,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 " + }, + "moduleCreatorIdokjDaXwkZiLyTzqlWLfq": { + "path": "hjELW", + "id": "responseCodeFunctions,0,functions,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdkHfNRbFKuCAPNpUzZJOF": { + "path": "nEKKE", + "id": "responseCodeFunctions,0section", + "sectionsHidden": [], + "options": { + "name": "Function" + }, + "cellsHidden": false + }, + "moduleCreatorIdjqqiNUImvKtLNpYBLmlJ": { + "path": "incOc", + "id": "responseCodeFunctions,0,section", + "sectionsHidden": [], + "options": { + "name": "Function Parameters", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdnZzVPwtIVrqUWcXnzVYa": { + "path": "IlqCe", + "id": "responseCodeFunctions,0,cell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdkeSKsSDMRyEnNVcRxNXR": { + "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 " + }, + "moduleCreatorIdtdrJkLMPHhxCivyypMYo": { + "path": "UTbRK", + "id": "helperFunctions,0,functions,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorIdvkqdCFuKXbXuoMwAqBqY": { + "path": "yWdze", + "id": "helperFunctions,0section", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdJggJkFgLWYuYneOJbaOP": { + "path": "pHiob", + "id": "helperFunctions,0,section", + "sectionsHidden": [], + "options": { + "name": "Function Parameters", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdNwdaDXsnbtNvCXhydgJj": { + "path": "GAIVz", + "id": "helperFunctions,0,cell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdWToyfzvaJSADHGHIxPHK": { + "path": "functions", + "id": "helperFunctions,0,functionssection", + "sectionsHidden": [], + "options": { + "name": "Function Requests", + "listName": "Request" + }, + "cellsHidden": false + } + }], + "moduleCreatorGlobalOptions": { + "selected": "moduleCreatorIdEaDgpshivwMvrHLIxpga", + "notesData": { + "openedNotes": [], + "activeNote": "oFwjzvDpdfxlaKQrGUwc", + "notes": {} + }, + "hideViews": [], + "id": "rejMsDyxyETyOLV", + "projectName": "OtakuFR" + }, + "moduleCreatorIdpadwxEfRJJtTeyGRnILR": { + "path": "mainPage", + "id": "mainPagesection", + "sectionsHidden": [], + "options": { + "name": "Main Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdDFwjgPrllRjlOrvHSZgL": { + "path": "search", + "id": "searchsection", + "sectionsHidden": [], + "options": { + "name": "Search Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdZbdHFZPnVKtChnbmXlTC": { + "path": "info", + "id": "infosection", + "sectionsHidden": [], + "options": { + "name": "Info Page", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdqwiUQpQOzUTONRhiKnoA": { + "path": "chapters", + "id": "chapterssection", + "sectionsHidden": [], + "options": { + "name": "Chapters", + "listName": "Request" + }, + "cellsHidden": false + }, + "moduleCreatorIdNDVEQHLDMflhvXLIaeua": { + "path": "moduleResolvers", + "id": "moduleResolverssection", + "sectionsHidden": [], + "options": { + "name": "Resolvers", + "listName": "Resolver" + }, + "cellsHidden": false + }, + "moduleCreatorIdQUFtGPTwGjCPrPFzOFqk": { + "path": "responseCodeFunctions", + "id": "responseCodeFunctionssection", + "sectionsHidden": [], + "options": { + "name": "Response Code Funtions", + "listName": "Function" + }, + "cellsHidden": false + }, + "moduleCreatorIdSeBQwrKriCLDcRNfmpMR": { + "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/ScansMangas/Chapters/Chapters1.js b/Module Parser KETSU/ScansMangas/Chapters/Chapters1.js new file mode 100644 index 0000000..11da461 --- /dev/null +++ b/Module Parser KETSU/ScansMangas/Chapters/Chapters1.js @@ -0,0 +1,53 @@ +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; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('', '')]; +const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)]; + +var output = []; +var url = parsedJson.request.url.split('-vf')[0].replace('scan-', 'scans/'); +const nbChap = url.split('-').slice(-1)[0]; +url = url.replace('-'+nbChap, '/'+nbChap); + +for (nbPage in Array.from(document.querySelectorAll('#page-list option'))) { + let img = `${url}/${parseInt(nbPage)+1}.jpg`; + output.push(new ModuleRequest(img,'get',imgsHeaders,null)); +} + +const chaptersPageObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), new Output(null, output, null)); + +savedData.innerHTML = JSON.stringify(chaptersPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/ScansMangas/Info/Info.js b/Module Parser KETSU/ScansMangas/Info/Info.js new file mode 100644 index 0000000..997cef8 --- /dev/null +++ b/Module Parser KETSU/ScansMangas/Info/Info.js @@ -0,0 +1,75 @@ +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'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('', '')]; +const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url.split('/manga')[0])]; + +var image = document.querySelector('.bigcover > .ime > img').src; +image = new ModuleRequest(image, 'get', imgsHeaders, null); +var title = document.querySelector('.infox > h1').textContent; +var desc = ''; +try { desc = document.querySelector('.entry-content-single').textContent.trim(); } catch{} +var genres = []; +var sortie = ''; +var statut = ''; + +for (let info of document.querySelector('.spe').querySelectorAll('span')) { + if (info.textContent.includes('Statut')) { statut = info.textContent.split(': ')[1]; } + else if (info.textContent.includes('Sortie')) { sortie = info.textContent.split(': ')[1]; } + else if (info.textContent.includes('Genre')) { genres = Array.from(info.querySelectorAll('a')).map(g => g.textContent); } +} + +var chapters = Array.from(document.querySelectorAll('.lchx.mobile > a')).map(chap => + new Chapter(chap.textContent.trim(), new ModuleRequest(chap.href, 'get', emptyKeyValue, null), false) +); +chapters.reverse(); + +const 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, sortie, statut, 'Scans: ' + chapters.length, '', chapters)); + +savedData.innerHTML = JSON.stringify(infoPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/ScansMangas/MainPage/MainPage1.js b/Module Parser KETSU/ScansMangas/MainPage/MainPage1.js new file mode 100644 index 0000000..b11d3be --- /dev/null +++ b/Module Parser KETSU/ScansMangas/MainPage/MainPage1.js @@ -0,0 +1,181 @@ +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', + 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 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; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('','')]; +const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)]; + +var output = []; + +const sectionsName = ['', 'Derniers chapitres en ligne', 'Les plus populaires']; +const selectors = { + 'container': ['.slide-content', '.uta', '.serieslist.pop > ul li'], + 'title': ['.ellipsis', 'a > h3', 'h2 > a'], + 'desc': ['.excerpt', undefined, 'h2 > a'], + 'field1': ['.extra-category', 'li > a', '.rating > i'], + 'field2': ['.director', undefined, 'h2 > a'], + + 'cellDesing': [CellDesings.wide11, CellDesings.normal1, CellDesings.wide11], + 'orientation': [Orientation.horizontal, Orientation.vertical, Orientation.horizontal], + 'defaultLayout': [DefaultLayouts.wideFull, DefaultLayouts.longTripletsFullConstant, DefaultLayouts.wideFull] +}; + +for (x in sectionsName) { + var searchArray = []; + let sectionName = sectionsName[x]; + for (container of document.querySelectorAll(selectors['container'][x])) { + let img = container.querySelector('img').src; + img = new ModuleRequest(img, 'get', imgsHeaders, null); + + let title = container.querySelector(selectors['title'][x]).textContent.trim(); + let desc = container.querySelector(selectors['desc'][x])?.textContent.trim(); + if (desc == undefined) { desc = ''; } + let field1 = container.querySelector(selectors['field1'][x]).textContent.trim(); + let field2 = container.querySelector(selectors['field2'][x])?.textContent.trim(); + if (field2 == undefined) { field2 = ''; } + + let link = container.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + searchArray.push(new Data(img, title, desc, field1, field2, '', '', false, link)); + } + output.push(new Output(selectors['cellDesing'][x], selectors['orientation'][x], selectors['defaultLayout'][x], Paging.leading, new Section(sectionName, true), null, searchArray)); +} + +const mainPageObject = new MainPage(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),new JavascriptConfig(true,false,''),output); + +savedData.innerHTML = JSON.stringify(mainPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/ScansMangas/ScansMangasKETSU.json b/Module Parser KETSU/ScansMangas/ScansMangasKETSU.json new file mode 100644 index 0000000..8a3a742 --- /dev/null +++ b/Module Parser KETSU/ScansMangas/ScansMangasKETSU.json @@ -0,0 +1,138 @@ +{ + "moduleInfo": { + "moduleName": "Scans Mangas", + "moduleInitials": "SM", + "moduleDesc": "Module Ketsu pour Scans Mangas", + "developer": "Frizrat", + "moduleID": "21290521", + "moduleImage": "https://i.postimg.cc/MTqkm3hx/Scans-Mangas.png", + "moduleVersion": 1.41, + "changelog": "Les images s'affichent de nouveau", + "moduleLenguage": "FR", + "moduleType": "Image", + "nsfw": false, + "baseURL": "https://scansmangas.me/", + "moduleDeveloperSite": "https://bilnaa.github.io/main", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU//ScansMangas/ScansMangasKETSU.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [] + }, + "global": { + "variables": [], + "cookies": [], + "headers": [] + }, + "mainPage": [ + { + "request": { + "url": "https://scansmangas.me/", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { + "commands": [], + "extraInfo": [] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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', 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 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;} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)]; var output = [];const sectionsName = ['', 'Derniers chapitres en ligne', 'Les plus populaires'];const selectors = { 'container': ['.slide-content', '.uta', '.serieslist.pop > ul li'], 'title': ['.ellipsis', 'a > h3', 'h2 > a'], 'desc': ['.excerpt', undefined, 'h2 > a'], 'field1': ['.extra-category', 'li > a', '.rating > i'], 'field2': ['.director', undefined, 'h2 > a'], 'cellDesing': [CellDesings.wide11, CellDesings.normal1, CellDesings.wide11], 'orientation': [Orientation.horizontal, Orientation.vertical, Orientation.horizontal], 'defaultLayout': [DefaultLayouts.wideFull, DefaultLayouts.longTripletsFullConstant, DefaultLayouts.wideFull]};for (x in sectionsName) { var searchArray = []; let sectionName = sectionsName[x]; for (container of document.querySelectorAll(selectors['container'][x])) { let img = container.querySelector('img').src; img = new ModuleRequest(img, 'get', imgsHeaders, null); let title = container.querySelector(selectors['title'][x]).textContent.trim(); let desc = container.querySelector(selectors['desc'][x])?.textContent.trim(); if (desc == undefined) { desc = ''; } let field1 = container.querySelector(selectors['field1'][x]).textContent.trim(); let field2 = container.querySelector(selectors['field2'][x])?.textContent.trim(); if (field2 == undefined) { field2 = ''; } let link = container.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); searchArray.push(new Data(img, title, desc, field1, field2, '', '', false, link)); } output.push(new Output(selectors['cellDesing'][x], selectors['orientation'][x], selectors['defaultLayout'][x], Paging.leading, new Section(sectionName, true), null, searchArray));}const mainPageObject = new MainPage(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),new JavascriptConfig(true,false,''),output);savedData.innerHTML = JSON.stringify(mainPageObject);" + }, + "output": [] + } + ], + "search": [ + { + "request": { + "url": "https://scansmangas.me/page//?s=&post_type=manga", + "method": "get", + "headers": [], + "httpBody": null + }, + "separator": "+", + "extra": { + "commands": [], + "extraInfo": [] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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', 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 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;}var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML); const emptyKeyValue = [new KeyValue('','')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url.split('/page')[0])];var output = [];var searchArray = [];for (manga of document.querySelectorAll('.bsx')) { let img = manga.querySelector('img').src; img = new ModuleRequest(img, 'get', imgsHeaders, null); let title = manga.querySelector('a').title; let rating = ''; try { rating = manga.querySelector('.rating > i').textContent + '/10'; } catch{} let link = manga.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); searchArray.push(new Data(img,title,'',rating,'','','',false,link));}output.push(new Output(CellDesings.normal1,Orientation.vertical,DefaultLayouts.longTripletsFullConstant,Paging.none,new Section('', true),null,searchArray));const searchPageObject = new Search(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),'',new JavascriptConfig(true,false,''),output);savedData.innerHTML = JSON.stringify(searchPageObject);" + }, + "output": [] + } + ], + "info": [ + { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { + "commands": [], + "extraInfo": [] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url.split('/manga')[0])];var image = document.querySelector('.bigcover > .ime > img').src;image = new ModuleRequest(image, 'get', imgsHeaders, null);var title = document.querySelector('.infox > h1').textContent;var desc = '';try { desc = document.querySelector('.entry-content-single').textContent.trim(); } catch{}var genres = [];var sortie = '';var statut = '';for (let info of document.querySelector('.spe').querySelectorAll('span')) { if (info.textContent.includes('Statut')) { statut = info.textContent.split(': ')[1]; } else if (info.textContent.includes('Sortie')) { sortie = info.textContent.split(': ')[1]; } else if (info.textContent.includes('Genre')) { genres = Array.from(info.querySelectorAll('a')).map(g => g.textContent); }}var chapters = Array.from(document.querySelectorAll('.lchx.mobile > a')).map(chap => new Chapter(chap.textContent.trim(), new ModuleRequest(chap.href, 'get', emptyKeyValue, null), false));chapters.reverse();const 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, sortie, statut, 'Scans: ' + chapters.length, '', chapters));savedData.innerHTML = JSON.stringify(infoPageObject);" + }, + "output": { + "image": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "link": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "title": "", + "description": "", + "genres": [], + "field1": "", + "field2": "", + "field3": "", + "field4": "", + "chapters": [] + } + } + ], + "chapters": [ + { + "request": { + "url": "", + "method": "get", + "headers": [], + "httpBody": null + }, + "extra": { + "commands": [], + "extraInfo": [] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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;} var savedData = document.getElementById('ketsu-final-data');const parsedJson = JSON.parse(savedData.innerHTML);const emptyKeyValue = [new KeyValue('', '')];const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url)];var output = [];var url = parsedJson.request.url.split('-vf')[0].replace('scan-', 'scans/');const nbChap = url.split('-').slice(-1)[0];url = url.replace('-'+nbChap, '/'+nbChap);for (nbPage in Array.from(document.querySelectorAll('#page-list option'))) { let img = `${url}/${parseInt(nbPage)+1}.jpg`; output.push(new ModuleRequest(img,'get',imgsHeaders,null));}const chaptersPageObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), new JavascriptConfig(true, false, ''), new Output(null, output, null));savedData.innerHTML = JSON.stringify(chaptersPageObject);" + }, + "output": { + "videos": { + "needsResolver": [], + "rawVideo": [] + }, + "images": [], + "text": { "text": "" } + } + } + ], + "moduleResolvers": [], + "responseCodeFunctions": [], + "helperFunctions": [] +} \ No newline at end of file diff --git a/Module Parser KETSU/ScansMangas/Search/Search.js b/Module Parser KETSU/ScansMangas/Search/Search.js new file mode 100644 index 0000000..956f594 --- /dev/null +++ b/Module Parser KETSU/ScansMangas/Search/Search.js @@ -0,0 +1,160 @@ +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', + 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 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; +} + +var savedData = document.getElementById('ketsu-final-data'); +const parsedJson = JSON.parse(savedData.innerHTML); +const emptyKeyValue = [new KeyValue('','')]; +const imgsHeaders = [new KeyValue('Referer', parsedJson.request.url.split('/page')[0])]; + +var output = []; +var searchArray = []; + +for (manga of document.querySelectorAll('.bsx')) { + let img = manga.querySelector('img').src; + img = new ModuleRequest(img, 'get', imgsHeaders, null); + let title = manga.querySelector('a').title; + let rating = ''; + try { rating = manga.querySelector('.rating > i').textContent + '/10'; } catch{} + let link = manga.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + searchArray.push(new Data(img,title,'',rating,'','','',false,link)); +} +output.push(new Output(CellDesings.normal1,Orientation.vertical,DefaultLayouts.longTripletsFullConstant,Paging.none,new Section('', true),null,searchArray)); + +const searchPageObject = new Search(new ModuleRequest('','',emptyKeyValue,null),new Extra([new Commands('',emptyKeyValue)],emptyKeyValue),'',new JavascriptConfig(true,false,''),output); + +savedData.innerHTML = JSON.stringify(searchPageObject); \ No newline at end of file diff --git a/Module Parser KETSU/Senmanga/Chapters/.DS_Store b/Module Parser KETSU/Senmanga/Chapters/.DS_Store new file mode 100644 index 0000000..e932f2c Binary files /dev/null and b/Module Parser KETSU/Senmanga/Chapters/.DS_Store differ diff --git a/Module Parser KETSU/Senmanga/Chapters/Chapters.js b/Module Parser KETSU/Senmanga/Chapters/Chapters.js new file mode 100644 index 0000000..18a6026 --- /dev/null +++ b/Module Parser KETSU/Senmanga/Chapters/Chapters.js @@ -0,0 +1,83 @@ +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 Text(text) { + this.text = text; +} +var output = []; +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +var emptyKeyValue = [new KeyValue('', '')]; +var scripts = document.querySelectorAll('p'); +for (script of scripts) { + if (script.innerText.includes('let chapter_url =')) { + var script1 = script.innerText.replace('; var hash = window.location.hash; if (!hash) { hash = 1; } else { hash = parseInt(hash.replace(\"/\", \"#\")) - 1; } $(function () { imgscroll.beLoad($(\"#img_list\"), imglist, hash); });', ''); + var json = eval(script1); + var images = imglist; + for (img of images) { + var img = img.url; + output.push(new ModuleRequest(img, 'get', emptyKeyValue, null)); + } + } +} +let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); +var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(null, output, null)); +var finalJson = JSON.stringify(chaptersObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Senmanga/Info/.DS_Store b/Module Parser KETSU/Senmanga/Info/.DS_Store new file mode 100644 index 0000000..0522256 Binary files /dev/null and b/Module Parser KETSU/Senmanga/Info/.DS_Store differ diff --git a/Module Parser KETSU/Senmanga/Info/Info.js b/Module Parser KETSU/Senmanga/Info/Info.js new file mode 100644 index 0000000..fb4049e --- /dev/null +++ b/Module Parser KETSU/Senmanga/Info/Info.js @@ -0,0 +1,101 @@ +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; +} + +function getStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return data.replace(match, '').trim(); + } + } +} + +function getHtmlStuff(array, match) { + for (var x = 0; x < array.length; x++) { + let data = array[x].innerText; + if (data.includes(match)) { + return array[x]; + } + } +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let emptyKeyValue = [new KeyValue('', '')]; +var episodes = []; +var type = 'Manga'; +try { + type = document.querySelector('div.info > div:nth-child(5)').textContent.trim(); +} catch {} +var status = document.querySelector('div.info > div:nth-child(2)').textContent.trim(); +var genres = []; +genres = Array.from(document.querySelectorAll('div.info > div:nth-child(1) a')).map(g => g.textContent); +var desc = ''; +try { + desc = document.querySelector('div.series-info > div.summary').textContent.trim(); +} catch {} +var title = document.querySelector('.cover img').alt; +var image = document.querySelector('.cover img').src; +image = new ModuleRequest(image, 'get', emptyKeyValue, null); +var chapters = document.querySelectorAll('.chapter-list li'); +for (var x = 0; x < chapters.length; x++) { + let link = chapters[x].querySelector('a').href; + let name = chapters[x].querySelector('a').textContent; + let chapter = new Chapter(name, new ModuleRequest(link, 'get', emptyKeyValue, null), false); + episodes.push(chapter); +} +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, 'Chapters : ' + episodes.length, episodes)); +var finalJson = JSON.stringify(infoPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/Senmanga/Info/test.html b/Module Parser KETSU/Senmanga/Info/test.html new file mode 100644 index 0000000..a0130d7 --- /dev/null +++ b/Module Parser KETSU/Senmanga/Info/test.html @@ -0,0 +1,778 @@ + + + + + + + + Bokura wa Minna Kawaisou / Raw | Sen Manga + + +
+ {"javascriptConfig":{"removeJavascript":true,"loadInWebView":false,"javaScript":""},"output":{"field2":"","field1":"","genres":[""],"field3":"","field4":"","title":"","image":{"url":"","method":"get","headers":[{"key":"","value":""}]},"link":{"url":"","method":"get","headers":[{"key":"","value":""}]},"chapters":[{"link":{"url":"empty","method":"get","headers":[{"key":"key","value":"value"}]},"openInWebView":false,"chapName":""}],"description":""},"request":{"url":"https:\/\/raw.senmanga.com\/Bokura-wa-Minna-Kawaisou","method":"get","headers":[{"key":"","value":""}]},"extra":{"commands":[{"commandName":"","params":[{"key":"","value":""}]}],"extraInfo":[{"key":"","value":""}]},"global":{"cookies":[{"key":"","value":""}],"variables":[],"headers":[{"key":"","value":""}]},"responseInfo":{"headers":[{"key":"Content-Type","value":"text%2Fhtml;%20charset=UTF-8"},{"key":"Strict-Transport-Security","value":"max-age=5184000;%20includeSubDomains;%20preload"},{"key":"report-to","value":"%7B%22endpoints%22%3A%5B%7B%22url%22%3A%22https%3A%5C%2F%5C%2Fa.nel.cloudflare.com%5C%2Freport%5C%2Fv3%3Fs=47tkIUpX%252FaOEcO1ImpyGSyVHZ4MWS1lTfEHTqKqXCn2KaTOuhTxnrhE%252FKxyGsULoLgTGC1dKwFYQooTeetqkZFL3v2pSQRS7gcyVonUoxsC2pFPwuriCd6xPKGj8pij5Zi8Ue0nBKkp0oseS6zIY%22%7D%5D,%22group%22%3A%22cf-nel%22,%22max_age%22%3A604800%7D"},{"key":"x-content-type-options","value":"nosniff"},{"key":"Server","value":"cloudflare"},{"key":"Set-Cookie","value":"XSRF-TOKEN=eyJpdiI6IkdhNXduS01sOTEvaXowaDF1bXZuYnc9PSIsInZhbHVlIjoiWlhrZm5FTjVVVnluaGxNclVrUWdIR2t5SG8wN0xvQ2k4SzFoZ0pkdU5SbjQvNk95ZGErU2xVdDI0VFZwd2dscmsyVVA0OWN5MVhybXNLbzdJSjVYT0R0by9ockV0SHF5QzNlZUtqNE1Mb25yNElKYTgyaGUrSmNrbjl4MTFtNkIiLCJtYWMiOiI4ZTI1NGVhYWM3YWI4OTQwY2NmNjBmNjU1ZjY2OTJkNDU3NDM5ZjkxYTliOTFhMThhN2JkMTM2MjA3MTE4MTIxIn0%253D;%20expires=Tue,%2028-Dec-2021%2018%3A15%3A11%20GMT;%20Max-Age=7200;%20path=%2F;%20samesite=lax,%20raw_sen_manga_session=eyJpdiI6Ild5eUpQOEJLaC9qUmZsTnYxaldDSnc9PSIsInZhbHVlIjoieUtQS1VvdVlWRnRlVTEzMXBIOXdpYUszS2VZUFdzNk8rTXVYOWZsUkN0MGtxbTZoTndPL3BBdWQ3VU1HZFBMbGIyaWRZMTZ1Zkw2cmx4U3dkaVJlREI0eUhwNjVuT2c4NDRyK24zN0tJY2VWSFJTT3h4bWl3R0RnVWUrYTc0YTEiLCJtYWMiOiI2ODkyNjZhNjMxZGRmMzBiYmIzNzYwZTU1ODRmM2NhMTE2OWQ2NmE2N2VhNzVjYWYyNGJmMTg2YzRmYzBlMWI4In0%253D;%20expires=Tue,%2028-Dec-2021%2018%3A15%3A11%20GMT;%20Max-Age=7200;%20path=%2F;%20httponly;%20samesite=lax"},{"key":"Content-Encoding","value":"br"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Cache-Control","value":"no-cache,%20private"},{"key":"cf-ray","value":"6c4c16009894ee44-CDG"},{"key":"Alt-Svc","value":"h3=%22%3A443%22;%20ma=86400,%20h3-29=%22%3A443%22;%20ma=86400,%20h3-28=%22%3A443%22;%20ma=86400,%20h3-27=%22%3A443%22;%20ma=86400"},{"key":"Date","value":"Tue,%2028%20Dec%202021%2016%3A15%3A12%20GMT"},{"key":"nel","value":"%7B%22success_fraction%22%3A0,%22report_to%22%3A%22cf-nel%22,%22max_age%22%3A604800%7D"},{"key":"expect-ct","value":"max-age=604800,%20report-uri=%22https%3A%2F%2Freport-uri.cloudflare.com%2Fcdn-cgi%2Fbeacon%2Fexpect-ct%22"}],"responseUrl":"https:\/\/raw.senmanga.com\/Bokura-wa-Minna-Kawaisou","httpBody":""},"layoutInfo":{"width":414,"height":736}} +
+

+ + + + + +

var _Hasync= _Hasync|| []; _Hasync.push(['Histats.start', '1,1754457,4,0,0,0,00010000']); _Hasync.push(['Histats.fasi', '1']); _Hasync.push(['Histats.track_hits', '']); (function() { var hs = document.createElement('p'); hs.type = 'text/javap'; hs.async = true; hs.src = ('//s10.histats.com/js15_as.js'); (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(hs); })();

+ + web site hit counter + +
+
+
+
+
+
+ Bokura wa Minna Kawaisou +
+
+
+
+ Bokura wa Minna Kawaisou +
+
+ Bookmark +
+
+ 4.3 / 5 + 428 +
+
+
+
+

Bokura wa Minna Kawaisou

+ +
+ 僕らはみんな河合荘 +
+
+
+ Genres: + Comedy, + Romance, + School Life, + Seinen, + Slice Of Life +
+
+ Status: Completed +
+
  • Released: 2010
  • +
    + Author: + Miyahara Ruri +
    +
    + Type: Manga +
    +
    + Views: 10753035 +
    +
    + Updated On: + +
    +
    +
    +
    +
    +
    +
    +

    Synopsis Bokura wa Minna Kawaisou

    +
    +
    +
    +

    Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!

    +
    +
    +
    +
    +
    +

    Share

    +
    +
    + +
    +
    +
    +
    +

    Chapter List

    +
    + +
    + +
    + +
    +
    +
    +

    Comments

    +
    +
    +
    +

    +

    /** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ var disqus_config = function () { this.page.url = "http://raw.senmanga.com/Bokura-wa-Minna-Kawaisou/"; // Replace PAGE_URL with your page's canonical URL variable }; (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('p'); s.src = '//senmanga.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();

    + + Please enable JavaScript to view the + comments powered by Disqus. + +
    +
    +
    + +
    +
    + +

    +

    +

    +

    +

    +

    + + + + + \ No newline at end of file diff --git a/Module Parser KETSU/Senmanga/MainPage/mainPage1.html b/Module Parser KETSU/Senmanga/MainPage/mainPage1.html new file mode 100644 index 0000000..3722e49 --- /dev/null +++ b/Module Parser KETSU/Senmanga/MainPage/mainPage1.html @@ -0,0 +1,274 @@ + + + + \ No newline at end of file diff --git a/Module Parser KETSU/Senmanga/Search/.DS_Store b/Module Parser KETSU/Senmanga/Search/.DS_Store new file mode 100644 index 0000000..499fe27 Binary files /dev/null and b/Module Parser KETSU/Senmanga/Search/.DS_Store differ diff --git a/Module Parser KETSU/Senmanga/Search/Search.js b/Module Parser KETSU/Senmanga/Search/Search.js new file mode 100644 index 0000000..5a15113 --- /dev/null +++ b/Module Parser KETSU/Senmanga/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); + } + + 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 lastAdded = document.querySelector('.listupd').querySelectorAll('.upd'); +let lastAddedArray = []; +for(var x = 0; x < lastAdded.length; x++) { + var last = lastAdded[x]; + var image = last.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + let title = last.querySelector('img').alt; + var link = last.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var lastchap = 'Last chapter : ' + last.querySelector('.chapter').textContent.trim().replace('Ch.',''); + let data = new Data(image, title, lastchap, 'Manga', '', '', '', false, link); + lastAddedArray.push(data); +} +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('', false), testLayout, lastAddedArray)); +let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output); +var finalJson = JSON.stringify(searchPageObject); +savedData.innerHTML = finalJson; + diff --git a/Module Parser KETSU/Senmanga/senmanga.json b/Module Parser KETSU/Senmanga/senmanga.json new file mode 100644 index 0000000..a534c96 --- /dev/null +++ b/Module Parser KETSU/Senmanga/senmanga.json @@ -0,0 +1,619 @@ +{ + "moduleInfo": { + "moduleName": "SenManga", + "moduleInitials": "SM", + "moduleDesc": "Read raw mangas and manhwa from Sen Manga", + "developer": "ナビル", + "moduleID": "0256156210", + "moduleImage": "https://i.postimg.cc/hvP5c4qS/logo-sen.png", + "moduleVersion": 1.1, + "moduleLenguage": "ENG", + "changelog": "1.1 - Now everything is much easier for me", + "moduleType": "Image", + "baseURL": "https://raw.senmanga.com/", + "moduleDeveloperSite": "https://bilnaa.github.io/main/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/Senmanga/senmanga.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [ + "" + ] + }, + "global": { + "variables": [ + { + "key": "", + "value": "" + } + ], + "cookies": [ + { + "key": "", + "value": "" + } + ], + "headers": [ + { + "key": "", + "value": "" + } + ] + }, + "mainPage": [ + { + "request": { + "url": "https://raw.senmanga.com/", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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 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('','')]; let pop = []; popchap = document.querySelectorAll('div.sidebar > div:nth-child(3) > div.serieslist ul li'); for (list of popchap) { let title = list.querySelector('img').alt; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep = 'test'; pop.push(new Data(image, title, '', ep, '', '', '', false, link)); } let lastchap = []; lastchapchap = document.querySelectorAll('.listupd .mng'); for (list of lastchapchap) { let title = list.querySelector('a').title; var link = list.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep =''; try { ep = list.querySelector('.listupd .mng li').textContent.trim().replaceAll('\\n\\n\\n',' ') } catch{} lastchap.push(new Data(image, title, ep, '', '', '', '', false, link)); } let bestmanhwa = []; bestmanhwa1 = document.querySelectorAll('.most_popular li'); for (list of bestmanhwa1) { let title = list.querySelector('.imgseries img').alt; var link = list.querySelector('.imgseries a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var image = list.querySelector('.imgseries img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var ep =''; try { ep = list.querySelector('.leftseries').textContent.trim(); } catch{} var rating = 'Rating: ' + list.querySelector('.rtg').dataset.score; bestmanhwa.push(new Data(image, title, ep, '', rating, '', '', false, link)); } output.push(new Output(CellDesings.wide11, Orientation.horizontal, DefaultLayouts.wideFull, Paging.leading, new Section('', false), null, bestmanhwa)); output.push(new Output(CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.leading, new Section('New Series', true), null,pop)); output.push(new Output(CellDesings.wide9, Orientation.horizontal, DefaultLayouts.wideStrechedList, Paging.leading, new Section('Last Chapters', true), null,lastchap)); 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;" + }, + "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 + } + } + ] + } + ] + } + ], + "search": [ + { + "request": { + "url": "https://raw.senmanga.com/search?s=", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "separator": "%20", + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 lastAdded = document.querySelector('.listupd').querySelectorAll('.upd');let lastAddedArray = [];for(var x = 0; x < lastAdded.length; x++) { var last = lastAdded[x]; var image = last.querySelector('img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); let title = last.querySelector('img').alt; var link = last.querySelector('a').href; link = new ModuleRequest(link, 'get', emptyKeyValue, null); var lastchap = 'Last chapter : ' + last.querySelector('.chapter').textContent.trim().replace('Ch.',''); let data = new Data(image, title, lastchap, 'Manga', '', '', '', false, link); lastAddedArray.push(data);}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('', false), testLayout, lastAddedArray));let searchPageObject = new Search(new ModuleRequest('', '', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], emptyKeyValue), '', new JavascriptConfig(false, false, ''), output);var finalJson = JSON.stringify(searchPageObject);savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + ] + } + ], + "info": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": " 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; } function getStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return data.replace(match, '').trim(); } } } function getHtmlStuff(array, match) { for (var x = 0; x < array.length; x++) { let data = array[x].innerText; if (data.includes(match)) { return array[x]; } } } var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); let emptyKeyValue = [new KeyValue('', '')]; var episodes = []; var type = 'Manga'; try { type = document.querySelector('div.info > div:nth-child(5)').textContent.trim(); } catch {} var status = document.querySelector('div.info > div:nth-child(2)').textContent.trim(); var genres = []; genres = Array.from(document.querySelectorAll('div.info > div:nth-child(1) a')).map(g => g.textContent); var desc = ''; try { desc = document.querySelector('div.series-info > div.summary').textContent.trim(); } catch {} var title = document.querySelector('.cover img').alt; var image = document.querySelector('.cover img').src; image = new ModuleRequest(image, 'get', emptyKeyValue, null); var chapters = document.querySelectorAll('.chapter-list li'); for (var x = 0; x < chapters.length; x++) { let link = chapters[x].querySelector('a').href; let name = chapters[x].querySelector('a').textContent; let chapter = new Chapter(name, new ModuleRequest(link, 'get', [new KeyValue('cookie', 'viewer=1;')], null), false); episodes.push(chapter); } 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, 'Chapters : ' + episodes.length, episodes)); var finalJson = JSON.stringify(infoPageObject); savedData.innerHTML = finalJson;" + }, + "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 + } + } + ] + } + } + ], + "chapters": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "", + "value": "" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": true, + "loadInWebView": false, + "javaScript": "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 Text(text) { this.text = text; } var output = []; var savedData = document.getElementById('ketsu-final-data'); var parsedJson = JSON.parse(savedData.innerHTML); var emptyKeyValue = [new KeyValue('', '')]; var scripts = document.querySelectorAll('p'); for (script of scripts){ if(script.innerText.includes('let chapter_url =')){ var script1 = script.innerText.replace('; var hash = window.location.hash; if (!hash) { hash = 1; } else { hash = parseInt(hash.replace(\"/\", \"#\")) - 1; } $(function () { imgscroll.beLoad($(\"#img_list\"), imglist, hash); });',''); var json = eval(script1); var images = imglist; for (img of images){ var img = img.url; output.push(new ModuleRequest(img, 'get', emptyKeyValue, null)); } } } let emptyExtra = new Extra([new Commands('', emptyKeyValue)], emptyKeyValue); var chaptersObject = new Chapters(new ModuleRequest('', '', emptyKeyValue, null), emptyExtra, new JavascriptConfig(false, false, ''), new Output(null, output, null)); var finalJson = JSON.stringify(chaptersObject); savedData.innerHTML = finalJson;" + }, + "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": "" + } + } + } + ], + "moduleResolvers": [ + { + "resolverInfo": { + "resolverName": "", + "nameMatches": [ + "" + ], + "developer": "", + "moduleID": "", + "resolverVersion": 1, + "baseURL": "" + }, + "resolver": [ + { + "request": { + "url": "", + "method": "get", + "headers": [ + { + "key": "key", + "value": "value" + } + ], + "httpBody": null + }, + "extra": { + "commands": [ + { + "commandName": "", + "params": [ + { + "key": "", + "value": "" + } + ] + } + ], + "extraInfo": [ + { + "key": "", + "value": "" + } + ] + }, + "javascriptConfig": { + "removeJavascript": false, + "loadInWebView": false, + "javaScript": "" + }, + "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 + } + } + ] + } + } + ] + } + ], + "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": "" + } + } + ] + } + ], + "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": "" + } + } + ] + } + ] +} diff --git a/Module Parser KETSU/VoirAnime/Chapters/.DS_Store b/Module Parser KETSU/VoirAnime/Chapters/.DS_Store new file mode 100644 index 0000000..e932f2c Binary files /dev/null and b/Module Parser KETSU/VoirAnime/Chapters/.DS_Store differ diff --git a/Module Parser KETSU/VoirAnime/Chapters/Chapters.js b/Module Parser KETSU/VoirAnime/Chapters/Chapters.js new file mode 100644 index 0000000..f4c3892 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/Chapters/Chapters.js @@ -0,0 +1,87 @@ +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 Text(text) { + this.text = text; +} +var output = []; +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +var emptyKeyValue = [new KeyValue('', '')]; +let newRequest = new ModuleRequest(parsedJson.request.url, 'get', emptyKeyValue, null); +var commands = [new Commands('helperFunction', [new KeyValue('isCustomRequest', 'true'), new KeyValue('name', 'example')])]; +for (const data of parsedJson.global.variables) { + const link = data.value; + if (link.includes('streamtape.com')) { + var fixedLink = link.replace('https://streamtape.com/', 'https://streamta.pe/'); + output.push(new NeedsResolver('', new ModuleRequest(fixedLink, 'get', emptyKeyValue, null))); + } + if (link.includes('videovard.sx') || link.includes('video.sibnet.ru/') || link.includes('yourupload.com') || link.includes('voe') ) { + output.push(new NeedsResolver('', new ModuleRequest(link, 'get', emptyKeyValue, null))); + }else if(link.includes('sbfull') || link.includes('watchsb')) { + output.push(new NeedsResolver('WATCHSB', new ModuleRequest(link, 'get', emptyKeyValue, null))); + } else { + output.push(new NeedsResolver('UNSUPPORTED', new ModuleRequest(link, 'get', emptyKeyValue, null))); + } +} +let emptyExtra = new Extra(commands, emptyKeyValue); +var chaptersObject = new Chapters(newRequest, emptyExtra, new JavascriptConfig(false, false, ''), new Output(new Videos(output, null), null, null), new Extra('', emptyKeyValue)); +var finalJson = JSON.stringify(chaptersObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/VoirAnime/Info/.DS_Store b/Module Parser KETSU/VoirAnime/Info/.DS_Store new file mode 100644 index 0000000..0522256 Binary files /dev/null and b/Module Parser KETSU/VoirAnime/Info/.DS_Store differ diff --git a/Module Parser KETSU/VoirAnime/Info/Info.js b/Module Parser KETSU/VoirAnime/Info/Info.js new file mode 100644 index 0000000..790bc73 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/Info/Info.js @@ -0,0 +1,116 @@ +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; +} + +function getStuff ( array, match ) { + for ( var x = 0; x < array.length; x++ ) { + let data = array[ x ].innerText; + if ( data.includes( match ) ) { + return data.replace( match, '' ).trim( ); + } + } +} + +function getHtmlStuff ( array, match ) { + for ( var x = 0; x < array.length; x++ ) { + let data = array[ x ].innerText; + if ( data.includes( match ) ) { + return array[ x ]; + } + } +} +var savedData = document.getElementById( 'ketsu-final-data' ); +var parsedJson = JSON.parse( savedData.innerHTML ); +let emptyKeyValue = [ new KeyValue( '', '' ) ]; +var episodes = [ ]; + +let metadata = document.querySelectorAll('div.post-content div.post-content_item'); +let type = ''; +let status = ''; + +for(let info of metadata){ + if(info.querySelector('.summary-heading h5').textContent.includes('Status')){ + status = info.querySelector('.summary-content').textContent.trim(); + } else if (info.querySelector('.summary-heading h5').textContent.includes('Type')){ + type = info.querySelector('.summary-content').textContent.trim(); + } +} + +let genres = [ ]; +genres = Array.from( document.querySelectorAll( '.genres-content a' ) ).map( g => g.textContent ); +let desc = document.querySelector( '.depion-summary' ).textContent.trim( ); +let title = document.querySelector( '.post-title h1' ).textContent.trim( ); +if ( title.includes( 'VF' ) ) { + type = 'VF'; +} else { + type = 'VOSTFR' +} +let image = document.querySelector( '.summary_image img' ).src; +image = new ModuleRequest( image, 'get', emptyKeyValue, null ); +var chapters = document.querySelector( '.listing-chapters_wrap .main.version-chap' ).querySelectorAll( 'li' ); +for ( let i = chapters.length - 1; i >= 0; i-- ) { + var element = chapters[ i ]; + var fixedLink = element.querySelector( 'a' ).href; + let episodeName = '' + if(!element.querySelector('a').textContent.includes('FILM')){ + episodeName = `Episode ${element.querySelector('a').textContent.match(`(-)+(.[0-9]+.)+(${type})`)[2]} ${type}`; + } else { + episodeName = element.querySelector('a').textContent; + } + let chapter = new Chapter( episodeName, new ModuleRequest( fixedLink, 'get', emptyKeyValue, null ), false ); + episodes.push( chapter ); +} +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, 'Anime', type, 'Eps: ' + episodes.length, episodes ) ); +var finalJson = JSON.stringify( infoPageObject ); +savedData.innerHTML = finalJson; + \ No newline at end of file diff --git a/Module Parser KETSU/VoirAnime/MainPage/mainPage2.js b/Module Parser KETSU/VoirAnime/MainPage/mainPage2.js new file mode 100644 index 0000000..df2acd0 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/MainPage/mainPage2.js @@ -0,0 +1,187 @@ +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 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 getValueFromKey(keys, key) { + for (var x = 0; x < keys.length; x++) { + let tKey = keys[x]; + if (tKey.key == key) { + return tKey.value; + } + } + return ''; +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let output = parsedJson.output; +let emptyKeyValue = [new KeyValue('', '')]; +var extraInfo = parsedJson.extra.extraInfo; +var count = parseInt(getValueFromKey(extraInfo, 'count')); +var lastAnime = []; +anime = document.querySelectorAll('.col-12.col-md-6.badge-pos-1'); +for (list of anime) { + let title = list.querySelector('.h5 a').textContent; + var link = list.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = ''; + try { + image = list.querySelector('.item-thumb img').srcset.split(' ')[4]; + } catch {} + if (image == null) { + image = list.querySelector('.item-thumb img').src; + } + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + try { + var ep = 'Épisode ' + list.querySelector('.btn-link').textContent; + if (ep.includes('FILM')) { + ep = 'Film' + } + } catch (e) { + ep = '' + }; + lastAnime.push(new Data(image, title, '', ep, '', '', '', false, link)); +} +output.push(new Output(CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section('Derniers épisodes VOSTFR', true), null, lastAnime)); +let MainPageObject = new MainPage(new ModuleRequest('https://voiranime.com/?filter=dubbed', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/VoirAnime/MainPage/mainpage1.js b/Module Parser KETSU/VoirAnime/MainPage/mainpage1.js new file mode 100644 index 0000000..48080c1 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/MainPage/mainpage1.js @@ -0,0 +1,163 @@ +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 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; +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let output = []; +let emptyKeyValue = [new KeyValue('', '')]; +var lastAnime = []; +anime = document.querySelectorAll('.row.c-tabs-item__content'); +for (list of anime) { + let title = list.querySelector('.h4 a').textContent; + var link = list.querySelector('.h4 a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = list.querySelector('img').src; + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + var ep = ''; + lastAnime.push(new Data(image, title, '', ep, '', '', '', false, link)); +} +output.push(new Output(CellDesings.wide6, Orientation.horizontal, DefaultLayouts.wide, Paging.leading, new Section('Derniers Films VOSTFR : ', true), null, lastAnime)); +let extraInfo = [new KeyValue('count', '1'), new KeyValue('0', 'https://voiranime.com/?filter=subbed', new KeyValue('1', 'https://voiranime.com/?filter=dubbed'))]; +let MainPageObject = new MainPage(new ModuleRequest('https://voiranime.com/?filter=subbed', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/VoirAnime/MainPage/mainpage3.js b/Module Parser KETSU/VoirAnime/MainPage/mainpage3.js new file mode 100644 index 0000000..6ec17aa --- /dev/null +++ b/Module Parser KETSU/VoirAnime/MainPage/mainpage3.js @@ -0,0 +1,190 @@ +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 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 getValueFromKey(keys, key) { + for (var x = 0; x < keys.length; x++) { + let tKey = keys[x]; + if (tKey.key == key) { + return tKey.value; + } + } + return ''; +} +var savedData = document.getElementById('ketsu-final-data'); +var parsedJson = JSON.parse(savedData.innerHTML); +let output = parsedJson.output; +let emptyKeyValue = [new KeyValue('', '')]; +var extraInfo = parsedJson.extra.extraInfo; +var count = parseInt(getValueFromKey(extraInfo, 'count')); +var lastAnime = []; +anime = document.querySelectorAll('.col-12.col-md-6.badge-pos-1'); +for (list of anime) { + let title = list.querySelector('.h5 a').textContent; + var link = list.querySelector('a').href; + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + var image = ''; + try { + image = list.querySelector('.item-thumb img').srcset.split(' ')[4]; + } catch {} + if (image == null) { + image = list.querySelector('.item-thumb img').src; + } + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + try { + var ep = 'Épisode ' + list.querySelector('.btn-link').textContent; + if (ep.includes('FILM')) { + ep = 'Film' + } + } catch (e) { + ep = '' + }; + lastAnime.push(new Data(image, title, '', ep, '', '', '', false, link)); +} +output.push(new Output(CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section('Derniers épisodes VF', true), null, lastAnime)); +count = count + 1; +extraInfo[0].value = '' + count; +var nextRequest = getValueFromKey(extraInfo, '' + count); +let MainPageObject = new MainPage(new ModuleRequest('', 'get', emptyKeyValue, null), new Extra([new Commands('', emptyKeyValue)], extraInfo), new JavascriptConfig(true, false, ''), output); +var finalJson = JSON.stringify(MainPageObject); +savedData.innerHTML = finalJson; \ No newline at end of file diff --git a/Module Parser KETSU/VoirAnime/Search/.DS_Store b/Module Parser KETSU/VoirAnime/Search/.DS_Store new file mode 100644 index 0000000..499fe27 Binary files /dev/null and b/Module Parser KETSU/VoirAnime/Search/.DS_Store differ diff --git a/Module Parser KETSU/VoirAnime/Search/Search.js b/Module Parser KETSU/VoirAnime/Search/Search.js new file mode 100644 index 0000000..7e4c412 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/Search/Search.js @@ -0,0 +1,218 @@ +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 lastAdded = document.querySelector('.c-tabs-item').querySelectorAll('.row.c-tabs-item__content'); +let lastAddedArray = []; +for (var x = 0; x < lastAdded.length; x++) { + let list = lastAdded[x]; + let title = list.querySelector('.h4 a').textContent; + var link = list.querySelector('.h4 a').href; + var image = list.querySelector('img').src; + var desc = list.querySelector('.post-content').textContent.replaceAll('\\n', ' '); + link = new ModuleRequest(link, 'get', emptyKeyValue, null); + image = new ModuleRequest(image, 'get', emptyKeyValue, null); + if (title.includes('(VF)')) { + var field2 = 'VF'; + } else { + var field2 = 'VOSTFR'; + }; + var finalData = new Data(image, title, desc, '', field2, 'unknown', 'unknown', false, link);; + lastAddedArray.push(finalData); +} +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.wide11, Orientation.vertical, DefaultLayouts.none, Paging.none, new Section('', false), testLayout, lastAddedArray));; +let searchPageObject = new Search(new ModuleRequest('', '', 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/VoirAnime/helper/helper.js b/Module Parser KETSU/VoirAnime/helper/helper.js new file mode 100644 index 0000000..ae45376 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/helper/helper.js @@ -0,0 +1,41 @@ +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('', '')]; +const data = document.querySelector('.chapter-video-frame').querySelector('p iframe').src; +const commands = [new Commands('variable', [new KeyValue('data', data), new KeyValue('current', parsedJson.request.url)])]; +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/VoirAnime/moduleTemplate.json b/Module Parser KETSU/VoirAnime/moduleTemplate.json new file mode 100644 index 0000000..34b08b5 --- /dev/null +++ b/Module Parser KETSU/VoirAnime/moduleTemplate.json @@ -0,0 +1,1149 @@ +{ + "moduleInfo": { + "moduleName": "VoirAnime", + "moduleInitials": "VA", + "moduleDesc": "Module Ketsu pour VoirAnime, la partie vérification doit être faite sur VOE, Stape, VV ou YU.", + "developer": "ナビル", + "moduleID": "090102", + "moduleImage": "https://1.bp.blogspot.com/-tnOKXWZFR2E/YCZWXHBmzjI/AAAAAAAAACQ/5u3_g7cC6D40AQxnX39AK9TkXo0VVejogCLcBGAsYHQ/s320/Untitled.png", + "moduleVersion": 2.82, + "moduleLenguage": "FR", + "moduleType": "Video", + "changelog": "2.82 - Les films sont de retour", + "baseURL": "https://voiranime.com/", + "moduleDeveloperSite": "https://bilnaa.github.io/main/", + "UpdateSite": "https://raw.githubusercontent.com/mprotmod/Modules-KETSU/main/Module%20Parser%20KETSU/VoirAnime/moduleTemplate.json", + "preferedServer": "", + "preferedDownloadServer": "", + "blackListed": [""], + "moduleCreatorIdfpkUUjEIqzMuFROiuGsB": { + "path": "SmeTR", + "id": "moduleInfosection", + "sectionsHidden": [], + "options": { + "name": "Module Info", + "listName": "Parameters" + }, + "cellsHidden": false + }, + "moduleCreatorIdspYUMaiTPeqWCKNSHWAL": { + "path": "pGifX", + "id": "moduleInfocell", + "sectionsHidden": [], + "options": { + "name": "Parameters" + }, + "cellsHidden": false + } + }, + "global": { + "variables": [{ + "key": "", + "value": "" + }], + "cookies": [{ + "key": "", + "value": "" + }], + "headers": [{ + "key": "", + "value": "" + }] + }, + "mainPage": [{ + "request": { + "url": "https://voiranime.com/?s&post_type=wp-manga&op&author&artist&release&adult&type=MOVIE&language=vostfr&m_orderby=latestD", + "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 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}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = [ ];\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar lastAnime = [ ];\nanime = document.querySelectorAll( '.row.c-tabs-item__content' );\nfor ( list of anime ) {\n let title = list.querySelector( '.h4 a' ).textContent;\n var link = list.querySelector( '.h4 a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = list.querySelector( 'img' ).src;\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n var ep = '';\n lastAnime.push( new Data( image, title, '', ep, '', '', '', false, link ) );\n}\noutput.push( new Output( CellDesings.Special1, Orientation.horizontal, DefaultLayouts.triplets, Paging.leading, new Section( 'Derniers Films VOSTFR : ', true ), null, lastAnime ) );\nlet extraInfo = [ new KeyValue( 'count', '1' ), new KeyValue( '0', 'https://voiranime.com/?filter=subbed', new KeyValue( '1', 'https://voiranime.com/?filter=dubbed' ) ) ];\nlet MainPageObject = new MainPage( new ModuleRequest( 'https://voiranime.com/?filter=subbed', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo ), 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 + } + }] + }], + "moduleCreatorIdOLplcFSGBuHRtZXUUREp": { + "path": "ZdtkO", + "id": "mainPage,0cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 164, + "openedMenu": "Request" + } + }, { + "request": { + "url": "https://voiranime.com/?filter=subbed", + "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 */ 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 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 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 return '';\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = parsedJson.output;\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar extraInfo = parsedJson.extra.extraInfo;\nvar count = parseInt( getValueFromKey( extraInfo, 'count' ) );\nvar lastAnime = [ ];\nanime = document.querySelectorAll( '.col-12.col-md-6.badge-pos-1' );\nfor ( list of anime ) {\n let title = list.querySelector( '.h5 a' ).textContent;\n var link = list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = '';\n try {\n image = list.querySelector( '.item-thumb img' ).srcset.split( ' ' )[ 4 ];\n } catch {}\n if ( image == null ) {\n image = list.querySelector( '.item-thumb img' ).src;\n }\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n try {\n var ep = 'Épisode ' + list.querySelector( '.btn-link' ).textContent;\n if ( ep.includes( 'FILM' ) ) {\n ep = 'Film'\n }\n } catch ( e ) {\n ep = ''\n };\n lastAnime.push( new Data( image, title, '', ep, '', '', '', false, link ) );\n}\noutput.push( new Output( CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section( 'Derniers épisodes VOSTFR', true ), null, lastAnime ) );\nlet MainPageObject = new MainPage( new ModuleRequest( 'https://voiranime.com/?filter=dubbed', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo ), 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 + } + }] + }], + "moduleCreatorIdTCXqbCZYuFpCuBHCPTDq": { + "path": "VDCYp", + "id": "mainPage,1cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }, { + "request": { + "url": "https://voiranime.com/?filter=dubbed", + "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 */ 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 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 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 return '';\n}\nvar savedData = document.getElementById( 'ketsu-final-data' );\nvar parsedJson = JSON.parse( savedData.innerHTML );\nlet output = parsedJson.output;\nlet emptyKeyValue = [ new KeyValue( '', '' ) ];\nvar extraInfo = parsedJson.extra.extraInfo;\nvar count = parseInt( getValueFromKey( extraInfo, 'count' ) );\nvar lastAnime = [ ];\nanime = document.querySelectorAll( '.col-12.col-md-6.badge-pos-1' );\nfor ( list of anime ) {\n let title = list.querySelector( '.h5 a' ).textContent;\n var link = list.querySelector( 'a' ).href;\n link = new ModuleRequest( link, 'get', emptyKeyValue, null );\n var image = '';\n try {\n image = list.querySelector( '.item-thumb img' ).srcset.split( ' ' )[ 4 ];\n } catch {}\n if ( image == null ) {\n image = list.querySelector( '.item-thumb img' ).src;\n }\n image = new ModuleRequest( image, 'get', emptyKeyValue, null );\n try {\n var ep = 'Épisode ' + list.querySelector( '.btn-link' ).textContent;\n if ( ep.includes( 'FILM' ) ) {\n ep = 'Film'\n }\n } catch ( e ) {\n ep = ''\n };\n lastAnime.push( new Data( image, title, '', ep, '', '', '', false, link ) );\n}\noutput.push( new Output( CellDesings.normal1, Orientation.vertical, DefaultLayouts.longTripletsFullConstant, Paging.leading, new Section( 'Derniers épisodes VF', true ), null, lastAnime ) );\ncount = count + 1;\nextraInfo[ 0 ].value = '' + count;\nvar nextRequest = getValueFromKey( extraInfo, '' + count );\nlet MainPageObject = new MainPage( new ModuleRequest( '', 'get', emptyKeyValue, null ), new Extra( [ new Commands( '', emptyKeyValue ) ], extraInfo ), 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 + } + }] + }], + "moduleCreatorIdoQrEFMWkWAfmqMFEdBgB": { + "path": "EAXAv", + "id": "mainPage,2cell", + "sectionsHidden": [], + "options": { + "name": "Request" + }, + "cellsHidden": false, + "javascriptEditorScroll": 0 + } + }], + "search": [{ + "request": { + "url": "https://voiranime.com/page//?s=&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();})(); /*/* */

    +

    + + +

    +

    +
    +
    + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Sayonara Watashi no Cramer VOSTFR +
    + 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 +
    + +
    +
    +

     2021Année

    +

     10Commentaires

    +

     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
    • +
      +
    +
    +
    +
    +

    +

    +

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + Sibnet +
    +
    + Uqload +
    +
    + Upvid +
    +
    + Mytv +
    +
    +
    +
    + Sibnet +
    +
    + Uqload +
    +
    + Upvid +
    +
    + DStream +
    +
    + Mytv +
    +
    +
    +
    +
    +
    +
    + 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.." });

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
      Info
    +
    +
    +
    +
    + Les épisodes sont en VOSTFR +
    +
    +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    + Episode 01 +
    +
    + +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    + Episode 02 +
    +
    + +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    +
    +
    + +
      Info
    +
    +
    +
    +
    + Les épisodes sont en VOSTFR +
    +
    +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    + Episode 01 +
    +
    + +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    + Episode 02 +
    +
    + +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
      Info
    +
    +
    +
    +
    + Les épisodes sont en VOSTFR +
    +
    +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    + Episode 01 +
    +
    + +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    + Episode 02 +
    +
    + +
    +
    +
    + +
     Qualité
    + HD 720p +
    +
    +
    +
    +
    +
    +
    + +
      Info
    +
    +
    +
    +
    + Les épisodes sont en VOSTFR +
    +
    +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    + Episode 01 +
    +
    + +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    + Episode 02 +
    +
    + +
    +
    +
    + +
     Qualité
    + FHD 1080p +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    •   Animes Similaires
    • +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +   Commentaires (10) +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   skyplan94 + 10 April 2021 11:44 +
    +
    +
    +
    + Déjà que je trouve le foot féminin éclater dans la réalité mais alors en anime non merci +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Sankovic + 9 April 2021 15:38 +
    +
    +
    +
    + Xiaoploumi, +
    Un bon anime de foot ça existe, regarde Giant Killing +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Hakim1702 + 6 April 2021 15:23 +
    +
    +
    +
    + Le style graphique est beau, mais bon on accroche pas sur l’anime +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Sarah Sow + 5 April 2021 20:34 +
    +
    +
    +
    + j’ai pas réussi à accrocher +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Sarah Sow + 5 April 2021 16:52 +
    +
    +
    +
    + Xiaoploumi, +
    c’est 0xeno qui va être content qd l’adaptation va sortir +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   YARE YARE DAZE + 5 April 2021 12:54 +
    +
    +
    +
    + Xiaoploumi, +
    Yeah blue lock à donf +
    +
    +
    + -------------------- +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Xiaoploumi + 5 April 2021 09:07 +
    +
    +
    +
    + Je pense qu'il va falloir attendre l'adaptation du manga Blue Lock pour enfin voir un bon anime sur le football. Parce que là sérieux. +
    +
    +
    + -------------------- +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   Jikamasu + 5 April 2021 01:32 +
    +
    +
    +
    + Poah l'animation horrible. Mais a part ça ça va. C'est un peu marrant quelque fois. Rien de remarquable c'est un anime "normal" sans réel qualité mais ca veut pas dire que c'est nul (avis perso) +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   LevraiHentai-piece + 5 April 2021 00:08 +
    +
    +
    +
    + sirineaib, +
    Oui c'est bizarre +
    +
    +
    + -------------------- +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + avatar +
    +
    +
    +
    +
    +
    +   sirineaib + 4 April 2021 22:04 +
    +
    +
    +
    + c'est bizzarre qu'il ne soit pas classé "sport" +
    +
    +
    + -------------------- +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    Information
    +
    Seuls les membres peuvent ajouter un commentaire. +
    + Merci de vous enregister ! +
    + +
    + +
    + +
    + +
    + +
    + +
    +

    $("#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"