<?php require_once('Parsedown.php'); if(file_exists('config.php')) { require_once('config.php'); } else { require_once('config.example.php'); } $func = $_GET['f']; switch($func) { case 'build': // Build the worship.html page buildStaticPage(); break; default: showAdminPage(); break; } function buildStaticPage() { $pd = new Parsedown(); $title = !empty($_POST['title'])?$_POST['title']:TITLE; $out = getHTMLHeader($title); $selFiles = json_decode($_POST['chosen_files']); foreach($selFiles as $file) { if(file_exists($file)) { $md = file_get_contents($file); $out .= '<div class="afile">'; $out .= $pd->text($md); $out .= "</div>"; } } $out .= getHTMLFooter(); $outfile = !empty($_POST['outfile'])?$_POST['outfile']:DEFAULT_FILE; file_put_contents($outfile, $out); header('Location: '.$outfile); } function showAdminPage() { $out = getHTMLHeader(TITLE) .'<form class="pure-form" action="/manager/?f=build" method="POST">'."\n" .' <fieldset>'."\n" .' <input id="chosen_files" name="chosen_files" value="" type="hidden" />'."\n" .' <div class="margin10">'."\n" .' <button class="pure-button pure-button-primary" type="submit">Build File</button>'."\n" .' </div>'."\n" .' <div class="margin10">'."\n" .' <label for="filter">Filter</label>'."\n" .' <input onkeyup="updateFilter(this.value);" name="filter" value="" placeholder="Filter Files" />'."\n" .' <table>'."\n" .' <tbody>'."\n"; foreach(glob(MD_DIR.'/*.md') as $file) { $base = basename($file, '.md'); $out.=' <tr data-file="'.$base.'">'."\n" .' <td>'.$base.'</td>' .'<td><a class="pure-button pure-button-secondary" onclick="javascript:toggleFile(this, \''.$file.'\');">Add</a></td>'."\n" .' </tr>'."\n"; } $out.=' </tbody>'."\n" .' </table>'."\n" .' </div>'."\n" .' </fieldset>'."\n" .'</form>'."\n" .'<script>'."\n" .'var selectedFiles = [];'."\n" .'var tablerows = document.getElementsByTagName("tr");'."\n" .'function updateFilter(flt) {'."\n" .' flt = flt.toLowerCase();'."\n" .' for(var i = 0; i < tablerows.length; i++) {'."\n" .' if(tablerows[i].dataset.file.toLowerCase().startsWith(flt)) {'."\n" .' tablerows[i].classList.remove("hidden");'."\n" .' } else {'."\n" .' tablerows[i].classList.add("hidden");'."\n" .' }'."\n" .' }'."\n" .'}'."\n" .'function toggleFile(btn, sng) {'."\n" .' if(!btn.classList.contains("pure-button-warning")) {'."\n" .' btn.classList.remove("pure-button-secondary");'."\n" .' btn.classList.add("pure-button-warning");'."\n" .' for(var i = 0; i < selectedFiles.length; i++) {'."\n" .' if(selectedFiles[i] == sng) { return; }'."\n" .' }'."\n" .' selectedFiles.push(sng);'."\n" .' btn.innerText = "Remove";'."\n" .' } else {'."\n" .' btn.classList.remove("pure-button-warning");'."\n" .' btn.classList.add("pure-button-secondary");'."\n" .' for(var i = 0; i < selectedFiles.length; i++) {'."\n" .' if(selectedFiles[i] == sng) { delete selectedFiles[i]; }'."\n" .' }'."\n" .' btn.innerText = "Add";'."\n" .' }'."\n" .' updateFilesInput();'."\n" .'}'."\n" .'function removeSong(sng) {'."\n" .' for(var i = 0; i < selectedFiles.length; i++) {'."\n" .' if(selectedFiles[i] == sng) { delete selectedFiles[i]; }'."\n" .' }'."\n" .' updateFilesInput();'."\n" .'}'."\n" .'function updateFilesInput() {'."\n" .' var out = "[";'."\n" .' for(var i = 0; i < selectedFiles.length; i++) {'."\n" .' out+="\""+selectedFiles[i]+"\","'."\n" .' }'."\n" .' out = out.substring(0,out.length-1)+"]"'."\n" .' document.getElementById("chosen_files").value = out;'."\n" .'}'."\n" .'</script>'."\n" .getHTMLFooter(); echo $out; } function getHTMLHeader($title = TITLE) { $out = '<!DOCTYPE html>'."\n" .'<html lang="en">'."\n" .' <head>'."\n" .' <title>'.$title.'</title>'."\n" .' <link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">'."\n" .' <style type="text/css">'."\n" .' body { margin: 20px; }'."\n" .' td {'."\n" .' padding-top: 2px;'."\n" .' padding-bottom: 3px;'."\n" .' }'."\n" .' .margin10 {'."\n" .' margin: 10px;'."\n" .' }'."\n" .' .pure-button-secondary {'."\n" .' background-color: #0A0;'."\n" .' color: #FFF;'."\n" .' }'."\n" .' .pure-button-warning {'."\n" .' background-color: #A00;'."\n" .' color: #FFF;'."\n" .' }'."\n" .' </style>'."\n" .' </head>'."\n" .' <body>'."\n"; return $out; } function getHTMLFooter() { $out = ' </body>'."\n" .'</html>'."\n"; return $out; } ?>