Version 0.2
This commit is contained in:
parent
1196b27e38
commit
8d4f29428b
21
JQ-LICENSE
21
JQ-LICENSE
|
@ -1,21 +0,0 @@
|
||||||
Copyright 2013 jQuery Foundation and other contributors
|
|
||||||
http://jquery.com/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
36
README.md
36
README.md
|
@ -1,19 +1,37 @@
|
||||||
#Emergency Site Software
|
#Emergency Site Software
|
||||||
------------
|
|
||||||
A small php software that provides an easy way to create a site like http://emergencycompliment.com/.
|
A small php software that provides an easy way to create a site like http://emergencycompliment.com/.
|
||||||
[Reference implementation](http://emergencysitesoftware.com/).
|
[Reference implementation](http://emergencysitesoftware.com/).
|
||||||
License
|
##License
|
||||||
------------
|
The source code of this project is available under a New BSD License.
|
||||||
The source code of this project is available under a New BSD License except for lib/jquery.min.js, which is provided under the original MIT License.
|
##News
|
||||||
Text of this project's license is available in LICENSE, and text of jQuery's license is available in JQ-LICENSE.
|
###Aug 18 2013
|
||||||
Changelog
|
An update including a working MySQL (PDO) implementation is in the works and should be
|
||||||
------------
|
pushed as early as tomorrow. (This update will not include an admin interface or a
|
||||||
|
submission interface, that will take a bit more testing. It will allow you to use
|
||||||
|
something like PHPMyAdmin to edit entries)
|
||||||
|
##Changelog
|
||||||
[+] Added
|
[+] Added
|
||||||
[ ] Removed
|
|
||||||
|
[-] Removed
|
||||||
|
|
||||||
[~] Fixed
|
[~] Fixed
|
||||||
0.1 (current)
|
|
||||||
|
###0.2 (current)
|
||||||
|
[~] Cleaning
|
||||||
|
|
||||||
|
[~] Refactoring
|
||||||
|
|
||||||
|
[~] Rewriting
|
||||||
|
|
||||||
|
[-] Placeholders
|
||||||
|
|
||||||
|
###0.1
|
||||||
[+] Database interfaces
|
[+] Database interfaces
|
||||||
|
|
||||||
[+] PHP 'database'
|
[+] PHP 'database'
|
||||||
|
|
||||||
[+] Main classes
|
[+] Main classes
|
||||||
|
|
||||||
[+] Javascript/CSS
|
[+] Javascript/CSS
|
||||||
|
|
||||||
[+] Placeholders
|
[+] Placeholders
|
10
admin.php
10
admin.php
|
@ -1,11 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
include_once('settings.php');
|
die("Not implemented yet");
|
||||||
include_once('lib/db.php');
|
require('include.php');
|
||||||
include_once('lib/db_'.$settings['db']['type'].'.php');
|
|
||||||
|
|
||||||
if (!Database::$wri || !$settings['db']['subm']) {
|
|
||||||
die("Submissions are currently disabled.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = null;
|
$p = null;
|
||||||
$db = new Database();
|
$db = new Database();
|
||||||
|
@ -31,4 +26,3 @@ if (isset($p)) {
|
||||||
} else {
|
} else {
|
||||||
//TODO: Display an interface for submitting a "whatever".
|
//TODO: Display an interface for submitting a "whatever".
|
||||||
}
|
}
|
||||||
die("In version 0.3");
|
|
10
ess-include.php
Executable file
10
ess-include.php
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
//Handle cloudflare
|
||||||
|
//(should be improved if possible)
|
||||||
|
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
|
||||||
|
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
|
||||||
|
}
|
||||||
|
define('ESS_SERVERSIDE_LOCATION', dirname(__FILE__) . '/');
|
||||||
|
require_once(ESS_SERVERSIDE_LOCATION . 'ess-settings.php');
|
||||||
|
require_once(ESS_SERVERSIDE_LOCATION . 'lib/ess-classes.php');
|
||||||
|
require_once(ESS_SERVERSIDE_LOCATION . 'lib/ess-db_' . ESS_DB_TYPE . '.php');
|
34
ess-settings.php
Executable file
34
ess-settings.php
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
/* By removing the following line you agree to the license. */
|
||||||
|
die("You must edit settings.php before you can use this software.");
|
||||||
|
|
||||||
|
|
||||||
|
define('ESS_NAME', 'Emergency Site Software');
|
||||||
|
|
||||||
|
define('ESS_LOCATION_PERMANENT', 'http://emergencysitesoftware.com/');
|
||||||
|
define('ESS_LOCATION_RELATIVE', '/');
|
||||||
|
|
||||||
|
define('ESS_EXTENSION_JS', '.js');
|
||||||
|
define('ESS_EXTENSION_CSS', '.css');
|
||||||
|
|
||||||
|
define('ESS_TAGLINE', 'A steady stream of code to host a simple website with.');
|
||||||
|
define('ESS_EXIT_TEXT', 'Show me <br /> the c0de.');
|
||||||
|
define('ESS_EXIT_LINK', 'https://github.com/terribleplan/emergencysite');
|
||||||
|
define('ESS_MORETEXT', 'I want to know <br /> more.');
|
||||||
|
define('ESS_SUBMITLINK', '/submit.php');
|
||||||
|
|
||||||
|
define('ESS_DB_TYPE', 'php');
|
||||||
|
define('ESS_DB_HOST', 'localhost');
|
||||||
|
define('ESS_DB_PORT', 3306);
|
||||||
|
define('ESS_DB_FILE', 'EsS.sqlite');
|
||||||
|
define('ESS_DB_USER', 'EmSiSo');
|
||||||
|
define('ESS_DB_PASS', 'DaBaPas');
|
||||||
|
|
||||||
|
define('ESS_DB_DATABASE', 'EmergSite');
|
||||||
|
define('ESS_DB_PREFIX', 'ESS_');
|
||||||
|
define('ESS_DB_ALLOWSUBMIT', false);
|
||||||
|
|
||||||
|
define('ESS_DB_TBL_USERS', ESS_DB_PREFIX . 'users');
|
||||||
|
define('ESS_DB_TBL_COLORS', ESS_DB_PREFIX . 'colors');
|
||||||
|
define('ESS_DB_TBL_PHRASES', ESS_DB_PREFIX . 'phrases');
|
||||||
|
define('ESS_DB_TBL_SUBMITTED', ESS_DB_PREFIX . 'submitted');
|
|
@ -19,7 +19,7 @@ body {
|
||||||
width: 400px;
|
width: 400px;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
padding-bottom: 20px;left: 50%;
|
padding-bottom: 20px;left: 50%;
|
||||||
}
|
}
|
||||||
.bottom span {
|
.bottom span {
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -47,7 +47,7 @@ body {
|
||||||
}
|
}
|
||||||
.corner {
|
.corner {
|
||||||
float: left;
|
float: left;
|
||||||
width: 140;
|
width: 140px;
|
||||||
min-height: 1px;
|
min-height: 1px;
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
height: 67px;
|
height: 67px;
|
||||||
|
@ -90,14 +90,14 @@ body {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
font-size: 30px
|
font-size:
|
||||||
|
30px
|
||||||
}
|
}
|
||||||
.top {
|
.top{
|
||||||
height: 67px;
|
height: 67px;
|
||||||
width: 960px;
|
width: 960px;
|
||||||
}
|
}
|
||||||
|
.submit{
|
||||||
.submit {
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: block;
|
display: block;
|
||||||
line-height: 15px;
|
line-height: 15px;
|
|
@ -1,11 +1,11 @@
|
||||||
function replaceContent(input) {
|
function replaceContent(input) {
|
||||||
$(".content").html(input);
|
$(".content")[0].innerHTML = input;
|
||||||
}
|
}
|
||||||
function changeColor(input) {
|
function changeColor(input) {
|
||||||
$("body").css("background-color",input);
|
document.body.style.background = input;
|
||||||
}
|
}
|
||||||
function loadAnother() {
|
function loadAnother() {
|
||||||
$.getJSON(beg + "index.php?q=-1&c=color", function (data) {
|
h(beg + "index.php?q=-1&c=color", function (data) {
|
||||||
replaceContent(data.content);
|
replaceContent(data.content);
|
||||||
changeColor(data.color);
|
changeColor(data.color);
|
||||||
});
|
});
|
1
ess-site.min.css
vendored
Executable file
1
ess-site.min.css
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
@CHARSET "ISO-8859-1";a{color:white;text-decoration:none;}body{color:white;font-size:14px;height:100%;line-height:20px;margin:0px;width:100%;font-family:helvetica,arial,sans-serif;}.bottom{margin-left:-200px;bottom:0px;position:absolute;width:400px;height:80px;padding-top:20px;padding-bottom:20px;left: 50%;}.bottom span{float:left;display:inline-block;position:relative;width:50%;font-size:23px;font-weight:bold;}.bottom a{display:block;position:relative;text-align:center;}.content{padding-top:40px;float:left;font-size:72px;font-weight:bold;line-height:80px;width:620px}.content a{border-bottom:4px solid white;}.corner{float:left;width:140px;min-height:1px;margin-left:20px;height:67px;}.done{border-right:thin solid white;box-sizing:border-box;float:left;font-size:23px;font-weight:bold;height:40px;position:relative;width:200px;}.main{position:relative;min-height:100%;overflow:hidden;margin:0 auto;width:940px;}.more{border-left:thin solid white;box-sizing:border-box;float:left;font-size:23px;font-weight:bold;height:40px;position:relative;width:200px;}.title{height:60px;float:left;width:780px;}.title h2{text-rendering:optimizelegibility;line-height:40px;margin-bottom:10px;margin-top:10px;height:40px;font-size: 30px}.top{height:67px;width:960px;}.submit{font-weight:bold;display:block;line-height:15px;padding-top:17px;width:65px;text-align:right;}.share{background-size:32px 32px;padding:32px;left:80px;top:-2px;}
|
1
ess-site.min.js
vendored
Executable file
1
ess-site.min.js
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
function replaceContent(e){$(".content")[0].innerHTML=e}function changeColor(e){document.body.style.background=e}function loadAnother(){h(beg+"index.php?q=-1&c=color",function(e){replaceContent(e.content);changeColor(e.color)});return false}
|
128
index.php
128
index.php
|
@ -1,92 +1,98 @@
|
||||||
<?php
|
<?php
|
||||||
include_once('settings.php');
|
/*
|
||||||
include_once('lib/db.php');
|
* You should have recieved a copy of the BSD 3-clause license with this file.
|
||||||
include_once('lib/db_'.$settings['db']['type'].'.php');
|
* If you cannot find a file named LICENSE it can be obtained from the github
|
||||||
include_once('lib/color.php');
|
* repository:
|
||||||
|
* https://github.com/terribleplan/emergencysite/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
require_once('ess-include.php');
|
||||||
/* Changelog is in README.md
|
/* Changelog is in README.md
|
||||||
* TODO list:
|
* TODO list:
|
||||||
*
|
*
|
||||||
* 0.2:
|
|
||||||
* SQLite Database class
|
|
||||||
* Submission page
|
|
||||||
*
|
|
||||||
* 0.3:
|
* 0.3:
|
||||||
* Admin page
|
* Admin page
|
||||||
|
* Submission page
|
||||||
*
|
*
|
||||||
* 0.4:
|
* 0.4:
|
||||||
* MySQL PDO Database class
|
* More databases
|
||||||
*
|
|
||||||
* 0.5:
|
|
||||||
* Installer
|
|
||||||
*
|
|
||||||
* 0.6:
|
|
||||||
* Other databases?
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
$db = new Database();
|
||||||
//initial setup
|
$clr = $db->randomColor();
|
||||||
$db = new database($settings);
|
|
||||||
$clr = new color($db);
|
|
||||||
$q = null;
|
$q = null;
|
||||||
$c = null;
|
$c = null;
|
||||||
|
if (isset($_GET['q'])) {
|
||||||
if(isset($_GET['q'])) {
|
|
||||||
$q = $_GET['q'];
|
$q = $_GET['q'];
|
||||||
}
|
}
|
||||||
|
if (isset($_GET['c'])) {
|
||||||
if(isset($_GET['c'])) {
|
if ($_GET['c'] === 'color') {
|
||||||
$c = $_GET['c'];
|
$c = 'color';
|
||||||
} else {
|
} else {
|
||||||
$c = "nocolor";
|
$c = 'nocolor';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$output = "";
|
|
||||||
|
|
||||||
if (isset($q)) {
|
if (isset($q)) {
|
||||||
/* API:
|
// API: c=color, <anything else>
|
||||||
* c= color, nocolor
|
|
||||||
* assumes nocolor
|
|
||||||
*/
|
|
||||||
header('Content-type: application/json');
|
header('Content-type: application/json');
|
||||||
$output = '{"result":"';
|
$output = '{"result":"';
|
||||||
if ($db->ready()) {
|
if ($db->ready()) {
|
||||||
|
$phrase = $db->getPhrase(-1);
|
||||||
$output .= 'success","content":"';
|
$output .= 'success","content":"';
|
||||||
|
if (is_int($q)) {
|
||||||
if (is_int($q) && $db->hasPhrase($q)) {
|
$phrase = $db->getPhrase($q);
|
||||||
$output .= $db->getPhrase($q);
|
|
||||||
} else {
|
} else {
|
||||||
$output .= $db->getPhrase(-1);
|
$phrase = $db->getPhrase(-1);
|
||||||
|
}
|
||||||
|
$output .= $phrase->getPhrase();
|
||||||
|
$output .= '","id":"';
|
||||||
|
$output .= $phrase->getID();
|
||||||
|
if ($phrase->getError() !== false) {
|
||||||
|
$output .= '","nf-error":"';
|
||||||
|
$output .= $phrase->getError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($c == 'color') {
|
if ($c == 'color') {
|
||||||
$output .= '","color":"' . $clr->rgbCSS();
|
$output .= '","color":"' . $clr->rgbCSS();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$output .= 'failure';
|
$output .= 'failure';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$output .= '"}';
|
$output .= '"}';
|
||||||
|
die($output);
|
||||||
} else {
|
} else {
|
||||||
|
?>
|
||||||
$output = "<html>\n<head>\n\t<title>" . strtolower($settings['type']) . " : " .
|
<html>
|
||||||
$settings['tagline']."</title>\n\t<meta property=\"og:title\" content=\"" . $settings['type'] .
|
<head>
|
||||||
"\"/>\n\t<meta property=\"og:type\" content=\"website\" />\n\t<meta property=\"og:description\" content=\"" .
|
<title><?php print(strtolower(ESS_NAME)); ?> : <?php print(ESS_TAGLINE); ?></title>
|
||||||
$settings['tagline'] . "\" />\n\t<meta property=\"og:url\" content=\"" . $settings['pmloc']."\" />\n" .
|
<meta property="og:title" content="<?php print(ESS_NAME); ?>" />
|
||||||
"\t<script src=\"lib/jquery.min.js\"></script>\n\t<script src=\"site.js\"></script>\n\t<script type=\"text/javascript\">var beg =\"" .
|
<meta property="og:type" content="website" />
|
||||||
$settings['relloc'] . "\";</script>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"site.css\">\n\t<style type=\"text/css\">body{background-color:" .
|
<meta property="og:description\" content="<?php print(ESS_TAGLINE); ?>" />
|
||||||
$clr->html() . ";}</style>\n</head>\n<body>\n\t<div class=\"main\">\n\t\t<div class=\"top\">\n\t\t\t<div class=\"title\"><h2>" .
|
<meta property="og:url" content="<?php print(ESS_LOCATION_PERMANENT); ?>" />
|
||||||
strtolower($settings['type']) . "</h2></div>\n\t\t\t<div class=\"corner\">\n\t\t\t\t<div class=\"submit\"><a href=\"" .
|
<script src="<?php print(ESS_LOCATION_PERMANENT); ?>lib/ess-140medley<?php print(ESS_EXTENSION_JS); ?>" type="text/javascript"></script>
|
||||||
$settings['submitlink'] . "\">submit your own</a></div>\n\t\t\t\t<div class=\"share\"></div>\n\t\t\t</div>\n\t</div>\n\t\t<div class=\"content\">" .
|
<script src="<?php print(ESS_LOCATION_PERMANENT); ?>lib/ess-json2<?php print(ESS_EXTENSION_JS); ?>" type="text/javascript"></script>
|
||||||
$db->getPhrase(-1) . "</div>\n\t\t<div class=\"bottom\">\n\t\t\t<div class=\"done\"><a href=\"" . $settings['exitlink'] .
|
<script type="text/javascript">var beg = '<?php print(ESS_LOCATION_PERMANENT); ?>';</script>
|
||||||
"\">".$settings['exittext'] . "</a></div>\n\t\t\t<div class=\"more\"><a href=\"#\" onclick=\"loadAnother();\">" .
|
<script src="<?php print(ESS_LOCATION_PERMANENT); ?>ess-site<?php print(ESS_EXTENSION_JS); ?>" type="text/javascript"></script>
|
||||||
$settings['moretext'] . "</a></div>\n\t\t</div>\n\t</div>\n</body>\n</html>";
|
<link rel="stylesheet" type="text/css" href="<?php print(ESS_LOCATION_PERMANENT); ?>ess-site<?php print(ESS_EXTENSION_CSS); ?>">
|
||||||
|
<style type="text/css">body{background-color:<?php print($clr->html()); ?>;}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="main">
|
||||||
|
<div class="top">
|
||||||
|
<div class="title">
|
||||||
|
<h2><?php print(strtolower(ESS_NAME)); ?></h2>
|
||||||
|
</div>
|
||||||
|
<div class="corner">
|
||||||
|
<div class="submit"><a href="<?php print(ESS_SUBMITLINK); ?>">submit your own</a></div>
|
||||||
|
<div class="share"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="content"><?php print($db->getPhrase(-1)->getPhrase()); ?></div>
|
||||||
|
<div class="bottom">
|
||||||
|
<div class="done"><a href="<?php print(ESS_EXIT_LINK); ?>"><?php print(ESS_EXIT_TEXT); ?></a></div>
|
||||||
|
<div class="more"><a href="#" onclick="loadAnother();"><?php print(ESS_MORETEXT); ?></a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<?php
|
||||||
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
die ($output);
|
|
|
@ -1,44 +0,0 @@
|
||||||
<?php
|
|
||||||
class color {
|
|
||||||
var $cur = null;
|
|
||||||
|
|
||||||
function __construct(&$db) {
|
|
||||||
$this->cur = $db->getColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
function rgbIntArray(){
|
|
||||||
return $this->cur;
|
|
||||||
}
|
|
||||||
|
|
||||||
function rgbHexArray() {
|
|
||||||
return array(
|
|
||||||
dechex($this->cur[0]),
|
|
||||||
dechex($this->cur[1]),
|
|
||||||
dechex($this->cur[2])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function rgbCSS() {
|
|
||||||
$t = $this->cur;
|
|
||||||
return "rgb(" . $this->cur[0] . "," . $this->cur[1] . "," .
|
|
||||||
$this->cur[2] . ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
function html() {
|
|
||||||
$r = "#";
|
|
||||||
if ($this->cur[0] < 16)
|
|
||||||
$r .= "0";
|
|
||||||
$r .= dechex($this->cur[0]);
|
|
||||||
if ($this->cur[1] < 16)
|
|
||||||
$r .= "0";
|
|
||||||
$r .= dechex($this->cur[1]);
|
|
||||||
if ($this->cur[2] < 16)
|
|
||||||
$r .= "0";
|
|
||||||
$r .= dechex($this->cur[2]);
|
|
||||||
return $r;
|
|
||||||
}
|
|
||||||
|
|
||||||
function newColor(){
|
|
||||||
$this->cur = $dtb->getColor();
|
|
||||||
}
|
|
||||||
}
|
|
42
lib/db.php
42
lib/db.php
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
interface ReadableDatabase {
|
|
||||||
// if this allowed interfaces to have variables
|
|
||||||
// your db class MUST define this
|
|
||||||
// public static $wri;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function should return a random color.
|
|
||||||
*/
|
|
||||||
function getColor();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function should return the specified or a random phrase.
|
|
||||||
*/
|
|
||||||
function getPhrase($number=-1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function tells if we can store submissions.
|
|
||||||
*/
|
|
||||||
function canWrite();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the database can be read from (and write if it supports it).
|
|
||||||
*/
|
|
||||||
function ready();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
interface WritableDatabase {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function stores a submission into the submitted table.
|
|
||||||
* It is up to the implementing class
|
|
||||||
*/
|
|
||||||
function storeSubmission($submission, $clientIP);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function moves a submission into the approved table.
|
|
||||||
*/
|
|
||||||
function approveSubmission($id);
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?php
|
|
||||||
die("Database not implemented until 0.4.");
|
|
||||||
//SELECT * FROM table WHERE key >= FLOOR(RAND()*MAX(id)) LIMIT 1
|
|
||||||
class Database implements ReadableDatabase, WritableDatabase {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
class Database implements ReadableDatabase {
|
|
||||||
public static $wri = false;
|
|
||||||
|
|
||||||
private $cont, $colo, $sets;
|
|
||||||
function __construct(&$settings) {
|
|
||||||
$this->cont=array(
|
|
||||||
0=>'This software is distributed under a BSD license.',
|
|
||||||
1=>'This software is still under development.',
|
|
||||||
2=>'This software is open source.',
|
|
||||||
3=>'This software is awesomesauce.',
|
|
||||||
4=>'This software can be downloaded from github.',
|
|
||||||
);
|
|
||||||
$this->colo = array(
|
|
||||||
array(0,128,255), //blue
|
|
||||||
array(255,0,128), //magenta
|
|
||||||
array(1,223,58), //green
|
|
||||||
array(255,191,0), //oragnge-yellow
|
|
||||||
);
|
|
||||||
$this->sets = $settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPhrase($number=-1) {
|
|
||||||
$tc = count($this->cont) - 1;
|
|
||||||
if ($number > -1 && $number <= $tc) {
|
|
||||||
return $this->cont[$number];
|
|
||||||
}
|
|
||||||
return $this->cont[rand(0,$tc)];
|
|
||||||
}
|
|
||||||
|
|
||||||
function getColor() {
|
|
||||||
return $this->colo[rand(0,count($this->colo)-1)];
|
|
||||||
}
|
|
||||||
|
|
||||||
function canWrite() {
|
|
||||||
return self::$wri;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ready() {
|
|
||||||
return (isset($this->cont) && isset($this->colo));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?php
|
|
||||||
die("Database not implemented until 0.2.");
|
|
||||||
class database implements ReadableDatabase, WritableDatabase {
|
|
||||||
|
|
||||||
}
|
|
71
lib/ess-140medley.js
Executable file
71
lib/ess-140medley.js
Executable file
|
@ -0,0 +1,71 @@
|
||||||
|
/* 140 medley
|
||||||
|
* Technically this not longer conforms to the 140 bytes rule, but i like to think it is done in the spirit of the challenge.
|
||||||
|
* (c) 2013 - TerriblePlan
|
||||||
|
* Licensed under the terms of the BSD license
|
||||||
|
* This file is "forked" from https://github.com/honza/140medley
|
||||||
|
* This is a micro-framework or a collection of small, helpful utilities for common javascript tasks.
|
||||||
|
* - create DOM elements - m();
|
||||||
|
* - DOM selector - $();
|
||||||
|
* - Get cross-browser xhr - j();
|
||||||
|
* - Execute things when browser is ready - r();
|
||||||
|
*/
|
||||||
|
function m(e, t, n) {
|
||||||
|
t = document;
|
||||||
|
n = t.createElement("p");
|
||||||
|
n.innerHTML = e;
|
||||||
|
e = t.createDocumentFragment();
|
||||||
|
while (t = n.firstChild)
|
||||||
|
e.appendChild(t);
|
||||||
|
return e;
|
||||||
|
};
|
||||||
|
|
||||||
|
function $(e, t) {
|
||||||
|
e = e.match(/^(\W)?(.*)/);
|
||||||
|
return (t || document)["getElement"
|
||||||
|
+ (e[1] ? e[1] == "#" ? "ById" : "sByClassName" : "sByTagName")]
|
||||||
|
(e[2]);
|
||||||
|
};
|
||||||
|
|
||||||
|
function j(e) {
|
||||||
|
for (e = 0; e < 4; e++)
|
||||||
|
try {
|
||||||
|
return e ? new ActiveXObject(
|
||||||
|
[ , "Msxml2", "Msxml3", "Microsoft" ][e] + ".XMLHTTP")
|
||||||
|
: new XMLHttpRequest;
|
||||||
|
} catch (t) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var re = [], rl;
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
var t = "complete";
|
||||||
|
if (document.readyState !== t)
|
||||||
|
if (rl === 1)
|
||||||
|
re.push(e);
|
||||||
|
else {
|
||||||
|
rl = 1;
|
||||||
|
re.push(e);
|
||||||
|
var n = setInterval(function() {
|
||||||
|
if (document.readyState !== t)
|
||||||
|
return;
|
||||||
|
clearInterval(n);
|
||||||
|
while (re.length)
|
||||||
|
re.shift()();
|
||||||
|
re = null
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e();
|
||||||
|
};
|
||||||
|
|
||||||
|
function h(u, c) {
|
||||||
|
var q = j();
|
||||||
|
q.open("GET", u, true);
|
||||||
|
q.onreadystatechange = function() {
|
||||||
|
if (q.readyState == 4)
|
||||||
|
if (q.status == 200)
|
||||||
|
c(JSON.parse(q.responseText));
|
||||||
|
}
|
||||||
|
q.send();
|
||||||
|
}
|
1
lib/ess-140medley.min.js
vendored
Executable file
1
lib/ess-140medley.min.js
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
function m(e,t,n){t=document;n=t.createElement("p");n.innerHTML=e;e=t.createDocumentFragment();while(t=n.firstChild)e.appendChild(t);return e}function $(e,t){e=e.match(/^(\W)?(.*)/);return(t||document)["getElement"+(e[1]?e[1]=="#"?"ById":"sByClassName":"sByTagName")](e[2])}function j(e){for(e=0;e<4;e++)try{return e?new ActiveXObject([,"Msxml2","Msxml3","Microsoft"][e]+".XMLHTTP"):new XMLHttpRequest}catch(t){}}function r(e){var t="complete";if(document.readyState!==t)if(rl===1)re.push(e);else{rl=1;re.push(e);var n=setInterval(function(){if(document.readyState!==t)return;clearInterval(n);while(re.length)re.shift()();re=null},50)}else e()}function h(e,t){var n=j();n.open("GET",e,true);n.onreadystatechange=function(){if(n.readyState==4)if(n.status==200)t(JSON.parse(n.responseText))};n.send()}var re=[],rl;
|
122
lib/ess-classes.php
Executable file
122
lib/ess-classes.php
Executable file
|
@ -0,0 +1,122 @@
|
||||||
|
<?php
|
||||||
|
class Color {
|
||||||
|
private $color = false, $id = false;
|
||||||
|
|
||||||
|
function __construct($id, $color) {
|
||||||
|
$this->color = $color;
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbIntArray(){
|
||||||
|
return $this->color;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbHexArray() {
|
||||||
|
return array(dechex($this->color[0]), dechex($this->color[1]), dechex($this->color[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbCSS() {
|
||||||
|
return "rgb(" . $this->color[0] . "," . $this->color[1] . "," .
|
||||||
|
$this->color[2] . ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
function html() {
|
||||||
|
$r = "#";
|
||||||
|
if ($this->color[0] < 16)
|
||||||
|
$r .= "0";
|
||||||
|
$r .= dechex($this->color[0]);
|
||||||
|
if ($this->color[1] < 16)
|
||||||
|
$r .= "0";
|
||||||
|
$r .= dechex($this->color[1]);
|
||||||
|
if ($this->color[2] < 16)
|
||||||
|
$r .= "0";
|
||||||
|
$r .= dechex($this->color[2]);
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Phrase {
|
||||||
|
private $phrase = false, $id = false, $error = false;
|
||||||
|
|
||||||
|
function __construct($id, $phrase, $error=false) {
|
||||||
|
if ($error !== false) {
|
||||||
|
if ($error === true) {
|
||||||
|
$this->error = 'Generic';
|
||||||
|
} else {
|
||||||
|
$this->error = $error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->id = $id;
|
||||||
|
$this->phrase = $phrase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getError() {
|
||||||
|
return $this->error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getID() {
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPhrase() {
|
||||||
|
return $this->phrase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
interface ReadableDatabase {
|
||||||
|
/**
|
||||||
|
* Should connect to the database and get ready for queries.
|
||||||
|
*/
|
||||||
|
function __construct();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function should return a random color.
|
||||||
|
*/
|
||||||
|
public function randomColor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function should return the specified or a random phrase.
|
||||||
|
*/
|
||||||
|
public function getPhrase($id=-1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function randomPhraseID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the database can be read from (and write if it supports it).
|
||||||
|
*/
|
||||||
|
public function ready();
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WritableDatabase {
|
||||||
|
/**
|
||||||
|
* Function stores a submission into the submitted table.
|
||||||
|
* It is up to the implementing class
|
||||||
|
*/
|
||||||
|
public function storeSubmission($submission, $clientIP);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function moves a submission into the approved table.
|
||||||
|
*/
|
||||||
|
public function approveSubmission($id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function drops a submission from the database table.
|
||||||
|
*/
|
||||||
|
public function removeSubmission($id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function drops a phrase from the database.
|
||||||
|
*/
|
||||||
|
public function removePhrase($id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function adds a color to the proper table
|
||||||
|
*/
|
||||||
|
public function addColor($color);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the color with $id from the proper table
|
||||||
|
*/
|
||||||
|
public function removeColor($id);
|
||||||
|
}
|
76
lib/ess-db_pdo_mysql.php
Executable file
76
lib/ess-db_pdo_mysql.php
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
class Database implements ReadableDatabase {
|
||||||
|
//connection
|
||||||
|
private $conn = null, $ready = false;
|
||||||
|
//statements
|
||||||
|
private $stm1 = null, $stm2 = null, $stm3 = null, $stm4 = null;
|
||||||
|
|
||||||
|
function __construct() {
|
||||||
|
try {
|
||||||
|
$this->conn = new PDO("mysql:host=" . ESS_DB_HOST . "dbname=" . ESS_DB_DATABASE . ";charset=utf8", ESS_DB_USER, ESS_DB_PASS);
|
||||||
|
$this->ready = true;
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function randomColor() {
|
||||||
|
try{
|
||||||
|
if ($this->stm2 === null) {
|
||||||
|
$this->stm2 = $this->conn->prepare("SELECT * FROM " . ESS_DB_TBL_COLORS . " ORDER BY RAND() LIMIT 1");
|
||||||
|
}
|
||||||
|
$ta = $this->stm2->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if ($ta !== false) {
|
||||||
|
return $ta['id'];
|
||||||
|
}
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPhrase($id=-1) {
|
||||||
|
try{
|
||||||
|
if ($id >= 0) {
|
||||||
|
try{
|
||||||
|
if ($this->stm1 === null) {
|
||||||
|
$this->stm1 = $this->conn->prepare("SELECT * FROM " . ESS_DB_TBL_PHRASES . " WHERE id = ? LIMIT 1");
|
||||||
|
}
|
||||||
|
$this->stm1->execute(array($id));
|
||||||
|
$ta = $this->stm1->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if ($ta !== false) {
|
||||||
|
return new Phrase($ta['id'], $ta['phrase']);
|
||||||
|
}
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($this->stm3 === null) {
|
||||||
|
$this->stm3 = $this->conn->prepare("SELECT * FROM " . ESS_DB_TBL_PHRASES . " ORDER BY RAND() LIMIT 1");
|
||||||
|
}
|
||||||
|
$this->stm3->execute();
|
||||||
|
$ta = $this->stm3->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if ($ta !== false) {
|
||||||
|
return new Phrase($ta['id'], $ta['phrase']);
|
||||||
|
}
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function randomPhraseID() {
|
||||||
|
try{
|
||||||
|
if ($this->stm3 === null) {
|
||||||
|
$this->stm3 = $this->conn->prepare("SELECT * FROM " . ESS_DB_TBL_PHRASES . " ORDER BY RAND() LIMIT 1");
|
||||||
|
}
|
||||||
|
$this->stm3->execute();
|
||||||
|
$ta = $this->stm3->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if ($ta !== false) {
|
||||||
|
return $ta['id'];
|
||||||
|
}
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ready() {
|
||||||
|
return ($this->conn->ready && $this->PDO !== false && $this->PDO !== null);
|
||||||
|
}
|
||||||
|
}
|
45
lib/ess-db_php.php
Executable file
45
lib/ess-db_php.php
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This is enough for a small site, such as the reference implementation. If
|
||||||
|
* you want advansed features such as submissions and administration, then you
|
||||||
|
* should use a different database driver.
|
||||||
|
*/
|
||||||
|
class Database implements ReadableDatabase {
|
||||||
|
private $cont, $colo, $numcont, $numcolo;
|
||||||
|
function __construct() {
|
||||||
|
$this->cont=array(
|
||||||
|
0=>'This software is distributed under a BSD license.',
|
||||||
|
1=>'This software is still under development.',
|
||||||
|
2=>'This software is awesomesauce.',
|
||||||
|
3=>'This software can be downloaded from <a href="http://github.com/terribleplan/emergencysite">github</a>.',
|
||||||
|
);
|
||||||
|
$this->colo = array(
|
||||||
|
array(0,128,255), //blue
|
||||||
|
array(255,0,128), //magenta
|
||||||
|
array(1,223,58), //green
|
||||||
|
array(255,191,0) //oragnge-yellow
|
||||||
|
);
|
||||||
|
$this->numcont = count($this->cont);
|
||||||
|
$this->numcolo = count($this->colo);
|
||||||
|
}
|
||||||
|
|
||||||
|
function randomColor() {
|
||||||
|
$id = rand(0, $this->numcolo-1);
|
||||||
|
return new Color($id, $this->colo[$id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPhrase($id=-1) {
|
||||||
|
if ($id >= 0 && $id < $this->numcont) {
|
||||||
|
return new Phrase($id, $this->cont[$id]);
|
||||||
|
}
|
||||||
|
return $this->getPhrase($this->randomPhraseID());
|
||||||
|
}
|
||||||
|
|
||||||
|
function randomPhraseID() {
|
||||||
|
return rand(0, $this->numcont-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ready() {
|
||||||
|
return (isset($this->cont) && isset($this->colo));
|
||||||
|
}
|
||||||
|
}
|
173
lib/ess-json2.js
Executable file
173
lib/ess-json2.js
Executable file
|
@ -0,0 +1,173 @@
|
||||||
|
if (typeof JSON !== 'object') {
|
||||||
|
JSON = {};
|
||||||
|
}
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function f(n) {
|
||||||
|
return n < 10 ? '0' + n : n;
|
||||||
|
}
|
||||||
|
if (typeof Date.prototype.toJSON !== 'function') {
|
||||||
|
Date.prototype.toJSON = function () {
|
||||||
|
return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' +
|
||||||
|
f(this.getUTCMonth() + 1) + '-' +
|
||||||
|
f(this.getUTCDate()) + 'T' +
|
||||||
|
f(this.getUTCHours()) + ':' +
|
||||||
|
f(this.getUTCMinutes()) + ':' +
|
||||||
|
f(this.getUTCSeconds()) + 'Z' : null;
|
||||||
|
};
|
||||||
|
String.prototype.toJSON =
|
||||||
|
Number.prototype.toJSON =
|
||||||
|
Boolean.prototype.toJSON = function () {
|
||||||
|
return this.valueOf();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var cx =
|
||||||
|
/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
||||||
|
escapable =
|
||||||
|
/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
||||||
|
gap, indent, meta = {
|
||||||
|
'\b': '\\b',
|
||||||
|
'\t': '\\t',
|
||||||
|
'\n': '\\n',
|
||||||
|
'\f': '\\f',
|
||||||
|
'\r': '\\r',
|
||||||
|
'"': '\\"',
|
||||||
|
'\\': '\\\\'
|
||||||
|
}, rep;
|
||||||
|
|
||||||
|
function quote(string) {
|
||||||
|
escapable.lastIndex = 0;
|
||||||
|
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
|
||||||
|
var c = meta[a];
|
||||||
|
return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(
|
||||||
|
16)).slice(-4);
|
||||||
|
}) + '"' : '"' + string + '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
function str(key, holder) {
|
||||||
|
var i, k, v, length, mind = gap,
|
||||||
|
partial, value = holder[key];
|
||||||
|
if (value && typeof value === 'object' &&
|
||||||
|
typeof value.toJSON === 'function') {
|
||||||
|
value = value.toJSON(key);
|
||||||
|
}
|
||||||
|
if (typeof rep === 'function') {
|
||||||
|
value = rep.call(holder, key, value);
|
||||||
|
}
|
||||||
|
switch (typeof value) {
|
||||||
|
case 'string':
|
||||||
|
return quote(value);
|
||||||
|
case 'number':
|
||||||
|
return isFinite(value) ? String(value) : 'null';
|
||||||
|
case 'boolean':
|
||||||
|
case 'null':
|
||||||
|
return String(value);
|
||||||
|
case 'object':
|
||||||
|
if (!value) {
|
||||||
|
return 'null';
|
||||||
|
}
|
||||||
|
gap += indent;
|
||||||
|
partial = [];
|
||||||
|
if (Object.prototype.toString.apply(value) === '[object Array]') {
|
||||||
|
length = value.length;
|
||||||
|
for (i = 0; i < length; i += 1) {
|
||||||
|
partial[i] = str(i, value) || 'null';
|
||||||
|
}
|
||||||
|
v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' +
|
||||||
|
gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
|
||||||
|
gap = mind;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
if (rep && typeof rep === 'object') {
|
||||||
|
length = rep.length;
|
||||||
|
for (i = 0; i < length; i += 1) {
|
||||||
|
if (typeof rep[i] === 'string') {
|
||||||
|
k = rep[i];
|
||||||
|
v = str(k, value);
|
||||||
|
if (v) {
|
||||||
|
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (k in value) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
||||||
|
v = str(k, value);
|
||||||
|
if (v) {
|
||||||
|
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' +
|
||||||
|
gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
|
||||||
|
gap = mind;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeof JSON.stringify !== 'function') {
|
||||||
|
JSON.stringify = function (value, replacer, space) {
|
||||||
|
var i;
|
||||||
|
gap = '';
|
||||||
|
indent = '';
|
||||||
|
if (typeof space === 'number') {
|
||||||
|
for (i = 0; i < space; i += 1) {
|
||||||
|
indent += ' ';
|
||||||
|
}
|
||||||
|
} else if (typeof space === 'string') {
|
||||||
|
indent = space;
|
||||||
|
}
|
||||||
|
rep = replacer;
|
||||||
|
if (replacer && typeof replacer !== 'function' &&
|
||||||
|
(typeof replacer !== 'object' ||
|
||||||
|
typeof replacer.length !== 'number')) {
|
||||||
|
throw new Error('JSON.stringify');
|
||||||
|
}
|
||||||
|
return str('', {
|
||||||
|
'': value
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (typeof JSON.parse !== 'function') {
|
||||||
|
JSON.parse = function (text, reviver) {
|
||||||
|
var j;
|
||||||
|
|
||||||
|
function walk(holder, key) {
|
||||||
|
var k, v, value = holder[key];
|
||||||
|
if (value && typeof value === 'object') {
|
||||||
|
for (k in value) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
||||||
|
v = walk(value, k);
|
||||||
|
if (v !== undefined) {
|
||||||
|
value[k] = v;
|
||||||
|
} else {
|
||||||
|
delete value[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return reviver.call(holder, key, value);
|
||||||
|
}
|
||||||
|
text = String(text);
|
||||||
|
cx.lastIndex = 0;
|
||||||
|
if (cx.test(text)) {
|
||||||
|
text = text.replace(cx, function (a) {
|
||||||
|
return '\\u' +
|
||||||
|
('0000' + a.charCodeAt(0).toString(16)).slice(-4);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (/^[\],:{}\s]*$/
|
||||||
|
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
|
||||||
|
.replace(
|
||||||
|
/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
|
||||||
|
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
||||||
|
j = eval('(' + text + ')');
|
||||||
|
return typeof reviver === 'function' ? walk({
|
||||||
|
'': j
|
||||||
|
}, '') : j;
|
||||||
|
}
|
||||||
|
throw new SyntaxError('JSON.parse');
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}());
|
1
lib/ess-json2.min.js
vendored
Executable file
1
lib/ess-json2.min.js
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
if(typeof JSON!=="object"){JSON={}}(function(){"use strict";function f(e){return e<10?"0"+e:e}function quote(e){escapable.lastIndex=0;return escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return typeof t==="string"?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,i,s,o=gap,u,a=t[e];if(a&&typeof a==="object"&&typeof a.toJSON==="function"){a=a.toJSON(e)}if(typeof rep==="function"){a=rep.call(t,e,a)}switch(typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a){return"null"}gap+=indent;u=[];if(Object.prototype.toString.apply(a)==="[object Array]"){s=a.length;for(n=0;n<s;n+=1){u[n]=str(n,a)||"null"}i=u.length===0?"[]":gap?"[\n"+gap+u.join(",\n"+gap)+"\n"+o+"]":"["+u.join(",")+"]";gap=o;return i}if(rep&&typeof rep==="object"){s=rep.length;for(n=0;n<s;n+=1){if(typeof rep[n]==="string"){r=rep[n];i=str(r,a);if(i){u.push(quote(r)+(gap?": ":":")+i)}}}}else{for(r in a){if(Object.prototype.hasOwnProperty.call(a,r)){i=str(r,a);if(i){u.push(quote(r)+(gap?": ":":")+i)}}}}i=u.length===0?"{}":gap?"{\n"+gap+u.join(",\n"+gap)+"\n"+o+"}":"{"+u.join(",")+"}";gap=o;return i}}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;if(typeof JSON.stringify!=="function"){JSON.stringify=function(e,t,n){var r;gap="";indent="";if(typeof n==="number"){for(r=0;r<n;r+=1){indent+=" "}}else if(typeof n==="string"){indent=n}rep=t;if(t&&typeof t!=="function"&&(typeof t!=="object"||typeof t.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":e})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){function walk(e,t){var n,r,i=e[t];if(i&&typeof i==="object"){for(n in i){if(Object.prototype.hasOwnProperty.call(i,n)){r=walk(i,n);if(r!==undefined){i[n]=r}else{delete i[n]}}}}return reviver.call(e,t,i)}var j;text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}})()
|
19
lib/jquery.min.js
vendored
19
lib/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
35
settings.php
35
settings.php
|
@ -1,35 +0,0 @@
|
||||||
<?php
|
|
||||||
$settings = array(
|
|
||||||
'type' => 'Emergency Site Software',
|
|
||||||
'pmloc'=>'https://emergencysitesoftware.com/',
|
|
||||||
'relloc' => '/',
|
|
||||||
'tagline' => 'A steady stream of code to host a simple website with.',
|
|
||||||
'exittext' => ' Thanks! <br /> Goodbye.',
|
|
||||||
'moretext' => ' I want to know <br /> more.',
|
|
||||||
'exitlink' => 'http://google.com/',
|
|
||||||
'submitlink' => 'mailto:submit@emergencysitesoftware.com',
|
|
||||||
'db' => array(
|
|
||||||
'type' => 'php',
|
|
||||||
'host' => 'localhost',
|
|
||||||
'file' => 'EsS.sqlite',
|
|
||||||
'user' => 'EmSiSo',
|
|
||||||
'pass' => 'DaBaPas',
|
|
||||||
'datb' => 'EmergSite',
|
|
||||||
'prfx' => 'ESS_',
|
|
||||||
'subm' => false,
|
|
||||||
'tabl' => array(
|
|
||||||
'users' => 'users',
|
|
||||||
'colors' => 'colors',
|
|
||||||
'phrases' => 'phrases',
|
|
||||||
'submitted' => 'submitted'
|
|
||||||
),
|
|
||||||
'encr' => array(
|
|
||||||
'useEncryption' => false,
|
|
||||||
'encryptionKey' => 'thisIsAWeakSauceEncryptionKey',
|
|
||||||
'useSalt' => false,
|
|
||||||
'salt' => 'thisSaltIsSpoiled'
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
/* By removing the following line you agree to the license. */
|
|
||||||
die("You must edit settings.php before you can use this software.");
|
|
10
submit.php
10
submit.php
|
@ -1,11 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
include_once('settings.php');
|
die("Not implemented yet");
|
||||||
include_once('lib/db.php');
|
require('include.php');
|
||||||
include_once('lib/db_'.$settings['db']['type'].'.php');
|
|
||||||
|
|
||||||
if (!Database::$wri || !$settings['db']['subm']) {
|
|
||||||
die("Submissions are currently disabled.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = null;
|
$p = null;
|
||||||
$db = new Database();
|
$db = new Database();
|
||||||
|
@ -19,4 +14,3 @@ if (isset($p)) {
|
||||||
} else {
|
} else {
|
||||||
//TODO: Display an interface for submitting a "whatever".
|
//TODO: Display an interface for submitting a "whatever".
|
||||||
}
|
}
|
||||||
die("In version 0.2");
|
|
Reference in a new issue