Contains work for issue #9. Marks transition to OO per issue #12

This commit is contained in:
nearwood 2015-02-15 13:10:25 -05:00
parent c26626907a
commit b7565eec92
49 changed files with 1176 additions and 16 deletions

24
src/browse.php Normal file
View File

@ -0,0 +1,24 @@
<div id='content'>
<?php
require "msqur.php";
if (isset($_GET['p'])) {
$page = $_GET['p']; //TODO processing
}
$msqur->browse($page);
//$results = browseAll();
//$numResults = count($results);
//echo '<div class="debug">'; var_export($results); echo '</div>';
echo '<div class="info">' . $numResults . ' results.</div>';
echo '<table>';
echo '<tr><th>ID</th><th>Cylinders</th><th>Liters</th><th>Compression</th><th>Turbo</th><th>Firmware/Version</th><th>Upload Date</th><th>Views</th></th>';
for ($c = 0; $c < $numResults; $c++)
{
echo '<tr><td><a href="index.php?msq=' . $results[$c]['mid'] . '">' . $results[$c]['mid'] . '</a></td><td>' . $results[$c]['numCylinders'] . '</td><td>' . $results[$c]['displacement'] . '</td><td>' . $results[$c]['compression'] . ':1</td><td>' . $results[$c]['induction'] . '</td><td>' . $results[$c]['firmware'] . '/' . $results[$c]['signature'] . '</td><td>' . $results[$c]['uploadDate'] . '</td><td></td></tr>';
}
echo '</table>';
?>
</div>

18
src/config.php Normal file
View File

@ -0,0 +1,18 @@
<?php
define('CONFIG_VERSION', "4");
define('DB_HOST', "localhost");
define('DB_USERNAME', "msqur");
define('DB_PASSWORD', "d4jQTeCRRxuJeypD");
define('DB_NAME', "msqur");
define('DEBUG', TRUE);
define('DISABLE_MSQ_CACHE', TRUE);
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', true);
//Default in case it's not set in php.ini
//MSQUR-1
date_default_timezone_set('UTC');
?>

19
src/config.php.dist Normal file
View File

@ -0,0 +1,19 @@
<?php
define('CONFIG_VERSION', "4");
define('DB_HOST', "localhost");
define('DB_USERNAME', "msqur");
define('DB_PASSWORD', "");
define('DB_NAME', "msqur");
define('DEBUG', FALSE);
define('DISABLE_MSQ_CACHE', FALSE);
error_reporting(E_ALL);
ini_set('display_errors', DEBUG ? 'On' : 'Off');
//ini_set('log_errors', DEBUG ? 'Off' : 'On');
//Default in case it's not set in php.ini
//MSQUR-1
date_default_timezone_set('UTC');
?>

12
src/index.php Normal file
View File

@ -0,0 +1,12 @@
<?php
require "msqur.php";
//Msq $msq = msqur.upload("blah");
$msqur->splash();
//browse
//list<Msq> msqs = browse()//browse(START_NUMBER)
//have to check with angular how data pagination/ordering can work best
//search
?>

View File

