✨ Adapt CAD filter for new HTML, add test
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 24 Oct 2021 12:20:55 +0000 (14:20 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 24 Oct 2021 12:20:55 +0000 (14:20 +0200)
src/main/java/net/pterodactylus/rhynodge/filters/comics/CtrlAltDelComicFilter.java
src/test/kotlin/net/pterodactylus/rhynodge/filters/comics/CtrlAltDelComicFilterTest.kt [new file with mode: 0644]
src/test/resources/net/pterodactylus/rhynodge/filters/comics/ctrl-alt-del.html [new file with mode: 0644]

index 7401369..dd52894 100644 (file)
 
 package net.pterodactylus.rhynodge.filters.comics;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import net.pterodactylus.rhynodge.filters.ComicSiteFilter;
 
-import com.google.common.base.Function;
 import com.google.common.base.Optional;
-import com.google.common.collect.FluentIterable;
 import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 
 /**
@@ -37,31 +36,18 @@ public class CtrlAltDelComicFilter extends ComicSiteFilter {
 
        @Override
        protected Optional<String> extractTitle(Document document) {
-               return Optional.of("");
+               return Optional.fromNullable(document.select("article.comic div#comicblog h3.title-display").text());
        }
 
        @Override
        protected List<String> extractImageUrls(Document document) {
-               Elements imageTags = document.select("#content img");
-               return FluentIterable.from(imageTags).transform(new Function<Element, String>() {
-
-                       @Override
-                       public String apply(Element input) {
-                               return input.attr("src");
-                       }
-               }).toList();
+               Elements imageTags = document.select("article.comic div.comicpage img.comic-display");
+               return imageTags.stream().map(input -> input.attr("src")).collect(Collectors.toList());
        }
 
        @Override
        protected List<String> extractImageComments(Document document) {
-               Elements imageTags = document.select("#content img");
-               return FluentIterable.from(imageTags).transform(new Function<Element, String>() {
-
-                       @Override
-                       public String apply(Element input) {
-                               return input.attr("title");
-                       }
-               }).toList();
+               return Collections.emptyList();
        }
 
 }
diff --git a/src/test/kotlin/net/pterodactylus/rhynodge/filters/comics/CtrlAltDelComicFilterTest.kt b/src/test/kotlin/net/pterodactylus/rhynodge/filters/comics/CtrlAltDelComicFilterTest.kt
new file mode 100644 (file)
index 0000000..e9817ed
--- /dev/null
@@ -0,0 +1,30 @@
+package net.pterodactylus.rhynodge.filters.comics
+
+import net.pterodactylus.rhynodge.filters.ResourceLoader
+import net.pterodactylus.rhynodge.states.ComicState
+import net.pterodactylus.rhynodge.states.ComicState.Comic
+import net.pterodactylus.rhynodge.states.ComicState.Strip
+import net.pterodactylus.rhynodge.states.HtmlState
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.contains
+import org.junit.Test
+
+/**
+ * Unit test for [CtrlAltDelComicFilter].
+ */
+class CtrlAltDelComicFilterTest {
+
+       private val comicFilter = CtrlAltDelComicFilter()
+       private val htmlState = ResourceLoader
+               .loadDocument(CtrlAltDelComicFilter::class.java, "ctrl-alt-del.html", "https://cad-comic.com/")
+               .let { HtmlState("https://cad-comic.com/", it) }
+
+       @Test
+       fun `filter can parse comic correctly`() {
+               val comicState = comicFilter.filter(htmlState) as ComicState
+               assertThat(comicState.comics(), contains(
+                       Comic("The Starcaster Chronicles 09.14").add(Strip("https://cad-comic.com/wp-content/uploads/2021/10/09.14a-1.x93667.png", ""))
+               ))
+       }
+
+}
diff --git a/src/test/resources/net/pterodactylus/rhynodge/filters/comics/ctrl-alt-del.html b/src/test/resources/net/pterodactylus/rhynodge/filters/comics/ctrl-alt-del.html
new file mode 100644 (file)
index 0000000..7386490
--- /dev/null
@@ -0,0 +1,696 @@
+<!DOCTYPE html>
+<html lang="en-US">
+<head>
+
+<link rel="stylesheet" type="text/css" href="https://cad-comic.com/wp-content/plugins/wordpress-bootstrap-css/resources/bootstrap-3.4.1/css/bootstrap.x93667.css" />
+
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Ctrl+Alt+Del Comic - A comic about video games! Ctrl+Alt+Del</title>
+<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
+
+
+
+<!--[if lt IE 9]>\r
+      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>\r
+      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>\r
+    <![endif]-->
+
+<script src="https://hb.vntsm.com/v3/live/ad-manager.min.js" type="text/javascript" data-site-id="5df8bbade8863a127ae39f7f" data-mode="scan" async></script>
+
+
+<title>Ctrl+Alt+Del Comic - A comic about video games!</title>
+<meta name="description" content="A tri-weekly webcomic about video games and gamers since 2002!" />
+<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
+<link rel="canonical" href="https://cad-comic.com/" />
+<link rel="next" href="https://cad-comic.com/page/2/" />
+<meta property="og:locale" content="en_US" />
+<meta property="og:type" content="website" />
+<meta property="og:title" content="Ctrl+Alt+Del Comic" />
+<meta property="og:description" content="A tri-weekly webcomic about video games and gamers since 2002!" />
+<meta property="og:url" content="https://cad-comic.com/" />
+<meta property="og:site_name" content="Ctrl+Alt+Del Comic" />
+<meta name="twitter:card" content="summary_large_image" />
+<meta name="twitter:site" content="@timcad" />
+<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://cad-comic.com/#organization","name":"Ctrl+Alt+Del Comic","url":"https://cad-comic.com/","sameAs":["https://www.facebook.com/CADComic","https://www.youtube.com/user/CtrlAltDelComic","https://twitter.com/timcad"],"logo":{"@type":"ImageObject","@id":"https://cad-comic.com/#logo","inLanguage":"en-US","url":"https://cad-comic.com/wp-content/uploads/2018/12/logo-cad.png","contentUrl":"https://cad-comic.com/wp-content/uploads/2018/12/logo-cad.png","width":141,"height":81,"caption":"Ctrl+Alt+Del Comic"},"image":{"@id":"https://cad-comic.com/#logo"}},{"@type":"WebSite","@id":"https://cad-comic.com/#website","url":"https://cad-comic.com/","name":"Ctrl+Alt+Del Comic","description":"A comic about video games!","publisher":{"@id":"https://cad-comic.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://cad-comic.com/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"CollectionPage","@id":"https://cad-comic.com/#webpage","url":"https://cad-comic.com/","name":"Ctrl+Alt+Del Comic - A comic about video games!","isPartOf":{"@id":"https://cad-comic.com/#website"},"about":{"@id":"https://cad-comic.com/#organization"},"description":"A tri-weekly webcomic about video games and gamers since 2002!","breadcrumb":{"@id":"https://cad-comic.com/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://cad-comic.com/"]}]},{"@type":"BreadcrumbList","@id":"https://cad-comic.com/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]}]}</script>
+
+<link rel='dns-prefetch' href='//use.fontawesome.com' />
+<link rel='dns-prefetch' href='//platform-api.sharethis.com' />
+<link rel='dns-prefetch' href='//s.w.org' />
+<script type="text/javascript">
+                       window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cad-comic.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=8e3cba5c5028c3bde50a1ae130a1c7d8"}};
+                       !function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
+               </script>
+<style type="text/css">
+img.wp-smiley,
+img.emoji {
+       display: inline !important;
+       border: none !important;
+       box-shadow: none !important;
+       height: 1em !important;
+       width: 1em !important;
+       margin: 0 .07em !important;
+       vertical-align: -0.1em !important;
+       background: none !important;
+       padding: 0 !important;
+}
+</style>
+<link rel='stylesheet' id='wp-block-library-css' href='https://cad-comic.com/wp-includes/css/dist/block-library/style.min.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<link rel='stylesheet' id='latest-posts-widget-css' href='https://cad-comic.com/wp-content/plugins/latest-posts-widget/latest-posts.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<link rel='stylesheet' id='math-captcha-frontend-css' href='https://cad-comic.com/wp-content/plugins/wp-math-captcha/css/frontend.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<link rel='stylesheet' id='sm-style-css' href='https://cad-comic.com/wp-content/plugins/wp-show-more/wpsm-style.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<link rel='stylesheet' id='cad-style-css' href='https://cad-comic.com/wp-content/themes/cad/style.x93667.css' type='text/css' media='' />
+<script type='text/javascript' src='https://cad-comic.com/wp-includes/js/jquery/jquery.min.x93667.js?ver=3.5.1' id='jquery-core-js'></script>
+<script type='text/javascript' src='https://cad-comic.com/wp-includes/js/jquery/jquery-migrate.min.x93667.js?ver=3.3.2' id='jquery-migrate-js'></script>
+<script type='text/javascript' src='//use.fontawesome.com/29b72b29ca.js' id='font-awesome-js'></script>
+<script type='text/javascript' src='//platform-api.sharethis.com/js/sharethis.js#product=ga&#038;property=58f203bf47f651001163c596' id='googleanalytics-platform-sharethis-js'></script>
+<link rel="https://api.w.org/" href="https://cad-comic.com/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://cad-comic.com/xmlrpc.php?rsd" />
+<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://cad-comic.com/wp-includes/wlwmanifest.xml" />
+<script language="javascript" src="https://cad-comic.com/wp-content/plugins/cad-twitter/twitter/jquery.tweet.x93667.js" type="text/javascript"></script><script type="text/javascript">
+       window._se_plugin_version = '8.1.9';
+</script>
+<script>\r
+(function() {\r
+       (function (i, s, o, g, r, a, m) {\r
+               i['GoogleAnalyticsObject'] = r;\r
+               i[r] = i[r] || function () {\r
+                               (i[r].q = i[r].q || []).push(arguments)\r
+                       }, i[r].l = 1 * new Date();\r
+               a = s.createElement(o),\r
+                       m = s.getElementsByTagName(o)[0];\r
+               a.async = 1;\r
+               a.src = g;\r
+               m.parentNode.insertBefore(a, m)\r
+       })(window, document, 'script', 'https://google-analytics.com/analytics.js', 'ga');\r
+\r
+       ga('create', 'UA-255444-2', 'auto');\r
+                       ga('send', 'pageview');\r
+       })();\r
+</script>
+</head>
+<body class="home blog" id="background">
+
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NN2TMV2"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+
+<header class="col-md-12 header"><div class="header-inner">
+<div class="hidden-xs" id="halosearch" style="float:right;">
+<form method="get" id="searchform" action="https://cad-comic.com/">
+<input type="text" placeholder="Search" class="saerch" value="" name="s" id="s" /></input>
+</form>
+</div>
+<a href="#" class="expand-menu"><img src="https://cad-comic.com/wp-content/themes/cad/img/mobilemenu.x93667.png"></a>
+<a href="https://cad-comic.com/" title='Ctrl+Alt+Del Comic' rel='home'>
+<section class="logo"></section></a>
+<div class="d-menu hidden-xs">
+<ul class="mainmenu">
+<li class="dropdown">
+<a href="https://cad-comic.com/wp-login.php" class="login">Login</a>
+<div class="dropdown-content">
+<a href="https://cad-comic.com/wp-login.php?action=register">Register</a>
+</div>
+</li>
+<li><a href="#" class="parentlist expand-comic">Comics</a></li>
+<li id="menu-item-33875" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-33875"><a title="Blog" href="https://cad-comic.com/category/blog/">Blog</a></li>
+<li id="menu-item-55" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-55"><a title="Store" href="https://sharkrobot.com/collections/ctrl-alt-del">Store</a></li>
+<li id="menu-item-9802" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9802"><a title="RSS" href="/?feed=rss">RSS</a></li>
+<a href="https://www.youtube.com/user/CtrlAltDelComic"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-youtube.x93667.png" /></a>
+<a href="https://twitter.com/timcad"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-twitter.x93667.png" /></a>
+<a href="https://www.facebook.com/CADComic/"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-facebook.x93667.png" /></a>
+</ul>
+</div>
+
+</div></header>
+<nav class="dropmenu">
+<ul>
+<li>
+<span style="display:ruby"><a href="https://cad-comic.com/wp-login.php">Login</a><a href="https://cad-comic.com/wp-login.php?action=register">Register</a> </span>
+</li>
+<li><a href="#" class="parentlist expand-comic close-menu">Comics</a></li>
+<li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-33875"><a href="https://cad-comic.com/category/blog/">Blog</a></li>
+<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-55"><a href="https://sharkrobot.com/collections/ctrl-alt-del">Store</a></li>
+<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9802"><a href="/?feed=rss">RSS</a></li>
+<a href="https://www.youtube.com/user/CtrlAltDelComic"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-youtube.x93667.png" /></a>
+<a href="https://twitter.com/timcad"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-twitter.x93667.png" /></a>
+<a href="https://www.facebook.com/CADComic/"><img src="https://cad-comic.com/wp-content/themes/cad/img/social-facebook.x93667.png" /></a>
+</ul>
+<section class="">
+<form method="get" id="searchform" action="https://cad-comic.com/">
+<div><input type="text" placeholder="Search" class="saerch" value="" name="s" id="s" /></div>
+</form>
+</section>
+</nav>
+<div class="dropcomic col-md-12" style="display:none;">
+<div class="container">
+<div class="col-md-12">&nbsp;</div>
+<div class="col-md-2"><a href="/category/ctrl-alt-del/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-cad2.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="col-md-2"><a href="/category/analog-and-d-pad/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-analog.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="col-md-2"><a href="/category/starcaster-chronicles/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-starcaster.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="col-md-2"><a href="/category/the-campaign/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-campaign.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="col-md-2"><a href="/category/the-console-wars/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-console.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="col-md-2"><a href="/category/sillies/"><img src="https://cad-comic.com/wp-content/themes/cad/img/logo-sillies.x93667.png" style="max-width:100%; height:auto;" /></a></div>
+<div class="com-md-12"><a href="#" class="hide-comic" style="color:black; text-decoration:none; padding-top:0px;">&nbsp;&nbsp;&nbsp;&#8682;&nbsp;&nbsp;&nbsp;</a></div>
+</div>
+</div>
+<div class="container"> 
+<div class="col-md-8">
+
+<div class="dtop-ad">
+<div id="ad-container-1"></div>
+<script>
+window.top.__vm_add = window.top.__vm_add || [];
+//this is a x-browser way to make sure content has loaded.
+(function(success) {
+if(window.document.readyState !== "loading"){
+success();
+} else {
+window.document.addEventListener("DOMContentLoaded", function(){
+success();
+});
+}
+})(function(){
+var placement = document.createElement("div");
+placement.setAttribute("class", "vm-placement");
+if(window.innerWidth > 1000){
+//load 728x90 dynamic
+placement.setAttribute("data-id", "5df8bbc1e8863a127ae39f81");
+} else {
+//load 320x50 static
+placement.setAttribute("data-id", "602b9623875a745fb6012598");
+}
+document.querySelector("#ad-container-1").appendChild(placement);
+window.top.__vm_add.push(placement);
+});
+</script>
+</div>
+
+
+</div>
+<div class="col-md-4 col-sm-12 pull-right hide-mobile main-sidebar">
+<div class="cad_meanwhile_widget">
+<a href="https://cad-comic.com/console-war-posters/">
+<div class="cad_meanwhile_bg">
+<span class="cad_meanwhile_title">
+Console War Posters! </span>
+</div>
+</a>
+</div>
+
+<div class="vm-placement" data-id="5df8bbccbaace96c5c13debb"></div>
+
+<div class="textwidget"><center><a href="https://www.patreon.com/CtrlAltDel">
+<img border="0" alt="Patreon" src="/wp-content/uploads/2017/04/patreonad.x93667.png">
+</a></center></div>
+<div class="textwidget custom-html-widget"><div id='product-component-4d5f4816e6b'></div>
+<script type="text/javascript">\r
+    /*<![CDATA[*/\r
+\r
+    (function () {\r
+      var scriptURL = 'https://sdks.shopifycdn.com/buy-button/latest/buy-button-storefront.min.js';\r
+      if (window.ShopifyBuy) {\r
+        if (window.ShopifyBuy.UI) {\r
+          ShopifyBuyInit();\r
+        } else {\r
+          loadScript();\r
+        }\r
+      } else {\r
+        loadScript();\r
+      }\r
+\r
+      function loadScript() {\r
+        var script = document.createElement('script');\r
+        script.async = true;\r
+        script.src = scriptURL;\r
+        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);\r
+        script.onload = ShopifyBuyInit;\r
+      }\r
+\r
+      function ShopifyBuyInit() {\r
+        var client = ShopifyBuy.buildClient({\r
+          domain: 'ctrl-alt-del.myshopify.com',\r
+          storefrontAccessToken: '8e2f01f45cb24204a8fbff8bd529f7ed',\r
+        });\r
+\r
+        ShopifyBuy.UI.onReady(client).then(function (ui) {\r
+          ui.createComponent('product', {\r
+            id: [9257961484],\r
+            node: document.getElementById('product-component-4d5f4816e6b'),\r
+            moneyFormat: '%24%7B%7Bamount%7D%7D',\r
+            options: {\r
+  "product": {\r
+    "buttonDestination": "modal",\r
+    "variantId": "all",\r
+    "contents": {\r
+      "imgWithCarousel": false,\r
+      "variantTitle": false,\r
+      "options": false,\r
+      "description": false,\r
+      "buttonWithQuantity": false,\r
+      "quantity": false\r
+    },\r
+    "text": {\r
+      "button": "VIEW PRODUCT"\r
+    },\r
+    "styles": {\r
+      "product": {\r
+        "@media (min-width: 601px)": {\r
+          "max-width": "100%",\r
+          "margin-left": "0",\r
+          "margin-bottom": "50px"\r
+        }\r
+      },\r
+      "button": {\r
+        "font-size": "13px",\r
+        "padding-top": "14.5px",\r
+        "padding-bottom": "14.5px",\r
+        ":hover": {\r
+          "background-color": "#6ca44e"\r
+        },\r
+        ":focus": {\r
+          "background-color": "#6ca44e"\r
+        }\r
+      },\r
+      "title": {\r
+        "color": "#78b657"\r
+      },\r
+      "price": {\r
+        "color": "#ffffff"\r
+      },\r
+      "quantityInput": {\r
+        "font-size": "13px",\r
+        "padding-top": "14.5px",\r
+        "padding-bottom": "14.5px"\r
+      },\r
+      "compareAt": {\r
+        "font-size": "12px",\r
+        "color": "#ffffff"\r
+      }\r
+    }\r
+  },\r
+  "cart": {\r
+    "contents": {\r
+      "button": true\r
+    },\r
+    "styles": {\r
+      "button": {\r
+        "font-size": "13px",\r
+        "padding-top": "14.5px",\r
+        "padding-bottom": "14.5px",\r
+        ":hover": {\r
+          "background-color": "#6ca44e"\r
+        },\r
+        ":focus": {\r
+          "background-color": "#6ca44e"\r
+        }\r
+      },\r
+      "footer": {\r
+        "background-color": "#ffffff"\r
+      }\r
+    }\r
+  },\r
+  "modalProduct": {\r
+    "contents": {\r
+      "img": false,\r
+      "imgWithCarousel": true,\r
+      "variantTitle": false,\r
+      "buttonWithQuantity": true,\r
+      "button": false,\r
+      "quantity": false\r
+    },\r
+    "styles": {\r
+      "product": {\r
+        "@media (min-width: 601px)": {\r
+          "max-width": "100%",\r
+          "margin-left": "0px",\r
+          "margin-bottom": "0px"\r
+        }\r
+      },\r
+      "button": {\r
+        "font-size": "13px",\r
+        "padding-top": "14.5px",\r
+        "padding-bottom": "14.5px",\r
+        ":hover": {\r
+          "background-color": "#6ca44e"\r
+        },\r
+        ":focus": {\r
+          "background-color": "#6ca44e"\r
+        }\r
+      },\r
+      "quantityInput": {\r
+        "font-size": "13px",\r
+        "padding-top": "14.5px",\r
+        "padding-bottom": "14.5px"\r
+      }\r
+    }\r
+  },\r
+  "toggle": {\r
+    "styles": {\r
+      "toggle": {\r
+        ":hover": {\r
+          "background-color": "#6ca44e"\r
+        },\r
+        ":focus": {\r
+          "background-color": "#6ca44e"\r
+        }\r
+      },\r
+      "count": {\r
+        "font-size": "13px"\r
+      }\r
+    }\r
+  },\r
+  "productSet": {\r
+    "styles": {\r
+      "products": {\r
+        "@media (min-width: 601px)": {\r
+          "margin-left": "-20px"\r
+        }\r
+      }\r
+    }\r
+  }\r
+}\r
+          });\r
+        });\r
+      }\r
+    })();\r
+    /*]]>*/\r
+    </script></div> <script type="text/javascript" charset="utf-8" src="https://cad-comic.com/wp-content/plugins/cad-twitter/twitter/jquery.tweet.x93667.js"></script>
+<script type="text/javascript">
+                       jQuery(document).ready(function() {
+                               jQuery('.twitterfeed').tweet({
+                                       modpath: 'https://cad-comic.com/wp-content/plugins/cad-twitter/twitter/',
+                                       count: '5',
+                                       loading_text: 'loading twitter feed...',
+                                       username: 'timcad'
+                               });
+                       })
+                </script>
+<div class="twitterwidget">
+<div class="twitterfeed"></div>
+<p style="text-align:left; margin-top:0;" class="sideaction"><a href="https://twitter.com/timcad" target="_blank">Follow on Twitter</a></p></div>
+<div class="cad_newest_widget">
+<div class="cad_newest_container">
+<a href="https://cad-comic.com/comic/silly-657/" class="newest_comic">
+<img src="https://cad-comic.com/wp-content/uploads/2019/05/LITE_20190503.x93667.gif" class="newest_comic">
+<div class="ncw-text-container">
+<span class="ncw-cat-text">Latest </span><span class="ncw-cat-name">Silly</span><span class="ncw-divide"> | </span><span class="ncw-call-to-action">Check out the newest comic</span>
+</div>
+</a>
+</div>
+</div>
+<div class="textwidget custom-html-widget"><center><a href="/report-ad/"><img src="/wp-content/uploads/2018/05/badad-1.x93667.png" alt="BadAd"></a></center></div>
+
+<div class="vm-placement" data-id="602b95e1875a745fb6012596"></div>
+
+</div>
+<script>\r
+       var post_id = "1640723",\r
+       use_cat = false,\r
+       cat_id = "2495";\r
+               \r
+       jQuery(document).ready( function() {\r
+                  jQuery(".next-post-link").click( function(e) {\r
+                       e.preventDefault();\r
+                       get_nav_post(post_id,"next",use_cat,cat_id);\r
+                  });\r
+                  jQuery(".previous-post-link").click( function(e) {\r
+                       e.preventDefault();\r
+                       get_nav_post(post_id,"previous",use_cat,cat_id);\r
+                  });\r
+                  jQuery(".first-post-link").click( function(e) {\r
+                       e.preventDefault();\r
+                       get_nav_post(post_id,"first",use_cat,cat_id);\r
+                  });\r
+                  jQuery(".last-post-link").click( function(e) {\r
+                       e.preventDefault();\r
+                       get_nav_post(post_id,"last",use_cat,cat_id);\r
+                  });\r
+                  jQuery(".random-post-link").click( function(e) {\r
+                       e.preventDefault();\r
+                       get_nav_post(post_id,"random",use_cat,cat_id);\r
+                  });                                     \r
+       });\r
+               \r
+       function get_nav_post(post_id1,nav_type1,use_cat1,cat_id1) {\r
+             ajaxurl = "https://cad-comic.com/wp-admin/admin-ajax.php";\r
+             \r
+             jQuery.ajax({\r
+                type : "post",\r
+                dataType : "json",\r
+                url : ajaxurl,\r
+                data : {"action": "get_nav_post","post_id": post_id1, "nav_type": nav_type1, "use_cat": use_cat1, "cat_id": cat_id1},\r
+                success: function(response) {\r
+                       post_id = response.id;\r
+                       cat_id = response.category;\r
+                       jQuery('.comic-display').attr('src',response.comic);\r
+                       jQuery('.url-href').attr('href',response.url);\r
+                       jQuery('.url-href-comments').attr('href',response.url+'#comments');\r
+                       jQuery('.url-href-facebook').attr('href','https://www.facebook.com/sharer/sharer.php?u='+encodeURI(response.url));\r
+                       jQuery('.url-href-twitter').attr('href','https://twitter.com/home?status='+encodeURI(response.url));\r
+                       jQuery('.title-display').text(response.title);\r
+                       jQuery('.date-display').text(response.date);\r
+                       jQuery('.author-display').text(response.author);\r
+                       jQuery('.post-display').html(response.content);\r
+                       jQuery('.archive-display').attr('href',response.category_url);\r
+                               \r
+                               if(response.hideleft === null) {\r
+                                       jQuery('.nav-left').hide();\r
+                               } else {\r
+                                       jQuery('.nav-left').show();\r
+                               }\r
+                               \r
+                               if(response.hideright === null) {\r
+                                       jQuery('.nav-right').hide();\r
+                               } else {\r
+                                       jQuery('.nav-right').show();\r
+                               }\r
+                }\r
+             });\r
+       }\r
+</script>
+<div class="col-md-8 main-content">
+<article class="post-1640723 comic type-comic status-publish hentry category-starcaster-chronicles">
+<div class="comiccontrols">
+<div class="comicnav">
+<a href="#" class="mid-nav-box first-post-link"><i class="fa whiteicon fa-fast-backward"></i><span class="nav-label"> First</span></a>
+<a href="#" class="mid-nav-box previous-post-link nav-left"><i class="fa whiteicon fa-caret-left"></i><span class="nav-label"> Previous</span></a>
+<a href="/category/all/" class="mid-nav-box archive-display"><i class="fa whiteicon fa-archive"></i><span class="nav-label"> Archive</span></a>
+<a href="#" class="mid-nav-box random-post-link"><i class="fa whiteicon fa-random"></i><span class="nav-label"> Random</span></a>
+<a href="#" class="mid-nav-box next-post-link nav-right" style="display:none;"><i class="fa whiteicon fa-caret-right"></i><span class="nav-label"> Next</span></a>
+<a href="#" class="mid-nav-box last-post-link"><i class="fa whiteicon fa-fast-forward"></i><span class="nav-label"> Last</span></a>
+<span class="divide"> | </span>
+<a class="url-href-comments" href="https://cad-comic.com/comic/the-starcaster-chronicles-09-14/#comments" class="counttop hidden-xs"><i class="fa whiteicon fa-comments"></i><span>53</span></a>
+<a href="https://www.facebook.com/sharer/sharer.php?u=https://cad-comic.com/comic/the-starcaster-chronicles-09-14/" target="_blank" class="mid-nav-box facebook-nav-box url-href-facebook"><i class="fa whiteicon fa-facebook"></i><span class="nav-label"> Share</span></a>
+<a href="https://twitter.com/home?status=https://cad-comic.com/comic/the-starcaster-chronicles-09-14/" target="_blank" class="mid-nav-box twitter-nav-box url-href-twitter"><i class="fa whiteicon fa-twitter"></i><span class="nav-label"> Tweet</span></a>
+</div>
+</div>
+<hr />
+<div class="comicpage">
+<a href="https://cad-comic.com/comic/the-starcaster-chronicles-09-13/" rel="prev"><div style="width:52px;height:100%;position:absolute;top:0px;left:0px;z-index:100;"></div></a>
+<div class="arrowleft nav-left"><a href="#" class="previous-post-link"><img src="https://cad-comic.com/wp-content/themes/cad/img/left.x93667.png" title="Previous" /></a></div>
+<div class="arrowright nav-right" style="display:none;"><a href="#" class="next-post-link"><img src="https://cad-comic.com/wp-content/themes/cad/img/right.x93667.png" title="Next" /></a></div>
+<a class="url-href" href="https://cad-comic.com/comic/the-starcaster-chronicles-09-14/"><img class="comic-display" src="https://cad-comic.com/wp-content/uploads/2021/10/09.14a-1.x93667.png" style="max-width:100%; min-width:270px; height:auto;" /> </a>
+</div>
+<hr />
+
+<div class="vm-placement" data-id="602b9631875a745fb601259a" style="display:none"></div>
+
+<hr />
+<div class="comiccontrols">
+<div class="comicnav">
+<a href="#" class="mid-nav-box first-post-link"><i class="fa whiteicon fa-fast-backward"></i><span class="nav-label"> First</span></a>
+<a href="#" class="mid-nav-box previous-post-link nav-left"><i class="fa whiteicon fa-caret-left"></i><span class="nav-label"> Previous</span></a>
+<a href="/category/all/" class="mid-nav-box archive-display"><i class="fa whiteicon fa-archive"></i><span class="nav-label"> Archive</span></a>
+<a href="#" class="mid-nav-box random-post-link"><i class="fa whiteicon fa-random"></i><span class="nav-label"> Random</span></a>
+<a href="#" class="mid-nav-box next-post-link nav-right" style="display:none;"><i class="fa whiteicon fa-caret-right"></i><span class="nav-label"> Next</span></a>
+<a href="#" class="mid-nav-box last-post-link"><i class="fa whiteicon fa-fast-forward"></i><span class="nav-label"> Last</span></a>
+<span class="divide"> | </span>
+<a class="url-href-comments" href="https://cad-comic.com/comic/the-starcaster-chronicles-09-14/#comments" class="counttop hidden-xs"><i class="fa whiteicon fa-comments"></i><span>53</span></a>
+<a href="https://www.facebook.com/sharer/sharer.php?u=https://cad-comic.com/comic/the-starcaster-chronicles-09-14/" target="_blank" class="mid-nav-box facebook-nav-box"><i class="fa whiteicon fa-facebook"></i><span class="nav-label"> Share</span></a>
+<a href="https://twitter.com/home?status=https://cad-comic.com/comic/the-starcaster-chronicles-09-14/" target="_blank" class="mid-nav-box twitter-nav-box"><i class="fa whiteicon fa-twitter"></i><span class="nav-label"> Tweet</span></a>
+</div>
+</div>
+<div id="shareit">
+<img src="https://cad-comic.com/wp-content/themes/cad/img/cadsocial-comment.x93667.png" style="width: 43.5374px; height: 39.9093px;">
+<span class="count">24</span>
+<img src="https://cad-comic.com/wp-content/themes/cad/img/cadsocial-fb.x93667.png" width="48px" height="44px">
+<img src="https://cad-comic.com/wp-content/themes/cad/img/cadsocial-tw.x93667.png" width="48px" height="44px">
+</div>
+<div align="center" id='div-gpt-ad-1522347596297-5' style="margin-top: 10px;"></div>
+<div id="comicblog">
+<div class='blog-wrap'>
+<div class="blog-icon-wrap">
+<i class="fa fa-2x fa-commenting-o blog-icon"></i>
+</div>
+<div class="blog-meta-wrap">
+<a class="url-href" href="https://cad-comic.com/comic/the-starcaster-chronicles-09-14/"><h3 class="title-display">The Starcaster Chronicles 09.14</h3></a>
+<p class="comicdate"><span class="date-display comicdate">October 22, 2021</span> by <span class="author-display comicdate">Tim</span></p>
+</div>
+</div>
+<div class="post-text-area post-display">
+</div>
+</div>
+<div id="comicblog">
+<p class="expand-comment">
+<span style="cursor: hand; cursor: pointer;">
+Join the conversation. <a class="url-href" href="https://cad-comic.com/comic/the-starcaster-chronicles-09-14/#comments">Click here</a> to read and write comments.
+</span>
+</p>
+</div>
+</article>
+</div>
+<link rel='stylesheet' id='myprefix-style-css' href='https://cad-comic.com/wp-content/plugins/cad-meanwhile/cadnc-style.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<link rel='stylesheet' id='cad_newest-style-css' href='https://cad-comic.com/wp-content/plugins/cad-newest-comic/cadncw-style.x93667.css?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' type='text/css' media='all' />
+<script type='text/javascript' src='https://cad-comic.com/wp-content/plugins/wp-show-more/wpsm-script.x93667.js?ver=1.0.1' id='sm-script-js'></script>
+<script type='text/javascript' src='https://cad-comic.com/wp-content/plugins/lazy-load/js/jquery.sonar.min.x93667.js?ver=0.6.1' id='jquery-sonar-js'></script>
+<script type='text/javascript' src='https://cad-comic.com/wp-content/plugins/lazy-load/js/lazy-load.x93667.js?ver=0.6.1' id='wpcom-lazy-load-images-js'></script>
+<script type='text/javascript' src='https://cad-comic.com/wp-includes/js/wp-embed.min.x93667.js?ver=8e3cba5c5028c3bde50a1ae130a1c7d8' id='wp-embed-js'></script>
+<script src="https://cad-comic.com/wp-content/themes/cad/bootstrap-hover-dropdown.x93667.js"></script>
+<script type="text/javascript" charset="utf-8">\r
+       $(document).ready(function(){\r
+               $('.dropcomic').hide();\r
+               $('.dropcomment').hide();\r
+               $('.dropmenu').hide();\r
+                                       $('.droparchive2021').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2021').click(function(){$('.droparchive2021').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2020').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2020').click(function(){$('.droparchive2020').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2019').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2019').click(function(){$('.droparchive2019').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2018').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2018').click(function(){$('.droparchive2018').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2017').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2017').click(function(){$('.droparchive2017').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2016').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2016').click(function(){$('.droparchive2016').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2015').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2015').click(function(){$('.droparchive2015').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2014').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2014').click(function(){$('.droparchive2014').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2013').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2013').click(function(){$('.droparchive2013').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2012').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2012').click(function(){$('.droparchive2012').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2011').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2011').click(function(){$('.droparchive2011').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2010').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2010').click(function(){$('.droparchive2010').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2009').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2009').click(function(){$('.droparchive2009').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2008').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2008').click(function(){$('.droparchive2008').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2007').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2007').click(function(){$('.droparchive2007').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2006').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2006').click(function(){$('.droparchive2006').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2005').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2005').click(function(){$('.droparchive2005').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2004').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2004').click(function(){$('.droparchive2004').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2003').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2003').click(function(){$('.droparchive2003').slideToggle('fast');});\r
+\r
+                                               $('.droparchive2002').hide();\r
+                       $('.expand-archive').click(function(){$('.droparchive').slideUp('slow');});\r
+                       $('.expand-archive2002').click(function(){$('.droparchive2002').slideToggle('fast');});\r
+\r
+                               });\r
+       $('.expand-comic').click(function(){$('.dropcomic').slideToggle('slow');});\r
+       $('.close-comic').click(function(){$('.dropcomic').slideToggle('slow');});\r
+       $('.expand-menu').click(function(){$('.dropmenu').slideToggle('fast');});\r
+       $('.close-menu').click(function(){$('.dropmenu').slideToggle('fast');});\r
+       $('.counttop').click(function(){$('.dropcomment').slideDown('slow');});\r
+       $('.counttop').click(function(){$('.expand-comment').slideToggle('slow');});\r
+       $('.hide-comic').click(function(){$('.dropcomic').slideUp('slow');});\r
+       $('.show-comic').click(function(){$('.dropcomic').slideDown('slow');});\r
+       $('.expand-comment').click(function(){$('.dropcomment').slideDown('slow');});\r
+       $('.expand-comment').click(function(){$('.expand-comment').slideUp('fast');});\r
+\r
+\r
+\r
+\r
+\r
+       //$('.expand-comment').click(function(){$('.dropcomment').slideToggle('slow');});\r
+       //$('.expand-comment').click(function(){$('.expand-comment').slideToggle('slow');});\r
+</script>
+<link href='//fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
+<link href='//fonts.googleapis.com/css?family=Roboto:400,300,700' rel='stylesheet' type='text/css'>
+<link href='//fonts.googleapis.com/css?family=Oswald:400,300,700' rel='stylesheet' type='text/css'>
+<link href='//fonts.googleapis.com/css?family=Lato:300,400,700,900' rel='stylesheet' type='text/css'>
+<link href='//fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
+<link href='//fonts.googleapis.com/css?family=Play:400,700' rel='stylesheet' type='text/css'>
+<script>\r
+       function calcParallax(tileheight, speedratio, scrollposition) {\r
+        \r
+         return ((tileheight) - (Math.floor(scrollposition / speedratio) % (tileheight+1)));\r
+       }\r
+               window.onload = function() {\r
+               window.onscroll = function() {\r
+               var posY = (document.documentElement.scrollTop) ? document.documentElement.scrollTop : window.pageYOffset;\r
+               \r
+               var ground = document.getElementById('background');\r
+               var groundparallax = calcParallax(-200, 6, posY);\r
+               ground.style.backgroundPosition = "0 " + groundparallax + "px"; \r
+       } \r
+       }\r
+</script>
+<script type="text/javascript">\r
+$(document).ready(function () {\r
+    if(window.location.href.indexOf("comment") > -1) {\r
+               $('.dropcomment').slideDown('fast');\r
+               $('.expand-comment').slideUp('fast');\r
+    }\r
+       \r
+       if(window.location.href.indexOf("respond") > -1) {\r
+               $('.dropcomment').slideDown('fast');\r
+               $('.expand-comment').slideUp('fast');\r
+    }\r
+});\r
+</script>
+</div> 
+<br class="clear" />
+<div id="footer">
+<span class="footlinks">
+<a href="/terms-of-service/" title="Terms and Conditions">Terms &amp; Conditions</a> &nbsp;|&nbsp;
+<a href="/privacy/" title="Privacy Policy">Privacy Policy</a> </span>
+<span class="footcopy">Site &copy; 2021 all rights reserved &middot; All content copyright Ctrl+Alt+Del</span>
+</div>
+</body>
+</html>