Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

233
LINES

< > BotCompany Repo | #1022824 // Blog Bot with chat bot [dev.]

JavaX module (desktop) [tags: butter use-pretranspiled] - homepage

Download Jar. Libraryless. Click here for Pure Java version (5448L/41K).

!7

static new ThreadLocal<Bool> youtubeOff;

static int perPage = 20;

sS rawSelfLink(S uri) { ret "/blog" + addSlashPrefix(uri); }

html {
  S vis = registerVisitor();
  
  S domain = domain();
  print("domain: " + domain);
  
  if (swic(domain, "javax.")) {
    pcall {
      O result = callHtmlMethod2(getBot(#1020398), uri, params);
      print("Result: " + className(result));
      ret result;
    }
  }
  
  /*if (startsWith(uri, "/.well-known/pki-validation/"))
    ret subBot_serveText(loadTextFile(userDir("validation.txt")));*/

  tempSetThreadLocal(youtubeOff, eq("1", params.get('youtubeOff))
    || eqOneOf(params.get('youtube), "0", "off", "no"));
  O[] linkStyle = litobjectarray("style", "color: inherit; text-decoration: underline");
  
  uri = dropPrefix("/", uri);
  int page = startsWithDigit(uri) ? parseFirstInt(uri) : 1;
  
  LS allPosts = ll(
    imagePost("2019/04/04", "Whenever my language bores me",
    #1101627, "40%",
    p("...I shorten it. Let's say I want to make a big input field with full persistence and switchable font size (like you see on the right). Then I write " + ahref("http://tinybrain.de/1022742", "this") + ":")
+ [[<pre style="clear: both"><span title="compact module (sharing common code)" style="border-bottom: dotted 1px">cmodule</span> BigInput {
  <span title="short for: String" style="border-bottom: dotted 1px">S</span> text; // auto-persisted string field
  <span title="A field that can be changed through the module's popup menu" style="border-bottom: dotted 1px">switchable</span> int fontSize = 40;
  <span title="short definition of the visualize() function" style="border-bottom: dotted 1px">visual</span> <a title="setFontSize" style="text-decoration: none; color: black; border-bottom: dotted 1px" href="http://tinybrain.de:8080/tb/show-snippet.php?id=1007197">setFontSize</a>(fontSize, <a title="dm_textArea - synonym of dm_fieldTextArea" style="text-decoration: none; color: black; border-bottom: dotted 1px" href="http://tinybrain.de:8080/tb/show-snippet.php?id=1021496">dm_textArea</a>(<span title="string constant, &#34;text&#34;" style="border-bottom: dotted 1px">'text</span>));
}</pre>]]
    + p("(I just created the 2 new JavaX syntax constructs " + ahref("http://tinybrain.de/1022743", "'switchable'") + " and " + ahref("http://tinybrain.de/1022746", "'visual'") + " in like 10 minutes. Hover over the source code for more info.) &mdash;" + ahref("http://botcompany.de/1004590/raw/1101628", "Automatic popup menu."))
    ),
    
 imagePost("2018/06/16", "New Look&amp;Feel",
                  #1016391, "30%",
                  p([[Pretty, isn't it. Look&amp;Feel is called ]] + ahref("http://jtattoo.net", "JTattoo") + [[.]]) + p([[Image was made with the automatic screenshot module on a very old Windows 7 machine where my OS runs flawlessly.]]), left := true)
                
                , textPost("2018/06/15", "Fixing the last memory leaks in Java 10", [[
                <p>I submitted this <a href="https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8204963">bug report</a> to Oracle, and I'm making
                super-fancy functions like <a href="http://tinybrain.de/1016334">cleanDefunctACCsInAllThreads</a> that automatically fix
                memory leaks other Java programmers have never heard of.</p>
                <p>We will sail memory leak-free! :)</p>
                ]]) + [[

                <!-- A single blog post -->
                <section class="post">
                    <header class="post-header">
                        <img width="48" height="48" title="Stefan Reich's avatar" class="post-avatar" src="]] + snippetImgLink(#1101324) + [[">

                        <h2 class="post-title">New Module: YouTube Downloader</h2>

                        <p class="post-meta">
                            By <a href="mailto:info@botcompany.de" class="post-author">Stefan Reich</a> @ 2018/06/14
                        </p>
                    </header>
                    
                    <div class="post-description" style="clear: both">
                        <div style="float: right; width: 50%">
                            <a href="https://botcompany.de/1004590/raw/1101311">
                                <img title=""
                                     class="pure-img-responsive"
                                     src="https://botcompany.de/1004590/raw/1101311" style="width: 100%">
                            </a>
                        </div>
                            
                        <p>
                            Today we launched <b>bla bla bla</b>.
                        </p>
                        <p>&nbsp;</p>
                        <p>(No, seriously&mdash;we actually did. There is an awesome YouTube downloader in my <a href="http://exe.tinybrain.de/">operating system</a>. I'm just too lazy to write.)</p>
                        <p>Now I need an awesome screenshot module and an awesome auto-upload-to-blog module.</p>
                    </div>
                </section>
  ]]); // end of posts
  
  LS posts = subList(allPosts, (page-1)*perPage, page*perPage);
  bool hasPrev = page > 1, hasNext = l(allPosts) > page*perPage;
  
  S nav = !hasNext && !hasPrev ? "" 
    : hsection(joinNempties(" | ", 
      hasPrev ? ahref(rawSelfLink(str(page-1)), "Last page") : "",
      ahref("http://javax.botcompany.de/1020398/raw/contact", "Imprint"),
      hasNext ? ahref(rawSelfLink(str(page+1)), "Next page") : ""),
    class := "post", style := "text-align: right");
    
  S html = [[
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BotCompany.de</title>
    
    <link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" crossorigin="anonymous">
    
    <link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/grids-responsive-min.css">
    <link rel="stylesheet" href="css/layouts/blog.css">
</head>
]] + hcss(loadSnippet_cached(#1008309))
+ [[<body>]] + [[<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookie-bar/cookiebar-latest.min.js?tracking=1&always=1"></script>]] + [[

<div id="layout" class="pure-g">
    <div class="sidebar pure-u-1 pure-u-md-1-4">
        <div class="header">
            <h1 class="brand-title"><a href="https://www.BotCompany.de">Bot]] + html_invisibleSpace() + [[Company</a></h1>
            <h2 class="brand-tagline">English &amp; German Chat Bots</h2>

            <nav class="nav">
                ]] + tag('ul,
                    li(a("JAVAX", class := "pure-button", href := "http://javax.botcompany.de"), class := "nav-item")
                + " " +
                  li(a("GERMAN DEMO BOT", class := "pure-button", href := "http://www.web-woody-lab.de/", target := "_blank"), class := "nav-item")
                + " " +
                    li(a("DISCORD GROUP", class := "pure-button", href := "https://discordapp.com/invite/SEAjPqk", target := "_blank"), class := "nav-item")

                + " " +
                   li(a("Download Windows", class := "pure-button", href := "https://www.botcompany.de/files/1400170/Stefans%20OS%20Installer.exe"), class := "nav-item")
                + " " +
                   + li(a("Download Mac/Linux", title := "Install Java first (from java.com)", class := "pure-button", href := "https://www.botcompany.de/files/1400169/Stefans%20OS.jar"), class := "nav-item")
            
                + " " +
                      li(a("Videos", class := "pure-button", href := "http://youtube.tinybrain.de/"), class := "nav-item")
                    //, class := "nav-list")
                  + " " + //tag('ul,
                      li(a("Meetings", class := "pure-button", target := "_blank", href := "http://aimeetup.tinybrain.de/"), class := "nav-item")
                    //, class := "nav-list")
                  + " " + //tag('ul,
                      li(a("Slides", class := "pure-button", target := "_blank", href := "https://slides.com/stefanreich"), class := "nav-item")
                    , class := "nav-list")
                + [[
            </nav>
            
            <p>&nbsp;</p>
            <p><a style="text-decoration: none; color: white" href="https://www.botcompany.de:8443/1013826/raw"><b>Stefan's OS</b></a><br> is an inspiring Java program you can <a style="text-decoration: underline; color: white" href="https://www.botcompany.de:8443/1013826/raw">try out</a> in Windows, Mac OS or Linux.</p>
            
            ]] + p("&nbsp;") + youtubi("jt8j8llwBa8", 150)             
            + "<br>"
            + small("(good music)") +  [[
        </div>
    </div>

    <div class="content pure-u-1 pure-u-md-3-4">
        <div>
            <div class="posts">
                <!--<h1 class="content-subhead">Recent News</h1>-->
                ]]
                
                + hcss([[ pre { margin-left: 20px; font-weight: bold; } ]])
                + nav
                  
                + lines(posts)
                
                + nav

                + [[
                
            </div>

            <div class="footer">
                <div class="pure-menu pure-menu-horizontal">
                    <ul>
                        <li class="pure-menu-item" id="visitors"></li>
                        <li class="pure-menu-item"><a href="https://www.botcompany.de:8443/1013826/raw" class="pure-menu-link">More</a></li>
                        <li class="pure-menu-item"><a href="http://youtube.tinybrain.de/" class="pure-menu-link">YouTube</a></li>
                        <li class="pure-menu-item"><a href="http://javax.botcompany.de/1020398/raw/contact" class="pure-menu-link">Impressum</a></li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>

</body>
</html>
]];

  ret html.replace("\"css/layouts/blog.css\"", htmlQuote(rawSnippetURL(#1016322, "text/css")))
  .replaceFirst(regexpQuote("<body>"), "<body>" + hSilentComputatorWithFlag("homepage"));
}

sS textPost(S date, S title, S text) {
  ret invtag('section, class := "post", style := "clear: both",
    invtag('header, class := "post-header",
      invtag('img, width := 48, height := 48,
        title := "Stefan Reich's avatar",
        class := "post-avatar",
        src := snippetImgLink(#1101324))
      + [[
      <h2 class="post-title">]] + title + [[</h2>

                        <p class="post-meta">
                            By <a href="mailto:info@botcompany.de" class="post-author">Stefan Reich</a> @ ]] + date + [[
                        </p>
]]) + [[
                    <div class="post-description">
                    ]] + text + [[
                    </div>]]);
}

sS imagePost(S date, S title, S imageID, S width, S text, O... opt) {
  bool left = optParam(opt, 'left, false);
  S picLink = stringParam(opt, 'picLink);
  ret textPost(date, title, 
    invtag('div, style := "float: " + (left ? "left" : "right") + "; width: " + width + "; margin-bottom: 30px; margin-" + (left ? "right" : "left") + ": 30px;", ahref(or2(picLink, snippetImageLink(imageID)),
    invTag('img, title := "",
      class := "pure-img-responsive",
      src := snippetImageLink(imageID),
      style := "width: 100%")))
  + text);
}

sS youtubi(S url) {
  ret isTrue(youtubeOff!) ? "" : youtubeEmbed_newer(url);
}

sS youtubi(S url, int width) {
  ret isTrue(youtubeOff!) ? "" : youtubeEmbed_newer(url, width);
}

sS youtubi(S url, int width, int height) {
  ret isTrue(youtubeOff!) ? "" : youtubeEmbed_newer(url, width, height);
}

Author comment

Began life as a copy of #1016323

download  show line numbers  debug dex  old transpilations   

Travelled to 7 computer(s): bhatertpkbcr, cfunsshuasjs, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1022824
Snippet name: Blog Bot with chat bot [dev.]
Eternal ID of this version: #1022824/2
Text MD5: d0c9ed5b3bf9771370bf1de8ce8ede47
Transpilation MD5: 43dc7e4e66ab77bed8a31b5aa6308ec5
Author: stefan
Category: javax / html
Type: JavaX module (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2019-04-09 20:30:20
Source code size: 11859 bytes / 233 lines
Pitched / IR pitched: No / No
Views / Downloads: 355 / 1368
Version history: 1 change(s)
Referenced in: [show references]