@ -1,20 +1,151 @@
<?php
/*
* @brief INI Stuff
*
* INI.getConfig
*/
class INI
{
private static $fileScheme = "msq/whatever";
function __construct()
/**
* @brief Given a signature string, finds and parses the respective INI file.
*
* Returns an array of the config file contents.
* @param $signature The signature string which will be modified into a firmware/version array.
*/
public static function getConfig(&$signature)
{
//sig is 19 bytes + \0
//"MS3 Format 0262.09 "
//"MS3 Format 0435.14P"
//"MS2Extra comms332m2"
//"MS2Extra comms333e2"
//"MS2Extra Serial321 "
//"MS2Extra Serial310 "
//"MSII Rev 3.83000 "
//Get the signature from the MSQ
$sig = explode(' ', $signature); //, 3); limit 3 buckets
$msVersion = $sig[0];
if ($msVersion == "MS2Extra") $fwVersion = $sig[1];
else $fwVersion = $sig[2];
if (DEBUG) echo "<div class=\"debug\">$msVersion/$fwVersion</div>";
//Parse msVersion
switch ($msVersion)
{
case "MS1":
$msDir = "ms1/";
break;
case "MSII":
$msDir = "ms2/";
break;
case "MS2Extra":
$msDir = "ms2extra/";
break;
case "MS3":
$msDir = "ms3/";
break;
}
//Setup firmware version for matching.
//(explode() already trimmed the string of spaces) -- this isn't true a couple inis
//If there's a decimal, remove any trailing zeros.
if (strrpos($fwVersion, '.') !== FALSE)
$fwVersion = rtrim($fwVersion, '0');
//store all our hardwork for use in the calling function
$signature = array($msVersion, $fwVersion);
$iniFile = "ini/" . $msDir . $fwVersion . ".ini";
$msqMap = parse($iniFile, TRUE);
return $msqMap;
}
/**
* @brief Parse a MS INI file into sections.
*
* Based on code from: goulven.ch@gmail.com (php.net comments) http://php.net/manual/en/function.parse-ini-file.php#78815
*
* @param $file The path to the INI file that will be loaded and parsed.
* @param $something Unused
* @returns A huge array of arrays, starting with sections.
*/
public static function parse($file, $something)
{
if (DEBUG) echo "<div class=\"debug\">Attempting to open: $file</div>";
try
{
$ini = file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
}
catch (Exception $e)
{
echo "<div class=\"error\">Could not open: $file</div>";
return null;
}
if ($ini == FALSE || count($ini) == 0) return null;
else if (DEBUG) echo "<div class=\"debug\">File opened.</div>";
$globals = array();
$sections = array();
$currentSection = NULL;
$values = array();
$i = 0;
foreach ($ini as $line)
{
$line = trim($line);
if ($line == '' || $line[0] == ';') continue;
if ($line[0] == '#')
{//TODO Parse directives, each needs to be a checkbox (combobox?) on the FE
continue;
}
if ($line[0] == '[')
{
$sections[] = $currentSection = substr($line, 1, -1); //TODO until before ] not end of line
$i++;
continue;
}
//We don't handle formulas yet
if (strpos($line, '{') !== FALSE) continue;
// Key-value pair
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
//Remove any line end comment
$hasComment = strpos($value, ';');
if ($hasComment !== FALSE)
$value = substr($value, 0, $hasComment);
$value = trim($value);
if ($i == 0)
{// Global values (see section version for comments)
if (strpos($value, ',') !== FALSE)
$globals[$key] = array_map('trim', explode(',', $value));
else $globals[$key] = $value;
}
else
{// Section array values
if (strpos($value, ',') !== FALSE)
{
//Use trim() as a callback on elements returned from explode()
$values[$i - 1][$key] = array_map('trim', explode(',', $value));
}
else $values[$i - 1][$key] = $value;
}
}
for ($j = 0; $j < $i; $j++)
{
$result[$sections[$j]] = $values[$j];
}
return $result + $globals;
}
}
/*
*/
?>

View File

