diff --git a/.gitignore b/.gitignore index 7d928c22..4ba592c6 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ Thumbs.db frontend/node_modules frontend/bower_components frontend/dist +*.js.map diff --git a/frontend/Gruntfile.js b/frontend/Gruntfile.js index 33e2e2f4..8b83053e 100644 --- a/frontend/Gruntfile.js +++ b/frontend/Gruntfile.js @@ -2,6 +2,8 @@ module.exports = function(grunt) { 'use strict'; + var isCI = !!(process.env.JENKINS_URL || process.env.CONTINUOUS_INTEGRATION); + grunt.initConfig({ /** @@ -27,7 +29,7 @@ module.exports = function(grunt) { map: { src: [ 'frontend/src/less/leaflet.rrose.css', - 'frontend/bower_components/leaflet-MiniMap/src/Control.MiniMap.css' + 'frontend/bower_components/leaflet-minimap/dist/Control.MiniMap.min.css' ], dest: 'frontend/dist/map/css/vendor.css', } @@ -45,7 +47,7 @@ module.exports = function(grunt) { options: { paths: ['frontend/src/less'], compress: false, - sourceMap: true, + sourceMap: !isCI, sourceMapFilename: 'frontend/dist/basestyle/css/mapusaurus_sourcemap.css.map', sourceMapURL: '/static/basestyle/css/mapusaurus_sourcemap.css.map' }, @@ -77,9 +79,11 @@ module.exports = function(grunt) { */ uglify: { options: { - compress: true, + compress: {}, mangle: false, - beautify: true + beautify: true, + sourceMap: !isCI, + sourceMapIncludeSources: !isCI }, vendor: { src: [ @@ -99,10 +103,10 @@ module.exports = function(grunt) { 'frontend/bower_components/blockui/jquery.blockUI.js', 'frontend/src/js/leaflet/leaflet.js', 'frontend/bower_components/leaflet-hash/leaflet-hash.js', - 'frontend/bower_components/leaflet-utfgrid/src/leaflet.utfgrid.js', + 'frontend/bower_components/Leaflet.utfgrid/dist/leaflet.utfgrid.js', 'frontend/bower_components/leaflet-rrose/rrose-src.js', 'frontend/bower_components/numeral-js/min/numeral.min.js', - 'frontend/bower_components/leaflet-MiniMap/src/Control.MiniMap.js' + 'frontend/bower_components/leaflet-MiniMap/dist/Control.MiniMap.min.js' ], dest: 'frontend/dist/map/js/map-vendor.min.js' }, @@ -231,4 +235,4 @@ module.exports = function(grunt) { grunt.registerTask('build-less', ['less', 'copy:django']); grunt.registerTask('default', ['build']); -}; \ No newline at end of file +}; diff --git a/frontend/bower.json b/frontend/bower.json index 5bec80ce..131dd202 100644 --- a/frontend/bower.json +++ b/frontend/bower.json @@ -14,15 +14,14 @@ "cf-pagination": "git+https://github.com/cfpb/cf-pagination#0.4.0", "leaflet-rrose": "git+https://github.com/sephcoster/rrose.git#3775b4ca496f8dbe4f0fbcd441c99d1ad4daa3dd", "leaflet-hash": "git+https://github.com/sephcoster/leaflet-hash.git", - "leaflet-MiniMap": "git+https://github.com/Norkart/Leaflet-MiniMap.git#", - "leaflet-utfGrid": "git+https://github.com/danzel/Leaflet.utfgrid.git#", + "leaflet-minimap": "3.0.0", "topojson": "git+https://github.com/mbostock/topojson#1.6.18", "numeral-js": "git+https://github.com/adamwdraper/Numeral-js.git#1.5.3", "typeahead": "git+https://github.com/twitter/typeahead.js#0.10.5", "blockui": "git+https://github.com/malsup/blockui#2.70", "jquery.sparkline": "git+https://github.com/gwatts/jquery.sparkline#v2.1.2", "tooltipsy": "git+https://github.com/briancray/tooltipsy", - "tablesorter": "git+https://github.com/Mottie/tablesorter" + "tablesorter": "git+https://github.com/Mottie/tablesorter", + "Leaflet.utfgrid": "danzel/Leaflet.utfgrid#18b7043c4a" } - -} \ No newline at end of file +} diff --git a/frontend/src/js/asyncHandlers.js b/frontend/src/js/asyncHandlers.js index 31102986..d9c120fe 100644 --- a/frontend/src/js/asyncHandlers.js +++ b/frontend/src/js/asyncHandlers.js @@ -4,6 +4,7 @@ */ var rawGeo, rawLar, rawMinority, rawData, + selectedYear = selectedYear || 2014, isUIBlocked = false, larVolume = [], pctMinority = [], @@ -17,7 +18,7 @@ // Create the appropriate URL path to return values var endpoint = '/api/tractCentroids/', - params = {}; + params = { year: selectedYear }; if( bounds && typeof bounds === 'object' ){ params.neLat = bounds.neLat; @@ -60,8 +61,8 @@ // Return a promise. function getTractData( actionTakenVal, bounds, geoType ){ $('#bubbles_loading').show(); - var endpoint = '/api/hmda', - params = { year: 2013, + var endpoint = '/api/hmda/', + params = { year: selectedYear, 'lh': false, 'peers': false, 'geo_type': geoType }; @@ -131,8 +132,8 @@ // Get the Metro Areas currently shown on the map (used to check if we need to load new data on move) function getMsasInBounds(){ - var endpoint = '/api/msas', - params = {}, + var endpoint = '/api/msas/', + params = { year: selectedYear }, bounds = getBoundParams(); params.neLat = bounds.neLat; @@ -160,7 +161,8 @@ // Create the appropriate URL path to return values var endpoint = '/api/branchLocations/', - params = { neLat: bounds.neLat, + params = { year: selectedYear, + neLat: bounds.neLat, neLon: bounds.neLon, swLat: bounds.swLat, swLon: bounds.swLon }; @@ -184,4 +186,4 @@ /* END GET DATA SECTION - */ \ No newline at end of file + */ diff --git a/frontend/src/js/helpers.js b/frontend/src/js/helpers.js index 84ce195b..b546a452 100644 --- a/frontend/src/js/helpers.js +++ b/frontend/src/js/helpers.js @@ -312,7 +312,7 @@ var peerList = $('.peer-link'); $.each(peerList, function(i, val){ var instid = $(val).data('instid'); - var href = '/map/?metro=' + urlParam('metro') + '&lender=' + instid + window.location.hash.replace('&peers=true', ''); + var href = '/map/?metro=' + urlParam('metro') + '&lender=' + instid + '&year=' + selectedYear + window.location.hash.replace('&peers=true', ''); $(val).attr('href', href); }); } @@ -321,7 +321,7 @@ function updateCensusLink(){ var actions = getHashParams() var actionVar = getActionTaken( actions.action.values ); - $('#downloadCensus').attr('href', '/census/race_summary_csv/?metro=' + urlParam('metro') + '&lender=' + urlParam('lender') + '&action_taken=' + actionVar ); + $('#downloadCensus').attr('href', '/census/race_summary_csv/?metro=' + urlParam('metro') + '&lender=' + urlParam('lender') + '&action_taken=' + actionVar + '&year=' + selectedYear ); } // Parameter helper function that filters the query according to dropdown values @@ -398,4 +398,4 @@ } /* END UTILITY FUNCTIONS - */ \ No newline at end of file + */ diff --git a/frontend/src/js/map.js b/frontend/src/js/map.js index e1772e82..9d1c9527 100644 --- a/frontend/src/js/map.js +++ b/frontend/src/js/map.js @@ -126,14 +126,17 @@ $(document).ready(function(){ var keyHide = $('.hide-key'); var keyShow = $('.show-key'); var keyContents = $('.key-contents'); + var minorityKeyContents = $('.minority-key'); keyHide.on('click', function(e){ keyShow.removeClass('hidden'); keyContents.addClass('hidden'); + minorityKeyContents.addClass('hidden'); keyHide.addClass('hidden'); }); keyShow.on('click', function(e){ keyHide.removeClass('hidden'); keyContents.removeClass('hidden'); + minorityKeyContents.removeClass('hidden'); keyShow.addClass('hidden'); }); @@ -166,9 +169,6 @@ $(document).ready(function(){ } }); - map.on('moveend', function(){ - moveEndAction[geoQueryType](); - }); map.on('zoomend', function(){ buildKeyCircles(); }); diff --git a/frontend/src/js/metro-search.js b/frontend/src/js/metro-search.js index 1f1186cc..2e1a1063 100644 --- a/frontend/src/js/metro-search.js +++ b/frontend/src/js/metro-search.js @@ -2,6 +2,7 @@ $(document).ready(function() { var searchNameBox = $('#geoid'), + year = $('#year').val(), msaField = $('#msa-field'), search = new Bloodhound({ datumTokenizer: function(d) { @@ -9,7 +10,7 @@ $(document).ready(function() { }, queryTokenizer: Bloodhound.tokenizers.whitespace, remote: { - url: '/shapes/search/?auto=1&q=%QUERY', + url: '/shapes/search/?auto=1&q=%QUERY&year=' + year, filter: function(resp) { return resp.geos; } diff --git a/frontend/src/js/search.js b/frontend/src/js/search.js index 8da8c9db..83cf8b0d 100644 --- a/frontend/src/js/search.js +++ b/frontend/src/js/search.js @@ -1,25 +1,44 @@ -'use strict'; - $(document).ready(function() { - var search = new Bloodhound({ - datumTokenizer: function(d) { - return Bloodhound.tokenizers.whitespace(d.name); - }, - queryTokenizer: Bloodhound.tokenizers.whitespace, - remote: { - url: '/institutions/search/?auto=1&q=%QUERY', - filter: function(resp) { return resp.institutions;} - } - }), + + var $typeahead = $('#institutions_search input.search_institution'); + var $year = $('#search-year'); + var selectedYear = getYear(); - searchNameBox = $('#search_name'); - search.initialize(); + initTypeahead(); - searchNameBox.typeahead({ - highlight: true - }, { - displayKey: 'formatted_name', - source: search.ttAdapter() + $year.on('change', function() { + selectedYear = getYear(); + $typeahead.typeahead('destroy'); + $typeahead.val(''); + initTypeahead(); }); + function getYear() { + return parseInt($year.val()); + } + + function initTypeahead() { + var search = new Bloodhound({ + initialize: false, + datumTokenizer: function(d) { + return Bloodhound.tokenizers.whitespace(d.name); + }, + queryTokenizer: Bloodhound.tokenizers.whitespace, + remote: { + url: '/institutions/search/?auto=1&year=' + selectedYear + '&q=%QUERY', + filter: function(resp) { return resp.institutions; } + } + }); + + search.initialize(); + + $('#institutions_search').find('#search_year').val(selectedYear); + $typeahead.typeahead({ + highlight: true + }, { + displayKey: 'formatted_name', + source: search.ttAdapter() + }); + } + }); diff --git a/frontend/src/less/mapusaurus/map.less b/frontend/src/less/mapusaurus/map.less index 849edacd..b6733df3 100644 --- a/frontend/src/less/mapusaurus/map.less +++ b/frontend/src/less/mapusaurus/map.less @@ -508,8 +508,8 @@ select { .key-contents { .webfont-regular(); width: 230px; - border: solid 1px #000; - border-bottom: none; + border-right: solid 1px #000; + border-left: solid 1px #000; background: #fff; padding: 5px; @@ -592,7 +592,6 @@ select { color: @pacific; background-color: @gray-20; border: 1px solid @black; - border-bottom: none; padding: 5px; } diff --git a/frontend/src/less/mapusaurus/search.less b/frontend/src/less/mapusaurus/search.less index ba0e19f7..4ae0951f 100644 --- a/frontend/src/less/mapusaurus/search.less +++ b/frontend/src/less/mapusaurus/search.less @@ -97,6 +97,11 @@ } + #search-year { + font-size: .9em; + background: transparent; + } + } /* Search input form (gray bar at top of page ) */ @@ -507,4 +512,4 @@ } -} \ No newline at end of file +} diff --git a/mapusaurus/api/fixtures/api_tracts.json b/mapusaurus/api/fixtures/api_tracts.json index ad297c60..04b416be 100644 --- a/mapusaurus/api/fixtures/api_tracts.json +++ b/mapusaurus/api/fixtures/api_tracts.json @@ -5,7 +5,7 @@ "fields": { "geoid": "37067000700", "geo_type": 3, - "cbsa": "49180", + "cbsa": "556", "name": "12", "state": "11", "county": "222", @@ -16,7 +16,8 @@ "maxlat": 36.123218, "maxlon": -80.257619, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year": 2013 } }, { @@ -25,7 +26,7 @@ "fields": { "geoid": "37067001200", "geo_type": 3, - "cbsa": "49180", + "cbsa": "556", "name": "12", "state": "11", "county": "222", @@ -36,14 +37,15 @@ "maxlat": 36.123218, "maxlon": -80.257619, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year": 2013 } }, { "pk": 101, "model": "geo.geo", "fields": { - "cbsa": "49180", + "cbsa": "556", "geoid": "1122233300", "geo_type": 3, "name": "333", @@ -56,14 +58,15 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year": 2000 } }, { "pk": 102, "model": "geo.geo", "fields": { - "cbsa": "49180", + "cbsa": "556", "geoid": "1122233400", "geo_type": 3, "name": "334", @@ -76,14 +79,15 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year": 2000 } }, { "pk": 103, "model": "geo.geo", "fields": { - "cbsa": "49180", + "cbsa": "556", "geoid": "1122233500", "geo_type": 3, "name": "335", @@ -96,14 +100,15 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year": 2000 } }, { "pk": 104, "model": "geo.geo", "fields": { - "cbsa": "49180", + "cbsa": "556", "geoid": "1122233600", "geo_type": 3, "name": "336", @@ -116,7 +121,8 @@ "maxlat": -4, "maxlon": -4, "centlat": -4.5, - "centlon": -4.5 + "centlon": -4.5, + "year": 2000 } }, { diff --git a/mapusaurus/api/tests.py b/mapusaurus/api/tests.py index b01fde4b..5960422b 100644 --- a/mapusaurus/api/tests.py +++ b/mapusaurus/api/tests.py @@ -76,7 +76,7 @@ def test_api_msas_user_errors(self): def test_api_msas_endpoint(self): """should return a list of MSA ids in view""" - coords = {'neLat': '36.551569', 'neLon':'-78.961487', 'swLat':'35.824494', 'swLon':'-81.828918'} + coords = {'neLat': '36.551569', 'neLon':'-78.961487', 'swLat':'35.824494', 'swLon':'-81.828918', 'year':2013} url = reverse(msas) resp = self.client.get(url, coords) result_list = json.loads(resp.content) diff --git a/mapusaurus/api/views.py b/mapusaurus/api/views.py index 0b691e67..87dbf68b 100644 --- a/mapusaurus/api/views.py +++ b/mapusaurus/api/views.py @@ -27,11 +27,9 @@ def msas(request): northEastLon = request.GET.get('neLon') southWestLat = request.GET.get('swLat') southWestLon = request.GET.get('swLon') - bounds = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) - if bounds: - pass - #maxlat, minlon, minlat, maxlon = bounds[0], bounds[1], bounds[2], bounds[3] - msas = get_geos_by_bounds_and_type(*bounds, metro=True) + year = request.GET.get('year') + maxlat, minlon, minlat, maxlon = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) + msas = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year, metro=True) msa_list = [metro.geoid for metro in msas] return HttpResponse(json.dumps(msa_list), content_type='application/json') except: diff --git a/mapusaurus/basestyle/static/basestyle/css/mapusaurus.css b/mapusaurus/basestyle/static/basestyle/css/mapusaurus.css index 8a883390..34e5475e 100644 --- a/mapusaurus/basestyle/static/basestyle/css/mapusaurus.css +++ b/mapusaurus/basestyle/static/basestyle/css/mapusaurus.css @@ -6162,8 +6162,8 @@ select b { font-style: normal; font-weight: normal; width: 230px; - border: solid 1px #000; - border-bottom: none; + border-right: solid 1px #000; + border-left: solid 1px #000; background: #fff; padding: 5px; } @@ -6293,7 +6293,6 @@ select b { color: #0072ce; background-color: #e3e4e5; border: 1px solid #101820; - border-bottom: none; padding: 5px; } .vex-dialog-message h2 { @@ -6441,6 +6440,10 @@ select b { .search-home .search-field .tt-suggestion p { margin-bottom: 8px; } +.search-home #search-year { + font-size: .9em; + background: transparent; +} /* Search input form (gray bar at top of page ) */ .search-results-form { background-color: #f1f2f2; diff --git a/mapusaurus/basestyle/static/basestyle/css/mapusaurus.min.css b/mapusaurus/basestyle/static/basestyle/css/mapusaurus.min.css index 3dc40165..4970318d 100644 --- a/mapusaurus/basestyle/static/basestyle/css/mapusaurus.min.css +++ b/mapusaurus/basestyle/static/basestyle/css/mapusaurus.min.css @@ -1 +1 @@ -@import url(//fast.fonts.net/t/1.css?apiType=css&projectid=44e8c964-4684-44c6-a6e3-3f3da8787b50);.no-js .u-js-only{display:none!important}.u-clearfix:after{content:"";display:table;clear:both}.lt-ie8 .u-clearfix{zoom:1}.u-visually-hidden{position:absolute;overflow:hidden;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;border:0}.u-inline-block{display:inline-block}.lt-ie8 .u-inline-block{display:inline}.u-right{float:right}.u-break-word{word-break:break-all}.u-flexible-container{position:relative;padding-bottom:56.25%;height:0}.u-flexible-container_inner{position:absolute;top:0;left:0;width:100%;height:100%}.u-flexible-container__4-3{position:relative;padding-bottom:75%;height:0}@font-face{font-family:AvenirNextLTW01-Regular;src:url(//fast.fonts.net/dv2/2/e9167238-3b3f-4813-a04a-a384394eed42.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:400}@font-face{font-family:AvenirNextLTW01-Regular;src:url(//fast.fonts.net/dv2/2/e9167238-3b3f-4813-a04a-a384394eed42.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/1e9892c0-6927-4412-9874-1b82801ba47a.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/46cf1067-688d-4aab-b0f7-bd942af6efd8.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/52a192b1-bea5-4b48-879f-107f009b666f.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#52a192b1-bea5-4b48-879f-107f009b666f) format("svg");font-style:normal;font-weight:400}@font-face{font-family:AvenirNextLTW01-Italic;src:url(//fast.fonts.net/dv2/2/d1fddef1-d940-4904-8f6c-17e809462301.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:italic;font-weight:400}@font-face{font-family:AvenirNextLTW01-Italic;src:url(//fast.fonts.net/dv2/2/d1fddef1-d940-4904-8f6c-17e809462301.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/92b66dbd-4201-4ac2-a605-4d4ffc8705cc.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/18839597-afa8-4f0b-9abb-4a30262d0da8.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/1de7e6f4-9d4d-47e7-ab23-7d5cf10ab585.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#1de7e6f4-9d4d-47e7-ab23-7d5cf10ab585) format("svg");font-style:italic;font-weight:400}@font-face{font-family:AvenirNextLTW01-Medium;src:url(//fast.fonts.net/dv2/2/1a7c9181-cd24-4943-a9d9-d033189524e0.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:500}@font-face{font-family:AvenirNextLTW01-Medium;src:url(//fast.fonts.net/dv2/2/1a7c9181-cd24-4943-a9d9-d033189524e0.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/f26faddb-86cc-4477-a253-1e1287684336.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/63a74598-733c-4d0c-bd91-b01bffcd6e69.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/a89d6ad1-a04f-4a8f-b140-e55478dbea80.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#a89d6ad1-a04f-4a8f-b140-e55478dbea80) format("svg");font-style:normal;font-weight:500}@font-face{font-family:AvenirNextLTW01-Demi;src:url(//fast.fonts.net/dv2/2/12d643f2-3899-49d5-a85b-ff430f5fad15.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:700}@font-face{font-family:AvenirNextLTW01-Demi;src:url(//fast.fonts.net/dv2/2/12d643f2-3899-49d5-a85b-ff430f5fad15.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/91b50bbb-9aa1-4d54-9159-ec6f19d14a7c.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/a0f4c2f9-8a42-4786-ad00-fce42b57b148.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/99affa9a-a5e9-4559-bd07-20cf0071852d.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#99affa9a-a5e9-4559-bd07-20cf0071852d) format("svg");font-style:normal;font-weight:700}body{font-size:100%}.h1,.h2,.h3,h1,h2,h3{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}.h1 em,.h1 i,.h2 em,.h2 i,.h3 em,.h3 i,h1 em,h1 i,h2 em,h2 i,h3 em,h3 i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .h1 em,.lt-ie9 .h1 i,.lt-ie9 .h2 em,.lt-ie9 .h2 i,.lt-ie9 .h3 em,.lt-ie9 .h3 i,.lt-ie9 h1 em,.lt-ie9 h1 i,.lt-ie9 h2 em,.lt-ie9 h2 i,.lt-ie9 h3 em,.lt-ie9 h3 i{font-style:normal!important}.h1 b,.h1 strong,.h2 b,.h2 strong,.h3 b,.h3 strong,h1 b,h1 strong,h2 b,h2 strong,h3 b,h3 strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .h1 b,.lt-ie9 .h1 strong,.lt-ie9 .h2 b,.lt-ie9 .h2 strong,.lt-ie9 .h3 b,.lt-ie9 .h3 strong,.lt-ie9 h1 b,.lt-ie9 h1 strong,.lt-ie9 h2 b,.lt-ie9 h2 strong,.lt-ie9 h3 b,.lt-ie9 h3 strong{font-weight:400!important}.h1,h1{margin-top:0;margin-bottom:.47058824em;font-size:2.125em;line-height:1.29411765}.h2,h2{margin-top:0;margin-bottom:.30769231em;font-size:1.625em;line-height:1.26923077}.h3,h3{margin-top:0;margin-bottom:.22727273em;font-size:1.375em;line-height:1.27272727}.h4,h4{margin-top:0;margin-bottom:.27777778em;font-size:1.125em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;line-height:1.22222222}.lt-ie9 .h4,.lt-ie9 h4{font-weight:400!important}.h5,.h6,h5,h6{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase}.lt-ie9 .h5,.lt-ie9 .h6,.lt-ie9 h5,.lt-ie9 h6{font-weight:400!important}.h5,h5{margin-top:0;margin-bottom:.35714286em;font-size:.875em;line-height:1.57142857}.h6,h6{margin-top:0;margin-bottom:.41666667em;font-size:.75em;line-height:1.83333333}.superheader{margin-bottom:.1875em;font-size:3em;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;line-height:1.375}.lt-ie9 .superheader{font-weight:400!important}dl,figure,ol,p,table,ul{margin-top:0;margin-bottom:1.25em}figure{margin-left:0;margin-right:0}a{border-width:0;border-style:dotted;border-color:#0072ce;color:#0072ce;text-decoration:none}a.visited,a:visited{border-color:#005e5d;color:#005e5d}a.hover,a:hover{border-style:solid;border-color:#7fb8e6;color:#7fb8e6}a.focus,a:focus{border-style:solid;outline:dotted thin}a.active,a:active{border-style:solid;border-color:#002d72;color:#002d72}dd a,li a,p a{border-bottom-width:1px}nav a{border-bottom-width:0}ul{list-style:square}table{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}table em,table i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 table em,.lt-ie9 table i{font-style:normal!important}table b,table strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 table b,.lt-ie9 table strong{font-weight:400!important}td,th{padding:.75em .9375em;background:#f8f8f8}thead td,thead th{color:#fff;background:#43484e}tbody>tr:nth-child(odd)>td,tbody>tr:nth-child(odd)>th{background:#f1f2f2}.compact-table td,.compact-table th{padding:.4375em .625em}th{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;text-align:left}.lt-ie9 th{font-weight:400!important}blockquote{margin:1.25em}@media only all and (min-width:37.5em){blockquote{margin:1.75em 2.5em}}.pull-quote_body{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin-top:0;font-size:1.375em;line-height:1.27272727;margin-bottom:.54545455em;color:#101820}.pull-quote_body em,.pull-quote_body i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .pull-quote_body em,.lt-ie9 .pull-quote_body i{font-style:normal!important}.pull-quote_body b,.pull-quote_body strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .pull-quote_body b,.lt-ie9 .pull-quote_body strong{font-weight:400!important}.pull-quote_citation{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;margin-bottom:.35714286em;font-size:.875em;line-height:1.57142857;color:#75787b}.lt-ie9 .pull-quote_citation{font-weight:400!important}.pull-quote__large .pull-quote_body{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin-top:0;font-size:1.625em;line-height:1.26923077;margin-bottom:.69230769em}.pull-quote__large .pull-quote_body em,.pull-quote__large .pull-quote_body i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .pull-quote__large .pull-quote_body em,.lt-ie9 .pull-quote__large .pull-quote_body i{font-style:normal!important}.pull-quote__large .pull-quote_body b,.pull-quote__large .pull-quote_body strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .pull-quote__large .pull-quote_body b,.lt-ie9 .pull-quote__large .pull-quote_body strong{font-weight:400!important}label{display:block;margin-bottom:.3125em;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}label em,label i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 label em,.lt-ie9 label i{font-style:normal!important}label b,label strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 label b,.lt-ie9 label strong{font-weight:400!important}label input[type=checkbox],label input[type=radio]{margin-right:.375em}input[type=email],input[type=number],input[type=search],input[type=tel],input[type=text],input[type=url],select[multiple],textarea{display:inline-block;margin:0;padding:.375em;font-family:Arial,sans-serif;font-size:1em;background:#fff;border:1px solid #75787b;border-radius:0;vertical-align:top;-webkit-appearance:none;-webkit-user-modify:read-write-plaintext-only}::-webkit-search-decoration{-webkit-appearance:none}input[type=email].focus,input[type=email]:focus,input[type=number].focus,input[type=number]:focus,input[type=search].focus,input[type=search]:focus,input[type=tel].focus,input[type=tel]:focus,input[type=text].focus,input[type=text]:focus,input[type=url].focus,input[type=url]:focus,select[multiple].focus,select[multiple]:focus,textarea.focus,textarea:focus{border:1px solid #0072ce;outline:#0072ce solid 1px;outline-offset:0;box-shadow:none}::-webkit-input-placeholder{color:#75787b}::-moz-placeholder{color:#75787b}:-ms-input-placeholder{color:#75787b}@font-face{font-family:'CFPB Minicons';src:url(../fonts/cf-icons.eot);src:url(../fonts/cf-icons.eot?#iefix) format('embedded-opentype'),url(../fonts/cf-icons.woff) format('woff'),url(../fonts/cf-icons.ttf) format('truetype'),url(../fonts/cf-icons.svg) format('svg');font-weight:400;font-style:normal}.cf-icon{font-family:'CFPB Minicons';display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}.cf-icon-left:before{content:"\e000"}.cf-icon-left-round:before{content:"\e001"}.cf-icon-right:before{content:"\e002"}.cf-icon-right-round:before{content:"\e003"}.cf-icon-up:before{content:"\e004"}.cf-icon-up-round:before{content:"\e005"}.cf-icon-down:before{content:"\e006"}.cf-icon-down-round:before{content:"\e007"}.cf-icon-arrow-left:before{content:"\e008"}.cf-icon-arrow-left-round:before{content:"\e009"}.cf-icon-arrow-right:before{content:"\e010"}.cf-icon-arrow-right-round:before{content:"\e011"}.cf-icon-arrow-up:before{content:"\e012"}.cf-icon-arrow-up-round:before{content:"\e013"}.cf-icon-arrow-down:before{content:"\e014"}.cf-icon-arrow-down-round:before{content:"\e015"}.cf-icon-approved:before{content:"\e100"}.cf-icon-approved-round:before{content:"\e101"}.cf-icon-error:before{content:"\e102"}.cf-icon-error-round:before{content:"\e103"}.cf-icon-help:before{content:"\e104"}.cf-icon-help-round:before{content:"\e105"}.cf-icon-delete:before{content:"\e106"}.cf-icon-delete-round:before{content:"\e107"}.cf-icon-plus:before{content:"\e108"}.cf-icon-plus-round:before{content:"\e109"}.cf-icon-minus:before{content:"\e110"}.cf-icon-minus-round:before{content:"\e111"}.cf-icon-update:before{content:"\e112"}.cf-icon-update-round:before{content:"\e113"}.cf-icon-youtube:before{content:"\e200"}.cf-icon-youtube-square:before{content:"\e201"}.cf-icon-linkedin:before{content:"\e202"}.cf-icon-linkedin-square:before{content:"\e203"}.cf-icon-facebook:before{content:"\e204"}.cf-icon-facebook-square:before{content:"\e205"}.cf-icon-flickr:before{content:"\e206"}.cf-icon-flickr-square:before{content:"\e207"}.cf-icon-twitter:before{content:"\e208"}.cf-icon-twitter-square:before{content:"\e209"}.cf-icon-github:before{content:"\e210"}.cf-icon-github-square:before{content:"\e211"}.cf-icon-email-social:before{content:"\e212"}.cf-icon-email-social-square:before{content:"\e213"}.cf-icon-web:before{content:"\e300"}.cf-icon-web-round:before{content:"\e301"}.cf-icon-email:before{content:"\e302"}.cf-icon-email-round:before{content:"\e303"}.cf-icon-mail:before{content:"\e304"}.cf-icon-mail-round:before{content:"\e305"}.cf-icon-phone:before{content:"\e306"}.cf-icon-phone-round:before{content:"\e307"}.cf-icon-technology:before{content:"\e308"}.cf-icon-technology-round:before{content:"\e309"}.cf-icon-fax:before{content:"\e310"}.cf-icon-fax-round:before{content:"\e311"}.cf-icon-document:before{content:"\e400"}.cf-icon-document-round:before{content:"\e401"}.cf-icon-pdf:before{content:"\e402"}.cf-icon-pdf-round:before{content:"\e403"}.cf-icon-upload:before{content:"\e404"}.cf-icon-upload-round:before{content:"\e405"}.cf-icon-download:before{content:"\e406"}.cf-icon-download-round:before{content:"\e407"}.cf-icon-copy:before{content:"\e408"}.cf-icon-copy-round:before{content:"\e409"}.cf-icon-edit:before{content:"\e410"}.cf-icon-edit-round:before{content:"\e411"}.cf-icon-attach:before{content:"\e412"}.cf-icon-attach-round:before{content:"\e413"}.cf-icon-print:before{content:"\e414"}.cf-icon-print-round:before{content:"\e415"}.cf-icon-save:before{content:"\e416"}.cf-icon-save-round:before{content:"\e417"}.cf-icon-appendix:before{content:"\e418"}.cf-icon-appendix-round:before{content:"\e419"}.cf-icon-supplement:before{content:"\e420"}.cf-icon-supplement-round:before{content:"\e421"}.cf-icon-rss:before{content:"\e422"}.cf-icon-rss-round:before{content:"\e423"}.cf-icon-bank-account:before{content:"\e500"}.cf-icon-bank-account-round:before{content:"\e501"}.cf-icon-credit-card:before{content:"\e502"}.cf-icon-credit-card-round:before{content:"\e503"}.cf-icon-loan:before{content:"\e504"}.cf-icon-loan-round:before{content:"\e505"}.cf-icon-money-transfer:before{content:"\e506"}.cf-icon-money-transfer-round:before{content:"\e507"}.cf-icon-mortgage:before{content:"\e508"}.cf-icon-mortgage-round:before{content:"\e509"}.cf-icon-debt-collection:before{content:"\e510"}.cf-icon-debt-collection-round:before{content:"\e511"}.cf-icon-credit-report:before{content:"\e512"}.cf-icon-credit-report-round:before{content:"\e513"}.cf-icon-money:before{content:"\e514"}.cf-icon-money-round:before{content:"\e515"}.cf-icon-quick-cash:before{content:"\e516"}.cf-icon-quick-cash-round:before{content:"\e517"}.cf-icon-contract:before{content:"\e518"}.cf-icon-contract-round:before{content:"\e519"}.cf-icon-complaint:before{content:"\e520"}.cf-icon-complaint-round:before{content:"\e521"}.cf-icon-getting-credit-card:before{content:"\e522"}.cf-icon-getting-credit-card-round:before{content:"\e523"}.cf-icon-buying-car:before{content:"\e524"}.cf-icon-buying-car-round:before{content:"\e525"}.cf-icon-paying-college:before{content:"\e526"}.cf-icon-paying-college-round:before{content:"\e527"}.cf-icon-owning-home:before{content:"\e528"}.cf-icon-owning-home-round:before{content:"\e529"}.cf-icon-debt:before{content:"\e530"}.cf-icon-debt-round:before{content:"\e531"}.cf-icon-building-credit:before{content:"\e532"}.cf-icon-building-credit-round:before{content:"\e533"}.cf-icon-prepaid-cards:before{content:"\e534"}.cf-icon-prepaid-cards-round:before{content:"\e535"}.cf-icon-payday-loan:before{content:"\e536"}.cf-icon-payday-loan-round:before{content:"\e537"}.cf-icon-retirement:before{content:"\e538"}.cf-icon-retirement-round:before{content:"\e539"}.cf-icon-user:before{content:"\e600"}.cf-icon-user-round:before{content:"\e601"}.cf-icon-wifi:before{content:"\e602"}.cf-icon-wifi-round:before{content:"\e603"}.cf-icon-search:before{content:"\e604"}.cf-icon-search-round:before{content:"\e605"}.cf-icon-share:before{content:"\e606"}.cf-icon-share-round:before{content:"\e607"}.cf-icon-link:before{content:"\e608"}.cf-icon-link-round:before{content:"\e609"}.cf-icon-external-link:before{content:"\e610"}.cf-icon-external-link-round:before{content:"\e611"}.cf-icon-audio-mute:before{content:"\e612"}.cf-icon-audio-mute-round:before{content:"\e616"}.cf-icon-audio-low:before{content:"\e613"}.cf-icon-audio-low-round:before{content:"\e617"}.cf-icon-audio-medium:before{content:"\e614"}.cf-icon-audio-medium-round:before{content:"\e618"}.cf-icon-audio-max:before{content:"\e615"}.cf-icon-audio-max-round:before{content:"\e619"}.cf-icon-favorite:before{content:"\e620"}.cf-icon-favorite-round:before{content:"\e621"}.cf-icon-unfavorite:before{content:"\e622"}.cf-icon-unfavorite-round:before{content:"\e623"}.cf-icon-bookmark:before{content:"\e624"}.cf-icon-bookmark-round:before{content:"\e625"}.cf-icon-unbookmark:before{content:"\e626"}.cf-icon-unbookmark-round:before{content:"\e627"}.cf-icon-settings:before{content:"\e628"}.cf-icon-settings-round:before{content:"\e629"}.cf-icon-menu:before{content:"\e630"}.cf-icon-menu-round:before{content:"\e631"}.cf-icon-lock:before{content:"\e632"}.cf-icon-lock-round:before{content:"\e633"}.cf-icon-unlock:before{content:"\e634"}.cf-icon-unlock-round:before{content:"\e635"}.cf-icon-clock:before{content:"\e636"}.cf-icon-clock-round:before{content:"\e637"}.cf-icon-chart:before{content:"\e638"}.cf-icon-chart-round:before{content:"\e639"}.cf-icon-play:before{content:"\e640"}.cf-icon-play-round:before{content:"\e641"}.cf-icon-newspaper:before{content:"\e700"}.cf-icon-newspaper-round:before{content:"\e701"}.cf-icon-microphone:before{content:"\e702"}.cf-icon-microphone-round:before{content:"\e703"}.cf-icon-bullhorn:before{content:"\e704"}.cf-icon-bullhorn-round:before{content:"\e705"}.cf-icon-double-quote:before{content:"\e708"}.cf-icon-double-quote-round:before{content:"\e709"}.cf-icon-speech-bubble:before{content:"\e710"}.cf-icon-speech-bubble-round:before{content:"\e711"}.cf-icon-information:before{content:"\e712"}.cf-icon-information-round:before{content:"\e713"}.cf-icon-lightbulb:before{content:"\e714"}.cf-icon-lightbulb-round:before{content:"\e715"}.cf-icon-dialogue:before{content:"\e716"}.cf-icon-dialogue-round:before{content:"\e717"}.cf-icon-date:before{content:"\e718"}.cf-icon-date-round:before{content:"\e719"}.btn{display:inline-block;box-sizing:border-box;padding:.5em 1.16666667em;border:0;border-radius:.33333333em;margin:0;vertical-align:middle;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:.75em;line-height:normal;text-decoration:none;cursor:pointer;transition:.1s;-webkit-appearance:none}.lt-ie9 .btn{font-weight:400!important}.btn,.btn:link,.btn:visited{background-color:#0072ce;color:#fff}.btn.hover,.btn:hover{background-color:#328ed8}.btn.focus,.btn:focus{background-color:#328ed8;outline:#0072ce dotted 1px;outline-offset:1px}.btn.active,.btn:active{background-color:#33578e}button.btn::-moz-focus-inner,input.btn::-moz-focus-inner{border:0}.btn+.btn{margin-left:.5em}.lt-ie8{background:url(null) no-repeat fixed}.lt-ie8 button.btn,.lt-ie8 input.btn{overflow:visible;padding-top:.4em;padding-bottom:.4em}.btn__secondary,.btn__secondary:link,.btn__secondary:visited{background-color:#75787b;color:#fff}.btn__secondary.hover,.btn__secondary:hover{background-color:#919395}.btn__secondary.focus,.btn__secondary:focus{background-color:#919395;outline-color:#75787b}.btn__secondary.active,.btn__secondary:active{background-color:#43484e}.btn__warning,.btn__warning:link,.btn__warning:visited{background-color:#d12124;color:#fff}.btn__warning.hover,.btn__warning:hover{background-color:#da6750}.btn__warning.focus,.btn__warning:focus{background-color:#da6750;outline-color:#d12124}.btn__warning.active,.btn__warning:active{background-color:#9c301b}.btn__disabled,.btn__disabled.active,.btn__disabled.focus,.btn__disabled.hover,.btn__disabled:active,.btn__disabled:focus,.btn__disabled:hover,.btn__disabled:link,.btn__disabled:visited{background-color:#e3e4e5;color:#75787b;cursor:default;cursor:not-allowed}.btn__disabled.focus,.btn__disabled:focus{outline-color:#75787b}.btn__super{padding:.61111111em 1.61111111em;font-size:1.125em}.btn__super+.btn__super{margin-left:.33333333em}.lt-ie8 button.btn__super,.lt-ie8 input.btn__super{padding-top:.66666667em;padding-bottom:.66666667em}.btn_icon__left{padding:0 .875em 0 0;border-right:1px solid #fff;border-right:1px solid rgba(255,255,255,.4);margin:0 .58333333em 0 0}.btn__disabled .btn_icon__left{border-right-color:#babbbd}.btn_icon__right{padding:0 0 0 .875em;border-right:0;border-left:1px solid #fff;border-left:1px solid rgba(255,255,255,.4);margin:0 0 0 .58333333em}.btn__disabled .btn_icon__right{border-left-color:#babbbd}.btn__grouped{border-radius:0}.btn__grouped-first{border-top-right-radius:0;border-bottom-right-radius:0}.btn__grouped-last{border-top-left-radius:0;border-bottom-left-radius:0}.btn__grouped,.btn__grouped+.btn__grouped,.btn__grouped+.btn__grouped-last,.btn__grouped-first+.btn__grouped,.btn__grouped-first+.btn__grouped-last,.btn__grouped-last{margin-left:-.25em}.btn__grouped-first.btn__super+.btn__grouped-last.btn__super,.btn__grouped-first.btn__super+.btn__grouped.btn__super,.btn__grouped-last.btn__super,.btn__grouped.btn__super,.btn__grouped.btn__super+.btn__grouped-last.btn__super,.btn__grouped.btn__super+.btn__grouped.btn__super{margin-left:-.16666667em}.btn__compound-action,.btn__compound-action:link,.btn__compound-action:visited{background-color:#328ed8}.btn__compound-action.hover,.btn__compound-action:focus,.btn__compound-action:hover{background-color:#0072ce}.btn__compound-action.btn__secondary{background-color:#919395}.btn__compound-action.btn__secondary.hover,.btn__compound-action.btn__secondary:focus,.btn__compound-action.btn__secondary:hover{background-color:#75787b}.btn__compound-action.btn__super{padding-left:1.22222222em;padding-right:1.22222222em}.btn__link{padding:0;border-bottom:1px dotted #0072ce;border-radius:0;margin:.5em 0}.btn__link,.btn__link:link,.btn__link:visited{background-color:transparent;color:#0072ce}.btn__link.hover,.btn__link:hover{border-bottom:1px solid #7fb8e6;background-color:transparent;color:#7fb8e6}.btn__link.focus,.btn__link:focus{border-bottom-style:solid;background-color:transparent;outline:#0072ce dotted thin}.btn__link.active,.btn__link:active{border-bottom:1px solid #002d72;background-color:transparent;color:#002d72}.lt-ie8 button.btn__link,.lt-ie8 input.btn__link{padding:0}.btn__link.btn__secondary,.btn__link.btn__secondary:link,.btn__link.btn__secondary:visited{border-bottom-color:#75787b;background-color:transparent;color:#75787b}.btn__link.btn__secondary.hover,.btn__link.btn__secondary:hover{border-bottom-color:#43484e;color:#43484e}.btn__link.btn__secondary.focus,.btn__link.btn__secondary:focus{outline-color:#75787b}.btn__link.btn__secondary.active,.btn__link.btn__secondary:active{border-bottom-color:#101820;color:#101820}.btn__link.btn__warning,.btn__link.btn__warning:link,.btn__link.btn__warning:visited{border-bottom-color:#d12124;background-color:transparent;color:#d12124}.btn__link.btn__warning.hover,.btn__link.btn__warning:hover{border-bottom-color:#da6750;color:#da6750}.btn__link.btn__warning.focus,.btn__link.btn__warning:focus{outline-color:#d12124}.btn__link.btn__warning.active,.btn__link.btn__warning:active{border-bottom-color:#9c301b;color:#9c301b}.form-label-header{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;font-size:.875em;line-height:1.57142857;margin-bottom:.71428571em}.lt-ie9 .form-label-header{font-weight:400!important}.input__super[type=email],.input__super[type=number],.input__super[type=search],.input__super[type=tel],.input__super[type=text],.input__super[type=url]{padding:.55555556em;font-size:1.125em}input[type=email].error,input[type=number].error,input[type=search].error,input[type=tel].error,input[type=text].error,input[type=url].error,select[multiple].error,textarea.error{border:1px solid #d12124;outline:#d12124 solid 1px}input[type=email].success,input[type=number].success,input[type=search].success,input[type=tel].success,input[type=text].success,input[type=url].success,select[multiple].success,textarea.success{border:1px solid #2cb34a;outline:#2cb34a solid 1px}.cf-form_input-icon{position:relative;top:.3em;margin-left:.2em;font-size:1.25em}.error+.cf-form_input-icon{color:#d12124}.success+.cf-form_input-icon{color:#2cb34a}.form-group+.form-group{margin-top:1.875em}.form-group_item+.form-group_item{margin-top:.9375em}@media only all and (min-width:30em){.input-with-btn{display:block;position:relative;margin-left:-15px;margin-right:-15px}}.input-with-btn_input{margin-bottom:.9375em}@media only all and (min-width:30em){.input-with-btn_input{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:75%}.ie .input-with-btn_input{margin-right:-.26em}.lt-ie8 .input-with-btn_input{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only all and (min-width:60em){.input-with-btn_input{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:83.33333333%}.ie .input-with-btn_input{margin-right:-.26em}.lt-ie8 .input-with-btn_input{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.input-with-btn_input input{box-sizing:border-box;width:100%}.input-with-btn_btn{margin-bottom:.9375em}@media only all and (min-width:30em){.input-with-btn_btn{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .input-with-btn_btn{margin-right:-.26em}.lt-ie8 .input-with-btn_btn{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only all and (min-width:60em){.input-with-btn_btn{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:16.66666667%}.ie .input-with-btn_btn{margin-right:-.26em}.lt-ie8 .input-with-btn_btn{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.input-with-btn_btn .btn{box-sizing:border-box;width:100%}.input-with-btn_btn .btn__super{padding-left:.83333333em;padding-right:.83333333em}.btn-inside-input{position:relative}.btn-inside-input input[type=email],.btn-inside-input input[type=number],.btn-inside-input input[type=search],.btn-inside-input input[type=tel],.btn-inside-input input[type=text],.btn-inside-input input[type=url]{box-sizing:border-box;width:100%;padding-right:5.41666667em}.btn-inside-input input[type=email].input__super,.btn-inside-input input[type=number].input__super,.btn-inside-input input[type=search].input__super,.btn-inside-input input[type=tel].input__super,.btn-inside-input input[type=text].input__super,.btn-inside-input input[type=url].input__super{padding-right:5em}.btn-inside-input .btn{border-bottom-width:0!important;position:absolute;right:1.25em;top:0}.btn-inside-input .btn__super{right:.83333333em}.expandable{margin-bottom:1.875em}.expandable_target{padding:0;border:0;background-color:transparent;cursor:pointer}.expandable_target:focus{outline:#101820 dotted 1px;outline-offset:1px}.expandable_content:after{content:"";display:table;clear:both}.lt-ie8 .expandable_content{zoom:1}.expandable_label{color:#101820;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .expandable_label{font-weight:400!important}.expandable_link{color:#0072ce;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:.75em;line-height:1.83333333}.expandable_link em,.expandable_link i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .expandable_link em,.lt-ie9 .expandable_link i{font-style:normal!important}.expandable_link b,.expandable_link strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .expandable_link b,.lt-ie9 .expandable_link strong{font-weight:400!important}.expandable_cue-close__animated,.expandable_cue-open__animated{transition:.25s transform}.expandable_cue-close__animated{transform:rotate(180deg)}.expandable__expanded .expandable_cue-close__animated{transform:rotate(0)}.expandable__expanded .expandable_cue-open__animated{transform:rotate(-180deg)}.expandable_header{display:block}.expandable_header:after{content:"";display:table;clear:both}.lt-ie8 .expandable_header{zoom:1}button.expandable_header{width:100%;text-align:left}.expandable_header__spaced{padding-bottom:.9375em}.expandable_header-left{float:left}.expandable_header-right{float:right}.expandable__padded{margin-bottom:1.875em;background:#f1f2f2}.expandable__padded.expandable__expanded,.expandable__padded:hover{background:#e3e4e5}.expandable__padded .expandable_header{padding:.625em 1em}.expandable__padded .expandable_content{margin:0 1em 1.375em}.expandable__padded .expandable_content:before{content:'';display:block;height:1px;margin-bottom:1em;background:#babbbd}.expandable-group{margin-bottom:1.875em}.expandable-group_header{padding:.35714286em 1.14285714em;border-bottom:1px solid #919395;background:#f1f2f2;color:#75787b;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;font-size:.875em;line-height:1.57142857;margin-bottom:0}.lt-ie9 .expandable-group_header{font-weight:400!important}.expandable-group .expandable{border-bottom:1px solid #919395;margin-bottom:0;background:#fff}.expandable-group .expandable_label{margin-top:0;font-size:1.125em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;line-height:1.22222222;margin-bottom:0}.lt-ie9 .expandable-group .expandable_label{font-weight:400!important}.expandable-group .expandable_content{margin-bottom:0}pre{padding:1.375em 1em;white-space:pre;white-space:pre-wrap;word-wrap:break-word}code,kbd,pre,samp{font-family:monospace,sans-serif;margin-bottom:1.375em}embed,img,object,video{max-width:100%}img{border:0;-ms-interpolation-mode:bicubic}::-moz-selection{background:#43484e;color:#FFF}::selection{background:#43484e;color:#FFF}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin:0 auto}.mobile-warning{display:block;background-color:#f6d9d3;padding:.85em;margin:.5em 0;font-size:.75em}svg:not(:root){overflow:hidden}.hidden{display:none!important;visibility:hidden}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visually-hidden .visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.cf:after,.cf:before{content:"";display:table}.cf:after{clear:both}.cf{zoom:1}.ir{background-color:transparent;border:0;overflow:hidden}.ir before{content:"";display:block;width:0;height:150%}body,html{margin:0;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.375;color:#101820;font-smoothing:antialiased;text-rendering:optimizeLegibility;word-wrap:break-word;overflow-wrap:break-word}body em,body i,html em,html i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 body em,.lt-ie9 body i,.lt-ie9 html em,.lt-ie9 html i{font-style:normal!important}body b,body strong,html b,html strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 body b,.lt-ie9 body strong,.lt-ie9 html b,.lt-ie9 html strong{font-weight:400!important}.warning-banner{box-sizing:border-box;background-color:#e3e4e5;color:#919395;padding:4px 0}.warning-banner p{text-align:center;font-size:12px}.wrap{max-width:1170px;padding:0 15px;margin:0 auto;position:relative;clear:both}.sidebar-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .sidebar-content{margin-right:-.26em}.lt-ie8 .sidebar-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .main-content{margin-right:-.26em}.lt-ie8 .main-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}@media only screen and (min-width:37.5em){.sidebar-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%;padding-bottom:2em;padding-top:2em}.ie .sidebar-content{margin-right:-.26em}.lt-ie8 .sidebar-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-content{padding-bottom:2em;padding-top:2em}.main-content__two-column{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:75%}.ie .main-content__two-column{margin-right:-.26em}.lt-ie8 .main-content__two-column{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.header{border-bottom:4px solid #2cb34a;box-sizing:border-box;padding-top:4px;width:100%}.header .site-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%;text-align:center}.ie .header .site-title{margin-right:-.26em}.lt-ie8 .header .site-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-title h1{font-size:1.5em}.header .site-title .title-link{color:#919395}.header .site-title .title-link .site-org{color:#75787b;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .header .site-title .title-link .site-org{font-weight:400!important}.header .site-title .title-link:visited{color:#919395}.header .site-logo{display:none}.header .site-logo img{margin-right:20px}@media only screen and (min-width:37.5em){.header{padding:15px}.header .site-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:66.66666667%;text-align:left;border-width:0}.ie .header .site-title{margin-right:-.26em}.lt-ie8 .header .site-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-title h1{font-size:24px;line-height:44px;margin:0}.header .site-logo{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:33.33333333%;text-align:right;border-width:0}.ie .header .site-logo{margin-right:-.26em}.lt-ie8 .header .site-logo{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-logo .logo{display:inline;width:170px}}.main-content .lead-in{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:1.125em}.main-content .lead-in em,.main-content .lead-in i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .main-content .lead-in em,.lt-ie9 .main-content .lead-in i{font-style:normal!important}.main-content .lead-in b,.main-content .lead-in strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .main-content .lead-in b,.lt-ie9 .main-content .lead-in strong{font-weight:400!important}.main-content hr{display:block;height:1px;border:0;border-top:1px solid #e3e4e5;margin:1.25em 0;padding:0}.main-content img+hr{margin:1em 0 1.25em}.main-content ul.toc{list-style:none;border-bottom:1px solid #cce3f5;padding:0 0 1.25em;margin:0 0 1.875em}.main-content ul.toc:after,.main-content ul.toc:before{content:" ";display:table}.main-content ul.toc:after{clear:both}.main-content .toc li{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;font-size:1.125em;display:block;float:left;position:relative}.lt-ie9 .main-content .toc li{font-weight:400!important}.main-content .toc li a{text-decoration:none;border-bottom:none;padding:0 1em 0 0}.main-content .toc li a:visited{color:#0072ce}.main-content .toc li a:hover{border-bottom:none;color:#7fb8e6}.main-content ol,.main-content ul{padding-left:1.5em}.main-content ul{list-style-type:square}.main-content li ol,.main-content li ul{margin:0 1.375em}.main-content dt{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .main-content dt{font-weight:400!important}.footer{padding:2em 0;border-top:2px solid #babbbd;background:#f1f2f2;width:100%}.footer h4{margin-top:0;font-size:16px;line-height:1.5em;text-transform:uppercase}.footer p{max-width:45em;font-size:.875em;line-height:1.42857142857143}.footer a,.footer a:link,.footer a:visited{border-bottom:1px dotted}.footer a:hover{border-bottom:1px dotted #0072ce}.footer .footer-links ul{list-style:none;padding-left:0;margin-top:0}@media only screen and (min-width:37.5em){.footer p{margin:.75em 0}.footer .footer-links ul,.footer li{margin-left:0}}@media only screen and (min-width:50em){.footer-links{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .footer-links{margin-right:-.26em}.lt-ie8 .footer-links{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.footer-oss{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:41.66666667%}.ie .footer-oss{margin-right:-.26em}.lt-ie8 .footer-oss{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.footer-standards{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:33.33333333%}.ie .footer-standards{margin-right:-.26em}.lt-ie8 .footer-standards{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only screen and (min-width:20em){.main-nav{margin:0 0 .5em;padding:0;text-align:center}.main-nav li{display:inline-block;margin:0 1em .5em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:1.125em;list-style:none}.lt-ie9 .main-nav li{font-weight:400!important}.main-nav a{display:block;padding:.125em 0;border-bottom:4px solid #fff}.main-nav a:link,.main-nav a:visited{color:#75787b}.main-nav a:focus,.main-nav a:hover{border-bottom:4px solid #dbedd4;color:#43484e}.main-nav a:active,.main-nav-active a:active,.main-nav-active a:focus,.main-nav-active a:hover,.main-nav-active a:link,.main-nav-active a:visited{border-bottom:4px solid #addc91;color:#101820}}@media only screen and (min-width:37.5em){.main-nav{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%;margin-bottom:0;text-align:left}.ie .main-nav{margin-right:-.26em}.lt-ie8 .main-nav{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-nav li{margin-right:0;margin-bottom:0;margin-left:2em}.main-nav li:first-child{margin-left:0}.main-nav a{padding-top:0;padding-bottom:1em;border-bottom:none}.main-nav a:active,.main-nav a:hover,.main-nav-active a:active,.main-nav-active a:focus,.main-nav-active a:hover,.main-nav-active a:link,.main-nav-active a:visited{margin-bottom:-4px}}@media only screen and (min-width:48em){.main-nav li{font-size:1.125em}}.secondary-nav a{display:block;padding:10px}.secondary-nav a,.secondary-nav a:link,.secondary-nav a:visited{border-bottom:none;color:#101820}.secondary-nav .secondary-nav-active>a,.secondary-nav a:focus,.secondary-nav a:hover{border-left:4px solid #2cb34a;margin-left:-4px;color:#101820}.secondary-nav a:active{background-color:#f8f8f8;color:#101820}.secondary-nav ul{margin:0;padding:0}.secondary-nav li{list-style:none;border-bottom:1px solid #babbbd;font-size:1.125em;padding-left:4px}.secondary-nav li:last-child{border-bottom:none}select{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}select em,select i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 select em,.lt-ie9 select i{font-style:normal!important}select b,select strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 select b,.lt-ie9 select strong{font-weight:400!important}.map-wrapper{margin:0 auto;position:relative;clear:both;max-width:100%;padding:0}.map-aside,.map-aside-header,.map-header,.map-main{border-width:0;box-sizing:border-box}.map-aside-header,.map-header{background-color:#f1f2f2}.map-header{height:34px;line-height:26px;padding:4px 8px}.map-header__lock-msa{font-size:.875em}.map-aside-header{height:34px}.map-divider{border-bottom:1px solid #babbbd;padding:10px}.map-divider h6{line-height:1.375}.map-divider select{width:90%;margin-top:8px;margin-bottom:8px;margin-left:3px}.map-divider .selector-label{padding:5px}.map-divider .tab-title{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;color:#919395;margin:0}.lt-ie9 .map-divider .tab-title{font-weight:400!important}.map-divider .tab-main{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;color:#101820;text-transform:none;font-size:.875em;letter-spacing:0}.lt-ie9 .map-divider .tab-main{font-weight:400!important}.map-divider .item-main{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;font-size:.75em;margin:0;color:#101820;letter-spacing:0}.lt-ie9 .map-divider .item-main{font-weight:400!important}.map-divider .item-sub{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin:0 0 .1em;text-transform:none;font-size:.75em;color:#919395;letter-spacing:0}.map-divider .item-sub em,.map-divider .item-sub i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .map-divider .item-sub em,.lt-ie9 .map-divider .item-sub i{font-style:normal!important}.map-divider .item-sub b,.map-divider .item-sub strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-divider .item-sub b,.lt-ie9 .map-divider .item-sub strong{font-weight:400!important}.map-divider .inst-id{color:#101820;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-divider .inst-id{font-weight:400!important}.map-divider-minor{border-bottom:1px solid #babbbd;padding-left:10px;padding-top:5px;padding-bottom:5px;cursor:pointer;position:relative}.map-divider-minor .sub-header-name{margin-left:20px;display:inline-block;text-transform:none;color:#75787b;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:0}.lt-ie9 .map-divider-minor .sub-header-name{font-weight:400!important}.map-divider-minor i.cf-icon-right{font-size:.75em;position:absolute;right:10px;top:13px}.map-divider-minor h6{line-height:1.375;margin-top:5px;margin-bottom:5px}.map-divider-minor.option:hover{background:#e3e4e5}.map-divider-minor.option.active-layer{background:#dbedd4}.map-divider-minor.option.active-layer .sub-header-name{color:#101820}.map-divider-minor.option.active-layer:hover{background:#addc91}.chart-toggle h6{text-transform:none;letter-spacing:0}#layerOptions .option i{color:#babbbd}#layerOptions .option.active-layer i{color:#43484e}.header-group{padding-bottom:10px}.lighter{background-color:#f8f8f8}.darker{background-color:#f1f2f2}.darker-still{background-color:#e3e4e5}.green-highlight{background-color:#dbedd4}.green-highlight .sub-header-name{color:#101820}.divided{border-bottom:1px solid #babbbd}.symbol-key-img{height:10px}.bubbletooltip_tip{padding:10px;color:#fff;width:200px;font-size:.85em;background-color:#43484e;position:relative}.bubbletooltip_tip a{color:#fff;border-bottom:1px dotted #e3e4e5}.bubbletooltip_tip a:hover,.bubbletooltip_tip a:visited{color:#fff}.bubbletooltip_tip:before{content:'';position:absolute;border:10px solid transparent;border-left-color:#000;top:20px;left:-10;z-index:-1}.red-highlight i{color:#d12124}@media only screen and (min-width:37.5em){.map-aside,.map-aside-header{float:left;width:260px;border-right:2px solid #babbbd;box-sizing:border-box}.map-header,.map-main{overflow:hidden;border-width:0;box-sizing:border-box}.map-aside-header,.map-header{border-bottom:1px solid #babbbd}.map-header__wrapper{display:block;position:relative;margin-left:-15px;margin-right:-15px}.map-header__map-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .map-header__map-title{margin-right:-.26em}.lt-ie8 .map-header__map-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.minority-key{width:100%;padding:5px;background-color:#fff;border:1px solid #101820}.minority-label{width:65px;border-width:0;display:inline-block}.css-legend-chart{width:85px;display:inline-block;height:8px;margin:0;padding:0;background-color:#f4f4ec;border:1px solid #babbbd}.pct-minority-chart{width:83px;height:6px;padding:0;background-color:#f4f4ec}.pct-minority-value{display:inline-block;border-width:0}.pct-minority-value::after{content:"%"}.tract-population{float:right}.leaflet-rrose-content{margin-top:8px;margin-right:10px}.bubble-header{border-bottom:1px solid #e3e4e5;color:#919395;font-weight:700}.bubble-label{margin-top:3px}.circle-hover-label{font-size:.8em;text-transform:uppercase;font-weight:700;color:#babbbd;display:block}.circle-hover-data{font-size:1.25em;font-weight:700;color:#101820;display:block}.hh-count{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:66.66666667%;border-width:0;text-align:right}.ie .hh-count{margin-right:-.26em}.lt-ie8 .hh-count{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.lar-count{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:33.33333333%;border-width:0;text-align:left}.ie .lar-count{margin-right:-.26em}.lt-ie8 .lar-count{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.map-aside{background-color:#f8f8f8}.map-aside h3{font-size:.875em;text-transform:uppercase;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-aside h3{font-weight:400!important}.map-aside h4{font-size:.75em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .map-aside h4{font-weight:400!important}.map-aside dd,.map-aside dt,.map-aside p{font-size:.75em}.map-aside dt{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .map-aside dt{font-weight:400!important}.map-aside dd{margin-left:12px;margin-bottom:4px}.map-aside .btn{font-size:.875em;margin-top:15px}.map-aside__download,.map-aside__export,.map-aside__lender-details,.map-aside__msa-details,.map-aside__msa-search{background-color:#f1f2f2;border-bottom:1px solid #babbbd}.map-aside__msa-search label{font-size:12px;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;margin-bottom:8px}.lt-ie9 .map-aside__msa-search label{font-weight:400!important}.map-aside__msa-search input[type=text]{font-size:14px;width:200px;box-sizing:border-box;border:1px solid #babbbd;margin-bottom:1px}.map-aside__msa-search .btn{margin-top:8px;font-size:12px}.map-aside__msa-search .btn__disabled{border:1px solid #babbbd}.map-aside__msa-search .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f1f2f2;box-sizing:border-box;width:200px}.map-aside__msa-search .tt-suggestion p{font-size:14px;margin-bottom:8px}.map-aside__msa-search .tt-suggestion.tt-cursor{color:#fff;background-color:#0072ce}.map-aside__notes{padding:10px}#map .hover-box{position:absolute;bottom:85px;left:50px;z-index:1002;background-color:#fff;padding:8px;border:1px solid #ccc}.key-contents{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;width:230px;border:1px solid #000;border-bottom:none;background:#fff;padding:5px}.key-contents em,.key-contents i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .key-contents em,.lt-ie9 .key-contents i{font-style:normal!important}.key-contents b,.key-contents strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .key-contents b,.lt-ie9 .key-contents strong{font-weight:400!important}.key-contents label{font-size:larger;font-weight:700}.action-taken-label{color:#919395;font-weight:700}#altScaleImg{width:220px}.tooltip-li{margin-left:10px}#minority-key{width:100%;margin-top:5px;background:-moz-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(107,40,10,.5)),color-stop(50%,rgba(250,186,106,.5)),color-stop(51%,rgba(124,198,186,.5)),color-stop(100%,rgba(12,48,97,.5)));background:-webkit-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-o-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-ms-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:linear-gradient(to right,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#806b280a', endColorstr='#800c3061', GradientType=1)}.circle-key{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:100%;border-width:0}.ie .circle-key{margin-right:-.26em}.lt-ie8 .circle-key{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.circle-key-label{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:100%;border-width:0;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;line-height:normal}.ie .circle-key-label{margin-right:-.26em}.lt-ie8 .circle-key-label{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.lt-ie9 .circle-key-label{font-weight:400!important}#percentage-container .left{display:inline-block;width:25%}#percentage-container .center{display:inline-block;width:50%;text-align:center}#percentage-container .right{display:inline-block;width:25%;text-align:right}#key{width:230px;background-color:#fff}.show-hide-control{text-align:right;cursor:pointer;color:#0072ce;background-color:#e3e4e5;border:1px solid #101820;border-bottom:none;padding:5px}.vex-dialog-message h2{font-weight:700;font-size:larger}.tabs ul{list-style-type:none;margin:0;padding:0}.tabs ul:after,.tabs ul:before{content:" ";display:table}.tabs ul:after{clear:both}.tabs ul li{float:left;margin:0;padding:0}.tabs ul li a{color:#75787b;font-size:18px;line-height:25px;cursor:pointer;text-decoration:none;padding:4px 16px;border-bottom:1px solid #babbbd;border-right:1px solid #babbbd;background-color:#f1f2f2;position:relative;display:block;top:0}.tabs ul li a.active{background-color:#d0d0ce;color:#75787b}.tabs ul li a.active:hover,.tabs ul li a:hover{background-color:#e3e4e5}.tabs ul li a:focus,.tabs ul li a:hover{border-bottom:1px solid #babbbd}.tabpanel{min-height:2em}.tabpanel:after,.tabpanel:before{content:" ";display:table}.tabpanel:after{clear:both}.cf-icon-analysis-themes{background-image:url(/static/basestyle/img/icon_analysis-layers.png);background-size:16px;background-repeat:no-repeat;background-position:center;width:16px}@media print{.no-print,.no-print *{display:none!important}#key{padding:5px;border:1px solid #101820}}.sort-none{background-image:url(../img/font-awesome/chevron-sort-none.png);background-repeat:no-repeat;background-position:center right}.sort-down{background-image:url(../img/font-awesome/chevron-sort-down.png);background-repeat:no-repeat;background-position:center right}.sort-up{background-image:url(../img/font-awesome/chevron-sort-up.png);background-repeat:no-repeat;background-position:center right}.search-home{margin-bottom:320px}.search-home .search-indent{padding-left:20px}.search-home .search-title-column1{float:left}.search-home .search-title-column2{float:left;padding-left:5px}.search-home .search-field label{display:inline-block}.search-home .search-field input[disabled]{color:#e3e4e5}.search-home .search-field input[type=text]{width:24em;padding:.25em .5em}.search-home .search-field .example-hint,.search-home .search-field .search-name-label{display:block;font-size:small}.search-home .search-field .example-hint{color:#babbbd;font-style:italic;margin-top:6px}.search-home .search-field .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f8f8f8;width:24em}.search-home .search-field .tt-suggestion p{margin-bottom:8px}.search-results-form{background-color:#f1f2f2;padding:8px 16px;white-space:nowrap;text-align:center}.search-results-form .search-results-form__label{height:28px;padding:4px 0;box-sizing:border-box;display:inline-block;text-align:right;position:absolute!important;clip:rect(1px,1px,1px,1px)}.search-results-form label{display:inline}.search-results-form input[disabled]{color:#e3e4e5}.search-results-form .search-results-form__text-input{min-width:20em;padding:4px 8px;border:1px solid #75787b;margin-top:0;box-sizing:border-box}.search-results-form .btn{padding:7px 12px;margin-left:-4px;background-color:#75787b}.search-results-form .example-hint,.search-results-form .search-name-label{display:block;font-size:small}.search-results-form .example-hint{color:#babbbd;font-style:italic;margin-top:6px}.search-results-form .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f8f8f8;width:24em}.search-results-form .tt-suggestion p{margin-bottom:8px}.search-results .search-results-heading .search-results-heading__title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__title{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__start-over{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__start-over{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__start-over{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__second-row{padding:0 12px}.search-results .search-results-heading .search-results-heading__pagination{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__pagination{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__pagination{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__pagination .disabled{color:#babbbd}.search-results .search-results-heading .search-results-heading__pagination .divider{padding:0 4px}.search-results .search-results-heading .search-results-heading__pagination a,.search-results .search-results-heading .search-results-heading__pagination a:visited{color:#0072ce}.search-results .search-results-heading .search-results-heading__sort-assets,.search-results .search-results-heading .search-results-heading__sort-lar{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__sort-assets,.ie .search-results .search-results-heading .search-results-heading__sort-lar{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-assets,.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-lar{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-assets a,.search-results .search-results-heading .search-results-heading__sort-lar a{display:inline-block;padding-right:20px;height:24px;vertical-align:middle}.search-results .search-result-record{margin:8px 0}.search-results .search-result-record:hover{background-color:#f1f2f2}.search-results .search-result-record .expandable{margin-bottom:0}.search-results .search-result-record .expandable_content,.search-results .search-result-record .expandable_header{padding:12px}.search-results .search-result-record .expandable__expanded .expandable_header{background-color:#f1f2f2}.search-results .search-result-record .expandable_content{background-color:#f8f8f8}.search-results .search-result-record h4{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;color:#0072ce;font-size:22px;margin-bottom:4px;z-index:100}.search-results .search-result-record h4 em,.search-results .search-result-record h4 i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .search-results .search-result-record h4 em,.lt-ie9 .search-results .search-result-record h4 i{font-style:normal!important}.search-results .search-result-record h4 b,.search-results .search-result-record h4 strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .search-results .search-result-record h4 b,.lt-ie9 .search-results .search-result-record h4 strong{font-weight:400!important}.search-results .search-result-record h4 a,.search-results .search-result-record h4 a:visited{color:#0072ce;border-bottom:1px dotted #0072ce}.search-results .search-result-record .search-result-record__cfpb-id{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:18px;display:inline-block;margin-right:2em}.lt-ie9 .search-results .search-result-record .search-result-record__cfpb-id{font-weight:400!important}.search-results .search-result-record .search-result-record__hq{color:#75787b;font-size:18px;display:inline-block}.search-results .search-result-record .search-result-record__hq small{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:12px}.lt-ie9 .search-results .search-result-record .search-result-record__hq small{font-weight:400!important}.search-results .search-result-record .search-result-record__link{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:14px;border-bottom:none}.lt-ie9 .search-results .search-result-record .search-result-record__link{font-weight:400!important}.search-results .search-result-record .search-result-record__link:visited{color:#0072ce}.search-results .search-result-record dl{margin-left:0}.search-results .search-result-record dt{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:12px;color:#75787b;text-transform:uppercase;margin-bottom:4px}.search-results .search-result-record dt em,.search-results .search-result-record dt i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .search-results .search-result-record dt em,.lt-ie9 .search-results .search-result-record dt i{font-style:normal!important}.search-results .search-result-record dt b,.search-results .search-result-record dt strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .search-results .search-result-record dt b,.lt-ie9 .search-results .search-result-record dt strong{font-weight:400!important}.search-results .search-result-record .assets-definition-term,.search-results .search-result-record .year-definition-term{position:absolute!important;clip:rect(1px,1px,1px,1px)}.search-results .search-result-record dd{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:18px}.lt-ie9 .search-results .search-result-record dd{font-weight:400!important}.search-results .search-result-record table th{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;text-align:right;padding-right:8px}.lt-ie9 .search-results .search-result-record table th{font-weight:400!important}.search-results .search-result-record .search-result-record__left-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__left-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__left-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__center-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__center-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__right-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__right-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__right-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-left{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__ec-left{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-left{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__ec-right{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-right{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .pagination{margin-bottom:2em}.circlelabel{width:30px;height:30px;border-radius:30px;display:inline-block;font-size:13px;color:#fff;line-height:30px;text-align:center;background:#43484e}@media only screen and (min-width:37.5em){.search-home{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:66.66666667%;position:relative;left:16.66666667%}.ie .search-home{margin-right:-.26em}.lt-ie8 .search-home{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:83.33333333%}.ie .search-results .search-results-heading .search-results-heading__title{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__num-results-control{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:16.66666667%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__num-results-control{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__num-results-control{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__pagination{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:50%}.ie .search-results .search-results-heading .search-results-heading__pagination{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__pagination{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-assets{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__sort-assets{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-assets{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-lar{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__sort-lar{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-lar{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__left-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:50%}.ie .search-results .search-result-record .search-result-record__left-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__left-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-result-record .search-result-record__center-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__center-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col dl{float:right}.search-results .search-result-record .search-result-record__center-col dd{margin-right:0}.search-results .search-result-record .search-result-record__right-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-result-record .search-result-record__right-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__right-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__right-col dl{float:right}.search-results .search-result-record .search-result-record__right-col dd{margin-right:0}.search-results .search-result-record .search-result-record__ec-left{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:75%}.ie .search-results .search-result-record .search-result-record__ec-left{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-left{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .search-results .search-result-record .search-result-record__ec-right{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-right{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right .btn{width:80%;text-align:center}}.show-data .leaflet-control-minimap{display:none}.chart-toggle{cursor:pointer}.chart-toggle:hover{background:#e3e4e5}.chart-toggle.active-layer{background:#dbedd4}.chart-toggle.active-layer:hover{background:#addc91}#map-aside{overflow:scroll}#data-container{border-top:3px solid #777;overflow-y:auto;position:relative;display:none}#table-container{display:none}#table-container td,#table-container th{padding:.75em .3em}.summary-data-table{margin-bottom:0;width:100%;border-collapse:collapse}.summary-data-table thead{border-bottom:1px solid #bababa}.summary-data-table thead th{color:#75787b;background:#f8f8f8}.summary-data-table thead th .color-coded{position:relative;padding-left:1em}.summary-data-table thead th .color-coded:before{content:'\2022';line-height:1;position:absolute;left:0;font-size:1.5em;top:-2px}.summary-data-table thead th.lar.lma_ct .color-coded:before,.summary-data-table thead th.lar.lma_pct .color-coded:before,.summary-data-table thead th.lma_ratio .color-coded:before{color:#eae9e5}.summary-data-table thead th.lar.mma_ct .color-coded:before,.summary-data-table thead th.lar.mma_pct .color-coded:before,.summary-data-table thead th.mma_ratio .color-coded:before{color:#a7c4b6}.summary-data-table thead th.hma_ratio .color-coded:before,.summary-data-table thead th.lar.hma_ct .color-coded:before,.summary-data-table thead th.lar.hma_pct .color-coded:before{color:#5c9796}.summary-data-table thead th .arrows,.summary-data-table thead th .sortable-content{float:left}.summary-data-table thead th .arrows{position:relative;margin-left:4px}.summary-data-table thead th .cf-icon-down,.summary-data-table thead th .cf-icon-up{font-size:.75em}.summary-data-table thead th .cf-icon-up{position:absolute;left:0;top:0}.summary-data-table thead th .cf-icon-down{position:absolute;left:0;top:7px}.summary-data-table thead th.tablesorter-headerAsc .cf-icon-down,.summary-data-table thead th.tablesorter-headerDesc .cf-icon-up{color:#e3e4e5}.summary-data-table .tablesorter-headerRow{border-bottom:1px solid #ddd}.summary-data-table .sortable-header th{text-transform:uppercase;cursor:pointer}.summary-data-table .header-one th{padding-bottom:.5em;font-size:1em}.summary-data-table .header-two th{padding-top:.4em;font-size:.8125em}.summary-data-table td,.summary-data-table th{border-right:1px solid #ddd}.summary-data-table .expander,.summary-data-table td.chart-title,.summary-data-table td.name,.summary-data-table th.name{border-right-width:0}.summary-data-table .header-one th.number,.summary-data-table .header-one th.percentage,.summary-data-table .header-one th.title,.summary-data-table .header-two th.name,.summary-data-table .hma_ct,.summary-data-table .hma_pct,.summary-data-table td.chart,.summary-data-table th.name-span{border-color:#bababa}.summary-data-table .chart-title,.summary-data-table .lar{min-width:50px}.summary-data-table .lar,.summary-data-table th.lar{font-size:.9em}.summary-data-table .odds_ratio{min-width:45px}.summary-data-table .chart{width:100px}.summary-data-table .chart .bar{width:90px;height:16px;display:inline-block}.lt-ie8 .summary-data-table .chart .bar{display:inline}.summary-data-table .chart .bar .segment{height:16px;float:left}.summary-data-table .chart .bar .segment.lma{background-color:#eae9e5}.summary-data-table .chart .bar .segment.mma{background-color:#a7c4b6}.summary-data-table .chart .bar .segment.hma{background-color:#5c9796}.summary-data-table .chart .bar.peer,.summary-data-table .chart .bar.peer .segment{height:8px}.summary-data-table tbody tr.msa-row{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .summary-data-table tbody tr.msa-row{font-weight:400!important}.summary-data-table tbody tr.peer-row{color:#75787b;border-bottom:1px solid #bababa}.summary-data-table tbody tr.peer-row td{padding-top:0;padding-bottom:.5em}.summary-data-table tbody tr.county-row .lar,.summary-data-table tbody tr.county-row .lar_pct{font-size:14px}.summary-data-table tbody tr td{vertical-align:top}.summary-data-table tbody tr td.chart{vertical-align:middle}.summary-data-table tbody tr td.lar,.summary-data-table tbody tr td.lar_pct,.summary-data-table tbody tr td.odds_ratio{text-align:right}.summary-data-table tbody tr td.odds-warning{background-color:#e8a091}.summary-data-table tbody tr td.odds-caution{background-color:#f6d9d3}.summary-data-table.peer-table .target-row td{padding-top:.5em;padding-bottom:0}.summary-data-table.peer-table .target-row-identifier{display:none}.summary-data-table.basic-table .target-row td{border-bottom:1px solid #bababa}.center-header{text-align:center}#closeTable{float:right;padding-right:3px;padding-top:3px;color:#0072ce}#tableLoadImage{margin:auto;padding:5px}.odds .tooltipsy{font-size:.85em}#plot-container div{font:10px sans-serif;background-color:#4682b4;text-align:right;padding:3px;margin:1px;color:#fff}.bar-min{fill:red}.bar-lar:hover,.bar-min:hover{fill:brown}.axis{font:10px sans-serif}.axis line,.axis path{fill:none;stroke:#000;shape-rendering:crispEdges}.x.axis path{display:none} \ No newline at end of file +@import url(//fast.fonts.net/t/1.css?apiType=css&projectid=44e8c964-4684-44c6-a6e3-3f3da8787b50);.no-js .u-js-only{display:none!important}.u-clearfix:after{content:"";display:table;clear:both}.lt-ie8 .u-clearfix{zoom:1}.u-visually-hidden{position:absolute;overflow:hidden;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;border:0}.u-inline-block{display:inline-block}.lt-ie8 .u-inline-block{display:inline}.u-right{float:right}.u-break-word{word-break:break-all}.u-flexible-container{position:relative;padding-bottom:56.25%;height:0}.u-flexible-container_inner{position:absolute;top:0;left:0;width:100%;height:100%}.u-flexible-container__4-3{position:relative;padding-bottom:75%;height:0}@font-face{font-family:AvenirNextLTW01-Regular;src:url(//fast.fonts.net/dv2/2/e9167238-3b3f-4813-a04a-a384394eed42.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:400}@font-face{font-family:AvenirNextLTW01-Regular;src:url(//fast.fonts.net/dv2/2/e9167238-3b3f-4813-a04a-a384394eed42.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/1e9892c0-6927-4412-9874-1b82801ba47a.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/46cf1067-688d-4aab-b0f7-bd942af6efd8.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/52a192b1-bea5-4b48-879f-107f009b666f.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#52a192b1-bea5-4b48-879f-107f009b666f) format("svg");font-style:normal;font-weight:400}@font-face{font-family:AvenirNextLTW01-Italic;src:url(//fast.fonts.net/dv2/2/d1fddef1-d940-4904-8f6c-17e809462301.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:italic;font-weight:400}@font-face{font-family:AvenirNextLTW01-Italic;src:url(//fast.fonts.net/dv2/2/d1fddef1-d940-4904-8f6c-17e809462301.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/92b66dbd-4201-4ac2-a605-4d4ffc8705cc.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/18839597-afa8-4f0b-9abb-4a30262d0da8.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/1de7e6f4-9d4d-47e7-ab23-7d5cf10ab585.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#1de7e6f4-9d4d-47e7-ab23-7d5cf10ab585) format("svg");font-style:italic;font-weight:400}@font-face{font-family:AvenirNextLTW01-Medium;src:url(//fast.fonts.net/dv2/2/1a7c9181-cd24-4943-a9d9-d033189524e0.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:500}@font-face{font-family:AvenirNextLTW01-Medium;src:url(//fast.fonts.net/dv2/2/1a7c9181-cd24-4943-a9d9-d033189524e0.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/f26faddb-86cc-4477-a253-1e1287684336.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/63a74598-733c-4d0c-bd91-b01bffcd6e69.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/a89d6ad1-a04f-4a8f-b140-e55478dbea80.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#a89d6ad1-a04f-4a8f-b140-e55478dbea80) format("svg");font-style:normal;font-weight:500}@font-face{font-family:AvenirNextLTW01-Demi;src:url(//fast.fonts.net/dv2/2/12d643f2-3899-49d5-a85b-ff430f5fad15.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("eot");font-style:normal;font-weight:700}@font-face{font-family:AvenirNextLTW01-Demi;src:url(//fast.fonts.net/dv2/2/12d643f2-3899-49d5-a85b-ff430f5fad15.eot?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50);src:url(//fast.fonts.net/dv2/3/91b50bbb-9aa1-4d54-9159-ec6f19d14a7c.woff?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("woff"),url(//fast.fonts.net/dv2/1/a0f4c2f9-8a42-4786-ad00-fce42b57b148.ttf?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50) format("truetype"),url(//fast.fonts.net/dv2/11/99affa9a-a5e9-4559-bd07-20cf0071852d.svg?d44f19a684109620e4841679af90e818b934c450213fb296d217dd76fbd8133e8104ffce1b8d7381e92baf075aac747ded01b441045f936c159eb0f46c11e1f99e958a3e0d6904164b21814766132f7cb38b46df85fb387875d6907338f619856e049c29c288424547a2ca329b1d0251faf8c505bae9c3ec3d5a1e4327f5fdf46ffb088d97582c65a45857e1e0662c2d545166a03c7b024ca17ac3839d703086c5f9fd694b6f5493360c3bcd9d5d427b599ea7651d27005ca2f4c1d0312515f51a323f79b7f5cf1afa2ab67a3ddbfee1&projectId=44e8c964-4684-44c6-a6e3-3f3da8787b50#99affa9a-a5e9-4559-bd07-20cf0071852d) format("svg");font-style:normal;font-weight:700}body{font-size:100%}.h1,.h2,.h3,h1,h2,h3{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}.h1 em,.h1 i,.h2 em,.h2 i,.h3 em,.h3 i,h1 em,h1 i,h2 em,h2 i,h3 em,h3 i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .h1 em,.lt-ie9 .h1 i,.lt-ie9 .h2 em,.lt-ie9 .h2 i,.lt-ie9 .h3 em,.lt-ie9 .h3 i,.lt-ie9 h1 em,.lt-ie9 h1 i,.lt-ie9 h2 em,.lt-ie9 h2 i,.lt-ie9 h3 em,.lt-ie9 h3 i{font-style:normal!important}.h1 b,.h1 strong,.h2 b,.h2 strong,.h3 b,.h3 strong,h1 b,h1 strong,h2 b,h2 strong,h3 b,h3 strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .h1 b,.lt-ie9 .h1 strong,.lt-ie9 .h2 b,.lt-ie9 .h2 strong,.lt-ie9 .h3 b,.lt-ie9 .h3 strong,.lt-ie9 h1 b,.lt-ie9 h1 strong,.lt-ie9 h2 b,.lt-ie9 h2 strong,.lt-ie9 h3 b,.lt-ie9 h3 strong{font-weight:400!important}.h1,h1{margin-top:0;margin-bottom:.47058824em;font-size:2.125em;line-height:1.29411765}.h2,h2{margin-top:0;margin-bottom:.30769231em;font-size:1.625em;line-height:1.26923077}.h3,h3{margin-top:0;margin-bottom:.22727273em;font-size:1.375em;line-height:1.27272727}.h4,h4{margin-top:0;margin-bottom:.27777778em;font-size:1.125em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;line-height:1.22222222}.lt-ie9 .h4,.lt-ie9 h4{font-weight:400!important}.h5,.h6,h5,h6{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase}.lt-ie9 .h5,.lt-ie9 .h6,.lt-ie9 h5,.lt-ie9 h6{font-weight:400!important}.h5,h5{margin-top:0;margin-bottom:.35714286em;font-size:.875em;line-height:1.57142857}.h6,h6{margin-top:0;margin-bottom:.41666667em;font-size:.75em;line-height:1.83333333}.superheader{margin-bottom:.1875em;font-size:3em;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;line-height:1.375}.lt-ie9 .superheader{font-weight:400!important}dl,figure,ol,p,table,ul{margin-top:0;margin-bottom:1.25em}figure{margin-left:0;margin-right:0}a{border-width:0;border-style:dotted;border-color:#0072ce;color:#0072ce;text-decoration:none}a.visited,a:visited{border-color:#005e5d;color:#005e5d}a.hover,a:hover{border-style:solid;border-color:#7fb8e6;color:#7fb8e6}a.focus,a:focus{border-style:solid;outline:dotted thin}a.active,a:active{border-style:solid;border-color:#002d72;color:#002d72}dd a,li a,p a{border-bottom-width:1px}nav a{border-bottom-width:0}ul{list-style:square}table{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}table em,table i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 table em,.lt-ie9 table i{font-style:normal!important}table b,table strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 table b,.lt-ie9 table strong{font-weight:400!important}td,th{padding:.75em .9375em;background:#f8f8f8}thead td,thead th{color:#fff;background:#43484e}tbody>tr:nth-child(odd)>td,tbody>tr:nth-child(odd)>th{background:#f1f2f2}.compact-table td,.compact-table th{padding:.4375em .625em}th{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;text-align:left}.lt-ie9 th{font-weight:400!important}blockquote{margin:1.25em}@media only all and (min-width:37.5em){blockquote{margin:1.75em 2.5em}}.pull-quote_body{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin-top:0;font-size:1.375em;line-height:1.27272727;margin-bottom:.54545455em;color:#101820}.pull-quote_body em,.pull-quote_body i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .pull-quote_body em,.lt-ie9 .pull-quote_body i{font-style:normal!important}.pull-quote_body b,.pull-quote_body strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .pull-quote_body b,.lt-ie9 .pull-quote_body strong{font-weight:400!important}.pull-quote_citation{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;margin-bottom:.35714286em;font-size:.875em;line-height:1.57142857;color:#75787b}.lt-ie9 .pull-quote_citation{font-weight:400!important}.pull-quote__large .pull-quote_body{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin-top:0;font-size:1.625em;line-height:1.26923077;margin-bottom:.69230769em}.pull-quote__large .pull-quote_body em,.pull-quote__large .pull-quote_body i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .pull-quote__large .pull-quote_body em,.lt-ie9 .pull-quote__large .pull-quote_body i{font-style:normal!important}.pull-quote__large .pull-quote_body b,.pull-quote__large .pull-quote_body strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .pull-quote__large .pull-quote_body b,.lt-ie9 .pull-quote__large .pull-quote_body strong{font-weight:400!important}label{display:block;margin-bottom:.3125em;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}label em,label i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 label em,.lt-ie9 label i{font-style:normal!important}label b,label strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 label b,.lt-ie9 label strong{font-weight:400!important}label input[type=checkbox],label input[type=radio]{margin-right:.375em}input[type=email],input[type=number],input[type=search],input[type=tel],input[type=text],input[type=url],select[multiple],textarea{display:inline-block;margin:0;padding:.375em;font-family:Arial,sans-serif;font-size:1em;background:#fff;border:1px solid #75787b;border-radius:0;vertical-align:top;-webkit-appearance:none;-webkit-user-modify:read-write-plaintext-only}::-webkit-search-decoration{-webkit-appearance:none}input[type=email].focus,input[type=email]:focus,input[type=number].focus,input[type=number]:focus,input[type=search].focus,input[type=search]:focus,input[type=tel].focus,input[type=tel]:focus,input[type=text].focus,input[type=text]:focus,input[type=url].focus,input[type=url]:focus,select[multiple].focus,select[multiple]:focus,textarea.focus,textarea:focus{border:1px solid #0072ce;outline:#0072ce solid 1px;outline-offset:0;box-shadow:none}::-webkit-input-placeholder{color:#75787b}::-moz-placeholder{color:#75787b}:-ms-input-placeholder{color:#75787b}@font-face{font-family:'CFPB Minicons';src:url(../fonts/cf-icons.eot);src:url(../fonts/cf-icons.eot?#iefix) format('embedded-opentype'),url(../fonts/cf-icons.woff) format('woff'),url(../fonts/cf-icons.ttf) format('truetype'),url(../fonts/cf-icons.svg) format('svg');font-weight:400;font-style:normal}.cf-icon{font-family:'CFPB Minicons';display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}.cf-icon-left:before{content:"\e000"}.cf-icon-left-round:before{content:"\e001"}.cf-icon-right:before{content:"\e002"}.cf-icon-right-round:before{content:"\e003"}.cf-icon-up:before{content:"\e004"}.cf-icon-up-round:before{content:"\e005"}.cf-icon-down:before{content:"\e006"}.cf-icon-down-round:before{content:"\e007"}.cf-icon-arrow-left:before{content:"\e008"}.cf-icon-arrow-left-round:before{content:"\e009"}.cf-icon-arrow-right:before{content:"\e010"}.cf-icon-arrow-right-round:before{content:"\e011"}.cf-icon-arrow-up:before{content:"\e012"}.cf-icon-arrow-up-round:before{content:"\e013"}.cf-icon-arrow-down:before{content:"\e014"}.cf-icon-arrow-down-round:before{content:"\e015"}.cf-icon-approved:before{content:"\e100"}.cf-icon-approved-round:before{content:"\e101"}.cf-icon-error:before{content:"\e102"}.cf-icon-error-round:before{content:"\e103"}.cf-icon-help:before{content:"\e104"}.cf-icon-help-round:before{content:"\e105"}.cf-icon-delete:before{content:"\e106"}.cf-icon-delete-round:before{content:"\e107"}.cf-icon-plus:before{content:"\e108"}.cf-icon-plus-round:before{content:"\e109"}.cf-icon-minus:before{content:"\e110"}.cf-icon-minus-round:before{content:"\e111"}.cf-icon-update:before{content:"\e112"}.cf-icon-update-round:before{content:"\e113"}.cf-icon-youtube:before{content:"\e200"}.cf-icon-youtube-square:before{content:"\e201"}.cf-icon-linkedin:before{content:"\e202"}.cf-icon-linkedin-square:before{content:"\e203"}.cf-icon-facebook:before{content:"\e204"}.cf-icon-facebook-square:before{content:"\e205"}.cf-icon-flickr:before{content:"\e206"}.cf-icon-flickr-square:before{content:"\e207"}.cf-icon-twitter:before{content:"\e208"}.cf-icon-twitter-square:before{content:"\e209"}.cf-icon-github:before{content:"\e210"}.cf-icon-github-square:before{content:"\e211"}.cf-icon-email-social:before{content:"\e212"}.cf-icon-email-social-square:before{content:"\e213"}.cf-icon-web:before{content:"\e300"}.cf-icon-web-round:before{content:"\e301"}.cf-icon-email:before{content:"\e302"}.cf-icon-email-round:before{content:"\e303"}.cf-icon-mail:before{content:"\e304"}.cf-icon-mail-round:before{content:"\e305"}.cf-icon-phone:before{content:"\e306"}.cf-icon-phone-round:before{content:"\e307"}.cf-icon-technology:before{content:"\e308"}.cf-icon-technology-round:before{content:"\e309"}.cf-icon-fax:before{content:"\e310"}.cf-icon-fax-round:before{content:"\e311"}.cf-icon-document:before{content:"\e400"}.cf-icon-document-round:before{content:"\e401"}.cf-icon-pdf:before{content:"\e402"}.cf-icon-pdf-round:before{content:"\e403"}.cf-icon-upload:before{content:"\e404"}.cf-icon-upload-round:before{content:"\e405"}.cf-icon-download:before{content:"\e406"}.cf-icon-download-round:before{content:"\e407"}.cf-icon-copy:before{content:"\e408"}.cf-icon-copy-round:before{content:"\e409"}.cf-icon-edit:before{content:"\e410"}.cf-icon-edit-round:before{content:"\e411"}.cf-icon-attach:before{content:"\e412"}.cf-icon-attach-round:before{content:"\e413"}.cf-icon-print:before{content:"\e414"}.cf-icon-print-round:before{content:"\e415"}.cf-icon-save:before{content:"\e416"}.cf-icon-save-round:before{content:"\e417"}.cf-icon-appendix:before{content:"\e418"}.cf-icon-appendix-round:before{content:"\e419"}.cf-icon-supplement:before{content:"\e420"}.cf-icon-supplement-round:before{content:"\e421"}.cf-icon-rss:before{content:"\e422"}.cf-icon-rss-round:before{content:"\e423"}.cf-icon-bank-account:before{content:"\e500"}.cf-icon-bank-account-round:before{content:"\e501"}.cf-icon-credit-card:before{content:"\e502"}.cf-icon-credit-card-round:before{content:"\e503"}.cf-icon-loan:before{content:"\e504"}.cf-icon-loan-round:before{content:"\e505"}.cf-icon-money-transfer:before{content:"\e506"}.cf-icon-money-transfer-round:before{content:"\e507"}.cf-icon-mortgage:before{content:"\e508"}.cf-icon-mortgage-round:before{content:"\e509"}.cf-icon-debt-collection:before{content:"\e510"}.cf-icon-debt-collection-round:before{content:"\e511"}.cf-icon-credit-report:before{content:"\e512"}.cf-icon-credit-report-round:before{content:"\e513"}.cf-icon-money:before{content:"\e514"}.cf-icon-money-round:before{content:"\e515"}.cf-icon-quick-cash:before{content:"\e516"}.cf-icon-quick-cash-round:before{content:"\e517"}.cf-icon-contract:before{content:"\e518"}.cf-icon-contract-round:before{content:"\e519"}.cf-icon-complaint:before{content:"\e520"}.cf-icon-complaint-round:before{content:"\e521"}.cf-icon-getting-credit-card:before{content:"\e522"}.cf-icon-getting-credit-card-round:before{content:"\e523"}.cf-icon-buying-car:before{content:"\e524"}.cf-icon-buying-car-round:before{content:"\e525"}.cf-icon-paying-college:before{content:"\e526"}.cf-icon-paying-college-round:before{content:"\e527"}.cf-icon-owning-home:before{content:"\e528"}.cf-icon-owning-home-round:before{content:"\e529"}.cf-icon-debt:before{content:"\e530"}.cf-icon-debt-round:before{content:"\e531"}.cf-icon-building-credit:before{content:"\e532"}.cf-icon-building-credit-round:before{content:"\e533"}.cf-icon-prepaid-cards:before{content:"\e534"}.cf-icon-prepaid-cards-round:before{content:"\e535"}.cf-icon-payday-loan:before{content:"\e536"}.cf-icon-payday-loan-round:before{content:"\e537"}.cf-icon-retirement:before{content:"\e538"}.cf-icon-retirement-round:before{content:"\e539"}.cf-icon-user:before{content:"\e600"}.cf-icon-user-round:before{content:"\e601"}.cf-icon-wifi:before{content:"\e602"}.cf-icon-wifi-round:before{content:"\e603"}.cf-icon-search:before{content:"\e604"}.cf-icon-search-round:before{content:"\e605"}.cf-icon-share:before{content:"\e606"}.cf-icon-share-round:before{content:"\e607"}.cf-icon-link:before{content:"\e608"}.cf-icon-link-round:before{content:"\e609"}.cf-icon-external-link:before{content:"\e610"}.cf-icon-external-link-round:before{content:"\e611"}.cf-icon-audio-mute:before{content:"\e612"}.cf-icon-audio-mute-round:before{content:"\e616"}.cf-icon-audio-low:before{content:"\e613"}.cf-icon-audio-low-round:before{content:"\e617"}.cf-icon-audio-medium:before{content:"\e614"}.cf-icon-audio-medium-round:before{content:"\e618"}.cf-icon-audio-max:before{content:"\e615"}.cf-icon-audio-max-round:before{content:"\e619"}.cf-icon-favorite:before{content:"\e620"}.cf-icon-favorite-round:before{content:"\e621"}.cf-icon-unfavorite:before{content:"\e622"}.cf-icon-unfavorite-round:before{content:"\e623"}.cf-icon-bookmark:before{content:"\e624"}.cf-icon-bookmark-round:before{content:"\e625"}.cf-icon-unbookmark:before{content:"\e626"}.cf-icon-unbookmark-round:before{content:"\e627"}.cf-icon-settings:before{content:"\e628"}.cf-icon-settings-round:before{content:"\e629"}.cf-icon-menu:before{content:"\e630"}.cf-icon-menu-round:before{content:"\e631"}.cf-icon-lock:before{content:"\e632"}.cf-icon-lock-round:before{content:"\e633"}.cf-icon-unlock:before{content:"\e634"}.cf-icon-unlock-round:before{content:"\e635"}.cf-icon-clock:before{content:"\e636"}.cf-icon-clock-round:before{content:"\e637"}.cf-icon-chart:before{content:"\e638"}.cf-icon-chart-round:before{content:"\e639"}.cf-icon-play:before{content:"\e640"}.cf-icon-play-round:before{content:"\e641"}.cf-icon-newspaper:before{content:"\e700"}.cf-icon-newspaper-round:before{content:"\e701"}.cf-icon-microphone:before{content:"\e702"}.cf-icon-microphone-round:before{content:"\e703"}.cf-icon-bullhorn:before{content:"\e704"}.cf-icon-bullhorn-round:before{content:"\e705"}.cf-icon-double-quote:before{content:"\e708"}.cf-icon-double-quote-round:before{content:"\e709"}.cf-icon-speech-bubble:before{content:"\e710"}.cf-icon-speech-bubble-round:before{content:"\e711"}.cf-icon-information:before{content:"\e712"}.cf-icon-information-round:before{content:"\e713"}.cf-icon-lightbulb:before{content:"\e714"}.cf-icon-lightbulb-round:before{content:"\e715"}.cf-icon-dialogue:before{content:"\e716"}.cf-icon-dialogue-round:before{content:"\e717"}.cf-icon-date:before{content:"\e718"}.cf-icon-date-round:before{content:"\e719"}.btn{display:inline-block;box-sizing:border-box;padding:.5em 1.16666667em;border:0;border-radius:.33333333em;margin:0;vertical-align:middle;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:.75em;line-height:normal;text-decoration:none;cursor:pointer;transition:.1s;-webkit-appearance:none}.lt-ie9 .btn{font-weight:400!important}.btn,.btn:link,.btn:visited{background-color:#0072ce;color:#fff}.btn.hover,.btn:hover{background-color:#328ed8}.btn.focus,.btn:focus{background-color:#328ed8;outline:#0072ce dotted 1px;outline-offset:1px}.btn.active,.btn:active{background-color:#33578e}button.btn::-moz-focus-inner,input.btn::-moz-focus-inner{border:0}.btn+.btn{margin-left:.5em}.lt-ie8{background:url(null) no-repeat fixed}.lt-ie8 button.btn,.lt-ie8 input.btn{overflow:visible;padding-top:.4em;padding-bottom:.4em}.btn__secondary,.btn__secondary:link,.btn__secondary:visited{background-color:#75787b;color:#fff}.btn__secondary.hover,.btn__secondary:hover{background-color:#919395}.btn__secondary.focus,.btn__secondary:focus{background-color:#919395;outline-color:#75787b}.btn__secondary.active,.btn__secondary:active{background-color:#43484e}.btn__warning,.btn__warning:link,.btn__warning:visited{background-color:#d12124;color:#fff}.btn__warning.hover,.btn__warning:hover{background-color:#da6750}.btn__warning.focus,.btn__warning:focus{background-color:#da6750;outline-color:#d12124}.btn__warning.active,.btn__warning:active{background-color:#9c301b}.btn__disabled,.btn__disabled.active,.btn__disabled.focus,.btn__disabled.hover,.btn__disabled:active,.btn__disabled:focus,.btn__disabled:hover,.btn__disabled:link,.btn__disabled:visited{background-color:#e3e4e5;color:#75787b;cursor:default;cursor:not-allowed}.btn__disabled.focus,.btn__disabled:focus{outline-color:#75787b}.btn__super{padding:.61111111em 1.61111111em;font-size:1.125em}.btn__super+.btn__super{margin-left:.33333333em}.lt-ie8 button.btn__super,.lt-ie8 input.btn__super{padding-top:.66666667em;padding-bottom:.66666667em}.btn_icon__left{padding:0 .875em 0 0;border-right:1px solid #fff;border-right:1px solid rgba(255,255,255,.4);margin:0 .58333333em 0 0}.btn__disabled .btn_icon__left{border-right-color:#babbbd}.btn_icon__right{padding:0 0 0 .875em;border-right:0;border-left:1px solid #fff;border-left:1px solid rgba(255,255,255,.4);margin:0 0 0 .58333333em}.btn__disabled .btn_icon__right{border-left-color:#babbbd}.btn__grouped{border-radius:0}.btn__grouped-first{border-top-right-radius:0;border-bottom-right-radius:0}.btn__grouped-last{border-top-left-radius:0;border-bottom-left-radius:0}.btn__grouped,.btn__grouped+.btn__grouped,.btn__grouped+.btn__grouped-last,.btn__grouped-first+.btn__grouped,.btn__grouped-first+.btn__grouped-last,.btn__grouped-last{margin-left:-.25em}.btn__grouped-first.btn__super+.btn__grouped-last.btn__super,.btn__grouped-first.btn__super+.btn__grouped.btn__super,.btn__grouped-last.btn__super,.btn__grouped.btn__super,.btn__grouped.btn__super+.btn__grouped-last.btn__super,.btn__grouped.btn__super+.btn__grouped.btn__super{margin-left:-.16666667em}.btn__compound-action,.btn__compound-action:link,.btn__compound-action:visited{background-color:#328ed8}.btn__compound-action.hover,.btn__compound-action:focus,.btn__compound-action:hover{background-color:#0072ce}.btn__compound-action.btn__secondary{background-color:#919395}.btn__compound-action.btn__secondary.hover,.btn__compound-action.btn__secondary:focus,.btn__compound-action.btn__secondary:hover{background-color:#75787b}.btn__compound-action.btn__super{padding-left:1.22222222em;padding-right:1.22222222em}.btn__link{padding:0;border-bottom:1px dotted #0072ce;border-radius:0;margin:.5em 0}.btn__link,.btn__link:link,.btn__link:visited{background-color:transparent;color:#0072ce}.btn__link.hover,.btn__link:hover{border-bottom:1px solid #7fb8e6;background-color:transparent;color:#7fb8e6}.btn__link.focus,.btn__link:focus{border-bottom-style:solid;background-color:transparent;outline:#0072ce dotted thin}.btn__link.active,.btn__link:active{border-bottom:1px solid #002d72;background-color:transparent;color:#002d72}.lt-ie8 button.btn__link,.lt-ie8 input.btn__link{padding:0}.btn__link.btn__secondary,.btn__link.btn__secondary:link,.btn__link.btn__secondary:visited{border-bottom-color:#75787b;background-color:transparent;color:#75787b}.btn__link.btn__secondary.hover,.btn__link.btn__secondary:hover{border-bottom-color:#43484e;color:#43484e}.btn__link.btn__secondary.focus,.btn__link.btn__secondary:focus{outline-color:#75787b}.btn__link.btn__secondary.active,.btn__link.btn__secondary:active{border-bottom-color:#101820;color:#101820}.btn__link.btn__warning,.btn__link.btn__warning:link,.btn__link.btn__warning:visited{border-bottom-color:#d12124;background-color:transparent;color:#d12124}.btn__link.btn__warning.hover,.btn__link.btn__warning:hover{border-bottom-color:#da6750;color:#da6750}.btn__link.btn__warning.focus,.btn__link.btn__warning:focus{outline-color:#d12124}.btn__link.btn__warning.active,.btn__link.btn__warning:active{border-bottom-color:#9c301b;color:#9c301b}.form-label-header{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;font-size:.875em;line-height:1.57142857;margin-bottom:.71428571em}.lt-ie9 .form-label-header{font-weight:400!important}.input__super[type=email],.input__super[type=number],.input__super[type=search],.input__super[type=tel],.input__super[type=text],.input__super[type=url]{padding:.55555556em;font-size:1.125em}input[type=email].error,input[type=number].error,input[type=search].error,input[type=tel].error,input[type=text].error,input[type=url].error,select[multiple].error,textarea.error{border:1px solid #d12124;outline:#d12124 solid 1px}input[type=email].success,input[type=number].success,input[type=search].success,input[type=tel].success,input[type=text].success,input[type=url].success,select[multiple].success,textarea.success{border:1px solid #2cb34a;outline:#2cb34a solid 1px}.cf-form_input-icon{position:relative;top:.3em;margin-left:.2em;font-size:1.25em}.error+.cf-form_input-icon{color:#d12124}.success+.cf-form_input-icon{color:#2cb34a}.form-group+.form-group{margin-top:1.875em}.form-group_item+.form-group_item{margin-top:.9375em}@media only all and (min-width:30em){.input-with-btn{display:block;position:relative;margin-left:-15px;margin-right:-15px}}.input-with-btn_input{margin-bottom:.9375em}@media only all and (min-width:30em){.input-with-btn_input{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:75%}.ie .input-with-btn_input{margin-right:-.26em}.lt-ie8 .input-with-btn_input{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only all and (min-width:60em){.input-with-btn_input{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:83.33333333%}.ie .input-with-btn_input{margin-right:-.26em}.lt-ie8 .input-with-btn_input{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.input-with-btn_input input{box-sizing:border-box;width:100%}.input-with-btn_btn{margin-bottom:.9375em}@media only all and (min-width:30em){.input-with-btn_btn{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .input-with-btn_btn{margin-right:-.26em}.lt-ie8 .input-with-btn_btn{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only all and (min-width:60em){.input-with-btn_btn{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:16.66666667%}.ie .input-with-btn_btn{margin-right:-.26em}.lt-ie8 .input-with-btn_btn{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.input-with-btn_btn .btn{box-sizing:border-box;width:100%}.input-with-btn_btn .btn__super{padding-left:.83333333em;padding-right:.83333333em}.btn-inside-input{position:relative}.btn-inside-input input[type=email],.btn-inside-input input[type=number],.btn-inside-input input[type=search],.btn-inside-input input[type=tel],.btn-inside-input input[type=text],.btn-inside-input input[type=url]{box-sizing:border-box;width:100%;padding-right:5.41666667em}.btn-inside-input input[type=email].input__super,.btn-inside-input input[type=number].input__super,.btn-inside-input input[type=search].input__super,.btn-inside-input input[type=tel].input__super,.btn-inside-input input[type=text].input__super,.btn-inside-input input[type=url].input__super{padding-right:5em}.btn-inside-input .btn{border-bottom-width:0!important;position:absolute;right:1.25em;top:0}.btn-inside-input .btn__super{right:.83333333em}.expandable{margin-bottom:1.875em}.expandable_target{padding:0;border:0;background-color:transparent;cursor:pointer}.expandable_target:focus{outline:#101820 dotted 1px;outline-offset:1px}.expandable_content:after{content:"";display:table;clear:both}.lt-ie8 .expandable_content{zoom:1}.expandable_label{color:#101820;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .expandable_label{font-weight:400!important}.expandable_link{color:#0072ce;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:.75em;line-height:1.83333333}.expandable_link em,.expandable_link i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .expandable_link em,.lt-ie9 .expandable_link i{font-style:normal!important}.expandable_link b,.expandable_link strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .expandable_link b,.lt-ie9 .expandable_link strong{font-weight:400!important}.expandable_cue-close__animated,.expandable_cue-open__animated{transition:.25s transform}.expandable_cue-close__animated{transform:rotate(180deg)}.expandable__expanded .expandable_cue-close__animated{transform:rotate(0)}.expandable__expanded .expandable_cue-open__animated{transform:rotate(-180deg)}.expandable_header{display:block}.expandable_header:after{content:"";display:table;clear:both}.lt-ie8 .expandable_header{zoom:1}button.expandable_header{width:100%;text-align:left}.expandable_header__spaced{padding-bottom:.9375em}.expandable_header-left{float:left}.expandable_header-right{float:right}.expandable__padded{margin-bottom:1.875em;background:#f1f2f2}.expandable__padded.expandable__expanded,.expandable__padded:hover{background:#e3e4e5}.expandable__padded .expandable_header{padding:.625em 1em}.expandable__padded .expandable_content{margin:0 1em 1.375em}.expandable__padded .expandable_content:before{content:'';display:block;height:1px;margin-bottom:1em;background:#babbbd}.expandable-group{margin-bottom:1.875em}.expandable-group_header{padding:.35714286em 1.14285714em;border-bottom:1px solid #919395;background:#f1f2f2;color:#75787b;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin-top:0;font-size:.875em;line-height:1.57142857;margin-bottom:0}.lt-ie9 .expandable-group_header{font-weight:400!important}.expandable-group .expandable{border-bottom:1px solid #919395;margin-bottom:0;background:#fff}.expandable-group .expandable_label{margin-top:0;font-size:1.125em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;line-height:1.22222222;margin-bottom:0}.lt-ie9 .expandable-group .expandable_label{font-weight:400!important}.expandable-group .expandable_content{margin-bottom:0}pre{padding:1.375em 1em;white-space:pre;white-space:pre-wrap;word-wrap:break-word}code,kbd,pre,samp{font-family:monospace,sans-serif;margin-bottom:1.375em}embed,img,object,video{max-width:100%}img{border:0;-ms-interpolation-mode:bicubic}::-moz-selection{background:#43484e;color:#FFF}::selection{background:#43484e;color:#FFF}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin:0 auto}.mobile-warning{display:block;background-color:#f6d9d3;padding:.85em;margin:.5em 0;font-size:.75em}svg:not(:root){overflow:hidden}.hidden{display:none!important;visibility:hidden}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visually-hidden .visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.cf:after,.cf:before{content:"";display:table}.cf:after{clear:both}.cf{zoom:1}.ir{background-color:transparent;border:0;overflow:hidden}.ir before{content:"";display:block;width:0;height:150%}body,html{margin:0;font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.375;color:#101820;font-smoothing:antialiased;text-rendering:optimizeLegibility;word-wrap:break-word;overflow-wrap:break-word}body em,body i,html em,html i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 body em,.lt-ie9 body i,.lt-ie9 html em,.lt-ie9 html i{font-style:normal!important}body b,body strong,html b,html strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 body b,.lt-ie9 body strong,.lt-ie9 html b,.lt-ie9 html strong{font-weight:400!important}.warning-banner{box-sizing:border-box;background-color:#e3e4e5;color:#919395;padding:4px 0}.warning-banner p{text-align:center;font-size:12px}.wrap{max-width:1170px;padding:0 15px;margin:0 auto;position:relative;clear:both}.sidebar-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .sidebar-content{margin-right:-.26em}.lt-ie8 .sidebar-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .main-content{margin-right:-.26em}.lt-ie8 .main-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}@media only screen and (min-width:37.5em){.sidebar-content{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%;padding-bottom:2em;padding-top:2em}.ie .sidebar-content{margin-right:-.26em}.lt-ie8 .sidebar-content{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-content{padding-bottom:2em;padding-top:2em}.main-content__two-column{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:75%}.ie .main-content__two-column{margin-right:-.26em}.lt-ie8 .main-content__two-column{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.header{border-bottom:4px solid #2cb34a;box-sizing:border-box;padding-top:4px;width:100%}.header .site-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%;text-align:center}.ie .header .site-title{margin-right:-.26em}.lt-ie8 .header .site-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-title h1{font-size:1.5em}.header .site-title .title-link{color:#919395}.header .site-title .title-link .site-org{color:#75787b;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .header .site-title .title-link .site-org{font-weight:400!important}.header .site-title .title-link:visited{color:#919395}.header .site-logo{display:none}.header .site-logo img{margin-right:20px}@media only screen and (min-width:37.5em){.header{padding:15px}.header .site-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:66.66666667%;text-align:left;border-width:0}.ie .header .site-title{margin-right:-.26em}.lt-ie8 .header .site-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-title h1{font-size:24px;line-height:44px;margin:0}.header .site-logo{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:33.33333333%;text-align:right;border-width:0}.ie .header .site-logo{margin-right:-.26em}.lt-ie8 .header .site-logo{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.header .site-logo .logo{display:inline;width:170px}}.main-content .lead-in{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:1.125em}.main-content .lead-in em,.main-content .lead-in i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .main-content .lead-in em,.lt-ie9 .main-content .lead-in i{font-style:normal!important}.main-content .lead-in b,.main-content .lead-in strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .main-content .lead-in b,.lt-ie9 .main-content .lead-in strong{font-weight:400!important}.main-content hr{display:block;height:1px;border:0;border-top:1px solid #e3e4e5;margin:1.25em 0;padding:0}.main-content img+hr{margin:1em 0 1.25em}.main-content ul.toc{list-style:none;border-bottom:1px solid #cce3f5;padding:0 0 1.25em;margin:0 0 1.875em}.main-content ul.toc:after,.main-content ul.toc:before{content:" ";display:table}.main-content ul.toc:after{clear:both}.main-content .toc li{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;font-size:1.125em;display:block;float:left;position:relative}.lt-ie9 .main-content .toc li{font-weight:400!important}.main-content .toc li a{text-decoration:none;border-bottom:none;padding:0 1em 0 0}.main-content .toc li a:visited{color:#0072ce}.main-content .toc li a:hover{border-bottom:none;color:#7fb8e6}.main-content ol,.main-content ul{padding-left:1.5em}.main-content ul{list-style-type:square}.main-content li ol,.main-content li ul{margin:0 1.375em}.main-content dt{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .main-content dt{font-weight:400!important}.footer{padding:2em 0;border-top:2px solid #babbbd;background:#f1f2f2;width:100%}.footer h4{margin-top:0;font-size:16px;line-height:1.5em;text-transform:uppercase}.footer p{max-width:45em;font-size:.875em;line-height:1.42857142857143}.footer a,.footer a:link,.footer a:visited{border-bottom:1px dotted}.footer a:hover{border-bottom:1px dotted #0072ce}.footer .footer-links ul{list-style:none;padding-left:0;margin-top:0}@media only screen and (min-width:37.5em){.footer p{margin:.75em 0}.footer .footer-links ul,.footer li{margin-left:0}}@media only screen and (min-width:50em){.footer-links{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .footer-links{margin-right:-.26em}.lt-ie8 .footer-links{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.footer-oss{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:41.66666667%}.ie .footer-oss{margin-right:-.26em}.lt-ie8 .footer-oss{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.footer-standards{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:33.33333333%}.ie .footer-standards{margin-right:-.26em}.lt-ie8 .footer-standards{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}@media only screen and (min-width:20em){.main-nav{margin:0 0 .5em;padding:0;text-align:center}.main-nav li{display:inline-block;margin:0 1em .5em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:1.125em;list-style:none}.lt-ie9 .main-nav li{font-weight:400!important}.main-nav a{display:block;padding:.125em 0;border-bottom:4px solid #fff}.main-nav a:link,.main-nav a:visited{color:#75787b}.main-nav a:focus,.main-nav a:hover{border-bottom:4px solid #dbedd4;color:#43484e}.main-nav a:active,.main-nav-active a:active,.main-nav-active a:focus,.main-nav-active a:hover,.main-nav-active a:link,.main-nav-active a:visited{border-bottom:4px solid #addc91;color:#101820}}@media only screen and (min-width:37.5em){.main-nav{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%;margin-bottom:0;text-align:left}.ie .main-nav{margin-right:-.26em}.lt-ie8 .main-nav{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.main-nav li{margin-right:0;margin-bottom:0;margin-left:2em}.main-nav li:first-child{margin-left:0}.main-nav a{padding-top:0;padding-bottom:1em;border-bottom:none}.main-nav a:active,.main-nav a:hover,.main-nav-active a:active,.main-nav-active a:focus,.main-nav-active a:hover,.main-nav-active a:link,.main-nav-active a:visited{margin-bottom:-4px}}@media only screen and (min-width:48em){.main-nav li{font-size:1.125em}}.secondary-nav a{display:block;padding:10px}.secondary-nav a,.secondary-nav a:link,.secondary-nav a:visited{border-bottom:none;color:#101820}.secondary-nav .secondary-nav-active>a,.secondary-nav a:focus,.secondary-nav a:hover{border-left:4px solid #2cb34a;margin-left:-4px;color:#101820}.secondary-nav a:active{background-color:#f8f8f8;color:#101820}.secondary-nav ul{margin:0;padding:0}.secondary-nav li{list-style:none;border-bottom:1px solid #babbbd;font-size:1.125em;padding-left:4px}.secondary-nav li:last-child{border-bottom:none}select{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400}select em,select i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 select em,.lt-ie9 select i{font-style:normal!important}select b,select strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 select b,.lt-ie9 select strong{font-weight:400!important}.map-wrapper{margin:0 auto;position:relative;clear:both;max-width:100%;padding:0}.map-aside,.map-aside-header,.map-header,.map-main{border-width:0;box-sizing:border-box}.map-aside-header,.map-header{background-color:#f1f2f2}.map-header{height:34px;line-height:26px;padding:4px 8px}.map-header__lock-msa{font-size:.875em}.map-aside-header{height:34px}.map-divider{border-bottom:1px solid #babbbd;padding:10px}.map-divider h6{line-height:1.375}.map-divider select{width:90%;margin-top:8px;margin-bottom:8px;margin-left:3px}.map-divider .selector-label{padding:5px}.map-divider .tab-title{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;color:#919395;margin:0}.lt-ie9 .map-divider .tab-title{font-weight:400!important}.map-divider .tab-main{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;color:#101820;text-transform:none;font-size:.875em;letter-spacing:0}.lt-ie9 .map-divider .tab-main{font-weight:400!important}.map-divider .item-main{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;font-size:.75em;margin:0;color:#101820;letter-spacing:0}.lt-ie9 .map-divider .item-main{font-weight:400!important}.map-divider .item-sub{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;margin:0 0 .1em;text-transform:none;font-size:.75em;color:#919395;letter-spacing:0}.map-divider .item-sub em,.map-divider .item-sub i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .map-divider .item-sub em,.lt-ie9 .map-divider .item-sub i{font-style:normal!important}.map-divider .item-sub b,.map-divider .item-sub strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-divider .item-sub b,.lt-ie9 .map-divider .item-sub strong{font-weight:400!important}.map-divider .inst-id{color:#101820;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-divider .inst-id{font-weight:400!important}.map-divider-minor{border-bottom:1px solid #babbbd;padding-left:10px;padding-top:5px;padding-bottom:5px;cursor:pointer;position:relative}.map-divider-minor .sub-header-name{margin-left:20px;display:inline-block;text-transform:none;color:#75787b;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;letter-spacing:0}.lt-ie9 .map-divider-minor .sub-header-name{font-weight:400!important}.map-divider-minor i.cf-icon-right{font-size:.75em;position:absolute;right:10px;top:13px}.map-divider-minor h6{line-height:1.375;margin-top:5px;margin-bottom:5px}.map-divider-minor.option:hover{background:#e3e4e5}.map-divider-minor.option.active-layer{background:#dbedd4}.map-divider-minor.option.active-layer .sub-header-name{color:#101820}.map-divider-minor.option.active-layer:hover{background:#addc91}.chart-toggle h6{text-transform:none;letter-spacing:0}#layerOptions .option i{color:#babbbd}#layerOptions .option.active-layer i{color:#43484e}.header-group{padding-bottom:10px}.lighter{background-color:#f8f8f8}.darker{background-color:#f1f2f2}.darker-still{background-color:#e3e4e5}.green-highlight{background-color:#dbedd4}.green-highlight .sub-header-name{color:#101820}.divided{border-bottom:1px solid #babbbd}.symbol-key-img{height:10px}.bubbletooltip_tip{padding:10px;color:#fff;width:200px;font-size:.85em;background-color:#43484e;position:relative}.bubbletooltip_tip a{color:#fff;border-bottom:1px dotted #e3e4e5}.bubbletooltip_tip a:hover,.bubbletooltip_tip a:visited{color:#fff}.bubbletooltip_tip:before{content:'';position:absolute;border:10px solid transparent;border-left-color:#000;top:20px;left:-10;z-index:-1}.red-highlight i{color:#d12124}@media only screen and (min-width:37.5em){.map-aside,.map-aside-header{float:left;width:260px;border-right:2px solid #babbbd;box-sizing:border-box}.map-header,.map-main{overflow:hidden;border-width:0;box-sizing:border-box}.map-aside-header,.map-header{border-bottom:1px solid #babbbd}.map-header__wrapper{display:block;position:relative;margin-left:-15px;margin-right:-15px}.map-header__map-title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .map-header__map-title{margin-right:-.26em}.lt-ie8 .map-header__map-title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}}.minority-key{width:100%;padding:5px;background-color:#fff;border:1px solid #101820}.minority-label{width:65px;border-width:0;display:inline-block}.css-legend-chart{width:85px;display:inline-block;height:8px;margin:0;padding:0;background-color:#f4f4ec;border:1px solid #babbbd}.pct-minority-chart{width:83px;height:6px;padding:0;background-color:#f4f4ec}.pct-minority-value{display:inline-block;border-width:0}.pct-minority-value::after{content:"%"}.tract-population{float:right}.leaflet-rrose-content{margin-top:8px;margin-right:10px}.bubble-header{border-bottom:1px solid #e3e4e5;color:#919395;font-weight:700}.bubble-label{margin-top:3px}.circle-hover-label{font-size:.8em;text-transform:uppercase;font-weight:700;color:#babbbd;display:block}.circle-hover-data{font-size:1.25em;font-weight:700;color:#101820;display:block}.hh-count{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:66.66666667%;border-width:0;text-align:right}.ie .hh-count{margin-right:-.26em}.lt-ie8 .hh-count{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.lar-count{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:33.33333333%;border-width:0;text-align:left}.ie .lar-count{margin-right:-.26em}.lt-ie8 .lar-count{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.map-aside{background-color:#f8f8f8}.map-aside h3{font-size:.875em;text-transform:uppercase;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .map-aside h3{font-weight:400!important}.map-aside h4{font-size:.75em;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .map-aside h4{font-weight:400!important}.map-aside dd,.map-aside dt,.map-aside p{font-size:.75em}.map-aside dt{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500}.lt-ie9 .map-aside dt{font-weight:400!important}.map-aside dd{margin-left:12px;margin-bottom:4px}.map-aside .btn{font-size:.875em;margin-top:15px}.map-aside__download,.map-aside__export,.map-aside__lender-details,.map-aside__msa-details,.map-aside__msa-search{background-color:#f1f2f2;border-bottom:1px solid #babbbd}.map-aside__msa-search label{font-size:12px;font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;margin-bottom:8px}.lt-ie9 .map-aside__msa-search label{font-weight:400!important}.map-aside__msa-search input[type=text]{font-size:14px;width:200px;box-sizing:border-box;border:1px solid #babbbd;margin-bottom:1px}.map-aside__msa-search .btn{margin-top:8px;font-size:12px}.map-aside__msa-search .btn__disabled{border:1px solid #babbbd}.map-aside__msa-search .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f1f2f2;box-sizing:border-box;width:200px}.map-aside__msa-search .tt-suggestion p{font-size:14px;margin-bottom:8px}.map-aside__msa-search .tt-suggestion.tt-cursor{color:#fff;background-color:#0072ce}.map-aside__notes{padding:10px}#map .hover-box{position:absolute;bottom:85px;left:50px;z-index:1002;background-color:#fff;padding:8px;border:1px solid #ccc}.key-contents{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;width:230px;border-right:solid 1px #000;border-left:solid 1px #000;background:#fff;padding:5px}.key-contents em,.key-contents i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .key-contents em,.lt-ie9 .key-contents i{font-style:normal!important}.key-contents b,.key-contents strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .key-contents b,.lt-ie9 .key-contents strong{font-weight:400!important}.key-contents label{font-size:larger;font-weight:700}.action-taken-label{color:#919395;font-weight:700}#altScaleImg{width:220px}.tooltip-li{margin-left:10px}#minority-key{width:100%;margin-top:5px;background:-moz-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(107,40,10,.5)),color-stop(50%,rgba(250,186,106,.5)),color-stop(51%,rgba(124,198,186,.5)),color-stop(100%,rgba(12,48,97,.5)));background:-webkit-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-o-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:-ms-linear-gradient(left,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);background:linear-gradient(to right,rgba(107,40,10,.5) 0,rgba(250,186,106,.5) 50%,rgba(124,198,186,.5) 51%,rgba(12,48,97,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#806b280a', endColorstr='#800c3061', GradientType=1)}.circle-key{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:100%;border-width:0}.ie .circle-key{margin-right:-.26em}.lt-ie8 .circle-key{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.circle-key-label{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;margin-right:-.25em;vertical-align:top;width:100%;border-width:0;font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700;line-height:normal}.ie .circle-key-label{margin-right:-.26em}.lt-ie8 .circle-key-label{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.lt-ie9 .circle-key-label{font-weight:400!important}#percentage-container .left{display:inline-block;width:25%}#percentage-container .center{display:inline-block;width:50%;text-align:center}#percentage-container .right{display:inline-block;width:25%;text-align:right}#key{width:230px;background-color:#fff}.show-hide-control{text-align:right;cursor:pointer;color:#0072ce;background-color:#e3e4e5;border:1px solid #101820;padding:5px}.vex-dialog-message h2{font-weight:700;font-size:larger}.tabs ul{list-style-type:none;margin:0;padding:0}.tabs ul:after,.tabs ul:before{content:" ";display:table}.tabs ul:after{clear:both}.tabs ul li{float:left;margin:0;padding:0}.tabs ul li a{color:#75787b;font-size:18px;line-height:25px;cursor:pointer;text-decoration:none;padding:4px 16px;border-bottom:1px solid #babbbd;border-right:1px solid #babbbd;background-color:#f1f2f2;position:relative;display:block;top:0}.tabs ul li a.active{background-color:#d0d0ce;color:#75787b}.tabs ul li a.active:hover,.tabs ul li a:hover{background-color:#e3e4e5}.tabs ul li a:focus,.tabs ul li a:hover{border-bottom:1px solid #babbbd}.tabpanel{min-height:2em}.tabpanel:after,.tabpanel:before{content:" ";display:table}.tabpanel:after{clear:both}.cf-icon-analysis-themes{background-image:url(/static/basestyle/img/icon_analysis-layers.png);background-size:16px;background-repeat:no-repeat;background-position:center;width:16px}@media print{.no-print,.no-print *{display:none!important}#key{padding:5px;border:1px solid #101820}}.sort-none{background-image:url(../img/font-awesome/chevron-sort-none.png);background-repeat:no-repeat;background-position:center right}.sort-down{background-image:url(../img/font-awesome/chevron-sort-down.png);background-repeat:no-repeat;background-position:center right}.sort-up{background-image:url(../img/font-awesome/chevron-sort-up.png);background-repeat:no-repeat;background-position:center right}.search-home{margin-bottom:320px}.search-home .search-indent{padding-left:20px}.search-home .search-title-column1{float:left}.search-home .search-title-column2{float:left;padding-left:5px}.search-home .search-field label{display:inline-block}.search-home .search-field input[disabled]{color:#e3e4e5}.search-home .search-field input[type=text]{width:24em;padding:.25em .5em}.search-home .search-field .example-hint,.search-home .search-field .search-name-label{display:block;font-size:small}.search-home .search-field .example-hint{color:#babbbd;font-style:italic;margin-top:6px}.search-home .search-field .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f8f8f8;width:24em}.search-home .search-field .tt-suggestion p{margin-bottom:8px}.search-home #search-year{font-size:.9em;background:0 0}.search-results-form{background-color:#f1f2f2;padding:8px 16px;white-space:nowrap;text-align:center}.search-results-form .search-results-form__label{height:28px;padding:4px 0;box-sizing:border-box;display:inline-block;text-align:right;position:absolute!important;clip:rect(1px,1px,1px,1px)}.search-results-form label{display:inline}.search-results-form input[disabled]{color:#e3e4e5}.search-results-form .search-results-form__text-input{min-width:20em;padding:4px 8px;border:1px solid #75787b;margin-top:0;box-sizing:border-box}.search-results-form .btn{padding:7px 12px;margin-left:-4px;background-color:#75787b}.search-results-form .example-hint,.search-results-form .search-name-label{display:block;font-size:small}.search-results-form .example-hint{color:#babbbd;font-style:italic;margin-top:6px}.search-results-form .tt-suggestion{text-transform:capitalize;border-left:1px solid #babbbd;border-right:1px solid #babbbd;border-bottom:1px solid #babbbd;padding:0 4px;background-color:#f8f8f8;width:24em}.search-results-form .tt-suggestion p{margin-bottom:8px}.search-results .search-results-heading .search-results-heading__title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__title{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__start-over{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__start-over{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__start-over{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__second-row{padding:0 12px}.search-results .search-results-heading .search-results-heading__pagination{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__pagination{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__pagination{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__pagination .disabled{color:#babbbd}.search-results .search-results-heading .search-results-heading__pagination .divider{padding:0 4px}.search-results .search-results-heading .search-results-heading__pagination a,.search-results .search-results-heading .search-results-heading__pagination a:visited{color:#0072ce}.search-results .search-results-heading .search-results-heading__sort-assets,.search-results .search-results-heading .search-results-heading__sort-lar{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-results-heading .search-results-heading__sort-assets,.ie .search-results .search-results-heading .search-results-heading__sort-lar{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-assets,.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-lar{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-assets a,.search-results .search-results-heading .search-results-heading__sort-lar a{display:inline-block;padding-right:20px;height:24px;vertical-align:middle}.search-results .search-result-record{margin:8px 0}.search-results .search-result-record:hover{background-color:#f1f2f2}.search-results .search-result-record .expandable{margin-bottom:0}.search-results .search-result-record .expandable_content,.search-results .search-result-record .expandable_header{padding:12px}.search-results .search-result-record .expandable__expanded .expandable_header{background-color:#f1f2f2}.search-results .search-result-record .expandable_content{background-color:#f8f8f8}.search-results .search-result-record h4{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;color:#0072ce;font-size:22px;margin-bottom:4px;z-index:100}.search-results .search-result-record h4 em,.search-results .search-result-record h4 i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .search-results .search-result-record h4 em,.lt-ie9 .search-results .search-result-record h4 i{font-style:normal!important}.search-results .search-result-record h4 b,.search-results .search-result-record h4 strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .search-results .search-result-record h4 b,.lt-ie9 .search-results .search-result-record h4 strong{font-weight:400!important}.search-results .search-result-record h4 a,.search-results .search-result-record h4 a:visited{color:#0072ce;border-bottom:1px dotted #0072ce}.search-results .search-result-record .search-result-record__cfpb-id{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:18px;display:inline-block;margin-right:2em}.lt-ie9 .search-results .search-result-record .search-result-record__cfpb-id{font-weight:400!important}.search-results .search-result-record .search-result-record__hq{color:#75787b;font-size:18px;display:inline-block}.search-results .search-result-record .search-result-record__hq small{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:12px}.lt-ie9 .search-results .search-result-record .search-result-record__hq small{font-weight:400!important}.search-results .search-result-record .search-result-record__link{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:14px;border-bottom:none}.lt-ie9 .search-results .search-result-record .search-result-record__link{font-weight:400!important}.search-results .search-result-record .search-result-record__link:visited{color:#0072ce}.search-results .search-result-record dl{margin-left:0}.search-results .search-result-record dt{font-family:AvenirNextLTW01-Regular,Arial,sans-serif;font-style:normal;font-weight:400;font-size:12px;color:#75787b;text-transform:uppercase;margin-bottom:4px}.search-results .search-result-record dt em,.search-results .search-result-record dt i{font-family:AvenirNextLTW01-Italic,Arial,sans-serif;font-style:italic;font-weight:400}.lt-ie9 .search-results .search-result-record dt em,.lt-ie9 .search-results .search-result-record dt i{font-style:normal!important}.search-results .search-result-record dt b,.search-results .search-result-record dt strong{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .search-results .search-result-record dt b,.lt-ie9 .search-results .search-result-record dt strong{font-weight:400!important}.search-results .search-result-record .assets-definition-term,.search-results .search-result-record .year-definition-term{position:absolute!important;clip:rect(1px,1px,1px,1px)}.search-results .search-result-record dd{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;font-size:18px}.lt-ie9 .search-results .search-result-record dd{font-weight:400!important}.search-results .search-result-record table th{font-family:AvenirNextLTW01-Medium,Arial,sans-serif;font-style:normal;font-weight:500;text-align:right;padding-right:8px}.lt-ie9 .search-results .search-result-record table th{font-weight:400!important}.search-results .search-result-record .search-result-record__left-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__left-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__left-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__center-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__center-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__right-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__right-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__right-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-left{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__ec-left{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-left{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:100%}.ie .search-results .search-result-record .search-result-record__ec-right{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-right{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .pagination{margin-bottom:2em}.circlelabel{width:30px;height:30px;border-radius:30px;display:inline-block;font-size:13px;color:#fff;line-height:30px;text-align:center;background:#43484e}@media only screen and (min-width:37.5em){.search-home{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px;margin-right:-.25em;vertical-align:top;width:66.66666667%;position:relative;left:16.66666667%}.ie .search-home{margin-right:-.26em}.lt-ie8 .search-home{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__title{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:83.33333333%}.ie .search-results .search-results-heading .search-results-heading__title{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__title{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__num-results-control{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:16.66666667%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__num-results-control{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__num-results-control{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__pagination{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:50%}.ie .search-results .search-results-heading .search-results-heading__pagination{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__pagination{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-assets{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__sort-assets{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-assets{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-results-heading .search-results-heading__sort-lar{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-results-heading .search-results-heading__sort-lar{margin-right:-.26em}.lt-ie8 .search-results .search-results-heading .search-results-heading__sort-lar{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__left-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:50%}.ie .search-results .search-result-record .search-result-record__left-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__left-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-result-record .search-result-record__center-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__center-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__center-col dl{float:right}.search-results .search-result-record .search-result-record__center-col dd{margin-right:0}.search-results .search-result-record .search-result-record__right-col{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%;text-align:right}.ie .search-results .search-result-record .search-result-record__right-col{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__right-col{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__right-col dl{float:right}.search-results .search-result-record .search-result-record__right-col dd{margin-right:0}.search-results .search-result-record .search-result-record__ec-left{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 15px 0 0;margin-right:-.25em;vertical-align:top;width:75%}.ie .search-results .search-result-record .search-result-record__ec-left{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-left{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid transparent;border-width:0 0 0 15px;margin-right:-.25em;vertical-align:top;width:25%}.ie .search-results .search-result-record .search-result-record__ec-right{margin-right:-.26em}.lt-ie8 .search-results .search-result-record .search-result-record__ec-right{display:inline;margin-right:0;zoom:1;behavior:url(/cf-grid/custom-demo/static/css/boxsizing.htc)}.search-results .search-result-record .search-result-record__ec-right .btn{width:80%;text-align:center}}.show-data .leaflet-control-minimap{display:none}.chart-toggle{cursor:pointer}.chart-toggle:hover{background:#e3e4e5}.chart-toggle.active-layer{background:#dbedd4}.chart-toggle.active-layer:hover{background:#addc91}#map-aside{overflow:scroll}#data-container{border-top:3px solid #777;overflow-y:auto;position:relative;display:none}#table-container{display:none}#table-container td,#table-container th{padding:.75em .3em}.summary-data-table{margin-bottom:0;width:100%;border-collapse:collapse}.summary-data-table thead{border-bottom:1px solid #bababa}.summary-data-table thead th{color:#75787b;background:#f8f8f8}.summary-data-table thead th .color-coded{position:relative;padding-left:1em}.summary-data-table thead th .color-coded:before{content:'\2022';line-height:1;position:absolute;left:0;font-size:1.5em;top:-2px}.summary-data-table thead th.lar.lma_ct .color-coded:before,.summary-data-table thead th.lar.lma_pct .color-coded:before,.summary-data-table thead th.lma_ratio .color-coded:before{color:#eae9e5}.summary-data-table thead th.lar.mma_ct .color-coded:before,.summary-data-table thead th.lar.mma_pct .color-coded:before,.summary-data-table thead th.mma_ratio .color-coded:before{color:#a7c4b6}.summary-data-table thead th.hma_ratio .color-coded:before,.summary-data-table thead th.lar.hma_ct .color-coded:before,.summary-data-table thead th.lar.hma_pct .color-coded:before{color:#5c9796}.summary-data-table thead th .arrows,.summary-data-table thead th .sortable-content{float:left}.summary-data-table thead th .arrows{position:relative;margin-left:4px}.summary-data-table thead th .cf-icon-down,.summary-data-table thead th .cf-icon-up{font-size:.75em}.summary-data-table thead th .cf-icon-up{position:absolute;left:0;top:0}.summary-data-table thead th .cf-icon-down{position:absolute;left:0;top:7px}.summary-data-table thead th.tablesorter-headerAsc .cf-icon-down,.summary-data-table thead th.tablesorter-headerDesc .cf-icon-up{color:#e3e4e5}.summary-data-table .tablesorter-headerRow{border-bottom:1px solid #ddd}.summary-data-table .sortable-header th{text-transform:uppercase;cursor:pointer}.summary-data-table .header-one th{padding-bottom:.5em;font-size:1em}.summary-data-table .header-two th{padding-top:.4em;font-size:.8125em}.summary-data-table td,.summary-data-table th{border-right:1px solid #ddd}.summary-data-table .expander,.summary-data-table td.chart-title,.summary-data-table td.name,.summary-data-table th.name{border-right-width:0}.summary-data-table .header-one th.number,.summary-data-table .header-one th.percentage,.summary-data-table .header-one th.title,.summary-data-table .header-two th.name,.summary-data-table .hma_ct,.summary-data-table .hma_pct,.summary-data-table td.chart,.summary-data-table th.name-span{border-color:#bababa}.summary-data-table .chart-title,.summary-data-table .lar{min-width:50px}.summary-data-table .lar,.summary-data-table th.lar{font-size:.9em}.summary-data-table .odds_ratio{min-width:45px}.summary-data-table .chart{width:100px}.summary-data-table .chart .bar{width:90px;height:16px;display:inline-block}.lt-ie8 .summary-data-table .chart .bar{display:inline}.summary-data-table .chart .bar .segment{height:16px;float:left}.summary-data-table .chart .bar .segment.lma{background-color:#eae9e5}.summary-data-table .chart .bar .segment.mma{background-color:#a7c4b6}.summary-data-table .chart .bar .segment.hma{background-color:#5c9796}.summary-data-table .chart .bar.peer,.summary-data-table .chart .bar.peer .segment{height:8px}.summary-data-table tbody tr.msa-row{font-family:AvenirNextLTW01-Demi,Arial,sans-serif;font-style:normal;font-weight:700}.lt-ie9 .summary-data-table tbody tr.msa-row{font-weight:400!important}.summary-data-table tbody tr.peer-row{color:#75787b;border-bottom:1px solid #bababa}.summary-data-table tbody tr.peer-row td{padding-top:0;padding-bottom:.5em}.summary-data-table tbody tr.county-row .lar,.summary-data-table tbody tr.county-row .lar_pct{font-size:14px}.summary-data-table tbody tr td{vertical-align:top}.summary-data-table tbody tr td.chart{vertical-align:middle}.summary-data-table tbody tr td.lar,.summary-data-table tbody tr td.lar_pct,.summary-data-table tbody tr td.odds_ratio{text-align:right}.summary-data-table tbody tr td.odds-warning{background-color:#e8a091}.summary-data-table tbody tr td.odds-caution{background-color:#f6d9d3}.summary-data-table.peer-table .target-row td{padding-top:.5em;padding-bottom:0}.summary-data-table.peer-table .target-row-identifier{display:none}.summary-data-table.basic-table .target-row td{border-bottom:1px solid #bababa}.center-header{text-align:center}#closeTable{float:right;padding-right:3px;padding-top:3px;color:#0072ce}#tableLoadImage{margin:auto;padding:5px}.odds .tooltipsy{font-size:.85em}#plot-container div{font:10px sans-serif;background-color:#4682b4;text-align:right;padding:3px;margin:1px;color:#fff}.bar-min{fill:red}.bar-lar:hover,.bar-min:hover{fill:brown}.axis{font:10px sans-serif}.axis line,.axis path{fill:none;stroke:#000;shape-rendering:crispEdges}.x.axis path{display:none} \ No newline at end of file diff --git a/mapusaurus/basestyle/static/basestyle/css/mapusaurus_sourcemap.css.map b/mapusaurus/basestyle/static/basestyle/css/mapusaurus_sourcemap.css.map index dd1cbb2f..329e1c31 100644 --- a/mapusaurus/basestyle/static/basestyle/css/mapusaurus_sourcemap.css.map +++ b/mapusaurus/basestyle/static/basestyle/css/mapusaurus_sourcemap.css.map @@ -1 +1 @@ -{"version":3,"sources":["frontend/bower_components/cf-core/src/cf-utilities.less","frontend/bower_components/cf-core/src/licensed-fonts.css","frontend/bower_components/cf-core/src/cf-base.less","frontend/bower_components/cf-icons/src/less/icons.less","frontend/bower_components/cf-buttons/src/cf-buttons.less","frontend/bower_components/cf-forms/src/cf-forms.less","frontend/bower_components/cf-core/src/cf-media-queries.less","frontend/bower_components/cf-grid/src/cf-grid.less","frontend/bower_components/cf-expandables/src/less/cf-expandables.less","frontend/src/less/boilerplate/code.less","frontend/src/less/boilerplate/media.less","frontend/src/less/boilerplate/misc.less","frontend/src/less/boilerplate/mixins.less","frontend/src/less/mapusaurus/main.less","frontend/src/less/mapusaurus/layout.less","frontend/src/less/mapusaurus/header.less","frontend/src/less/mapusaurus/content.less","frontend/src/less/mapusaurus/footer.less","frontend/src/less/mapusaurus/main-nav.less","frontend/src/less/mapusaurus/sidebar.less","frontend/src/less/mapusaurus/map.less","frontend/src/less/mapusaurus/search.less","frontend/src/less/mapusaurus/table.less","frontend/src/less/mapusaurus/chart.less"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["frontend/bower_components/cf-core/src/cf-utilities.less","frontend/bower_components/cf-core/src/licensed-fonts.css","frontend/bower_components/cf-core/src/cf-base.less","frontend/bower_components/cf-icons/src/less/icons.less","frontend/bower_components/cf-buttons/src/cf-buttons.less","frontend/bower_components/cf-forms/src/cf-forms.less","frontend/bower_components/cf-core/src/cf-media-queries.less","frontend/bower_components/cf-grid/src/cf-grid.less","frontend/bower_components/cf-expandables/src/less/cf-expandables.less","frontend/src/less/boilerplate/code.less","frontend/src/less/boilerplate/media.less","frontend/src/less/boilerplate/misc.less","frontend/src/less/boilerplate/mixins.less","frontend/src/less/mapusaurus/main.less","frontend/src/less/mapusaurus/layout.less","frontend/src/less/mapusaurus/header.less","frontend/src/less/mapusaurus/content.less","frontend/src/less/mapusaurus/footer.less","frontend/src/less/mapusaurus/main-nav.less","frontend/src/less/mapusaurus/sidebar.less","frontend/src/less/mapusaurus/map.less","frontend/src/less/mapusaurus/search.less","frontend/src/less/mapusaurus/table.less","frontend/src/less/mapusaurus/chart.less"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/mapusaurus/basestyle/static/basestyle/js/vendor.min.js b/mapusaurus/basestyle/static/basestyle/js/vendor.min.js index 21dd0f70..4d790746 100644 --- a/mapusaurus/basestyle/static/basestyle/js/vendor.min.js +++ b/mapusaurus/basestyle/static/basestyle/js/vendor.min.js @@ -3103,7 +3103,7 @@ a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); - return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t * d - s) * Math.PI / p)) + b; + return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; }, easeOutElastic: function(x, t, b, c, d) { var s = 1.70158, p = 0, a = c; @@ -3113,17 +3113,17 @@ a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); - return a * Math.pow(2, -10 * t) * Math.sin(2 * (t * d - s) * Math.PI / p) + c + b; + return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; }, easeInOutElastic: function(x, t, b, c, d) { var s = 1.70158, p = 0, a = c; if (0 == t) return b; if (2 == (t /= d / 2)) return b + c; - if (p || (p = .3 * d * 1.5), a < Math.abs(c)) { + if (p || (p = d * (.3 * 1.5)), a < Math.abs(c)) { a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); - return 1 > t ? -.5 * a * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t * d - s) * Math.PI / p) + b : a * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t * d - s) * Math.PI / p) * .5 + c + b; + return 1 > t ? -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b : a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; }, easeInBack: function(x, t, b, c, d, s) { return void 0 == s && (s = 1.70158), c * (t /= d) * t * ((s + 1) * t - s) + b; @@ -3132,13 +3132,13 @@ return void 0 == s && (s = 1.70158), c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; }, easeInOutBack: function(x, t, b, c, d, s) { - return void 0 == s && (s = 1.70158), (t /= d / 2) < 1 ? c / 2 * t * t * (((s *= 1.525) + 1) * t - s) + b : c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; + return void 0 == s && (s = 1.70158), (t /= d / 2) < 1 ? c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b : c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; }, easeInBounce: function(x, t, b, c, d) { return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b; }, easeOutBounce: function(x, t, b, c, d) { - return (t /= d) < 1 / 2.75 ? 7.5625 * c * t * t + b : 2 / 2.75 > t ? c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b : 2.5 / 2.75 > t ? c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b : c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b; + return (t /= d) < 1 / 2.75 ? c * (7.5625 * t * t) + b : 2 / 2.75 > t ? c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b : 2.5 / 2.75 > t ? c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b : c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b; }, easeInOutBounce: function(x, t, b, c, d) { return d / 2 > t ? .5 * jQuery.easing.easeInBounce(x, 2 * t, 0, c, d) + b : .5 * jQuery.easing.easeOutBounce(x, 2 * t - d, 0, c, d) + .5 * c + b; @@ -4547,643 +4547,845 @@ }(function(a) { return function(a) { "use strict"; - a.extend({ - tablesorter: new function() { - function b() { - var a = arguments[0], b = arguments.length > 1 ? Array.prototype.slice.call(arguments) : a; - "undefined" != typeof console && "undefined" != typeof console.log ? console[/error/i.test(a) ? "error" : /warn/i.test(a) ? "warn" : "log"](b) : alert(b); - } - function c(a, c) { - b(a + " (" + (new Date().getTime() - c.getTime()) + "ms)"); - } - function d(a) { - for (var b in a) return !1; - return !0; - } - function e(c, d, e, f) { - for (var g, h, i = c.config, j = u.parsers.length, k = !1, l = "", m = !0; "" === l && m; ) e++, - d[e] ? (k = d[e].cells[f], l = u.getElementText(i, k, f), h = a(k), c.config.debug && b("Checking if value was empty on row " + e + ", column: " + f + ': "' + l + '"')) : m = !1; - for (;--j >= 0; ) if (g = u.parsers[j], g && "text" !== g.id && g.is && g.is(l, c, k, h)) return g; - return u.getParserById("text"); - } - function f(a) { - var d, f, g, h, i, j, k, l, m, n, o = a.config, p = o.$tbodies = o.$table.children("tbody:not(." + o.cssInfoBlock + ")"), q = 0, r = "", s = p.length; - if (0 === s) return o.debug ? b("Warning: *Empty table!* Not building a parser cache") : ""; - for (o.debug && (n = new Date(), b("Detecting parsers for each column")), f = { - extractors: [], - parsers: [] - }; s > q; ) { - if (d = p[q].rows, d.length) for (g = o.columns, h = 0; g > h; h++) i = o.$headerIndexed[h], - j = u.getColumnData(a, o.headers, h), m = u.getParserById(u.getData(i, j, "extractor")), - l = u.getParserById(u.getData(i, j, "sorter")), k = "false" === u.getData(i, j, "parser"), - o.empties[h] = (u.getData(i, j, "empty") || o.emptyTo || (o.emptyToBottom ? "bottom" : "top")).toLowerCase(), - o.strings[h] = (u.getData(i, j, "string") || o.stringTo || "max").toLowerCase(), - k && (l = u.getParserById("no-parser")), m || (m = !1), l || (l = e(a, d, -1, h)), - o.debug && (r += "column:" + h + "; extractor:" + m.id + "; parser:" + l.id + "; string:" + o.strings[h] + "; empty: " + o.empties[h] + "\n"), - f.parsers[h] = l, f.extractors[h] = m; - q += f.parsers.length ? s : 1; + var b = a.tablesorter = { + version: "2.25.5", + parsers: [], + widgets: [], + defaults: { + theme: "default", + widthFixed: !1, + showProcessing: !1, + headerTemplate: "{content}", + onRenderTemplate: null, + onRenderHeader: null, + cancelSelection: !0, + tabIndex: !0, + dateFormat: "mmddyyyy", + sortMultiSortKey: "shiftKey", + sortResetKey: "ctrlKey", + usNumberFormat: !0, + delayInit: !1, + serverSideSorting: !1, + resort: !0, + headers: {}, + ignoreCase: !0, + sortForce: null, + sortList: [], + sortAppend: null, + sortStable: !1, + sortInitialOrder: "asc", + sortLocaleCompare: !1, + sortReset: !1, + sortRestart: !1, + emptyTo: "bottom", + stringTo: "max", + duplicateSpan: !0, + textExtraction: "basic", + textAttribute: "data-text", + textSorter: null, + numberSorter: null, + widgets: [], + widgetOptions: { + zebra: [ "even", "odd" ] + }, + initWidgets: !0, + widgetClass: "widget-{name}", + initialized: null, + tableClass: "", + cssAsc: "", + cssDesc: "", + cssNone: "", + cssHeader: "", + cssHeaderRow: "", + cssProcessing: "", + cssChildRow: "tablesorter-childRow", + cssInfoBlock: "tablesorter-infoOnly", + cssNoSort: "tablesorter-noSort", + cssIgnoreRow: "tablesorter-ignoreRow", + cssIcon: "tablesorter-icon", + cssIconNone: "", + cssIconAsc: "", + cssIconDesc: "", + pointerClick: "click", + pointerDown: "mousedown", + pointerUp: "mouseup", + selectorHeaders: "> thead th, > thead td", + selectorSort: "th, td", + selectorRemove: ".remove-me", + debug: !1, + headerList: [], + empties: {}, + strings: {}, + parsers: [] + }, + css: { + table: "tablesorter", + cssHasChild: "tablesorter-hasChildRow", + childRow: "tablesorter-childRow", + colgroup: "tablesorter-colgroup", + header: "tablesorter-header", + headerRow: "tablesorter-headerRow", + headerIn: "tablesorter-header-inner", + icon: "tablesorter-icon", + processing: "tablesorter-processing", + sortAsc: "tablesorter-headerAsc", + sortDesc: "tablesorter-headerDesc", + sortNone: "tablesorter-headerUnSorted" + }, + language: { + sortAsc: "Ascending sort applied, ", + sortDesc: "Descending sort applied, ", + sortNone: "No sort applied, ", + sortDisabled: "sorting is disabled", + nextAsc: "activate to apply an ascending sort", + nextDesc: "activate to apply a descending sort", + nextNone: "activate to remove the sort" + }, + regex: { + templateContent: /\{content\}/g, + templateIcon: /\{icon\}/g, + templateName: /\{name\}/i, + spaces: /\s+/g, + nonWord: /\W/g, + formElements: /(input|select|button|textarea)/i, + chunk: /(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi, + chunks: /(^\\0|\\0$)/, + hex: /^0x[0-9a-f]+$/i, + comma: /,/g, + digitNonUS: /[\s|\.]/g, + digitNegativeTest: /^\s*\([.\d]+\)/, + digitNegativeReplace: /^\s*\(([.\d]+)\)/, + digitTest: /^[\-+(]?\d+[)]?$/, + digitReplace: /[,.'"\s]/g + }, + string: { + max: 1, + min: -1, + emptymin: 1, + emptymax: -1, + zero: 0, + none: 0, + "null": 0, + top: !0, + bottom: !1 + }, + keyCodes: { + enter: 13 + }, + dates: {}, + instanceMethods: {}, + setup: function(c, d) { + if (!c || !c.tHead || 0 === c.tBodies.length || c.hasInitialized === !0) return void (d.debug && (c.hasInitialized ? console.warn("Stopping initialization. Tablesorter has already been initialized") : console.error("Stopping initialization! No table, thead or tbody", c))); + var e = "", f = a(c), g = a.metadata; + c.hasInitialized = !1, c.isProcessing = !0, c.config = d, a.data(c, "tablesorter", d), + d.debug && (console[console.group ? "group" : "log"]("Initializing tablesorter"), + a.data(c, "startoveralltimer", new Date())), d.supportsDataObject = function(a) { + return a[0] = parseInt(a[0], 10), a[0] > 1 || 1 === a[0] && parseInt(a[1], 10) >= 4; + }(a.fn.jquery.split(".")), d.emptyTo = d.emptyTo.toLowerCase(), d.stringTo = d.stringTo.toLowerCase(), + d.last = { + sortList: [], + clickedIndex: -1 + }, /tablesorter\-/.test(f.attr("class")) || (e = "" !== d.theme ? " tablesorter-" + d.theme : ""), + d.table = c, d.$table = f.addClass(b.css.table + " " + d.tableClass + e).attr("role", "grid"), + d.$headers = f.find(d.selectorHeaders), d.namespace ? d.namespace = "." + d.namespace.replace(b.regex.nonWord, "") : d.namespace = ".tablesorter" + Math.random().toString(16).slice(2), + d.$table.children().children("tr").attr("role", "row"), d.$tbodies = f.children("tbody:not(." + d.cssInfoBlock + ")").attr({ + "aria-live": "polite", + "aria-relevant": "all" + }), d.$table.children("caption").length && (e = d.$table.children("caption")[0], + e.id || (e.id = d.namespace.slice(1) + "caption"), d.$table.attr("aria-labelledby", e.id)), + d.widgetInit = {}, d.textExtraction = d.$table.attr("data-text-extraction") || d.textExtraction || "basic", + b.buildHeaders(d), b.fixColumnWidth(c), b.addWidgetFromClass(c), b.applyWidgetOptions(c), + b.setupParsers(d), d.totalRows = 0, d.delayInit || b.buildCache(d), b.bindEvents(c, d.$headers, !0), + b.bindMethods(d), d.supportsDataObject && "undefined" != typeof f.data().sortlist ? d.sortList = f.data().sortlist : g && f.metadata() && f.metadata().sortlist && (d.sortList = f.metadata().sortlist), + b.applyWidget(c, !0), d.sortList.length > 0 ? b.sortOn(d, d.sortList, {}, !d.initWidgets) : (b.setHeadersCss(d), + d.initWidgets && b.applyWidget(c, !1)), d.showProcessing && f.unbind("sortBegin" + d.namespace + " sortEnd" + d.namespace).bind("sortBegin" + d.namespace + " sortEnd" + d.namespace, function(a) { + clearTimeout(d.timerProcessing), b.isProcessing(c), "sortBegin" === a.type && (d.timerProcessing = setTimeout(function() { + b.isProcessing(c, !0); + }, 500)); + }), c.hasInitialized = !0, c.isProcessing = !1, d.debug && (console.log("Overall initialization time: " + b.benchmark(a.data(c, "startoveralltimer"))), + d.debug && console.groupEnd && console.groupEnd()), f.triggerHandler("tablesorter-initialized", c), + "function" == typeof d.initialized && d.initialized(c); + }, + bindMethods: function(c) { + var d = c.$table, e = c.namespace, f = "sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(e + " "); + d.unbind(f.replace(b.regex.spaces, " ")).bind("sortReset" + e, function(a, c) { + a.stopPropagation(), b.sortReset(this.config, c); + }).bind("updateAll" + e, function(a, c, d) { + a.stopPropagation(), b.updateAll(this.config, c, d); + }).bind("update" + e + " updateRows" + e, function(a, c, d) { + a.stopPropagation(), b.update(this.config, c, d); + }).bind("updateHeaders" + e, function(a, c) { + a.stopPropagation(), b.updateHeaders(this.config, c); + }).bind("updateCell" + e, function(a, c, d, e) { + a.stopPropagation(), b.updateCell(this.config, c, d, e); + }).bind("addRows" + e, function(a, c, d, e) { + a.stopPropagation(), b.addRows(this.config, c, d, e); + }).bind("updateComplete" + e, function() { + this.isUpdating = !1; + }).bind("sorton" + e, function(a, c, d, e) { + a.stopPropagation(), b.sortOn(this.config, c, d, e); + }).bind("appendCache" + e, function(c, d, e) { + c.stopPropagation(), b.appendCache(this.config, e), a.isFunction(d) && d(this); + }).bind("updateCache" + e, function(a, c, d) { + a.stopPropagation(), b.updateCache(this.config, c, d); + }).bind("applyWidgetId" + e, function(a, c) { + a.stopPropagation(), b.applyWidgetId(this, c); + }).bind("applyWidgets" + e, function(a, c) { + a.stopPropagation(), b.applyWidget(this, c); + }).bind("refreshWidgets" + e, function(a, c, d) { + a.stopPropagation(), b.refreshWidgets(this, c, d); + }).bind("removeWidget" + e, function(a, c, d) { + a.stopPropagation(), b.removeWidget(this, c, d); + }).bind("destroy" + e, function(a, c, d) { + a.stopPropagation(), b.destroy(this, c, d); + }).bind("resetToLoadState" + e, function(d) { + d.stopPropagation(), b.removeWidget(this, !0, !1), c = a.extend(!0, b.defaults, c.originalSettings), + this.hasInitialized = !1, b.setup(this, c); + }); + }, + bindEvents: function(c, d, e) { + c = a(c)[0]; + var f, g = c.config, h = g.namespace, i = null; + e !== !0 && (d.addClass(h.slice(1) + "_extra_headers"), f = a.fn.closest ? d.closest("table")[0] : d.parents("table")[0], + f && "TABLE" === f.nodeName && f !== c && a(f).addClass(h.slice(1) + "_extra_table")), + f = (g.pointerDown + " " + g.pointerUp + " " + g.pointerClick + " sort keyup ").replace(b.regex.spaces, " ").split(" ").join(h + " "), + d.find(g.selectorSort).add(d.filter(g.selectorSort)).unbind(f).bind(f, function(c, e) { + var f, h, j, k = a(c.target), l = " " + c.type + " "; + if (!(1 !== (c.which || c.button) && !l.match(" " + g.pointerClick + " | sort | keyup ") || " keyup " === l && c.which !== b.keyCodes.enter || l.match(" " + g.pointerClick + " ") && "undefined" != typeof c.which || l.match(" " + g.pointerUp + " ") && i !== c.target && e !== !0)) { + if (l.match(" " + g.pointerDown + " ")) return i = c.target, j = k.jquery.split("."), + void ("1" === j[0] && j[1] < 4 && c.preventDefault()); + if (i = null, b.regex.formElements.test(c.target.nodeName) || k.hasClass(g.cssNoSort) || k.parents("." + g.cssNoSort).length > 0 || k.parents("button").length > 0) return !g.cancelSelection; + g.delayInit && b.isEmptyObject(g.cache) && b.buildCache(g), f = a.fn.closest ? a(this).closest("th, td") : /TH|TD/.test(this.nodeName) ? a(this) : a(this).parents("th, td"), + j = d.index(f), g.last.clickedIndex = 0 > j ? f.attr("data-column") : j, h = g.$headers[g.last.clickedIndex], + h && !h.sortDisabled && b.initSort(g, h, c); } - o.debug && (b(r ? r : "No parsers detected"), c("Completed detecting parsers", n)), - o.parsers = f.parsers, o.extractors = f.extractors; + }), g.cancelSelection && d.attr("unselectable", "on").bind("selectstart", !1).css({ + "user-select": "none", + MozUserSelect: "none" + }); + }, + buildHeaders: function(c) { + var d, e, f, g; + for (c.headerList = [], c.headerContent = [], c.sortVars = [], c.debug && (f = new Date()), + c.columns = b.computeColumnIndex(c.$table.children("thead, tfoot").children("tr")), + e = c.cssIcon ? '' : "", + c.$headers = a(a.map(c.$table.find(c.selectorHeaders), function(d, f) { + var g, h, i, j, k, l = a(d); + return l.parent().hasClass(c.cssIgnoreRow) ? void 0 : (g = b.getColumnData(c.table, c.headers, f, !0), + c.headerContent[f] = l.html(), "" === c.headerTemplate || l.find("." + b.css.headerIn).length || (j = c.headerTemplate.replace(b.regex.templateContent, l.html()).replace(b.regex.templateIcon, l.find("." + b.css.icon).length ? "" : e), + c.onRenderTemplate && (h = c.onRenderTemplate.apply(l, [ f, j ]), h && "string" == typeof h && (j = h)), + l.html('
' + j + "
")), c.onRenderHeader && c.onRenderHeader.apply(l, [ f, c, c.$table ]), + i = parseInt(l.attr("data-column"), 10), d.column = i, k = b.getData(l, g, "sortInitialOrder") || c.sortInitialOrder, + c.sortVars[i] = { + count: -1, + order: b.getOrder(k) ? [ 1, 0, 2 ] : [ 0, 1, 2 ], + lockedOrder: !1 + }, k = b.getData(l, g, "lockedOrder") || !1, "undefined" != typeof k && k !== !1 && (c.sortVars[i].lockedOrder = !0, + c.sortVars[i].order = b.getOrder(k) ? [ 1, 1, 1 ] : [ 0, 0, 0 ]), c.headerList[f] = d, + l.addClass(b.css.header + " " + c.cssHeader).parent().addClass(b.css.headerRow + " " + c.cssHeaderRow).attr("role", "row"), + c.tabIndex && l.attr("tabindex", 0), d); + })), c.$headerIndexed = [], g = 0; g < c.columns; g++) b.isEmptyObject(c.sortVars[g]) && (c.sortVars[g] = {}), + d = c.$headers.filter('[data-column="' + g + '"]'), c.$headerIndexed[g] = d.length ? d.not(".sorter-false").length ? d.not(".sorter-false").filter(":last") : d.filter(":last") : a(); + c.$table.find(c.selectorHeaders).attr({ + scope: "col", + role: "columnheader" + }), b.updateHeader(c), c.debug && (console.log("Built headers:" + b.benchmark(f)), + console.log(c.$headers)); + }, + addInstanceMethods: function(c) { + a.extend(b.instanceMethods, c); + }, + setupParsers: function(a, c) { + var d, e, f, g, h, i, j, k, l, m, n, o, p, q, r = a.table, s = 0, t = {}; + if (a.$tbodies = a.$table.children("tbody:not(." + a.cssInfoBlock + ")"), p = "undefined" == typeof c ? a.$tbodies : c, + q = p.length, 0 === q) return a.debug ? console.warn("Warning: *Empty table!* Not building a parser cache") : ""; + for (a.debug && (o = new Date(), console[console.group ? "group" : "log"]("Detecting parsers for each column")), + e = { + extractors: [], + parsers: [] + }; q > s; ) { + if (d = p[s].rows, d.length) for (h = 0, g = a.columns, i = 0; g > i; i++) { + if (j = a.$headerIndexed[h], j && j.length && (k = b.getColumnData(r, a.headers, h), + n = b.getParserById(b.getData(j, k, "extractor")), m = b.getParserById(b.getData(j, k, "sorter")), + l = "false" === b.getData(j, k, "parser"), a.empties[h] = (b.getData(j, k, "empty") || a.emptyTo || (a.emptyToBottom ? "bottom" : "top")).toLowerCase(), + a.strings[h] = (b.getData(j, k, "string") || a.stringTo || "max").toLowerCase(), + l && (m = b.getParserById("no-parser")), n || (n = !1), m || (m = b.detectParserForColumn(a, d, -1, h)), + a.debug && (t["(" + h + ") " + j.text()] = { + parser: m.id, + extractor: n ? n.id : "none", + string: a.strings[h], + empty: a.empties[h] + }), e.parsers[h] = m, e.extractors[h] = n, f = j[0].colSpan - 1, f > 0)) for (h += f, + g += f; f + 1 > 0; ) e.parsers[h - f] = m, e.extractors[h - f] = n, f--; + h++; + } + s += e.parsers.length ? q : 1; } - function g(d) { - var e, f, g, h, i, j, k, l, m, n, o, p, q, r = d.config, s = r.$tbodies, t = r.extractors, v = r.parsers; - if (r.cache = {}, r.totalRows = 0, !v) return r.debug ? b("Warning: *Empty table!* Not building a cache") : ""; - for (r.debug && (n = new Date()), r.showProcessing && u.isProcessing(d, !0), k = 0; k < s.length; k++) { - for (q = [], e = r.cache[k] = { - normalized: [] - }, o = s[k] && s[k].rows.length || 0, i = 0; o > i; ++i) if (p = { - child: [], - raw: [] - }, l = a(s[k].rows[i]), m = [], l.hasClass(r.cssChildRow) && 0 !== i) f = e.normalized.length - 1, - e.normalized[f][r.columns].$row = e.normalized[f][r.columns].$row.add(l), l.prev().hasClass(r.cssChildRow) || l.prev().addClass(u.css.cssHasChild), - p.child[f] = a.trim(l[0].textContent || l.text() || ""); else { - for (p.$row = l, p.order = i, j = 0; j < r.columns; ++j) "undefined" != typeof v[j] ? (f = u.getElementText(r, l[0].cells[j], j), - p.raw.push(f), g = "undefined" == typeof t[j].id ? f : t[j].format(f, d, l[0].cells[j], j), - h = "no-parser" === v[j].id ? "" : v[j].format(g, d, l[0].cells[j], j), m.push(r.ignoreCase && "string" == typeof h ? h.toLowerCase() : h), - "numeric" === (v[j].type || "").toLowerCase() && (q[j] = Math.max(Math.abs(h) || 0, q[j] || 0))) : r.debug && b("No parser found for cell:", l[0].cells[j], "does it have a header?"); - m[r.columns] = p, e.normalized.push(m); + a.debug && (b.isEmptyObject(t) ? console.warn(" No parsers detected!") : console[console.table ? "table" : "log"](t), + console.log("Completed detecting parsers" + b.benchmark(o)), console.groupEnd && console.groupEnd()), + a.parsers = e.parsers, a.extractors = e.extractors; + }, + addParser: function(a) { + var c, d = b.parsers.length, e = !0; + for (c = 0; d > c; c++) b.parsers[c].id.toLowerCase() === a.id.toLowerCase() && (e = !1); + e && (b.parsers[b.parsers.length] = a); + }, + getParserById: function(a) { + if ("false" == a) return !1; + var c, d = b.parsers.length; + for (c = 0; d > c; c++) if (b.parsers[c].id.toLowerCase() === a.toString().toLowerCase()) return b.parsers[c]; + return !1; + }, + detectParserForColumn: function(c, d, e, f) { + for (var g, h, i, j = b.parsers.length, k = !1, l = "", m = !0; "" === l && m; ) e++, + i = d[e], i && 50 > e ? i.className.indexOf(b.cssIgnoreRow) < 0 && (k = d[e].cells[f], + l = b.getElementText(c, k, f), h = a(k), c.debug && console.log("Checking if value was empty on row " + e + ", column: " + f + ': "' + l + '"')) : m = !1; + for (;--j >= 0; ) if (g = b.parsers[j], g && "text" !== g.id && g.is && g.is(l, c.table, k, h)) return g; + return b.getParserById("text"); + }, + getElementText: function(c, d, e) { + if (!d) return ""; + var f, g = c.textExtraction || "", h = d.jquery ? d : a(d); + return "string" == typeof g ? "basic" === g && "undefined" != typeof (f = h.attr(c.textAttribute)) ? a.trim(f) : a.trim(d.textContent || h.text()) : "function" == typeof g ? a.trim(g(h[0], c.table, e)) : "function" == typeof (f = b.getColumnData(c.table, g, e)) ? a.trim(f(h[0], c.table, e)) : a.trim(h[0].textContent || h.text()); + }, + getParsedText: function(a, c, d, e) { + "undefined" == typeof e && (e = b.getElementText(a, c, d)); + var f = "" + e, g = a.parsers[d], h = a.extractors[d]; + return g && (h && "function" == typeof h.format && (e = h.format(e, a.table, c, d)), + f = "no-parser" === g.id ? "" : g.format("" + e, a.table, c, d), a.ignoreCase && "string" == typeof f && (f = f.toLowerCase())), + f; + }, + buildCache: function(c, d, e) { + var f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B = c.table, C = c.parsers; + if (c.$tbodies = c.$table.children("tbody:not(." + c.cssInfoBlock + ")"), l = "undefined" == typeof e ? c.$tbodies : e, + c.cache = {}, c.totalRows = 0, !C) return c.debug ? console.warn("Warning: *Empty table!* Not building a cache") : ""; + for (c.debug && (q = new Date()), c.showProcessing && b.isProcessing(B, !0), k = 0; k < l.length; k++) { + for (u = [], f = c.cache[k] = { + normalized: [] + }, r = l[k] && l[k].rows.length || 0, i = 0; r > i; ++i) if (s = { + child: [], + raw: [] + }, m = a(l[k].rows[i]), n = [], m.hasClass(c.cssChildRow) && 0 !== i) for (z = f.normalized.length - 1, + t = f.normalized[z][c.columns], t.$row = t.$row.add(m), m.prev().hasClass(c.cssChildRow) || m.prev().addClass(b.css.cssHasChild), + o = m.children("th, td"), z = t.child.length, t.child[z] = [], w = 0, y = c.columns, + j = 0; y > j; j++) p = o[j], p && (t.child[z][j] = b.getParsedText(c, p, j), v = o[j].colSpan - 1, + v > 0 && (w += v, y += v)), w++; else { + for (s.$row = m, s.order = i, w = 0, y = c.columns, j = 0; y > j; ++j) { + if (p = m[0].cells[j], p && w < c.columns && (x = "undefined" != typeof C[w], !x && c.debug && console.warn("No parser found for row: " + i + ", column: " + j + '; cell containing: "' + a(p).text() + '"; does it have a header?'), + g = b.getElementText(c, p, w), s.raw[w] = g, h = b.getParsedText(c, p, w, g), n[w] = h, + x && "numeric" === (C[w].type || "").toLowerCase() && (u[w] = Math.max(Math.abs(h) || 0, u[w] || 0)), + v = p.colSpan - 1, v > 0)) { + for (A = 0; v >= A; ) s.raw[w + A] = c.duplicateSpan || 0 === A ? g : "", n[w + A] = c.duplicateSpan || 0 === A ? g : "", + A++; + w += v, y += v; + } + w++; } - e.colMax = q, r.totalRows += e.normalized.length; + n[c.columns] = s, f.normalized[f.normalized.length] = n; } - r.showProcessing && u.isProcessing(d), r.debug && c("Building cache for " + o + " rows", n); + f.colMax = u, c.totalRows += f.normalized.length; } - function h(a, b) { - var e, f, g, h, i, j, k, l = a.config, m = l.widgetOptions, n = l.$tbodies, o = [], p = l.cache; - if (d(p)) return l.appender ? l.appender(a, o) : a.isUpdating ? l.$table.trigger("updateComplete", a) : ""; - for (l.debug && (k = new Date()), j = 0; j < n.length; j++) if (g = n.eq(j), g.length) { - for (h = u.processTbody(a, g, !0), e = p[j].normalized, f = e.length, i = 0; f > i; i++) o.push(e[i][l.columns].$row), - l.appender && (!l.pager || l.pager.removeRows && m.pager_removeRows || l.pager.ajax) || h.append(e[i][l.columns].$row); - u.processTbody(a, h, !1); - } - l.appender && l.appender(a, o), l.debug && c("Rebuilt table", k), b || l.appender || u.applyWidget(a), - a.isUpdating && l.$table.trigger("updateComplete", a); + if (c.showProcessing && b.isProcessing(B), c.debug) { + for (z = Math.min(5, c.cache[0].normalized.length), console[console.group ? "group" : "log"]("Building cache for " + c.totalRows + " rows (showing " + z + " rows in log)" + b.benchmark(q)), + g = {}, j = 0; j < c.columns; j++) for (w = 0; z > w; w++) g["row: " + w] || (g["row: " + w] = {}), + g["row: " + w][c.$headerIndexed[j].text()] = c.cache[0].normalized[w][j]; + console[console.table ? "table" : "log"](g), console.groupEnd && console.groupEnd(); } - function i(a) { - return /^d/i.test(a) || 1 === a; + a.isFunction(d) && d(B); + }, + getColumnText: function(c, d, e, f) { + c = a(c)[0]; + var g, h, i, j, k, l, m, n, o, p, q = "function" == typeof e, r = "all" === d, s = { + raw: [], + parsed: [], + $cell: [] + }, t = c.config; + if (!b.isEmptyObject(t)) { + for (k = t.$tbodies.length, g = 0; k > g; g++) for (i = t.cache[g].normalized, l = i.length, + h = 0; l > h; h++) j = i[h], (!f || j[t.columns].$row.is(f)) && (p = !0, n = r ? j.slice(0, t.columns) : j[d], + j = j[t.columns], m = r ? j.raw : j.raw[d], o = r ? j.$row.children() : j.$row.children().eq(d), + q && (p = e({ + tbodyIndex: g, + rowIndex: h, + parsed: n, + raw: m, + $row: j.$row, + $cell: o + })), p !== !1 && (s.parsed[s.parsed.length] = n, s.raw[s.raw.length] = m, s.$cell[s.$cell.length] = o)); + return s; } - function j(d) { - var e, f, g, h, j, k, m, n, o = d.config; - for (o.headerList = [], o.headerContent = [], o.debug && (m = new Date()), o.columns = u.computeColumnIndex(o.$table.children("thead, tfoot").children("tr")), - h = o.cssIcon ? '' : "", - o.$headers = a(a.map(a(d).find(o.selectorHeaders), function(b, c) { - return f = a(b), f.parent().hasClass(o.cssIgnoreRow) ? void 0 : (e = u.getColumnData(d, o.headers, c, !0), - o.headerContent[c] = f.html(), "" === o.headerTemplate || f.find("." + u.css.headerIn).length || (j = o.headerTemplate.replace(/\{content\}/g, f.html()).replace(/\{icon\}/g, f.find("." + u.css.icon).length ? "" : h), - o.onRenderTemplate && (g = o.onRenderTemplate.apply(f, [ c, j ]), g && "string" == typeof g && (j = g)), - f.html('
' + j + "
")), o.onRenderHeader && o.onRenderHeader.apply(f, [ c, o, o.$table ]), - b.column = parseInt(f.attr("data-column"), 10), b.order = i(u.getData(f, e, "sortInitialOrder") || o.sortInitialOrder) ? [ 1, 0, 2 ] : [ 0, 1, 2 ], - b.count = -1, b.lockedOrder = !1, k = u.getData(f, e, "lockedOrder") || !1, "undefined" != typeof k && k !== !1 && (b.order = b.lockedOrder = i(k) ? [ 1, 1, 1 ] : [ 0, 0, 0 ]), - f.addClass(u.css.header + " " + o.cssHeader), o.headerList[c] = b, f.parent().addClass(u.css.headerRow + " " + o.cssHeaderRow).attr("role", "row"), - o.tabIndex && f.attr("tabindex", 0), b); - })), o.$headerIndexed = [], n = 0; n < o.columns; n++) f = o.$headers.filter('[data-column="' + n + '"]'), - o.$headerIndexed[n] = f.not(".sorter-false").length ? f.not(".sorter-false").filter(":last") : f.filter(":last"); - a(d).find(o.selectorHeaders).attr({ - scope: "col", - role: "columnheader" - }), l(d), o.debug && (c("Built headers:", m), b(o.$headers)); + t.debug && console.warn("No cache found - aborting getColumnText function!"); + }, + setHeadersCss: function(c) { + var d, e, f, g = c.sortList, h = g.length, i = b.css.sortNone + " " + c.cssNone, j = [ b.css.sortAsc + " " + c.cssAsc, b.css.sortDesc + " " + c.cssDesc ], k = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ], l = [ "ascending", "descending" ], m = c.$table.find("tfoot tr").children("td, th").add(a(c.namespace + "_extra_headers")).removeClass(j.join(" ")); + for (c.$headers.removeClass(j.join(" ")).addClass(i).attr("aria-sort", "none").find("." + b.css.icon).removeClass(k.join(" ")).addClass(k[2]), + e = 0; h > e; e++) if (2 !== g[e][1] && (d = c.$headers.filter(function(a) { + for (var d = !0, e = c.$headers.eq(a), f = parseInt(e.attr("data-column"), 10), g = f + c.$headers[a].colSpan; g > f; f++) d = d ? d || b.isValueInArray(f, c.sortList) > -1 : !1; + return d; + }), d = d.not(".sorter-false").filter('[data-column="' + g[e][0] + '"]' + (1 === h ? ":last" : "")), + d.length)) { + for (f = 0; f < d.length; f++) d[f].sortDisabled || d.eq(f).removeClass(i).addClass(j[g[e][1]]).attr("aria-sort", l[g[e][1]]).find("." + b.css.icon).removeClass(k[2]).addClass(k[g[e][1]]); + m.length && m.filter('[data-column="' + g[e][0] + '"]').removeClass(i).addClass(j[g[e][1]]); } - function k(a, b, c) { - var d = a.config; - d.$table.find(d.selectorRemove).remove(), f(a), g(a), s(d, b, c); + for (h = c.$headers.length, e = 0; h > e; e++) b.setColumnAriaLabel(c, c.$headers.eq(e)); + }, + setColumnAriaLabel: function(c, d, e) { + if (d.length) { + var f = parseInt(d.attr("data-column"), 10), g = d.hasClass(b.css.sortAsc) ? "sortAsc" : d.hasClass(b.css.sortDesc) ? "sortDesc" : "sortNone", h = a.trim(d.text()) + ": " + b.language[g]; + d.hasClass("sorter-false") || e === !1 ? h += b.language.sortDisabled : (e = c.sortVars[f].order[(c.sortVars[f].count + 1) % (c.sortReset ? 3 : 2)], + h += b.language[0 === e ? "nextAsc" : 1 === e ? "nextDesc" : "nextNone"]), d.attr("aria-label", h); } - function l(b) { - var c, d, e, f = b.config; - f.$headers.each(function(g, h) { - d = a(h), e = u.getColumnData(b, f.headers, g, !0), c = "false" === u.getData(h, e, "sorter") || "false" === u.getData(h, e, "parser"), - h.sortDisabled = c, d[c ? "addClass" : "removeClass"]("sorter-false").attr("aria-disabled", "" + c), - b.id && (c ? d.removeAttr("aria-controls") : d.attr("aria-controls", b.id)); - }); + }, + updateHeader: function(a) { + var c, d, e, f, g = a.table, h = a.$headers.length; + for (c = 0; h > c; c++) e = a.$headers.eq(c), f = b.getColumnData(g, a.headers, c, !0), + d = "false" === b.getData(e, f, "sorter") || "false" === b.getData(e, f, "parser"), + b.setColumnSort(a, e, d); + }, + setColumnSort: function(a, b, c) { + var d = a.table.id; + b[0].sortDisabled = c, b[c ? "addClass" : "removeClass"]("sorter-false").attr("aria-disabled", "" + c), + a.tabIndex && (c ? b.removeAttr("tabindex") : b.attr("tabindex", "0")), d && (c ? b.removeAttr("aria-controls") : b.attr("aria-controls", d)); + }, + updateHeaderSortCount: function(c, d) { + var e, f, g, h, i, j, k, l, m = d || c.sortList, n = m.length; + for (c.sortList = [], h = 0; n > h; h++) if (k = m[h], e = parseInt(k[0], 10), e < c.columns) { + switch (c.sortVars[e].order || (l = c.sortVars[e].order = b.getOrder(c.sortInitialOrder) ? [ 1, 0, 2 ] : [ 0, 1, 2 ], + c.sortVars[e].count = 0), l = c.sortVars[e].order, f = ("" + k[1]).match(/^(1|d|s|o|n)/), + f = f ? f[0] : "") { + case "1": + case "d": + f = 1; + break; + + case "s": + f = i || 0; + break; + + case "o": + j = l[(i || 0) % (c.sortReset ? 3 : 2)], f = 0 === j ? 1 : 1 === j ? 0 : 2; + break; + + case "n": + f = l[++c.sortVars[e].count % (c.sortReset ? 3 : 2)]; + break; + + default: + f = 0; + } + i = 0 === h ? f : i, g = [ e, parseInt(f, 10) || 0 ], c.sortList[c.sortList.length] = g, + f = a.inArray(g[1], l), c.sortVars[e].count = f >= 0 ? f : g[1] % (c.sortReset ? 3 : 2); } - function m(b) { - var c, d, e, f = b.config, g = f.sortList, h = g.length, i = u.css.sortNone + " " + f.cssNone, j = [ u.css.sortAsc + " " + f.cssAsc, u.css.sortDesc + " " + f.cssDesc ], k = [ f.cssIconAsc, f.cssIconDesc, f.cssIconNone ], l = [ "ascending", "descending" ], m = a(b).find("tfoot tr").children().add(a(f.namespace + "_extra_headers")).removeClass(j.join(" ")); - for (f.$headers.removeClass(j.join(" ")).addClass(i).attr("aria-sort", "none").find("." + u.css.icon).removeClass(k.join(" ")).addClass(k[2]), - d = 0; h > d; d++) if (2 !== g[d][1] && (c = f.$headers.not(".sorter-false").filter('[data-column="' + g[d][0] + '"]' + (1 === h ? ":last" : "")), - c.length)) { - for (e = 0; e < c.length; e++) c[e].sortDisabled || c.eq(e).removeClass(i).addClass(j[g[d][1]]).attr("aria-sort", l[g[d][1]]).find("." + u.css.icon).removeClass(k[2]).addClass(k[g[d][1]]); - m.length && m.filter('[data-column="' + g[d][0] + '"]').removeClass(i).addClass(j[g[d][1]]); + }, + updateAll: function(a, c, d) { + var e = a.table; + e.isUpdating = !0, b.refreshWidgets(e, !0, !0), b.buildHeaders(a), b.bindEvents(e, a.$headers, !0), + b.bindMethods(a), b.commonUpdate(a, c, d); + }, + update: function(a, c, d) { + var e = a.table; + e.isUpdating = !0, b.updateHeader(a), b.commonUpdate(a, c, d); + }, + updateHeaders: function(a, c) { + a.table.isUpdating = !0, b.buildHeaders(a), b.bindEvents(a.table, a.$headers, !0), + b.resortComplete(a, c); + }, + updateCell: function(c, d, e, f) { + if (b.isEmptyObject(c.cache)) return b.updateHeader(c), void b.commonUpdate(c, e, f); + c.table.isUpdating = !0, c.$table.find(c.selectorRemove).remove(); + var g, h, i, j, k, l, m = c.$tbodies, n = a(d), o = m.index(a.fn.closest ? n.closest("tbody") : n.parents("tbody").filter(":first")), p = c.cache[o], q = a.fn.closest ? n.closest("tr") : n.parents("tr").filter(":first"); + if (d = n[0], m.length && o >= 0) { + if (i = m.eq(o).find("tr").index(q), k = p.normalized[i], l = q[0].cells.length, + l !== c.columns) for (j = 0, g = !1, h = 0; l > h; h++) g || q[0].cells[h] === d ? g = !0 : j += q[0].cells[h].colSpan; else j = n.index(); + g = b.getElementText(c, d, j), k[c.columns].raw[j] = g, g = b.getParsedText(c, d, j, g), + k[j] = g, k[c.columns].$row = q, "numeric" === (c.parsers[j].type || "").toLowerCase() && (p.colMax[j] = Math.max(Math.abs(g) || 0, p.colMax[j] || 0)), + g = "undefined" !== e ? e : c.resort, g !== !1 ? b.checkResort(c, g, f) : b.resortComplete(c, f); + } else c.debug && console.error("updateCell aborted, tbody missing or not within the indicated table"), + c.table.isUpdating = !1; + }, + addRows: function(c, d, e, f) { + var g, h, i, j, k, l, m, n, o, p, q, r, s, t = "string" == typeof d && 1 === c.$tbodies.length && / j; j++) { + for (o = 0, m = d[j].cells.length, n = c.cache[i].normalized.length, q = [], p = { + child: [], + raw: [], + $row: d.eq(j), + order: n + }, l = 0; m > l; l++) r = d[j].cells[l], g = b.getElementText(c, r, o), p.raw[o] = g, + h = b.getParsedText(c, r, o, g), q[o] = h, "numeric" === (c.parsers[o].type || "").toLowerCase() && (c.cache[i].colMax[o] = Math.max(Math.abs(h) || 0, c.cache[i].colMax[o] || 0)), + s = r.colSpan - 1, s > 0 && (o += s), o++; + q[c.columns] = p, c.cache[i].normalized[n] = q; } - f.$headers.not(".sorter-false").each(function() { - var b = a(this), c = this.order[(this.count + 1) % (f.sortReset ? 3 : 2)], d = a.trim(b.text()) + ": " + u.language[b.hasClass(u.css.sortAsc) ? "sortAsc" : b.hasClass(u.css.sortDesc) ? "sortDesc" : "sortNone"] + u.language[0 === c ? "nextAsc" : 1 === c ? "nextDesc" : "nextNone"]; - b.attr("aria-label", d); - }); + b.checkResort(c, e, f); } - function n(b, c) { - var d, e, f, g, h, i, j, k, l = b.config, m = c || l.sortList, n = m.length; - for (l.sortList = [], h = 0; n > h; h++) if (k = m[h], d = parseInt(k[0], 10), g = l.$headerIndexed[d][0]) { - switch (e = ("" + k[1]).match(/^(1|d|s|o|n)/), e = e ? e[0] : "") { - case "1": - case "d": - e = 1; - break; + }, + updateCache: function(a, c, d) { + a.parsers && a.parsers.length || b.setupParsers(a, d), b.buildCache(a, c, d); + }, + appendCache: function(a, c) { + var d, e, f, g, h, i, j, k = a.table, l = a.widgetOptions, m = a.$tbodies, n = [], o = a.cache; + if (b.isEmptyObject(o)) return a.appender ? a.appender(k, n) : k.isUpdating ? a.$table.triggerHandler("updateComplete", k) : ""; + for (a.debug && (j = new Date()), i = 0; i < m.length; i++) if (f = m.eq(i), f.length) { + for (g = b.processTbody(k, f, !0), d = o[i].normalized, e = d.length, h = 0; e > h; h++) n[n.length] = d[h][a.columns].$row, + a.appender && (!a.pager || a.pager.removeRows && l.pager_removeRows || a.pager.ajax) || g.append(d[h][a.columns].$row); + b.processTbody(k, g, !1); + } + a.appender && a.appender(k, n), a.debug && console.log("Rebuilt table" + b.benchmark(j)), + c || a.appender || b.applyWidget(k), k.isUpdating && a.$table.triggerHandler("updateComplete", k); + }, + commonUpdate: function(a, c, d) { + a.$table.find(a.selectorRemove).remove(), b.setupParsers(a), b.buildCache(a), b.checkResort(a, c, d); + }, + initSort: function(c, d, e) { + if (c.table.isUpdating) return setTimeout(function() { + b.initSort(c, d, e); + }, 50); + var f, g, h, i, j, k, l, m = !e[c.sortMultiSortKey], n = c.table, o = c.$headers.length, p = parseInt(a(d).attr("data-column"), 10), q = c.sortVars[p].order; + if (c.$table.triggerHandler("sortStart", n), c.sortVars[p].count = e[c.sortResetKey] ? 2 : (c.sortVars[p].count + 1) % (c.sortReset ? 3 : 2), + c.sortRestart) for (h = 0; o > h; h++) l = c.$headers.eq(h), k = parseInt(l.attr("data-column"), 10), + p !== k && (m || l.hasClass(b.css.sortNone)) && (c.sortVars[k].count = -1); + if (m) { + if (c.sortList = [], c.last.sortList = [], null !== c.sortForce) for (f = c.sortForce, + g = 0; g < f.length; g++) f[g][0] !== p && (c.sortList[c.sortList.length] = f[g]); + if (i = q[c.sortVars[p].count], 2 > i && (c.sortList[c.sortList.length] = [ p, i ], + d.colSpan > 1)) for (g = 1; g < d.colSpan; g++) c.sortList[c.sortList.length] = [ p + g, i ], + c.sortVars[p + g].count = a.inArray(i, q); + } else if (c.sortList = a.extend([], c.last.sortList), b.isValueInArray(p, c.sortList) >= 0) for (g = 0; g < c.sortList.length; g++) k = c.sortList[g], + k[0] === p && (k[1] = q[c.sortVars[p].count], 2 === k[1] && (c.sortList.splice(g, 1), + c.sortVars[p].count = -1)); else if (i = q[c.sortVars[p].count], 2 > i && (c.sortList[c.sortList.length] = [ p, i ], + d.colSpan > 1)) for (g = 1; g < d.colSpan; g++) c.sortList[c.sortList.length] = [ p + g, i ], + c.sortVars[p + g].count = a.inArray(i, q); + if (c.last.sortList = a.extend([], c.sortList), c.sortList.length && c.sortAppend && (f = a.isArray(c.sortAppend) ? c.sortAppend : c.sortAppend[c.sortList[0][0]], + !b.isEmptyObject(f))) for (g = 0; g < f.length; g++) if (f[g][0] !== p && b.isValueInArray(f[g][0], c.sortList) < 0) { + if (i = f[g][1], j = ("" + i).match(/^(a|d|s|o|n)/)) switch (k = c.sortList[0][1], + j[0]) { + case "d": + i = 1; + break; - case "s": - e = i || 0; - break; + case "s": + i = k; + break; - case "o": - j = g.order[(i || 0) % (l.sortReset ? 3 : 2)], e = 0 === j ? 1 : 1 === j ? 0 : 2; - break; + case "o": + i = 0 === k ? 1 : 0; + break; - case "n": - g.count = g.count + 1, e = g.order[g.count % (l.sortReset ? 3 : 2)]; - break; + case "n": + i = (k + 1) % (c.sortReset ? 3 : 2); + break; - default: - e = 0; - } - i = 0 === h ? e : i, f = [ d, parseInt(e, 10) || 0 ], l.sortList.push(f), e = a.inArray(f[1], g.order), - g.count = e >= 0 ? e : f[1] % (l.sortReset ? 3 : 2); + default: + i = 0; } + c.sortList[c.sortList.length] = [ f[g][0], i ]; } - function o(a, b) { - return a && a[b] ? a[b].type || "" : ""; + c.$table.triggerHandler("sortBegin", n), setTimeout(function() { + b.setHeadersCss(c), b.multisort(c), b.appendCache(c), c.$table.triggerHandler("sortBeforeEnd", n), + c.$table.triggerHandler("sortEnd", n); + }, 1); + }, + multisort: function(a) { + var c, d, e, f, g = a.table, h = 0, i = a.textSorter || "", j = a.sortList, k = j.length, l = a.$tbodies.length; + if (!a.serverSideSorting && !b.isEmptyObject(a.cache)) { + for (a.debug && (d = new Date()), c = 0; l > c; c++) e = a.cache[c].colMax, f = a.cache[c].normalized, + f.sort(function(c, d) { + var f, l, m, n, o, p, q; + for (f = 0; k > f; f++) { + if (m = j[f][0], n = j[f][1], h = 0 === n, a.sortStable && c[m] === d[m] && 1 === k) return c[a.columns].order - d[a.columns].order; + if (l = /n/i.test(b.getSortType(a.parsers, m)), l && a.strings[m] ? (l = "boolean" == typeof b.string[a.strings[m]] ? (h ? 1 : -1) * (b.string[a.strings[m]] ? -1 : 1) : a.strings[m] ? b.string[a.strings[m]] || 0 : 0, + o = a.numberSorter ? a.numberSorter(c[m], d[m], h, e[m], g) : b["sortNumeric" + (h ? "Asc" : "Desc")](c[m], d[m], l, e[m], m, a)) : (p = h ? c : d, + q = h ? d : c, o = "function" == typeof i ? i(p[m], q[m], h, m, g) : "object" == typeof i && i.hasOwnProperty(m) ? i[m](p[m], q[m], h, m, g) : b["sortNatural" + (h ? "Asc" : "Desc")](c[m], d[m], m, a)), + o) return o; + } + return c[a.columns].order - d[a.columns].order; + }); + a.debug && console.log("Applying sort " + j.toString() + b.benchmark(d)); } - function p(b, c, d) { - if (b.isUpdating) return setTimeout(function() { - p(b, c, d); - }, 50); - var e, f, g, i, j, k = b.config, l = !d[k.sortMultiSortKey], n = k.$table; - if (n.trigger("sortStart", b), c.count = d[k.sortResetKey] ? 2 : (c.count + 1) % (k.sortReset ? 3 : 2), - k.sortRestart && (f = c, k.$headers.each(function() { - this === f || !l && a(this).is("." + u.css.sortDesc + ",." + u.css.sortAsc) || (this.count = -1); - })), f = parseInt(a(c).attr("data-column"), 10), l) { - if (k.sortList = [], null !== k.sortForce) for (e = k.sortForce, g = 0; g < e.length; g++) e[g][0] !== f && k.sortList.push(e[g]); - if (i = c.order[c.count], 2 > i && (k.sortList.push([ f, i ]), c.colSpan > 1)) for (g = 1; g < c.colSpan; g++) k.sortList.push([ f + g, i ]); - } else { - if (k.sortAppend && k.sortList.length > 1) for (g = 0; g < k.sortAppend.length; g++) j = u.isValueInArray(k.sortAppend[g][0], k.sortList), - j >= 0 && k.sortList.splice(j, 1); - if (u.isValueInArray(f, k.sortList) >= 0) for (g = 0; g < k.sortList.length; g++) j = k.sortList[g], - i = k.$headerIndexed[j[0]][0], j[0] === f && (j[1] = i.order[c.count], 2 === j[1] && (k.sortList.splice(g, 1), - i.count = -1)); else if (i = c.order[c.count], 2 > i && (k.sortList.push([ f, i ]), - c.colSpan > 1)) for (g = 1; g < c.colSpan; g++) k.sortList.push([ f + g, i ]); + }, + resortComplete: function(b, c) { + b.table.isUpdating && b.$table.triggerHandler("updateComplete", b.table), a.isFunction(c) && c(b.table); + }, + checkResort: function(c, d, e) { + var f = a.isArray(d) ? d : c.sortList, g = "undefined" == typeof d ? c.resort : d; + g === !1 || c.serverSideSorting || c.table.isProcessing ? (b.resortComplete(c, e), + b.applyWidget(c.table, !1)) : f.length ? b.sortOn(c, f, function() { + b.resortComplete(c, e); + }, !0) : b.sortReset(c, function() { + b.resortComplete(c, e), b.applyWidget(c.table, !1); + }); + }, + sortOn: function(c, d, e, f) { + var g = c.table; + c.$table.triggerHandler("sortStart", g), b.updateHeaderSortCount(c, d), b.setHeadersCss(c), + c.delayInit && b.isEmptyObject(c.cache) && b.buildCache(c), c.$table.triggerHandler("sortBegin", g), + b.multisort(c), b.appendCache(c, f), c.$table.triggerHandler("sortBeforeEnd", g), + c.$table.triggerHandler("sortEnd", g), b.applyWidget(g), a.isFunction(e) && e(g); + }, + sortReset: function(c, d) { + c.sortList = [], b.setHeadersCss(c), b.multisort(c), b.appendCache(c), a.isFunction(d) && d(c.table); + }, + getSortType: function(a, b) { + return a && a[b] ? a[b].type || "" : ""; + }, + getOrder: function(a) { + return /^d/i.test(a) || 1 === a; + }, + sortNatural: function(a, c) { + if (a === c) return 0; + var d, e, f, g, h, i, j = b.regex; + if (j.hex.test(c)) { + if (d = parseInt(a.match(j.hex), 16), e = parseInt(c.match(j.hex), 16), e > d) return -1; + if (d > e) return 1; + } + for (d = a.replace(j.chunk, "\\0$1\\0").replace(j.chunks, "").split("\\0"), e = c.replace(j.chunk, "\\0$1\\0").replace(j.chunks, "").split("\\0"), + i = Math.max(d.length, e.length), h = 0; i > h; h++) { + if (f = isNaN(d[h]) ? d[h] || 0 : parseFloat(d[h]) || 0, g = isNaN(e[h]) ? e[h] || 0 : parseFloat(e[h]) || 0, + isNaN(f) !== isNaN(g)) return isNaN(f) ? 1 : -1; + if (typeof f != typeof g && (f += "", g += ""), g > f) return -1; + if (f > g) return 1; + } + return 0; + }, + sortNaturalAsc: function(a, c, d, e) { + if (a === c) return 0; + var f = b.string[e.empties[d] || e.emptyTo]; + return "" === a && 0 !== f ? "boolean" == typeof f ? f ? -1 : 1 : -f || -1 : "" === c && 0 !== f ? "boolean" == typeof f ? f ? 1 : -1 : f || 1 : b.sortNatural(a, c); + }, + sortNaturalDesc: function(a, c, d, e) { + if (a === c) return 0; + var f = b.string[e.empties[d] || e.emptyTo]; + return "" === a && 0 !== f ? "boolean" == typeof f ? f ? -1 : 1 : f || 1 : "" === c && 0 !== f ? "boolean" == typeof f ? f ? 1 : -1 : -f || -1 : b.sortNatural(c, a); + }, + sortText: function(a, b) { + return a > b ? 1 : b > a ? -1 : 0; + }, + getTextValue: function(a, b, c) { + if (c) { + var d, e = a ? a.length : 0, f = c + b; + for (d = 0; e > d; d++) f += a.charCodeAt(d); + return b * f; + } + return 0; + }, + sortNumericAsc: function(a, c, d, e, f, g) { + if (a === c) return 0; + var h = b.string[g.empties[f] || g.emptyTo]; + return "" === a && 0 !== h ? "boolean" == typeof h ? h ? -1 : 1 : -h || -1 : "" === c && 0 !== h ? "boolean" == typeof h ? h ? 1 : -1 : h || 1 : (isNaN(a) && (a = b.getTextValue(a, d, e)), + isNaN(c) && (c = b.getTextValue(c, d, e)), a - c); + }, + sortNumericDesc: function(a, c, d, e, f, g) { + if (a === c) return 0; + var h = b.string[g.empties[f] || g.emptyTo]; + return "" === a && 0 !== h ? "boolean" == typeof h ? h ? -1 : 1 : h || 1 : "" === c && 0 !== h ? "boolean" == typeof h ? h ? 1 : -1 : -h || -1 : (isNaN(a) && (a = b.getTextValue(a, d, e)), + isNaN(c) && (c = b.getTextValue(c, d, e)), c - a); + }, + sortNumeric: function(a, b) { + return a - b; + }, + addWidget: function(a) { + b.widgets[b.widgets.length] = a; + }, + hasWidget: function(b, c) { + return b = a(b), b.length && b[0].config && b[0].config.widgetInit[c] || !1; + }, + getWidgetById: function(a) { + var c, d, e = b.widgets.length; + for (c = 0; e > c; c++) if (d = b.widgets[c], d && d.id && d.id.toLowerCase() === a.toLowerCase()) return d; + }, + applyWidgetOptions: function(c) { + var d, e, f = c.config, g = f.widgets.length; + if (g) for (d = 0; g > d; d++) e = b.getWidgetById(f.widgets[d]), e && e.options && (f.widgetOptions = a.extend(!0, {}, e.options, f.widgetOptions)); + }, + addWidgetFromClass: function(a) { + var c, d, e = a.config, f = "^" + e.widgetClass.replace(b.regex.templateName, "(\\S+)+") + "$", g = new RegExp(f, "g"), h = (a.className || "").split(b.regex.spaces); + if (h.length) for (c = h.length, d = 0; c > d; d++) h[d].match(g) && (e.widgets[e.widgets.length] = h[d].replace(g, "$1")); + }, + applyWidgetId: function(c, d, e) { + c = a(c)[0]; + var f, g, h, i = c.config, j = i.widgetOptions, k = b.getWidgetById(d); + k && (h = k.id, f = !1, a.inArray(h, i.widgets) < 0 && (i.widgets[i.widgets.length] = h), + i.debug && (g = new Date()), (e || !i.widgetInit[h]) && (i.widgetInit[h] = !0, c.hasInitialized && b.applyWidgetOptions(c), + "function" == typeof k.init && (f = !0, i.debug && console[console.group ? "group" : "log"]("Initializing " + h + " widget"), + k.init(c, k, i, j))), e || "function" != typeof k.format || (f = !0, i.debug && console[console.group ? "group" : "log"]("Updating " + h + " widget"), + k.format(c, i, j, !1)), i.debug && f && (console.log("Completed " + (e ? "initializing " : "applying ") + h + " widget" + b.benchmark(g)), + console.groupEnd && console.groupEnd())); + }, + applyWidget: function(c, d, e) { + c = a(c)[0]; + var f, g, h, i, j, k = c.config, l = []; + if (d === !1 || !c.hasInitialized || !c.isApplyingWidgets && !c.isUpdating) { + if (k.debug && (j = new Date()), b.addWidgetFromClass(c), clearTimeout(k.timerReady), + k.widgets.length) { + for (c.isApplyingWidgets = !0, k.widgets = a.grep(k.widgets, function(b, c) { + return a.inArray(b, k.widgets) === c; + }), h = k.widgets || [], g = h.length, f = 0; g > f; f++) i = b.getWidgetById(h[f]), + i && i.id && (i.priority || (i.priority = 10), l[f] = i); + for (l.sort(function(a, b) { + return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1; + }), g = l.length, k.debug && console[console.group ? "group" : "log"]("Start " + (d ? "initializing" : "applying") + " widgets"), + f = 0; g > f; f++) i = l[f], i && i.id && b.applyWidgetId(c, i.id, d); + k.debug && console.groupEnd && console.groupEnd(), d || "function" != typeof e || e(c); } - if (null !== k.sortAppend) for (e = k.sortAppend, g = 0; g < e.length; g++) e[g][0] !== f && k.sortList.push(e[g]); - n.trigger("sortBegin", b), setTimeout(function() { - m(b), q(b), h(b), n.trigger("sortEnd", b); - }, 1); + k.timerReady = setTimeout(function() { + c.isApplyingWidgets = !1, a.data(c, "lastWidgetApplication", new Date()), k.$table.triggerHandler("tablesorter-ready"); + }, 10), k.debug && (i = k.widgets.length, console.log("Completed " + (d === !0 ? "initializing " : "applying ") + i + " widget" + (1 !== i ? "s" : "") + b.benchmark(j))); } - function q(a) { - var b, e, f, g, h, i, j, k, l, m, n, p = 0, q = a.config, r = q.textSorter || "", s = q.sortList, t = s.length, v = q.$tbodies.length; - if (!q.serverSideSorting && !d(q.cache)) { - for (q.debug && (h = new Date()), e = 0; v > e; e++) i = q.cache[e].colMax, j = q.cache[e].normalized, - j.sort(function(c, d) { - for (b = 0; t > b; b++) { - if (g = s[b][0], k = s[b][1], p = 0 === k, q.sortStable && c[g] === d[g] && 1 === t) return c[q.columns].order - d[q.columns].order; - if (f = /n/i.test(o(q.parsers, g)), f && q.strings[g] ? (f = "boolean" == typeof q.string[q.strings[g]] ? (p ? 1 : -1) * (q.string[q.strings[g]] ? -1 : 1) : q.strings[g] ? q.string[q.strings[g]] || 0 : 0, - l = q.numberSorter ? q.numberSorter(c[g], d[g], p, i[g], a) : u["sortNumeric" + (p ? "Asc" : "Desc")](c[g], d[g], f, i[g], g, a)) : (m = p ? c : d, - n = p ? d : c, l = "function" == typeof r ? r(m[g], n[g], p, g, a) : "object" == typeof r && r.hasOwnProperty(g) ? r[g](m[g], n[g], p, g, a) : u["sortNatural" + (p ? "Asc" : "Desc")](c[g], d[g], g, a, q)), - l) return l; - } - return c[q.columns].order - d[q.columns].order; - }); - q.debug && c("Sorting on " + s.toString() + " and dir " + k + " time", h); + }, + removeWidget: function(c, d, e) { + c = a(c)[0]; + var f, g, h, i, j = c.config; + if (d === !0) for (d = [], i = b.widgets.length, h = 0; i > h; h++) g = b.widgets[h], + g && g.id && (d[d.length] = g.id); else d = (a.isArray(d) ? d.join(",") : d || "").toLowerCase().split(/[\s,]+/); + for (i = d.length, f = 0; i > f; f++) g = b.getWidgetById(d[f]), h = a.inArray(d[f], j.widgets), + h >= 0 && e !== !0 && j.widgets.splice(h, 1), g && g.remove && (j.debug && console.log((e ? "Refreshing" : "Removing") + ' "' + d[f] + '" widget'), + g.remove(c, j, j.widgetOptions, e), j.widgetInit[d[f]] = !1); + }, + refreshWidgets: function(c, d, e) { + c = a(c)[0]; + var f, g, h = c.config, i = h.widgets, j = b.widgets, k = j.length, l = [], m = function(b) { + a(b).triggerHandler("refreshComplete"); + }; + for (f = 0; k > f; f++) g = j[f], g && g.id && (d || a.inArray(g.id, i) < 0) && (l[l.length] = g.id); + b.removeWidget(c, l.join(","), !0), e !== !0 ? (b.applyWidget(c, d || !1, m), d && b.applyWidget(c, !1, m)) : m(c); + }, + benchmark: function(a) { + return " ( " + (new Date().getTime() - a.getTime()) + "ms )"; + }, + log: function() { + console.log(arguments); + }, + isEmptyObject: function(a) { + for (var b in a) return !1; + return !0; + }, + isValueInArray: function(a, b) { + var c, d = b && b.length || 0; + for (c = 0; d > c; c++) if (b[c][0] === a) return c; + return -1; + }, + formatFloat: function(c, d) { + if ("string" != typeof c || "" === c) return c; + var e, f = d && d.config ? d.config.usNumberFormat !== !1 : "undefined" != typeof d ? d : !0; + return c = f ? c.replace(b.regex.comma, "") : c.replace(b.regex.digitNonUS, "").replace(b.regex.comma, "."), + b.regex.digitNegativeTest.test(c) && (c = c.replace(b.regex.digitNegativeReplace, "-$1")), + e = parseFloat(c), isNaN(e) ? a.trim(c) : e; + }, + isDigit: function(a) { + return isNaN(a) ? b.regex.digitTest.test(a.toString().replace(b.regex.digitReplace, "")) : "" !== a; + }, + computeColumnIndex: function(b, c) { + var d, e, f, g, h, i, j, k, l, m, n = c && c.columns || 0, o = [], p = new Array(n); + for (d = 0; d < b.length; d++) for (i = b[d].cells, e = 0; e < i.length; e++) { + for (h = i[e], j = h.parentNode.rowIndex, k = h.rowSpan || 1, l = h.colSpan || 1, + "undefined" == typeof o[j] && (o[j] = []), f = 0; f < o[j].length + 1; f++) if ("undefined" == typeof o[j][f]) { + m = f; + break; } + for (n && h.cellIndex === m || (h.setAttribute ? h.setAttribute("data-column", m) : a(h).attr("data-column", m)), + f = j; j + k > f; f++) for ("undefined" == typeof o[f] && (o[f] = []), p = o[f], + g = m; m + l > g; g++) p[g] = "x"; } - function r(b, c) { - b.table.isUpdating && b.$table.trigger("updateComplete", b.table), a.isFunction(c) && c(b.table); + return p.length; + }, + fixColumnWidth: function(c) { + c = a(c)[0]; + var d, e, f, g, h, i = c.config, j = i.$table.children("colgroup"); + if (j.length && j.hasClass(b.css.colgroup) && j.remove(), i.widthFixed && 0 === i.$table.children("colgroup").length) { + for (j = a(''), d = i.$table.width(), f = i.$tbodies.find("tr:first").children(":visible"), + g = f.length, h = 0; g > h; h++) e = parseInt(f.eq(h).width() / d * 1e3, 10) / 10 + "%", + j.append(a("").css("width", e)); + i.$table.prepend(j); } - function s(b, c, d) { - var e = a.isArray(c) ? c : b.sortList, f = "undefined" == typeof c ? b.resort : c; - f === !1 || b.serverSideSorting || b.table.isProcessing ? (r(b, d), u.applyWidget(b.table, !1)) : e.length ? b.$table.trigger("sorton", [ e, function() { - r(b, d); - }, !0 ]) : b.$table.trigger("sortReset", [ function() { - r(b, d), u.applyWidget(b.table, !1); - } ]); + }, + getData: function(b, c, d) { + var e, f, g = "", h = a(b); + return h.length ? (e = a.metadata ? h.metadata() : !1, f = " " + (h.attr("class") || ""), + "undefined" != typeof h.data(d) || "undefined" != typeof h.data(d.toLowerCase()) ? g += h.data(d) || h.data(d.toLowerCase()) : e && "undefined" != typeof e[d] ? g += e[d] : c && "undefined" != typeof c[d] ? g += c[d] : " " !== f && f.match(" " + d + "-") && (g = f.match(new RegExp("\\s" + d + "-([\\w-]+)"))[1] || ""), + a.trim(g)) : ""; + }, + getColumnData: function(b, c, d, e, f) { + if ("undefined" != typeof c && null !== c) { + b = a(b)[0]; + var g, h, i = b.config, j = f || i.$headers, k = i.$headerIndexed && i.$headerIndexed[d] || j.filter('[data-column="' + d + '"]:last'); + if (c[d]) return e ? c[d] : c[j.index(k)]; + for (h in c) if ("string" == typeof h && (g = k.filter(h).add(k.find(h)), g.length)) return c[h]; } - function t(b) { - var c = b.config, e = c.$table, i = "sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(c.namespace + " "); - e.unbind(i.replace(/\s+/g, " ")).bind("sortReset" + c.namespace, function(d, e) { - d.stopPropagation(), c.sortList = [], m(b), q(b), h(b), a.isFunction(e) && e(b); - }).bind("updateAll" + c.namespace, function(a, d, e) { - a.stopPropagation(), b.isUpdating = !0, u.refreshWidgets(b, !0, !0), j(b), u.bindEvents(b, c.$headers, !0), - t(b), k(b, d, e); - }).bind("update" + c.namespace + " updateRows" + c.namespace, function(a, c, d) { - a.stopPropagation(), b.isUpdating = !0, l(b), k(b, c, d); - }).bind("updateCell" + c.namespace, function(d, f, g, h) { - d.stopPropagation(), b.isUpdating = !0, e.find(c.selectorRemove).remove(); - var i, j, k, l, m = c.$tbodies, n = a(f), o = m.index(a.fn.closest ? n.closest("tbody") : n.parents("tbody").filter(":first")), p = a.fn.closest ? n.closest("tr") : n.parents("tr").filter(":first"); - f = n[0], m.length && o >= 0 && (k = m.eq(o).find("tr").index(p), l = n.index(), - c.cache[o].normalized[k][c.columns].$row = p, j = "undefined" == typeof c.extractors[l].id ? u.getElementText(c, f, l) : c.extractors[l].format(u.getElementText(c, f, l), b, f, l), - i = "no-parser" === c.parsers[l].id ? "" : c.parsers[l].format(j, b, f, l), c.cache[o].normalized[k][l] = c.ignoreCase && "string" == typeof i ? i.toLowerCase() : i, - "numeric" === (c.parsers[l].type || "").toLowerCase() && (c.cache[o].colMax[l] = Math.max(Math.abs(i) || 0, c.cache[o].colMax[l] || 0)), - i = "undefined" !== g ? g : c.resort, i !== !1 ? s(c, i, h) : (a.isFunction(h) && h(b), - c.$table.trigger("updateComplete", c.table))); - }).bind("addRows" + c.namespace, function(e, g, h, i) { - if (e.stopPropagation(), b.isUpdating = !0, d(c.cache)) l(b), k(b, h, i); else { - g = a(g).attr("role", "row"); - var j, m, n, o, p, q, r, t = g.filter("tr").length, v = c.$tbodies.index(g.parents("tbody").filter(":first")); - for (c.parsers && c.parsers.length || f(b), j = 0; t > j; j++) { - for (n = g[j].cells.length, r = [], q = { - child: [], - $row: g.eq(j), - order: c.cache[v].normalized.length - }, m = 0; n > m; m++) o = "undefined" == typeof c.extractors[m].id ? u.getElementText(c, g[j].cells[m], m) : c.extractors[m].format(u.getElementText(c, g[j].cells[m], m), b, g[j].cells[m], m), - p = "no-parser" === c.parsers[m].id ? "" : c.parsers[m].format(o, b, g[j].cells[m], m), - r[m] = c.ignoreCase && "string" == typeof p ? p.toLowerCase() : p, "numeric" === (c.parsers[m].type || "").toLowerCase() && (c.cache[v].colMax[m] = Math.max(Math.abs(r[m]) || 0, c.cache[v].colMax[m] || 0)); - r.push(q), c.cache[v].normalized.push(r); - } - s(c, h, i); - } - }).bind("updateComplete" + c.namespace, function() { - b.isUpdating = !1; - }).bind("sorton" + c.namespace, function(c, f, i, j) { - var k = b.config; - c.stopPropagation(), e.trigger("sortStart", this), n(b, f), m(b), k.delayInit && d(k.cache) && g(b), - e.trigger("sortBegin", this), q(b), h(b, j), e.trigger("sortEnd", this), u.applyWidget(b), - a.isFunction(i) && i(b); - }).bind("appendCache" + c.namespace, function(c, d, e) { - c.stopPropagation(), h(b, e), a.isFunction(d) && d(b); - }).bind("updateCache" + c.namespace, function(d, e) { - c.parsers && c.parsers.length || f(b), g(b), a.isFunction(e) && e(b); - }).bind("applyWidgetId" + c.namespace, function(a, d) { - a.stopPropagation(), u.getWidgetById(d).format(b, c, c.widgetOptions); - }).bind("applyWidgets" + c.namespace, function(a, c) { - a.stopPropagation(), u.applyWidget(b, c); - }).bind("refreshWidgets" + c.namespace, function(a, c, d) { - a.stopPropagation(), u.refreshWidgets(b, c, d); - }).bind("destroy" + c.namespace, function(a, c, d) { - a.stopPropagation(), u.destroy(b, c, d); - }).bind("resetToLoadState" + c.namespace, function() { - u.removeWidget(b, !0, !1), c = a.extend(!0, u.defaults, c.originalSettings), b.hasInitialized = !1, - u.setup(b, c); - }); + }, + isProcessing: function(c, d, e) { + c = a(c); + var f = c[0].config, g = e || c.find("." + b.css.header); + d ? ("undefined" != typeof e && f.sortList.length > 0 && (g = g.filter(function() { + return this.sortDisabled ? !1 : b.isValueInArray(parseFloat(a(this).attr("data-column")), f.sortList) >= 0; + })), c.add(g).addClass(b.css.processing + " " + f.cssProcessing)) : c.add(g).removeClass(b.css.processing + " " + f.cssProcessing); + }, + processTbody: function(b, c, d) { + if (b = a(b)[0], d) return b.isProcessing = !0, c.before(''), + a.fn.detach ? c.detach() : c.remove(); + var e = a(b).find("colgroup.tablesorter-savemyplace"); + c.insertAfter(e), e.remove(), b.isProcessing = !1; + }, + clearTableBody: function(b) { + a(b)[0].config.$tbodies.children().detach(); + }, + characterEquivalents: { + a: "áàâãäąå", + A: "ÁÀÂÃÄĄÅ", + c: "çćč", + C: "ÇĆČ", + e: "éèêëěę", + E: "ÉÈÊËĚĘ", + i: "íìİîïı", + I: "ÍÌİÎÏ", + o: "óòôõöō", + O: "ÓÒÔÕÖŌ", + ss: "ß", + SS: "ẞ", + u: "úùûüů", + U: "ÚÙÛÜŮ" + }, + replaceAccents: function(a) { + var c, d = "[", e = b.characterEquivalents; + if (!b.characterRegex) { + b.characterRegexArray = {}; + for (c in e) "string" == typeof c && (d += e[c], b.characterRegexArray[c] = new RegExp("[" + e[c] + "]", "g")); + b.characterRegex = new RegExp(d + "]"); } - var u = this; - u.version = "2.21.5", u.parsers = [], u.widgets = [], u.defaults = { - theme: "default", - widthFixed: !1, - showProcessing: !1, - headerTemplate: "{content}", - onRenderTemplate: null, - onRenderHeader: null, - cancelSelection: !0, - tabIndex: !0, - dateFormat: "mmddyyyy", - sortMultiSortKey: "shiftKey", - sortResetKey: "ctrlKey", - usNumberFormat: !0, - delayInit: !1, - serverSideSorting: !1, - resort: !0, - headers: {}, - ignoreCase: !0, - sortForce: null, - sortList: [], - sortAppend: null, - sortStable: !1, - sortInitialOrder: "asc", - sortLocaleCompare: !1, - sortReset: !1, - sortRestart: !1, - emptyTo: "bottom", - stringTo: "max", - textExtraction: "basic", - textAttribute: "data-text", - textSorter: null, - numberSorter: null, - widgets: [], - widgetOptions: { - zebra: [ "even", "odd" ] - }, - initWidgets: !0, - widgetClass: "widget-{name}", - initialized: null, - tableClass: "", - cssAsc: "", - cssDesc: "", - cssNone: "", - cssHeader: "", - cssHeaderRow: "", - cssProcessing: "", - cssChildRow: "tablesorter-childRow", - cssIcon: "tablesorter-icon", - cssIconNone: "", - cssIconAsc: "", - cssIconDesc: "", - cssInfoBlock: "tablesorter-infoOnly", - cssNoSort: "tablesorter-noSort", - cssIgnoreRow: "tablesorter-ignoreRow", - selectorHeaders: "> thead th, > thead td", - selectorSort: "th, td", - selectorRemove: ".remove-me", - debug: !1, - headerList: [], - empties: {}, - strings: {}, - parsers: [] - }, u.css = { - table: "tablesorter", - cssHasChild: "tablesorter-hasChildRow", - childRow: "tablesorter-childRow", - colgroup: "tablesorter-colgroup", - header: "tablesorter-header", - headerRow: "tablesorter-headerRow", - headerIn: "tablesorter-header-inner", - icon: "tablesorter-icon", - processing: "tablesorter-processing", - sortAsc: "tablesorter-headerAsc", - sortDesc: "tablesorter-headerDesc", - sortNone: "tablesorter-headerUnSorted" - }, u.language = { - sortAsc: "Ascending sort applied, ", - sortDesc: "Descending sort applied, ", - sortNone: "No sort applied, ", - nextAsc: "activate to apply an ascending sort", - nextDesc: "activate to apply a descending sort", - nextNone: "activate to remove the sort" - }, u.instanceMethods = {}, u.log = b, u.benchmark = c, u.getElementText = function(b, c, d) { - if (!c) return ""; - var e, f = b.textExtraction || "", g = c.jquery ? c : a(c); - return a.trim("string" == typeof f ? ("basic" === f ? g.attr(b.textAttribute) || c.textContent : c.textContent) || g.text() || "" : "function" == typeof f ? f(g[0], b.table, d) : "function" == typeof (e = u.getColumnData(b.table, f, d)) ? e(g[0], b.table, d) : g[0].textContent || g.text() || ""); - }, u.construct = function(b) { - return this.each(function() { - var c = this, d = a.extend(!0, {}, u.defaults, b, u.instanceMethods); - d.originalSettings = b, !c.hasInitialized && u.buildTable && "TABLE" !== this.nodeName ? u.buildTable(c, d) : u.setup(c, d); - }); - }, u.setup = function(c, d) { - if (!c || !c.tHead || 0 === c.tBodies.length || c.hasInitialized === !0) return d.debug ? b("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized") : ""; - var e = "", h = a(c), i = a.metadata; - c.hasInitialized = !1, c.isProcessing = !0, c.config = d, a.data(c, "tablesorter", d), - d.debug && a.data(c, "startoveralltimer", new Date()), d.supportsDataObject = function(a) { - return a[0] = parseInt(a[0], 10), a[0] > 1 || 1 === a[0] && parseInt(a[1], 10) >= 4; - }(a.fn.jquery.split(".")), d.string = { - max: 1, - min: -1, - emptymin: 1, - emptymax: -1, - zero: 0, - none: 0, - "null": 0, - top: !0, - bottom: !1 - }, d.emptyTo = d.emptyTo.toLowerCase(), d.stringTo = d.stringTo.toLowerCase(), /tablesorter\-/.test(h.attr("class")) || (e = "" !== d.theme ? " tablesorter-" + d.theme : ""), - d.table = c, d.$table = h.addClass(u.css.table + " " + d.tableClass + e).attr("role", "grid"), - d.$headers = h.find(d.selectorHeaders), d.namespace = d.namespace ? "." + d.namespace.replace(/\W/g, "") : ".tablesorter" + Math.random().toString(16).slice(2), - d.$table.children().children("tr").attr("role", "row"), d.$tbodies = h.children("tbody:not(." + d.cssInfoBlock + ")").attr({ - "aria-live": "polite", - "aria-relevant": "all" - }), d.$table.children("caption").length && (e = d.$table.children("caption")[0], - e.id || (e.id = d.namespace.slice(1) + "caption"), d.$table.attr("aria-labelledby", e.id)), - d.widgetInit = {}, d.textExtraction = d.$table.attr("data-text-extraction") || d.textExtraction || "basic", - j(c), u.fixColumnWidth(c), u.applyWidgetOptions(c, d), f(c), d.totalRows = 0, d.delayInit || g(c), - u.bindEvents(c, d.$headers, !0), t(c), d.supportsDataObject && "undefined" != typeof h.data().sortlist ? d.sortList = h.data().sortlist : i && h.metadata() && h.metadata().sortlist && (d.sortList = h.metadata().sortlist), - u.applyWidget(c, !0), d.sortList.length > 0 ? h.trigger("sorton", [ d.sortList, {}, !d.initWidgets, !0 ]) : (m(c), - d.initWidgets && u.applyWidget(c, !1)), d.showProcessing && h.unbind("sortBegin" + d.namespace + " sortEnd" + d.namespace).bind("sortBegin" + d.namespace + " sortEnd" + d.namespace, function(a) { - clearTimeout(d.processTimer), u.isProcessing(c), "sortBegin" === a.type && (d.processTimer = setTimeout(function() { - u.isProcessing(c, !0); - }, 500)); - }), c.hasInitialized = !0, c.isProcessing = !1, d.debug && u.benchmark("Overall initialization time", a.data(c, "startoveralltimer")), - h.trigger("tablesorter-initialized", c), "function" == typeof d.initialized && d.initialized(c); - }, u.fixColumnWidth = function(b) { - b = a(b)[0]; - var c, d, e = b.config, f = e.$table.children("colgroup"); - f.length && f.hasClass(u.css.colgroup) && f.remove(), e.widthFixed && 0 === e.$table.children("colgroup").length && (f = a(''), - c = e.$table.width(), e.$tbodies.find("tr:first").children(":visible").each(function() { - d = parseInt(a(this).width() / c * 1e3, 10) / 10 + "%", f.append(a("").css("width", d)); - }), e.$table.prepend(f)); - }, u.getColumnData = function(b, c, d, e, f) { - if ("undefined" != typeof c && null !== c) { - b = a(b)[0]; - var g, h, i = b.config, j = f || i.$headers, k = i.$headerIndexed && i.$headerIndexed[d] || j.filter('[data-column="' + d + '"]:last'); - if (c[d]) return e ? c[d] : c[j.index(k)]; - for (h in c) if ("string" == typeof h && (g = k.filter(h).add(k.find(h)), g.length)) return c[h]; - } - }, u.computeColumnIndex = function(b) { - var c, d, e, f, g, h, i, j, k, l, m, n, o, p = [], q = {}; - for (c = 0; c < b.length; c++) for (i = b[c].cells, d = 0; d < i.length; d++) { - for (h = i[d], g = a(h), j = h.parentNode.rowIndex, k = j + "-" + g.index(), l = h.rowSpan || 1, - m = h.colSpan || 1, "undefined" == typeof p[j] && (p[j] = []), e = 0; e < p[j].length + 1; e++) if ("undefined" == typeof p[j][e]) { - n = e; - break; - } - for (q[k] = n, g.attr({ - "data-column": n - }), e = j; j + l > e; e++) for ("undefined" == typeof p[e] && (p[e] = []), o = p[e], - f = n; n + m > f; f++) o[f] = "x"; - } - return o.length; - }, u.isProcessing = function(b, c, d) { - b = a(b); - var e = b[0].config, f = d || b.find("." + u.css.header); - c ? ("undefined" != typeof d && e.sortList.length > 0 && (f = f.filter(function() { - return this.sortDisabled ? !1 : u.isValueInArray(parseFloat(a(this).attr("data-column")), e.sortList) >= 0; - })), b.add(f).addClass(u.css.processing + " " + e.cssProcessing)) : b.add(f).removeClass(u.css.processing + " " + e.cssProcessing); - }, u.processTbody = function(b, c, d) { - b = a(b)[0]; - var e; - return d ? (b.isProcessing = !0, c.before(''), - e = a.fn.detach ? c.detach() : c.remove()) : (e = a(b).find("span.tablesorter-savemyplace"), - c.insertAfter(e), e.remove(), void (b.isProcessing = !1)); - }, u.clearTableBody = function(b) { - a(b)[0].config.$tbodies.children().detach(); - }, u.bindEvents = function(b, c, e) { - b = a(b)[0]; - var f, h = null, i = b.config; - e !== !0 && (c.addClass(i.namespace.slice(1) + "_extra_headers"), f = a.fn.closest ? c.closest("table")[0] : c.parents("table")[0], - f && "TABLE" === f.nodeName && f !== b && a(f).addClass(i.namespace.slice(1) + "_extra_table")), - c.find(i.selectorSort).add(c.filter(i.selectorSort)).unbind("mousedown mouseup click sort keyup ".split(" ").join(i.namespace + " ").replace(/\s+/g, " ")).bind("mousedown mouseup click sort keyup ".split(" ").join(i.namespace + " "), function(e, f) { - var j, k = a(e.target), l = e.type; - if (!(1 !== (e.which || e.button) && !/sort|keyup|click/.test(l) || "keyup" === l && 13 !== e.which || "click" === l && "undefined" != typeof e.which || "mouseup" === l && h !== e.target && f !== !0)) { - if ("mousedown" === l) return void (h = e.target); - if (h = null, /(input|select|button|textarea)/i.test(e.target.nodeName) || k.hasClass(i.cssNoSort) || k.parents("." + i.cssNoSort).length > 0 || k.parents("button").length > 0) return !i.cancelSelection; - i.delayInit && d(i.cache) && g(b), j = a.fn.closest ? a(this).closest("th, td")[0] : /TH|TD/.test(this.nodeName) ? this : a(this).parents("th, td")[0], - j = i.$headers[c.index(j)], j.sortDisabled || p(b, j, e); - } - }), i.cancelSelection && c.attr("unselectable", "on").bind("selectstart", !1).css({ - "user-select": "none", - MozUserSelect: "none" - }); - }, u.restoreHeaders = function(b) { - var c, d = a(b)[0].config; - d.$table.find(d.selectorHeaders).each(function(b) { - c = a(this), c.find("." + u.css.headerIn).length && c.html(d.headerContent[b]); - }); - }, u.destroy = function(b, c, d) { - if (b = a(b)[0], b.hasInitialized) { - u.removeWidget(b, !0, !1); - var e, f = a(b), g = b.config, h = f.find("thead:first"), i = h.find("tr." + u.css.headerRow).removeClass(u.css.headerRow + " " + g.cssHeaderRow), j = f.find("tfoot:first > tr").children("th, td"); - c === !1 && a.inArray("uitheme", g.widgets) >= 0 && (f.trigger("applyWidgetId", [ "uitheme" ]), - f.trigger("applyWidgetId", [ "zebra" ])), h.find("tr").not(i).remove(), e = "sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache " + "applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd resetToLoadState ".split(" ").join(g.namespace + " "), - f.removeData("tablesorter").unbind(e.replace(/\s+/g, " ")), g.$headers.add(j).removeClass([ u.css.header, g.cssHeader, g.cssAsc, g.cssDesc, u.css.sortAsc, u.css.sortDesc, u.css.sortNone ].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled", "true"), - i.find(g.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(g.namespace + " ").replace(/\s+/g, " ")), - u.restoreHeaders(b), f.toggleClass(u.css.table + " " + g.tableClass + " tablesorter-" + g.theme, c === !1), - b.hasInitialized = !1, delete b.config.cache, "function" == typeof d && d(b); - } - }, u.regex = { - chunk: /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi, - chunks: /(^\\0|\\0$)/, - hex: /^0x[0-9a-f]+$/i - }, u.sortNatural = function(a, b) { - if (a === b) return 0; - var c, d, e, f, g, h, i, j, k = u.regex; - if (k.hex.test(b)) { - if (d = parseInt(a.match(k.hex), 16), f = parseInt(b.match(k.hex), 16), f > d) return -1; - if (d > f) return 1; - } - for (c = a.replace(k.chunk, "\\0$1\\0").replace(k.chunks, "").split("\\0"), e = b.replace(k.chunk, "\\0$1\\0").replace(k.chunks, "").split("\\0"), - j = Math.max(c.length, e.length), i = 0; j > i; i++) { - if (g = isNaN(c[i]) ? c[i] || 0 : parseFloat(c[i]) || 0, h = isNaN(e[i]) ? e[i] || 0 : parseFloat(e[i]) || 0, - isNaN(g) !== isNaN(h)) return isNaN(g) ? 1 : -1; - if (typeof g != typeof h && (g += "", h += ""), h > g) return -1; - if (g > h) return 1; - } - return 0; - }, u.sortNaturalAsc = function(a, b, c, d, e) { - if (a === b) return 0; - var f = e.string[e.empties[c] || e.emptyTo]; - return "" === a && 0 !== f ? "boolean" == typeof f ? f ? -1 : 1 : -f || -1 : "" === b && 0 !== f ? "boolean" == typeof f ? f ? 1 : -1 : f || 1 : u.sortNatural(a, b); - }, u.sortNaturalDesc = function(a, b, c, d, e) { - if (a === b) return 0; - var f = e.string[e.empties[c] || e.emptyTo]; - return "" === a && 0 !== f ? "boolean" == typeof f ? f ? -1 : 1 : f || 1 : "" === b && 0 !== f ? "boolean" == typeof f ? f ? 1 : -1 : -f || -1 : u.sortNatural(b, a); - }, u.sortText = function(a, b) { - return a > b ? 1 : b > a ? -1 : 0; - }, u.getTextValue = function(a, b, c) { - if (c) { - var d, e = a ? a.length : 0, f = c + b; - for (d = 0; e > d; d++) f += a.charCodeAt(d); - return b * f; - } - return 0; - }, u.sortNumericAsc = function(a, b, c, d, e, f) { - if (a === b) return 0; - var g = f.config, h = g.string[g.empties[e] || g.emptyTo]; - return "" === a && 0 !== h ? "boolean" == typeof h ? h ? -1 : 1 : -h || -1 : "" === b && 0 !== h ? "boolean" == typeof h ? h ? 1 : -1 : h || 1 : (isNaN(a) && (a = u.getTextValue(a, c, d)), - isNaN(b) && (b = u.getTextValue(b, c, d)), a - b); - }, u.sortNumericDesc = function(a, b, c, d, e, f) { - if (a === b) return 0; - var g = f.config, h = g.string[g.empties[e] || g.emptyTo]; - return "" === a && 0 !== h ? "boolean" == typeof h ? h ? -1 : 1 : h || 1 : "" === b && 0 !== h ? "boolean" == typeof h ? h ? 1 : -1 : -h || -1 : (isNaN(a) && (a = u.getTextValue(a, c, d)), - isNaN(b) && (b = u.getTextValue(b, c, d)), b - a); - }, u.sortNumeric = function(a, b) { - return a - b; - }, u.characterEquivalents = { - a: "áàâãäąå", - A: "ÁÀÂÃÄĄÅ", - c: "çćč", - C: "ÇĆČ", - e: "éèêëěę", - E: "ÉÈÊËĚĘ", - i: "íìİîïı", - I: "ÍÌİÎÏ", - o: "óòôõö", - O: "ÓÒÔÕÖ", - ss: "ß", - SS: "ẞ", - u: "úùûüů", - U: "ÚÙÛÜŮ" - }, u.replaceAccents = function(a) { - var b, c = "[", d = u.characterEquivalents; - if (!u.characterRegex) { - u.characterRegexArray = {}; - for (b in d) "string" == typeof b && (c += d[b], u.characterRegexArray[b] = new RegExp("[" + d[b] + "]", "g")); - u.characterRegex = new RegExp(c + "]"); - } - if (u.characterRegex.test(a)) for (b in d) "string" == typeof b && (a = a.replace(u.characterRegexArray[b], b)); - return a; - }, u.isValueInArray = function(a, b) { - var c, d = b.length; - for (c = 0; d > c; c++) if (b[c][0] === a) return c; - return -1; - }, u.addParser = function(a) { - var b, c = u.parsers.length, d = !0; - for (b = 0; c > b; b++) u.parsers[b].id.toLowerCase() === a.id.toLowerCase() && (d = !1); - d && u.parsers.push(a); - }, u.addInstanceMethods = function(b) { - a.extend(u.instanceMethods, b); - }, u.getParserById = function(a) { - if ("false" == a) return !1; - var b, c = u.parsers.length; - for (b = 0; c > b; b++) if (u.parsers[b].id.toLowerCase() === a.toString().toLowerCase()) return u.parsers[b]; - return !1; - }, u.addWidget = function(a) { - u.widgets.push(a); - }, u.hasWidget = function(b, c) { - return b = a(b), b.length && b[0].config && b[0].config.widgetInit[c] || !1; - }, u.getWidgetById = function(a) { - var b, c, d = u.widgets.length; - for (b = 0; d > b; b++) if (c = u.widgets[b], c && c.hasOwnProperty("id") && c.id.toLowerCase() === a.toLowerCase()) return c; - }, u.applyWidgetOptions = function(b, c) { - var d, e, f = c.widgets.length, g = c.widgetOptions; - if (f) for (d = 0; f > d; d++) e = u.getWidgetById(c.widgets[d]), e && "options" in e && (g = b.config.widgetOptions = a.extend(!0, {}, e.options, g)); - }, u.applyWidget = function(b, d, e) { - b = a(b)[0]; - var f, g, h, i, j, k, l, m = b.config, n = m.widgetOptions, o = " " + m.table.className + " ", p = []; - if (d === !1 || !b.hasInitialized || !b.isApplyingWidgets && !b.isUpdating) { - if (m.debug && (i = new Date()), l = new RegExp("\\s" + m.widgetClass.replace(/\{name\}/i, "([\\w-]+)") + "\\s", "g"), - o.match(l) && (k = o.match(l))) for (g = k.length, f = 0; g > f; f++) m.widgets.push(k[f].replace(l, "$1")); - if (m.widgets.length) { - for (b.isApplyingWidgets = !0, m.widgets = a.grep(m.widgets, function(b, c) { - return a.inArray(b, m.widgets) === c; - }), h = m.widgets || [], g = h.length, f = 0; g > f; f++) l = u.getWidgetById(h[f]), - l && l.id && (l.priority || (l.priority = 10), p[f] = l); - for (p.sort(function(a, b) { - return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1; - }), g = p.length, f = 0; g > f; f++) p[f] && ((d || !m.widgetInit[p[f].id]) && (m.widgetInit[p[f].id] = !0, - b.hasInitialized && u.applyWidgetOptions(b, m), "init" in p[f] && (m.debug && (j = new Date()), - p[f].init(b, p[f], m, n), m.debug && u.benchmark("Initializing " + p[f].id + " widget", j))), - !d && "format" in p[f] && (m.debug && (j = new Date()), p[f].format(b, m, n, !1), - m.debug && u.benchmark((d ? "Initializing " : "Applying ") + p[f].id + " widget", j))); - d || "function" != typeof e || e(b); - } - setTimeout(function() { - b.isApplyingWidgets = !1, a.data(b, "lastWidgetApplication", new Date()); - }, 0), m.debug && (k = m.widgets.length, c("Completed " + (d === !0 ? "initializing " : "applying ") + k + " widget" + (1 !== k ? "s" : ""), i)); - } - }, u.removeWidget = function(c, d, e) { - c = a(c)[0]; - var f, g, h, i, j = c.config; - if (d === !0) for (d = [], i = u.widgets.length, h = 0; i > h; h++) g = u.widgets[h], - g && g.id && d.push(g.id); else d = (a.isArray(d) ? d.join(",") : d || "").toLowerCase().split(/[\s,]+/); - for (i = d.length, f = 0; i > f; f++) g = u.getWidgetById(d[f]), h = a.inArray(d[f], j.widgets), - g && "remove" in g && (j.debug && h >= 0 && b('Removing "' + d[f] + '" widget'), - g.remove(c, j, j.widgetOptions, e), j.widgetInit[d[f]] = !1), h >= 0 && e !== !0 && j.widgets.splice(h, 1); - }, u.refreshWidgets = function(b, c, d) { - b = a(b)[0]; - var e, f = b.config, g = f.widgets, h = u.widgets, i = h.length, j = [], k = function(b) { - a(b).trigger("refreshComplete"); - }; - for (e = 0; i > e; e++) h[e] && h[e].id && (c || a.inArray(h[e].id, g) < 0) && j.push(h[e].id); - u.removeWidget(b, j.join(","), !0), d !== !0 ? (u.applyWidget(b, c || !1, k), c && u.applyWidget(b, !1, k)) : k(b); - }, u.getColumnText = function(b, c, e) { - b = a(b)[0]; - var f, g, h, i, j, k, l, m, n, o, p = "function" == typeof e, q = "all" === c, r = { - raw: [], - parsed: [], - $cell: [] - }, s = b.config; - if (!d(s)) { - for (j = s.$tbodies.length, f = 0; j > f; f++) for (h = s.cache[f].normalized, k = h.length, - g = 0; k > g; g++) o = !0, i = h[g], m = q ? i.slice(0, s.columns) : i[c], i = i[s.columns], - l = q ? i.raw : i.raw[c], n = q ? i.$row.children() : i.$row.children().eq(c), p && (o = e({ - tbodyIndex: f, - rowIndex: g, - parsed: m, - raw: l, - $row: i.$row, - $cell: n - })), o !== !1 && (r.parsed.push(m), r.raw.push(l), r.$cell.push(n)); - return r; - } - }, u.getData = function(b, c, d) { - var e, f, g = "", h = a(b); - return h.length ? (e = a.metadata ? h.metadata() : !1, f = " " + (h.attr("class") || ""), - "undefined" != typeof h.data(d) || "undefined" != typeof h.data(d.toLowerCase()) ? g += h.data(d) || h.data(d.toLowerCase()) : e && "undefined" != typeof e[d] ? g += e[d] : c && "undefined" != typeof c[d] ? g += c[d] : " " !== f && f.match(" " + d + "-") && (g = f.match(new RegExp("\\s" + d + "-([\\w-]+)"))[1] || ""), - a.trim(g)) : ""; - }, u.formatFloat = function(b, c) { - if ("string" != typeof b || "" === b) return b; - var d, e = c && c.config ? c.config.usNumberFormat !== !1 : "undefined" != typeof c ? c : !0; - return b = e ? b.replace(/,/g, "") : b.replace(/[\s|\.]/g, "").replace(/,/g, "."), - /^\s*\([.\d]+\)/.test(b) && (b = b.replace(/^\s*\(([.\d]+)\)/, "-$1")), d = parseFloat(b), - isNaN(d) ? a.trim(b) : d; - }, u.isDigit = function(a) { - return isNaN(a) ? /^[\-+(]?\d+[)]?$/.test(a.toString().replace(/[,.'"\s]/g, "")) : !0; - }; - }() - }); - var b = a.tablesorter; - a.fn.extend({ - tablesorter: b.construct + if (b.characterRegex.test(a)) for (c in e) "string" == typeof c && (a = a.replace(b.characterRegexArray[c], c)); + return a; + }, + restoreHeaders: function(c) { + var d, e, f = a(c)[0].config, g = f.$table.find(f.selectorHeaders), h = g.length; + for (d = 0; h > d; d++) e = g.eq(d), e.find("." + b.css.headerIn).length && e.html(f.headerContent[d]); + }, + destroy: function(c, d, e) { + if (c = a(c)[0], c.hasInitialized) { + b.removeWidget(c, !0, !1); + var f, g = a(c), h = c.config, i = h.debug, j = g.find("thead:first"), k = j.find("tr." + b.css.headerRow).removeClass(b.css.headerRow + " " + h.cssHeaderRow), l = g.find("tfoot:first > tr").children("th, td"); + d === !1 && a.inArray("uitheme", h.widgets) >= 0 && (g.triggerHandler("applyWidgetId", [ "uitheme" ]), + g.triggerHandler("applyWidgetId", [ "zebra" ])), j.find("tr").not(k).remove(), f = "sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave " + "keypress sortBegin sortEnd resetToLoadState ".split(" ").join(h.namespace + " "), + g.removeData("tablesorter").unbind(f.replace(b.regex.spaces, " ")), h.$headers.add(l).removeClass([ b.css.header, h.cssHeader, h.cssAsc, h.cssDesc, b.css.sortAsc, b.css.sortDesc, b.css.sortNone ].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled", "true"), + k.find(h.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(h.namespace + " ").replace(b.regex.spaces, " ")), + b.restoreHeaders(c), g.toggleClass(b.css.table + " " + h.tableClass + " tablesorter-" + h.theme, d === !1), + c.hasInitialized = !1, delete c.config.cache, "function" == typeof e && e(c), i && console.log("tablesorter has been removed"); + } + } + }; + a.fn.tablesorter = function(c) { + return this.each(function() { + var d = this, e = a.extend(!0, {}, b.defaults, c, b.instanceMethods); + e.originalSettings = c, !d.hasInitialized && b.buildTable && "TABLE" !== this.nodeName ? b.buildTable(d, e) : b.setup(d, e); + }); + }, window.console && window.console.log || (b.logs = [], console = {}, console.log = console.warn = console.error = console.table = function() { + var a = arguments.length > 1 ? arguments : arguments[0]; + b.logs[b.logs.length] = { + date: Date.now(), + log: a + }; }), b.addParser({ id: "no-parser", is: function() { @@ -5204,53 +5406,55 @@ c; }, type: "text" - }), b.addParser({ + }), b.regex.nondigit = /[^\w,. \-()]/g, b.addParser({ id: "digit", is: function(a) { return b.isDigit(a); }, format: function(c, d) { - var e = b.formatFloat((c || "").replace(/[^\w,. \-()]/g, ""), d); + var e = b.formatFloat((c || "").replace(b.regex.nondigit, ""), d); return c && "number" == typeof e ? e : c ? a.trim(c && d.config.ignoreCase ? c.toLocaleLowerCase() : c) : c; }, type: "numeric" - }), b.addParser({ + }), b.regex.currencyReplace = /[+\-,. ]/g, b.regex.currencyTest = /^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/, + b.addParser({ id: "currency", is: function(a) { - return /^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((a || "").replace(/[+\-,. ]/g, "")); + return a = (a || "").replace(b.regex.currencyReplace, ""), b.regex.currencyTest.test(a); }, format: function(c, d) { - var e = b.formatFloat((c || "").replace(/[^\w,. \-()]/g, ""), d); + var e = b.formatFloat((c || "").replace(b.regex.nondigit, ""), d); return c && "number" == typeof e ? e : c ? a.trim(c && d.config.ignoreCase ? c.toLocaleLowerCase() : c) : c; }, type: "numeric" - }), b.addParser({ + }), b.regex.urlProtocolTest = /^(https?|ftp|file):\/\//, b.regex.urlProtocolReplace = /(https?|ftp|file):\/\//, + b.addParser({ id: "url", is: function(a) { - return /^(https?|ftp|file):\/\//.test(a); + return b.regex.urlProtocolTest.test(a); }, - format: function(b) { - return b ? a.trim(b.replace(/(https?|ftp|file):\/\//, "")) : b; + format: function(c) { + return c ? a.trim(c.replace(b.regex.urlProtocolReplace, "")) : c; }, parsed: !0, type: "text" - }), b.addParser({ + }), b.regex.dash = /-/g, b.regex.isoDate = /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/, b.addParser({ id: "isoDate", is: function(a) { - return /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(a); + return b.regex.isoDate.test(a); }, - format: function(a) { - var b = a ? new Date(a.replace(/-/g, "/")) : a; - return b instanceof Date && isFinite(b) ? b.getTime() : a; + format: function(a, c) { + var d = a ? new Date(a.replace(b.regex.dash, "/")) : a; + return d instanceof Date && isFinite(d) ? d.getTime() : a; }, type: "numeric" - }), b.addParser({ + }), b.regex.percent = /%/g, b.regex.percentTest = /(\d\s*?%|%\s*?\d)/, b.addParser({ id: "percent", is: function(a) { - return /(\d\s*?%|%\s*?\d)/.test(a) && a.length < 15; + return b.regex.percentTest.test(a) && a.length < 15; }, format: function(a, c) { - return a ? b.formatFloat(a.replace(/%/g, ""), c) : a; + return a ? b.formatFloat(a.replace(b.regex.percent, ""), c) : a; }, type: "numeric" }), b.addParser({ @@ -5263,38 +5467,49 @@ }, parsed: !0, type: "text" - }), b.addParser({ + }), b.regex.dateReplace = /(\S)([AP]M)$/i, b.regex.usLongDateTest1 = /^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i, + b.regex.usLongDateTest2 = /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i, b.addParser({ id: "usLongDate", is: function(a) { - return /^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(a) || /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(a); + return b.regex.usLongDateTest1.test(a) || b.regex.usLongDateTest2.test(a); }, - format: function(a) { - var b = a ? new Date(a.replace(/(\S)([AP]M)$/i, "$1 $2")) : a; - return b instanceof Date && isFinite(b) ? b.getTime() : a; + format: function(a, c) { + var d = a ? new Date(a.replace(b.regex.dateReplace, "$1 $2")) : a; + return d instanceof Date && isFinite(d) ? d.getTime() : a; }, type: "numeric" - }), b.addParser({ + }), b.regex.shortDateTest = /(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/, + b.regex.shortDateReplace = /[\-.,]/g, b.regex.shortDateXXY = /(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, + b.regex.shortDateYMD = /(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/, b.convertFormat = function(a, c) { + a = (a || "").replace(b.regex.spaces, " ").replace(b.regex.shortDateReplace, "/"), + "mmddyyyy" === c ? a = a.replace(b.regex.shortDateXXY, "$3/$1/$2") : "ddmmyyyy" === c ? a = a.replace(b.regex.shortDateXXY, "$3/$2/$1") : "yyyymmdd" === c && (a = a.replace(b.regex.shortDateYMD, "$1/$2/$3")); + var d = new Date(a); + return d instanceof Date && isFinite(d) ? d.getTime() : ""; + }, b.addParser({ id: "shortDate", is: function(a) { - return /(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((a || "").replace(/\s+/g, " ").replace(/[\-.,]/g, "/")); + return a = (a || "").replace(b.regex.spaces, " ").replace(b.regex.shortDateReplace, "/"), + b.regex.shortDateTest.test(a); }, format: function(a, c, d, e) { if (a) { - var f, g, h = c.config, i = h.$headerIndexed[e], j = i.length && i[0].dateFormat || b.getData(i, b.getColumnData(c, h.headers, e), "dateFormat") || h.dateFormat; - return g = a.replace(/\s+/g, " ").replace(/[\-.,]/g, "/"), "mmddyyyy" === j ? g = g.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$1/$2") : "ddmmyyyy" === j ? g = g.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$2/$1") : "yyyymmdd" === j && (g = g.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/, "$1/$2/$3")), - f = new Date(g), f instanceof Date && isFinite(f) ? f.getTime() : a; + var f = c.config, g = f.$headerIndexed[e], h = g.length && g.data("dateFormat") || b.getData(g, b.getColumnData(c, f.headers, e), "dateFormat") || f.dateFormat; + return g.length && g.data("dateFormat", h), b.convertFormat(a, h) || a; } return a; }, type: "numeric" - }), b.addParser({ + }), b.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i, + b.regex.timeMatch = /([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i, + b.addParser({ id: "time", is: function(a) { - return /^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(a); + return b.regex.timeTest.test(a); }, - format: function(a) { - var b = a ? new Date("2000/01/01 " + a.replace(/(\S)([AP]M)$/i, "$1 $2")) : a; - return b instanceof Date && isFinite(b) ? b.getTime() : a; + format: function(a, c) { + var d, e = (a || "").match(b.regex.timeMatch), f = new Date(a), g = a && (null !== e ? e[0] : "00:00 AM"), h = g ? new Date("2000/01/01 " + g.replace(b.regex.dateReplace, "$1 $2")) : g; + return h instanceof Date && isFinite(h) ? (d = f instanceof Date && isFinite(f) ? f.getTime() : 0, + d ? parseFloat(h.getTime() + "." + f.getTime()) : h.getTime()) : a; }, type: "numeric" }), b.addParser({ @@ -5311,11 +5526,10 @@ id: "zebra", priority: 90, format: function(b, c, d) { - var e, f, g, h, i, j, k, l = new RegExp(c.cssChildRow, "i"), m = c.$tbodies.add(a(c.namespace + "_extra_table").children("tbody")); - for (c.debug && (j = new Date()), k = 0; k < m.length; k++) h = 0, e = m.eq(k), - f = e.children("tr:visible").not(c.selectorRemove), f.each(function() { - g = a(this), l.test(this.className) || h++, i = h % 2 === 0, g.removeClass(d.zebra[i ? 1 : 0]).addClass(d.zebra[i ? 0 : 1]); - }); + var e, f, g, h, i, j, k, l = new RegExp(c.cssChildRow, "i"), m = c.$tbodies.add(a(c.namespace + "_extra_table").children("tbody:not(." + c.cssInfoBlock + ")")); + for (i = 0; i < m.length; i++) for (g = 0, e = m.eq(i).children("tr:visible").not(c.selectorRemove), + k = e.length, j = 0; k > j; j++) f = e.eq(j), l.test(f[0].className) || g++, h = g % 2 === 0, + f.removeClass(d.zebra[h ? 1 : 0]).addClass(d.zebra[h ? 0 : 1]); }, remove: function(a, c, d, e) { if (!e) { @@ -5331,24 +5545,24 @@ }(function(a) { return function(a, b, c) { "use strict"; - var d = a.tablesorter = a.tablesorter || {}; - d.storage = function(e, f, g, h) { - e = a(e)[0]; - var i, j, k, l = !1, m = {}, n = e.config, o = n && n.widgetOptions, p = h && h.useSessionStorage || o && o.storage_useSessionStorage ? "sessionStorage" : "localStorage", q = a(e), r = h && h.id || q.attr(h && h.group || o && o.storage_group || "data-table-group") || o && o.storage_tableId || e.id || a(".tablesorter").index(q), s = h && h.url || q.attr(h && h.page || o && o.storage_page || "data-table-page") || o && o.storage_fixedUrl || n && n.fixedUrl || b.location.pathname; - if (p in b) try { - b[p].setItem("_tmptest", "temp"), l = !0, b[p].removeItem("_tmptest"); - } catch (t) { - n && n.debug && d.log(p + " is not supported in this browser"); + var d = a.tablesorter || {}; + d.storage = function(d, e, f, g) { + d = a(d)[0]; + var h, i, j, k = !1, l = {}, m = d.config, n = m && m.widgetOptions, o = g && g.useSessionStorage || n && n.storage_useSessionStorage ? "sessionStorage" : "localStorage", p = a(d), q = g && g.id || p.attr(g && g.group || n && n.storage_group || "data-table-group") || n && n.storage_tableId || d.id || a(".tablesorter").index(p), r = g && g.url || p.attr(g && g.page || n && n.storage_page || "data-table-page") || n && n.storage_fixedUrl || m && m.fixedUrl || b.location.pathname; + if (o in b) try { + b[o].setItem("_tmptest", "temp"), k = !0, b[o].removeItem("_tmptest"); + } catch (s) { + m && m.debug && console.warn(o + " is not supported in this browser"); } - return a.parseJSON && (l ? m = a.parseJSON(b[p][f] || "null") || {} : (j = c.cookie.split(/[;\s|=]/), - i = a.inArray(f, j) + 1, m = 0 !== i ? a.parseJSON(j[i] || "null") || {} : {})), - (g || "" === g) && b.JSON && JSON.hasOwnProperty("stringify") ? (m[s] || (m[s] = {}), - m[s][r] = g, void (l ? b[p][f] = JSON.stringify(m) : (k = new Date(), k.setTime(k.getTime() + 31536e6), - c.cookie = f + "=" + JSON.stringify(m).replace(/\"/g, '"') + "; expires=" + k.toGMTString() + "; path=/"))) : m && m[s] ? m[s][r] : ""; + return a.parseJSON && (k ? l = a.parseJSON(b[o][e] || "null") || {} : (i = c.cookie.split(/[;\s|=]/), + h = a.inArray(e, i) + 1, l = 0 !== h ? a.parseJSON(i[h] || "null") || {} : {})), + "undefined" != typeof f && b.JSON && JSON.hasOwnProperty("stringify") ? (l[r] || (l[r] = {}), + l[r][q] = f, void (k ? b[o][e] = JSON.stringify(l) : (j = new Date(), j.setTime(j.getTime() + 31536e6), + c.cookie = e + "=" + JSON.stringify(l).replace(/\"/g, '"') + "; expires=" + j.toGMTString() + "; path=/"))) : l && l[r] ? l[r][q] : ""; }; }(jQuery, window, document), function(a) { "use strict"; - var b = a.tablesorter = a.tablesorter || {}; + var b = a.tablesorter || {}; b.themes = { bootstrap: { table: "table table-bordered table-striped", @@ -5415,7 +5629,7 @@ h = v.iconSortNone, m.hasClass(b.css.sortAsc) ? (g = [ v.sortAsc, v.active ].join(" "), h = v.iconSortAsc) : m.hasClass(b.css.sortDesc) && (g = [ v.sortDesc, v.active ].join(" "), h = v.iconSortDesc), j.addClass(g), k.addClass(h || ""))); - d.debug && b.benchmark("Applying " + u + " theme", i); + d.debug && console.log("Applying " + u + " theme" + b.benchmark(i)); }, remove: function(a, c, d, e) { if (d.uitheme_applied) { @@ -5428,7 +5642,7 @@ }); }(jQuery), function(a) { "use strict"; - var b = a.tablesorter = a.tablesorter || {}; + var b = a.tablesorter || {}; b.addWidget({ id: "columns", priority: 30, @@ -5455,17 +5669,25 @@ }); }(jQuery), function(a) { "use strict"; - var b = a.tablesorter = a.tablesorter || {}, c = b.css; - a.extend(c, { + var b, c, d = a.tablesorter || {}, e = d.css, f = d.keyCodes; + a.extend(e, { filterRow: "tablesorter-filter-row", filter: "tablesorter-filter", filterDisabled: "disabled", filterRowHide: "hideme" - }), b.addWidget({ + }), a.extend(f, { + backSpace: 8, + escape: 27, + space: 32, + left: 37, + down: 40 + }), d.addWidget({ id: "filter", priority: 50, options: { filter_childRows: !1, + filter_childByColumn: !1, + filter_childWithSibs: !0, filter_columnFilters: !0, filter_columnAnyMatch: !0, filter_cellFilter: "", @@ -5480,12 +5702,17 @@ filter_hideFilters: !1, filter_ignoreCase: !0, filter_liveSearch: !0, + filter_matchType: { + input: "exact", + select: "exact" + }, filter_onlyAvail: "filter-onlyAvail", filter_placeholder: { search: "", select: "" }, filter_reset: null, + filter_resetOnEsc: !0, filter_saveFilters: !1, filter_searchDelay: 300, filter_searchFiltered: !0, @@ -5497,168 +5724,217 @@ filter_selectSourceSeparator: "|" }, format: function(a, c, d) { - c.$table.hasClass("hasFilters") || b.filter.init(a, c, d); + c.$table.hasClass("hasFilters") || b.init(a, c, d); }, - remove: function(d, e, f, g) { - var h, i, j = e.$table, k = e.$tbodies, l = "addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(e.namespace + "filter "); - if (j.removeClass("hasFilters").unbind(l.replace(/\s+/g, " ")).find("." + c.filterRow).remove(), + remove: function(b, c, f, g) { + var h, i, j = c.$table, k = c.$tbodies, l = "addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(c.namespace + "filter "); + if (j.removeClass("hasFilters").unbind(l.replace(d.regex.spaces, " ")).find("." + e.filterRow).remove(), !g) { - for (h = 0; h < k.length; h++) i = b.processTbody(d, k.eq(h), !0), i.children().removeClass(f.filter_filteredRow).show(), - b.processTbody(d, i, !1); - f.filter_reset && a(document).undelegate(f.filter_reset, "click.tsfilter"); + for (h = 0; h < k.length; h++) i = d.processTbody(b, k.eq(h), !0), i.children().removeClass(f.filter_filteredRow).show(), + d.processTbody(b, i, !1); + f.filter_reset && a(document).undelegate(f.filter_reset, "click" + c.namespace + "filter"); } } - }), b.filter = { + }), b = d.filter = { regex: { regex: /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/, child: /tablesorter-childRow/, filtered: /filtered/, type: /undefined|number/, exact: /(^[\"\'=]+)|([\"\'=]+$)/g, - nondigit: /[^\w,. \-()]/g, operators: /[<>=]/g, - query: "(q|query)" + query: "(q|query)", + wild01: /\?/g, + wild0More: /\*/g, + quote: /\"/g, + isNeg1: /(>=?\s*-\d)/, + isNeg2: /(<=?\s*\d)/ }, types: { - regex: function(a, c) { - if (b.filter.regex.regex.test(c.iFilter)) { - var d, e = b.filter.regex.regex.exec(c.iFilter); - try { - d = new RegExp(e[1], e[2]).test(c.iExact); - } catch (f) { - d = !1; + or: function(d, e, f) { + if ((c.orTest.test(e.iFilter) || c.orSplit.test(e.filter)) && !c.regex.test(e.filter)) { + var g, h, i, j, k = a.extend({}, e), l = e.filter.split(c.orSplit), m = e.iFilter.split(c.orSplit), n = l.length; + for (g = 0; n > g; g++) { + k.nestedFilters = !0, k.filter = "" + (b.parseFilter(d, l[g], e) || ""), k.iFilter = "" + (b.parseFilter(d, m[g], e) || ""), + i = "(" + (b.parseFilter(d, k.filter, e) || "") + ")"; + try { + if (j = new RegExp(e.isMatch ? i : "^" + i + "$", d.widgetOptions.filter_ignoreCase ? "i" : ""), + h = j.test(k.exact) || b.processTypes(d, k, f)) return h; + } catch (o) { + return null; + } } - return d; + return h || !1; + } + return null; + }, + and: function(d, e, f) { + if (c.andTest.test(e.filter)) { + var g, h, i, j, k, l = a.extend({}, e), m = e.filter.split(c.andSplit), n = e.iFilter.split(c.andSplit), o = m.length; + for (g = 0; o > g; g++) { + l.nestedFilters = !0, l.filter = "" + (b.parseFilter(d, m[g], e) || ""), l.iFilter = "" + (b.parseFilter(d, n[g], e) || ""), + j = ("(" + (b.parseFilter(d, l.filter, e) || "") + ")").replace(c.wild01, "\\S{1}").replace(c.wild0More, "\\S*"); + try { + k = new RegExp(e.isMatch ? j : "^" + j + "$", d.widgetOptions.filter_ignoreCase ? "i" : ""), + i = k.test(l.exact) || b.processTypes(d, l, f), h = 0 === g ? i : h && i; + } catch (p) { + return null; + } + } + return h || !1; } return null; }, - operators: function(c, d) { - if (/^[<>]=?/.test(d.iFilter)) { - var e, f, g = c.table, h = d.index, i = d.parsed[h], j = b.formatFloat(d.iFilter.replace(b.filter.regex.operators, ""), g), k = c.parsers[h], l = j; - return (i || "numeric" === k.type) && (f = b.filter.parseFilter(c, a.trim("" + d.iFilter.replace(b.filter.regex.operators, "")), h, i, !0), - j = "number" != typeof f || "" === f || isNaN(f) ? j : f), e = !i && "numeric" !== k.type || isNaN(j) || "undefined" == typeof d.cache ? isNaN(d.iExact) ? b.formatFloat(d.iExact.replace(b.filter.regex.nondigit, ""), g) : b.formatFloat(d.iExact, g) : d.cache, - />/.test(d.iFilter) && (f = />=/.test(d.iFilter) ? e >= j : e > j), /= e : j > e), - f || "" !== l || (f = !0), f; + regex: function(a, b) { + if (c.regex.test(b.filter)) { + var d, e = b.filter_regexCache[b.index] || c.regex.exec(b.filter), f = e instanceof RegExp; + try { + f || (b.filter_regexCache[b.index] = e = new RegExp(e[1], e[2])), d = e.test(b.exact); + } catch (g) { + d = !1; + } + return d; } return null; }, - notMatch: function(c, d) { - if (/^\!/.test(d.iFilter)) { - var e, f = b.filter.parseFilter(c, d.iFilter.replace("!", ""), d.index, d.parsed[d.index]) || ""; - return b.filter.regex.exact.test(f) ? (f = f.replace(b.filter.regex.exact, ""), - "" === f ? !0 : a.trim(f) !== d.iExact) : (e = d.iExact.search(a.trim(f)), "" === f ? !0 : !(c.widgetOptions.filter_startsWith ? 0 === e : e >= 0)); + operators: function(e, f) { + if (c.operTest.test(f.iFilter) && "" !== f.iExact) { + var g, h, i, j = e.table, k = f.parsed[f.index], l = d.formatFloat(f.iFilter.replace(c.operators, ""), j), m = e.parsers[f.index] || {}, n = l; + return (k || "numeric" === m.type) && (i = a.trim("" + f.iFilter.replace(c.operators, "")), + h = b.parseFilter(e, i, f, !0), l = "number" != typeof h || "" === h || isNaN(h) ? l : h), + !k && "numeric" !== m.type || isNaN(l) || "undefined" == typeof f.cache ? (i = isNaN(f.iExact) ? f.iExact.replace(d.regex.nondigit, "") : f.iExact, + g = d.formatFloat(i, j)) : g = f.cache, c.gtTest.test(f.iFilter) ? h = c.gteTest.test(f.iFilter) ? g >= l : g > l : c.ltTest.test(f.iFilter) && (h = c.lteTest.test(f.iFilter) ? l >= g : l > g), + h || "" !== n || (h = !0), h; } return null; }, - exact: function(c, d) { - if (b.filter.regex.exact.test(d.iFilter)) { - var e = b.filter.parseFilter(c, d.iFilter.replace(b.filter.regex.exact, ""), d.index, d.parsed[d.index]) || ""; - return d.anyMatch ? a.inArray(e, d.rowArray) >= 0 : e == d.iExact; + notMatch: function(d, e) { + if (c.notTest.test(e.iFilter)) { + var f, g = e.iFilter.replace("!", ""), h = b.parseFilter(d, g, e) || ""; + return c.exact.test(h) ? (h = h.replace(c.exact, ""), "" === h ? !0 : a.trim(h) !== e.iExact) : (f = e.iExact.search(a.trim(h)), + "" === h ? !0 : !(d.widgetOptions.filter_startsWith ? 0 === f : f >= 0)); } return null; }, - and: function(c, d) { - if (b.filter.regex.andTest.test(d.filter)) { - for (var e = d.index, f = d.parsed[e], g = d.iFilter.split(b.filter.regex.andSplit), h = d.iExact.search(a.trim(b.filter.parseFilter(c, g[0], e, f))) >= 0, i = g.length - 1; h && i; ) h = h && d.iExact.search(a.trim(b.filter.parseFilter(c, g[i], e, f))) >= 0, - i--; - return h; + exact: function(d, e) { + if (c.exact.test(e.iFilter)) { + var f = e.iFilter.replace(c.exact, ""), g = b.parseFilter(d, f, e) || ""; + return e.anyMatch ? a.inArray(g, e.rowArray) >= 0 : g == e.iExact; } return null; }, - range: function(a, c) { - if (b.filter.regex.toTest.test(c.iFilter)) { - var d, e, f = a.table, g = c.index, h = c.parsed[g], i = c.iFilter.split(b.filter.regex.toSplit), j = b.formatFloat(b.filter.parseFilter(a, i[0].replace(b.filter.regex.nondigit, "") || "", g, h), f), k = b.formatFloat(b.filter.parseFilter(a, i[1].replace(b.filter.regex.nondigit, "") || "", g, h), f); - return (h || "numeric" === a.parsers[g].type) && (d = a.parsers[g].format("" + i[0], f, a.$headers.eq(g), g), - j = "" === d || isNaN(d) ? j : d, d = a.parsers[g].format("" + i[1], f, a.$headers.eq(g), g), - k = "" === d || isNaN(d) ? k : d), d = !h && "numeric" !== a.parsers[g].type || isNaN(j) || isNaN(k) ? isNaN(c.iExact) ? b.formatFloat(c.iExact.replace(b.filter.regex.nondigit, ""), f) : b.formatFloat(c.iExact, f) : c.cache, - j > k && (e = j, j = k, k = e), d >= j && k >= d || "" === j || "" === k; + range: function(a, e) { + if (c.toTest.test(e.iFilter)) { + var f, g, h, i, j = a.table, k = e.index, l = e.parsed[k], m = e.iFilter.split(c.toSplit); + return g = m[0].replace(d.regex.nondigit, "") || "", h = d.formatFloat(b.parseFilter(a, g, e), j), + g = m[1].replace(d.regex.nondigit, "") || "", i = d.formatFloat(b.parseFilter(a, g, e), j), + (l || "numeric" === a.parsers[k].type) && (f = a.parsers[k].format("" + m[0], j, a.$headers.eq(k), k), + h = "" === f || isNaN(f) ? h : f, f = a.parsers[k].format("" + m[1], j, a.$headers.eq(k), k), + i = "" === f || isNaN(f) ? i : f), !l && "numeric" !== a.parsers[k].type || isNaN(h) || isNaN(i) ? (g = isNaN(e.iExact) ? e.iExact.replace(d.regex.nondigit, "") : e.iExact, + f = d.formatFloat(g, j)) : f = e.cache, h > i && (g = h, h = i, i = g), f >= h && i >= f || "" === h || "" === i; } return null; }, - wild: function(c, d) { - if (/[\?\*\|]/.test(d.iFilter) || b.filter.regex.orReplace.test(d.filter)) { - var e = d.index, f = d.parsed[e], g = b.filter.parseFilter(c, d.iFilter.replace(b.filter.regex.orReplace, "|"), e, f) || ""; - return !c.$headerIndexed[e].hasClass("filter-match") && /\|/.test(g) && ("|" === g[g.length - 1] && (g += "*"), - g = d.anyMatch && a.isArray(d.rowArray) ? "(" + g + ")" : "^(" + g + ")$"), new RegExp(g.replace(/\?/g, "\\S{1}").replace(/\*/g, "\\S*")).test(d.iExact); + wild: function(a, d) { + if (c.wildOrTest.test(d.iFilter)) { + var e = "" + (b.parseFilter(a, d.iFilter, d) || ""); + !c.wildTest.test(e) && d.nestedFilters && (e = d.isMatch ? e : "^(" + e + ")$"); + try { + return new RegExp(e.replace(c.wild01, "\\S{1}").replace(c.wild0More, "\\S*"), a.widgetOptions.filter_ignoreCase ? "i" : "").test(d.exact); + } catch (f) { + return null; + } } return null; }, - fuzzy: function(a, c) { - if (/^~/.test(c.iFilter)) { - var d, e = 0, f = c.iExact.length, g = b.filter.parseFilter(a, c.iFilter.slice(1), c.index, c.parsed[c.index]) || ""; - for (d = 0; f > d; d++) c.iExact[d] === g[e] && (e += 1); - return e === g.length ? !0 : !1; + fuzzy: function(a, d) { + if (c.fuzzyTest.test(d.iFilter)) { + var e, f = 0, g = d.iExact.length, h = d.iFilter.slice(1), i = b.parseFilter(a, h, d) || ""; + for (e = 0; g > e; e++) d.iExact[e] === i[f] && (f += 1); + return f === i.length; } return null; } }, - init: function(d, e, f) { - b.language = a.extend(!0, {}, { + init: function(f, g, h) { + d.language = a.extend(!0, {}, { to: "to", or: "or", and: "and" - }, b.language); - var g, h, i, j, k, l, m, n, o, p = b.filter.regex; - if (e.$table.addClass("hasFilters"), f.searchTimer = null, f.filter_initTimer = null, - f.filter_formatterCount = 0, f.filter_formatterInit = [], f.filter_anyColumnSelector = '[data-column="all"],[data-column="any"]', - f.filter_multipleColumnSelector = '[data-column*="-"],[data-column*=","]', i = "\\{" + b.filter.regex.query + "\\}", - a.extend(p, { - child: new RegExp(e.cssChildRow), - filtered: new RegExp(f.filter_filteredRow), - alreadyFiltered: new RegExp("(\\s+(" + b.language.or + "|-|" + b.language.to + ")\\s+)", "i"), - toTest: new RegExp("\\s+(-|" + b.language.to + ")\\s+", "i"), - toSplit: new RegExp("(?:\\s+(?:-|" + b.language.to + ")\\s+)", "gi"), - andTest: new RegExp("\\s+(" + b.language.and + "|&&)\\s+", "i"), - andSplit: new RegExp("(?:\\s+(?:" + b.language.and + "|&&)\\s+)", "gi"), - orReplace: new RegExp("\\s+(" + b.language.or + ")\\s+", "gi"), - iQuery: new RegExp(i, "i"), - igQuery: new RegExp(i, "ig") - }), f.filter_columnFilters !== !1 && e.$headers.filter(".filter-false, .parser-false").length !== e.$headers.length && b.filter.buildRow(d, e, f), - i = "addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(e.namespace + "filter "), - e.$table.bind(i, function(g, h) { - return m = f.filter_hideEmpty && a.isEmptyObject(e.cache) && !(e.delayInit && "appendCache" === g.type), - e.$table.find("." + c.filterRow).toggleClass(f.filter_filteredRow, m), /(search|filter)/.test(g.type) || (g.stopPropagation(), - b.filter.buildDefault(d, !0)), "filterReset" === g.type ? (e.$table.find("." + c.filter).add(f.filter_$externalFilters).val(""), - b.filter.searching(d, [])) : "filterEnd" === g.type ? b.filter.buildDefault(d, !0) : (h = "search" === g.type ? h : "updateComplete" === g.type ? e.$table.data("lastSearch") : "", - /(update|add)/.test(g.type) && "updateComplete" !== g.type && (e.lastCombinedFilter = null, - e.lastSearch = []), b.filter.searching(d, h, !0)), !1; - }), f.filter_reset && (f.filter_reset instanceof a ? f.filter_reset.click(function() { - e.$table.trigger("filterReset"); - }) : a(f.filter_reset).length && a(document).undelegate(f.filter_reset, "click.tsfilter").delegate(f.filter_reset, "click.tsfilter", function() { - e.$table.trigger("filterReset"); - })), f.filter_functions) for (k = 0; k < e.columns; k++) if (n = b.getColumnData(d, f.filter_functions, k)) if (j = e.$headerIndexed[k].removeClass("filter-select"), - o = !(j.hasClass("filter-false") || j.hasClass("parser-false")), g = "", n === !0 && o) b.filter.buildSelect(d, k); else if ("object" == typeof n && o) { - for (h in n) "string" == typeof h && (g += "" === g ? '" : "", - m = h, i = h, h.indexOf(f.filter_selectSourceSeparator) >= 0 && (m = h.split(f.filter_selectSourceSeparator), - i = m[1], m = m[0]), g += ""); - e.$table.find("thead").find("select." + c.filter + '[data-column="' + k + '"]').append(g), - i = f.filter_selectSource, n = a.isFunction(i) ? !0 : b.getColumnData(d, i, k), - n && b.filter.buildSelect(e.table, k, "", !0, j.hasClass(f.filter_onlyAvail)); + }, d.language); + var i, j, k, l, m, n, o, p, q; + if (g.$table.addClass("hasFilters"), g.lastSearch = [], h.filter_searchTimer = null, + h.filter_initTimer = null, h.filter_formatterCount = 0, h.filter_formatterInit = [], + h.filter_anyColumnSelector = '[data-column="all"],[data-column="any"]', h.filter_multipleColumnSelector = '[data-column*="-"],[data-column*=","]', + o = "\\{" + c.query + "\\}", a.extend(c, { + child: new RegExp(g.cssChildRow), + filtered: new RegExp(h.filter_filteredRow), + alreadyFiltered: new RegExp("(\\s+(" + d.language.or + "|-|" + d.language.to + ")\\s+)", "i"), + toTest: new RegExp("\\s+(-|" + d.language.to + ")\\s+", "i"), + toSplit: new RegExp("(?:\\s+(?:-|" + d.language.to + ")\\s+)", "gi"), + andTest: new RegExp("\\s+(" + d.language.and + "|&&)\\s+", "i"), + andSplit: new RegExp("(?:\\s+(?:" + d.language.and + "|&&)\\s+)", "gi"), + orTest: new RegExp("(\\||\\s+" + d.language.or + "\\s+)", "i"), + orSplit: new RegExp("(?:\\s+(?:" + d.language.or + ")\\s+|\\|)", "gi"), + iQuery: new RegExp(o, "i"), + igQuery: new RegExp(o, "ig"), + operTest: /^[<>]=?/, + gtTest: />/, + gteTest: />=/, + ltTest: /' + (l.data("placeholder") || l.attr("data-placeholder") || h.filter_placeholder.select || "") + "" : "", + o = j, k = j, j.indexOf(h.filter_selectSourceSeparator) >= 0 && (o = j.split(h.filter_selectSourceSeparator), + k = o[1], o = o[0]), i += ""); + g.$table.find("thead").find("select." + e.filter + '[data-column="' + m + '"]').append(i), + k = h.filter_selectSource, p = "function" == typeof k ? !0 : d.getColumnData(f, k, m), + p && b.buildSelect(g.table, m, "", !0, l.hasClass(h.filter_onlyAvail)); } - b.filter.buildDefault(d, !0), b.filter.bindSearch(d, e.$table.find("." + c.filter), !0), - f.filter_external && b.filter.bindSearch(d, f.filter_external), f.filter_hideFilters && b.filter.hideFilters(d, e), - e.showProcessing && e.$table.unbind("filterStart filterEnd ".split(" ").join(e.namespace + "filter ").replace(/\s+/g, " ")).bind("filterStart filterEnd ".split(" ").join(e.namespace + "filter "), function(f, g) { - j = g ? e.$table.find("." + c.header).filter("[data-column]").filter(function() { - return "" !== g[a(this).data("column")]; - }) : "", b.isProcessing(d, "filterStart" === f.type, g ? j : ""); - }), e.filteredRows = e.totalRows, e.$table.unbind("tablesorter-initialized pagerBeforeInitialized ".split(" ").join(e.namespace + "filter ").replace(/\s+/g, " ")).bind("tablesorter-initialized pagerBeforeInitialized ".split(" ").join(e.namespace + "filter "), function() { + b.buildDefault(f, !0), b.bindSearch(f, g.$table.find("." + e.filter), !0), h.filter_external && b.bindSearch(f, h.filter_external), + h.filter_hideFilters && b.hideFilters(g), g.showProcessing && (k = "filterStart filterEnd ".split(" ").join(g.namespace + "filter "), + g.$table.unbind(k.replace(d.regex.spaces, " ")).bind(k, function(b, c) { + l = c ? g.$table.find("." + e.header).filter("[data-column]").filter(function() { + return "" !== c[a(this).data("column")]; + }) : "", d.isProcessing(f, "filterStart" === b.type, c ? l : ""); + })), g.filteredRows = g.totalRows, k = "tablesorter-initialized pagerBeforeInitialized ".split(" ").join(g.namespace + "filter "), + g.$table.unbind(k.replace(d.regex.spaces, " ")).bind(k, function() { var a = this.config.widgetOptions; - l = b.filter.setDefaults(d, e, a) || [], l.length && (e.delayInit && "" === l.join("") || b.setFilters(d, l, !0)), - e.$table.trigger("filterFomatterUpdate"), setTimeout(function() { - a.filter_initialized || b.filter.filterInitComplete(e); + n = b.setDefaults(f, g, a) || [], n.length && (g.delayInit && "" === n.join("") || d.setFilters(f, n, !0)), + g.$table.triggerHandler("filterFomatterUpdate"), setTimeout(function() { + a.filter_initialized || b.filterInitComplete(g); }, 100); - }), e.pager && e.pager.initialized && !f.filter_initialized && (e.$table.trigger("filterFomatterUpdate"), + }), g.pager && g.pager.initialized && !h.filter_initialized && (g.$table.triggerHandler("filterFomatterUpdate"), setTimeout(function() { - b.filter.filterInitComplete(e); + b.filterInitComplete(g); }, 100)); }, formatterUpdated: function(a, b) { - var c = a.closest("table")[0].config.widgetOptions; - c.filter_initialized || (c.filter_formatterInit[b] = 1); + var c = a && a.closest("table")[0].config.widgetOptions; + c && !c.filter_initialized && (c.filter_formatterInit[b] = 1); }, filterInitComplete: function(c) { var d, e, f = c.widgetOptions, g = 0, h = function() { - f.filter_initialized = !0, c.$table.trigger("filterInit", c), b.filter.findRows(c.table, c.$table.data("lastSearch") || []); + f.filter_initialized = !0, c.$table.triggerHandler("filterInit", c), b.findRows(c.table, c.$table.data("lastSearch") || []); }; if (a.isEmptyObject(f.filter_formatter)) h(); else { for (e = f.filter_formatterInit.length, d = 0; e > d; d++) 1 === f.filter_formatterInit[d] && g++; @@ -5667,84 +5943,95 @@ }, 500)) : h(); } }, - setDefaults: function(c, d, e) { - var f, g, h, i, j, k = b.getFilters(c) || []; - if (e.filter_saveFilters && b.storage && (g = b.storage(c, "tablesorter-filters") || [], - f = a.isArray(g), f && "" === g.join("") || !f || (k = g)), "" === k.join("")) for (j = d.$headers.add(e.filter_$externalFilters).filter("[" + e.filter_defaultAttrib + "]"), - h = 0; h <= d.columns; h++) i = h === d.columns ? "all" : h, k[h] = j.filter('[data-column="' + i + '"]').attr(e.filter_defaultAttrib) || k[h] || ""; - return d.$table.data("lastSearch", k), k; - }, - parseFilter: function(a, b, c, d, e) { - return e || d ? a.parsers[c].format(b, a.table, [], c) : b; - }, - buildRow: function(d, e, f) { - var g, h, i, j, k, l, m, n = e.columns, o = a.isArray(f.filter_cellFilter), p = ''; - for (h = 0; n > h; h++) p += o ? "" : ""; - for (e.$filters = a(p += "").appendTo(e.$table.children("thead").eq(0)).find("td"), - h = 0; n > h; h++) k = !1, i = e.$headerIndexed[h], m = b.getColumnData(d, f.filter_functions, h), - j = f.filter_functions && m && "function" != typeof m || i.hasClass("filter-select"), - g = b.getColumnData(d, e.headers, h), k = "false" === b.getData(i[0], g, "filter") || "false" === b.getData(i[0], g, "parser"), - j ? p = a("').appendTo(e.$filters.eq(h)), - p && p.attr("placeholder", i.data("placeholder") || i.attr("data-placeholder") || f.filter_placeholder.search || "")), - p && (l = (a.isArray(f.filter_cssFilter) ? "undefined" != typeof f.filter_cssFilter[h] ? f.filter_cssFilter[h] || "" : "" : f.filter_cssFilter) || "", - p.addClass(c.filter + " " + l).attr("data-column", h), k && (p.attr("placeholder", "").addClass(c.filterDisabled)[0].disabled = !0)); - }, - bindSearch: function(c, d, e) { - if (c = a(c)[0], d = a(d), d.length) { - var f = c.config, g = f.widgetOptions, h = g.filter_$externalFilters; - e !== !0 && (g.filter_$anyMatch = d.filter(g.filter_anyColumnSelector + "," + g.filter_multipleColumnSelector), - g.filter_$externalFilters = h && h.length ? g.filter_$externalFilters.add(d) : d, - b.setFilters(c, f.$table.data("lastSearch") || [], e === !1)), d.attr("data-lastSearchTime", new Date().getTime()).unbind("keypress keyup search change ".split(" ").join(f.namespace + "filter ").replace(/\s+/g, " ")).bind("keyup" + f.namespace + "filter", function(d) { - if (a(this).attr("data-lastSearchTime", new Date().getTime()), 27 === d.which) this.value = ""; else { - if (g.filter_liveSearch === !1) return; - if ("" !== this.value && ("number" == typeof g.filter_liveSearch && this.value.length < g.filter_liveSearch || 13 !== d.which && 8 !== d.which && (d.which < 32 || d.which >= 37 && d.which <= 40))) return; + processFilters: function(a, b) { + var c, d = b ? encodeURIComponent : decodeURIComponent, e = a.length; + for (c = 0; e > c; c++) a[c] && (a[c] = d(a[c])); + return a; + }, + setDefaults: function(c, e, f) { + var g, h, i, j, k, l = d.getFilters(c) || []; + if (f.filter_saveFilters && d.storage && (h = d.storage(c, "tablesorter-filters") || [], + g = a.isArray(h), g && "" === h.join("") || !g || (l = b.processFilters(h))), "" === l.join("")) for (k = e.$headers.add(f.filter_$externalFilters).filter("[" + f.filter_defaultAttrib + "]"), + i = 0; i <= e.columns; i++) j = i === e.columns ? "all" : i, l[i] = k.filter('[data-column="' + j + '"]').attr(f.filter_defaultAttrib) || l[i] || ""; + return e.$table.data("lastSearch", l), l; + }, + parseFilter: function(a, b, c, d) { + return d || c.parsed[c.index] ? a.parsers[c.index].format(b, a.table, [], c.index) : b; + }, + buildRow: function(c, f, g) { + var h, i, j, k, l, m, n, o, p, q = g.filter_cellFilter, r = f.columns, s = a.isArray(q), t = ''; + for (j = 0; r > j; j++) f.$headerIndexed[j].length && (p = f.$headerIndexed[j] && f.$headerIndexed[j][0].colSpan || 0, + t += p > 1 ? ' j; j++) m = !1, k = f.$headerIndexed[j], k && k.length && (h = b.getColumnElm(f, f.$filters, j), + o = d.getColumnData(c, g.filter_functions, j), l = g.filter_functions && o && "function" != typeof o || k.hasClass("filter-select"), + i = d.getColumnData(c, f.headers, j), m = "false" === d.getData(k[0], i, "filter") || "false" === d.getData(k[0], i, "parser"), + l ? t = a("').appendTo(h), + t && (p = k.data("placeholder") || k.attr("data-placeholder") || g.filter_placeholder.search || "", + t.attr("placeholder", p))), t && (n = (a.isArray(g.filter_cssFilter) ? "undefined" != typeof g.filter_cssFilter[j] ? g.filter_cssFilter[j] || "" : "" : g.filter_cssFilter) || "", + t.addClass(e.filter + " " + n).attr("data-column", h.attr("data-column")), m && (t.attr("placeholder", "").addClass(e.filterDisabled)[0].disabled = !0))); + }, + bindSearch: function(c, e, g) { + if (c = a(c)[0], e = a(e), e.length) { + var h, i = c.config, j = i.widgetOptions, k = i.namespace + "filter", l = j.filter_$externalFilters; + g !== !0 && (h = j.filter_anyColumnSelector + "," + j.filter_multipleColumnSelector, + j.filter_$anyMatch = e.filter(h), l && l.length ? j.filter_$externalFilters = j.filter_$externalFilters.add(e) : j.filter_$externalFilters = e, + d.setFilters(c, i.$table.data("lastSearch") || [], g === !1)), h = "keypress keyup keydown search change input ".split(" ").join(k + " "), + e.attr("data-lastSearchTime", new Date().getTime()).unbind(h.replace(d.regex.spaces, " ")).bind("keydown" + k, function(a) { + return a.which !== f.escape || j.filter_resetOnEsc ? void 0 : !1; + }).bind("keyup" + k, function(d) { + var e = parseInt(a(this).attr("data-column"), 10); + if (a(this).attr("data-lastSearchTime", new Date().getTime()), d.which === f.escape) this.value = j.filter_resetOnEsc ? "" : i.lastSearch[e]; else { + if (j.filter_liveSearch === !1) return; + if ("" !== this.value && ("number" == typeof j.filter_liveSearch && this.value.length < j.filter_liveSearch || d.which !== f.enter && d.which !== f.backSpace && (d.which < f.space || d.which >= f.left && d.which <= f.down))) return; } - b.filter.searching(c, !0, !0); - }).bind("search change keypress ".split(" ").join(f.namespace + "filter "), function(d) { - var e = a(this).data("column"); - (13 === d.which || "search" === d.type || "change" === d.type && this.value !== f.lastSearch[e]) && (d.preventDefault(), - a(this).attr("data-lastSearchTime", new Date().getTime()), b.filter.searching(c, !1, !0)); + b.searching(c, !0, !0); + }).bind("search change keypress input ".split(" ").join(k + " "), function(d) { + var e = parseInt(a(this).attr("data-column"), 10); + (j.filter_initialized && (d.which === f.enter || "search" === d.type || "change" === d.type && this.value !== i.lastSearch[e]) || "input" === d.type && "" === this.value) && (d.preventDefault(), + a(this).attr("data-lastSearchTime", new Date().getTime()), b.searching(c, "keypress" !== d.type, !0)); }); } }, searching: function(a, c, d) { var e = a.config.widgetOptions; - clearTimeout(e.searchTimer), "undefined" == typeof c || c === !0 ? e.searchTimer = setTimeout(function() { - b.filter.checkFilters(a, c, d); - }, e.filter_liveSearch ? e.filter_searchDelay : 10) : b.filter.checkFilters(a, c, d); - }, - checkFilters: function(d, e, f) { - var g = d.config, h = g.widgetOptions, i = a.isArray(e), j = i ? e : b.getFilters(d, !0), k = (j || []).join(""); - return a.isEmptyObject(g.cache) ? void (g.delayInit && g.pager && g.pager.initialized && g.$table.trigger("updateCache", [ function() { - b.filter.checkFilters(d, !1, f); - } ])) : (i && (b.setFilters(d, j, !1, f !== !0), h.filter_initialized || (g.lastCombinedFilter = "")), - h.filter_hideFilters && g.$table.find("." + c.filterRow).trigger("" === k ? "mouseleave" : "mouseenter"), - g.lastCombinedFilter !== k || e === !1 ? (e === !1 && (g.lastCombinedFilter = null, - g.lastSearch = []), h.filter_initialized && g.$table.trigger("filterStart", [ j ]), - g.showProcessing ? void setTimeout(function() { - return b.filter.findRows(d, j, k), !1; - }, 30) : (b.filter.findRows(d, j, k), !1)) : void 0); - }, - hideFilters: function(d, e) { - var f, g, h; - a(d).find("." + c.filterRow).addClass(c.filterRowHide).bind("mouseenter mouseleave", function(b) { - var d = b; - f = a(this), clearTimeout(h), h = setTimeout(function() { - /enter|over/.test(d.type) ? f.removeClass(c.filterRowHide) : a(document.activeElement).closest("tr")[0] !== f[0] && "" === e.lastCombinedFilter && f.addClass(c.filterRowHide); + clearTimeout(e.filter_searchTimer), "undefined" == typeof c || c === !0 ? e.filter_searchTimer = setTimeout(function() { + b.checkFilters(a, c, d); + }, e.filter_liveSearch ? e.filter_searchDelay : 10) : b.checkFilters(a, c, d); + }, + checkFilters: function(c, f, g) { + var h = c.config, i = h.widgetOptions, j = a.isArray(f), k = j ? f : d.getFilters(c, !0), l = (k || []).join(""); + return a.isEmptyObject(h.cache) ? void (h.delayInit && h.pager && h.pager.initialized && d.updateCache(h, function() { + b.checkFilters(c, !1, g); + })) : (j && (d.setFilters(c, k, !1, g !== !0), i.filter_initialized || (h.lastCombinedFilter = "")), + i.filter_hideFilters && h.$table.find("." + e.filterRow).triggerHandler("" === l ? "mouseleave" : "mouseenter"), + h.lastCombinedFilter !== l || f === !1 ? (f === !1 && (h.lastCombinedFilter = null, + h.lastSearch = []), k = k || [], k = Array.prototype.map ? k.map(String) : k.join("�").split("�"), + i.filter_initialized && h.$table.triggerHandler("filterStart", [ k ]), h.showProcessing ? void setTimeout(function() { + return b.findRows(c, k, l), !1; + }, 30) : (b.findRows(c, k, l), !1)) : void 0); + }, + hideFilters: function(b, c) { + var f, g = (c || b.$table).find("." + e.filterRow).addClass(e.filterRowHide); + g.bind("mouseenter mouseleave", function(c) { + var d = c, g = a(this); + clearTimeout(f), f = setTimeout(function() { + /enter|over/.test(d.type) ? g.removeClass(e.filterRowHide) : a(document.activeElement).closest("tr")[0] !== g[0] && "" === b.lastCombinedFilter && g.addClass(e.filterRowHide); }, 200); - }).find("input, select").bind("focus blur", function(d) { - g = a(this).closest("tr"), clearTimeout(h); - var f = d; - h = setTimeout(function() { - "" === b.getFilters(e.$table).join("") && g["focus" === f.type ? "removeClass" : "addClass"](c.filterRowHide); + }).find("input, select").bind("focus blur", function(c) { + var g = c, h = a(this).closest("tr"); + clearTimeout(f), f = setTimeout(function() { + clearTimeout(f), "" === d.getFilters(b.$table).join("") && h.toggleClass(e.filterRowHide, "focus" !== g.type); }, 200); }); }, - defaultFilter: function(c, d) { - if ("" === c) return c; - var e = b.filter.regex.iQuery, f = d.match(b.filter.regex.igQuery).length, g = f > 1 ? a.trim(c).split(/\s/) : [ a.trim(c) ], h = g.length - 1, i = 0, j = d; + defaultFilter: function(b, d) { + if ("" === b) return b; + var e = c.iQuery, f = d.match(c.igQuery).length, g = f > 1 ? a.trim(b).split(/\s/) : [ a.trim(b) ], h = g.length - 1, i = 0, j = d; for (1 > h && f > 1 && (g[1] = g[0]); e.test(j); ) j = j.replace(e, g[i++] || ""), e.test(j) && h > i && "" !== (g[i] || "") && (j = d.replace(e, j)); return j; @@ -5752,186 +6039,236 @@ getLatestSearch: function(b) { return b ? b.sort(function(b, c) { return a(c).attr("data-lastSearchTime") - a(b).attr("data-lastSearchTime"); - }) : a(); + }) : b || a(); + }, + findRange: function(a, b, c) { + var d, e, f, g, h, i, j, k, l, m = []; + if (/^[0-9]+$/.test(b)) return [ parseInt(b, 10) ]; + if (!c && /-/.test(b)) for (e = b.match(/(\d+)\s*-\s*(\d+)/g), l = e ? e.length : 0, + k = 0; l > k; k++) { + for (f = e[k].split(/\s*-\s*/), g = parseInt(f[0], 10) || 0, h = parseInt(f[1], 10) || a.columns - 1, + g > h && (d = g, g = h, h = d), h >= a.columns && (h = a.columns - 1); h >= g; g++) m[m.length] = g; + b = b.replace(e[k], ""); + } + if (!c && /,/.test(b)) for (i = b.split(/\s*,\s*/), l = i.length, j = 0; l > j; j++) "" !== i[j] && (k = parseInt(i[j], 10), + k < a.columns && (m[m.length] = k)); + if (!m.length) for (k = 0; k < a.columns; k++) m[m.length] = k; + return m; + }, + getColumnElm: function(c, d, e) { + return d.filter(function() { + var d = b.findRange(c, a(this).attr("data-column")); + return a.inArray(e, d) > -1; + }); }, multipleColumns: function(c, d) { - var e, f, g, h, i, j, k, l, m, n = c.widgetOptions, o = n.filter_initialized || !d.filter(n.filter_anyColumnSelector).length, p = [], q = a.trim(b.filter.getLatestSearch(d).attr("data-column") || ""); - if (o && /-/.test(q)) for (f = q.match(/(\d+)\s*-\s*(\d+)/g), m = f.length, l = 0; m > l; l++) { - for (g = f[l].split(/\s*-\s*/), h = parseInt(g[0], 10) || 0, i = parseInt(g[1], 10) || c.columns - 1, - h > i && (e = h, h = i, i = e), i >= c.columns && (i = c.columns - 1); i >= h; h++) p.push(h); - q = q.replace(f[l], ""); - } - if (o && /,/.test(q)) for (j = q.split(/\s*,\s*/), m = j.length, k = 0; m > k; k++) "" !== j[k] && (l = parseInt(j[k], 10), - l < c.columns && p.push(l)); - if (!p.length) for (l = 0; l < c.columns; l++) p.push(l); - return p; + var e = c.widgetOptions, f = e.filter_initialized || !d.filter(e.filter_anyColumnSelector).length, g = a.trim(b.getLatestSearch(d).attr("data-column") || ""); + return b.findRange(c, g, !f); + }, + processTypes: function(c, d, e) { + var f, g = null, h = null; + for (f in b.types) a.inArray(f, e.excludeMatch) < 0 && null === h && (h = b.types[f](c, d, e), + null !== h && (g = h)); + return g; }, - findRows: function(c, d, e) { - if (c.config.lastCombinedFilter !== e && c.config.widgetOptions.filter_initialized) { - var f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H = b.filter.regex, I = c.config, J = I.widgetOptions, K = { - anyMatch: !1 - }, L = [ "range", "notMatch", "operators" ]; - for (K.parsed = I.$headers.map(function(d) { - return I.parsers && I.parsers[d] && I.parsers[d].parsed || b.getData && "parsed" === b.getData(I.$headerIndexed[d], b.getColumnData(c, I.headers, d), "filter") || a(this).hasClass("filter-parsed"); - }).get(), J.filter_indexed = { + matchType: function(a, b) { + var c, d = a.$headerIndexed[b]; + return d.hasClass("filter-exact") ? c = !1 : d.hasClass("filter-match") ? c = !0 : (d = a.$filters.eq(b).find("." + e.filter), + c = d.length ? "match" === a.widgetOptions.filter_matchType[(d[0].nodeName || "").toLowerCase()] : !1), + c; + }, + processRow: function(e, f, g) { + var h, i, j, k, l, m = e.widgetOptions, n = !0, o = m.filter_$anyMatch && m.filter_$anyMatch.length ? b.multipleColumns(e, m.filter_$anyMatch) : []; + if (f.$cells = f.$row.children(), f.anyMatchFlag && o.length > 1) { + if (f.anyMatch = !0, f.isMatch = !0, f.rowArray = f.$cells.map(function(b) { + return a.inArray(b, o) > -1 ? (f.parsed[b] ? l = f.cacheArray[b] : (l = f.rawArray[b], + l = a.trim(m.filter_ignoreCase ? l.toLowerCase() : l), e.sortLocaleCompare && (l = d.replaceAccents(l))), + l) : void 0; + }).get(), f.filter = f.anyMatchFilter, f.iFilter = f.iAnyMatchFilter, f.exact = f.rowArray.join(" "), + f.iExact = m.filter_ignoreCase ? f.exact.toLowerCase() : f.exact, f.cache = f.cacheArray.slice(0, -1).join(" "), + g.excludeMatch = g.noAnyMatch, i = b.processTypes(e, f, g), null !== i) n = i; else if (m.filter_startsWith) for (n = !1, + o = Math.min(e.columns, f.rowArray.length); !n && o > 0; ) o--, n = n || 0 === f.rowArray[o].indexOf(f.iFilter); else n = (f.iExact + f.childRowText).indexOf(f.iFilter) >= 0; + if (f.anyMatch = !1, f.filters.join("") === f.filter) return n; + } + for (o = 0; o < e.columns; o++) f.filter = f.filters[o], f.index = o, g.excludeMatch = g.excludeFilter[o], + f.filter && (f.cache = f.cacheArray[o], h = f.parsed[o] ? f.cache : f.rawArray[o] || "", + f.exact = e.sortLocaleCompare ? d.replaceAccents(h) : h, f.iExact = !c.type.test(typeof f.exact) && m.filter_ignoreCase ? f.exact.toLowerCase() : f.exact, + f.isMatch = b.matchType(e, o), h = n, k = m.filter_columnFilters ? e.$filters.add(e.$externalFilters).filter('[data-column="' + o + '"]').find("select option:selected").attr("data-function-name") || "" : "", + e.sortLocaleCompare && (f.filter = d.replaceAccents(f.filter)), m.filter_defaultFilter && c.iQuery.test(g.defaultColFilter[o]) && (f.filter = b.defaultFilter(f.filter, g.defaultColFilter[o])), + f.iFilter = m.filter_ignoreCase ? (f.filter || "").toLowerCase() : f.filter, j = g.functions[o], + i = null, j && (j === !0 ? i = f.isMatch ? ("" + f.iExact).search(f.iFilter) >= 0 : f.filter === f.exact : "function" == typeof j ? i = j(f.exact, f.cache, f.filter, o, f.$row, e, f) : "function" == typeof j[k || f.filter] && (l = k || f.filter, + i = j[l](f.exact, f.cache, f.filter, o, f.$row, e, f))), null === i ? (i = b.processTypes(e, f, g), + null !== i ? h = i : (l = (f.iExact + f.childRowText).indexOf(b.parseFilter(e, f.iFilter, f)), + h = !m.filter_startsWith && l >= 0 || m.filter_startsWith && 0 === l)) : h = i, + n = h ? n : !1); + return n; + }, + findRows: function(e, f, g) { + if (e.config.lastCombinedFilter !== g && e.config.widgetOptions.filter_initialized) { + var h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F = a.extend([], f), G = e.config, H = G.widgetOptions, I = { + anyMatch: !1, + filters: f, + filter_regexCache: [] + }, J = { + noAnyMatch: [ "range", "notMatch", "operators" ], functions: [], excludeFilter: [], defaultColFilter: [], - defaultAnyFilter: b.getColumnData(c, J.filter_defaultFilter, I.columns, !0) || "" - }, n = 0; n < I.columns; n++) J.filter_indexed.functions[n] = b.getColumnData(c, J.filter_functions, n), - J.filter_indexed.defaultColFilter[n] = b.getColumnData(c, J.filter_defaultFilter, n) || "", - J.filter_indexed.excludeFilter[n] = (b.getColumnData(c, J.filter_excludeFilter, n, !0) || "").split(/\s+/); - for (I.debug && (b.log("Filter: Starting filter widget search", d), u = new Date()), - I.filteredRows = 0, I.totalRows = 0, e = (d || []).join(""), j = 0; j < I.$tbodies.length; j++) { - if (k = b.processTbody(c, I.$tbodies.eq(j), !0), n = I.columns, g = I.cache[j].normalized, - h = a(a.map(g, function(a) { - return a[n].$row.get(); - })), "" === e || J.filter_serversideFiltering) h.removeClass(J.filter_filteredRow).not("." + I.cssChildRow).css("display", ""); else { - if (h = h.not("." + I.cssChildRow), f = h.length, (J.filter_$anyMatch && J.filter_$anyMatch.length || "undefined" != typeof d[I.columns]) && (K.anyMatchFlag = !0, - K.anyMatchFilter = J.filter_$anyMatch && b.filter.getLatestSearch(J.filter_$anyMatch).val() || "" + d[I.columns] || "", - J.filter_columnAnyMatch)) { - for (D = K.anyMatchFilter.split(b.filter.regex.andSplit), E = !1, w = 0; w < D.length; w++) F = D[w].split(":"), - F.length > 1 && (G = parseInt(F[0], 10) - 1, G >= 0 && G < I.columns && (d[G] = F[1], - D.splice(w, 1), w--, E = !0)); - E && (K.anyMatchFilter = D.join(" && ")); + defaultAnyFilter: d.getColumnData(e, H.filter_defaultFilter, G.columns, !0) || "" + }; + for (I.parsed = [], p = 0; p < G.columns; p++) I.parsed[p] = H.filter_useParsedData || G.parsers && G.parsers[p] && G.parsers[p].parsed || d.getData && "parsed" === d.getData(G.$headerIndexed[p], d.getColumnData(e, G.headers, p), "filter") || G.$headerIndexed[p].hasClass("filter-parsed"), + J.functions[p] = d.getColumnData(e, H.filter_functions, p) || G.$headerIndexed[p].hasClass("filter-select"), + J.defaultColFilter[p] = d.getColumnData(e, H.filter_defaultFilter, p) || "", J.excludeFilter[p] = (d.getColumnData(e, H.filter_excludeFilter, p, !0) || "").split(/\s+/); + for (G.debug && (console.log("Filter: Starting filter widget search", f), v = new Date()), + G.filteredRows = 0, G.totalRows = 0, g = (F || []).join(""), n = 0; n < G.$tbodies.length; n++) { + if (o = d.processTbody(e, G.$tbodies.eq(n), !0), p = G.columns, i = G.cache[n].normalized, + k = a(a.map(i, function(a) { + return a[p].$row.get(); + })), "" === g || H.filter_serversideFiltering) k.removeClass(H.filter_filteredRow).not("." + G.cssChildRow).css("display", ""); else { + if (k = k.not("." + G.cssChildRow), h = k.length, (H.filter_$anyMatch && H.filter_$anyMatch.length || "undefined" != typeof f[G.columns]) && (I.anyMatchFlag = !0, + I.anyMatchFilter = "" + (f[G.columns] || H.filter_$anyMatch && b.getLatestSearch(H.filter_$anyMatch).val() || ""), + H.filter_columnAnyMatch)) { + for (A = I.anyMatchFilter.split(c.andSplit), B = !1, x = 0; x < A.length; x++) C = A[x].split(":"), + C.length > 1 && (D = parseInt(C[0], 10) - 1, D >= 0 && D < G.columns && (f[D] = C[1], + A.splice(x, 1), x--, B = !0)); + B && (I.anyMatchFilter = A.join(" && ")); } - if (y = J.filter_searchFiltered, p = I.lastSearch || I.$table.data("lastSearch") || [], - y) for (w = 0; n + 1 > w; w++) v = d[w] || "", y || (w = n), y = !(!y || !p.length || 0 !== v.indexOf(p[w] || "") || H.alreadyFiltered.test(v) || /[=\"\|!]/.test(v) || /(>=?\s*-\d)/.test(v) || /(<=?\s*\d)/.test(v) || "" !== v && I.$filters && I.$filters.eq(w).find("select").length && !I.$headerIndexed[w].hasClass("filter-match")); - for (x = h.not("." + J.filter_filteredRow).length, y && 0 === x && (y = !1), I.debug && b.log("Filter: Searching through " + (y && f > x ? x : "all") + " rows"), - K.anyMatchFlag && (I.sortLocaleCompare && (K.anyMatchFilter = b.replaceAccents(K.anyMatchFilter)), - J.filter_defaultFilter && H.iQuery.test(J.filter_indexed.defaultAnyFilter) && (K.anyMatchFilter = b.filter.defaultFilter(K.anyMatchFilter, J.filter_indexed.defaultAnyFilter), - y = !1), K.iAnyMatchFilter = J.filter_ignoreCase && I.ignoreCase ? K.anyMatchFilter.toLocaleLowerCase() : K.anyMatchFilter), - i = 0; f > i; i++) if (K.cacheArray = g[i], o = h[i].className, !(H.child.test(o) || y && H.filtered.test(o))) { - if (t = !0, o = h.eq(i).nextUntil("tr:not(." + I.cssChildRow + ")"), K.childRowText = o.length && J.filter_childRows ? o.text() : "", - K.childRowText = J.filter_ignoreCase ? K.childRowText.toLocaleLowerCase() : K.childRowText, - l = h.eq(i).children(), K.anyMatchFlag) { - if (n = b.filter.multipleColumns(I, J.filter_$anyMatch), K.anyMatch = !0, K.rowArray = l.map(function(c) { - if (a.inArray(c, n) > -1) { - var d; - return K.parsed[c] ? d = K.cacheArray[c] : (d = this ? this.getAttribute(I.textAttribute) || this.textContent || a(this).text() : "", - d = a.trim(J.filter_ignoreCase ? d.toLowerCase() : d), I.sortLocaleCompare && (d = b.replaceAccents(d))), - d; - } - }).get(), K.filter = K.anyMatchFilter, K.iFilter = K.iAnyMatchFilter, K.exact = K.rowArray.join(" "), - K.iExact = J.filter_ignoreCase ? K.exact.toLowerCase() : K.exact, K.cache = K.cacheArray.slice(0, -1).join(" "), - z = null, a.each(b.filter.types, function(b, c) { - return a.inArray(b, L) < 0 && (r = c(I, K), null !== r) ? (z = r, !1) : void 0; - }), null !== z) t = z; else if (J.filter_startsWith) for (t = !1, n = I.columns; !t && n > 0; ) n--, - t = t || 0 === K.rowArray[n].indexOf(K.iFilter); else t = (K.iExact + K.childRowText).indexOf(K.iFilter) >= 0; - K.anyMatch = !1; + if (z = H.filter_searchFiltered, s = G.lastSearch || G.$table.data("lastSearch") || [], + z) for (x = 0; p + 1 > x; x++) w = f[x] || "", z || (x = p), z = z && s.length && 0 === w.indexOf(s[x] || "") && !c.alreadyFiltered.test(w) && !c.exactTest.test(w) && !(c.isNeg1.test(w) || c.isNeg2.test(w)) && !("" !== w && G.$filters && G.$filters.filter('[data-column="' + x + '"]').find("select").length && !b.matchType(G, x)); + for (y = k.not("." + H.filter_filteredRow).length, z && 0 === y && (z = !1), G.debug && console.log("Filter: Searching through " + (z && h > y ? y : "all") + " rows"), + I.anyMatchFlag && (G.sortLocaleCompare && (I.anyMatchFilter = d.replaceAccents(I.anyMatchFilter)), + H.filter_defaultFilter && c.iQuery.test(J.defaultAnyFilter) && (I.anyMatchFilter = b.defaultFilter(I.anyMatchFilter, J.defaultAnyFilter), + z = !1), I.iAnyMatchFilter = H.filter_ignoreCase && G.ignoreCase ? I.anyMatchFilter.toLowerCase() : I.anyMatchFilter), + m = 0; h > m; m++) if (E = k[m].className, q = m && c.child.test(E), !(q || z && c.filtered.test(E))) { + if (I.$row = k.eq(m), I.cacheArray = i[m], j = I.cacheArray[G.columns], I.rawArray = j.raw, + I.childRowText = "", !H.filter_childByColumn) { + for (E = "", r = j.child, x = 0; x < r.length; x++) E += " " + r[x].join(" ") || ""; + I.childRowText = H.filter_childRows ? H.filter_ignoreCase ? E.toLowerCase() : E : ""; } - for (n = 0; n < I.columns; n++) K.filter = d[n], K.index = n, A = J.filter_indexed.excludeFilter[n], - K.filter && (K.cache = K.cacheArray[n], J.filter_useParsedData || K.parsed[n] ? K.exact = K.cache : (v = l[n], - s = v ? a.trim(v.getAttribute(I.textAttribute) || v.textContent || l.eq(n).text()) : "", - K.exact = I.sortLocaleCompare ? b.replaceAccents(s) : s), K.iExact = !H.type.test(typeof K.exact) && J.filter_ignoreCase ? K.exact.toLocaleLowerCase() : K.exact, - s = t, C = J.filter_columnFilters ? I.$filters.add(I.$externalFilters).filter('[data-column="' + n + '"]').find("select option:selected").attr("data-function-name") || "" : "", - I.sortLocaleCompare && (K.filter = b.replaceAccents(K.filter)), v = !0, J.filter_defaultFilter && H.iQuery.test(J.filter_indexed.defaultColFilter[n]) && (K.filter = b.filter.defaultFilter(K.filter, J.filter_indexed.defaultColFilter[n]), - v = !1), K.iFilter = J.filter_ignoreCase ? (K.filter || "").toLocaleLowerCase() : K.filter, - B = J.filter_indexed.functions[n], m = I.$headerIndexed[n], q = m.hasClass("filter-select"), - z = null, (B || q && v) && (B === !0 || q ? z = m.hasClass("filter-match") ? K.iExact.search(K.iFilter) >= 0 : K.filter === K.exact : "function" == typeof B ? z = B(K.exact, K.cache, K.filter, n, h.eq(i), I) : "function" == typeof B[C || K.filter] && (z = B[C || K.filter](K.exact, K.cache, K.filter, n, h.eq(i), I))), - null === z ? (a.each(b.filter.types, function(b, c) { - return a.inArray(b, A) < 0 && (r = c(I, K), null !== r) ? (z = r, !1) : void 0; - }), null !== z ? s = z : (K.exact = (K.iExact + K.childRowText).indexOf(b.filter.parseFilter(I, K.iFilter, n, K.parsed[n])), - s = !J.filter_startsWith && K.exact >= 0 || J.filter_startsWith && 0 === K.exact)) : s = z, - t = s ? t : !1); - h.eq(i).toggleClass(J.filter_filteredRow, !t)[0].display = t ? "" : "none", o.length && o.toggleClass(J.filter_filteredRow, !t); + if (t = !1, u = b.processRow(G, I, J), l = j.$row, w = u ? !0 : !1, r = j.$row.filter(":gt(0)"), + H.filter_childRows && r.length) { + if (H.filter_childByColumn) for (H.filter_childWithSibs || (r.addClass(H.filter_filteredRow), + l = l.eq(0)), x = 0; x < r.length; x++) I.$row = r.eq(x), I.cacheArray = j.child[x], + I.rawArray = I.cacheArray, w = b.processRow(G, I, J), t = t || w, !H.filter_childWithSibs && w && r.eq(x).removeClass(H.filter_filteredRow); + t = t || u; + } else t = w; + l.toggleClass(H.filter_filteredRow, !t)[0].display = t ? "" : "none"; } } - I.filteredRows += h.not("." + J.filter_filteredRow).length, I.totalRows += h.length, - b.processTbody(c, k, !1); + G.filteredRows += k.not("." + H.filter_filteredRow).length, G.totalRows += k.length, + d.processTbody(e, o, !1); } - I.lastCombinedFilter = e, I.lastSearch = d, I.$table.data("lastSearch", d), J.filter_saveFilters && b.storage && b.storage(c, "tablesorter-filters", d), - I.debug && b.benchmark("Completed filter widget search", u), J.filter_initialized && I.$table.trigger("filterEnd", I), - setTimeout(function() { - I.$table.trigger("applyWidgets"); + G.lastCombinedFilter = g, G.lastSearch = F, G.$table.data("lastSearch", F), H.filter_saveFilters && d.storage && d.storage(e, "tablesorter-filters", b.processFilters(F, !0)), + G.debug && console.log("Completed filter widget search" + d.benchmark(v)), H.filter_initialized && (G.$table.triggerHandler("filterBeforeEnd", G), + G.$table.triggerHandler("filterEnd", G)), setTimeout(function() { + d.applyWidget(G.table); }, 0); } }, - getOptionSource: function(c, d, e) { + getOptionSource: function(c, e, f) { c = a(c)[0]; - var f, g, h, i = c.config, j = i.widgetOptions, k = [], l = !1, m = j.filter_selectSource, n = i.$table.data("lastSearch") || [], o = a.isFunction(m) ? !0 : b.getColumnData(c, m, d); - if (e && "" !== n[d] && (e = !1), o === !0) l = m(c, d, e); else { - if (o instanceof a || "string" === a.type(o) && o.indexOf("") >= 0) return o; - a.isArray(o) ? l = o : "object" === a.type(m) && o && (l = o(c, d, e)); + var g = c.config, h = g.widgetOptions, i = !1, j = h.filter_selectSource, k = g.$table.data("lastSearch") || [], l = "function" == typeof j ? !0 : d.getColumnData(c, j, e); + if (f && "" !== k[e] && (f = !1), l === !0) i = j(c, e, f); else { + if (l instanceof a || "string" === a.type(l) && l.indexOf("") >= 0) return l; + a.isArray(l) ? i = l : "object" === a.type(j) && l && (i = l(c, e, f)); } - if (l === !1 && (l = b.filter.getOptions(c, d, e)), l = a.grep(l, function(b, c) { - return a.inArray(b, l) === c; - }), i.$headerIndexed[d].hasClass("filter-select-nosort")) return l; - for (h = l.length, g = 0; h > g; g++) k.push({ - t: l[g], - p: i.parsers && i.parsers[d].format(l[g], c, [], d) - }); - for (f = i.textSorter || "", k.sort(function(e, g) { - var h = e.p.toString(), i = g.p.toString(); - return a.isFunction(f) ? f(h, i, !0, d, c) : "object" == typeof f && f.hasOwnProperty(d) ? f[d](h, i, !0, d, c) : b.sortNatural ? b.sortNatural(h, i) : !0; - }), l = [], h = k.length, g = 0; h > g; g++) l.push(k[g].t); - return l; + return i === !1 && (i = b.getOptions(c, e, f)), b.processOptions(c, e, i); }, - getOptions: function(b, c, d) { + processOptions: function(b, c, e) { + if (!a.isArray(e)) return !1; b = a(b)[0]; - var e, f, g, h, i, j, k = b.config, l = k.widgetOptions, m = []; - for (f = 0; f < k.$tbodies.length; f++) for (i = k.cache[f], g = k.cache[f].normalized.length, - e = 0; g > e; e++) h = i.row ? i.row[e] : i.normalized[e][k.columns].$row[0], d && h.className.match(l.filter_filteredRow) || (l.filter_useParsedData || k.parsers[c].parsed || k.$headerIndexed[c].hasClass("filter-parsed") ? m.push("" + i.normalized[e][c]) : (j = h.cells[c], - j && m.push(a.trim(j.getAttribute(k.textAttribute) || j.textContent || a(j).text())))); - return m; + var f, g, h, i, j, k, l = b.config, m = "undefined" != typeof c && null !== c && c >= 0 && c < l.columns, n = []; + if (e = a.grep(e, function(b, c) { + return b.text ? !0 : a.inArray(b, e) === c; + }), m && l.$headerIndexed[c].hasClass("filter-select-nosort")) return e; + for (i = e.length, h = 0; i > h; h++) g = e[h], k = g.text ? g.text : g, j = (m && l.parsers && l.parsers.length && l.parsers[c].format(k, b, [], c) || k).toString(), + j = l.widgetOptions.filter_ignoreCase ? j.toLowerCase() : j, g.text ? (g.parsed = j, + n[n.length] = g) : n[n.length] = { + text: g, + parsed: j + }; + for (f = l.textSorter || "", n.sort(function(a, e) { + var g = a.parsed, h = e.parsed; + return m && "function" == typeof f ? f(g, h, !0, c, b) : m && "object" == typeof f && f.hasOwnProperty(c) ? f[c](g, h, !0, c, b) : d.sortNatural ? d.sortNatural(g, h) : !0; + }), e = [], i = n.length, h = 0; i > h; h++) e[e.length] = n[h]; + return e; + }, + getOptions: function(b, c, e) { + b = a(b)[0]; + var f, g, h, i, j, k, l, m, n = b.config, o = n.widgetOptions, p = []; + for (g = 0; g < n.$tbodies.length; g++) for (j = n.cache[g], h = n.cache[g].normalized.length, + f = 0; h > f; f++) if (i = j.row ? j.row[f] : j.normalized[f][n.columns].$row[0], + !e || !i.className.match(o.filter_filteredRow)) if (o.filter_useParsedData || n.parsers[c].parsed || n.$headerIndexed[c].hasClass("filter-parsed")) { + if (p[p.length] = "" + j.normalized[f][c], o.filter_childRows && o.filter_childByColumn) for (m = j.normalized[f][n.columns].$row.length - 1, + k = 0; m > k; k++) p[p.length] = "" + j.normalized[f][n.columns].child[k][c]; + } else if (p[p.length] = j.normalized[f][n.columns].raw[c], o.filter_childRows && o.filter_childByColumn) for (m = j.normalized[f][n.columns].$row.length, + k = 1; m > k; k++) l = j.normalized[f][n.columns].$row.eq(k).children().eq(c), p[p.length] = "" + d.getElementText(n, l, c); + return p; }, - buildSelect: function(d, e, f, g, h) { - if (d = a(d)[0], e = parseInt(e, 10), d.config.cache && !a.isEmptyObject(d.config.cache)) { - var i, j, k, l, m, n, o = d.config, p = o.widgetOptions, q = o.$headerIndexed[e], r = '", s = o.$table.find("thead").find("select." + c.filter + '[data-column="' + e + '"]').val(); - if (("undefined" == typeof f || "" === f) && (f = b.filter.getOptionSource(d, e, h)), - a.isArray(f)) { - for (i = 0; i < f.length; i++) k = f[i] = ("" + f[i]).replace(/\"/g, """), - j = k, k.indexOf(p.filter_selectSourceSeparator) >= 0 && (l = k.split(p.filter_selectSourceSeparator), - j = l[0], k = l[1]), r += "" !== f[i] ? "" : ""; - f = []; + buildSelect: function(d, f, g, h, i) { + if (d = a(d)[0], f = parseInt(f, 10), d.config.cache && !a.isEmptyObject(d.config.cache)) { + var j, k, l, m, n, o, p, q = d.config, r = q.widgetOptions, s = q.$headerIndexed[f], t = '", u = q.$table.find("thead").find("select." + e.filter + '[data-column="' + f + '"]').val(); + if (("undefined" == typeof g || "" === g) && (g = b.getOptionSource(d, f, i)), a.isArray(g)) { + for (j = 0; j < g.length; j++) if (p = g[j], p.text) { + p["data-function-name"] = "undefined" == typeof p.value ? p.text : p.value, t += ""; + } else "" + p != "[object Object]" && (l = p = ("" + p).replace(c.quote, """), + k = l, l.indexOf(r.filter_selectSourceSeparator) >= 0 && (m = l.split(r.filter_selectSourceSeparator), + k = m[0], l = m[1]), t += "" !== p ? "" : ""); + g = []; } - m = (o.$filters ? o.$filters : o.$table.children("thead")).find("." + c.filter), - p.filter_$externalFilters && (m = m && m.length ? m.add(p.filter_$externalFilters) : p.filter_$externalFilters), - n = m.filter('select[data-column="' + e + '"]'), n.length && (n[g ? "html" : "append"](r), - a.isArray(f) || n.append(f).val(s), n.val(s)); + n = (q.$filters ? q.$filters : q.$table.children("thead")).find("." + e.filter), + r.filter_$externalFilters && (n = n && n.length ? n.add(r.filter_$externalFilters) : r.filter_$externalFilters), + o = n.filter('select[data-column="' + f + '"]'), o.length && (o[h ? "html" : "append"](t), + a.isArray(g) || o.append(g).val(u), o.val(u)); } }, buildDefault: function(a, c) { - var d, e, f, g = a.config, h = g.widgetOptions, i = g.columns; - for (d = 0; i > d; d++) e = g.$headerIndexed[d], f = !(e.hasClass("filter-false") || e.hasClass("parser-false")), - (e.hasClass("filter-select") || b.getColumnData(a, h.filter_functions, d) === !0) && f && b.filter.buildSelect(a, d, "", c, e.hasClass(h.filter_onlyAvail)); + var e, f, g, h = a.config, i = h.widgetOptions, j = h.columns; + for (e = 0; j > e; e++) f = h.$headerIndexed[e], g = !(f.hasClass("filter-false") || f.hasClass("parser-false")), + (f.hasClass("filter-select") || d.getColumnData(a, i.filter_functions, e) === !0) && g && b.buildSelect(a, e, "", c, f.hasClass(i.filter_onlyAvail)); } - }, b.getFilters = function(d, e, f, g) { - var h, i, j, k, l = !1, m = d ? a(d)[0].config : "", n = m ? m.widgetOptions : ""; - if (e !== !0 && n && !n.filter_columnFilters) return a(d).data("lastSearch"); - if (m && (m.$filters && (i = m.$filters.find("." + c.filter)), n.filter_$externalFilters && (i = i && i.length ? i.add(n.filter_$externalFilters) : n.filter_$externalFilters), + }, c = b.regex, d.getFilters = function(c, d, f, g) { + var h, i, j, k, l = !1, m = c ? a(c)[0].config : "", n = m ? m.widgetOptions : ""; + if (d !== !0 && n && !n.filter_columnFilters || a.isArray(f) && f.join("") === m.lastCombinedFilter) return a(c).data("lastSearch"); + if (m && (m.$filters && (i = m.$filters.find("." + e.filter)), n.filter_$externalFilters && (i = i && i.length ? i.add(n.filter_$externalFilters) : n.filter_$externalFilters), i && i.length)) for (l = f || [], h = 0; h < m.columns + 1; h++) k = h === m.columns ? n.filter_anyColumnSelector + "," + n.filter_multipleColumnSelector : '[data-column="' + h + '"]', - j = i.filter(k), j.length && (j = b.filter.getLatestSearch(j), a.isArray(f) ? (g && j.slice(1), + j = i.filter(k), j.length && (j = b.getLatestSearch(j), a.isArray(f) ? (g && j.length > 1 && (j = j.slice(1)), h === m.columns && (k = j.filter(n.filter_anyColumnSelector), j = k.length ? k : j), - j.val(f[h]).trigger("change.tsfilter")) : (l[h] = j.val() || "", h === m.columns ? j.slice(1).filter('[data-column*="' + j.attr("data-column") + '"]').val(l[h]) : j.slice(1).val(l[h])), + j.val(f[h]).trigger("change" + m.namespace)) : (l[h] = j.val() || "", h === m.columns ? j.slice(1).filter('[data-column*="' + j.attr("data-column") + '"]').val(l[h]) : j.slice(1).val(l[h])), h === m.columns && j.length && (n.filter_$anyMatch = j)); return 0 === l.length && (l = !1), l; - }, b.setFilters = function(c, d, e, f) { - var g = c ? a(c)[0].config : "", h = b.getFilters(c, !0, d, f); - return g && e && (g.lastCombinedFilter = null, g.lastSearch = [], b.filter.searching(g.table, d, f), - g.$table.trigger("filterFomatterUpdate")), !!h; + }, d.setFilters = function(c, e, f, g) { + var h = c ? a(c)[0].config : "", i = d.getFilters(c, !0, e, g); + return "undefined" == typeof f && (f = !0), h && f && (h.lastCombinedFilter = null, + h.lastSearch = [], b.searching(h.table, e, g), h.$table.triggerHandler("filterFomatterUpdate")), + !!i; }; }(jQuery), function(a, b) { "use strict"; - var c = a.tablesorter = a.tablesorter || {}; + var c = a.tablesorter || {}; a.extend(c.css, { sticky: "tablesorter-stickyHeader", stickyVis: "tablesorter-sticky-visible", stickyHide: "tablesorter-sticky-hidden", stickyWrap: "tablesorter-sticky-wrapper" }), c.addHeaderResizeEvent = function(b, c, d) { - b = a(b)[0]; - var e, f = { - timer: 250 - }, g = a.extend({}, f, d), h = b.config, i = h.widgetOptions, j = function(b) { - i.resize_flag = !0, e = [], h.$headers.each(function() { - var b = a(this), c = b.data("savedSizes") || [ 0, 0 ], d = this.offsetWidth, f = this.offsetHeight; - (d !== c[0] || f !== c[1]) && (b.data("savedSizes", [ d, f ]), e.push(this)); - }), e.length && b !== !1 && h.$table.trigger("resize", [ e ]), i.resize_flag = !1; - }; - return j(!1), clearInterval(i.resize_timer), c ? (i.resize_flag = !1, !1) : void (i.resize_timer = setInterval(function() { - i.resize_flag || j(); - }, g.timer)); + if (b = a(b)[0], b.config) { + var e = { + timer: 250 + }, f = a.extend({}, e, d), g = b.config, h = g.widgetOptions, i = function(a) { + var b, c, d, e, f, i, j = g.$headers.length; + for (h.resize_flag = !0, c = [], b = 0; j > b; b++) d = g.$headers.eq(b), e = d.data("savedSizes") || [ 0, 0 ], + f = d[0].offsetWidth, i = d[0].offsetHeight, (f !== e[0] || i !== e[1]) && (d.data("savedSizes", [ f, i ]), + c.push(d[0])); + c.length && a !== !1 && g.$table.triggerHandler("resize", [ c ]), h.resize_flag = !1; + }; + if (clearInterval(h.resize_timer), c) return h.resize_flag = !1, !1; + i(!1), h.resize_timer = setInterval(function() { + h.resize_flag || i(); + }, f.timer); + } }, c.addWidget({ id: "stickyHeaders", priority: 60, @@ -5949,115 +6286,124 @@ }, format: function(d, e, f) { if (!(e.$table.hasClass("hasStickyHeaders") || a.inArray("filter", e.widgets) >= 0 && !e.$table.hasClass("hasFilters"))) { - var g, h = e.$table, i = a(f.stickyHeaders_attachTo), j = e.namespace + "stickyheaders ", k = a(f.stickyHeaders_yScroll || f.stickyHeaders_attachTo || b), l = a(f.stickyHeaders_xScroll || f.stickyHeaders_attachTo || b), m = h.children("thead:first"), n = m.children("tr").not(".sticky-false").children(), o = h.children("tfoot"), p = isNaN(f.stickyHeaders_offset) ? a(f.stickyHeaders_offset) : "", q = p.length ? p.height() || 0 : parseInt(f.stickyHeaders_offset, 10) || 0, r = h.parent().closest("." + c.css.table).hasClass("hasStickyHeaders") ? h.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent() : [], s = r.length ? r.height() : 0, t = f.$sticky = h.clone().addClass("containsStickyHeaders " + c.css.sticky + " " + f.stickyHeaders + " " + e.namespace.slice(1) + "_extra_table").wrap('
'), u = t.parent().addClass(c.css.stickyHide).css({ - position: i.length ? "absolute" : "fixed", - padding: parseInt(t.parent().parent().css("padding-left"), 10), - top: q + s, + var g, h, i, j, k = e.$table, l = a(f.stickyHeaders_attachTo), m = e.namespace + "stickyheaders ", n = a(f.stickyHeaders_yScroll || f.stickyHeaders_attachTo || b), o = a(f.stickyHeaders_xScroll || f.stickyHeaders_attachTo || b), p = k.children("thead:first"), q = p.children("tr").not(".sticky-false").children(), r = k.children("tfoot"), s = isNaN(f.stickyHeaders_offset) ? a(f.stickyHeaders_offset) : "", t = s.length ? s.height() || 0 : parseInt(f.stickyHeaders_offset, 10) || 0, u = k.parent().closest("." + c.css.table).hasClass("hasStickyHeaders") ? k.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent() : [], v = u.length ? u.height() : 0, w = f.$sticky = k.clone().addClass("containsStickyHeaders " + c.css.sticky + " " + f.stickyHeaders + " " + e.namespace.slice(1) + "_extra_table").wrap('
'), x = w.parent().addClass(c.css.stickyHide).css({ + position: l.length ? "absolute" : "fixed", + padding: parseInt(w.parent().parent().css("padding-left"), 10), + top: t + v, left: 0, visibility: "hidden", zIndex: f.stickyHeaders_zIndex || 2 - }), v = t.children("thead:first"), w = "", x = 0, y = function(c, d) { - c.filter(":visible").each(function(c) { - var e, f, g = d.filter(":visible").eq(c), h = a(this); - "border-box" === h.css("box-sizing") ? e = h.outerWidth() : "collapse" === g.css("border-collapse") ? b.getComputedStyle ? e = parseFloat(b.getComputedStyle(this, null).width) : (f = parseFloat(h.css("border-width")), - e = h.outerWidth() - parseFloat(h.css("padding-left")) - parseFloat(h.css("padding-right")) - f) : e = h.width(), - g.css({ - "min-width": e, - "max-width": e - }); + }), y = w.children("thead:first"), z = "", A = 0, B = function(a, c) { + var d, e, f, g, h, i = a.filter(":visible"), j = i.length; + for (d = 0; j > d; d++) g = c.filter(":visible").eq(d), h = i.eq(d), "border-box" === h.css("box-sizing") ? e = h.outerWidth() : "collapse" === g.css("border-collapse") ? b.getComputedStyle ? e = parseFloat(b.getComputedStyle(h[0], null).width) : (f = parseFloat(h.css("border-width")), + e = h.outerWidth() - parseFloat(h.css("padding-left")) - parseFloat(h.css("padding-right")) - f) : e = h.width(), + g.css({ + width: e, + "min-width": e, + "max-width": e }); - }, z = function() { - q = p.length ? p.height() || 0 : parseInt(f.stickyHeaders_offset, 10) || 0, x = 0, - u.css({ - left: i.length ? parseInt(i.css("padding-left"), 10) || 0 : h.offset().left - parseInt(h.css("margin-left"), 10) - l.scrollLeft() - x, - width: h.outerWidth() - }), y(h, t), y(n, g); + }, C = function() { + t = s.length ? s.height() || 0 : parseInt(f.stickyHeaders_offset, 10) || 0, A = 0, + x.css({ + left: l.length ? parseInt(l.css("padding-left"), 10) || 0 : k.offset().left - parseInt(k.css("margin-left"), 10) - o.scrollLeft() - A, + width: k.outerWidth() + }), B(k, w), B(q, j); + }, D = function(b) { + if (k.is(":visible")) { + v = u.length ? u.offset().top - n.scrollTop() + u.height() : 0; + var d = k.offset(), e = a.isWindow(n[0]), f = a.isWindow(o[0]), g = (l.length ? e ? n.scrollTop() : n.offset().top : n.scrollTop()) + t + v, h = k.height() - (x.height() + (r.height() || 0)), i = g > d.top && g < d.top + h ? "visible" : "hidden", j = { + visibility: i + }; + l.length && (j.top = e ? g - l.offset().top : l.scrollTop()), f && (j.left = k.offset().left - parseInt(k.css("margin-left"), 10) - o.scrollLeft() - A), + u.length && (j.top = (j.top || 0) + t + v), x.removeClass(c.css.stickyVis + " " + c.css.stickyHide).addClass("visible" === i ? c.css.stickyVis : c.css.stickyHide).css(j), + (i !== z || b) && (C(), z = i); + } }; - i.length && !i.css("position") && i.css("position", "relative"), t.attr("id") && (t[0].id += f.stickyHeaders_cloneId), - t.find("thead:gt(0), tr.sticky-false").hide(), t.find("tbody, tfoot").remove(), - t.find("caption").toggle(f.stickyHeaders_includeCaption), g = v.children().children(), - t.css({ + if (l.length && !l.css("position") && l.css("position", "relative"), w.attr("id") && (w[0].id += f.stickyHeaders_cloneId), + w.find("thead:gt(0), tr.sticky-false").hide(), w.find("tbody, tfoot").remove(), + w.find("caption").toggle(f.stickyHeaders_includeCaption), j = y.children().children(), + w.css({ height: 0, width: 0, margin: 0 - }), g.find("." + c.css.resizer).remove(), h.addClass("hasStickyHeaders").bind("pagerComplete" + j, function() { - z(); - }), c.bindEvents(d, v.children().children("." + c.css.header)), h.after(u), e.onRenderHeader && v.children("tr").children().each(function(b) { - e.onRenderHeader.apply(a(this), [ b, e, t ]); - }), l.add(k).unbind("scroll resize ".split(" ").join(j).replace(/\s+/g, " ")).bind("scroll resize ".split(" ").join(j), function(b) { - if (h.is(":visible")) { - s = r.length ? r.offset().top - k.scrollTop() + r.height() : 0; - var d = h.offset(), e = a.isWindow(k[0]), f = a.isWindow(l[0]), g = (i.length ? e ? k.scrollTop() : k.offset().top : k.scrollTop()) + q + s, j = h.height() - (u.height() + (o.height() || 0)), m = g > d.top && g < d.top + j ? "visible" : "hidden", n = { - visibility: m - }; - i.length && (n.top = e ? g - i.offset().top : i.scrollTop()), f && (n.left = h.offset().left - parseInt(h.css("margin-left"), 10) - l.scrollLeft() - x), - r.length && (n.top = (n.top || 0) + q + s), u.removeClass(c.css.stickyVis + " " + c.css.stickyHide).addClass("visible" === m ? c.css.stickyVis : c.css.stickyHide).css(n), - (m !== w || "resize" === b.type) && (z(), w = m); - } - }), f.stickyHeaders_addResizeEvent && c.addHeaderResizeEvent(d), h.hasClass("hasFilters") && f.filter_columnFilters && (h.bind("filterEnd" + j, function() { + }), j.find("." + c.css.resizer).remove(), k.addClass("hasStickyHeaders").bind("pagerComplete" + m, function() { + C(); + }), c.bindEvents(d, y.children().children("." + c.css.header)), k.after(x), e.onRenderHeader) for (i = y.children("tr").children(), + h = i.length, g = 0; h > g; g++) e.onRenderHeader.apply(i.eq(g), [ g, e, w ]); + o.add(n).unbind("scroll resize ".split(" ").join(m).replace(/\s+/g, " ")).bind("scroll resize ".split(" ").join(m), function(a) { + D("resize" === a.type); + }), e.$table.unbind("stickyHeadersUpdate" + m).bind("stickyHeadersUpdate" + m, function() { + D(!0); + }), f.stickyHeaders_addResizeEvent && c.addHeaderResizeEvent(d), k.hasClass("hasFilters") && f.filter_columnFilters && (k.bind("filterEnd" + m, function() { var d = a(document.activeElement).closest("td"), g = d.parent().children().index(d); - u.hasClass(c.css.stickyVis) && f.stickyHeaders_filteredToTop && (b.scrollTo(0, h.position().top), + x.hasClass(c.css.stickyVis) && f.stickyHeaders_filteredToTop && (b.scrollTo(0, k.position().top), g >= 0 && e.$filters && e.$filters.eq(g).find("a, select, input").filter(":visible").focus()); - }), c.filter.bindSearch(h, g.find("." + c.css.filter)), f.filter_hideFilters && c.filter.hideFilters(t, e)), - h.trigger("stickyHeadersInit"); + }), c.filter.bindSearch(k, j.find("." + c.css.filter)), f.filter_hideFilters && c.filter.hideFilters(e, w)), + k.triggerHandler("stickyHeadersInit"); } }, remove: function(d, e, f) { var g = e.namespace + "stickyheaders "; - e.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd ".split(" ").join(g).replace(/\s+/g, " ")).next("." + c.css.stickyWrap).remove(), + e.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(g).replace(/\s+/g, " ")).next("." + c.css.stickyWrap).remove(), f.$sticky && f.$sticky.length && f.$sticky.remove(), a(b).add(f.stickyHeaders_xScroll).add(f.stickyHeaders_yScroll).add(f.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(g).replace(/\s+/g, " ")), - c.addHeaderResizeEvent(d, !1); + c.addHeaderResizeEvent(d, !0); } }); }(jQuery, window), function(a, b) { "use strict"; - var c = a.tablesorter = a.tablesorter || {}; + var c = a.tablesorter || {}; a.extend(c.css, { resizableContainer: "tablesorter-resizable-container", resizableHandle: "tablesorter-resizable-handle", resizableNoSelect: "tablesorter-disableSelection", resizableStorage: "tablesorter-resizable" }), a(function() { - var b = ""; + var b = ""; a(b).appendTo("body"); }), c.resizable = { init: function(b, d) { if (!b.$table.hasClass("hasResizable")) { - b.$table.addClass("hasResizable"), c.resizableReset(b.table, !0), d.resizable_ = { - $wrap: b.$table.parent(), + b.$table.addClass("hasResizable"); + var e, f, g, h, i, j = b.$table, k = j.parent(), l = parseInt(j.css("margin-top"), 10), m = d.resizable_vars = { + useStorage: c.storage && d.resizable !== !1, + $wrap: k, mouseXPosition: 0, $target: null, $next: null, - overflow: "auto" === b.$table.parent().css("overflow"), - fullWidth: Math.abs(b.$table.parent().width() - b.$table.width()) < 20, + overflow: "auto" === k.css("overflow") || "scroll" === k.css("overflow") || "auto" === k.css("overflow-x") || "scroll" === k.css("overflow-x"), storedSizes: [] }; - var e, f, g, h, i = parseInt(b.$table.css("margin-top"), 10); - for (d.resizable_.storedSizes = h = (c.storage && d.resizable !== !1 ? c.storage(b.table, c.css.resizableStorage) : []) || [], - c.resizable.setWidths(b, d, h), d.$resizable_container = a('
').css({ - top: i - }).insertBefore(b.$table), g = 0; g < b.columns; g++) f = b.$headerIndexed[g], e = "false" === c.getData(f, c.getColumnData(b.table, b.headers, g), "resizable"), - e || a('
').appendTo(d.$resizable_container).attr({ + for (c.resizableReset(b.table, !0), m.tableWidth = j.width(), m.fullWidth = Math.abs(k.width() - m.tableWidth) < 20, + m.useStorage && m.overflow && (c.storage(b.table, "tablesorter-table-original-css-width", m.tableWidth), + i = c.storage(b.table, "tablesorter-table-resized-width") || "auto", c.resizable.setWidth(j, i, !0)), + d.resizable_vars.storedSizes = h = (m.useStorage ? c.storage(b.table, c.css.resizableStorage) : []) || [], + c.resizable.setWidths(b, d, h), c.resizable.updateStoredSizes(b, d), d.$resizable_container = a('
').css({ + top: l + }).insertBefore(j), g = 0; g < b.columns; g++) f = b.$headerIndexed[g], i = c.getColumnData(b.table, b.headers, g), + e = "false" === c.getData(f, i, "resizable"), e || a('
').appendTo(d.$resizable_container).attr({ "data-column": g, unselectable: "on" }).data("header", f).bind("selectstart", !1); - b.$table.one("tablesorter-initialized", function() { - c.resizable.setHandlePosition(b, d), c.resizable.bindings(this.config, this.config.widgetOptions); - }); + c.resizable.setHandlePosition(b, d), c.resizable.bindings(b, d); } }, - setWidth: function(a, b) { + updateStoredSizes: function(a, b) { + var c, d, e = a.columns, f = b.resizable_vars; + for (f.storedSizes = [], c = 0; e > c; c++) d = a.$headerIndexed[c], f.storedSizes[c] = d.is(":visible") ? d.width() : 0; + }, + setWidth: function(a, b, c) { a.css({ width: b, - "min-width": "", - "max-width": "" + "min-width": c ? b : "", + "max-width": c ? b : "" }); }, setWidths: function(b, d, e) { - var f, g = a(b.namespace + "_extra_headers"), h = b.$table.children("colgroup").children("col"); - if (e = e || d.resizable_.storedSizes || [], e.length) { - for (f = 0; f < b.columns; f++) b.$headerIndexed[f].width(e[f]), g.length && c.resizable.setWidth(g.eq(f).add(h.eq(f)), e[f]); - a(b.namespace + "_extra_table").length && !c.hasWidget(b.table, "scroller") && c.resizable.setWidth(a(b.namespace + "_extra_table"), b.$table.outerWidth()); + var f, g, h = d.resizable_vars, i = a(b.namespace + "_extra_headers"), j = b.$table.children("colgroup").children("col"); + if (e = e || h.storedSizes || [], e.length) { + for (f = 0; f < b.columns; f++) c.resizable.setWidth(b.$headerIndexed[f], e[f], h.overflow), + i.length && (g = i.eq(f).add(j.eq(f)), c.resizable.setWidth(g, e[f], h.overflow)); + g = a(b.namespace + "_extra_table"), g.length && !c.hasWidget(b.table, "scroller") && c.resizable.setWidth(g, b.$table.outerWidth(), h.overflow); } }, setHandlePosition: function(b, d) { @@ -6074,56 +6420,58 @@ }) : c.hide()); }); }, - toggleTextSelection: function(b, d) { - var e = b.namespace + "tsresize"; - b.widgetOptions.resizable_.disabled = d, a("body").toggleClass(c.css.resizableNoSelect, d), - d ? a("body").attr("unselectable", "on").bind("selectstart" + e, !1) : a("body").removeAttr("unselectable").unbind("selectstart" + e); + toggleTextSelection: function(b, d, e) { + var f = b.namespace + "tsresize"; + d.resizable_vars.disabled = e, a("body").toggleClass(c.css.resizableNoSelect, e), + e ? a("body").attr("unselectable", "on").bind("selectstart" + f, !1) : a("body").removeAttr("unselectable").unbind("selectstart" + f); }, bindings: function(d, e) { var f = d.namespace + "tsresize"; e.$resizable_container.children().bind("mousedown", function(b) { - var f, g, h = e.resizable_, i = a(d.namespace + "_extra_headers"), j = a(b.target).data("header"); - for (f = parseInt(j.attr("data-column"), 10), h.$target = j = j.add(i.filter('[data-column="' + f + '"]')), - h.target = f, h.$next = b.shiftKey || e.resizable_targetLast ? j.parent().children().not(".resizable-false").filter(":last") : j.nextAll(":not(.resizable-false)").eq(0), - f = parseInt(h.$next.attr("data-column"), 10), h.$next = h.$next.add(i.filter('[data-column="' + f + '"]')), - h.next = f, h.mouseXPosition = b.pageX, h.storedSizes = [], f = 0; f < d.columns; f++) g = d.$headerIndexed[f], - h.storedSizes[f] = g.is(":visible") ? g.width() : 0; - c.resizable.toggleTextSelection(d, !0); + var f, g = e.resizable_vars, h = a(d.namespace + "_extra_headers"), i = a(b.target).data("header"); + f = parseInt(i.attr("data-column"), 10), g.$target = i = i.add(h.filter('[data-column="' + f + '"]')), + g.target = f, g.$next = b.shiftKey || e.resizable_targetLast ? i.parent().children().not(".resizable-false").filter(":last") : i.nextAll(":not(.resizable-false)").eq(0), + f = parseInt(g.$next.attr("data-column"), 10), g.$next = g.$next.add(h.filter('[data-column="' + f + '"]')), + g.next = f, g.mouseXPosition = b.pageX, c.resizable.updateStoredSizes(d, e), c.resizable.toggleTextSelection(d, e, !0); }), a(document).bind("mousemove" + f, function(a) { - var b = e.resizable_; + var b = e.resizable_vars; b.disabled && 0 !== b.mouseXPosition && b.$target && (e.resizable_throttle ? (clearTimeout(b.timer), b.timer = setTimeout(function() { c.resizable.mouseMove(d, e, a); }, isNaN(e.resizable_throttle) ? 5 : e.resizable_throttle)) : c.resizable.mouseMove(d, e, a)); }).bind("mouseup" + f, function() { - e.resizable_.disabled && (c.resizable.toggleTextSelection(d, !1), c.resizable.stopResize(d, e), + e.resizable_vars.disabled && (c.resizable.toggleTextSelection(d, e, !1), c.resizable.stopResize(d, e), c.resizable.setHandlePosition(d, e)); }), a(b).bind("resize" + f + " resizeEnd" + f, function() { c.resizable.setHandlePosition(d, e); }), d.$table.bind("columnUpdate" + f, function() { c.resizable.setHandlePosition(d, e); }).find("thead:first").add(a(d.namespace + "_extra_table").find("thead:first")).bind("contextmenu" + f, function() { - var a = 0 === e.resizable_.storedSizes.length; - return c.resizableReset(d.table), c.resizable.setHandlePosition(d, e), e.resizable_.storedSizes = [], + var a = 0 === e.resizable_vars.storedSizes.length; + return c.resizableReset(d.table), c.resizable.setHandlePosition(d, e), e.resizable_vars.storedSizes = [], a; }); }, mouseMove: function(b, d, e) { - if (0 !== d.resizable_.mouseXPosition && d.resizable_.$target) { - var f = d.resizable_, g = f.$next, h = e.pageX - f.mouseXPosition; - f.fullWidth ? (f.storedSizes[f.target] += h, f.storedSizes[f.next] -= h, c.resizable.setWidths(b, d)) : f.overflow ? (b.$table.add(a(b.namespace + "_extra_table")).width(function(a, b) { - return b + h; - }), g.length || (f.$wrap[0].scrollLeft = b.$table.width())) : (f.storedSizes[f.target] += h, - c.resizable.setWidths(b, d)), f.mouseXPosition = e.pageX; + if (0 !== d.resizable_vars.mouseXPosition && d.resizable_vars.$target) { + var f, g = 0, h = d.resizable_vars, i = h.$next, j = h.storedSizes[h.target], k = e.pageX - h.mouseXPosition; + if (h.overflow) { + if (j + k > 0) { + for (h.storedSizes[h.target] += k, c.resizable.setWidth(h.$target, h.storedSizes[h.target], !0), + f = 0; f < b.columns; f++) g += h.storedSizes[f]; + c.resizable.setWidth(b.$table.add(a(b.namespace + "_extra_table")), g); + } + i.length || (h.$wrap[0].scrollLeft = b.$table.width()); + } else h.fullWidth ? (h.storedSizes[h.target] += k, h.storedSizes[h.next] -= k, + c.resizable.setWidths(b, d)) : (h.storedSizes[h.target] += k, c.resizable.setWidths(b, d)); + h.mouseXPosition = e.pageX, b.$table.triggerHandler("stickyHeadersUpdate"); } }, - stopResize: function(d, e) { - var f, g, h = e.resizable_; - if (h.storedSizes = [], c.storage) { - for (h.storedSizes = [], g = 0; g < d.columns; g++) f = d.$headerIndexed[g], h.storedSizes[g] = f.is(":visible") ? f.width() : 0; - e.resizable !== !1 && c.storage(d.table, c.css.resizableStorage, h.storedSizes); - } - h.mouseXPosition = 0, h.$target = h.$next = null, a(b).trigger("resize"); + stopResize: function(a, b) { + var d = b.resizable_vars; + c.resizable.updateStoredSizes(a, b), d.useStorage && (c.storage(a.table, c.css.resizableStorage, d.storedSizes), + c.storage(a.table, "tablesorter-table-resized-width", a.$table.width())), d.mouseXPosition = 0, + d.$target = d.$next = null, a.$table.triggerHandler("stickyHeadersUpdate"); } }, c.addWidget({ id: "resizable", @@ -6133,31 +6481,34 @@ resizable_addLastColumn: !1, resizable_widths: [], resizable_throttle: !1, - resizable_targetLast: !1 + resizable_targetLast: !1, + resizable_fullWidth: null }, init: function(a, b, d, e) { c.resizable.init(d, e); }, - remove: function(b, d, e) { + remove: function(b, d, e, f) { if (e.$resizable_container) { - var f = d.namespace + "tsresize"; - d.$table.add(a(d.namespace + "_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu" + f), - e.$resizable_container.remove(), c.resizable.toggleTextSelection(d, !1), c.resizableReset(b), - a(document).unbind("mousemove" + f + " mouseup" + f); + var g = d.namespace + "tsresize"; + d.$table.add(a(d.namespace + "_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu" + g), + e.$resizable_container.remove(), c.resizable.toggleTextSelection(d, e, !1), c.resizableReset(b, f), + a(document).unbind("mousemove" + g + " mouseup" + g); } } - }), c.resizableReset = function(d, e) { - a(d).each(function() { - var f, g, h = this.config, i = h && h.widgetOptions; - if (d && h && h.$headerIndexed.length) { - for (f = 0; f < h.columns; f++) g = h.$headerIndexed[f], i.resizable_widths && i.resizable_widths[f] ? g.css("width", i.resizable_widths[f]) : g.hasClass("resizable-false") || g.css("width", ""); - a(b).trigger("resize"), c.storage && !e && c.storage(this, c.css.resizableStorage, {}); + }), c.resizableReset = function(b, d) { + a(b).each(function() { + var a, e, f = this.config, g = f && f.widgetOptions, h = g.resizable_vars; + if (b && f && f.$headerIndexed.length) { + for (h.overflow && h.tableWidth && (c.resizable.setWidth(f.$table, h.tableWidth, !0), + h.useStorage && c.storage(b, "tablesorter-table-resized-width", "auto")), a = 0; a < f.columns; a++) e = f.$headerIndexed[a], + g.resizable_widths && g.resizable_widths[a] ? c.resizable.setWidth(e, g.resizable_widths[a], h.overflow) : e.hasClass("resizable-false") || c.resizable.setWidth(e, "", h.overflow); + f.$table.triggerHandler("stickyHeadersUpdate"), c.storage && !d && c.storage(this, c.css.resizableStorage, {}); } }); }; }(jQuery, window), function(a) { "use strict"; - var b = a.tablesorter = a.tablesorter || {}; + var b = a.tablesorter || {}; b.addWidget({ id: "saveSort", priority: 20, @@ -6172,15 +6523,17 @@ sortList: d.sortList }; d.debug && (h = new Date()), i.hasClass("hasSaveSort") ? j && c.hasInitialized && b.storage && (b.storage(c, "tablesorter-savesort", k), - d.debug && b.benchmark("saveSort widget: Saving last sort: " + d.sortList, h)) : (i.addClass("hasSaveSort"), + d.debug && console.log("saveSort widget: Saving last sort: " + d.sortList + b.benchmark(h))) : (i.addClass("hasSaveSort"), k = "", b.storage && (g = b.storage(c, "tablesorter-savesort"), k = g && g.hasOwnProperty("sortList") && a.isArray(g.sortList) ? g.sortList : "", - d.debug && b.benchmark('saveSort: Last sort loaded: "' + k + '"', h), i.bind("saveSortReset", function(a) { + d.debug && console.log('saveSort: Last sort loaded: "' + k + '"' + b.benchmark(h)), + i.bind("saveSortReset", function(a) { a.stopPropagation(), b.storage(c, "tablesorter-savesort", ""); - })), f && k && k.length > 0 ? d.sortList = k : c.hasInitialized && k && k.length > 0 && i.trigger("sorton", [ k ])); + })), f && k && k.length > 0 ? d.sortList = k : c.hasInitialized && k && k.length > 0 && b.sortOn(d, k)); }, remove: function(a, c) { c.$table.removeClass("hasSaveSort"), b.storage && b.storage(a, "tablesorter-savesort", ""); } }); }(jQuery), a.tablesorter; -}); \ No newline at end of file +}); +//# sourceMappingURL=vendor.min.js.map \ No newline at end of file diff --git a/mapusaurus/basestyle/templates/basestyle/common/header.html b/mapusaurus/basestyle/templates/basestyle/common/header.html index 0f803bd5..0b883fd5 100644 --- a/mapusaurus/basestyle/templates/basestyle/common/header.html +++ b/mapusaurus/basestyle/templates/basestyle/common/header.html @@ -2,10 +2,10 @@ - \ No newline at end of file + diff --git a/mapusaurus/basestyle/templates/basestyle/common/header_map.html b/mapusaurus/basestyle/templates/basestyle/common/header_map.html index 29758a62..9cfccd8f 100644 --- a/mapusaurus/basestyle/templates/basestyle/common/header_map.html +++ b/mapusaurus/basestyle/templates/basestyle/common/header_map.html @@ -2,10 +2,10 @@ - \ No newline at end of file + diff --git a/mapusaurus/censusdata/fixtures/dummy_tracts.json b/mapusaurus/censusdata/fixtures/dummy_tracts.json index 36912397..5d595e36 100644 --- a/mapusaurus/censusdata/fixtures/dummy_tracts.json +++ b/mapusaurus/censusdata/fixtures/dummy_tracts.json @@ -15,7 +15,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 0.0, + "year": 2013 } }, { @@ -34,7 +35,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 0.0, + "year": 2013 } }, { @@ -53,7 +55,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 0.0, + "year": 2013 } }, { @@ -72,7 +75,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 1.0, + "year": 2013 } }, { @@ -91,7 +95,8 @@ "maxlat": 2, "maxlon": 2, "centlat": 1.0, - "centlon": 1.0 + "centlon": 1.0, + "year": 2013 } }, { @@ -110,7 +115,8 @@ "maxlat": 2, "maxlon": 2, "centlat": 1.0, - "centlon": 1.0 + "centlon": 1.0, + "year": "2013" } } ] diff --git a/mapusaurus/censusdata/fixtures/mock_geo.json b/mapusaurus/censusdata/fixtures/mock_geo.json index c4d3ff0a..1709b34d 100644 --- a/mapusaurus/censusdata/fixtures/mock_geo.json +++ b/mapusaurus/censusdata/fixtures/mock_geo.json @@ -14,7 +14,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 0.0, + "year": 2013 } }, { @@ -32,7 +33,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.0, - "centlon": 0.0 + "centlon": 0.0, + "year": 2013 } } ] diff --git a/mapusaurus/censusdata/management/commands/load_summary_one.py b/mapusaurus/censusdata/management/commands/load_summary_one.py index 3aca4350..7bde2ddc 100644 --- a/mapusaurus/censusdata/management/commands/load_summary_one.py +++ b/mapusaurus/censusdata/management/commands/load_summary_one.py @@ -12,17 +12,19 @@ class Command(BaseCommand): """Loads Summary File 1 data from the decennial census. Official documentation for fields at http://www.census.gov/prod/cen2010/doc/sf1.pdf""" - args = "" + args = " " help = """ Load Decennial Census data for a state. Assumes XX#####2010.sf1 files are in the same directory.""" def handle(self, *args, **options): - if not args: - raise CommandError("Needs a first argument, " - + "path/to/XXgeo2010.sf1") + if len(args) != 2: + raise CommandError("Needs 2 arguments, " + + "path/to/XXgeo2010.sf1 year") geoids_by_record = {} - geofile = open(args[0], 'r') + geofile_name = args[0] + geofile = open(geofile_name, 'r') + year = args[1] # As each file covers one state, all geos will have the same state id state = "" for line in geofile: @@ -31,26 +33,25 @@ def handle(self, *args, **options): censustract = line[27:32] + line[54:60] censustract = errors.in_2010.get(censustract, censustract) if censustract is not None: - geoids_by_record[recordnum] = censustract + geoids_by_record[recordnum] = year + censustract state = line[27:29] geofile.close() - self.handle_filethree(args[0], state, geoids_by_record) - self.handle_filefour(args[0], state, geoids_by_record) - self.handle_filefive(args[0], state, geoids_by_record) + self.handle_filethree(geofile_name, year, state, geoids_by_record) + self.handle_filefour(geofile_name, year, state, geoids_by_record) + self.handle_filefive(geofile_name, year, state, geoids_by_record) - def handle_filethree(self, geofile_name, state, geoids_by_record): + def handle_filethree(self, geofile_name, year, state, geoids_by_record): """File three (XX000032010.sf1) contains race and ethnicity summaries. Documentation starts at page 6-22.""" file3_name = geofile_name[:-11] + "000032010.sf1" datafile = open(file3_name, 'r') - state = geoids_by_record.values()[0][:2] race, hispanic, stats = [], [], [] skip_race = Census2010Race.objects.filter( - geoid__state=state).exists() + geoid__state=state, geoid__year=year).exists() skip_hisp = Census2010HispanicOrigin.objects.filter( - geoid__state=state).exists() + geoid__state=state, geoid__year=year).exists() skip_stats = Census2010RaceStats.objects.filter( - geoid__state=state).exists() + geoid__state=state, geoid__year=year).exists() if not skip_race or not skip_hisp or not skip_stats: for row in reader(datafile): @@ -89,15 +90,15 @@ def handle_filethree(self, geofile_name, state, geoids_by_record): if not skip_stats: Census2010RaceStats.objects.bulk_create(stats) - def handle_filefour(self, geofile_name, state, geoids_by_record): + def handle_filefour(self, geofile_name, year, state, geoids_by_record): """File four (XX000042010.sf1) contains age demographics and correlations with race, ethnicity, and sex. Documentation starts at page 6-30""" file4_name = geofile_name[:-11] + "000042010.sf1" datafile = open(file4_name, 'r') sex, age = [], [] - skip_sex = Census2010Sex.objects.filter(geoid__state=state).exists() - skip_age = Census2010Age.objects.filter(geoid__state=state).exists() + skip_sex = Census2010Sex.objects.filter(geoid__state=state, geoid__year=year).exists() + skip_age = Census2010Age.objects.filter(geoid__state=state, geoid__year=year).exists() if not skip_sex or not skip_age: for row in reader(datafile): recordnum = row[4] @@ -125,7 +126,7 @@ def handle_filefour(self, geofile_name, state, geoids_by_record): if not skip_age: Census2010Age.objects.bulk_create(age) - def handle_filefive(self, geofile_name, state, geoids_by_record): + def handle_filefive(self, geofile_name, year, state, geoids_by_record): """File five (XX000052010.sf1) contains household metrics, including divisions by household type, household size, etc. Documentation starts at page 6-38""" @@ -133,7 +134,7 @@ def handle_filefive(self, geofile_name, state, geoids_by_record): datafile = open(file4_name, 'r') households = [] skip_households = Census2010Households.objects.filter( - geoid__state=state).exists() + geoid__state=state, geoid__year=year).exists() if not skip_households: for row in reader(datafile): recordnum = row[4] diff --git a/mapusaurus/censusdata/migrations/0001_initial.py b/mapusaurus/censusdata/migrations/0001_initial.py index 1d325cda..85fd931e 100644 --- a/mapusaurus/censusdata/migrations/0001_initial.py +++ b/mapusaurus/censusdata/migrations/0001_initial.py @@ -1,226 +1,124 @@ # -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'Census2010Race' - db.create_table(u'censusdata_census2010race', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total_pop', self.gf('django.db.models.fields.IntegerField')()), - ('white_alone', self.gf('django.db.models.fields.IntegerField')()), - ('black_alone', self.gf('django.db.models.fields.IntegerField')()), - ('amind_alone', self.gf('django.db.models.fields.IntegerField')()), - ('asian_alone', self.gf('django.db.models.fields.IntegerField')()), - ('pacis_alone', self.gf('django.db.models.fields.IntegerField')()), - ('other_alone', self.gf('django.db.models.fields.IntegerField')()), - ('two_or_more', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010Race']) - - # Adding model 'Census2010HispanicOrigin' - db.create_table(u'censusdata_census2010hispanicorigin', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total_pop', self.gf('django.db.models.fields.IntegerField')()), - ('non_hispanic', self.gf('django.db.models.fields.IntegerField')()), - ('hispanic', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010HispanicOrigin']) - - # Adding model 'Census2010Sex' - db.create_table(u'censusdata_census2010sex', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total_pop', self.gf('django.db.models.fields.IntegerField')()), - ('male', self.gf('django.db.models.fields.IntegerField')()), - ('female', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010Sex']) - - # Adding model 'Census2010Age' - db.create_table(u'censusdata_census2010age', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total_pop', self.gf('django.db.models.fields.IntegerField')()), - ('under_five', self.gf('django.db.models.fields.IntegerField')()), - ('five_nine', self.gf('django.db.models.fields.IntegerField')()), - ('ten_fourteen', self.gf('django.db.models.fields.IntegerField')()), - ('fifteen_seventeen', self.gf('django.db.models.fields.IntegerField')()), - ('eighteen_nineteen', self.gf('django.db.models.fields.IntegerField')()), - ('twenty', self.gf('django.db.models.fields.IntegerField')()), - ('twentyone', self.gf('django.db.models.fields.IntegerField')()), - ('twentytwo_twentyfour', self.gf('django.db.models.fields.IntegerField')()), - ('twentyfive_twentynine', self.gf('django.db.models.fields.IntegerField')()), - ('thirty_thirtyfour', self.gf('django.db.models.fields.IntegerField')()), - ('thirtyfive_thirtynine', self.gf('django.db.models.fields.IntegerField')()), - ('forty_fortyfour', self.gf('django.db.models.fields.IntegerField')()), - ('fortyfive_fortynine', self.gf('django.db.models.fields.IntegerField')()), - ('fifty_fiftyfour', self.gf('django.db.models.fields.IntegerField')()), - ('fiftyfive_fiftynine', self.gf('django.db.models.fields.IntegerField')()), - ('sixty_sixtyone', self.gf('django.db.models.fields.IntegerField')()), - ('sixtytwo_sixtyfour', self.gf('django.db.models.fields.IntegerField')()), - ('sixtyfive_sixtysix', self.gf('django.db.models.fields.IntegerField')()), - ('sixtyseven_sixynine', self.gf('django.db.models.fields.IntegerField')()), - ('seventy_seventyfour', self.gf('django.db.models.fields.IntegerField')()), - ('seventyfive_seventynine', self.gf('django.db.models.fields.IntegerField')()), - ('eighty_eightyfour', self.gf('django.db.models.fields.IntegerField')()), - ('eightyfive_up', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010Age']) - - # Adding model 'Census2010RaceStats' - db.create_table(u'censusdata_census2010racestats', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total_pop', self.gf('django.db.models.fields.IntegerField')()), - ('hispanic', self.gf('django.db.models.fields.IntegerField')()), - ('non_hisp_white_only', self.gf('django.db.models.fields.IntegerField')()), - ('non_hisp_black_only', self.gf('django.db.models.fields.IntegerField')()), - ('non_hisp_asian_only', self.gf('django.db.models.fields.IntegerField')()), - ('hispanic_perc', self.gf('django.db.models.fields.FloatField')()), - ('non_hisp_white_only_perc', self.gf('django.db.models.fields.FloatField')()), - ('non_hisp_black_only_perc', self.gf('django.db.models.fields.FloatField')()), - ('non_hisp_asian_only_perc', self.gf('django.db.models.fields.FloatField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010RaceStats']) - - # Adding model 'Census2010Households' - db.create_table(u'censusdata_census2010households', ( - ('geoid', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['geo.Geo'], unique=True, primary_key=True)), - ('total', self.gf('django.db.models.fields.IntegerField')()), - ('total_family', self.gf('django.db.models.fields.IntegerField')()), - ('husband_wife', self.gf('django.db.models.fields.IntegerField')()), - ('total_family_other', self.gf('django.db.models.fields.IntegerField')()), - ('male_no_wife', self.gf('django.db.models.fields.IntegerField')()), - ('female_no_husband', self.gf('django.db.models.fields.IntegerField')()), - ('total_nonfamily', self.gf('django.db.models.fields.IntegerField')()), - ('living_alone', self.gf('django.db.models.fields.IntegerField')()), - ('not_living_alone', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'censusdata', ['Census2010Households']) - - - def backwards(self, orm): - # Deleting model 'Census2010Race' - db.delete_table(u'censusdata_census2010race') - - # Deleting model 'Census2010HispanicOrigin' - db.delete_table(u'censusdata_census2010hispanicorigin') - - # Deleting model 'Census2010Sex' - db.delete_table(u'censusdata_census2010sex') - - # Deleting model 'Census2010Age' - db.delete_table(u'censusdata_census2010age') - - # Deleting model 'Census2010RaceStats' - db.delete_table(u'censusdata_census2010racestats') - - # Deleting model 'Census2010Households' - db.delete_table(u'censusdata_census2010households') - - - models = { - u'censusdata.census2010age': { - 'Meta': {'object_name': 'Census2010Age'}, - 'eighteen_nineteen': ('django.db.models.fields.IntegerField', [], {}), - 'eighty_eightyfour': ('django.db.models.fields.IntegerField', [], {}), - 'eightyfive_up': ('django.db.models.fields.IntegerField', [], {}), - 'fifteen_seventeen': ('django.db.models.fields.IntegerField', [], {}), - 'fifty_fiftyfour': ('django.db.models.fields.IntegerField', [], {}), - 'fiftyfive_fiftynine': ('django.db.models.fields.IntegerField', [], {}), - 'five_nine': ('django.db.models.fields.IntegerField', [], {}), - 'forty_fortyfour': ('django.db.models.fields.IntegerField', [], {}), - 'fortyfive_fortynine': ('django.db.models.fields.IntegerField', [], {}), - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'seventy_seventyfour': ('django.db.models.fields.IntegerField', [], {}), - 'seventyfive_seventynine': ('django.db.models.fields.IntegerField', [], {}), - 'sixty_sixtyone': ('django.db.models.fields.IntegerField', [], {}), - 'sixtyfive_sixtysix': ('django.db.models.fields.IntegerField', [], {}), - 'sixtyseven_sixynine': ('django.db.models.fields.IntegerField', [], {}), - 'sixtytwo_sixtyfour': ('django.db.models.fields.IntegerField', [], {}), - 'ten_fourteen': ('django.db.models.fields.IntegerField', [], {}), - 'thirty_thirtyfour': ('django.db.models.fields.IntegerField', [], {}), - 'thirtyfive_thirtynine': ('django.db.models.fields.IntegerField', [], {}), - 'total_pop': ('django.db.models.fields.IntegerField', [], {}), - 'twenty': ('django.db.models.fields.IntegerField', [], {}), - 'twentyfive_twentynine': ('django.db.models.fields.IntegerField', [], {}), - 'twentyone': ('django.db.models.fields.IntegerField', [], {}), - 'twentytwo_twentyfour': ('django.db.models.fields.IntegerField', [], {}), - 'under_five': ('django.db.models.fields.IntegerField', [], {}) - }, - u'censusdata.census2010hispanicorigin': { - 'Meta': {'object_name': 'Census2010HispanicOrigin'}, - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'hispanic': ('django.db.models.fields.IntegerField', [], {}), - 'non_hispanic': ('django.db.models.fields.IntegerField', [], {}), - 'total_pop': ('django.db.models.fields.IntegerField', [], {}) - }, - u'censusdata.census2010households': { - 'Meta': {'object_name': 'Census2010Households'}, - 'female_no_husband': ('django.db.models.fields.IntegerField', [], {}), - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'husband_wife': ('django.db.models.fields.IntegerField', [], {}), - 'living_alone': ('django.db.models.fields.IntegerField', [], {}), - 'male_no_wife': ('django.db.models.fields.IntegerField', [], {}), - 'not_living_alone': ('django.db.models.fields.IntegerField', [], {}), - 'total': ('django.db.models.fields.IntegerField', [], {}), - 'total_family': ('django.db.models.fields.IntegerField', [], {}), - 'total_family_other': ('django.db.models.fields.IntegerField', [], {}), - 'total_nonfamily': ('django.db.models.fields.IntegerField', [], {}) - }, - u'censusdata.census2010race': { - 'Meta': {'object_name': 'Census2010Race'}, - 'amind_alone': ('django.db.models.fields.IntegerField', [], {}), - 'asian_alone': ('django.db.models.fields.IntegerField', [], {}), - 'black_alone': ('django.db.models.fields.IntegerField', [], {}), - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'other_alone': ('django.db.models.fields.IntegerField', [], {}), - 'pacis_alone': ('django.db.models.fields.IntegerField', [], {}), - 'total_pop': ('django.db.models.fields.IntegerField', [], {}), - 'two_or_more': ('django.db.models.fields.IntegerField', [], {}), - 'white_alone': ('django.db.models.fields.IntegerField', [], {}) - }, - u'censusdata.census2010racestats': { - 'Meta': {'object_name': 'Census2010RaceStats'}, - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'hispanic': ('django.db.models.fields.IntegerField', [], {}), - 'hispanic_perc': ('django.db.models.fields.FloatField', [], {}), - 'non_hisp_asian_only': ('django.db.models.fields.IntegerField', [], {}), - 'non_hisp_asian_only_perc': ('django.db.models.fields.FloatField', [], {}), - 'non_hisp_black_only': ('django.db.models.fields.IntegerField', [], {}), - 'non_hisp_black_only_perc': ('django.db.models.fields.FloatField', [], {}), - 'non_hisp_white_only': ('django.db.models.fields.IntegerField', [], {}), - 'non_hisp_white_only_perc': ('django.db.models.fields.FloatField', [], {}), - 'total_pop': ('django.db.models.fields.IntegerField', [], {}) - }, - u'censusdata.census2010sex': { - 'Meta': {'object_name': 'Census2010Sex'}, - 'female': ('django.db.models.fields.IntegerField', [], {}), - 'geoid': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['geo.Geo']", 'unique': 'True', 'primary_key': 'True'}), - 'male': ('django.db.models.fields.IntegerField', [], {}), - 'total_pop': ('django.db.models.fields.IntegerField', [], {}) - }, - u'geo.geo': { - 'Meta': {'object_name': 'Geo', 'index_together': "[('geo_type', 'minlat', 'minlon'), ('geo_type', 'minlat', 'maxlon'), ('geo_type', 'maxlat', 'minlon'), ('geo_type', 'maxlat', 'maxlon'), ('geo_type', 'centlat', 'centlon'), ('geo_type', 'cbsa')]"}, - 'cbsa': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'centlat': ('django.db.models.fields.FloatField', [], {}), - 'centlon': ('django.db.models.fields.FloatField', [], {}), - 'county': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'csa': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'geo_type': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'geoid': ('django.db.models.fields.CharField', [], {'max_length': '20', 'primary_key': 'True'}), - 'geom': ('django.contrib.gis.db.models.fields.MultiPolygonField', [], {'srid': '4269'}), - 'maxlat': ('django.db.models.fields.FloatField', [], {}), - 'maxlon': ('django.db.models.fields.FloatField', [], {}), - 'metdiv': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'minlat': ('django.db.models.fields.FloatField', [], {}), - 'minlon': ('django.db.models.fields.FloatField', [], {}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}), - 'tract': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True'}) - } - } - - complete_apps = ['censusdata'] \ No newline at end of file +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('geo', '__first__'), + ] + + operations = [ + migrations.CreateModel( + name='Census2010Age', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total_pop', models.IntegerField()), + ('under_five', models.IntegerField()), + ('five_nine', models.IntegerField()), + ('ten_fourteen', models.IntegerField()), + ('fifteen_seventeen', models.IntegerField()), + ('eighteen_nineteen', models.IntegerField()), + ('twenty', models.IntegerField()), + ('twentyone', models.IntegerField()), + ('twentytwo_twentyfour', models.IntegerField()), + ('twentyfive_twentynine', models.IntegerField()), + ('thirty_thirtyfour', models.IntegerField()), + ('thirtyfive_thirtynine', models.IntegerField()), + ('forty_fortyfour', models.IntegerField()), + ('fortyfive_fortynine', models.IntegerField()), + ('fifty_fiftyfour', models.IntegerField()), + ('fiftyfive_fiftynine', models.IntegerField()), + ('sixty_sixtyone', models.IntegerField()), + ('sixtytwo_sixtyfour', models.IntegerField()), + ('sixtyfive_sixtysix', models.IntegerField()), + ('sixtyseven_sixynine', models.IntegerField()), + ('seventy_seventyfour', models.IntegerField()), + ('seventyfive_seventynine', models.IntegerField()), + ('eighty_eightyfour', models.IntegerField()), + ('eightyfive_up', models.IntegerField()), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Census2010HispanicOrigin', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total_pop', models.IntegerField()), + ('non_hispanic', models.IntegerField()), + ('hispanic', models.IntegerField()), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Census2010Households', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total', models.IntegerField(help_text=b'Total number of households in census tract. P0180001')), + ('total_family', models.IntegerField(help_text=b'Total number of family households. Combined with total_nonfamily to check total. P0180002')), + ('husband_wife', models.IntegerField(help_text=b'Husband-wife family households. Combine with total_family_other to check total_family. P0180003')), + ('total_family_other', models.IntegerField(help_text=b"'Other' family households. Combine with husband_wife to check total_family. P0180004")), + ('male_no_wife', models.IntegerField(help_text=b'Male householder, no wife present. Combine with female_no_husband to check total_family_other. P0180005')), + ('female_no_husband', models.IntegerField(help_text=b'Female householder, no husband present. Combine with male_no_wife to check total_family_other. P0180006')), + ('total_nonfamily', models.IntegerField(help_text=b'Total number of nonfamily households. Combine with total_family to check total. P0180007')), + ('living_alone', models.IntegerField(help_text=b'Householder living alone. Combine with not_living_alone to check total_nonfamily. P0180008')), + ('not_living_alone', models.IntegerField(help_text=b'Householder not living alone. Combine with living_alone to check total_nonfamily. P0180009')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Census2010Race', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total_pop', models.IntegerField()), + ('white_alone', models.IntegerField()), + ('black_alone', models.IntegerField()), + ('amind_alone', models.IntegerField()), + ('asian_alone', models.IntegerField()), + ('pacis_alone', models.IntegerField()), + ('other_alone', models.IntegerField()), + ('two_or_more', models.IntegerField()), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Census2010RaceStats', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total_pop', models.IntegerField()), + ('hispanic', models.IntegerField()), + ('non_hisp_white_only', models.IntegerField()), + ('non_hisp_black_only', models.IntegerField()), + ('non_hisp_asian_only', models.IntegerField()), + ('hispanic_perc', models.FloatField()), + ('non_hisp_white_only_perc', models.FloatField()), + ('non_hisp_black_only_perc', models.FloatField()), + ('non_hisp_asian_only_perc', models.FloatField()), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Census2010Sex', + fields=[ + ('geoid', models.OneToOneField(primary_key=True, serialize=False, to='geo.Geo')), + ('total_pop', models.IntegerField()), + ('male', models.IntegerField()), + ('female', models.IntegerField()), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/mapusaurus/censusdata/tests/test_loader.py b/mapusaurus/censusdata/tests/test_loader.py index 40029820..0e51ff4e 100644 --- a/mapusaurus/censusdata/tests/test_loader.py +++ b/mapusaurus/censusdata/tests/test_loader.py @@ -23,43 +23,46 @@ def tearDown(self): @patch.object(Command, 'handle_filethree') def test_handle(self, hf3, hf4, hf5): # Create Mock GEO file + year = '2013' shutil.copyfile(os.path.join("censusdata", "tests", "mock_geo.txt"), os.path.join(self.tempdir, "ZZgeo2010.sf1")) command = Command() - command.handle(os.path.join(self.tempdir, 'ZZgeo2010.sf1')) + command.handle(os.path.join(self.tempdir, 'ZZgeo2010.sf1'), year) positional_args = hf4.call_args[0] self.assertEqual(positional_args[0], os.path.join(self.tempdir, "ZZgeo2010.sf1")) - self.assertEqual(positional_args[1], '11') # State - self.assertEqual(len(positional_args[2]), 2) - self.assertEqual(positional_args[2]['0007159'], '11001000100') - self.assertEqual(positional_args[2]['0007211'], '11001000902') + self.assertEqual(positional_args[1], year) + self.assertEqual(positional_args[2], '11') # State + self.assertEqual(len(positional_args[3]), 2) + self.assertEqual(positional_args[3]['0007159'], year+'11001000100') + self.assertEqual(positional_args[3]['0007211'], year+'11001000902') @patch('censusdata.management.commands.load_summary_one.errors') @patch.object(Command, 'handle_filefive') @patch.object(Command, 'handle_filefour') @patch.object(Command, 'handle_filethree') def test_handle_errors_dict(self, hf3, hf4, hf5, errors): + year = '2001' errors.in_2010 = {'11001000100': '22002000200', '11001000902': None} # Create Mock GEO file shutil.copyfile(os.path.join("censusdata", "tests", "mock_geo.txt"), os.path.join(self.tempdir, "ZZgeo2010.sf1")) command = Command() - command.handle(os.path.join(self.tempdir, 'ZZgeo2010.sf1')) + command.handle(os.path.join(self.tempdir, 'ZZgeo2010.sf1'), year) positional_args = hf4.call_args[0] # The None causes us to skip 11001000902 - self.assertEqual(len(positional_args[2]), 1) + self.assertEqual(len(positional_args[2]), 2) # This entry was converted - self.assertEqual(positional_args[2]['0007159'], '22002000200') + self.assertEqual(positional_args[3]['0007159'], year+'22002000200') def test_handle_filethree(self): shutil.copyfile(os.path.join("censusdata", "tests", "mock_file3.txt"), os.path.join(self.tempdir, "ZZ000032010.sf1")) command = Command() command.handle_filethree(os.path.join(self.tempdir, "ZZgeo2010.sf1"), - '11', # State + '2013', '11', # State {'0007159': '11001000100', '0007211': '11001000902'}) model = models.Census2010RaceStats.objects.get(pk='11001000100') @@ -85,7 +88,7 @@ def test_handle_filethree_no_delete(self): os.path.join(self.tempdir, "ZZ000032010.sf1")) command = Command() command.handle_filethree(os.path.join(self.tempdir, "ZZgeo2010.sf1"), - '11', # State + '2013', '11', # State {'0007159': '11001000100', '0007211': '11001000902'}) self.assertEqual(len(models.Census2010RaceStats.objects.all()), 2) @@ -94,7 +97,7 @@ def test_handle_filethree_no_delete(self): # Importing again should do nothing command.handle_filethree(os.path.join(self.tempdir, "ZZgeo2010.sf1"), - '11', # State + '2013', '11', # State {'0007159': '11001000100', '0007211': '11001000902'}) self.assertEqual(len(models.Census2010RaceStats.objects.all()), 1) @@ -105,7 +108,7 @@ def test_handle_filefive(self): os.path.join(self.tempdir, "ZZ000052010.sf1")) command = Command() command.handle_filefive(os.path.join(self.tempdir, "ZZgeo2010.sf1"), - '11', # State + '2013', '11', # State {'0007159': '11001000100', '0007211': '11001000902'}) model = models.Census2010Households.objects.get(pk='11001000100') diff --git a/mapusaurus/censusdata/tests/test_views_utilities.py b/mapusaurus/censusdata/tests/test_views_utilities.py index ba9d0aba..7fcf15fd 100644 --- a/mapusaurus/censusdata/tests/test_views_utilities.py +++ b/mapusaurus/censusdata/tests/test_views_utilities.py @@ -39,19 +39,19 @@ def test_assemble_stats(self): metro = Geo.objects.get(geo_type=Geo.METRO_TYPE, geoid=request.GET.get('metro')) peer_request = HttpRequest() peer_request.GET['lender'] = lender.institution_id - peer_request.GET['metro']= metro.geoid + peer_request.GET['metro'] = metro.geoid peer_request.GET['peers'] = 'true' peer_request.GET['action_taken'] = '1,2,3,4,5' peer_lar_data = loan_originations_as_json(peer_request) - tracts = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa=request.GET.get('metro')) + tracts = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa=metro.cbsa) lender_stats = assemble_stats(*get_minority_area_stats(lar_data, peer_lar_data, tracts)) self.assertEqual(lender_stats['hma_pct'], 0) self.assertEqual(lender_stats['lma_pct'], 1) self.assertEqual(lender_stats['mma_pct'], 0) - self.assertEqual(lender_stats['lma'], 7) + self.assertEqual(lender_stats['lma'], 3) self.assertEqual(lender_stats['mma'], 0) self.assertEqual(lender_stats['hma'], 0) - self.assertEqual(lender_stats['lar_total'], 7) + self.assertEqual(lender_stats['lar_total'], 3) def test_odds_ratio(self): """ diff --git a/mapusaurus/censusdata/views.py b/mapusaurus/censusdata/views.py index 136d2504..db7cce2c 100644 --- a/mapusaurus/censusdata/views.py +++ b/mapusaurus/censusdata/views.py @@ -160,9 +160,7 @@ def minority_aggregation_as_json(request): msa_stats = {} - lar_data = loan_originations_as_json(request) - lender = get_object_or_404(Institution, pk=request.GET.get('lender')) metro = get_object_or_404(Geo, geo_type=Geo.METRO_TYPE, geoid=request.GET.get('metro')) peer_request = HttpRequest() @@ -171,10 +169,10 @@ def minority_aggregation_as_json(request): peer_request.GET['peers'] = 'true' peer_lar_data = loan_originations_as_json(peer_request) - msa_counties = Geo.objects.filter(geo_type=Geo.COUNTY_TYPE, cbsa=metro.geoid) + msa_counties = Geo.objects.filter(geo_type=Geo.COUNTY_TYPE, cbsa=metro.cbsa, year=metro.year) county_stats = {} for county in msa_counties: - county_tracts = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, state=county.state, county=county.county) + county_tracts = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, state=county.state, county=county.county, year=metro.year) minority_area_stats = get_minority_area_stats(lar_data, peer_lar_data, county_tracts) county_stats[county.geoid] = assemble_stats(*minority_area_stats) county_stats[county.geoid]['name'] = county.name @@ -229,11 +227,12 @@ def race_summary_http(request): def race_summary_csv(request): institution_id = request.GET.get('lender') metro = request.GET.get('metro') + year = request.GET.get('year') if institution_id and metro: lar_data = loan_originations_as_json(request) tracts_in_msa = get_censustract_geos(request) queryset = Census2010RaceStats.objects.filter(geoid__in=tracts_in_msa) - file_name = 'HMDA-Census-Tract_2013_Lender%s_MSA%s.csv' % (institution_id, metro) + file_name = 'HMDA-Census-Tract_Year%s_Lender%s_MSA%s.csv' % (year, institution_id, metro) response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename=%s' % file_name writer = csv.writer(response, csv.excel) diff --git a/mapusaurus/geo/fixtures/fake_msa.json b/mapusaurus/geo/fixtures/fake_msa.json index 9bb27b1f..166d85ee 100644 --- a/mapusaurus/geo/fixtures/fake_msa.json +++ b/mapusaurus/geo/fixtures/fake_msa.json @@ -7,13 +7,15 @@ "geo_type": 4, "name": "Dev MSA 1", "csa": "100", + "cbsa": "10000", "geom": "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))", "minlat": 0, "minlon": 0, "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year":2013 } }, { @@ -24,13 +26,15 @@ "geo_type": 4, "name": "Wisalem 1", "csa": "100", + "cbsa": "31740", "geom": "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))", "minlat": 38.869704, "minlon": -96.963688, "maxlat": 39.566587, "maxlon": -96.034612, "centlat": 39.2684241, - "centlon": -96.5622422 + "centlon": -96.5622422, + "year":2013 } }, { @@ -41,13 +45,15 @@ "geo_type": 4, "name": "Wisalem 2", "csa": "100", + "cbsa": "45820", "geom": "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))", "minlat": 38.433544, "minlon": -96.501722, "maxlat": 39.65318, "maxlon": -95.179827, "centlat": 39.0413888, - "centlon": -95.8026393 + "centlon": -95.8026393, + "year":2013 } }, { @@ -58,13 +64,15 @@ "geo_type": 4, "name": "Dev MSA 1", "csa": "100", + "cbsa": "10001", "geom": "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))", "minlat": 0, "minlon": 0, "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year":2013 } }, { @@ -75,13 +83,15 @@ "geo_type": 4, "name": "Wichita", "csa": "556", + "cbsa": "48620", "geom": "MULTIPOLYGON (((-97.808358 36.998546, -97.808358 38.175081, -96.522782 38.175081, -97.808358 36.998546)))", "minlat": 36.998546, "minlon": -97.808358, "maxlat": 38.175081, "maxlon": -96.522782, "centlat": 37.6385839, - "centlon": -97.2460377 + "centlon": -97.2460377, + "year":2013 } }, { @@ -92,13 +102,15 @@ "geo_type": 4, "name": "Winston-Salem", "csa": "556", + "cbsa": "556", "geom": "MULTIPOLYGON (((-80.88218 35.742811, -80.88218 36.55063, -80.027269 36.55063, -80.88218 35.742811)))", "minlat": 35.742811, "minlon": -80.88218, "maxlat": 36.55063, "maxlon": -80.027269, "centlat": 36.1905412, - "centlon": -80.3969029 + "centlon": -80.3969029, + "year":2013 } } ] diff --git a/mapusaurus/geo/fixtures/many_tracts.json b/mapusaurus/geo/fixtures/many_tracts.json index b981df1d..5f103c0c 100644 --- a/mapusaurus/geo/fixtures/many_tracts.json +++ b/mapusaurus/geo/fixtures/many_tracts.json @@ -15,7 +15,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year":"2013" } }, { @@ -34,7 +35,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year":"2013" } }, { @@ -53,7 +55,8 @@ "maxlat": 1, "maxlon": 1, "centlat": 0.5, - "centlon": 0.5 + "centlon": 0.5, + "year":"2013" } }, { @@ -72,7 +75,8 @@ "maxlat": -4, "maxlon": -4, "centlat": -4.5, - "centlon": -4.5 + "centlon": -4.5, + "year":"2013" } } ] diff --git a/mapusaurus/geo/fixtures/test_counties.json b/mapusaurus/geo/fixtures/test_counties.json index 71dc3c56..65eef009 100644 --- a/mapusaurus/geo/fixtures/test_counties.json +++ b/mapusaurus/geo/fixtures/test_counties.json @@ -13,7 +13,8 @@ "maxlat": 5, "maxlon": 5, "centlat": 4.5, - "centlon": 4.5 + "centlon": 4.5, + "year":"2013" } }, { @@ -30,7 +31,8 @@ "maxlat": -2, "maxlon": -2, "centlat": -3, - "centlon": -3 + "centlon": -3, + "year":"2013" } } ] diff --git a/mapusaurus/geo/management/commands/load_geos_from.py b/mapusaurus/geo/management/commands/load_geos_from.py index 4319a328..83b3cf7c 100644 --- a/mapusaurus/geo/management/commands/load_geos_from.py +++ b/mapusaurus/geo/management/commands/load_geos_from.py @@ -9,7 +9,7 @@ class Command(BaseCommand): help = "Load shapes (tracts, counties, msas) from a shape file." - args = "" + args = " " def geo_type(self, row_dict): """Inspect the row to determine which type of geometry it represents""" @@ -24,7 +24,7 @@ def geo_type(self, row_dict): if row_dict.get('LSAD') == 'M3': return Geo.METDIV_TYPE - def process_row(self, row, field_names): + def process_row(self, year, row, field_names): """Runs for every shape in the shape file. Returns a kw-dict which will be passed to Geo""" row_dict = dict((field_name, row[idx]) @@ -39,7 +39,7 @@ def process_row(self, row, field_names): # Use ".get('field') or None" to convert empty strings into Nones return { - 'geoid': row_dict['GEOID'], 'geo_type': self.geo_type(row_dict), + 'geoid': year+row_dict['GEOID'], 'geo_type': self.geo_type(row_dict), 'name': row_dict['NAME'], 'state': row_dict.get('STATEFP') or None, 'county': row_dict.get('COUNTYFP') or None, 'tract': row_dict.get('TRACTCE') or None, @@ -50,7 +50,8 @@ def process_row(self, row, field_names): 'maxlon': max(lons), 'centlat': float(row_dict['INTPTLAT']), 'centlon': float(row_dict['INTPTLON']), - 'geom': geom} + 'geom': geom, + 'year': year} def save_batch(self, batch): """We don't want to break any FKs, so we will only update geos if they @@ -72,7 +73,8 @@ def save_batch(self, batch): def handle(self, *args, **options): old_debug = settings.DEBUG settings.DEBUG = False - shapefile_name = args[0] + year = args[0] + shapefile_name = args[1] ds = DataSource(shapefile_name, encoding='iso-8859-1') layer = ds[0] columns = [layer.get_fields(field) for field in layer.fields] @@ -80,7 +82,7 @@ def handle(self, *args, **options): rows = itertools.izip(*columns) batch, batch_count = [], 0 for row in rows: - batch.append(self.process_row(row, layer.fields)) + batch.append(self.process_row(year, row, layer.fields)) if len(batch) == 100: batch_count += 1 self.stdout.write('Saving batch %d' % batch_count) diff --git a/mapusaurus/geo/management/commands/set_tract_csa_cbsa.py b/mapusaurus/geo/management/commands/set_tract_csa_cbsa.py index c0825ad7..a3a8f540 100644 --- a/mapusaurus/geo/management/commands/set_tract_csa_cbsa.py +++ b/mapusaurus/geo/management/commands/set_tract_csa_cbsa.py @@ -15,7 +15,8 @@ def handle(self, *args, **options): SET cbsa = (SELECT cbsa FROM geo_geo county WHERE county.geo_type = %s AND county.state = geo_geo.state - AND county.county = geo_geo.county) + AND county.county = geo_geo.county + AND county.year = geo_geo.year) WHERE geo_type = %s; """, (Geo.COUNTY_TYPE, Geo.TRACT_TYPE)) cursor.execute(""" @@ -23,7 +24,8 @@ def handle(self, *args, **options): SET csa = (SELECT csa FROM geo_geo county WHERE county.geo_type = %s AND county.state = geo_geo.state - AND county.county = geo_geo.county) + AND county.county = geo_geo.county + AND county.year = geo_geo.year) WHERE geo_type = %s; """, (Geo.COUNTY_TYPE, Geo.TRACT_TYPE)) cursor.close() diff --git a/mapusaurus/geo/migrations/0001_initial.py b/mapusaurus/geo/migrations/0001_initial.py index 18727952..29034b6f 100644 --- a/mapusaurus/geo/migrations/0001_initial.py +++ b/mapusaurus/geo/migrations/0001_initial.py @@ -1,96 +1,43 @@ # -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'Geo' - db.create_table(u'geo_geo', ( - ('geoid', self.gf('django.db.models.fields.CharField')(max_length=20, primary_key=True)), - ('geo_type', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=50)), - ('state', self.gf('django.db.models.fields.CharField')(max_length=2, null=True)), - ('county', self.gf('django.db.models.fields.CharField')(max_length=3, null=True)), - ('tract', self.gf('django.db.models.fields.CharField')(max_length=6, null=True)), - ('csa', self.gf('django.db.models.fields.CharField')(max_length=3, null=True)), - ('cbsa', self.gf('django.db.models.fields.CharField')(max_length=5, null=True)), - ('metdiv', self.gf('django.db.models.fields.CharField')(max_length=5, null=True)), - ('geom', self.gf('django.contrib.gis.db.models.fields.MultiPolygonField')(srid=4269)), - ('minlat', self.gf('django.db.models.fields.FloatField')()), - ('maxlat', self.gf('django.db.models.fields.FloatField')()), - ('minlon', self.gf('django.db.models.fields.FloatField')()), - ('maxlon', self.gf('django.db.models.fields.FloatField')()), - ('centlat', self.gf('django.db.models.fields.FloatField')()), - ('centlon', self.gf('django.db.models.fields.FloatField')()), - )) - db.send_create_signal(u'geo', ['Geo']) - - # Adding index on 'Geo', fields ['geo_type', 'minlat', 'minlon'] - db.create_index(u'geo_geo', ['geo_type', 'minlat', 'minlon']) - - # Adding index on 'Geo', fields ['geo_type', 'minlat', 'maxlon'] - db.create_index(u'geo_geo', ['geo_type', 'minlat', 'maxlon']) - - # Adding index on 'Geo', fields ['geo_type', 'maxlat', 'minlon'] - db.create_index(u'geo_geo', ['geo_type', 'maxlat', 'minlon']) - - # Adding index on 'Geo', fields ['geo_type', 'maxlat', 'maxlon'] - db.create_index(u'geo_geo', ['geo_type', 'maxlat', 'maxlon']) - - # Adding index on 'Geo', fields ['geo_type', 'centlat', 'centlon'] - db.create_index(u'geo_geo', ['geo_type', 'centlat', 'centlon']) - - # Adding index on 'Geo', fields ['geo_type', 'cbsa'] - db.create_index(u'geo_geo', ['geo_type', 'cbsa']) - - - def backwards(self, orm): - # Removing index on 'Geo', fields ['geo_type', 'cbsa'] - db.delete_index(u'geo_geo', ['geo_type', 'cbsa']) - - # Removing index on 'Geo', fields ['geo_type', 'centlat', 'centlon'] - db.delete_index(u'geo_geo', ['geo_type', 'centlat', 'centlon']) - - # Removing index on 'Geo', fields ['geo_type', 'maxlat', 'maxlon'] - db.delete_index(u'geo_geo', ['geo_type', 'maxlat', 'maxlon']) - - # Removing index on 'Geo', fields ['geo_type', 'maxlat', 'minlon'] - db.delete_index(u'geo_geo', ['geo_type', 'maxlat', 'minlon']) - - # Removing index on 'Geo', fields ['geo_type', 'minlat', 'maxlon'] - db.delete_index(u'geo_geo', ['geo_type', 'minlat', 'maxlon']) - - # Removing index on 'Geo', fields ['geo_type', 'minlat', 'minlon'] - db.delete_index(u'geo_geo', ['geo_type', 'minlat', 'minlon']) - - # Deleting model 'Geo' - db.delete_table(u'geo_geo') - - - models = { - u'geo.geo': { - 'Meta': {'object_name': 'Geo', 'index_together': "[('geo_type', 'minlat', 'minlon'), ('geo_type', 'minlat', 'maxlon'), ('geo_type', 'maxlat', 'minlon'), ('geo_type', 'maxlat', 'maxlon'), ('geo_type', 'centlat', 'centlon'), ('geo_type', 'cbsa')]"}, - 'cbsa': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'centlat': ('django.db.models.fields.FloatField', [], {}), - 'centlon': ('django.db.models.fields.FloatField', [], {}), - 'county': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'csa': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'geo_type': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'geoid': ('django.db.models.fields.CharField', [], {'max_length': '20', 'primary_key': 'True'}), - 'geom': ('django.contrib.gis.db.models.fields.MultiPolygonField', [], {'srid': '4269'}), - 'maxlat': ('django.db.models.fields.FloatField', [], {}), - 'maxlon': ('django.db.models.fields.FloatField', [], {}), - 'metdiv': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'minlat': ('django.db.models.fields.FloatField', [], {}), - 'minlon': ('django.db.models.fields.FloatField', [], {}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}), - 'tract': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True'}) - } - } - - complete_apps = ['geo'] \ No newline at end of file +from __future__ import unicode_literals + +from django.db import models, migrations +import django.contrib.gis.db.models.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Geo', + fields=[ + ('geoid', models.CharField(max_length=20, serialize=False, primary_key=True)), + ('geo_type', models.PositiveIntegerField(db_index=True, choices=[(1, b'State'), (2, b'County'), (3, b'Census Tract'), (4, b'Metropolitan'), (5, b'Micropolitan'), (6, b'Metropolitan Division')])), + ('name', models.CharField(max_length=50)), + ('state', models.CharField(max_length=2, null=True)), + ('county', models.CharField(max_length=3, null=True)), + ('tract', models.CharField(max_length=6, null=True)), + ('csa', models.CharField(help_text=b'Combined Statistical Area', max_length=3, null=True)), + ('cbsa', models.CharField(help_text=b'Core Based Statistical Area', max_length=5, null=True)), + ('metdiv', models.CharField(help_text=b'Metro Division', max_length=5, null=True)), + ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(srid=4269)), + ('year', models.SmallIntegerField()), + ('minlat', models.FloatField()), + ('maxlat', models.FloatField()), + ('minlon', models.FloatField()), + ('maxlon', models.FloatField()), + ('centlat', models.FloatField()), + ('centlon', models.FloatField()), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterIndexTogether( + name='geo', + index_together=set([('geo_type', 'minlat', 'maxlon', 'year'), ('geo_type', 'centlat', 'centlon', 'year'), ('geo_type', 'maxlat', 'minlon', 'year'), ('geo_type', 'minlat', 'minlon', 'year'), ('geo_type', 'cbsa', 'year'), ('geo_type', 'maxlat', 'maxlon', 'year')]), + ), + ] diff --git a/mapusaurus/geo/migrations/0002_auto_20160219_2009.py b/mapusaurus/geo/migrations/0002_auto_20160219_2009.py new file mode 100644 index 00000000..405a29c9 --- /dev/null +++ b/mapusaurus/geo/migrations/0002_auto_20160219_2009.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('geo', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='geo', + name='year', + field=models.SmallIntegerField(db_index=True), + ), + migrations.AlterIndexTogether( + name='geo', + index_together=set([('geo_type', 'minlat', 'maxlon', 'year'), ('geo_type', 'maxlat', 'maxlon', 'year'), ('geo_type', 'geoid'), ('geo_type', 'maxlat', 'minlon', 'year'), ('geo_type', 'centlat', 'centlon', 'year'), ('geo_type', 'cbsa', 'year'), ('geo_type', 'minlat', 'minlon', 'year')]), + ), + ] diff --git a/mapusaurus/geo/migrations/0003_auto_20160222_1706.py b/mapusaurus/geo/migrations/0003_auto_20160222_1706.py new file mode 100644 index 00000000..5b250d61 --- /dev/null +++ b/mapusaurus/geo/migrations/0003_auto_20160222_1706.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('geo', '0002_auto_20160219_2009'), + ] + + operations = [ + migrations.AlterIndexTogether( + name='geo', + index_together=set([('geo_type', 'minlat', 'maxlon', 'year'), ('geo_type', 'centlat', 'centlon', 'year'), ('geo_type', 'maxlat', 'minlon', 'year'), ('geo_type', 'minlat', 'minlon', 'year'), ('geo_type', 'cbsa', 'year'), ('geo_type', 'maxlat', 'maxlon', 'year')]), + ), + ] diff --git a/mapusaurus/geo/migrations/0004_auto_20160222_2155.py b/mapusaurus/geo/migrations/0004_auto_20160222_2155.py new file mode 100644 index 00000000..637c3108 --- /dev/null +++ b/mapusaurus/geo/migrations/0004_auto_20160222_2155.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('geo', '0003_auto_20160222_1706'), + ] + + operations = [ + migrations.AlterIndexTogether( + name='geo', + index_together=set([('state', 'year'), ('geo_type', 'minlat', 'maxlon', 'year'), ('geo_type', 'maxlat', 'maxlon', 'year'), ('geo_type', 'maxlat', 'minlon', 'year'), ('geo_type', 'centlat', 'centlon', 'year'), ('geo_type', 'cbsa', 'year'), ('geo_type', 'minlat', 'minlon', 'year')]), + ), + ] diff --git a/mapusaurus/geo/models.py b/mapusaurus/geo/models.py index c17f65c9..23deab5d 100644 --- a/mapusaurus/geo/models.py +++ b/mapusaurus/geo/models.py @@ -27,6 +27,8 @@ class Geo(models.Model): geom = models.MultiPolygonField(srid=4269) + year = models.SmallIntegerField(db_index=True) + minlat = models.FloatField() maxlat = models.FloatField() minlon = models.FloatField() @@ -37,12 +39,13 @@ class Geo(models.Model): objects = models.GeoManager() class Meta: - index_together = [("geo_type", "minlat", "minlon"), - ("geo_type", "minlat", "maxlon"), - ("geo_type", "maxlat", "minlon"), - ("geo_type", "maxlat", "maxlon"), - ("geo_type", "centlat", "centlon"), - ("geo_type", "cbsa")] + index_together = [("geo_type", "minlat", "minlon", "year"), + ("geo_type", "minlat", "maxlon", "year"), + ("geo_type", "maxlat", "minlon", "year"), + ("geo_type", "maxlat", "maxlon", "year"), + ("geo_type", "centlat", "centlon", "year"), + ("geo_type", "cbsa", "year"), + ("state", "year"),] def tract_centroids_as_geojson(self): """Convert this model into a geojson string""" @@ -77,5 +80,5 @@ def tract_shape_as_geojson(self): def get_censustract_geos_by_msa(self): """returns tracts associated with an MSA""" - tracts = get_list_or_404(Geo, geo_type=Geo.TRACT_TYPE, cbsa=self.geoid) + tracts = get_list_or_404(Geo, geo_type=Geo.TRACT_TYPE, cbsa=self.cbsa, year=self.year) return tracts diff --git a/mapusaurus/geo/search_indexes.py b/mapusaurus/geo/search_indexes.py index e48ea102..a9c898c3 100644 --- a/mapusaurus/geo/search_indexes.py +++ b/mapusaurus/geo/search_indexes.py @@ -8,6 +8,7 @@ class MetroIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, model_attr='name') text_auto = indexes.EdgeNgramField(model_attr='name') geo_type = indexes.IntegerField(model_attr='geo_type') + year = indexes.IntegerField(model_attr='year') def get_model(self): return Geo diff --git a/mapusaurus/geo/tests.py b/mapusaurus/geo/tests.py index 11b97b73..9a74d14a 100644 --- a/mapusaurus/geo/tests.py +++ b/mapusaurus/geo/tests.py @@ -24,8 +24,9 @@ def test_search_name(self, SQS): result.object.name = 'MSA 1' result.object.centlat = 45 result.object.centlon = 52 - SQS.filter.return_value = [result] - resp = self.client.get(reverse('geo:search'), {'q': 'Chicago'}) + result.object.year = 2013 + SQS.filter.return_value.filter.return_value = [result] + resp = self.client.get(reverse('geo:search'), {'q': 'Chicago', 'year': '2013'}) self.assertTrue('Chicago' in str(SQS.filter.call_args)) self.assertTrue('content' in str(SQS.filter.call_args)) self.assertFalse('text_auto' in str(SQS.filter.call_args)) @@ -41,11 +42,12 @@ def test_search_name(self, SQS): @patch('geo.views.SearchQuerySet') def test_search_autocomplete(self, SQS): SQS = SQS.return_value.models.return_value.load_all.return_value - SQS.filter.return_value = [Mock()] - self.client.get(reverse('geo:search'), {'q': 'Chicago', 'auto': '1'}) + SQS.filter.return_value.filter.return_value = [Mock()] + self.client.get(reverse('geo:search'), {'q': 'Chicago', 'auto': '1', 'year': '2013'}) self.assertTrue('Chicago' in str(SQS.filter.call_args)) self.assertFalse('content' in str(SQS.filter.call_args)) self.assertTrue('text_auto' in str(SQS.filter.call_args)) + self.assertTrue('year' in str(SQS.filter.return_value.filter.call_args)) class UtilsTest(TestCase): def test_check_bounds(self): @@ -66,18 +68,18 @@ def setUp(self): } self.county1 = Geo.objects.create( geoid='11222', geo_type=Geo.COUNTY_TYPE, state='11', county='222', - csa='987', **generic_geo) + csa='987', year='2012', **generic_geo) self.county2 = Geo.objects.create( geoid='11223', geo_type=Geo.COUNTY_TYPE, state='11', county='223', - cbsa='88776', **generic_geo) + cbsa='88776', year='2012', **generic_geo) self.metro = Geo.objects.create( - geoid='88776', geo_type=Geo.METRO_TYPE, cbsa='88776', + geoid='88776', geo_type=Geo.METRO_TYPE, cbsa='88776', year='2012', **generic_geo) self.tract1 = Geo.objects.create( - geoid='1122233333', geo_type=Geo.TRACT_TYPE, state='11', + geoid='1122233333', geo_type=Geo.TRACT_TYPE, state='11', year='2012', county='222', tract='33333', **generic_geo) self.tract2 = Geo.objects.create( - geoid='1122333333', geo_type=Geo.TRACT_TYPE, state='11', + geoid='1122333333', geo_type=Geo.TRACT_TYPE, state='11', year='2012', county='223', tract='33333', **generic_geo) def tearDown(self): @@ -99,14 +101,15 @@ def test_set_fields(self): class LoadGeosFromTest(TestCase): def test_census_tract(self): + year = "2013" row = ('1122233333', 'Tract 33333', '11', '222', '33333', '-45', '45', Polygon(((0, 0), (0, 2), (-1, 2), (0, 0)))) field_names = ('GEOID', 'NAME', 'STATEFP', 'COUNTYFP', 'TRACTCE', 'INTPTLAT', 'INTPTLON') command = LoadGeos() - geo = command.process_row(row, field_names) + geo = command.process_row(year, row, field_names) - self.assertEqual('1122233333', geo['geoid']) + self.assertEqual('20131122233333', geo['geoid']) self.assertEqual(Geo.TRACT_TYPE, geo['geo_type']) self.assertEqual('Tract 33333', geo['name']) self.assertEqual('11', geo['state']) @@ -118,8 +121,10 @@ def test_census_tract(self): self.assertEqual((0, 2), (geo['minlat'], geo['maxlat'])) self.assertEqual(-45, geo['centlat']) self.assertEqual(45, geo['centlon']) + self.assertEqual("2013", geo['year']) def test_county(self): + year = "2010" poly1 = Polygon(((0, 0), (0, 2), (-1, 2), (0, 0))) poly2 = Polygon(((-4, -2), (-6, -1), (-2, -2), (-4, -2))) row = ('11222', 'Some County', '11', '222', '-45', '45', @@ -127,9 +132,9 @@ def test_county(self): field_names = ('GEOID', 'NAME', 'STATEFP', 'COUNTYFP', 'INTPTLAT', 'INTPTLON') command = LoadGeos() - geo = command.process_row(row, field_names) + geo = command.process_row(year, row, field_names) - self.assertEqual('11222', geo['geoid']) + self.assertEqual('201011222', geo['geoid']) self.assertEqual(Geo.COUNTY_TYPE, geo['geo_type']) self.assertEqual('Some County', geo['name']) self.assertEqual('11', geo['state']) @@ -141,16 +146,18 @@ def test_county(self): self.assertEqual((-2, 2), (geo['minlat'], geo['maxlat'])) self.assertEqual(-45, geo['centlat']) self.assertEqual(45, geo['centlon']) + self.assertEqual("2010", geo['year']) def test_metro(self): + year = "2010" row = ('12345', 'Big City', '090', '12345', 'M1', '-45', '45', Polygon(((0, 0), (0, 2), (-1, 2), (0, 0)))) field_names = ('GEOID', 'NAME', 'CSAFP', 'CBSAFP', 'LSAD', 'INTPTLAT', 'INTPTLON') command = LoadGeos() - geo = command.process_row(row, field_names) + geo = command.process_row(year, row, field_names) - self.assertEqual('12345', geo['geoid']) + self.assertEqual('201012345', geo['geoid']) self.assertEqual(Geo.METRO_TYPE, geo['geo_type']) self.assertEqual('Big City', geo['name']) self.assertEqual(None, geo['state']) @@ -158,16 +165,18 @@ def test_metro(self): self.assertEqual(None, geo['tract']) self.assertEqual('090', geo['csa']) self.assertEqual('12345', geo['cbsa']) + self.assertEqual("2010", geo['year']) def test_micro(self): + year = '1900' row = ('12345', 'Small Town', '', '12345', 'M2', '-45', '45', Polygon(((0, 0), (0, 2), (-1, 2), (0, 0)))) field_names = ('GEOID', 'NAME', 'CSAFP', 'CBSAFP', 'LSAD', 'INTPTLAT', 'INTPTLON') command = LoadGeos() - geo = command.process_row(row, field_names) + geo = command.process_row(year, row, field_names) - self.assertEqual('12345', geo['geoid']) + self.assertEqual('190012345', geo['geoid']) self.assertEqual(Geo.MICRO_TYPE, geo['geo_type']) self.assertEqual('Small Town', geo['name']) self.assertEqual(None, geo['state']) @@ -175,12 +184,13 @@ def test_micro(self): self.assertEqual(None, geo['tract']) self.assertEqual(None, geo['csa']) self.assertEqual('12345', geo['cbsa']) + self.assertEqual('1900', geo['year']) def test_replacing(self): command = LoadGeos() old_geo = { 'geoid': '1111111111', 'geo_type': Geo.TRACT_TYPE, - 'name': 'Geo in 1990', 'state': '11', 'county': '111', + 'name': 'Geo in 1990', 'year': '1990', 'state': '11', 'county': '111', 'tract': '11111', 'minlat': -1, 'maxlat': 1, 'minlon': -1, 'maxlon': 1, 'centlat': 0, 'centlon': 0, 'geom': MultiPolygon( diff --git a/mapusaurus/geo/views.py b/mapusaurus/geo/views.py index 8427f4cd..aaa85255 100644 --- a/mapusaurus/geo/views.py +++ b/mapusaurus/geo/views.py @@ -28,26 +28,28 @@ def get_censustract_geos(request): northEastLon = request.GET.get('neLon') southWestLat = request.GET.get('swLat') southWestLon = request.GET.get('swLon') + year = request.GET.get('year') metro = request.GET.get('metro') geo_type = request.GET.get('geoType') geos = [] if northEastLat or northEastLon or southWestLat or southWestLon: bounds = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) if bounds: + maxlat, minlon, minlat, maxlon = bounds if geo_type == "msa": #*bounds expands the set from check_bounds - msas = get_geos_by_bounds_and_type(*bounds, metro=True) - geos = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa__in=msas.values_list('geoid', flat=True)) + msas = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year, metro=True) + geos = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa__in=msas.values_list('cbsa', flat=True)) else: - geos = get_geos_by_bounds_and_type(*bounds) + geos = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year) else: raise Http404("Invalid bounds") elif metro: - msa = get_object_or_404(Geo, geo_type=Geo.METRO_TYPE, geoid=metro) + msa = get_object_or_404(Geo, geo_type=Geo.METRO_TYPE, geoid=metro) # metro includes year geos = msa.get_censustract_geos_by_msa() return geos -def get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, metro=False): +def get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year, metro=False): """handles requests for tract-level ids or MSA ids""" if metro == False: geoTypeId = 3 @@ -61,27 +63,28 @@ def get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, metro=False): #Create a polygon of the entire map screen poly = Polygon (((point_top_left, point_bottom_left, point_bottom_right, point_top_right, point_top_left))) #check if geo polygon interects with the screen polygon. no get_object_or_404 since user can drag to alaska, pr, hawaii - geos = Geo.objects.filter(geo_type = geoTypeId).filter(geom__intersects=poly) + geos = Geo.objects.filter(geo_type=geoTypeId, year=year).filter(geom__intersects=poly) return geos class GeoSerializer(serializers.ModelSerializer): """Used in RESTful endpoints to serialize Geo objects; used in search""" class Meta: model = Geo - fields = ('geoid', 'geo_type', 'name', 'centlat', 'centlon') + fields = ('geoid', 'geo_type', 'name', 'centlat', 'centlon', 'year') @api_view(['GET']) @renderer_classes((JSONRenderer, )) # until we need HTML def search(request): query_str = request.GET.get('q', '').strip() + year= request.GET.get('year', '').strip() query = SearchQuerySet().models(Geo).load_all() if request.GET.get('auto'): - query = query.filter(text_auto=AutoQuery(query_str)) + query = query.filter(text_auto=AutoQuery(query_str)).filter(year=year) else: - query = query.filter(content=AutoQuery(query_str)) + query = query.filter(content=AutoQuery(query_str)).filter(year=year) query = query[:25] - results = [result.object for result in query] + results = [result.object for result in query if result] results = GeoSerializer(results, many=True).data return Response({'geos': results}) diff --git a/mapusaurus/hmda/management/commands/calculate_loan_stats.py b/mapusaurus/hmda/management/commands/calculate_loan_stats.py index 4b71c2c7..94a1f7f4 100644 --- a/mapusaurus/hmda/management/commands/calculate_loan_stats.py +++ b/mapusaurus/hmda/management/commands/calculate_loan_stats.py @@ -6,15 +6,17 @@ class Command(BaseCommand): help = "Generate loans stats per lender, metro combination" + args = "" def handle(self, *args, **kwargs): # Remove existing stats; we're going to regenerate them - LendingStats.objects.all().delete() + year = args[0] + LendingStats.objects.filter(institution__year=year).delete() lender_q = HMDARecord.objects.values_list('institution_id', flat=True).distinct('institution') for metro in Geo.objects.filter( - geo_type=Geo.METRO_TYPE).order_by('name'): + geo_type=Geo.METRO_TYPE, year=year).order_by('name'): self.stdout.write("Processing " + metro.name) - query = lender_q.filter(geo__cbsa=metro.geoid) + query = lender_q.filter(geo__cbsa=metro.cbsa, geo__year=year) for lender_str in query.iterator(): median = calculate_median_loans(lender_str, metro) or 0 lar = calculate_lar_count(lender_str, metro) @@ -25,10 +27,12 @@ def handle(self, *args, **kwargs): fha_percentage = 0.0 bucket = get_fha_bucket(fha_percentage) LendingStats.objects.create( - institution_id=lender_str, geo=metro, lar_median=median, lar_count=lar, fha_count=fha, fha_bucket=bucket) + institution_id=lender_str, geo=metro, lar_median=median, + lar_count=lar, fha_count=fha, fha_bucket=bucket) def lar_query(lender_str, metro): - lar_query = HMDARecord.objects.filter(institution_id=lender_str, geo__cbsa=metro.geoid, geo__geo_type=Geo.TRACT_TYPE, action_taken__in=[1,2,3,4,5]) + lar_query = HMDARecord.objects.filter(institution_id=lender_str, + geo__cbsa=metro.cbsa, geo__geo_type=Geo.TRACT_TYPE, action_taken__in=[1,2,3,4,5]) return lar_query def calculate_lar_count(lender_str, metro): @@ -62,9 +66,8 @@ def calculate_median_loans(lender_str, metro): query = Geo.objects.filter( geo_type=Geo.TRACT_TYPE, hmdarecord__institution_id=lender_str) if metro: - query = query.filter(cbsa=metro.geoid) + query = query.filter(cbsa=metro.cbsa, year=metro.year) num_tracts = query.values('geoid').distinct('geoid').count() - cursor = connection.cursor() # Next, aggregate the # of loans per tract. This query will *not* # include zeros @@ -77,7 +80,7 @@ def calculate_median_loans(lender_str, metro): params = [Geo.TRACT_TYPE, lender_str] if metro: query = query + "AND cbsa = %s\n" - params.append(metro.geoid) + params.append(metro.cbsa) query += """ GROUP BY geo_geo.geoid ORDER BY loan_count diff --git a/mapusaurus/hmda/management/commands/load_hmda.py b/mapusaurus/hmda/management/commands/load_hmda.py index b12585af..83e51f99 100644 --- a/mapusaurus/hmda/management/commands/load_hmda.py +++ b/mapusaurus/hmda/management/commands/load_hmda.py @@ -12,13 +12,13 @@ class Command(BaseCommand): - args = " " + args = " " help = """ Load HMDA data (for all states).""" def handle(self, *args, **options): - if not args: - raise CommandError("Needs a first argument, " + Command.args) + if len(args) < 2: + raise CommandError("Need args for CSV path and year, " + Command.args) delete_file = False filter_hmda = False @@ -45,11 +45,13 @@ def log_info(message): ### default is False ### if filter_hmda is passed in, setup known_hmda & geo_states ### else load all HMDA records without filtering - if len(args) > 1: + lar_path = args[0] + year = args[1] + if len(args) > 2: for arg in args: if "delete_file:" in arg: tmp_delete_flag= arg.split(":") - if tmp_delete_flag[1] == "true": + if tmp_delete_flag[1] == "true" or tmp_delete_flag[1] == "True": delete_file = True print "************* CSV File(s) WiLL BE REMOVED AFTER PROCESSING ***********" @@ -60,17 +62,16 @@ def log_info(message): csv_files = [] - - if os.path.isfile(args[0]): - csv_files.append(args[0]); - elif os.path.isdir(args[0]): - working_directory = args[0] + if os.path.isfile(lar_path): + csv_files.append(lar_path); + elif os.path.isdir(lar_path): + working_directory = lar_path for file in os.listdir(working_directory): - if os.path.isfile(os.path.join(working_directory,file)) and 'hmda_csv_' in file: + if os.path.isfile(os.path.join(working_directory,file)) and 'hmda_csv_'+year+'_' in file: csv_files.append(os.path.join(working_directory, file)) else: - raise Exception("Not a file or Directory! " + args[0]) + raise Exception("Not a file or Directory! " + lar_path) @@ -135,10 +136,10 @@ def records(self,csv_file): number_of_1_to_4_family_units=row[43], application_date_indicator=row[44]) censustract = row[11] + row[12] + row[13].replace('.', '') + censustract = errors.in_2010.get(censustract, censustract) + record.geo_id = str(record.as_of_year) + censustract - record.geo_id = errors.in_2010.get(censustract, censustract) - - record.institution_id = row[2]+row[1] + record.institution_id = str(record.as_of_year) + record.agency_code + record.respondent_id self.total_lines_read = self.total_lines_read + 1 @@ -162,7 +163,6 @@ def records(self,csv_file): skipped_counter += 1 - except: prevent_delete= True log_info('*****************************') @@ -208,14 +208,4 @@ def records(self,csv_file): log_info("All Lines Read from All Files: " + str(self.total_lines_read)) log_info("All Files Total Skipped: " + str(self.total_skipped)) log_info("All Files Total Skipped for GeoID=NA: " + str(self.na_skipped)) - log_info("All Files Total Skipped for other reason: " + str(self.other_skipped )) - - - - - - - - - - + log_info("All Files Total Skipped for other reason: " + str(self.other_skipped )) \ No newline at end of file diff --git a/mapusaurus/hmda/management/commands/load_years.py b/mapusaurus/hmda/management/commands/load_years.py new file mode 100644 index 00000000..a0192ad6 --- /dev/null +++ b/mapusaurus/hmda/management/commands/load_years.py @@ -0,0 +1,13 @@ +from django.core.management.base import BaseCommand, CommandError +from hmda.models import Year + + +class Command(BaseCommand): + args = " " + help = """Record year time-stamps for data.""" + + def handle(self, *args, **options): + if len(args) < 3: + raise CommandError("Need three arguments for year record" + Command.args) + yobj = Year(hmda_year = int(args[0]),census_year = int(args[1]), geo_year = int(args[2])) + yobj.save() diff --git a/mapusaurus/hmda/migrations/0001_initial.py b/mapusaurus/hmda/migrations/0001_initial.py index 6b85034e..9675cb17 100644 --- a/mapusaurus/hmda/migrations/0001_initial.py +++ b/mapusaurus/hmda/migrations/0001_initial.py @@ -1,226 +1,120 @@ # -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'HMDARecord' - db.create_table(u'hmda_hmdarecord', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('as_of_year', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('respondent_id', self.gf('django.db.models.fields.CharField')(max_length=10)), - ('agency_code', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('loan_type', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('property_type', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('loan_purpose', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('owner_occupancy', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('loan_amount_000s', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('preapproval', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('action_taken', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), - ('msamd', self.gf('django.db.models.fields.CharField')(max_length=5)), - ('statefp', self.gf('django.db.models.fields.CharField')(max_length=2, db_index=True)), - ('countyfp', self.gf('django.db.models.fields.CharField')(max_length=3)), - ('census_tract_number', self.gf('django.db.models.fields.CharField')(max_length=7)), - ('applicant_ethnicity', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('co_applicant_ethnicity', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('applicant_race_1', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('applicant_race_2', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('applicant_race_3', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('applicant_race_4', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('applicant_race_5', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('co_applicant_race_1', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('co_applicant_race_2', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('co_applicant_race_3', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('co_applicant_race_4', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('co_applicant_race_5', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('applicant_sex', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('co_applicant_sex', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('applicant_income_000s', self.gf('django.db.models.fields.CharField')(max_length=4)), - ('purchaser_type', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('denial_reason_1', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('denial_reason_2', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('denial_reason_3', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('rate_spread', self.gf('django.db.models.fields.CharField')(max_length=5)), - ('hoepa_status', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('lien_status', self.gf('django.db.models.fields.CharField')(max_length=1)), - ('edit_status', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)), - ('sequence_number', self.gf('django.db.models.fields.CharField')(max_length=7)), - ('population', self.gf('django.db.models.fields.CharField')(max_length=8)), - ('minority_population', self.gf('django.db.models.fields.CharField')(max_length=6)), - ('ffieic_median_family_income', self.gf('django.db.models.fields.CharField')(max_length=8)), - ('tract_to_msamd_income', self.gf('django.db.models.fields.CharField')(max_length=6)), - ('number_of_owner_occupied_units', self.gf('django.db.models.fields.CharField')(max_length=8)), - ('number_of_1_to_4_family_units', self.gf('django.db.models.fields.CharField')(max_length=8)), - ('application_date_indicator', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('institution', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['respondents.Institution'])), - ('geo', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['geo.Geo'])), - )) - db.send_create_signal(u'hmda', ['HMDARecord']) - - # Adding index on 'HMDARecord', fields ['institution', 'geo'] - db.create_index(u'hmda_hmdarecord', ['institution_id', 'geo_id']) - - # Adding model 'LendingStats' - db.create_table(u'hmda_lendingstats', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('institution', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['respondents.Institution'])), - ('geo', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['geo.Geo'])), - ('lar_median', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('lar_count', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('fha_count', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('fha_bucket', self.gf('django.db.models.fields.PositiveIntegerField')()), - )) - db.send_create_signal(u'hmda', ['LendingStats']) - - # Adding unique constraint on 'LendingStats', fields ['institution', 'geo'] - db.create_unique(u'hmda_lendingstats', ['institution_id', 'geo_id']) - - # Adding index on 'LendingStats', fields ['institution', 'geo'] - db.create_index(u'hmda_lendingstats', ['institution_id', 'geo_id']) - - - def backwards(self, orm): - # Removing index on 'LendingStats', fields ['institution', 'geo'] - db.delete_index(u'hmda_lendingstats', ['institution_id', 'geo_id']) - - # Removing unique constraint on 'LendingStats', fields ['institution', 'geo'] - db.delete_unique(u'hmda_lendingstats', ['institution_id', 'geo_id']) - - # Removing index on 'HMDARecord', fields ['institution', 'geo'] - db.delete_index(u'hmda_hmdarecord', ['institution_id', 'geo_id']) - - # Deleting model 'HMDARecord' - db.delete_table(u'hmda_hmdarecord') - - # Deleting model 'LendingStats' - db.delete_table(u'hmda_lendingstats') - - - models = { - u'geo.geo': { - 'Meta': {'object_name': 'Geo', 'index_together': "[('geo_type', 'minlat', 'minlon'), ('geo_type', 'minlat', 'maxlon'), ('geo_type', 'maxlat', 'minlon'), ('geo_type', 'maxlat', 'maxlon'), ('geo_type', 'centlat', 'centlon'), ('geo_type', 'cbsa')]"}, - 'cbsa': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'centlat': ('django.db.models.fields.FloatField', [], {}), - 'centlon': ('django.db.models.fields.FloatField', [], {}), - 'county': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'csa': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}), - 'geo_type': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'geoid': ('django.db.models.fields.CharField', [], {'max_length': '20', 'primary_key': 'True'}), - 'geom': ('django.contrib.gis.db.models.fields.MultiPolygonField', [], {'srid': '4269'}), - 'maxlat': ('django.db.models.fields.FloatField', [], {}), - 'maxlon': ('django.db.models.fields.FloatField', [], {}), - 'metdiv': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True'}), - 'minlat': ('django.db.models.fields.FloatField', [], {}), - 'minlon': ('django.db.models.fields.FloatField', [], {}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}), - 'tract': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True'}) - }, - u'hmda.hmdarecord': { - 'Meta': {'object_name': 'HMDARecord', 'index_together': "[('institution', 'geo')]"}, - 'action_taken': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'agency_code': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'applicant_ethnicity': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'applicant_income_000s': ('django.db.models.fields.CharField', [], {'max_length': '4'}), - 'applicant_race_1': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'applicant_race_2': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'applicant_race_3': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'applicant_race_4': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'applicant_race_5': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'applicant_sex': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'application_date_indicator': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'as_of_year': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'census_tract_number': ('django.db.models.fields.CharField', [], {'max_length': '7'}), - 'co_applicant_ethnicity': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'co_applicant_race_1': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'co_applicant_race_2': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'co_applicant_race_3': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'co_applicant_race_4': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'co_applicant_race_5': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'co_applicant_sex': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'countyfp': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'denial_reason_1': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'denial_reason_2': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'denial_reason_3': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'edit_status': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), - 'ffieic_median_family_income': ('django.db.models.fields.CharField', [], {'max_length': '8'}), - 'geo': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['geo.Geo']"}), - 'hoepa_status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'institution': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['respondents.Institution']"}), - 'lien_status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'loan_amount_000s': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'loan_purpose': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'loan_type': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'minority_population': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - 'msamd': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'number_of_1_to_4_family_units': ('django.db.models.fields.CharField', [], {'max_length': '8'}), - 'number_of_owner_occupied_units': ('django.db.models.fields.CharField', [], {'max_length': '8'}), - 'owner_occupancy': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'population': ('django.db.models.fields.CharField', [], {'max_length': '8'}), - 'preapproval': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'property_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'purchaser_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), - 'rate_spread': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'respondent_id': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'sequence_number': ('django.db.models.fields.CharField', [], {'max_length': '7'}), - 'statefp': ('django.db.models.fields.CharField', [], {'max_length': '2', 'db_index': 'True'}), - 'tract_to_msamd_income': ('django.db.models.fields.CharField', [], {'max_length': '6'}) - }, - u'hmda.lendingstats': { - 'Meta': {'unique_together': "[('institution', 'geo')]", 'object_name': 'LendingStats', 'index_together': "[('institution', 'geo')]"}, - 'fha_bucket': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'fha_count': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'geo': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['geo.Geo']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'institution': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['respondents.Institution']"}), - 'lar_count': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'lar_median': ('django.db.models.fields.PositiveIntegerField', [], {}) - }, - u'respondents.agency': { - 'Meta': {'object_name': 'Agency'}, - 'acronym': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'full_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), - 'hmda_id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}) - }, - u'respondents.institution': { - 'Meta': {'unique_together': "(('institution_id', 'year'),)", 'object_name': 'Institution', 'index_together': "[['institution_id', 'year']]"}, - 'agency': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['respondents.Agency']"}), - 'assets': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'institution_id': ('django.db.models.fields.CharField', [], {'max_length': '11', 'primary_key': 'True'}), - 'mailing_address': ('django.db.models.fields.CharField', [], {'max_length': '40'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), - 'non_reporting_parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'null': 'True', 'to': u"orm['respondents.ParentInstitution']"}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'null': 'True', 'to': u"orm['respondents.Institution']"}), - 'respondent_id': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'rssd_id': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True'}), - 'tax_id': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'top_holder': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'descendants'", 'null': 'True', 'to': u"orm['respondents.ParentInstitution']"}), - 'year': ('django.db.models.fields.SmallIntegerField', [], {}), - 'zip_code': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['respondents.ZipcodeCityState']"}) - }, - u'respondents.parentinstitution': { - 'Meta': {'object_name': 'ParentInstitution'}, - 'city': ('django.db.models.fields.CharField', [], {'max_length': '25'}), - 'country': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), - 'rssd_id': ('django.db.models.fields.CharField', [], {'max_length': '10', 'unique': 'True', 'null': 'True'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}), - 'year': ('django.db.models.fields.SmallIntegerField', [], {}) - }, - u'respondents.zipcodecitystate': { - 'Meta': {'unique_together': "(('zip_code', 'city'),)", 'object_name': 'ZipcodeCityState'}, - 'city': ('django.db.models.fields.CharField', [], {'max_length': '25'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'plus_four': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - 'state': ('localflavor.us.models.USStateField', [], {'max_length': '2'}), - 'zip_code': ('django.db.models.fields.IntegerField', [], {}) - } - } - - complete_apps = ['hmda'] \ No newline at end of file +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('respondents', '__first__'), + ('geo', '__first__'), + ] + + operations = [ + migrations.CreateModel( + name='HMDARecord', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('as_of_year', models.PositiveIntegerField(help_text=b'The reporting year of the HMDA record.')), + ('respondent_id', models.CharField(help_text=b'A code representing the bank or other financial institution that is reporting the loan or application.', max_length=10)), + ('agency_code', models.CharField(help_text=b'A code representing the federal agency to which the HMDA-reporting institution submits its HMDA data.', max_length=1, choices=[(1, b'Office of the Comptroller of the Currency (OCC)'), (2, b'Federal Reserve System (FRS)'), (3, b'Federal Deposit Insurance Corporation (FDIC)'), (5, b'National Credit Union Administration (NCUA)'), (7, b'Department of Housing and Urban Development (HUD)'), (9, b'Consumer Financial Protection Bureau (CFPB)')])), + ('loan_type', models.PositiveIntegerField(help_text=b"A code representing the type of loan applied for. Many loans are insured or guaranteed by government programs offered by Federal Housing Administration (FHA), the Department of Veterans Affairs (VA), or the Department of Agriculture's Rural Housing Service (RHS) or Farm Service Agency (FSA). All other loans are classified as conventional.", choices=[(1, b'Conventional (any loan other than FHA, VA, FSA, or RHS loans)'), (2, b'FHA-insured (Federal Housing Administration)'), (3, b'VA-guaranteed (Veterans Administration)'), (4, b'FSA/RHS (Farm Service Agency or Rural Housing Service)')])), + ('property_type', models.CharField(help_text=b'A code representing the type of the property.', max_length=1, choices=[(1, b'One to four-family (other than manufactured housing)'), (2, b'Manufactured housing'), (3, b'Multifamily')])), + ('loan_purpose', models.PositiveIntegerField(help_text=b'A code representing the purpose of the loan (home purchase, refinance, or home improvement).', choices=[(1, b'Home purchase'), (2, b'Home improvement'), (3, b'Refinancing')])), + ('owner_occupancy', models.PositiveIntegerField(help_text=b"A code representing the owner-occupancy status of the property. Second homes, vacation homes, and rental properties are classified as 'not owner-occupied as a principal dwelling'.", choices=[(1, b'Owner-occupied as a principal dwelling'), (2, b'Not owner-occupied'), (3, b'Not applicable')])), + ('loan_amount_000s', models.PositiveIntegerField(help_text=b'The amount of the loan applied for, in thousands of dollars.')), + ('preapproval', models.CharField(help_text=b'A code representing the pre-approval status of the application.', max_length=1, choices=[(1, b'Preapproval was requested'), (2, b'Preapproval was not requested'), (3, b'Not applicable')])), + ('action_taken', models.PositiveIntegerField(help_text=b'A code representing the action taken on the loan or application, such as whether an application was approved or denied. Loan originated means the application resulted in a mortgage. Loan purchased means that the lender bought the loan on the secondary market.', db_index=True, choices=[(1, b'Loan originated'), (2, b'Application approved but not accepted'), (3, b'Application denied by financial institution'), (4, b'Application withdrawn by applicant'), (5, b'File closed for incompleteness'), (6, b'Loan purchased by the institution'), (7, b'Preapproval request denied by financial institution'), (8, b'Preapproval request approved but not accepted (optional reporting)')])), + ('msamd', models.CharField(help_text=b'A code representing the Metropolitan Statistical Area/Metropolitian Division (MSA/MD) the property is located in. An MSA is a region with relatively high population density at its core (usually a single large city) and close economic ties throughout. Larger MSAs are divided into MDs.', max_length=5)), + ('statefp', models.CharField(help_text=b'A two-digit code representing the state the property is located in.', max_length=2, db_index=True)), + ('countyfp', models.CharField(help_text=b'A three-digit code representing the county of the property. This code is only unique when combined with the state code.', max_length=3)), + ('census_tract_number', models.CharField(help_text=b'The number of the census tract for the property. This code is only unique when combined with the state and county codes.', max_length=7)), + ('applicant_ethnicity', models.CharField(help_text=b'A code representing the ethnicity of the primary applicant.', max_length=1, choices=[(1, b'Hispanic or Latino'), (2, b'Not Hispanic or Latino'), (3, b'Information not provided by applicant in mail, Internet, or telephone application'), (4, b'Not applicable'), (5, b'No co-applicant')])), + ('co_applicant_ethnicity', models.CharField(help_text=b'A code representing the ethnicity of the co-applicant.', max_length=1, choices=[(1, b'Hispanic or Latino'), (2, b'Not Hispanic or Latino'), (3, b'Information not provided by applicant in mail, Internet, or telephone application'), (4, b'Not applicable'), (5, b'No co-applicant')])), + ('applicant_race_1', models.CharField(help_text=b'A code representing the first listed race for the primary applicant. The applicant can list up to five races.', max_length=1, choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('applicant_race_2', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the second listed race for the primary applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('applicant_race_3', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the third listed race for the primary applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('applicant_race_4', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the fourth listed race for the primary applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('applicant_race_5', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the fifth listed race for the primary applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('co_applicant_race_1', models.CharField(help_text=b'A code representing the first listed race for the co-applicant. The co-applicant can list up to five races.', max_length=1, choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('co_applicant_race_2', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the second listed race for the co-applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('co_applicant_race_3', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the third listed race for the co-applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('co_applicant_race_4', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the fourth listed race for the co-applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('co_applicant_race_5', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the fifth listed race for the co-applicant.', choices=[(1, b'American Indian or Alaska Native 2 -- Asian'), (3, b'Black or African American'), (4, b'Native Hawaiian or Other Pacific Islander '), (5, b'White'), (6, b'Information not provided by applicant in mail, Internet, or telephone application'), (7, b'Not applicable'), (8, b'No co-applicant')])), + ('applicant_sex', models.PositiveIntegerField(help_text=b'A code representing the sex of the primary applicant.', choices=[(1, b'Male'), (2, b'Female'), (3, b'Information not provided by applicant in mail, Internet, or telephone application'), (4, b'Not applicable'), (5, b'No co-applicant')])), + ('co_applicant_sex', models.PositiveIntegerField(help_text=b'A code representing the sex of the co-applicant.', choices=[(1, b'Male'), (2, b'Female'), (3, b'Information not provided by applicant in mail, Internet, or telephone application'), (4, b'Not applicable'), (5, b'No co-applicant')])), + ('applicant_income_000s', models.CharField(help_text=b'The gross annual income that the lender relied on when evaluating the creditworthiness of the applicant, rounded to the nearest thousand.', max_length=4)), + ('purchaser_type', models.CharField(help_text=b'A code representing the type of institution purchasing the loan.', max_length=1, choices=[(0, b'Loan was not originated or was not sold in calendar year covered by register'), (1, b'Fannie Mae (FNMA)'), (2, b'Ginnie Mae (GNMA)'), (3, b'Freddie Mac (FHLMC)'), (4, b'Farmer Mac (FAMC)'), (5, b'Private securitization'), (6, b'Commercial bank, savings bank or savings association'), (7, b'Life insurance company, credit union, mortgage bank, or finance company'), (8, b'Affiliate institution'), (9, b'Other type of purchaser')])), + ('denial_reason_1', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the first reason for denial of the application. Lenders may report up to three denial reasons, but such reporting is optional.', choices=[(1, b'Debt-to-income ratio'), (2, b'Employment history'), (3, b'Credit history'), (4, b'Collateral'), (5, b'Insufficient cash (downpayment, closing costs)'), (6, b'Unverifiable information'), (7, b'Credit application incomplete'), (8, b'Mortgage insurance denied'), (9, b'Other')])), + ('denial_reason_2', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the second reason for denial of the application.', choices=[(1, b'Debt-to-income ratio'), (2, b'Employment history'), (3, b'Credit history'), (4, b'Collateral'), (5, b'Insufficient cash (downpayment, closing costs)'), (6, b'Unverifiable information'), (7, b'Credit application incomplete'), (8, b'Mortgage insurance denied'), (9, b'Other')])), + ('denial_reason_3', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the third reason for denial of the application.', choices=[(1, b'Debt-to-income ratio'), (2, b'Employment history'), (3, b'Credit history'), (4, b'Collateral'), (5, b'Insufficient cash (downpayment, closing costs)'), (6, b'Unverifiable information'), (7, b'Credit application incomplete'), (8, b'Mortgage insurance denied'), (9, b'Other')])), + ('rate_spread', models.CharField(help_text=b"The rate spread for the loan, which is the difference between the loan's annual percentage rate (APR) and the average prime offer rate (APOR).", max_length=5)), + ('hoepa_status', models.CharField(help_text=b'A code representing whether a loan is subject to the Home Ownership and Equity Protection Act of 1994 (HOEPA).', max_length=1, choices=[(1, b'HOEPA loan'), (2, b'Not a HOEPA loan')])), + ('lien_status', models.CharField(help_text=b'A code representing the lien status. Most mortgages are secured by a lien against the property. In the event of a forced liquidation, first lien holders will generally get paid before subordinate lien holders.', max_length=1, choices=[(1, b'Secured by a first lien'), (2, b'Secured by a subordinate lien'), (3, b'Not secured by a lien'), (4, b'Not applicable (purchased loans)')])), + ('edit_status', models.CharField(blank=True, max_length=1, null=True, help_text=b'A code representing the edit failure status of the application.', choices=[(b'', b'No edit failures'), (5, b'Validity edit failure only'), (6, b'Quality edit failure only'), (7, b'Validity and quality edit failures')])), + ('sequence_number', models.CharField(help_text=b'A one-up number scheme for each respondent to make each loan unique.', max_length=7)), + ('population', models.CharField(help_text=b'The total population in the tract.', max_length=8)), + ('minority_population', models.CharField(help_text=b'The percentage of minority population to total population for the census tract, carried to two decimal places.', max_length=6)), + ('ffieic_median_family_income', models.CharField(help_text=b'The median family income in dollars for the MSA/MD in which the tract is located. (Note: The HMDA API names this col hud_median_family_income.)', max_length=8)), + ('tract_to_msamd_income', models.CharField(help_text=b'The percentage of the median family income for the tract compared to the median family income for the MSA/MD, rounded to two decimal places.', max_length=6)), + ('number_of_owner_occupied_units', models.CharField(help_text=b'The number of dwellings in the tract that are lived in by the owner.', max_length=8)), + ('number_of_1_to_4_family_units', models.CharField(help_text=b'The number of dwellings in the tract that are built to house fewer than 5 families.', max_length=8)), + ('application_date_indicator', models.PositiveIntegerField(help_text=b"A code representing the date of the application. '0' means the application was made on or after 1/1/2004; '1' means the application was made before 1/1/2004; '2' means the application date is not available.", choices=[(0, b'Application Date >= 01-01-2004'), (1, b'Application Date < 01-01-2004'), (2, b'Application Date = NA (Not Available)')])), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='LendingStats', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('lar_median', models.PositiveIntegerField(help_text=b'HMDA LAR median')), + ('lar_count', models.PositiveIntegerField(help_text=b'Total HMDA LAR count')), + ('fha_count', models.PositiveIntegerField(help_text=b'Total HMDA LAR count where loan_type=2(FHA)')), + ('fha_bucket', models.PositiveIntegerField(help_text=b'Predetermined buckets calculated by find fha % of total lar count')), + ('geo', models.ForeignKey(to='geo.Geo')), + ('institution', models.ForeignKey(to='respondents.Institution')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Year', + fields=[ + ('hmda_year', models.PositiveIntegerField(help_text=b'The reporting year of the HMDA record.', serialize=False, primary_key=True)), + ('census_year', models.PositiveIntegerField(help_text=b'Year of census data.')), + ('geo_year', models.PositiveIntegerField(help_text=b'Year that geographic boundaries were recorded.')), + ], + options={ + 'get_latest_by': 'hmda_year', + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='lendingstats', + unique_together=set([('institution', 'geo')]), + ), + migrations.AlterIndexTogether( + name='lendingstats', + index_together=set([('institution', 'geo')]), + ), + migrations.AddField( + model_name='hmdarecord', + name='geo', + field=models.ForeignKey(to='geo.Geo'), + preserve_default=True, + ), + migrations.AddField( + model_name='hmdarecord', + name='institution', + field=models.ForeignKey(to='respondents.Institution'), + preserve_default=True, + ), + migrations.AlterIndexTogether( + name='hmdarecord', + index_together=set([('institution', 'geo')]), + ), + ] diff --git a/mapusaurus/hmda/migrations/0002_auto_20160219_1957.py b/mapusaurus/hmda/migrations/0002_auto_20160219_1957.py new file mode 100644 index 00000000..b9d16b03 --- /dev/null +++ b/mapusaurus/hmda/migrations/0002_auto_20160219_1957.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('hmda', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='hmdarecord', + name='as_of_year', + field=models.PositiveIntegerField(help_text=b'The reporting year of the HMDA record.', db_index=True), + ), + ] diff --git a/mapusaurus/hmda/models.py b/mapusaurus/hmda/models.py index 303051de..73e2d8be 100644 --- a/mapusaurus/hmda/models.py +++ b/mapusaurus/hmda/models.py @@ -133,7 +133,7 @@ class HMDARecord(models.Model): HMDA Loan Application Register Format https://www.ffiec.gov/hmdarawdata/FORMATS/2013HMDALARRecordFormat.pdf """ - as_of_year = models.PositiveIntegerField(help_text="The reporting year of the HMDA record.") + as_of_year = models.PositiveIntegerField(db_index=True, help_text="The reporting year of the HMDA record.") respondent_id = models.CharField(max_length=10, help_text="A code representing the bank or other financial institution that is reporting the loan or application.") agency_code = models.CharField(max_length=1, choices=AGENCY_CHOICES, help_text="A code representing the federal agency to which the HMDA-reporting institution submits its HMDA data.") loan_type = models.PositiveIntegerField(choices=LOAN_TYPE_CHOICES, help_text="A code representing the type of loan applied for. Many loans are insured or guaranteed by government programs offered by Federal Housing Administration (FHA), the Department of Veterans Affairs (VA), or the Department of Agriculture's Rural Housing Service (RHS) or Farm Service Agency (FSA). All other loans are classified as conventional.") @@ -189,6 +189,16 @@ class Meta: def save(self, *args, **kwargs): super(HMDARecord, self).save(*args, **kwargs) +class Year(models.Model): + """Various year fields in the app data""" + YEAR_CHOICES = zip( range(1970,2050), range(1970,2050) ) + hmda_year = models.PositiveIntegerField(primary_key=True, choices=YEAR_CHOICES, help_text="The reporting year of the HMDA record.") + census_year = models.PositiveIntegerField(choices=YEAR_CHOICES, help_text="Year of census data.", null=False) + geo_year = models.PositiveIntegerField(choices=YEAR_CHOICES, help_text="Year that geographic boundaries were recorded.", null=False) + + class Meta: + get_latest_by = 'hmda_year' + class LendingStats(models.Model): """For certain lender x geo combinations, we have pre-computed diff --git a/mapusaurus/hmda/tests/mock_2014.csv b/mapusaurus/hmda/tests/mock_2013.csv similarity index 100% rename from mapusaurus/hmda/tests/mock_2014.csv rename to mapusaurus/hmda/tests/mock_2013.csv diff --git a/mapusaurus/hmda/tests/mock_hmda_csv_00 b/mapusaurus/hmda/tests/mock_hmda_csv_2013_00 similarity index 100% rename from mapusaurus/hmda/tests/mock_hmda_csv_00 rename to mapusaurus/hmda/tests/mock_hmda_csv_2013_00 diff --git a/mapusaurus/hmda/tests/mock_hmda_csv_01 b/mapusaurus/hmda/tests/mock_hmda_csv_2013_01 similarity index 100% rename from mapusaurus/hmda/tests/mock_hmda_csv_01 rename to mapusaurus/hmda/tests/mock_hmda_csv_2013_01 diff --git a/mapusaurus/hmda/tests/mock_hmda_csv_02 b/mapusaurus/hmda/tests/mock_hmda_csv_2013_02 similarity index 100% rename from mapusaurus/hmda/tests/mock_hmda_csv_02 rename to mapusaurus/hmda/tests/mock_hmda_csv_2013_02 diff --git a/mapusaurus/hmda/tests/mock_hmda_csv_03 b/mapusaurus/hmda/tests/mock_hmda_csv_2013_03 similarity index 100% rename from mapusaurus/hmda/tests/mock_hmda_csv_03 rename to mapusaurus/hmda/tests/mock_hmda_csv_2013_03 diff --git a/mapusaurus/hmda/tests/mock_hmda_csv_04 b/mapusaurus/hmda/tests/mock_hmda_csv_2013_04 similarity index 100% rename from mapusaurus/hmda/tests/mock_hmda_csv_04 rename to mapusaurus/hmda/tests/mock_hmda_csv_2013_04 diff --git a/mapusaurus/hmda/tests/test_loader.py b/mapusaurus/hmda/tests/test_loader.py index f52eef69..c2406207 100644 --- a/mapusaurus/hmda/tests/test_loader.py +++ b/mapusaurus/hmda/tests/test_loader.py @@ -13,21 +13,21 @@ class LoadHmdaTest(TestCase): def test_handle(self): command = Command() command.stdout = Mock() - command.handle(os.path.join("hmda", "tests", "mock_2014.csv")) + command.handle(os.path.join("hmda", "tests", "mock_2013.csv"),2013) # The mock data file contains 10 records, 8 for known states self.assertEqual(8, HMDARecord.objects.count()) lenders = set(r.institution_id for r in HMDARecord.objects.all()) geos = set(r.geo_id for r in HMDARecord.objects.all()) self.assertEqual(3, len(lenders)) - self.assertTrue(('5' + '0000000319') in lenders) - self.assertTrue(('5' + '0000000435') in lenders) - self.assertTrue(('3' + '0000001281') in lenders) + self.assertTrue(('2013'+'5' + '0000000319') in lenders) + self.assertTrue(('2013'+'5' + '0000000435') in lenders) + self.assertTrue(('2013'+'3' + '0000001281') in lenders) self.assertEqual(4, len(geos)) - self.assertTrue('1122233300' in geos) - self.assertTrue('1122233400' in geos) - self.assertTrue('1122333300' in geos) - self.assertTrue('1222233300' in geos) + self.assertTrue('20131122233300' in geos) + self.assertTrue('20131122233400' in geos) + self.assertTrue('20131122333300' in geos) + self.assertTrue('20131222233300' in geos) HMDARecord.objects.all().delete() @@ -36,13 +36,13 @@ def test_handle_errors_dict(self, errors): errors.in_2010 = {'1122233300': '9988877766'} command = Command() command.stdout = Mock() - command.handle(os.path.join("hmda", "tests", "mock_2014.csv")) + command.handle(os.path.join("hmda", "tests", "mock_2013.csv"), '2013') geos = set(r.geo_id for r in HMDARecord.objects.all()) self.assertEqual(4, len(geos)) # 1122233300 got replaced - self.assertTrue('9988877766' in geos) - self.assertFalse('1122233300' in geos) + self.assertTrue('20139988877766' in geos) + self.assertFalse('20131122233300' in geos) HMDARecord.objects.all().delete() @@ -55,19 +55,18 @@ def test_multi_files(self): main_csv_directory = main_csv_directory + "/" - command.handle(main_csv_directory , "delete_file:false", "filterhmda" ) - + command.handle(main_csv_directory, '2013', "delete_file:false", "filterhmda") lenders = set(r.institution_id for r in HMDARecord.objects.all()) geos = set(r.geo_id for r in HMDARecord.objects.all()) self.assertEqual(3, len(lenders)) - self.assertTrue(('5' + '0000000319') in lenders) - self.assertTrue(('5' + '0000000435') in lenders) - self.assertTrue(('3' + '0000001281') in lenders) + self.assertTrue(('2013'+'5' + '0000000319') in lenders) + self.assertTrue(('2013'+'5' + '0000000435') in lenders) + self.assertTrue(('2013'+'3' + '0000001281') in lenders) self.assertEqual(4, len(geos)) - self.assertTrue('1122233300' in geos) - self.assertTrue('1122233400' in geos) - self.assertTrue('1122333300' in geos) - self.assertTrue('1222233300' in geos) + self.assertTrue('20131122233300' in geos) + self.assertTrue('20131122233400' in geos) + self.assertTrue('20131122333300' in geos) + self.assertTrue('20131222233300' in geos) HMDARecord.objects.all().delete() diff --git a/mapusaurus/hmda/tests/test_precalc.py b/mapusaurus/hmda/tests/test_precalc.py index 410d5866..f29a075f 100644 --- a/mapusaurus/hmda/tests/test_precalc.py +++ b/mapusaurus/hmda/tests/test_precalc.py @@ -5,7 +5,7 @@ from hmda.management.commands.calculate_loan_stats import ( calculate_median_loans, calculate_lar_count, calculate_fha_count, get_fha_bucket, Command) from hmda.models import HMDARecord, LendingStats -from respondents.models import Institution, Agency, ZipcodeCityState +from respondents.models import Institution, Agency, ZipcodeCityStateYear class PrecalcTest(TestCase): @@ -16,7 +16,7 @@ def setUp(self): tract_params = { 'geo_type': Geo.TRACT_TYPE, 'minlat': 0.11, 'minlon': 0.22, 'maxlat': 1.33, 'maxlon': 1.44, 'centlat': 45.4545, - 'centlon': 67.67, 'geom': "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))"} + 'centlon': 67.67, 'geom': "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))", 'year':2013} self.city_tract1 = Geo.objects.create( name='City Tract 1', cbsa='99999', geoid='11111111', **tract_params) @@ -37,12 +37,12 @@ def setUp(self): name='Non-City Tract 6', geoid='11111116', **tract_params) del tract_params['geo_type'] self.metro = Geo.objects.create( - name='City', geoid='99999', geo_type=Geo.METRO_TYPE, + name='City', geoid='201399999',cbsa='99999', geo_type=Geo.METRO_TYPE, **tract_params) hmda_params = { - 'as_of_year': 2010, 'respondent_id': self.respondent.respondent_id, + 'as_of_year': 2013, 'respondent_id': self.respondent.respondent_id, 'agency_code': str(self.respondent.agency_id), 'property_type': 1, 'loan_purpose': 1, 'owner_occupancy': 1, 'loan_amount_000s': 100, 'preapproval': '1', 'action_taken': 1, @@ -72,10 +72,10 @@ def setUp(self): geo=self.non_city_tract2, institution=self.respondent, loan_type=2, **hmda_params)) hmda_params['respondent_id'] = 'other' - self.zipcode = ZipcodeCityState.objects.create( - zip_code=12345, city='City', state='IL') + self.zipcode = ZipcodeCityStateYear.objects.create( + zip_code=12345, city='City', state='IL', year=2013) self.inst1 = Institution.objects.create( - year=1234, respondent_id='9876543210', agency=Agency.objects.get(pk=9), + year=2013, respondent_id='9876543210', agency=Agency.objects.get(pk=9), institution_id='99876543210', tax_id='1111111111', name='Institution', mailing_address='mail', zip_code=self.zipcode) # these should not affect the results, since they are another lender @@ -146,14 +146,15 @@ def test_calculate_fha_count(self): self.assertEqual(1, calculate_fha_count(lender_id, self.metro)) def test_saves_stats(self): + year = "2013" lender_id = self.respondent.institution_id command = Command() command.stdout = Mock() - command.handle() + command.handle(year) found = False for stats in LendingStats.objects.all(): - if stats.geo_id == '99999' and stats.institution_id == lender_id: + if stats.geo_id == '201399999' and stats.institution_id == lender_id: found = True self.assertEqual(stats.lar_median, 3) self.assertTrue(found) diff --git a/mapusaurus/hmda/tests/test_views.py b/mapusaurus/hmda/tests/test_views.py index 5e754a8f..0905fb70 100644 --- a/mapusaurus/hmda/tests/test_views.py +++ b/mapusaurus/hmda/tests/test_views.py @@ -86,7 +86,7 @@ def mkrecord(institution_id, action_taken, countyfp, geoid): mkrecord("11000000002", 1, '222', '1122233300') mkrecord("91000000001", 6, '223', '1222233300') - call_command('calculate_loan_stats') + call_command('calculate_loan_stats', '2013') def tearDown(self): Census2010Households.objects.all().delete() @@ -116,19 +116,19 @@ def test_calculate_loan_stats(self): def test_loan_originations_http_user_errors(self): #invalid institution_id - resp = self.client.get(reverse('hmda:volume'), {'metro':'10000', + resp = self.client.get(reverse('hmda:volume'), {'metro':'201310000', 'action_taken':'1,2,3,4,5', 'lender':'91000000011'}) self.assertEqual(resp.status_code, 404) #invalid metro - resp = self.client.get(reverse('hmda:volume'), {'metro':'10011', + resp = self.client.get(reverse('hmda:volume'), {'metro':'201310011', 'action_taken':'1,2,3,4,5', 'lender':'91000000001'}) self.assertEqual(resp.status_code, 404) #invalid metro and institution_id - resp = self.client.get(reverse('hmda:volume'), {'metro':'10011', + resp = self.client.get(reverse('hmda:volume'), {'metro':'201310011', 'action_taken':'1,2,3,4,5', 'lender':'91000000011'}) self.assertEqual(resp.status_code, 404) diff --git a/mapusaurus/hmda/views.py b/mapusaurus/hmda/views.py index f145d3a2..a9657a3d 100644 --- a/mapusaurus/hmda/views.py +++ b/mapusaurus/hmda/views.py @@ -19,17 +19,16 @@ def loan_originations(request): action_taken_param = request.GET.get('action_taken') lender_hierarchy = request.GET.get('lh') peers = request.GET.get('peers') + year = request.GET.get('year') census_tracts = get_censustract_geos(request) - query = HMDARecord.objects.all() - - #if lender param key is passed in + query = HMDARecord.objects.all() if institution_id: institution_selected = get_object_or_404(Institution, pk=institution_id) if lender_hierarchy == 'true': - hierarchy_list = institution_selected.get_lender_hierarchy(False, False) + hierarchy_list = institution_selected.get_lender_hierarchy(False, False, year) if len(hierarchy_list) > 0: - query = query.filter(institution__in=hierarchy_list) + query = query.filter(institution__in=hierarchy_list) else: query = query.filter(institution=institution_selected) elif peers == 'true' and metro: @@ -71,4 +70,4 @@ def loan_originations_as_json(request): def loan_originations_http(request): json_data = loan_originations_as_json(request) if json_data: - return HttpResponse(json.dumps(json_data)) \ No newline at end of file + return HttpResponse(json.dumps(json_data)) diff --git a/mapusaurus/mapping/static/mapping/css/vendor.css b/mapusaurus/mapping/static/mapping/css/vendor.css index 9f631a6b..64d40fce 100644 --- a/mapusaurus/mapping/static/mapping/css/vendor.css +++ b/mapusaurus/mapping/static/mapping/css/vendor.css @@ -114,91 +114,4 @@ a.leaflet-rrose-close-button:hover { font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif; } -.leaflet-control-minimap { - border:solid rgba(255, 255, 255, 1.0) 4px; - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 3px; - background: #f8f8f9; - transition: all .2s; -} - -.leaflet-control-minimap a { - background-color: rgba(255, 255, 255, 1.0); - background-repeat: no-repeat; - z-index: 99999; - transition: all .2s; -} - -.leaflet-control-minimap a.minimized-bottomright { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - border-radius: 0px; -} - -.leaflet-control-minimap a.minimized-topleft { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - border-radius: 0px; -} - -.leaflet-control-minimap a.minimized-bottomleft { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); - border-radius: 0px; -} - -.leaflet-control-minimap a.minimized-topright { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - border-radius: 0px; -} - -.leaflet-control-minimap-toggle-display{ - background-image: url("images/toggle.svg"); - background-size: cover; - position: absolute; - border-radius: 3px 0px 0px 0px; -} - -.leaflet-oldie .leaflet-control-minimap-toggle-display{ - background-image: url("images/toggle.png"); -} - -.leaflet-control-minimap-toggle-display-bottomright { - bottom: 0; - right: 0; -} - -.leaflet-control-minimap-toggle-display-topleft{ - top: 0; - left: 0; - -webkit-transform: rotate(180deg); - transform: rotate(180deg); -} - -.leaflet-control-minimap-toggle-display-bottomleft{ - bottom: 0; - left: 0; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); -} - -.leaflet-control-minimap-toggle-display-topright{ - top: 0; - right: 0; - -webkit-transform: rotate(270deg); - transform: rotate(270deg); -} - -/* Old IE */ -.leaflet-oldie .leaflet-control-minimap { - border: 1px solid #999; -} - -.leaflet-oldie .leaflet-control-minimap a { - background-color: #fff; -} - -.leaflet-oldie .leaflet-control-minimap a.minimized { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -} +.leaflet-control-minimap{border:rgba(255,255,255,1) solid;box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:3px;background:#f8f8f9;transition:all .2s}.leaflet-control-minimap a{background-color:rgba(255,255,255,1);background-repeat:no-repeat;z-index:99999;transition:all .2s}.leaflet-control-minimap a.minimized-bottomright{-webkit-transform:rotate(180deg);transform:rotate(180deg);border-radius:0}.leaflet-control-minimap a.minimized-topleft{-webkit-transform:rotate(0deg);transform:rotate(0deg);border-radius:0}.leaflet-control-minimap a.minimized-bottomleft{-webkit-transform:rotate(270deg);transform:rotate(270deg);border-radius:0}.leaflet-control-minimap a.minimized-topright{-webkit-transform:rotate(90deg);transform:rotate(90deg);border-radius:0}.leaflet-control-minimap-toggle-display{background-image:url(images/toggle.svg);background-size:cover;position:absolute;border-radius:3px 0 0}.leaflet-oldie .leaflet-control-minimap-toggle-display{background-image:url(images/toggle.png)}.leaflet-control-minimap-toggle-display-bottomright{bottom:0;right:0}.leaflet-control-minimap-toggle-display-topleft{top:0;left:0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.leaflet-control-minimap-toggle-display-bottomleft{bottom:0;left:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.leaflet-control-minimap-toggle-display-topright{top:0;right:0;-webkit-transform:rotate(270deg);transform:rotate(270deg)}.leaflet-oldie .leaflet-control-minimap{border:1px solid #999}.leaflet-oldie .leaflet-control-minimap a{background-color:#fff}.leaflet-oldie .leaflet-control-minimap a.minimized{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)} \ No newline at end of file diff --git a/mapusaurus/mapping/static/mapping/js/map-layout.min.js b/mapusaurus/mapping/static/mapping/js/map-layout.min.js index 30855703..0194d4eb 100644 --- a/mapusaurus/mapping/static/mapping/js/map-layout.min.js +++ b/mapusaurus/mapping/static/mapping/js/map-layout.min.js @@ -35,4 +35,5 @@ }, $(function() { $(".tabs").mapusaurusTabs(); }); -}(jQuery); \ No newline at end of file +}(jQuery); +//# sourceMappingURL=map-layout.min.js.map \ No newline at end of file diff --git a/mapusaurus/mapping/static/mapping/js/map-vendor.min.js b/mapusaurus/mapping/static/mapping/js/map-vendor.min.js index b13fd1d4..c9d00f28 100644 --- a/mapusaurus/mapping/static/mapping/js/map-vendor.min.js +++ b/mapusaurus/mapping/static/mapping/js/map-vendor.min.js @@ -208,11 +208,11 @@ function addParam(paramName, values) { (predicate(value, key, obj) ? pass : fail).push(value); }), [ pass, fail ]; }, _.first = _.head = _.take = function(array, n, guard) { - return null == array ? void 0 : null == n || guard ? array[0] : 0 > n ? [] : slice.call(array, 0, n); + return null != array ? null == n || guard ? array[0] : 0 > n ? [] : slice.call(array, 0, n) : void 0; }, _.initial = function(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (null == n || guard ? 1 : n))); }, _.last = function(array, n, guard) { - return null == array ? void 0 : null == n || guard ? array[array.length - 1] : slice.call(array, Math.max(array.length - n, 0)); + return null != array ? null == n || guard ? array[array.length - 1] : slice.call(array, Math.max(array.length - n, 0)) : void 0; }, _.rest = _.tail = _.drop = function(array, n, guard) { return slice.call(array, null == n || guard ? 1 : n); }, _.compact = function(array) { @@ -551,9 +551,10 @@ function addParam(paramName, values) { }; }; _.escape = createEscaper(escapeMap), _.unescape = createEscaper(unescapeMap), _.result = function(object, property) { - if (null == object) return void 0; - var value = object[property]; - return _.isFunction(value) ? object[property]() : value; + if (null != object) { + var value = object[property]; + return _.isFunction(value) ? object[property]() : value; + } }; var idCounter = 0; _.uniqueId = function(prefix) { @@ -4681,168 +4682,195 @@ function addParam(paramName, values) { }, L.Map.prototype.removeHash = function() { this._hash.removeFrom(); }; -}(window), L.Util.ajax = function(url, cb) { - void 0 === window.XMLHttpRequest && (window.XMLHttpRequest = function() { - try { - return new ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) { - throw new Error("XMLHttpRequest is not supported"); - } - }); - var response, request = new XMLHttpRequest(); - return request.open("GET", url), request.onreadystatechange = function() { - 4 === request.readyState && 200 === request.status && (response = window.JSON ? JSON.parse(request.responseText) : eval("(" + request.responseText + ")"), - cb(response)); - }, request.send(), request; -}, L.UtfGrid = (L.Layer || L.Class).extend({ - includes: L.Mixin.Events, - options: { - subdomains: "abc", - minZoom: 0, - maxZoom: 18, - tileSize: 256, - resolution: 4, - useJsonP: !0, - pointerCursor: !0, - maxRequests: 4, - requestTimeout: 6e4 - }, - _mouseOn: null, - _requests: {}, - _request_queue: [], - _requests_in_process: [], - initialize: function(url, options) { - L.Util.setOptions(this, options), this._url = url, this._cache = {}; - for (var i = 0; window["lu" + i]; ) i++; - this._windowKey = "lu" + i, window[this._windowKey] = {}; - var subdomains = this.options.subdomains; - "string" == typeof this.options.subdomains && (this.options.subdomains = subdomains.split("")); - }, - onAdd: function(map) { - this._map = map, this._container = this._map._container, this._update(); - var zoom = this._map.getZoom(); - zoom > this.options.maxZoom || zoom < this.options.minZoom || (map.on("click", this._click, this), - map.on("mousemove", this._move, this), map.on("moveend", this._update, this)); - }, - onRemove: function() { - var map = this._map; - map.off("click", this._click, this), map.off("mousemove", this._move, this), map.off("moveend", this._update, this), - this.options.pointerCursor && (this._container.style.cursor = ""); - }, - redraw: function() { - this._request_queue = []; - for (var req_key in this._requests) this._requests.hasOwnProperty(req_key) && this._abort_request(req_key); - this._cache = {}, this._update(); - }, - _click: function(e) { - this.fire("click", this._objectForEvent(e)); - }, - _move: function(e) { - var on = this._objectForEvent(e); - on.data !== this._mouseOn ? (this._mouseOn && (this.fire("mouseout", { - latlng: e.latlng, - data: this._mouseOn - }), this.options.pointerCursor && (this._container.style.cursor = "")), on.data && (this.fire("mouseover", on), - this.options.pointerCursor && (this._container.style.cursor = "pointer")), this._mouseOn = on.data) : on.data && this.fire("mousemove", on); - }, - _objectForEvent: function(e) { - var map = this._map, point = map.project(e.latlng), tileSize = this.options.tileSize, resolution = this.options.resolution, x = Math.floor(point.x / tileSize), y = Math.floor(point.y / tileSize), gridX = Math.floor((point.x - x * tileSize) / resolution), gridY = Math.floor((point.y - y * tileSize) / resolution), max = map.options.crs.scale(map.getZoom()) / tileSize; - x = (x + max) % max, y = (y + max) % max; - var data = this._cache[map.getZoom() + "_" + x + "_" + y]; - if (!data || !data.grid) return { - latlng: e.latlng, - data: null - }; - var idx = this._utfDecode(data.grid[gridY].charCodeAt(gridX)), key = data.keys[idx], result = data.data[key]; - return data.data.hasOwnProperty(key) || (result = null), { - latlng: e.latlng, - data: result - }; - }, - _update: function() { - var bounds = this._map.getPixelBounds(), zoom = this._map.getZoom(), tileSize = this.options.tileSize; - if (!(zoom > this.options.maxZoom || zoom < this.options.minZoom)) { - for (var nwTilePoint = new L.Point(Math.floor(bounds.min.x / tileSize), Math.floor(bounds.min.y / tileSize)), seTilePoint = new L.Point(Math.floor(bounds.max.x / tileSize), Math.floor(bounds.max.y / tileSize)), max = this._map.options.crs.scale(zoom) / tileSize, visible_tiles = [], x = nwTilePoint.x; x <= seTilePoint.x; x++) for (var y = nwTilePoint.y; y <= seTilePoint.y; y++) { - var xw = (x + max) % max, yw = (y + max) % max, key = zoom + "_" + xw + "_" + yw; - visible_tiles.push(key), this._cache.hasOwnProperty(key) || (this._cache[key] = null, - this.options.useJsonP ? this._loadTileP(zoom, xw, yw) : this._loadTile(zoom, xw, yw)); +}(window), function(window, undefined) { + L.Util.ajax = function(url, success, error) { + window.XMLHttpRequest === undefined && (window.XMLHttpRequest = function() { + try { + return new ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) { + throw Error("XMLHttpRequest is not supported"); } - for (var req_key in this._requests) visible_tiles.indexOf(req_key) < 0 && this._abort_request(req_key); - } - }, - _loadTileP: function(zoom, x, y) { - var head = document.getElementsByTagName("head")[0], key = zoom + "_" + x + "_" + y, functionName = "lu_" + key, wk = this._windowKey, self = this, url = L.Util.template(this._url, L.Util.extend({ - s: L.TileLayer.prototype._getSubdomain.call(this, { - x: x, - y: y - }), - z: zoom, - x: x, - y: y, - cb: wk + "." + functionName - }, this.options)), script = document.createElement("script"); - script.setAttribute("type", "text/javascript"), script.setAttribute("src", url), - window[wk][functionName] = function(data) { - self._cache[key] = data, delete window[wk][functionName], head.removeChild(script), - self._finish_request(key); - }, this._queue_request(key, function() { - return head.appendChild(script), { - abort: function() { - head.removeChild(script); - } - }; }); - }, - _loadTile: function(zoom, x, y) { - var url = L.Util.template(this._url, L.Util.extend({ - s: L.TileLayer.prototype._getSubdomain.call(this, { - x: x, - y: y - }), - z: zoom, - x: x, - y: y - }, this.options)), key = zoom + "_" + x + "_" + y, self = this; - this._queue_request(key, function() { - return L.Util.ajax(url, function(data) { - self._cache[key] = data, self._finish_request(key); + var response, request = new XMLHttpRequest(); + return request.open("GET", url), request.onreadystatechange = function() { + 4 === request.readyState && (200 === request.status ? (response = window.JSON ? JSON.parse(request.responseText) : eval("(" + request.responseText + ")"), + success(response)) : 0 !== request.status && error !== undefined && error(request.status)); + }, request.ontimeout = function() { + error("timeout"); + }, request.send(), request; + }, L.UtfGrid = (L.Layer || L.Class).extend({ + includes: L.Mixin.Events, + options: { + subdomains: "abc", + minZoom: 0, + maxZoom: 18, + tileSize: 256, + resolution: 4, + useJsonP: !0, + pointerCursor: !0, + maxRequests: 4, + requestTimeout: 6e4 + }, + _mouseOn: null, + initialize: function(e, t) { + L.Util.setOptions(this, t), this._requests = {}, this._request_queue = [], this._requests_in_process = [], + this._url = e, this._cache = {}; + for (var n = 0; window["lu" + n]; ) n++; + this._windowKey = "lu" + n, window[this._windowKey] = {}; + var r = this.options.subdomains; + "string" == typeof this.options.subdomains && (this.options.subdomains = r.split("")); + }, + onAdd: function(e) { + this._map = e, this._container = this._map._container, this._update(); + var t = this._map.getZoom(); + t > this.options.maxZoom || t < this.options.minZoom || (e.on("click", this._click, this), + e.on("mousemove", this._move, this), e.on("moveend", this._update, this)); + }, + onRemove: function() { + var e = this._map; + e.off("click", this._click, this), e.off("mousemove", this._move, this), e.off("moveend", this._update, this), + this.options.pointerCursor && (this._container.style.cursor = ""); + }, + setUrl: function(e, t) { + return this._url = e, t || this.redraw(), this; + }, + redraw: function() { + this._request_queue = []; + for (var e in this._requests) this._requests.hasOwnProperty(e) && this._abort_request(e); + this._cache = {}, this._update(); + }, + _click: function(e) { + this.fire("click", this._objectForEvent(e)); + }, + _move: function(e) { + var t = this._objectForEvent(e); + t.data !== this._mouseOn ? (this._mouseOn && (this.fire("mouseout", { + latlng: e.latlng, + data: this._mouseOn + }), this.options.pointerCursor && (this._container.style.cursor = "")), t.data && (this.fire("mouseover", t), + this.options.pointerCursor && (this._container.style.cursor = "pointer")), this._mouseOn = t.data) : t.data && this.fire("mousemove", t); + }, + _objectForEvent: function(e) { + var t = this._map, n = t.project(e.latlng), r = this.options.tileSize, i = this.options.resolution, s = Math.floor(n.x / r), o = Math.floor(n.y / r), u = Math.floor((n.x - s * r) / i), a = Math.floor((n.y - o * r) / i), f = t.options.crs.scale(t.getZoom()) / r; + s = (s + f) % f, o = (o + f) % f; + var l = this._cache[t.getZoom() + "_" + s + "_" + o], c = null; + if (l && l.grid) { + var h = this._utfDecode(l.grid[a].charCodeAt(u)), p = l.keys[h]; + l.data.hasOwnProperty(p) && (c = l.data[p]); + } + return L.extend({ + latlng: e.latlng, + data: c + }, e); + }, + _update: function() { + var e = this._map.getPixelBounds(), t = this._map.getZoom(), n = this.options.tileSize; + if (!(t > this.options.maxZoom || t < this.options.minZoom)) { + for (var r = new L.Point(Math.floor(e.min.x / n), Math.floor(e.min.y / n)), i = new L.Point(Math.floor(e.max.x / n), Math.floor(e.max.y / n)), s = this._map.options.crs.scale(t) / n, o = [], u = r.x; u <= i.x; u++) for (var a = r.y; a <= i.y; a++) { + var f = (u + s) % s, l = (a + s) % s, c = t + "_" + f + "_" + l; + o.push(c), this._cache.hasOwnProperty(c) || (this._cache[c] = null, this.options.useJsonP ? this._loadTileP(t, f, l) : this._loadTile(t, f, l)); + } + for (var h in this._requests) o.indexOf(h) < 0 && this._abort_request(h); + } + }, + _loadTileP: function(e, t, n) { + var r = document.getElementsByTagName("head")[0], i = e + "_" + t + "_" + n, s = "lu_" + i, o = this._windowKey, u = this, a = L.Util.template(this._url, L.Util.extend({ + s: L.TileLayer.prototype._getSubdomain.call(this, { + x: t, + y: n + }), + z: e, + x: t, + y: n, + cb: o + "." + s + }, this.options)), f = document.createElement("script"); + f.setAttribute("type", "text/javascript"), f.setAttribute("src", a), window[o][s] = function(e) { + u._cache[i] = e, delete window[o][s], r.removeChild(f), u._finish_request(i); + }, this._queue_request(i, a, function() { + return r.appendChild(f), { + abort: function() { + r.removeChild(f); + } + }; }); - }); - }, - _queue_request: function(key, callback) { - this._requests[key] = { - callback: callback, - timeout: null, - handler: null - }, this._request_queue.push(key), this._process_queued_requests(); - }, - _finish_request: function(key) { - var pos = this._requests_in_process.indexOf(key); - pos >= 0 && this._requests_in_process.splice(pos, 1), pos = this._request_queue.indexOf(key), - pos >= 0 && this._request_queue.splice(pos, 1), this._requests[key] && (this._requests[key].timeout && window.clearTimeout(this._requests[key].timeout), - delete this._requests[key]), this._process_queued_requests(); - }, - _abort_request: function(key) { - this._requests[key] && this._requests[key].handler && "function" == typeof this._requests[key].handler.abort && this._requests[key].handler.abort(), - null === this._cache[key] && delete this._cache[key], this._finish_request(key); - }, - _process_queued_requests: function() { - for (;this._request_queue.length > 0 && (0 === this.options.maxRequests || this._requests_in_process.length < this.options.maxRequests); ) this._process_request(this._request_queue.pop()); - }, - _process_request: function(key) { - var self = this; - this._requests[key].timeout = window.setTimeout(function() { - self._abort_request(key); - }, this.options.requestTimeout), this._requests_in_process.push(key); - var handler = this._requests[key].callback(); - this._requests[key] && (this._requests[key].handler = handler); - }, - _utfDecode: function(c) { - return c >= 93 && c--, c >= 35 && c--, c - 32; - } -}), L.utfGrid = function(url, options) { - return new L.UtfGrid(url, options); -}, L.Rrose = L.Popup.extend({ + }, + _loadTile: function(e, t, n) { + var r = L.Util.template(this._url, L.Util.extend({ + s: L.TileLayer.prototype._getSubdomain.call(this, { + x: t, + y: n + }), + z: e, + x: t, + y: n + }, this.options)), i = e + "_" + t + "_" + n; + this._queue_request(i, r, this._ajaxRequestFactory(i, r)); + }, + _ajaxRequestFactory: function(e, t) { + var n = this._successCallbackFactory(e), r = this._errorCallbackFactory(t); + return function() { + var e = L.Util.ajax(t, n, r); + return e.timeout = this.options.requestTimeout, e; + }.bind(this); + }, + _successCallbackFactory: function(e) { + return function(t) { + this._cache[e] = t, this._finish_request(e); + }.bind(this); + }, + _errorCallbackFactory: function(e) { + return function(t) { + this.fire("tileerror", { + url: e, + code: t + }); + }.bind(this); + }, + _queue_request: function(e, t, n) { + this._requests[e] = { + callback: n, + timeout: null, + handler: null, + url: t + }, this._request_queue.push(e), this._process_queued_requests(); + }, + _finish_request: function(e) { + var t = this._requests_in_process.indexOf(e); + t >= 0 && this._requests_in_process.splice(t, 1), t = this._request_queue.indexOf(e), + t >= 0 && this._request_queue.splice(t, 1), this._requests[e] && (this._requests[e].timeout && window.clearTimeout(this._requests[e].timeout), + delete this._requests[e]), this._process_queued_requests(), 0 === this._requests_in_process.length && this.fire("load"); + }, + _abort_request: function(e) { + this._requests[e] && this._requests[e].handler && "function" == typeof this._requests[e].handler.abort && this._requests[e].handler.abort(), + null === this._cache[e] && delete this._cache[e], this._finish_request(e); + }, + _process_queued_requests: function() { + for (;this._request_queue.length > 0 && (0 === this.options.maxRequests || this._requests_in_process.length < this.options.maxRequests); ) this._process_request(this._request_queue.pop()); + }, + _process_request: function(e) { + this._requests_in_process.push(e); + var t = this._requests[e].callback(); + if (this._requests[e] && (this._requests[e].handler = t, t.timeout === undefined)) { + var n = this._timeoutCallbackFactory(e); + this._requests[e].timeout = window.setTimeout(n, this.options.requestTimeout); + } + }, + _timeoutCallbackFactory: function(e) { + var t = this._requests[e].url; + return function() { + this.fire("tileerror", { + url: t, + code: "timeout" + }), this._abort_request(e); + }.bind(this); + }, + _utfDecode: function(e) { + return e >= 93 && e--, e >= 35 && e--, e - 32; + } + }), L.utfGrid = function(e, t) { + return new L.UtfGrid(e, t); + }; +}(window), L.Rrose = L.Popup.extend({ _initLayout: function() { var closeButton, wrapper, prefix = "leaflet-rrose", container = this._container = L.DomUtil.create("div", prefix + " " + this.options.className + " leaflet-zoom-animated"); this.options.closeButton && (closeButton = this._closeButton = L.DomUtil.create("a", prefix + "-close-button", container), @@ -4866,8 +4894,8 @@ function addParam(paramName, values) { }, _updatePosition: function() { var pos = this._map.latLngToLayerPoint(this._latlng), is3d = L.Browser.any3d, offset = this.options.offset; - is3d && L.DomUtil.setPosition(this._container, pos), this._containerBottom = /s/.test(this.options.position) ? -this._container.offsetHeight + offset.y - (is3d ? 0 : pos.y) : -offset.y - (is3d ? 0 : pos.y), - this._containerLeft = /e/.test(this.options.position) ? offset.x + (is3d ? 0 : pos.x) : /w/.test(this.options.position) ? -Math.round(this._containerWidth) + offset.x + (is3d ? 0 : pos.x) : -Math.round(this._containerWidth / 2) + offset.x + (is3d ? 0 : pos.x), + is3d && L.DomUtil.setPosition(this._container, pos), /s/.test(this.options.position) ? this._containerBottom = -this._container.offsetHeight + offset.y - (is3d ? 0 : pos.y) : this._containerBottom = -offset.y - (is3d ? 0 : pos.y), + /e/.test(this.options.position) ? this._containerLeft = offset.x + (is3d ? 0 : pos.x) : /w/.test(this.options.position) ? this._containerLeft = -Math.round(this._containerWidth) + offset.x + (is3d ? 0 : pos.x) : this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (is3d ? 0 : pos.x), this._container.style.bottom = this._containerBottom + "px", this._container.style.left = this._containerLeft + "px"; } }), function() { @@ -5091,10 +5119,12 @@ function addParam(paramName, values) { clickable: !1, opacity: 0, fillOpacity: 0 + }, + strings: { + hideText: "Hide MiniMap", + showText: "Show MiniMap" } }, - hideText: "Hide MiniMap", - showText: "Show MiniMap", initialize: function(layer, options) { L.Util.setOptions(this, options), this.options.aimingRectOptions.clickable = !1, this.options.shadowRectOptions.clickable = !1, this._layer = layer; @@ -5108,10 +5138,10 @@ function addParam(paramName, values) { zoomControl: !1, zoomAnimation: this.options.zoomAnimation, autoToggleDisplay: this.options.autoToggleDisplay, - touchZoom: !this.options.zoomLevelFixed, - scrollWheelZoom: !this.options.zoomLevelFixed, - doubleClickZoom: !this.options.zoomLevelFixed, - boxZoom: !this.options.zoomLevelFixed, + touchZoom: !this._isZoomLevelFixed(), + scrollWheelZoom: !this._isZoomLevelFixed(), + doubleClickZoom: !this._isZoomLevelFixed(), + boxZoom: !this._isZoomLevelFixed(), crs: map.options.crs }), this._miniMap.addLayer(this._layer), this._mainMapMoving = !1, this._miniMapMoving = !1, this._userToggledDisplay = !1, this._minimized = !1, this.options.toggleDisplay && this._addToggleButton(), @@ -5135,7 +5165,7 @@ function addParam(paramName, values) { this._miniMap.removeLayer(this._layer), this._layer = layer, this._miniMap.addLayer(this._layer); }, _addToggleButton: function() { - this._toggleDisplayButton = this.options.toggleDisplay ? this._createButton("", this.hideText, "leaflet-control-minimap-toggle-display leaflet-control-minimap-toggle-display-" + this.options.position, this._container, this._toggleDisplayButtonClicked, this) : void 0, + this._toggleDisplayButton = this.options.toggleDisplay ? this._createButton("", this.options.strings.hideText, "leaflet-control-minimap-toggle-display leaflet-control-minimap-toggle-display-" + this.options.position, this._container, this._toggleDisplayButtonClicked, this) : void 0, this._toggleDisplayButton.style.width = this.options.collapsedWidth + "px", this._toggleDisplayButton.style.height = this.options.collapsedHeight + "px"; }, _createButton: function(html, title, className, container, fn, context) { @@ -5146,8 +5176,8 @@ function addParam(paramName, values) { link; }, _toggleDisplayButtonClicked: function() { - this._userToggledDisplay = !0, this._minimized ? (this._restore(), this._toggleDisplayButton.title = this.hideText) : (this._minimize(), - this._toggleDisplayButton.title = this.showText); + this._userToggledDisplay = !0, this._minimized ? (this._restore(), this._toggleDisplayButton.title = this.options.strings.hideText) : (this._minimize(), + this._toggleDisplayButton.title = this.options.strings.showText); }, _setDisplay: function(minimize) { minimize != this._minimized && (this._minimized ? this._restore() : this._minimize()); @@ -5190,8 +5220,12 @@ function addParam(paramName, values) { fillOpacity: 0 })); }, + _isZoomLevelFixed: function() { + var zoomLevelFixed = this.options.zoomLevelFixed; + return this._isDefined(zoomLevelFixed) && this._isInteger(zoomLevelFixed); + }, _decideZoom: function(fromMaintoMini) { - if (this.options.zoomLevelFixed) return fromMaintoMini ? this.options.zoomLevelFixed : this._mainMap.getZoom(); + if (this._isZoomLevelFixed()) return fromMaintoMini ? this.options.zoomLevelFixed : this._mainMap.getZoom(); if (fromMaintoMini) return this._mainMap.getZoom() + this.options.zoomLevelOffset; var toRet, currentDiff = this._miniMap.getZoom() - this._mainMap.getZoom(), proposedZoom = this._miniMap.getZoom() - this.options.zoomLevelOffset; return currentDiff > this.options.zoomLevelOffset && this._mainMap.getZoom() < this._miniMap.getMinZoom() - this.options.zoomLevelOffset ? this._miniMap.getZoom() > this._lastMiniMapZoom ? (toRet = this._mainMap.getZoom() + 1, @@ -5200,6 +5234,12 @@ function addParam(paramName, values) { }, _decideMinimized: function() { return this._userToggledDisplay ? this._minimized : this.options.autoToggleDisplay ? this._mainMap.getBounds().contains(this._miniMap.getBounds()) ? !0 : !1 : this._minimized; + }, + _isInteger: function(value) { + return "number" == typeof value; + }, + _isDefined: function(value) { + return "undefined" != typeof value; } }); return L.Map.mergeOptions({ @@ -5207,4 +5247,5 @@ function addParam(paramName, values) { }), L.Map.addInitHook(function() { this.options.miniMapControl && (this.miniMapControl = new MiniMap().addTo(this)); }), MiniMap; -}, window); \ No newline at end of file +}, window); +//# sourceMappingURL=map-vendor.min.js.map \ No newline at end of file diff --git a/mapusaurus/mapping/static/mapping/js/map.min.js b/mapusaurus/mapping/static/mapping/js/map.min.js index fc3f6e48..ab009ded 100644 --- a/mapusaurus/mapping/static/mapping/js/map.min.js +++ b/mapusaurus/mapping/static/mapping/js/map.min.js @@ -21,7 +21,9 @@ function init(data1) { function getTractsInBounds(bounds, geoType) { $("#bubbles_loading").show(); - var endpoint = "/api/tractCentroids/", params = {}; + var endpoint = "/api/tractCentroids/", params = { + year: selectedYear + }; return bounds && "object" == typeof bounds && (params.neLat = bounds.neLat, params.neLon = bounds.neLon, params.swLat = bounds.swLat, params.swLon = bounds.swLon), geoType && (params.geoType = geoType), urlParam("metro") ? params.metro = urlParam("metro") : console.log("No metro area provided"), @@ -38,8 +40,8 @@ function getTractsInBounds(bounds, geoType) { function getTractData(actionTakenVal, bounds, geoType) { $("#bubbles_loading").show(); - var endpoint = "/api/hmda", params = { - year: 2013, + var endpoint = "/api/hmda/", params = { + year: selectedYear, lh: !1, peers: !1, geo_type: geoType @@ -62,7 +64,9 @@ function getTractData(actionTakenVal, bounds, geoType) { } function getMsasInBounds() { - var endpoint = "/api/msas", params = {}, bounds = getBoundParams(); + var endpoint = "/api/msas/", params = { + year: selectedYear + }, bounds = getBoundParams(); return params.neLat = bounds.neLat, params.neLon = bounds.neLon, params.swLat = bounds.swLat, params.swLon = bounds.swLon, $.ajax({ url: endpoint, @@ -77,6 +81,7 @@ function getMsasInBounds() { function getBranchesInBounds(bounds) { var endpoint = "/api/branchLocations/", params = { + year: selectedYear, neLat: bounds.neLat, neLon: bounds.neLon, swLat: bounds.swLat, @@ -356,14 +361,14 @@ function updatePrintLink() { function getPeerLinks() { var peerList = $(".peer-link"); $.each(peerList, function(i, val) { - var instid = $(val).data("instid"), href = "/map/?metro=" + urlParam("metro") + "&lender=" + instid + window.location.hash.replace("&peers=true", ""); + var instid = $(val).data("instid"), href = "/map/?metro=" + urlParam("metro") + "&lender=" + instid + "&year=" + selectedYear + window.location.hash.replace("&peers=true", ""); $(val).attr("href", href); }); } function updateCensusLink() { var actions = getHashParams(), actionVar = getActionTaken(actions.action.values); - $("#downloadCensus").attr("href", "/census/race_summary_csv/?metro=" + urlParam("metro") + "&lender=" + urlParam("lender") + "&action_taken=" + actionVar); + $("#downloadCensus").attr("href", "/census/race_summary_csv/?metro=" + urlParam("metro") + "&lender=" + urlParam("lender") + "&action_taken=" + actionVar + "&year=" + selectedYear); } function getActionTaken(value) { @@ -459,11 +464,13 @@ $(document).ready(function() { var act = $("#action-taken-selector option:selected").val(); addParam("action", act), $("#actionTaken").text(getActionTaken(act)), initCalls(geoQueryType); }), generateTooltips(); - var keyHide = $(".hide-key"), keyShow = $(".show-key"), keyContents = $(".key-contents"); + var keyHide = $(".hide-key"), keyShow = $(".show-key"), keyContents = $(".key-contents"), minorityKeyContents = $(".minority-key"); keyHide.on("click", function(e) { - keyShow.removeClass("hidden"), keyContents.addClass("hidden"), keyHide.addClass("hidden"); + keyShow.removeClass("hidden"), keyContents.addClass("hidden"), minorityKeyContents.addClass("hidden"), + keyHide.addClass("hidden"); }), keyShow.on("click", function(e) { - keyHide.removeClass("hidden"), keyContents.removeClass("hidden"), keyShow.addClass("hidden"); + keyHide.removeClass("hidden"), keyContents.removeClass("hidden"), minorityKeyContents.removeClass("hidden"), + keyShow.addClass("hidden"); }), "undefined" != typeof loadParams.category ? (assignCat(loadParams.category.values), layerUpdate(cat), $(catId).addClass("active-layer")) : (assignCat("inv_non_hisp_white_only_perc"), layerUpdate(cat), $(catId).addClass("active-layer")); @@ -474,8 +481,6 @@ $(document).ready(function() { assignCat(selectedOption.attr("id")), selectedOption.addClass("active-layer"), layerUpdate(cat); }), map.on("moveend", function(e) { $("#branchSelect").prop("checked") && toggleBranches(!0); - }), map.on("moveend", function() { - moveEndAction[geoQueryType](); }), map.on("zoomend", function() { buildKeyCircles(); }), map.on("overlayadd", function() { @@ -520,7 +525,7 @@ moveEndAction.selected = function() { }); }); -var rawGeo, rawLar, rawMinority, rawData, isUIBlocked = !1, larVolume = [], pctMinority = [], dataStore = {}; +var rawGeo, rawLar, rawMinority, rawData, selectedYear = selectedYear || 2014, isUIBlocked = !1, larVolume = [], pctMinority = [], dataStore = {}; dataStore.tracts = {}; @@ -533,4 +538,5 @@ var baseStyle = { stroke: !1, weight: 0, fill: !1 -}; \ No newline at end of file +}; +//# sourceMappingURL=map.min.js.map \ No newline at end of file diff --git a/mapusaurus/mapping/static/mapping/js/table.min.js b/mapusaurus/mapping/static/mapping/js/table.min.js index b132946a..a34c76bb 100644 --- a/mapusaurus/mapping/static/mapping/js/table.min.js +++ b/mapusaurus/mapping/static/mapping/js/table.min.js @@ -88,7 +88,7 @@ function buildRow(data, rowType, showPeers) { return templateData = _.extend({ rowType: rowType, showPeers: showPeers - }, data), templateData.className = rowType.toLowerCase() + "-row ", templateData.className += data.isPeer ? " peer-row tablesorter-childRow" : " target-row", + }, data), templateData.className = rowType.toLowerCase() + "-row ", data.isPeer ? templateData.className += " peer-row tablesorter-childRow" : templateData.className += " target-row", rowTemplate(templateData); } @@ -131,4 +131,5 @@ $(document).ready(function() { $("#table-container").show(), currentChart = id, toggleDataContainer(!0)) : (currentChart = null, toggleDataContainer(!1), $(".chart-toggle").removeClass("active-layer")); }); -}); \ No newline at end of file +}); +//# sourceMappingURL=table.min.js.map \ No newline at end of file diff --git a/mapusaurus/mapping/templates/faq.html b/mapusaurus/mapping/templates/faq.html index 1808070c..f5fde33c 100644 --- a/mapusaurus/mapping/templates/faq.html +++ b/mapusaurus/mapping/templates/faq.html @@ -1,7 +1,7 @@ {% extends "basestyle/one_column_layout.html" %} {% load static %} -{% block title %}Fair Lending FAQ / Data Details{% endblock %} +{% block title %}Redlining Risk Assessment Mapper FAQ / Data Details{% endblock %} {% block head_styles %} diff --git a/mapusaurus/mapping/templates/map.html b/mapusaurus/mapping/templates/map.html index 1e768d08..025045c7 100644 --- a/mapusaurus/mapping/templates/map.html +++ b/mapusaurus/mapping/templates/map.html @@ -1,7 +1,7 @@ {% extends "basestyle/map_layout.html" %} {% load staticfiles %} -{% block title %}Fair Lending HMDA Visualization Toolkit - {{lender}}{% endblock %} +{% block title %}Redlining Risk Assessment Mapper - {{lender}}{% endblock %} {% block head_styles %} @@ -55,6 +55,12 @@