[submodule "couchdb/couchdb-lucene"] | [submodule "couchdb/couchdb-lucene"] |
path = couchdb/couchdb-lucene | path = couchdb/couchdb-lucene |
url = https://github.com/rnewson/couchdb-lucene.git | url = https://github.com/rnewson/couchdb-lucene.git |
[submodule "couchdb/settee"] | [submodule "couchdb/settee"] |
path = couchdb/settee | path = couchdb/settee |
url = https://github.com/inadarei/settee.git | url = https://github.com/inadarei/settee.git |
[submodule "lib/php-diff"] | [submodule "lib/php-diff"] |
path = lib/php-diff | path = lib/php-diff |
url = https://github.com/chrisboulton/php-diff.git | url = https://github.com/chrisboulton/php-diff.git |
[submodule "lib/Requests"] | [submodule "lib/Requests"] |
path = lib/Requests | path = lib/Requests |
url = https://github.com/rmccue/Requests.git | url = https://github.com/rmccue/Requests.git |
[submodule "javascripts/flotr2"] | [submodule "javascripts/flotr2"] |
path = javascripts/flotr2 | path = javascripts/flotr2 |
url = https://github.com/HumbleSoftware/Flotr2.git | url = https://github.com/HumbleSoftware/Flotr2.git |
[submodule "lib/phpquery"] | [submodule "lib/phpquery"] |
path = lib/phpquery | path = lib/phpquery |
url = https://github.com/TobiaszCudnik/phpquery.git | url = https://github.com/TobiaszCudnik/phpquery.git |
[submodule "javascripts/sigma"] | [submodule "javascripts/sigma"] |
path = javascripts/sigma | path = javascripts/sigma |
url = https://github.com/jacomyal/sigma.js.git | url = https://github.com/jacomyal/sigma.js.git |
[submodule "javascripts/bubbletree"] | |
path = javascripts/bubbletree | |
url = https://github.com/okfn/bubbletree.git | |
<?php | <?php |
require_once '../include/common.inc.php'; | require_once '../include/common.inc.php'; |
require($basePath . 'lib/phpquery/phpQuery/phpQuery.php'); | require($basePath.'lib/phpquery/phpQuery/phpQuery.php'); |
$db = $server->get_db('disclosr-agencies'); | $db = $server->get_db('disclosr-agencies'); |
$rows = $db->get_view("app", "byName")->rows; | $rows = $db->get_view("app", "byName")->rows; |
$nametoid = Array(); | $nametoid = Array(); |
$accounts = Array(); | $accounts = Array(); |
foreach ($rows as $row) { | foreach ($rows as $row) { |
$nametoid[trim($row->key)] = $row->value; | $nametoid[trim($row->key)] = $row->value; |
} | } |
function extractHTMLAccounts($url, $accountType) { | function extractHTMLAccounts($url, $accountType) { |
global $accounts, $nametoid; | global $accounts, $nametoid; |
$request = Requests::get($url); | $request = Requests::get($url); |
$doc = phpQuery::newDocumentHTML($request->body); | $doc = phpQuery::newDocumentHTML($request->body); |
phpQuery::selectDocument($doc); | phpQuery::selectDocument($doc); |
foreach (pq('tr')->elements as $tr) { | foreach (pq('tr')->elements as $tr) { |
//echo $tr->nodeValue.PHP_EOL; | //echo $tr->nodeValue.PHP_EOL; |
$agency = ""; | $agency = ""; |
$url = ""; | $url = ""; |
foreach ($tr->childNodes as $td) { | foreach ($tr->childNodes as $td) { |
$class = $td->getAttribute("class"); | $class = $td->getAttribute("class"); |
//echo "cccc $class ".$td->nodeValue.PHP_EOL; | //echo "cccc $class ".$td->nodeValue.PHP_EOL; |
if ($class == "s11" || $class == "s10" || $class == "s7") { | if ($class == "s11" || $class == "s10" || $class == "s7") { |
$agency = $td->nodeValue; | $agency = $td->nodeValue; |
} else if ($class == "s6" || $class == "s9") { | } else if ($class == "s6" || $class == "s9"){ |
$url = $td->nodeValue; | $url = $td->nodeValue; |
foreach ($td->childNodes as $a) { | foreach($td->childNodes as $a) { |
$href = $a->getAttribute("href"); | $href = $a->getAttribute("href"); |
if ($href != "") { | if ($href != "") { |
$url = $href; | $url = $href; |
} | |
} | |
} | |
} | |
if ($agency != "" && $url != "") { | |
if (!in_array(trim($agency), array_keys($nametoid))) { | |
echo trim($agency)." missing" . PHP_EOL; | |
} else { | |
// echo $agency." = ".$url.PHP_EOL; | |
$accounts[$nametoid[trim($agency)]][$accountType][] = $url; | |
} | } |
} | |
} | } |
} | |
if ($agency != "" && $url != "") { | |
if (!in_array(trim($agency), array_keys($nametoid))) { | |
echo trim($agency) . " missing" . PHP_EOL; | |
} else { | |
// echo $agency." = ".$url.PHP_EOL; | |
$accounts[$nametoid[trim($agency)]][$accountType][] = $url; | |
} | |
} | |
} | } |
} | } |
function extractCSVAccounts($url, $accountType, $nameField, $accountField, $filter) { | function extractCSVAccounts($url, $accountType, $nameField, $accountField, $filter) { |
global $accounts, $nametoid; | global $accounts, $nametoid; |
$request = Requests::get($url); | $request = Requests::get($url); |
$Data = str_getcsv($request->body, "\n"); //parse the rows | $Data = str_getcsv($request->body, "\n"); //parse the rows |
$headers = Array(); | $headers = Array(); |
foreach ($Data as $num => $line) { | foreach ($Data as $num => $line) { |
$Row = str_getcsv($line, ",", '"'); | $Row = str_getcsv($line, ",",'"'); |
if ($num == 0) { | if ($num == 0) { |
} else if ($num == 1) { | } else if ($num == 1) { |
$headers = $Row; | $headers = $Row; |
//print_r($headers); | //print_r($headers); |
} else { | } else { |
if (isset($Row[array_search($nameField, $headers)])) { | if (isset($Row[array_search($nameField, $headers)])) { |
$agencyName = $Row[array_search($nameField, $headers)]; | $agencyName = $Row[array_search($nameField, $headers)]; |
if (!$filter || $Row[array_search("State", $headers)] == "NAT") { | if (!$filter || $Row[array_search("State", $headers)] == "NAT") { |
if (!in_array(trim($agencyName), array_keys($nametoid))) { | if (!in_array(trim($agencyName), array_keys($nametoid))) { |
echo trim($agencyName) . " missing" . PHP_EOL; | echo trim($agencyName)." missing" . PHP_EOL; |
} else { | } else { |
// echo $Row[array_search($nameField, $headers)] . PHP_EOL; | // echo $Row[array_search($nameField, $headers)] . PHP_EOL; |
$accounts[$nametoid[trim($agencyName)]][$accountType][] = $Row[array_search($accountField, $headers)]; | $accounts[$nametoid[trim($agencyName)]][$accountType][] = $Row[array_search($accountField, $headers)]; |
} | } |
} | } |
} else { | } else { |
//echo "error finding agency" . $line . PHP_EOL; | //echo "error finding agency" . $line . PHP_EOL; |
} | } |
} | } |
} | } |
} | } |
// http://agimo.govspace.gov.au/page/gov2register/ | // http://agimo.govspace.gov.au/page/gov2register/ |
extractCSVAccounts("https://docs.google.com/spreadsheet/pub?key=0Ap1exl80wB8OdHNKVmQ5RVlvQWpibDAxNHkzcU1nV2c&single=true&gid=0&output=csv", "Twitter", "Agency/Body/Event", "", true); | extractCSVAccounts("https://docs.google.com/spreadsheet/pub?key=0Ap1exl80wB8OdHNKVmQ5RVlvQWpibDAxNHkzcU1nV2c&single=true&gid=0&output=csv", "Twitter", "Agency/Body/Event", "", true); |
// RSS | // RSS |
extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGJxandJREhLSGlWWUZfZ2xKOTNHZ0E&output=html", "RSS"); | extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGJxandJREhLSGlWWUZfZ2xKOTNHZ0E&output=html", "RSS"); |
extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGtjcW9vOXdyZ3pOV21vQU51VmhzQnc&single=true&gid=0&output=html", "Facebook"); | extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGtjcW9vOXdyZ3pOV21vQU51VmhzQnc&single=true&gid=0&output=html", "Facebook"); |
foreach ($accounts as $id => $accountTypes) { | |
echo $id . "<br>" . PHP_EOL; | |
$doc = object_to_array($db->get($id)); | |
// print_r($doc); | |
foreach ($accountTypes as $accountType => $accounts) { | |
if (!isset($doc["has" . $accountType]) || !is_array($doc["has" . $accountType])) { | |
$doc["has" . $accountType] = Array(); | |
} | |
$doc["has" . $accountType] = array_unique(array_merge($doc["has" . $accountType], $accounts)); | |
} | |
$db->save($doc); | |
} | |
?> | ?> |
#http://packages.python.org/CouchDB/client.html | |
import couchdb | |
import json | |
import pprint | |
import re | |
from tidylib import tidy_document | |
couch = couchdb.Server('http://127.0.0.1:5984/') | |
# select database | |
docsdb = couch['disclosr-documents'] | |
def f(x): | |
invalid = re.compile(r"ensure|testing|flicker|updating|longdesc|Accessibility Checks|not recognized") | |
valid = re.compile(r"line") | |
return (not invalid.search(x)) and valid.search(x) and x != '' | |
for row in docsdb.view('app/getValidationRequired'): | |
print row.id | |
html = docsdb.get_attachment(row.id,row.value.iterkeys().next()).read() | |
#print html | |
document, errors = tidy_document(html,options={'accessibility-check':1,'show-warnings':0,'markup':0},keep_doc=True) | |
#http://www.aprompt.ca/Tidy/accessibilitychecks.html | |
#print document | |
errors = '\n'.join(filter(f,errors.split('\n'))) | |
#print errors | |
doc = docsdb.get(row.id) | |
doc['validation'] = errors | |
docsdb.save(doc) | |
<!DOCTYPE html> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta charset="UTF-8"/> | |
<title>Minimal BubbleTree Demo</title> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script> | |
<script type="text/javascript" src="javascripts/bubbletree/lib/jquery.history.js"></script> | |
<script type="text/javascript" src="javascripts/bubbletree/lib/raphael.js"></script> | |
<script type="text/javascript" src="javascripts/bubbletree/lib/vis4.js"></script> | |
<script type="text/javascript" src="javascripts/bubbletree/lib/Tween.js"></script> | |
<script type="text/javascript" src="javascripts/bubbletree/build/bubbletree.js"></script> | |
<link rel="stylesheet" type="text/css" href="javascripts/bubbletree/build/bubbletree.css" /> | |
<script type="text/javascript" src="javascripts/bubbletree/styles/cofog.js"></script> | |
<script type="text/javascript"> | |
$(function() { | |
<?php | |
include_once('include/common.inc.php'); | |
include("lib/Color.php"); | |
$color = new Lux_Color(); | |
$portfolios = Array(); | |
$db = $server->get_db('disclosr-agencies'); | |
try { | |
$rows = $db->get_view("app", "byDeptStateName", null, true)->rows; | |
foreach ($rows as $row) { | |
$portfolios[trim(str_replace(Array("Department of","Department","the","'","`"),"",$row->key))] = $row->value; | |
} | |
} catch (SetteeRestClientException $e) { | |
setteErrorHandler($e); | |
} | |
$agencies = Array(); | |
try { | |
$rows = $db->get_view("app", "byCanonicalName", null, true)->rows; | |
//print_r($rows); | |
foreach ($rows as $row) { | |
$employees = 0; | |
$portfolioid = 0; | |
if ($row->value->employees) $employees = $row->value->employees; | |
if (isset($row->value->statistics->employees)) { | |
$agencyEmployeesArray = object_to_array($row->value->statistics->employees); | |
$employees = $agencyEmployeesArray["2010-2011"]["value"]; | |
} | |
if (!($employees > 0)) $employees =0; | |
if (isset($row->value->parentOrg)) $portfolioid = $row->value->parentOrg; | |
if (isset($row->value->orgType) && $row->value->orgType == "FMA-DepartmentOfState") $portfolioid = $row->id; | |
$agencies[$portfolioid][$row->value->name] = $employees; | |
} | |
} catch (SetteeRestClientException $e) { | |
setteErrorHandler($e); | |
} | |
//print_r($portfolios); | |
//print_r($agencies); | |
$i = 0; | |
foreach ($portfolios as $portfolioName => $portfolioID) { | |
$i++; | |
$portfolioColor = $color->hsv2hex(Array($i/10, .7, abs(($i*(1/10))-.5) + .5)); | |
$subnodes = Array(); | |
$portfolioEmployees = 0; | |
foreach ($agencies[$portfolioID] as $agencyName => $agencyEmployees) { | |
$agencyColor = $color->hsv2hex(Array($i/10, rand(1,10)/10, abs(($i*(1/10))-.5) + .5)); | |
$subnodes[] = Array( | |
"label" => str_replace(Array("'","`"),"",$agencyName), | |
"amount" => $agencyEmployees, | |
"color" => "#".$agencyColor | |
); | |
$portfolioEmployees += $agencyEmployees; | |
} | |
$nodes[] = Array( | |
"label" => $portfolioName, | |
"amount" => $portfolioEmployees, | |
"color" => "#".$portfolioColor, | |
"children" => $subnodes | |
); | |
$total += $portfolioEmployees; | |
} | |
$data = Array( | |
"label" => "Australian Federal Government", | |
"amount" => $total, | |
"color" => "#000000", | |
"children" => $nodes | |
); | |
echo "var data =eval('('+'" . json_encode($data) . "'+')');"; | |
?> | |
new BubbleTree({ | |
data: data, | |
container: '.bubbletree' | |
}); | |
}); | |
</script> | |
</head> | |
<body> | |
<div class="bubbletree-wrapper"> | |
<div class="bubbletree"></div> | |
</div> | |
</body> | |
</html> | |
<?php | <?php |
include_once('include/common.inc.php'); | include_once('include/common.inc.php'); |
//include_header(); | //include_header(); |
$format = "html"; | $format = "html"; |
if (isset($_REQUEST['format'])) { | if (isset($_REQUEST['format'])) { |
$format = $_REQUEST['format']; | $format = $_REQUEST['format']; |
} | } |
function add_node($id, $label, $parent="") { | function add_node($id, $label, $parent="") { |
global $format; | global $format; |
if ($format == "html") { | if ($format == "html") { |
// echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL; | // echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL; |
} | } |
if ($format == "dot" && $label != "") { | if ($format == "dot" && $label != "") { |
echo "$id [label=\"$label\"];". PHP_EOL; | echo "$id [label=\"$label\"];". PHP_EOL; |
} | } |
if ($format == "gexf") { | if ($format == "gexf") { |
echo "<node id='$id' label=\"".htmlentities($label,ENT_XML1)."\" ".($parent != ""? "pid='$parent'><viz:size value='1'/>":"><viz:size value='2'/>") | echo "<node id='$id' label=\"".htmlentities($label,ENT_XML1)."\" ".($parent != ""? "pid='$parent'><viz:size value='1'/>":"><viz:size value='2'/>") |
."<viz:color b='".rand(0,255)."' g='".rand(0,255)."' r='".rand(0,255)."'/>" | ."<viz:color b='".rand(0,255)."' g='".rand(0,255)."' r='".rand(0,255)."'/>" |
."</node>". PHP_EOL; | ."</node>". PHP_EOL; |
} | } |
} | } |
function add_edge($from, $to, $color) { | function add_edge($from, $to, $color) { |
global $format; | global $format; |
if ($format == "html") { | if ($format == "html") { |
// echo "graph.newEdge(nodes[\"$from\"], nodes['$to'], {color: '$color'});" . PHP_EOL; | // echo "graph.newEdge(nodes[\"$from\"], nodes['$to'], {color: '$color'});" . PHP_EOL; |
} | } |
if ($format == "dot") { | if ($format == "dot") { |
echo "$from -> $to ".($color != ""? "[color=$color]":"").";". PHP_EOL; | echo "$from -> $to ".($color != ""? "[color=$color]":"").";". PHP_EOL; |
} | } |
if ($format == "gexf") { | if ($format == "gexf") { |
echo "<edge id='$from$to' source='$from' target='$to' />". PHP_EOL; | echo "<edge id='$from$to' source='$from' target='$to' />". PHP_EOL; |
} | } |
} | } |
if ($format == "gexf") { | if ($format == "gexf") { |
//header('Content-Type: text/xml'); | //header('Content-Type: text/xml'); |
header('Content-Type: application/gexf+xml'); | header('Content-Type: application/gexf+xml'); |
echo '<?xml version="1.0" encoding="UTF-8"?> | echo '<?xml version="1.0" encoding="UTF-8"?> |
<gexf xmlns="http://www.gexf.net/1.2draft" xmlns:viz="http://www.gexf.net/1.2draft/viz" version="1.2"> | <gexf xmlns="http://www.gexf.net/1.2draft" xmlns:viz="http://www.gexf.net/1.2draft/viz" version="1.2"> |
<meta lastmodifieddate="2009-03-20"> | <meta lastmodifieddate="2009-03-20"> |
<creator>Gexf.net</creator> | <creator>Gexf.net</creator> |
<description>A hello world! file</description> | <description>A hello world! file</description> |
</meta> | </meta> |
<graph mode="static" defaultedgetype="directed"> | <graph mode="static" defaultedgetype="directed"> |
<nodes>'. PHP_EOL; | <nodes>'. PHP_EOL; |
} | } |
if ($format == "dot") { | if ($format == "dot") { |
echo 'digraph g {'. PHP_EOL; | echo 'digraph g {'. PHP_EOL; |
} | } |
$db = $server->get_db('disclosr-agencies'); | $db = $server->get_db('disclosr-agencies'); |
add_node("fedg","Federal Government - Commonwealth of Australia"); | add_node("fedg","Federal Government - Commonwealth of Australia"); |
try { | try { |
$rows = $db->get_view("app", "byCanonicalName", null, true)->rows; | $rows = $db->get_view("app", "byCanonicalName", null, true)->rows; |
//print_r($rows); | //print_r($rows); |
foreach ($rows as $row) { | foreach ($rows as $row) { |
add_node($row->id, $row->key); | add_node($row->id, $row->key); |
} | } |
} catch (SetteeRestClientException $e) { | } catch (SetteeRestClientException $e) { |
setteErrorHandler($e); | setteErrorHandler($e); |
} | } |
if ($format == "gexf") { | if ($format == "gexf") { |
echo '</nodes> | echo '</nodes> |
<edges>'. PHP_EOL; | <edges>'. PHP_EOL; |
} | } |
try { | try { |
$rows = $db->get_view("app", "byDeptStateName", null, true)->rows; | $rows = $db->get_view("app", "byDeptStateName", null, true)->rows; |
//print_r($rows); | //print_r($rows); |
foreach ($rows as $row) { | foreach ($rows as $row) { |
add_edge("fedg", $row->value, 'yellow'); | add_edge("fedg", $row->value, 'yellow'); |
} | } |
} catch (SetteeRestClientException $e) { | } catch (SetteeRestClientException $e) { |
setteErrorHandler($e); | setteErrorHandler($e); |
} | } |
try { | try { |
$rows = $db->get_view("app", "parentOrgs", null, true)->rows; | $rows = $db->get_view("app", "parentOrgs", null, true)->rows; |
// print_r($rows); | // print_r($rows); |
foreach ($rows as $row) { | foreach ($rows as $row) { |
add_edge($row->key, $row->value, 'blue'); | add_edge($row->key, $row->value, 'blue'); |
} | } |
} catch (SetteeRestClientException $e) { | } catch (SetteeRestClientException $e) { |
setteErrorHandler($e); | setteErrorHandler($e); |
} | } |
if ($format == "html") { | if ($format == "html") { |
?> | ?> |
<div id="sigma-example" width="960" style="min-height:800px;background-color: #333;"></div> | <div id="sigma-example" width="960" style="min-height:800px;background-color: #333;"></div> |
<script src="javascripts/sigma.min.js"></script> | <script src="javascripts/sigma.min.js"></script> |
<script src="javascripts/sigma/plugins/sigma.parseGexf.js"></script> | <script src="javascripts/sigma/plugins/sigma.parseGexf.js"></script> |
<script src="javascripts/sigma/plugins/sigma.forceatlas2.js"></script> | <script src="javascripts/sigma/plugins/sigma.forceatlas2.js"></script> |
<script type="text/javascript">function init() { | <script type="text/javascript">function init() { |
// Instanciate sigma.js and customize rendering : | // Instanciate sigma.js and customize rendering : |
var sigInst = sigma.init(document.getElementById('sigma-example')).drawingProperties({ | var sigInst = sigma.init(document.getElementById('sigma-example')).drawingProperties({ |
defaultLabelColor: '#fff', | defaultLabelColor: '#fff', |
defaultLabelSize: 14, | defaultLabelSize: 14, |
defaultLabelBGColor: '#fff', | defaultLabelBGColor: '#fff', |
defaultLabelHoverColor: '#000', | defaultLabelHoverColor: '#000', |
labelThreshold: 6, | labelThreshold: 6, |
defaultEdgeType: 'curve' | defaultEdgeType: 'curve' |
}).graphProperties({ | }).graphProperties({ |
minNodeSize: 0.5, | minNodeSize: 0.5, |
maxNodeSize: 5, | maxNodeSize: 5, |
minEdgeSize: 5, | minEdgeSize: 5, |
maxEdgeSize: 5 | maxEdgeSize: 5 |
}).mouseProperties({ | }).mouseProperties({ |
maxRatio: 32 | maxRatio: 32 |
}); | }); |
// Parse a GEXF encoded file to fill the graph | // Parse a GEXF encoded file to fill the graph |
// (requires "sigma.parseGexf.js" to be included) | // (requires "sigma.parseGexf.js" to be included) |
sigInst.parseGexf('graph.php?format=gexf'); | sigInst.parseGexf('graph.php?format=gexf'); |
sigInst.bind('downnodes',function(event){ | sigInst.bind('downnodes',function(event){ |
var nodes = event.content; | var nodes = event.content; |
}); | }); |
// Draw the graph : | |
sigInst.draw(); | |
// Start the ForceAtlas2 algorithm | // Start the ForceAtlas2 algorithm |
// (requires "sigma.forceatlas2.js" to be included) | // (requires "sigma.forceatlas2.js" to be included) |
sigInst.startForceAtlas2(); | sigInst.startForceAtlas2(); |
// Draw the graph : | |
sigInst.draw(); | |
} | } |
if (document.addEventListener) { | if (document.addEventListener) { |
document.addEventListener("DOMContentLoaded", init, false); | document.addEventListener("DOMContentLoaded", init, false); |
} else { | } else { |
window.onload = init; | window.onload = init; |
} | } |
</script> | </script> |
<?php | <?php |
} | } |
if ($format == "dot") { | if ($format == "dot") { |
echo "}"; | echo "}"; |
} | } |
if ($format == "gexf") { | if ($format == "gexf") { |
echo ' </edges> | echo ' </edges> |
</graph> | </graph> |
</gexf>'. PHP_EOL; | </gexf>'. PHP_EOL; |
} | } |
//include_footer(); | //include_footer(); |
?> | ?> |
<?php | <?php |
include $basePath . "schemas/schemas.inc.php"; | include $basePath . "schemas/schemas.inc.php"; |
require ($basePath . 'couchdb/settee/src/settee.php'); | require ($basePath . 'couchdb/settee/src/settee.php'); |
function createDocumentsDesignDoc() { | function createDocumentsDesignDoc() { |
/*"views": { | /*"views": { |
"web_server": { | "web_server": { |
"map": "function(doc) {\n emit(doc.web_server, 1);\n}", | "map": "function(doc) {\n emit(doc.web_server, 1);\n}", |
"reduce": "function (key, values, rereduce) {\n return sum(values);\n}" | "reduce": "function (key, values, rereduce) {\n return sum(values);\n}" |
}, | }, |
"byAgency": { | "byAgency": { |
"map": "function(doc) {\n emit(doc.agencyID, 1);\n}", | "map": "function(doc) {\n emit(doc.agencyID, 1);\n}", |
"reduce": "function (key, values, rereduce) {\n return sum(values);\n}" | "reduce": "function (key, values, rereduce) {\n return sum(values);\n}" |
}, | }, |
"byURL": { | "byURL": { |
"map": "function(doc) {\n emit(doc.url, doc);\n}" | "map": "function(doc) {\n emit(doc.url, doc);\n}" |
}, | }, |
"agency": { | "agency": { |
"map": "function(doc) {\n emit(doc.agencyID, doc);\n}" | "map": "function(doc) {\n emit(doc.agencyID, doc);\n}" |
}, | }, |
"byWebServer": { | "byWebServer": { |
"map": "function(doc) {\n emit(doc.web_server, doc);\n}" | "map": "function(doc) {\n emit(doc.web_server, doc);\n}" |
}, | } |
"getValidationRequired": { | |
"map": "function(doc) {\nif (doc.mime_type == \"text/html\" \n&& typeof(doc.validation) == \"undefined\") {\n emit(doc._id, doc._attachments);\n}\n}" | |
} | |
}*/ | }*/ |
} | } |
function createAgencyDesignDoc() { | function createAgencyDesignDoc() { |
global $db; | global $db; |
$obj = new stdClass(); | $obj = new stdClass(); |
$obj->_id = "_design/" . urlencode("app"); | $obj->_id = "_design/" . urlencode("app"); |
$obj->language = "javascript"; | $obj->language = "javascript"; |
$obj->views->all->map = "function(doc) { emit(doc._id, doc); };"; | $obj->views->all->map = "function(doc) { emit(doc._id, doc); };"; |
$obj->views->byABN->map = "function(doc) { emit(doc.abn, doc); };"; | $obj->views->byABN->map = "function(doc) { emit(doc.abn, doc); };"; |
$obj->views->byCanonicalName->map = "function(doc) { | $obj->views->byCanonicalName->map = "function(doc) { |
if (doc.parentOrg || doc.orgType == 'FMA-DepartmentOfState') { | if (doc.parentOrg || doc.orgType == 'FMA-DepartmentOfState') { |
emit(doc.name, doc); | emit(doc.name, doc); |
} | } |
};"; | };"; |
$obj->views->byDeptStateName->map = "function(doc) { | $obj->views->byDeptStateName->map = "function(doc) { |
if (doc.orgType == 'FMA-DepartmentOfState') { | if (doc.orgType == 'FMA-DepartmentOfState') { |
emit(doc.name, doc._id); | emit(doc.name, doc._id); |
} | } |
};"; | };"; |
$obj->views->parentOrgs->map = "function(doc) { | $obj->views->parentOrgs->map = "function(doc) { |
if (doc.parentOrg) { | if (doc.parentOrg) { |
emit(doc._id, doc.parentOrg); | emit(doc._id, doc.parentOrg); |
} | } |
};"; | };"; |
$obj->views->byName->map = 'function(doc) { | $obj->views->byName->map = 'function(doc) { |
if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") { | if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") { |
emit(doc.name, doc._id); | emit(doc.name, doc._id); |
if (typeof(doc.shortName) != "undefined" && doc.shortName != doc.name) { | if (typeof(doc.shortName) != "undefined" && doc.shortName != doc.name) { |
emit(doc.shortName, doc._id); | emit(doc.shortName, doc._id); |
} | } |
for (name in doc.otherNames) { | for (name in doc.otherNames) { |
if (doc.otherNames[name] != "" && doc.otherNames[name] != doc.name) { | if (doc.otherNames[name] != "" && doc.otherNames[name] != doc.name) { |
emit(doc.otherNames[name], doc._id); | emit(doc.otherNames[name], doc._id); |
} | } |
} | } |
for (name in doc.foiBodies) { | for (name in doc.foiBodies) { |
if (doc.foiBodies[name] != "" && doc.foiBodies[name] != doc.name) { | if (doc.foiBodies[name] != "" && doc.foiBodies[name] != doc.name) { |
emit(doc.foiBodies[name], doc._id); | emit(doc.foiBodies[name], doc._id); |
} | } |
} | } |
} | } |
};'; | };'; |
$obj->views->foiEmails->map = "function(doc) { | $obj->views->foiEmails->map = "function(doc) { |
emit(doc._id, doc.foiEmail); | emit(doc._id, doc.foiEmail); |
};"; | };"; |
$obj->views->byLastModified->map = "function(doc) { emit(doc.metadata.lastModified, doc); }"; | $obj->views->byLastModified->map = "function(doc) { emit(doc.metadata.lastModified, doc); }"; |
$obj->views->getActive->map = 'function(doc) { if (doc.status == "active") { emit(doc._id, doc); } };'; | $obj->views->getActive->map = 'function(doc) { if (doc.status == "active") { emit(doc._id, doc); } };'; |
$obj->views->getSuspended->map = 'function(doc) { if (doc.status == "suspended") { emit(doc._id, doc); } };'; | $obj->views->getSuspended->map = 'function(doc) { if (doc.status == "suspended") { emit(doc._id, doc); } };'; |
$obj->views->getScrapeRequired->map = "function(doc) { | $obj->views->getScrapeRequired->map = "function(doc) { |
var lastScrape = Date.parse(doc.metadata.lastScraped); | var lastScrape = Date.parse(doc.metadata.lastScraped); |
var today = new Date(); | var today = new Date(); |
if (!lastScrape || lastScrape.getTime() + 1000 != today.getTime()) { | if (!lastScrape || lastScrape.getTime() + 1000 != today.getTime()) { |
emit(doc._id, doc); | emit(doc._id, doc); |
} | } |
};"; | };"; |
$obj->views->showNamesABNs->map = "function(doc) { emit(doc._id, {name: doc.name, abn: doc.abn}); };"; | $obj->views->showNamesABNs->map = "function(doc) { emit(doc._id, {name: doc.name, abn: doc.abn}); };"; |
$obj->views->getConflicts->map = "function(doc) { | $obj->views->getConflicts->map = "function(doc) { |
if (doc._conflicts) { | if (doc._conflicts) { |
emit(null, [doc._rev].concat(doc._conflicts)); | emit(null, [doc._rev].concat(doc._conflicts)); |
} | } |
}"; | }"; |
// http://stackoverflow.com/questions/646628/javascript-startswith | // http://stackoverflow.com/questions/646628/javascript-startswith |
$obj->views->score->map = 'if(!String.prototype.startsWith){ | $obj->views->score->map = 'if(!String.prototype.startsWith){ |
String.prototype.startsWith = function (str) { | String.prototype.startsWith = function (str) { |
return !this.indexOf(str); | return !this.indexOf(str); |
} | } |
} | } |
function(doc) { | function(doc) { |
count = 0; | count = 0; |
if (doc["status"] != "suspended") { | if (doc["status"] != "suspended") { |
for(var propName in doc) { | for(var propName in doc) { |
if(typeof(doc[propName]) != "undefined" && doc[propName] != "") { | if(typeof(doc[propName]) != "undefined" && doc[propName] != "") { |
count++; | count++; |
} | } |
} | } |
portfolio = doc.parentOrg; | portfolio = doc.parentOrg; |
if (doc.orgType == "FMA-DepartmentOfState") { | if (doc.orgType == "FMA-DepartmentOfState") { |
portfolio = doc._id; | portfolio = doc._id; |
} | } |
if (doc.orgType == "Court-Commonwealth" || doc.orgType == "FMA-DepartmentOfParliament") { | if (doc.orgType == "Court-Commonwealth" || doc.orgType == "FMA-DepartmentOfParliament") { |
portfolio = doc.orgType; | portfolio = doc.orgType; |
} | } |
emit(count+doc._id, {id:doc._id, name: doc.name, score:count, orgType: doc.orgType, portfolio:portfolio}); | emit(count+doc._id, {id:doc._id, name: doc.name, score:count, orgType: doc.orgType, portfolio:portfolio}); |
} | } |
}'; | }'; |
$obj->views->scoreHas->map = 'if(!String.prototype.startsWith){ | $obj->views->scoreHas->map = 'if(!String.prototype.startsWith){ |
String.prototype.startsWith = function (str) { | String.prototype.startsWith = function (str) { |
return !this.indexOf(str); | return !this.indexOf(str); |
} | } |
} | } |
if(!String.prototype.endsWith){ | if(!String.prototype.endsWith){ |
String.prototype.endsWith = function(suffix) { | String.prototype.endsWith = function(suffix) { |
return this.indexOf(suffix, this.length - suffix.length) !== -1; | return this.indexOf(suffix, this.length - suffix.length) !== -1; |
}; | }; |
} | } |
function(doc) { | function(doc) { |
if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") { | if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") { |
for(var propName in doc) { | for(var propName in doc) { |
if(typeof(doc[propName]) != "undefined" && (propName.startsWith("has") || propName.endsWith("URL"))) { | if(typeof(doc[propName]) != "undefined" && (propName.startsWith("has") || propName.endsWith("URL"))) { |
emit(propName, 1); | emit(propName, 1); |
} | } |
} | } |
emit("total", 1); | emit("total", 1); |
} | } |
}'; | }'; |
$obj->views->scoreHas->reduce = 'function (key, values, rereduce) { | $obj->views->scoreHas->reduce = 'function (key, values, rereduce) { |
return sum(values); | return sum(values); |
}'; | }'; |
$obj->views->fieldNames->map = ' | $obj->views->fieldNames->map = ' |
function(doc) { | function(doc) { |
for(var propName in doc) { | for(var propName in doc) { |
emit(propName, doc._id); | emit(propName, doc._id); |
} | } |
}'; | }'; |
$obj->views->fieldNames->reduce = 'function (key, values, rereduce) { | $obj->views->fieldNames->reduce = 'function (key, values, rereduce) { |
return values.length; | return values.length; |
}'; | }'; |
// allow safe updates (even if slightly slower due to extra: rev-detection check). | // allow safe updates (even if slightly slower due to extra: rev-detection check). |
return $db->save($obj, true); | return $db->save($obj, true); |
} | } |
if (php_uname('n') == "vanille") { | if (php_uname('n') == "vanille") { |
$serverAddr = 'http://192.168.178.21:5984/'; | $serverAddr = 'http://192.168.178.21:5984/'; |
} else | } else |
if (php_uname('n') == "KYUUBEY") { | if (php_uname('n') == "KYUUBEY") { |
$serverAddr = 'http://192.168.1.148:5984/'; | $serverAddr = 'http://192.168.1.148:5984/'; |
} else { | } else { |
$serverAddr = 'http://127.0.0.1:5984/'; | $serverAddr = 'http://127.0.0.1:5984/'; |
} | } |
$server = new SetteeServer($serverAddr); | $server = new SetteeServer($serverAddr); |
function setteErrorHandler($e) { | function setteErrorHandler($e) { |
echo $e->getMessage() . "<br>" . PHP_EOL; | echo $e->getMessage() . "<br>" . PHP_EOL; |
} | } |
<?php | |
/** | |
* | |
* Color values manipulation utilities. Provides methods to convert from and to | |
* Hex, RGB, HSV and HSL color representattions. | |
* | |
* Several color conversion logic are based on pseudo-code from | |
* http://www.easyrgb.com/math.php | |
* | |
* @category Lux | |
* | |
* @package Lux_Color | |
* | |
* @author Rodrigo Moraes <rodrigo.moraes@gmail.com> | |
* | |
* @license http://www.opensource.org/licenses/bsd-license.php BSD License | |
* | |
* @version $Id$ | |
* | |
*/ | |
class Lux_Color | |
{ | |
/** | |
* | |
* Converts hexadecimal colors to RGB. | |
* | |
* @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers, | |
* with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC. | |
* | |
* @return array RGB values: 0 => R, 1 => G, 2 => B | |
* | |
*/ | |
public function hex2rgb($hex) | |
{ | |
// Remove #. | |
if (strpos($hex, '#') === 0) { | |
$hex = substr($hex, 1); | |
} | |
if (strlen($hex) == 3) { | |
$hex .= $hex; | |
} | |
if (strlen($hex) != 6) { | |
return false; | |
} | |
// Convert each tuple to decimal. | |
$r = hexdec(substr($hex, 0, 2)); | |
$g = hexdec(substr($hex, 2, 2)); | |
$b = hexdec(substr($hex, 4, 2)); | |
return array($r, $g, $b); | |
} | |
/** | |
* | |
* Converts hexadecimal colors to HSV. | |
* | |
* @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers, | |
* with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC. | |
* | |
* @return array HSV values: 0 => H, 1 => S, 2 => V | |
* | |
*/ | |
public function hex2hsv($hex) | |
{ | |
return $this->rgb2hsv($this->hex2rgb($hex)); | |
} | |
/** | |
* | |
* Converts hexadecimal colors to HSL. | |
* | |
* @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers, | |
* with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC. | |
* | |
* @return array HSL values: 0 => H, 1 => S, 2 => L | |
* | |
*/ | |
public function hex2hsl($hex) | |
{ | |
return $this->rgb2hsl($this->hex2rgb($hex)); | |
} | |
/** | |
* | |
* Converts RGB colors to hexadecimal. | |
* | |
* @param array $rgb RGB values: 0 => R, 1 => G, 2 => B | |
* | |
* @return string Hexadecimal value with six digits, e.g., CCCCCC. | |
* | |
*/ | |
public function rgb2hex($rgb) | |
{ | |
if(count($rgb) < 3) { | |
return false; | |
} | |
list($r, $g, $b) = $rgb; | |
// From php.net. | |
$r = 0x10000 * max(0, min(255, $r)); | |
$g = 0x100 * max(0, min(255, $g)); | |
$b = max(0, min(255, $b)); | |
return strtoupper(str_pad(dechex($r + $g + $b), 6, 0, STR_PAD_LEFT)); | |
} | |
/** | |
* | |
* Converts RGB to HSV. | |
* | |
* @param array $rgb RGB values: 0 => R, 1 => G, 2 => B | |
* | |
* @return array HSV values: 0 => H, 1 => S, 2 => V | |
* | |
*/ | |
public function rgb2hsv($rgb) | |
{ | |
// RGB values = 0 ÷ 255 | |
$var_R = ($rgb[0] / 255); | |
$var_G = ($rgb[1] / 255); | |
$var_B = ($rgb[2] / 255); | |
// Min. value of RGB | |
$var_Min = min($var_R, $var_G, $var_B); | |
// Max. value of RGB | |
$var_Max = max($var_R, $var_G, $var_B); | |
// Delta RGB value | |
$del_Max = $var_Max - $var_Min; | |
$V = $var_Max; | |
// This is a gray, no chroma... | |
if ( $del_Max == 0 ) { | |
// HSV results = 0 ÷ 1 | |
$H = 0; | |
$S = 0; | |
} else { | |
// Chromatic data... | |
$S = $del_Max / $var_Max; | |
$del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max; | |
$del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max; | |
$del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max; | |
if ($var_R == $var_Max) { | |
$H = $del_B - $del_G; | |
} else if ($var_G == $var_Max) { | |
$H = (1 / 3) + $del_R - $del_B; | |
} else if ($var_B == $var_Max) { | |
$H = (2 / 3) + $del_G - $del_R; | |
} | |
if ($H < 0) { | |
$H += 1; | |
} | |
if ($H > 1) { | |
$H -= 1; | |
} | |
} | |
// Returns agnostic values. | |
// Range will depend on the application: e.g. $H*360, $S*100, $V*100. | |
return array($H, $S, $V); | |
} | |
/** | |
* | |
* Converts RGB to HSL. | |
* | |
* @param array $rgb RGB values: 0 => R, 1 => G, 2 => B | |
* | |
* @return array HSL values: 0 => H, 1 => S, 2 => L | |
* | |
*/ | |
public function rgb2hsl($rgb) | |
{ | |
// Where RGB values = 0 ÷ 255. | |
$var_R = $rgb[0] / 255; | |
$var_G = $rgb[1] / 255; | |
$var_B = $rgb[2] / 255; | |
// Min. value of RGB | |
$var_Min = min($var_R, $var_G, $var_B); | |
// Max. value of RGB | |
$var_Max = max($var_R, $var_G, $var_B); | |
// Delta RGB value | |
$del_Max = $var_Max - $var_Min; | |
$L = ($var_Max + $var_Min) / 2; | |
if ( $del_Max == 0 ) { | |
// This is a gray, no chroma... | |
// HSL results = 0 ÷ 1 | |
$H = 0; | |
$S = 0; | |
} else { | |
// Chromatic data... | |
if ($L < 0.5) { | |
$S = $del_Max / ($var_Max + $var_Min); | |
} else { | |
$S = $del_Max / ( 2 - $var_Max - $var_Min ); | |
} | |
$del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max; | |
$del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max; | |
$del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max; | |
if ($var_R == $var_Max) { | |
$H = $del_B - $del_G; | |
} else if ($var_G == $var_Max) { | |
$H = ( 1 / 3 ) + $del_R - $del_B; | |
} else if ($var_B == $var_Max) { | |
$H = ( 2 / 3 ) + $del_G - $del_R; | |
} | |
if ($H < 0) { | |
$H += 1; | |
} | |
if ($H > 1) { | |
$H -= 1; | |
} | |
} | |
return array($H, $S, $L); | |
} | |
/** | |
* | |
* Converts HSV colors to hexadecimal. | |
* | |
* @param array $hsv HSV values: 0 => H, 1 => S, 2 => V | |
* | |
* @return string Hexadecimal value with six digits, e.g., CCCCCC. | |
* | |
*/ | |
public function hsv2hex($hsv) | |
{ | |
return $this->rgb2hex($this->hsv2rgb($hsv)); | |
} | |
/** | |
* | |
* Converts HSV to RGB. | |
* | |
* @param array $hsv HSV values: 0 => H, 1 => S, 2 => V | |
* | |
* @return array RGB values: 0 => R, 1 => G, 2 => B | |
* | |
*/ | |
public function hsv2rgb($hsv) | |
{ | |
$H = $hsv[0]; | |
$S = $hsv[1]; | |
$V = $hsv[2]; | |
// HSV values = 0 ÷ 1 | |
if ($S == 0) { | |
$R = $V * 255; | |
$G = $V * 255; | |
$B = $V * 255; | |
} else { | |
$var_h = $H * 6; | |
// H must be < 1 | |
if ( $var_h == 6 ) { | |
$var_h = 0; | |
} | |
// Or ... $var_i = floor( $var_h ) | |
$var_i = floor( $var_h ); | |
$var_1 = $V * ( 1 - $S ); | |
$var_2 = $V * ( 1 - $S * ( $var_h - $var_i ) ); | |
$var_3 = $V * ( 1 - $S * ( 1 - ( $var_h - $var_i ) ) ); | |
switch($var_i) { | |
case 0: | |
$var_r = $V; | |
$var_g = $var_3; | |
$var_b = $var_1; | |
break; | |
case 1: | |
$var_r = $var_2; | |
$var_g = $V; | |
$var_b = $var_1; | |
break; | |
case 2: | |
$var_r = $var_1; | |
$var_g = $V; | |
$var_b = $var_3; | |
break; | |
case 3: | |
$var_r = $var_1; | |
$var_g = $var_2; | |
$var_b = $V; | |
break; | |
case 4: | |
$var_r = $var_3; | |
$var_g = $var_1; | |
$var_b = $V; | |
break; | |
default: | |
$var_r = $V; | |
$var_g = $var_1; | |
$var_b = $var_2; | |
} | |
//RGB results = 0 ÷ 255 | |
$R = $var_r * 255; | |
$G = $var_g * 255; | |
$B = $var_b * 255; | |
} | |
return array($R, $G, $B); | |
} | |
/** | |
* | |
* Converts HSV colors to HSL. | |
* | |
* @param array $hsv HSV values: 0 => H, 1 => S, 2 => V | |
* | |
* @return array HSL values: 0 => H, 1 => S, 2 => L | |
* | |
*/ | |
public function hsv2hsl($hsv) | |
{ | |
return $this->rgb2hsl($this->hsv2rgb($hsv)); | |
} | |
/** | |
* | |
* Converts hexadecimal colors to HSL. | |
* | |
* @param array $hsl HSL values: 0 => H, 1 => S, 2 => L | |
* | |
* @return string Hexadecimal value. Accepts values with 3 or 6 numbers, | |
* with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC. | |
* | |
*/ | |
public function hsl2hex($hsl) | |
{ | |
return $this->rgb2hex($this->hsl2rgb($hsl)); | |
} | |
/** | |
* | |
* Converts HSL to RGB. | |
* | |
* @param array $hsv HSL values: 0 => H, 1 => S, 2 => L | |
* | |
* @return array RGB values: 0 => R, 1 => G, 2 => B | |
* | |
*/ | |
public function hsl2rgb($hsl) | |
{ | |
list($H, $S, $L) = $hsl; | |
if ($S == 0) { | |
// HSL values = 0 ÷ 1 | |
// RGB results = 0 ÷ 255 | |
$R = $L * 255; | |
$G = $L * 255; | |
$B = $L * 255; | |
} else { | |
if ($L < 0.5) { | |
$var_2 = $L * (1 + $S); | |
} else { | |
$var_2 = ($L + $S) - ($S * $L); | |
} | |
$var_1 = 2 * $L - $var_2; | |
$R = 255 * $this->_hue2rgb($var_1, $var_2, $H + (1 / 3)); | |
$G = 255 * $this->_hue2rgb($var_1, $var_2, $H); | |
$B = 255 * $this->_hue2rgb($var_1, $var_2, $H - (1 / 3)); | |
} | |
return array($R, $G, $B); | |
} | |
/** | |
* | |
* Support method for hsl2rgb(): converts hue ro RGB. | |
* | |
* @param | |
* | |
* @param | |
* | |
* @param | |
* | |
* @return int | |
* | |
*/ | |
protected function _hue2rgb($v1, $v2, $vH) | |
{ | |
if ($vH < 0) { | |
$vH += 1; | |
} | |
if ($vH > 1) { | |
$vH -= 1; | |
} | |
if ((6 * $vH) < 1) { | |
return ($v1 + ($v2 - $v1) * 6 * $vH); | |
} | |
if ((2 * $vH) < 1) { | |
return $v2; | |
} | |
if ((3 * $vH) < 2) { | |
return ($v1 + ($v2 - $v1) * (( 2 / 3) - $vH) * 6); | |
} | |
return $v1; | |
} | |
/** | |
* | |
* Converts hexadecimal colors to HSL. | |
* | |
* @param array $hsl HSL values: 0 => H, 1 => S, 2 => L | |
* | |
* @return array HSV values: 0 => H, 1 => S, 2 => V | |
* | |
*/ | |
public function hsl2hsv($hsl) | |
{ | |
return $this->rgb2hsv($this->hsl2rgb($hsl)); | |
} | |
/** | |
* | |
* Updates HSV values. | |
* | |
* @param array $hsv HSV values: 0 => H, 1 => S, 2 => V | |
* | |
* @param array $values Values to update: 0 => value to add to H (0 to 360), | |
* 1 and 2 => values to multiply S and V (0 to 100). Example: | |
* | |
* {{{code:php | |
* // Update saturation to 80% in the provided HSV. | |
* $hsv = array(120, 0.75, 0.75); | |
* $new_hsv = $color->updateHsv($hsv, array(null, 80, null)); | |
* }}} | |
* | |
*/ | |
public function updateHsv($hsv, $values) | |
{ | |
if (isset($values[0])) { | |
$hsv[0] = max(0, min(360, ($hsv[0] + $values[0]))); | |
} | |
if (isset($values[1])) { | |
$hsv[1] = max(0, min(1, ($hsv[1] * ($values[1] / 100)))); | |
} | |
if (isset($values[2])) { | |
$hsv[2] = max(0, min(1, ($hsv[2] * ($values[2] / 100)))); | |
} | |
return $hsv; | |
} | |
/** | |
* | |
* Updates HSL values. | |
* | |
* @param array $hsl HSL values: 0 => H, 1 => S, 2 => L | |
* | |
* @param array $values Values to update: 0 => value to add to H (0 to 360), | |
* 1 and 2 => values to multiply S and V (0 to 100). Example: | |
* | |
* {{{code:php | |
* // Update saturation to 80% in the provided HSL. | |
* $hsl = array(120, 0.75, 0.75); | |
* $new_hsl = $color->updateHsl($hsl, array(null, 80, null)); | |
* }}} | |
* | |
*/ | |
public function updateHsl($hsl, $values) | |
{ | |
if (isset($values[0])) { | |
$hsl[0] = max(0, min(360, ($hsl[0] + $values[0]))); | |
} | |
if (isset($values[1])) { | |
$hsl[1] = max(0, min(1, ($hsl[1] * ($values[1] / 100)))); | |
} | |
if (isset($values[2])) { | |
$hsl[2] = max(0, min(1, ($hsl[2] * ($values[2] / 100)))); | |
} | |
return $hsl; | |
} | |
} |
<!DOCTYPE html> | |
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> | |
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> | |
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> | |
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> | |
<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]--> | |
<head> | |
<meta charset="utf-8" /> | |
<!-- Set the viewport width to device width for mobile --> | |
<meta name="viewport" content="width=device-width" /> | |
<title>Welcome to Foundation</title> | |
<!-- Included CSS Files --> | |
<link rel="stylesheet" href="stylesheets/foundation.css"> | |
<link rel="stylesheet" href="stylesheets/app.css"> | |
<!--[if lt IE 9]> | |
<link rel="stylesheet" href="stylesheets/ie.css"> | |
<![endif]--> | |
<!-- IE Fix for HTML5 Tags --> | |
<!--[if lt IE 9]> | |
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> | |
<![endif]--> | |
</head> | |
<body> | |
<!-- container --> | |
<div class="container"> | |
<div class="row"> | |
<div class="twelve columns"> | |
<h2>Welcome to Foundation</h2> | |
<p>This is version 2.1.4 released on December 19, 2011</p> | |
<hr /> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="eight columns"> | |
<h3>The Grid</h3> | |
<!-- Grid Example --> | |
<div class="row"> | |
<div class="twelve columns"> | |
<div class="panel"> | |
<p>This is a twelve column section in a row. Each of these includes a div.panel element so you can see where the columns are - it's not required at all for the grid.</p> | |
</div> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="six columns"> | |
<div class="panel"> | |
<p>Six columns</p> | |
</div> | |
</div> | |
<div class="six columns"> | |
<div class="panel"> | |
<p>Six columns</p> | |
</div> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="four columns"> | |
<div class="panel"> | |
<p>Four columns</p> | |
</div> | |
</div> | |
<div class="four columns"> | |
<div class="panel"> | |
<p>Four columns</p> | |
</div> | |
</div> | |
<div class="four columns"> | |
<div class="panel"> | |
<p>Four columns</p> | |
</div> | |
</div> | |
</div> | |
<h3>Tabs</h3> | |
<dl class="tabs"> | |
<dd><a href="#simple1" class="active">Simple Tab 1</a></dd> | |
<dd><a href="#simple2">Simple Tab 2</a></dd> | |
<dd><a href="#simple3">Simple Tab 3</a></dd> | |
</dl> | |
<ul class="tabs-content"> | |
<li class="active" id="simple1Tab">This is simple tab 1's content. Pretty neat, huh?</li> | |
<li id="simple2Tab">This is simple tab 2's content. Now you see it!</li> | |
<li id="simple3Tab">This is simple tab 3's content. It's, you know...okay.</li> | |
</ul> | |
<h3>Buttons</h3> | |
<p><a href="#" class="small blue button">Small Blue Button</a></p> | |
<p><a href="#" class="blue button">Medium Blue Button</a></p> | |
<p><a href="#" class="large blue button">Large Blue Button</a></p> | |
<p><a href="#" class="nice radius small blue button">Nice Blue Button</a></p> | |
<p><a href="#" class="nice radius blue button">Nice Blue Button</a></p> | |
<p><a href="#" class="nice radius large blue button">Nice Blue Button</a></p> | |
</div> | |
<div class="four columns"> | |
<h4>Getting Started</h4> | |
<p>We're stoked you want to try Foundation! To get going, this file (index.html) includes some basic styles you can modify, play around with, or totally destroy to get going.</p> | |
<h4>Other Resources</h4> | |
<p>Once you've exhausted the fun in this document, you should check out:</p> | |
<ul class="disc"> | |
<li><a href="http://foundation.zurb.com/docs">Foundation Documentation</a><br />Everything you need to know about using the framework.</li> | |
<li><a href="http://github.com/zurb/foundation">Foundation on Github</a><br />Latest code, issue reports, feature requests and more.</li> | |
<li><a href="http://twitter.com/foundationzurb">@foundationzurb</a><br />Ping us on Twitter if you have questions. If you build something with this we'd love to see it (and send you a totally boss sticker).</li> | |
</ul> | |
</div> | |
</div> | |
</div> | |
<!-- container --> | |
<!-- Included JS Files --> | |
<script src="javascripts/foundation.js"></script> | |
<script src="javascripts/app.js"></script> | |
</body> | |
</html> | |
/* Foundation was made by ZURB, an interaction design and design strategy firm in Campbell, CA */ | |
/* zurb.com */ | |
/* humanstxt.org */ | |
/* SITE */ | |
Standards: HTML5, CSS3 | |
Components: jQuery, Orbit, Reveal | |
Software: Coda, Textmate, Git |
for each agency, record when last changed (number of days too) and show a couple of URLs that were in that change | |
for each agency, find a scrapped document and read the webserver off it |