# Author: benben-miao
# Emial: benben.miao@outlook.com
# Github: https://github.com/benben-miao
# Websit: https://omics.netlify.com
# Team: https://hiplot-academic.com
# Version: R-4.0.2
# Date: 2020-08-25
#
# install.packages("shiny")
# install.packages("bs4Dash")
# install.packages("DT")
# install.packages("colourpicker")
# BiocManager::install("maftools")

.libPaths(c(getOption("libPathExtra"), .libPaths()))
library(pacman)
pacman::p_load(shiny,
               bs4Dash,
               DT,
               markdown)
wd <- getwd()
sif <- sprintf("ssh -p 52018 43.242.96.52 singularity run --containall --bind /tmp --bind /cluster %s/blast.sif", wd)
# Define server logic required to draw a histogram
shinyServer(function(input, output, session) {
    # Templates: Please Remain.
    #
    # 1.Progress
    # progress <- Progress$new(session, min = 0, max = 100)
    # on.exit(progress$close())
    # 
    # progress$set(
    #     message = "Calculation in progress",
    #     detail = "This may take a while..."
    # )
    # progress$set(value = 0)
    #
    # 2.Download and compression
    # output$example_download <- downloadHandler(
    #     filename = function(){
    #         paste("example",
    #               "tar.gz",
    #               sep = ".")
    #     },
    #     content = function(filename){
    #         tar(tarfile = filename,
    #             files = "data/",
    #             compression = "gzip",
    #             compression_level = 6,
    #             tar = Sys.getenv("tar"))
    #     }
    # )
    
    
    output$html_content <- renderUI({
        includeHTML('
            <!DOCTYPE html>
            <html>
            <head>
            <meta name=viewport content="width=device-width,initial-scale=1">
            <meta charset="utf-8"/>
            <script src="https://cdn.geogebra.org/apps/deployggb.js"></script>
            
            </head>
            <body>
            <div style="margin: auto; text-align: center; box-shadow: 0px 0px 5px #cccccc; padding: 1px; width: 95%; border-radius: 30px;">
              <p style="text-shadow: 0px 0px 5px #888888"><b>Fourier Formula:</b> Sine waves are superimposed into square waves.</p>
            </div>
            <br>
            <div id="ggbApplet" style="box-shadow: 0px 0px 10px #cccccc; margin: auto; border:solid 0px white; border-radius: 10px;"></div>
            
            <script>
            var parameters = {
            "id": "ggbApplet",
            "width":1800,
            "height":820,
            "showMenuBar":false,
            "showAlgebraInput":false,
            "showToolBar":false,
            "customToolBar":"0 39 73 62 | 1 501 67 , 5 19 , 72 75 76 | 2 15 45 , 18 65 , 7 37 | 4 3 8 9 , 13 44 , 58 , 47 | 16 51 64 , 70 | 10 34 53 11 , 24  20 22 , 21 23 | 55 56 57 , 12 | 36 46 , 38 49  50 , 71  14  68 | 30 29 54 32 31 33 | 25 17 26 60 52 61 | 40 41 42 , 27 28 35 , 6",
            "showToolBarHelp":true,
            "showResetIcon":true,
            "enableLabelDrags":true,
            "enableShiftDragZoom":true,
            "enableRightClick":false,
            "errorDialogsActive":false,
            "useBrowserForJS":false,
            "allowStyleBar":false,
            "preventFocus":false,
            "showZoomButtons":true,
            "capturingThreshold":3,
            // add code here to run when the applet starts
            "appletOnLoad":function(api){ /* api.evalCommand("Segment((1,2),(3,4))");*/ },
            "showFullscreenButton":true,
            "scale":1,
            "disableAutoScale":false,
            "allowUpscale":false,
            "clickToLoad":false,
            "appName":"classic",
            "showSuggestionButtons":true,
            "buttonRounding":0.7,
            "buttonShadows":true,
            "language":"en",
            // use this instead of ggbBase64 to load a material from geogebra.org
            // "material_id":"RHYH3UQ8",
            // use this instead of ggbBase64 to load a .ggb file
            // "filename":"myfile.ggb",
            "ggbBase64":"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",
            };
            // is3D=is 3D applet using 3D view, AV=Algebra View, SV=Spreadsheet View, CV=CAS View, EV2=Graphics View 2, CP=Construction Protocol, PC=Probability Calculator DA=Data Analysis, FI=Function Inspector, macro=Macros
            var views = {"is3D": 0,"AV": 0,"SV": 0,"CV": 0,"EV2": 0,"CP": 1,"PC": 0,"DA": 0,"FI": 0,"macro": 0};
            var applet = new GGBApplet(parameters, "5.0", views);
            window.onload = function() {applet.inject("ggbApplet")};
            applet.setPreviewImage("data:image/gif;base64,R0lGODlhAQABAAAAADs=","https://z3.ax1x.com/2021/07/05/R46j9x.png","https://z3.ax1x.com/2021/07/05/R46j9x.png");
            </script>
            </body>
            </html>

        ')
    })
}
)