@ -1,4 +1,10 @@
<?php
require "config.php";
require "db.php";
require "ini.php";
require "msq.php";
/*
* @brief Public API here?
*
@ -12,11 +18,12 @@
*/
class Msqur
{
private MsqurDB db;
private $db;
function __construct()
{
MsqurDB db = new MsqurDB(); //TODO check reuse
$db = new MsqurDB(); //TODO check reuse
}
public function getMSQ()
@ -27,16 +34,55 @@ class Msqur
{
}
public function splash()
{
include "view/header.php";
include "view/splash.php";
include "view/footer.php";
}
public function browse($page = 0)
{
}
/**
* get html from md id
* if msq xml not cached,
* parse xml and update engine
* else if cached just return html
*/
public function view($id)
{
//Get cached HTML and display it, or reparse and display (in order)
$id = $_GET['msq'];
$html = getMSQ($id);
if ($html == null)
{
//$html = array(); //array of strings with group keys
$engine = array();
$metadata = array();
$xml = getXML($id);
$groupedHtml = parseMSQ($xml, $engine, $metadata);
updateMetadata($id, $metadata);
updateEngine($id, $engine);
$html = "";
foreach($groupedHtml as $group => $v)
{
//TODO Group name as fieldset legend or sth
$html .= "<div class=\"group-$group\">";
$html .= $v;
$html .= '</div>';
}
updateCache($id, $html);
}
echo $html;
}
}
/*
Msqur msqur = new msqur();
Msq msq = msqur.upload("blah");
$msqur = new Msqur();
//browse
list<Msq> msqs = browse()/browse(START_NUMBER) //have to check with angular how data pagination/ordering can work best
//search
*/
?>

99
src/upload.php Normal file
View File

