templates/companies.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SWEatshop.tech</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400" rel="stylesheet">
<link rel="stylesheet" href="/static/css/styles.processed.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<script src="https://unpkg.com/isotope-layout@3.0.0/dist/isotope.pkgd.js"></script>
<link rel="shortcut icon" href="/static/img/favicon.ico">
</head>
<body class="gradient-bg">
<nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse-opacity">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/index.html"><img alt="Brand" src="/static/img/sweatshop-logo.png" style="width: 200px;"></a>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="/index.html">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about.html">About</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="#">Companies<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/people.html">People</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/investors.html">Investors</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/schools.html">Schools</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/visualization.html">Visualization</a>
</li>
<li><a href="#search"><img src="http://www.freeiconspng.com/uploads/search-icon-png-4.png" style="height: 35px;"></a></li>
</ul>
</div>
</nav>
<div style="min-height:89vh">
<h1 class="cover-heading">Companies</h1>
<div class="container" style="color: white;">
<div class="filters">
<div class="ui-group">
<button-text>Ownership Type</button-text>
<div class="button-group js-radio-button-group" data-filter-group="ownership-type" id="ownership-filters">
<button class="button" data-filter="">Any</button>
<button class="button" data-filter="PUBLIC">Public</button>
<button class="button" data-filter="PRIVATE">Private</button>
</div>
</div>
<div class="ui-group">
<button-text>Country</button-text>
<div class="button-group js-radio-button-group" data-filter-group="country" id="country-filters">
<button class="button" data-filter="">Any</button>
<button class="button" data-filter="United States">USA</button>
<button class="button" data-filter="United Kingdom">UK</button>
<button class="button" data-filter="Canada">Canada</button>
<button class="button" data-filter="China">China</button>
<button class="button" data-filter="France">France</button>
</div>
</div>
</div>
<div class="ui-group">
<button-text>Sort By</button-text>
<div class="button-group sort-by-button-group" id="sort-by">
<button class="button" data-sort-value="name" >Name</button>
<button class="button" data-sort-value="location" >Location</button>
</div>
</div>
<div class="ui-group">
<div class="button-group order-by-button-group" id="sort-order">
<button class="button" data-sort-value="asc">Ascending</button>
<button class="button" data-sort-value="desc">Descending</button>
</div>
</div>
<button-text>{{ pagination.info }}</button-text>
<div class="pag-container">{{ pagination.links }}</div>
<div class="grid small">
{% for company in companies %}
<a href="http://sweatshop.tech/company/{{company.idnum}}">
<div class="grid-item private small-size usa" location='{{company.location}}' name='{{company.name}}' size='{{company.size}}'>
<div class="card card-inverse" style="background-color: #333; border-color: #333; width: 20rem;">
<div style="background: #FFF; width: 100%">
<img class="card-img-top" src="{{company.image_url}}" alt="Card image cap">
</div>
<div class="card-block">
<h4 class="card-title name">{{company.name}}</h4>
<ul class="list-group list-group-flush;">
<li class="list-group-item">Ownership Type: {{company.ownership_type}}</li>
<li class="list-group-item">Location: {{company.location}}</li>
<li class="list-group-item">
{{"".join(company.description[:350].split("\\r\\n")) if company.description}}
</li>
</ul>
</div>
</div>
</div>
</a>
{% endfor %}
</div>
<div class="pag-container">{{ pagination.links }}</div>
<script>
// init Isotope
var $grid = $('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'fitRows',
masonry: {
columnWidth: 100
}
});
var $ascending = true
function getParameterByName(name) {
var url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
var filters = {};
var possiblefilters = ["country", "ownership-type"];
for(var i in possiblefilters) {
var j = possiblefilters[i];
var filterVal = getParameterByName(j);
if(filterVal)
filters[j] = filterVal;
}
var sortByVal = getParameterByName('sort');
if (!sortByVal)
sortByVal = "";
var sortOrder = getParameterByName('order');
if (!sortOrder)
sortOrder = "";
function applyFilters() {
var qstring = filters;
if(sortByVal) {
qstring['sort'] = sortByVal;
}
if(sortOrder) {
qstring['order'] = sortOrder;
}
window.location.href = "?" + $.param(qstring);
}
// bind sort button click
$('.sort-by-button-group').on( 'click', 'button', function() {
var sortByValue = $(this).attr('data-sort-value');
$ascending = !$ascending;
sortByVal = sortByValue;
applyFilters();
});
// bind order button click
$('.order-by-button-group').on( 'click', 'button', function() {
var sortOrderValue = $(this).attr('data-sort-value');
sortOrder = sortOrderValue;
applyFilters();
});
$('.filters').on( 'click', '.button', function() {
var $this = $(this);
// get group key
var $buttonGroup = $this.parents('.button-group');
var filterGroup = $buttonGroup.attr('data-filter-group');
// set filter for group
filters[ filterGroup ] = $this.attr('data-filter');
// combine filters
var filterValue = concatValues( filters );
// set filter for Isotope
applyFilters()
});
// change is-checked class on buttons
$('.button-group').each( function( i, buttonGroup ) {
var $buttonGroup = $( buttonGroup );
$buttonGroup.on( 'click', 'button', function() {
$buttonGroup.find('.is-checked').removeClass('is-checked');
$( this ).addClass('is-checked');
});
});
/********** Update is-checked on page load **********/
// Update the ownership type filter
var ownershipTypes = $('#ownership-filters').children('button');
var ownershipInitValue = filters['ownership-type'];
if (ownershipInitValue == null) {
ownershipInitValue = "";
}
for (var i in ownershipTypes)
if (typeof ownershipTypes[i] === "object" && $(ownershipTypes[i]).is('button'))
if (ownershipTypes[i].attributes['data-filter'].value == ownershipInitValue)
$(ownershipTypes[i]).addClass('is-checked');
// Update the countries filter
var countries = $('#country-filters').children('button');
var countryInitValue = filters['country'];
if (countryInitValue == null) {
countryInitValue = "";
}
for (var i in countries)
if (typeof countries[i] === "object" && $(countries[i]).is('button'))
if (countries[i].attributes['data-filter'].value == countryInitValue)
$(countries[i]).addClass('is-checked');
// Updates the sort by values
var sortByVals = $('#sort-by').children('button');
var sortByValue = sortByVal;
if (sortByValue == "null" || sortByValue == "") {
sortByValue = "name";
}
for (var i in sortByVals)
if (typeof sortByVals[i] === "object" && $(sortByVals[i]).is('button'))
if (sortByVals[i].attributes['data-sort-value'].value == sortByValue)
$(sortByVals[i]).addClass('is-checked');
// Updates the sort order by values
var sortOrderVals = $('#sort-order').children('button');
var sortOrderValue = sortOrder;
if (sortOrderValue == "null" || sortOrderValue == "") {
sortOrderValue = "asc";
}
for (var i in sortOrderVals)
if (typeof sortOrderVals[i] === "object" && $(sortOrderVals[i]).is('button'))
if (sortOrderVals[i].attributes['data-sort-value'].value == sortOrderValue)
$(sortOrderVals[i]).addClass('is-checked');
// flatten object by concatting values
function concatValues( obj ) {
var value = '';
for ( var prop in obj ) {
value += obj[ prop ];
}
return value;
}
</script>
</div>
</div>
<div class="outro">
© SWEatshop 2017
</div>
</body>
<div id="search">
<button type="button" class="close">×</button>
<form action="/search" method="get">
<input type="search" name="query" value="" placeholder="type keyword(s) here" />
<button type="submit" class="btn btn-primary">Search</button>
</form>
</div>
<script>
$(function () {
$('a[href="#search"]').on('click', function(event) {
event.preventDefault();
$('#search').addClass('open');
$('#search > form > input[type="search"]').focus();
});
$('#search, #search button.close').on('click keyup', function(event) {
if (event.target == this || event.target.className == 'close' || event.keyCode == 27) {
$(this).removeClass('open');
}
});
});
</script>
</html>