diff --git a/js/app.js b/js/app.js
index a3e8bf8b2..18005274c 100644
--- a/js/app.js
+++ b/js/app.js
@@ -2,7 +2,10 @@ define([
'jquery',
'knockout',
'bootstrap',
- 'facets'
+ 'facets',
+ 'css!styles/atlas.dataTables.css',
+ 'css!styles/jquery.dataTables.colVis.css',
+ 'css!styles/jquery.dataTables.min.css'
], function ($, ko) {
var appModel = function () {
var self = this;
@@ -38,7 +41,6 @@ define([
'Drug Exposure',
'Procedure',
'Death'
- //'Measurement'
]);
self.loadCohortDefinition = function (cohortDefinitionId) {
@@ -281,133 +283,6 @@ define([
});
}
- self.loadConcept = function (conceptId) {
- self.currentView('loading');
-
- var conceptPromise = $.ajax({
- url: self.vocabularyUrl() + 'concept/' + conceptId,
- method: 'GET',
- contentType: 'application/json',
- success: function (c, status, xhr) {
- var exists = false;
- for (i = 0; i < self.recentConcept().length; i++) {
- if (self.recentConcept()[i].CONCEPT_ID == c.CONCEPT_ID)
- exists = true;
- }
- if (!exists) {
- self.recentConcept.unshift(c);
- }
- if (self.recentConcept().length > 7) {
- self.recentConcept.pop();
- }
-
- self.currentConcept(c);
- self.currentView('concept');
- },
- error: function () {
- alert('An error occurred while attempting to load the concept from your currently configured provider. Please check the status of your selection from the configuration button in the top right corner.');
- }
- });
-
- // load related concepts once the concept is loaded
- self.loadingRelated(true);
- var relatedPromise = $.Deferred();
-
- $.when(conceptPromise).done(function () {
- metarchy = {
- parents: ko.observableArray(),
- children: ko.observableArray(),
- synonyms: ko.observableArray()
- };
-
- $.getJSON(self.vocabularyUrl() + 'concept/' + conceptId + '/related', function (related) {
- self.relatedConcepts(related);
-
- var feTemp = new FacetEngine({
- Facets: [
- {
- 'caption': 'Vocabulary',
- 'binding': function (o) {
- return o.VOCABULARY_ID;
- }
- },
- {
- 'caption': 'Standard Concept',
- 'binding': function (o) {
- return o.STANDARD_CONCEPT_CAPTION;
- }
- },
- {
- 'caption': 'Invalid Reason',
- 'binding': function (o) {
- return o.INVALID_REASON_CAPTION;
- }
- },
- {
- 'caption': 'Class',
- 'binding': function (o) {
- return o.CONCEPT_CLASS_ID;
- }
- },
- {
- 'caption': 'Domain',
- 'binding': function (o) {
- return o.DOMAIN_ID;
- }
- },
- {
- 'caption': 'Relationship',
- 'binding': function (o) {
- values = [];
- for (i = 0; i < o.RELATIONSHIPS.length; i++) {
- values.push(o.RELATIONSHIPS[i].RELATIONSHIP_NAME);
- }
- return values;
- }
- },
- {
- 'caption': 'Distance',
- 'binding': function (o) {
- values = [];
- for (i = 0; i < o.RELATIONSHIPS.length; i++) {
- if (values.indexOf(o.RELATIONSHIPS[i].RELATIONSHIP_DISTANCE) == -1) {
- values.push(o.RELATIONSHIPS[i].RELATIONSHIP_DISTANCE);
- }
- }
- return values;
- }
- }
- ]
- });
-
- for (c = 0; c < related.length; c++) {
- feTemp.Process(related[c]);
- metagorize(metarchy, related[c]);
- }
-
- self.metarchy = metarchy;
-
- feTemp.MemberSortFunction = function () {
- return this.ActiveCount;
- };
- feTemp.sortFacetMembers();
-
- self.feRelated(feTemp);
- self.relatedConcepts(self.feRelated().GetCurrentObjects());
- relatedPromise.resolve();
- });
- });
-
- $.when(relatedPromise).done(function () {
- self.loadingRelated(false);
- });
-
- // triggers once our async loading of the concept and related concepts is complete
- $.when(conceptPromise).done(function () {
- self.currentView('concept');
- });
- }
-
self.reportCohortDefinitionId = ko.observable();
self.reportReportName = ko.observable();
self.reportSourceKey = ko.observable();
@@ -452,6 +327,7 @@ define([
self.evidenceUrl = ko.observable();
self.resultsUrl = ko.observable();
self.currentConcept = ko.observable();
+ self.currentConceptId = ko.observable();
self.currentConceptMode = ko.observable('details');
self.currentConceptMode.subscribe(function (newMode) {
switch (newMode) {
diff --git a/js/components/concept.html b/js/components/concept-manager.html
similarity index 100%
rename from js/components/concept.html
rename to js/components/concept-manager.html
diff --git a/js/components/concept-manager.js b/js/components/concept-manager.js
new file mode 100644
index 000000000..fdecac930
--- /dev/null
+++ b/js/components/concept-manager.js
@@ -0,0 +1,338 @@
+define(['knockout', 'text!./concept-manager.html'], function (ko, view) {
+ function conceptManager(params) {
+ var self = this;
+ self.model = params.model;
+ self.currentConceptId = params.currentConceptId;
+
+ self.currentConceptId.subscribe(function (conceptId) {
+ self.loadConcept(conceptId);
+ });
+
+ self.loadConcept = function (conceptId) {
+ self.model.currentView('loading');
+
+ var conceptPromise = $.ajax({
+ url: self.model.vocabularyUrl() + 'concept/' + conceptId,
+ method: 'GET',
+ contentType: 'application/json',
+ success: function (c, status, xhr) {
+ var exists = false;
+ for (i = 0; i < self.model.recentConcept().length; i++) {
+ if (self.model.recentConcept()[i].CONCEPT_ID == c.CONCEPT_ID)
+ exists = true;
+ }
+ if (!exists) {
+ self.model.recentConcept.unshift(c);
+ }
+ if (self.model.recentConcept().length > 7) {
+ self.model.recentConcept.pop();
+ }
+
+ self.model.currentConcept(c);
+ self.model.currentView('concept');
+ },
+ error: function () {
+ alert('An error occurred while attempting to load the concept from your currently configured provider. Please check the status of your selection from the configuration button in the top right corner.');
+ }
+ });
+
+ // load related concepts once the concept is loaded
+ self.model.loadingRelated(true);
+ var relatedPromise = $.Deferred();
+
+ $.when(conceptPromise).done(function () {
+ metarchy = {
+ parents: ko.observableArray(),
+ children: ko.observableArray(),
+ synonyms: ko.observableArray()
+ };
+
+ $.getJSON(self.model.vocabularyUrl() + 'concept/' + conceptId + '/related', function (related) {
+ self.model.relatedConcepts(related);
+
+ var feTemp = new FacetEngine({
+ Facets: [
+ {
+ 'caption': 'Vocabulary',
+ 'binding': function (o) {
+ return o.VOCABULARY_ID;
+ }
+ },
+ {
+ 'caption': 'Standard Concept',
+ 'binding': function (o) {
+ return o.STANDARD_CONCEPT_CAPTION;
+ }
+ },
+ {
+ 'caption': 'Invalid Reason',
+ 'binding': function (o) {
+ return o.INVALID_REASON_CAPTION;
+ }
+ },
+ {
+ 'caption': 'Class',
+ 'binding': function (o) {
+ return o.CONCEPT_CLASS_ID;
+ }
+ },
+ {
+ 'caption': 'Domain',
+ 'binding': function (o) {
+ return o.DOMAIN_ID;
+ }
+ },
+ {
+ 'caption': 'Relationship',
+ 'binding': function (o) {
+ values = [];
+ for (i = 0; i < o.RELATIONSHIPS.length; i++) {
+ values.push(o.RELATIONSHIPS[i].RELATIONSHIP_NAME);
+ }
+ return values;
+ }
+ },
+ {
+ 'caption': 'Distance',
+ 'binding': function (o) {
+ values = [];
+ for (i = 0; i < o.RELATIONSHIPS.length; i++) {
+ if (values.indexOf(o.RELATIONSHIPS[i].RELATIONSHIP_DISTANCE) == -1) {
+ values.push(o.RELATIONSHIPS[i].RELATIONSHIP_DISTANCE);
+ }
+ }
+ return values;
+ }
+ }
+ ]
+ });
+
+ for (c = 0; c < related.length; c++) {
+ feTemp.Process(related[c]);
+ self.metagorize(metarchy, related[c]);
+ }
+
+ self.metarchy = metarchy;
+
+ feTemp.MemberSortFunction = function () {
+ return this.ActiveCount;
+ };
+ feTemp.sortFacetMembers();
+
+ self.model.feRelated(feTemp);
+ self.model.relatedConcepts(self.model.feRelated().GetCurrentObjects());
+ relatedPromise.resolve();
+ });
+ });
+
+ $.when(relatedPromise).done(function () {
+ self.model.loadingRelated(false);
+ });
+
+ // triggers once our async loading of the concept and related concepts is complete
+ $.when(conceptPromise).done(function () {
+ self.model.currentView('concept');
+ });
+ }
+
+ self.metagorize = function (metarchy, related) {
+ var concept = self.model.currentConcept();
+ var key = concept.VOCABULARY_ID + '.' + concept.CONCEPT_CLASS_ID;
+ if (self.metatrix[key] != undefined) {
+ var meta = self.metatrix[key];
+ if (self.hasRelationship(related, meta.childRelationships)) {
+ metarchy.children.push(related);
+ }
+ if (self.hasRelationship(related, meta.parentRelationships)) {
+ metarchy.parents.push(related);
+ }
+ }
+ }
+
+ self.metatrix = {
+ 'RxNorm.Ingredient': {
+ childRelationships: [{
+ name: 'Ingredient of (RxNorm)',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Has inferred drug class (OMOP)',
+ range: [0, 999]
+ }]
+ },
+ 'RxNorm.Brand Name': {
+ childRelationships: [{
+ name: 'Ingredient of (RxNorm)',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Tradename of (RxNorm)',
+ range: [0, 999]
+ }]
+ },
+ 'RxNorm.Branded Drug': {
+ childRelationships: [{
+ name: 'Consists of (RxNorm)',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Has ingredient (RxNorm)',
+ range: [0, 999]
+ }, {
+ name: 'RxNorm to ATC (RxNorm)',
+ range: [0, 999]
+ }, {
+ name: 'RxNorm to ETC (FDB)',
+ range: [0, 999]
+ }]
+ },
+ 'RxNorm.Clinical Drug Comp': {
+ childRelationships: [],
+ parentRelationships: [{
+ name: 'Has precise ingredient (RxNorm)',
+ range: [0, 999]
+ }, {
+ name: 'Has ingredient (RxNorm)',
+ range: [0, 999]
+ }]
+ },
+ 'CPT4.CPT4': {
+ childRelationships: [],
+ parentRelationships: [{
+ name: 'Is a',
+ range: [0, 999]
+ }],
+ synonymRelationships: []
+ },
+ 'CPT4.CPT4 Hierarchy': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Is a',
+ range: [0, 999]
+ }]
+ },
+ 'ETC.ETC': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }, {
+ name: 'Inferred drug class of (OMOP)',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Is a',
+ range: [0, 999]
+ }, {
+ name: 'Has ancestor of',
+ range: [0, 999]
+ }]
+ },
+ 'MedDRA.LLT': {
+ childRelationships: [],
+ parentRelationships: [{
+ name: 'Has ancestor of',
+ range: [0, 1]
+ }, {
+ name: 'Is a',
+ range: [0, 1]
+ }]
+ },
+ 'MedDRA.PT': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Has ancestor of',
+ range: [0, 999]
+ }]
+ },
+ 'MedDRA.HLT': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Has ancestor of',
+ range: [0, 999]
+ }]
+ },
+ 'MedDRA.SOC': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: []
+ },
+ 'MedDRA.HLGT': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Is a',
+ range: [0, 999]
+ }]
+ },
+ 'SNOMED.Clinical Finding': {
+ childRelationships: [{
+ name: 'Subsumes',
+ range: [0, 999]
+ }],
+ parentRelationships: [{
+ name: 'Is a',
+ range: [0, 999]
+ }, {
+ name: 'Has ancestor of',
+ range: [0, 1]
+ }]
+ }
+ };
+
+ self.hasRelationship = function (concept, relationships) {
+ for (var r = 0; r < concept.RELATIONSHIPS.length; r++) {
+ for (var i = 0; i < relationships.length; i++) {
+ if (concept.RELATIONSHIPS[r].RELATIONSHIP_NAME == relationships[i].name) {
+ if (concept.RELATIONSHIPS[r].RELATIONSHIP_DISTANCE >= relationships[i].range[0] && concept.RELATIONSHIPS[r].RELATIONSHIP_DISTANCE <= relationships[i].range[1]) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ self.meetsRequirements = function (concept, requirements) {
+ var passCount = 0;
+
+ for (var r = 0; r < requirements.length; r++) {
+ for (var f = 0; f < this.fe.Facets.length; f++) {
+ if (this.fe.Facets[f].caption == requirements[r].c) {
+ for (var m = 0; m < this.fe.Facets[f].Members.length; m++) {
+ if (this.fe.Facets[f].Members[m].Name == requirements[r].n) {
+ passCount++;
+ }
+ }
+ }
+ }
+ }
+
+ if (filters.length == requirements.length) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ var component = {
+ viewModel: conceptManager,
+ template: view
+ };
+
+ ko.components.register('concept-manager', component);
+ return component;
+});
diff --git a/js/components/concept.js b/js/components/concept.js
deleted file mode 100644
index c87695eb4..000000000
--- a/js/components/concept.js
+++ /dev/null
@@ -1,14 +0,0 @@
-define(['knockout', 'text!./concept.html'], function (ko, view) {
- function atlasConcept(params) {
- var self = this;
- self.model = params.model;
- }
-
- var component = {
- viewModel: atlasConcept,
- template: view
- };
-
- ko.components.register('atlas-concept', component);
- return component;
-});
diff --git a/js/components/configuration.js b/js/components/configuration.js
index 697bffdce..031f6ab82 100644
--- a/js/components/configuration.js
+++ b/js/components/configuration.js
@@ -1,4 +1,4 @@
-define(['knockout', 'text!./concept.html'], function (ko, view) {
+define(['knockout', 'text!./configuration.html'], function (ko, view) {
function configuration(params) {
var self = this;
self.services = params.services();
diff --git a/js/components/search.html b/js/components/search.html
index 9ce81ed92..eaadc9fa1 100644
--- a/js/components/search.html
+++ b/js/components/search.html
@@ -42,7 +42,7 @@
diff --git a/js/components/search.js b/js/components/search.js
index e688de0dd..9960d946e 100644
--- a/js/components/search.js
+++ b/js/components/search.js
@@ -1,4 +1,4 @@
-define(['knockout', 'text!./search.html'], function (ko, view) {
+define(['knockout', 'text!./search.html', 'knockout.dataTables.binding'], function (ko, view) {
function atlasSearch(params) {
var self = this;
self.model = params.model;
@@ -13,6 +13,40 @@ define(['knockout', 'text!./search.html'], function (ko, view) {
}
}
};
+
+ self.contextSensitiveLinkColor = function (row, data) {
+ var switchContext;
+
+ if (data.STANDARD_CONCEPT == undefined) {
+ switchContext = data.concept.STANDARD_CONCEPT;
+ } else {
+ switchContext = data.STANDARD_CONCEPT;
+ }
+
+ switch (switchContext) {
+ case 'N':
+ $('a', row).css('color', '#800');
+ break;
+ case 'C':
+ $('a', row).css('color', '#080');
+ break;
+ }
+ }
+
+ self.renderConceptSelector = function (s,p,d) {
+ var css = '';
+ var icon = 'fa-shopping-cart';
+
+ if (self.model.selectedConceptsIndex[d.CONCEPT_ID] == 1) {
+ css = ' selected';
+ }
+ return '
';
+ }
+
+ self.renderLink = function (s, p, d) {
+ var valid = d.INVALID_REASON_CAPTION == 'Invalid' ? 'invalid' : '';
+ return '
' + d.CONCEPT_NAME + '';
+ }
}
var component = {
diff --git a/images/sort_asc.png b/js/images/sort_asc.png
similarity index 100%
rename from images/sort_asc.png
rename to js/images/sort_asc.png
diff --git a/images/sort_asc_disabled.png b/js/images/sort_asc_disabled.png
similarity index 100%
rename from images/sort_asc_disabled.png
rename to js/images/sort_asc_disabled.png
diff --git a/images/sort_both.png b/js/images/sort_both.png
similarity index 100%
rename from images/sort_both.png
rename to js/images/sort_both.png
diff --git a/images/sort_desc.png b/js/images/sort_desc.png
similarity index 100%
rename from images/sort_desc.png
rename to js/images/sort_desc.png
diff --git a/images/sort_desc_disabled.png b/js/images/sort_desc_disabled.png
similarity index 100%
rename from images/sort_desc_disabled.png
rename to js/images/sort_desc_disabled.png
diff --git a/js/knockout.dataTables.binding.js b/js/knockout.dataTables.binding.js
index 3262754d6..493a78fea 100644
--- a/js/knockout.dataTables.binding.js
+++ b/js/knockout.dataTables.binding.js
@@ -1,38 +1,90 @@
- (function ($) {
- ko.bindingHandlers.dataTable = {
- init: function (element, valueAccessor) {
- var binding = ko.utils.unwrapObservable(valueAccessor());
-
- // If the binding is an object with an options field,
- // initialise the dataTable with those options.
- if (binding.options) {
- // allow row level binding context
- binding.options.createdRow = function (row, data, index) {
- ko.applyBindings(data, row)
- };
-
- $(element).dataTable(binding.options);
- }
- return {
- controlsDescendantBindings: true
- };
- },
- update: function (element, valueAccessor) {
- var binding = ko.utils.unwrapObservable(valueAccessor());
-
- // If the binding isn't an object, turn it into one.
- if (!binding.data) {
- binding = {
- data: valueAccessor()
- }
- }
+define(['jquery', 'knockout', 'datatables'], function ($, ko) {
+
+ function renderSelected(s, p, d) {
+ return '
';
+ }
+
+ function _getSelectedData(element)
+ {
+ var selectedRows = $(element).DataTable().rows('tr:has(td.select:has(span.selected))', {
+ 'search': 'applied'
+ }).data();
+
+ var selectedData = [];
+ $.each(selectedRows, function(index, value) {
+ selectedData.push(value);
+ });
+
+ return selectedData;
+ }
+
+ ko.bindingHandlers.dataTable = {
+
+ init: function (element, valueAccessor) {
+
+
+ var binding = ko.utils.unwrapObservable(valueAccessor());
- // Clear table
- $(element).dataTable().fnClearTable();
+ // If the binding is an object with an options field,
+ // initialise the dataTable with those options.
+ if (binding.options) {
+ // allow row level binding context
+ binding.options.createdRow = function (row, data, index) {
+ ko.applyBindings(data, row)
+ };
+ // test for 'select' column (must be first column in column definition
+ if (binding.options.columns && binding.options.columns[0] == 'select') {
+ binding.options.columns[0] = { width:'20px', orderable: false, class: 'select', render: renderSelected }
+ $(element).on("click","td > span.glyphicon-ok-sign", function () {
+ $(this).toggleClass('selected');
+ console.log(this);
+ });
+ }
+
+ $(element).DataTable(binding.options);
- // Rebuild table from data source specified in binding
- if (binding.data.length > 0)
- $(element).dataTable().fnAddData(binding.data);
+ if (binding.api != null)
+ {
+ // expose datatable API to context's api binding.
+ binding.api({
+ getSelectedData: function() { return _getSelectedData(element);}
+ });
}
+ }
+
+ return {
+ controlsDescendantBindings: true
};
- })(jQuery);
+ },
+ update: function (element, valueAccessor) {
+ var binding = ko.utils.unwrapObservable(valueAccessor());
+ var table = $(element).DataTable();
+
+ // assign data to either the binding's data or the actual binding.
+ var data = ko.utils.unwrapObservable(binding.data || binding);
+
+ // clear events that .on() attached to previously. Prior to this update, the binding may have specified an 'onRowClick' option, but no longer does.
+ $(element).off("click","tr");
+
+ if (binding.onRowClick != null) // attach a onRowclick handler if the options binding specifies it.
+ {
+ $(element).on("click","tr", function()
+ {
+ if (this._DT_RowIndex != null)
+ {
+ binding.onRowClick(data[this._DT_RowIndex]);
+ }
+ });
+ }
+
+ // Clear table
+ table.clear();
+
+ // Rebuild table from data source specified in binding
+ if (data.length > 0)
+ table.rows.add(data);
+
+ table.draw();
+ }
+ };
+});
diff --git a/js/main.js b/js/main.js
index 2049b0ea6..c17a5abbb 100644
--- a/js/main.js
+++ b/js/main.js
@@ -21,14 +21,15 @@ requirejs.config({
"jquery": "http://code.jquery.com/jquery-1.11.2.min",
"bootstrap": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min",
"knockout": "knockout.min",
+ "datatables" : "jquery.dataTables.min",
"director": "director.min",
"search" : "components/search",
- "concept" : "components/concept",
- "configuration" : "components/configuration"
+ "configuration" : "components/configuration",
+ "concept-manager" : "components/concept-manager"
}
});
-requirejs(['knockout', 'app', 'director', 'search', 'concept', "configuration"], function (ko, app) {
+requirejs(['knockout', 'app', 'director', 'search', "configuration", "concept-manager"], function (ko, app) {
var pageModel = new app();
var routerOptions = {
@@ -38,7 +39,9 @@ requirejs(['knockout', 'app', 'director', 'search', 'concept', "configuration"],
}
var routes = {
- '/concept/:conceptId:': pageModel.loadConcept,
+ '/concept/:conceptId:': function(conceptId) {
+ pageModel.currentConceptId(conceptId);
+ },
'/cohortdefinitions': function () {
pageModel.currentView('cohortdefinitions');
},
diff --git a/js/styles/atlas.css b/js/styles/atlas.css
index 9de0f71ab..21c3f8855 100644
--- a/js/styles/atlas.css
+++ b/js/styles/atlas.css
@@ -21,19 +21,11 @@ body {
.heading {
font-size: 14px;
-
- /* font-weight: bold; */
- margin-top: 5px;
- margin-bottom: 0px;
- /* clear:both; */
- /* height:40px; */
- /* background-color: #f00; */
-
- padding: 3px 0px 0px 0px;
+ margin-bottom: 10px;
}
#wrapperConfigure {
- padding: 10px;
+ padding: 5px;
}
#textImportConceptSet {
@@ -120,6 +112,7 @@ body {
margin-top: 10px;
margin-bottom: 10px;
/* margin-left: 10px; */
+
padding-left: 10px;
}
@@ -177,7 +170,7 @@ pre span.key {
position: relative;
height: 46px;
padding: 0px 10px 0px 10px;
- line-height: 47px;
+ line-height: 49px;
font-size: 18px;
background-color: #fff;
color: #1F4159;
@@ -215,8 +208,8 @@ div#wrapperMainWindowContainer {}
height: 46px;
color: #FFFFFF;
line-height: 47px;
- padding: 0px 10px 0px 10px;
- font-size: 18px;
+ padding: 0px 10px 0px 6px;
+ font-size: 16px;
border-bottom: solid 1px #ccc;
}
@@ -632,7 +625,7 @@ ul.ColVis_collection li {
margin-left: 50px;
padding-bottom: 10px;
padding-top: 10px;
- font-size:14px;
+ font-size: 14px;
background-color: #eee;
padding-left: 10px;
border-top: solid 1px #222;
@@ -725,12 +718,12 @@ ul.ColVis_collection li {
}
input.btn.btn-default {
- font-size: 12px;
- float: right;
- background-image: none;
- background-color: #24465D;
- color: #FFF;
- text-shadow: none;
+ font-size: 12px;
+ float: right;
+ background-image: none;
+ background-color: #24465D;
+ color: #FFF;
+ text-shadow: none;
}
.reportHeading {
@@ -744,6 +737,7 @@ input.btn.btn-default {
.reportSectionHeading {
font-size: 13px;
/* font-weight: bold; */
+
border-bottom: solid 1px #ccc;
margin-top: 10px;
margin-bottom: 0px;
@@ -752,98 +746,381 @@ input.btn.btn-default {
.evidenceDescription {
color: #222;
- font-size:11px;
+ font-size: 11px;
padding: 10px;
}
.evidenceVisualization {
- padding:10px;
- text-align:center;
- background-color:#fff
+ padding: 10px;
+ text-align: center;
+ background-color: #fff
}
.pad-10 {
- padding: 10px;
+ padding: 10px;
}
.report table {
- width: 100%;
- background-color: #fff;
- margin-bottom: 15px;
+ width: 100%;
+ background-color: #fff;
+ margin-bottom: 15px;
}
.report svg {
- margin-left: auto;
- margin-right: auto;
+ margin-left: auto;
+ margin-right: auto;
}
-g.trellisLegend {
-}
+g.trellisLegend {}
ul.nav.nav-tabs {
- /* margin-top: 5px; */
- /* margin-bottom: 10px; */
- background-color: #fff;
- padding: 10px 10px 0px 10px;
+ /* margin-top: 5px; */
+ /* margin-bottom: 10px; */
+
+ background-color: #fff;
+ padding: 10px 10px 0px 10px;
}
div.loader {
- margin-top:20px;
+ margin-top: 20px;
}
g rect {
- cursor: pointer;
+ cursor: pointer;
}
-g rect:hover {
-}
+g rect:hover {}
.tab-content {
- padding: 5px 5px 15px 5px;
- background-color: #fff;
+ padding: 5px 5px 15px 5px;
+ background-color: #fff;
}
table#analysisStatus {
- width: 100%;
+ width: 100%;
}
.reportControls {
background-color: #666;
- padding-bottom:34px;
- margin-left:1px;
+ padding-bottom: 34px;
+ margin-left: 1px;
border-bottom: solid #222 1px;
}
input.btn.btn-default:disabled {
- background-color: #ccc;
- color: #fff;
+ background-color: #ccc;
+ color: #fff;
}
.report {
- background-color: #eee;
- margin: 10px 10px 10px 10px;
- border: solid 1px #ccc;
+ background-color: #eee;
+ margin: 10px 10px 10px 10px;
+ border: solid 1px #ccc;
}
.reportHeading .fa-area-chart {
- font-size: 2em;
- margin-right: 5px;
+ font-size: 2em;
+ margin-right: 5px;
}
i.fa.fa-refresh.fa-spin {
- padding-right: 0px;
- font-size:1.5em;
-}
-
-rect.box {
+ padding-right: 0px;
}
+rect.box {}
div#trellisLinePlot {
- display: flex;
- flex-shrink: 1;
+ display: flex;
+ flex-shrink: 1;
}
.dataTable tr td {
- cursor:pointer;
+ cursor: pointer;
+}
+
+.img-thumbnail {
+ border-radius: 0
+}
+
+code {
+ border-radius: 0
+}
+
+pre {
+ border-radius: 0
+}
+
+.form-control {
+ border-radius: 0
+}
+
+.form-control:focus {
+ /* border-color:#66afe9; */
+
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.input-sm {
+ border-radius: 0
+}
+
+.input-lg {
+ border-radius: 0
+}
+
+.btn {
+ border-radius: 0
+}
+
+.btn-lg {
+ border-radius: 0
+}
+
+.btn-sm,
+.btn-xs {
+ border-radius: 0
+}
+
+.dropdown-menu {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-group-xs>.btn {
+ border-radius: 0
+}
+
+.btn-group-sm>.btn {
+ border-radius: 0
+}
+
+.btn-group-lg>.btn {
+ border-radius: 0
+}
+
+.btn-group-vertical>.btn:first-child:not(:last-child) {
+ border-top-right-radius: 0
+}
+
+.btn-group-vertical>.btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 0
+}
+
+.input-group-lg>.form-control,
+.input-group-lg>.input-group-addon,
+.input-group-lg>.input-group-btn>.btn {
+ border-radius: 0
+}
+
+.input-group-sm>.form-control,
+.input-group-sm>.input-group-addon,
+.input-group-lg>.input-group-btn>.btn {
+ border-radius: 0
+}
+
+.input-group-addon {
+ border-radius: 0
+}
+
+.input-group-addon.input-sm {
+ border-radius: 0
+}
+
+.input-group-addon.input-lg {
+ border-radius: 0
+}
+
+.nav-tabs>li>a {
+ border-radius: 0
+}
+
+.nav-pills>li>a {
+ border-radius: 0
+}
+
+@media(min-width:768px) {
+ .navbar {
+ border-radius: 0
+ }
+}
+
+.navbar-toggle {
+ border-radius: 0
+}
+
+.navbar-toggle .icon-bar {
+ border-radius: 0
+}
+
+.breadcrumb {
+ border-radius: 0
+}
+
+.pagination {
+ border-radius: 0
+}
+
+.pagination>li:first-child>a,
+.pagination>li:first-child>span {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.pagination>li:last-child>a,
+.pagination>li:last-child>span {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.pagination-lg>li:first-child>a,
+.pagination-lg>li:first-child>span {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.pagination-lg>li:last-child>a,
+.pagination-lg>li:last-child>span {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.pagination-sm>li:first-child>a,
+.pagination-sm>li:first-child>span {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.pagination-sm>li:last-child>a,
+.pagination-sm>li:last-child>span {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.pager li>a,
+.pager li>span {
+ border-radius: 0
+}
+
+.label {
+ border-radius: 0
+}
+
+.badge {
+ border-radius: 0;
+ background-color: #F19119;
+}
+
+.container .jumbotron {
+ border-radius: 0
+}
+
+.thumbnail {
+ border-radius: 0
+}
+
+.alert {
+ border-radius: 0
+}
+
+.progress {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.progress-bar {
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.list-group-item:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.list-group-item:last-child {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.panel {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.panel-heading {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.panel-footer {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.panel-group .panel {
+ border-radius: 0
+}
+
+.well {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.well-lg {
+ border-radius: 0
+}
+
+.well-sm {
+ border-radius: 0
+}
+
+.close {
+ text-shadow: none
+}
+
+.modal-content {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+@media screen and (min-width: 768px) {
+ .modal-content {
+ -webkit-box-shadow: none;
+ box-shadow: none
+ }
+}
+
+.tooltip-inner {
+ border-radius: 0
+}
+
+.popover {
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.popover-title {
+ border-radius: 0
+}
+
+.carousel-control {
+ text-shadow: none
+}
+
+.carousel-indicators li {
+ border-radius: 0
+}
+
+.carousel-caption {
+ text-shadow: none
}
diff --git a/js/styles/atlas.dataTables.css b/js/styles/atlas.dataTables.css
new file mode 100644
index 000000000..6e04f7c8f
--- /dev/null
+++ b/js/styles/atlas.dataTables.css
@@ -0,0 +1,61 @@
+/* datatable overrides */
+
+table.dataTable.hover tbody tr td {
+ border-bottom: solid 1px #eee;
+}
+table.dataTable td {
+ cursor: default;
+}
+table.dataTable.stripe tbody tr.odd,
+table.dataTable.display tbody tr.odd {
+ background-color: #f0f0f0;
+}
+table.dataTable.stripe tbody tr.odd.selected,
+table.dataTable.display tbody tr.odd.selected {
+ background-color: #f0f0f0;
+}
+table.dataTable.stripe tbody tr.even.selected,
+table.dataTable.display tbody tr.even.selected {
+ background-color: #ffffff;
+}
+table.dataTable.hover tbody tr:hover.selected,
+table.dataTable.hover tbody tr.odd:hover.selected {
+ background-color: #f0f0f0;
+}
+table.dataTable.hover tbody tr:hover.selected,
+table.dataTable.hover tbody tr.even:hover.selected {
+ background-color: #ffffff;
+}
+table.dataTable.hover tbody tr:hover td,
+table.dataTable.hover tbody tr.odd:hover {
+ border-bottom: solid 1px #f0f0f0;
+}
+table.dataTable.hover tbody tr:hover td,
+table.dataTable.hover tbody tr.even:hover {
+ border-bottom: solid 1px #ffffff;
+}
+/* override default hover colors */
+
+table.dataTable.hover tbody tr.even:hover,
+table.dataTable.display tbody tr.even:hover {
+ background-color: #fff;
+}
+table.dataTable.hover tbody tr.odd:hover,
+table.dataTable.display tbody tr.odd:hover {
+ background-color: #f0f0f0;
+}
+/* colVis formatting */
+
+ul.ColVis_collection {
+ width: 200px;
+ right: 0px;
+}
+button.ColVis_Button {
+ margin-left: 10px;
+ height: 25px;
+ -webkit-box-shadow: 1px 1px 1px #ccc;
+ -moz-box-shadow: 1px 1px 1px #ccc;
+ -ms-box-shadow: 1px 1px 1px #ccc;
+ -o-box-shadow: 1px 1px 1px #ccc;
+ box-shadow: 1px 1px 1px #ccc;
+}
diff --git a/js/styles/jquery.dataTables.colVis.css b/js/styles/jquery.dataTables.colVis.css
new file mode 100644
index 000000000..95d1d3097
--- /dev/null
+++ b/js/styles/jquery.dataTables.colVis.css
@@ -0,0 +1,183 @@
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * ColVis styles
+ */
+div.ColVis {
+ float: right;
+ margin-bottom: 1em;
+}
+
+button.ColVis_Button,
+ul.ColVis_collection li {
+ position: relative;
+ float: left;
+ margin-right: 3px;
+ padding: 5px 8px;
+ border: 1px solid #999;
+ cursor: pointer;
+ *cursor: hand;
+ font-size: 0.88em;
+ color: black !important;
+ white-space: nowrap;
+
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+
+ -webkit-box-shadow: 1px 1px 3px #ccc;
+ -moz-box-shadow: 1px 1px 3px #ccc;
+ -ms-box-shadow: 1px 1px 3px #ccc;
+ -o-box-shadow: 1px 1px 3px #ccc;
+ box-shadow: 1px 1px 3px #ccc;
+
+ /* Generated by http://www.colorzilla.com/gradient-editor/ */
+ background: #ffffff; /* Old browsers */
+ /* background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); */ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */
+ background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */
+ background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */
+ background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */
+}
+
+.ColVis_Button:hover,
+ul.ColVis_collection li:hover {
+ border: 1px solid #666;
+ text-decoration: none !important;
+
+ -webkit-box-shadow: 1px 1px 3px #999;
+ -moz-box-shadow: 1px 1px 3px #999;
+ -ms-box-shadow: 1px 1px 3px #999;
+ -o-box-shadow: 1px 1px 3px #999;
+ box-shadow: 1px 1px 3px #999;
+
+ background: #f3f3f3; /* Old browsers */
+ background: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */
+ background: -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */
+ background: -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */
+ background: linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */
+}
+
+button.ColVis_Button {
+ height: 30px;
+ padding: 3px 8px;
+}
+
+button.ColVis_Button::-moz-focus-inner {
+ border: none !important;
+ padding: 0;
+}
+
+button.ColVis_Button:active {
+ outline: none;
+}
+
+
+div.ColVis_collectionBackground {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: black;
+ z-index: 1100;
+}
+
+ul.ColVis_collection {
+ width: 150px;
+ padding: 8px 8px 4px 8px;
+ margin: 3;
+ border: 1px solid #ccc;
+ border: 1px solid rgba( 0, 0, 0, 0.4 );
+ background-color: #f3f3f3;
+ /* background-color: rgba( 255, 255, 255, 0.3 ); */
+ overflow: hidden;
+ z-index: 2002;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+
+ /* border-radius: 5px; */
+
+ -webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+ box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+}
+
+ul.ColVis_collection li {
+ position: relative;
+ height: auto;
+ left: 0;
+ right: 0;
+ padding: 0.5em;
+
+ display: block;
+ float: none;
+ margin-bottom: 4px;
+
+ -webkit-box-shadow: 1px 1px 3px #999;
+ -moz-box-shadow: 1px 1px 3px #999;
+ -ms-box-shadow: 1px 1px 3px #999;
+ -o-box-shadow: 1px 1px 3px #999;
+ box-shadow: 1px 1px 3px #999;
+}
+
+ul.ColVis_collection li {
+ text-align: left;
+}
+
+ul.ColVis_collection li.ColVis_Button:hover {
+ border: 1px solid #999;
+ background-color: #f0f0f0;
+}
+
+ul.ColVis_collection li span {
+ display: inline-block;
+ padding-left: 0.5em;
+ cursor: pointer;
+}
+
+
+ul.ColVis_collection li.ColVis_Special {
+ border-color: #555;
+ background: rgb(237,237,237); /* Old browsers */
+ background: -webkit-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, rgba(237,237,237,1) 0%, rgba(214,214,214,1) 77%, rgba(232,232,232,1) 100%); /* FF3.6+ */
+ background: -ms-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* IE10+ */
+ background: -o-linear-gradient(top, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* Opera 11.10+ */
+ background: linear-gradient(to bottom, rgba(237,237,237,1) 0%,rgba(214,214,214,1) 77%,rgba(232,232,232,1) 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ededed', endColorstr='#e8e8e8',GradientType=0 ); /* IE6-9 */
+}
+
+ul.ColVis_collection li.ColVis_Special:hover {
+ background: #e2e2e2; /* Old browsers */
+ background: -webkit-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* FF3.6+ */
+ background: -ms-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* IE10+ */
+ background: -o-linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* Opera 11.10+ */
+ background: linear-gradient(top, #d0d0d0 0%,#d5d5d5 89%,#e2e2e2 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#e2e2e2',GradientType=0 ); /* IE6-9 */
+}
+
+
+span.ColVis_radio {
+ display: inline-block;
+ width: 20px;
+}
+
+div.ColVis_catcher {
+ position: absolute;
+ z-index: 1101;
+}
+
+.disabled {
+ color: #999;
+}
diff --git a/js/styles/jquery.dataTables.min.css b/js/styles/jquery.dataTables.min.css
new file mode 100644
index 000000000..9ccf3ef6a
--- /dev/null
+++ b/js/styles/jquery.dataTables.min.css
@@ -0,0 +1 @@
+table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting{cursor:pointer;*cursor:hand}table.dataTable thead .sorting{background:url("../images/sort_both.png") no-repeat center right}table.dataTable thead .sorting_asc{background:url("../images/sort_asc.png") no-repeat center right}table.dataTable thead .sorting_desc{background:url("../images/sort_desc.png") no-repeat center right}table.dataTable thead .sorting_asc_disabled{background:url("../images/sort_asc_disabled.png") no-repeat center right}table.dataTable thead .sorting_desc_disabled{background:url("../images/sort_desc_disabled.png") no-repeat center right}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.hover tbody tr.odd:hover,table.dataTable.hover tbody tr.even:hover,table.dataTable.display tbody tr:hover,table.dataTable.display tbody tr.odd:hover,table.dataTable.display tbody tr.even:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.hover tbody tr.odd:hover.selected,table.dataTable.hover tbody tr.even:hover.selected,table.dataTable.display tbody tr:hover.selected,table.dataTable.display tbody tr.odd:hover.selected,table.dataTable.display tbody tr.even:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.display tbody tr.odd:hover>.sorting_1,table.dataTable.display tbody tr.even:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.display tbody tr.odd:hover>.sorting_2,table.dataTable.display tbody tr.even:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.display tbody tr.odd:hover>.sorting_3,table.dataTable.display tbody tr.even:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.display tbody tr.odd:hover.selected>.sorting_1,table.dataTable.display tbody tr.even:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.display tbody tr.odd:hover.selected>.sorting_2,table.dataTable.display tbody tr.even:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.display tbody tr.odd:hover.selected>.sorting_3,table.dataTable.display tbody tr.even:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:5px 9px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:5px 9px 3px 9px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px 5px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;/* zoom:1 */}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333;}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}