@ -0,0 +1,99 @@
<?php
require "msqur.php";
/**
* @brief Restructure file upload array
*
* Extended description goes here.
* @param $file_post array
*/
function fixFileArray(&$file_post)
{//From php.net anonymous comment
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++)
{
foreach ($file_keys as $key)
{
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
/**
* @brief Sanity check for uploaded files.
* @param $files array
* @returns $files array with bad apples removed.
*/
function checkUploads($files)
{//Expects fixed array instead of $_FILES array
foreach ($files as $index => $file)
{
//Discard any with errors
if ($file['error'] != UPLOAD_ERR_OK)
{
unset($files[$index]);
continue;
}
//Check sizes against 1MiB
if ($file['size'] > 1048576)
{
unset($files[$index]);
continue;
}
//Get and check mime types (ignoring provided ones)
$finfo = new finfo(FILEINFO_MIME_TYPE);
if ($finfo->file($file['tmp_name']) != "application/xml")
{
unset($files[$index]);
continue;
}
}
return $files;
}
if (isset($_POST['upload']) && isset($_FILES))
{
//var_dump($_POST);
//var_dump($_FILES);
$files = checkUploads(fixFileArray($_FILES['files']));
if (count($files) == 0)
{
//No files made it past the check
echo '<div class="error">Your file(s) have asploded.</div>';
}
else
{
if (count($files) == 1)
echo '<div class="info">' . count($files) . ' file was uploaded.</div>';
else
echo '<div class="info">' . count($files) . ' files were uploaded.</div>';
//$motor = $validate($_POST['cylinders'])
$engineid = $msqur->addEngine($_POST['displacement'], $_POST['compression'], $_POST['aspiration']);
$fileList = $msqur->addFiles($files, $engineid);
if ($fileList != null)
{
echo '<div class="info">Upload successful.</div>';
echo '<div class="info"><ul id="fileList">';
foreach ($fileList as $f)
{
echo '<li><a href="' . $_SERVER['REQUEST_URI'] . '?msq=' . $f . '">' . $f . '</a></li>';
}
echo '</div></ul>';
}
else
{
echo '<div class="error">Unable to store uploaded file.</div>';
}
}
}
else include "index.php";
?>

9
src/view.php Normal file
View File

@ -0,0 +1,9 @@
<?php
require "msqur.php";
if (isset($_GET['msq'])) {
$msqur->view($_GET['msq']);
}
else include "index.php";
?>

18
src/view/browse.php Normal file
View File

@ -0,0 +1,18 @@
<div>
<form id="filter">
<fieldset>
<legend>Engine Filter</legend>
<div>Cylinders: <input type="number" min="0" value="6" max="99" style="width:3em;"/></div>
<div>Displacement (liters): <input type="number" min="0" step="0.01" value="3.0" style="width:4em;"/> +/- <span id="literMargin">0%<input type="number" min="0" step="1"></span></div>
<div>Compression (X:1) <input name="compression" type="number" min="0" step="0.1" value="9.0" style="width:4em;"/> +/- <span id="literMargin">0%<input type="number" min="0" step="1"></span></div>
<div>Aspiration:
<select>
<option value="na" title="AKA: Slow">Naturally Aspirated</option>
<option value="fi" title="The way God intended">Forced Induction</option>
</select>
</div>
<div>Firmware: X</div>
<div><button>Refresh</button></div>
</fieldset>
</form>
</div>

20
src/view/footer.php Normal file
View File

@ -0,0 +1,20 @@
<div class="footer">
<?php include "../VERSION"; ?> <a href="http://httpd.apache.org/">Apache</a> <a href="http://php.net/">PHP</a> <a href="https://angularjs.org/">AngularJS</a> <a href="http://jquery.com/">jQuery</a>
</div>
<?php
IF (!DEBUG)
{
?>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-5743113-10', 'auto');
ga('send', 'pageview');
</script>
<?php
}
?>
</body>
</html>

47
src/view/header.php Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>MSQur</title>
<meta name="description" content="Megasquirt tune file sharing site">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="view/msqur.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
<script src="view/lib/tablesorter/jquery.tablesorter.min.js"></script>
<script src="view/msqur.js"></script>
</head>
<body>
<div id="navigation"><span><button id="btnUpload">Upload</button></span><span><a href="browse.php">Browse</a></span><span><a>Search</a></span><span><a>Stats</a></span><span id="aboutLink">About</span></div>
<div id="upload" style="display:none;">
<form action="upload.php" method="post" enctype="multipart/form-data">
<div id="fileDropZone">Drop files here
<input type="file" id="fileSelect" accept=".msq" name="files[]" multiple />
</div>
<output id="fileList"></output>
<div id="engineForm">
<fieldset>
<legend>Engine Information</legend>
<div>Engine Make/Manufacturer: <input name="make" type="text" placeholder="e.g. GM" maxlength="32" style="width:4em;"/></div>
<div>Engine Code: <input name="code" type="text" placeholder="LS3" maxlength="32" style="width:4em;"/></div>
<div>Displacement (liters): <input name="displacement" type="number" min="0" step="0.01" value="3.0" style="width:4em;"/></div>
<div>Compression (X:1) <input name="compression" type="number" min="0" step="0.1" value="9.0" style="width:4em;"/></div>
<div>Aspiration:
<select name="aspiration">
<option value="na" title="AKA: Slow">Naturally Aspirated</option>
<option value="fi" title="The way God intended">Forced Induction</option>
</select>
</div>
</fieldset>
</div>
<input type="hidden" name="upload" value="upload" style="display:none;">
</form>
</div>
<div id="settings">
<img id="settingsIcon" src="img/settings3.png"/>
<div id="settingsPanel" style="display:none;">
<label><input id="colorizeData" type="checkbox" />Colorize</label>
<label><input id="normalizeData" type="checkbox" title="Recalculate VE table values to a 5-250 unit scale"/>Normalize Data</label>
<label><input id="normalizeAxis" type="checkbox" disabled />Normalize Axis</label>
</div>
</div>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
K 25
svn:wc:ra_dav:version-url
V 28
/svn/!svn/ver/3/trunk/themes
END

View File

@ -0,0 +1,34 @@
10
dir
5
https://tablesorter.googlecode.com/svn/trunk/themes
https://tablesorter.googlecode.com/svn
2009-10-02T08:54:38.707056Z
3
christian.bach
svn:special svn:externals svn:needs-lock
dbe5111a-81cf-11de-b558-27974e103503
blue
dir
green
dir

View File

@ -0,0 +1,35 @@
K 25
svn:wc:ra_dav:version-url
V 33
/svn/!svn/ver/3/trunk/themes/blue
END
style.css
K 25
svn:wc:ra_dav:version-url
V 43
/svn/!svn/ver/3/trunk/themes/blue/style.css
END
desc.gif
K 25
svn:wc:ra_dav:version-url
V 42
/svn/!svn/ver/3/trunk/themes/blue/desc.gif
END
asc.gif
K 25
svn:wc:ra_dav:version-url
V 41
/svn/!svn/ver/3/trunk/themes/blue/asc.gif
END
bg.gif
K 25
svn:wc:ra_dav:version-url
V 40
/svn/!svn/ver/3/trunk/themes/blue/bg.gif
END
blue.zip
K 25
svn:wc:ra_dav:version-url
V 42
/svn/!svn/ver/3/trunk/themes/blue/blue.zip
END

View File

@ -0,0 +1,198 @@
10
dir
5
https://tablesorter.googlecode.com/svn/trunk/themes/blue
https://tablesorter.googlecode.com/svn
2009-10-02T08:54:38.707056Z
3
christian.bach
svn:special svn:externals svn:needs-lock
dbe5111a-81cf-11de-b558-27974e103503
asc.gif
file
2010-10-15T09:18:19.000000Z
f8a1940c9cf44ab8870319169f3a14ff
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
54
bg.gif
file
2010-10-15T09:18:19.000000Z
c01ad2e7c59d1a20a433cb873c21bd88
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
64
blue.zip
file
2010-10-15T09:18:19.000000Z
898afbfe9f54e586eb483bc9e91fd01d
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
885
desc.gif
file
2010-10-15T09:18:19.000000Z
a54846803de3cc786eec3d69f9ac2d38
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
54
style.css
file
2010-10-15T09:18:19.000000Z
5b98d0810fb7dbb9fcbc2362655f0dd7
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
912

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 10
text/plain
END

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

View File

@ -0,0 +1,39 @@
/* tables */
table.tablesorter {
font-family:arial;
background-color: #CDCDCD;
margin:10px 0pt 15px;
font-size: 8pt;
width: 100%;
text-align: left;
}
table.tablesorter thead tr th, table.tablesorter tfoot tr th {
background-color: #e6EEEE;
border: 1px solid #FFF;
font-size: 8pt;
padding: 4px;
}
table.tablesorter thead tr .header {
background-image: url(bg.gif);
background-repeat: no-repeat;
background-position: center right;
cursor: pointer;
}
table.tablesorter tbody td {
color: #3D3D3D;
padding: 4px;
background-color: #FFF;
vertical-align: top;
}
table.tablesorter tbody tr.odd td {
background-color:#F0F0F6;
}
table.tablesorter thead tr .headerSortUp {
background-image: url(asc.gif);
}
table.tablesorter thead tr .headerSortDown {
background-image: url(desc.gif);
}
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
background-color: #8dbdd8;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

View File

@ -0,0 +1,39 @@
/* tables */
table.tablesorter {
font-family:arial;
background-color: #CDCDCD;
margin:10px 0pt 15px;
font-size: 8pt;
width: 100%;
text-align: left;
}
table.tablesorter thead tr th, table.tablesorter tfoot tr th {
background-color: #e6EEEE;
border: 1px solid #FFF;
font-size: 8pt;
padding: 4px;
}
table.tablesorter thead tr .header {
background-image: url(bg.gif);
background-repeat: no-repeat;
background-position: center right;
cursor: pointer;
}
table.tablesorter tbody td {
color: #3D3D3D;
padding: 4px;
background-color: #FFF;
vertical-align: top;
}
table.tablesorter tbody tr.odd td {
background-color:#F0F0F6;
}
table.tablesorter thead tr .headerSortUp {
background-image: url(asc.gif);
}
table.tablesorter thead tr .headerSortDown {
background-image: url(desc.gif);
}
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
background-color: #8dbdd8;
}

View File

@ -0,0 +1,35 @@
K 25
svn:wc:ra_dav:version-url
V 34
/svn/!svn/ver/3/trunk/themes/green
END
bg.png
K 25
svn:wc:ra_dav:version-url
V 41
/svn/!svn/ver/3/trunk/themes/green/bg.png
END
green.zip
K 25
svn:wc:ra_dav:version-url
V 44
/svn/!svn/ver/3/trunk/themes/green/green.zip
END
style.css
K 25
svn:wc:ra_dav:version-url
V 44
/svn/!svn/ver/3/trunk/themes/green/style.css
END
desc.png
K 25
svn:wc:ra_dav:version-url
V 43
/svn/!svn/ver/3/trunk/themes/green/desc.png
END
asc.png
K 25
svn:wc:ra_dav:version-url
V 42
/svn/!svn/ver/3/trunk/themes/green/asc.png
END

View File

@ -0,0 +1,198 @@
10
dir
5
https://tablesorter.googlecode.com/svn/trunk/themes/green
https://tablesorter.googlecode.com/svn
2009-10-02T08:54:38.707056Z
3
christian.bach
svn:special svn:externals svn:needs-lock
dbe5111a-81cf-11de-b558-27974e103503
asc.png
file
2010-10-15T09:18:19.000000Z
47d431b1524d523eae100b66b09babdc
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
2665
bg.png
file
2010-10-15T09:18:19.000000Z
7b0a5fe32e94b1595e48810a3df45648
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
2655
desc.png
file
2010-10-15T09:18:19.000000Z
0f7f4fd46fe145ed6ed4c81c3b26a93f
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
2662
green.zip
file
2010-10-15T09:18:19.000000Z
9c8b5235a0a9864b292b97e783541c08
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
8464
style.css
file
2010-10-15T09:18:19.000000Z
8c047013d96b74708da195dac43980b7
2009-10-02T08:54:38.707056Z
3
christian.bach
has-props
801

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@ -0,0 +1,5 @@
K 13
svn:mime-type
V 10
text/plain
END

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,39 @@
table.tablesorter {
font-size: 12px;
background-color: #4D4D4D;
width: 1024px;
border: 1px solid #000;
}
table.tablesorter th {
text-align: left;
padding: 5px;
background-color: #6E6E6E;
}
table.tablesorter td {
color: #FFF;
padding: 5px;
}
table.tablesorter .even {
background-color: #3D3D3D;
}
table.tablesorter .odd {
background-color: #6E6E6E;
}
table.tablesorter .header {
background-image: url(bg.png);
background-repeat: no-repeat;
border-left: 1px solid #FFF;
border-right: 1px solid #000;
border-top: 1px solid #FFF;
padding-left: 30px;
padding-top: 8px;
height: auto;
}
table.tablesorter .headerSortUp {
background-image: url(asc.png);
background-repeat: no-repeat;
}
table.tablesorter .headerSortDown {
background-image: url(desc.png);
background-repeat: no-repeat;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

View File

@ -0,0 +1,39 @@
table.tablesorter {
font-size: 12px;
background-color: #4D4D4D;
width: 1024px;
border: 1px solid #000;
}
table.tablesorter th {
text-align: left;
padding: 5px;
background-color: #6E6E6E;
}
table.tablesorter td {
color: #FFF;
padding: 5px;
}
table.tablesorter .even {
background-color: #3D3D3D;
}
table.tablesorter .odd {
background-color: #6E6E6E;
}
table.tablesorter .header {
background-image: url(bg.png);
background-repeat: no-repeat;
border-left: 1px solid #FFF;
border-right: 1px solid #000;
border-top: 1px solid #FFF;
padding-left: 30px;
padding-top: 8px;
height: auto;
}
table.tablesorter .headerSortUp {
background-image: url(asc.png);
background-repeat: no-repeat;
}
table.tablesorter .headerSortDown {
background-image: url(desc.png);
background-repeat: no-repeat;
}

2
src/view/splash.php Normal file
View File

@ -0,0 +1,2 @@
<div class="info">Upload your .msq files to view and share them.</div>
<div class="warn">This website is in beta. It only officially supports TunerStudio tune files, and currently is known working with MS2 and MS2-Extra firmware.</div>