Clean unimplemented files
Clean unimplemented files


Former-commit-id: a22e9f755ca7a5948d41e17941d609b336a2adc7

[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/
// twitter // twitter
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");
// facebook // facebook
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);  
}  
?> ?>
   
file:a/admin/validation.py (deleted)
#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)  
 
file:a/bubbletree.php (deleted)
 
<!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>  
 
directory:a/couchdb/settee -> directory:b/couchdb/settee
   
file:a/graph.php -> file:b/graph.php
<?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;
} }
   
directory:a/javascripts/bubbletree (deleted)
 
file:a/lib/Color.php (deleted)
<?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