From 7e0ccbe2146e51dc4cd44c56fec352c0e0b34857 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 16 Jun 2015 15:26:27 -0500 Subject: [PATCH 01/68] Apply patch --- .../galaxy/scripts/libs/jquery.sparklines.js | 3054 +++++++++++++++++ static/maps/libs/jquery.sparklines.js.map | 1 + templates/spark_base.mako | 27 + 3 files changed, 3082 insertions(+) create mode 100644 client/galaxy/scripts/libs/jquery.sparklines.js create mode 100644 static/maps/libs/jquery.sparklines.js.map create mode 100644 templates/spark_base.mako diff --git a/client/galaxy/scripts/libs/jquery.sparklines.js b/client/galaxy/scripts/libs/jquery.sparklines.js new file mode 100644 index 00000000000..43b24c080a6 --- /dev/null +++ b/client/galaxy/scripts/libs/jquery.sparklines.js @@ -0,0 +1,3054 @@ +/** +* +* jquery.sparkline.js +* +* v2.1.2 +* (c) Splunk, Inc +* Contact: Gareth Watts (gareth@splunk.com) +* http://omnipotent.net/jquery.sparkline/ +* +* Generates inline sparkline charts from data supplied either to the method +* or inline in HTML +* +* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag +* (Firefox 2.0+, Safari, Opera, etc) +* +* License: New BSD License +* +* Copyright (c) 2012, Splunk Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* * Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* * Neither the name of Splunk Inc nor the names of its contributors may +* be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* +* Usage: +* $(selector).sparkline(values, options) +* +* If values is undefined or set to 'html' then the data values are read from the specified tag: +*

Sparkline: 1,4,6,6,8,5,3,5

+* $('.sparkline').sparkline(); +* There must be no spaces in the enclosed data set +* +* Otherwise values must be an array of numbers or null values +*

Sparkline: This text replaced if the browser is compatible

+* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5]) +* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5]) +* +* Values can also be specified in an HTML comment, or as a values attribute: +*

Sparkline:

+*

Sparkline:

+* $('.sparkline').sparkline(); +* +* For line charts, x values can also be specified: +*

Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

+* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ]) +* +* By default, options should be passed in as teh second argument to the sparkline function: +* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'}) +* +* Options can also be set by passing them on the tag itself. This feature is disabled by default though +* as there's a slight performance overhead: +* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true}) +*

Sparkline: loading

+* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix) +* +* Supported options: +* lineColor - Color of the line used for the chart +* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart +* width - Width of the chart - Defaults to 3 times the number of values in pixels +* height - Height of the chart - Defaults to the height of the containing element +* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied +* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied +* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax +* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied +* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied +* composite - If true then don't erase any existing chart attached to the tag, but draw +* another chart over the top - Note that width and height are ignored if an +* existing chart is detected. +* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values' +* enableTagOptions - Whether to check tags for sparkline options +* tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark' +* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a +* hidden dom element, avoding a browser reflow +* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled, +* making the plugin perform much like it did in 1.x +* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled) +* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled +* defaults to false (highlights enabled) +* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase +* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body +* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied +* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis +* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis +* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip +* callback is given arguments of (sparkline, options, fields) +* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title +* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries) +* to control the format of the tooltip +* tooltipPrefix - A string to prepend to each field displayed in a tooltip +* tooltipSuffix - A string to append to each field displayed in a tooltip +* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true) +* tooltipValueLookups - An object or range map to map field values to tooltip strings +* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win") +* numberFormatter - Optional callback for formatting numbers in tooltips +* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to "," +* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "." +* numberDigitGroupCount - Number of digits between group separator - Defaults to 3 +* +* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default), +* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box' +* line - Line chart. Options: +* spotColor - Set to '' to not end each line in a circular spot +* minSpotColor - If set, color of spot at minimum value +* maxSpotColor - If set, color of spot at maximum value +* spotRadius - Radius in pixels +* lineWidth - Width of line in pixels +* normalRangeMin +* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal" +* or expected range of values +* normalRangeColor - Color to use for the above bar +* drawNormalOnTop - Draw the normal range above the chart fill color if true +* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart +* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable +* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable +* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map +* +* bar - Bar chart. Options: +* barColor - Color of bars for postive values +* negBarColor - Color of bars for negative values +* zeroColor - Color of bars with zero values +* nullColor - Color of bars with null values - Defaults to omitting the bar entirely +* barWidth - Width of bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* barSpacing - Gap between bars in pixels +* zeroAxis - Centers the y-axis around zero if true +* +* tristate - Charts values of win (>0), lose (<0) or draw (=0) +* posBarColor - Color of win values +* negBarColor - Color of lose values +* zeroBarColor - Color of draw values +* barWidth - Width of bars in pixels +* barSpacing - Gap between bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* +* discrete - Options: +* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height +* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor +* thresholdColor +* +* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ... +* options: +* targetColor - The color of the vertical target marker +* targetWidth - The width of the target marker in pixels +* performanceColor - The color of the performance measure horizontal bar +* rangeColors - Colors to use for each qualitative range background color +* +* pie - Pie chart. Options: +* sliceColors - An array of colors to use for pie slices +* offset - Angle in degrees to offset the first slice - Try -90 or +90 +* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border) +* borderColor - Color to use for the pie chart border - Defaults to #000 +* +* box - Box plot. Options: +* raw - Set to true to supply pre-computed plot points as values +* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier +* When set to false you can supply any number of values and the box plot will +* be computed for you. Default is false. +* showOutliers - Set to true (default) to display outliers as circles +* outlierIQR - Interquartile range used to determine outliers. Default 1.5 +* boxLineColor - Outline color of the box +* boxFillColor - Fill color for the box +* whiskerColor - Line color used for whiskers +* outlierLineColor - Outline color of outlier circles +* outlierFillColor - Fill color of the outlier circles +* spotRadius - Radius of outlier circles +* medianColor - Line color of the median line +* target - Draw a target cross hair at the supplied value (default undefined) +* +* +* +* Examples: +* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false }); +* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 }); +* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }): +* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' }); +* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' }); +* $('#pie').sparkline([1,1,2], { type:'pie' }); +*/ + +/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */ + +(function(document, Math, undefined) { // performance/minified-size optimization +(function(factory) { + if(typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (jQuery && !jQuery.fn.sparkline) { + factory(jQuery); + } +} +(function($) { + 'use strict'; + + var UNSET_OPTION = {}, + getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, + remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap, + MouseHandler, Tooltip, barHighlightMixin, + line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles, + VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0; + + /** + * Default configuration settings + */ + getDefaults = function () { + return { + // Settings common to most/all chart types + common: { + type: 'line', + lineColor: '#00f', + fillColor: '#cdf', + defaultPixelsPerValue: 3, + width: 'auto', + height: 'auto', + composite: false, + tagValuesAttribute: 'values', + tagOptionsPrefix: 'spark', + enableTagOptions: false, + enableHighlight: true, + highlightLighten: 1.4, + tooltipSkipNull: true, + tooltipPrefix: '', + tooltipSuffix: '', + disableHiddenCheck: false, + numberFormatter: false, + numberDigitGroupCount: 3, + numberDigitGroupSep: ',', + numberDecimalMark: '.', + disableTooltips: false, + disableInteraction: false + }, + // Defaults for line charts + line: { + spotColor: '#f80', + highlightSpotColor: '#5f5', + highlightLineColor: '#f22', + spotRadius: 1.5, + minSpotColor: '#f80', + maxSpotColor: '#f80', + lineWidth: 1, + normalRangeMin: undefined, + normalRangeMax: undefined, + normalRangeColor: '#ccc', + drawNormalOnTop: false, + chartRangeMin: undefined, + chartRangeMax: undefined, + chartRangeMinX: undefined, + chartRangeMaxX: undefined, + tooltipFormat: new SPFormat('● {{prefix}}{{y}}{{suffix}}') + }, + // Defaults for bar charts + bar: { + barColor: '#3366cc', + negBarColor: '#f44', + stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + zeroColor: undefined, + nullColor: undefined, + zeroAxis: true, + barWidth: 4, + barSpacing: 1, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + colorMap: undefined, + tooltipFormat: new SPFormat('● {{prefix}}{{value}}{{suffix}}') + }, + // Defaults for tristate charts + tristate: { + barWidth: 4, + barSpacing: 1, + posBarColor: '#6f6', + negBarColor: '#f44', + zeroBarColor: '#999', + colorMap: {}, + tooltipFormat: new SPFormat('● {{value:map}}'), + tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } } + }, + // Defaults for discrete charts + discrete: { + lineHeight: 'auto', + thresholdColor: undefined, + thresholdValue: 0, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}') + }, + // Defaults for bullet charts + bullet: { + targetColor: '#f33', + targetWidth: 3, // width of the target bar in pixels + performanceColor: '#33f', + rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'], + base: undefined, // set this to a number to change the base start number + tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'), + tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} } + }, + // Defaults for pie charts + pie: { + offset: 0, + sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + borderWidth: 0, + borderColor: '#000', + tooltipFormat: new SPFormat('● {{value}} ({{percent.1}}%)') + }, + // Defaults for box plots + box: { + raw: false, + boxLineColor: '#000', + boxFillColor: '#cdf', + whiskerColor: '#000', + outlierLineColor: '#333', + outlierFillColor: '#fff', + medianColor: '#f00', + showOutliers: true, + outlierIQR: 1.5, + spotRadius: 1.5, + target: undefined, + targetColor: '#4a2', + chartRangeMax: undefined, + chartRangeMin: undefined, + tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'), + tooltipFormatFieldlistKey: 'field', + tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median', + uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier', + lw: 'Left Whisker', rw: 'Right Whisker'} } + } + }; + }; + + // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname + defaultStyles = '.jqstooltip { ' + + 'position: absolute;' + + 'left: 0px;' + + 'top: 0px;' + + 'visibility: hidden;' + + 'background: rgb(0, 0, 0) transparent;' + + 'background-color: rgba(0,0,0,0.6);' + + 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' + + '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + 'white-space: nowrap;' + + 'padding: 5px;' + + 'border: 1px solid white;' + + 'z-index: 10000;' + + '}' + + '.jqsfield { ' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + '}'; + + /** + * Utilities + */ + + createClass = function (/* [baseclass, [mixin, ...]], definition */) { + var Class, args; + Class = function () { + this.init.apply(this, arguments); + }; + if (arguments.length > 1) { + if (arguments[0]) { + Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]); + Class._super = arguments[0].prototype; + } else { + Class.prototype = arguments[arguments.length - 1]; + } + if (arguments.length > 2) { + args = Array.prototype.slice.call(arguments, 1, -1); + args.unshift(Class.prototype); + $.extend.apply($, args); + } + } else { + Class.prototype = arguments[0]; + } + Class.prototype.cls = Class; + return Class; + }; + + /** + * Wraps a format string for tooltips + * {{x}} + * {{x.2} + * {{x:months}} + */ + $.SPFormatClass = SPFormat = createClass({ + fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, + precre: /(\w+)\.(\d+)/, + + init: function (format, fclass) { + this.format = format; + this.fclass = fclass; + }, + + render: function (fieldset, lookups, options) { + var self = this, + fields = fieldset, + match, token, lookupkey, fieldvalue, prec; + return this.format.replace(this.fre, function () { + var lookup; + token = arguments[1]; + lookupkey = arguments[3]; + match = self.precre.exec(token); + if (match) { + prec = match[2]; + token = match[1]; + } else { + prec = false; + } + fieldvalue = fields[token]; + if (fieldvalue === undefined) { + return ''; + } + if (lookupkey && lookups && lookups[lookupkey]) { + lookup = lookups[lookupkey]; + if (lookup.get) { // RangeMap + return lookups[lookupkey].get(fieldvalue) || fieldvalue; + } else { + return lookups[lookupkey][fieldvalue] || fieldvalue; + } + } + if (isNumber(fieldvalue)) { + if (options.get('numberFormatter')) { + fieldvalue = options.get('numberFormatter')(fieldvalue); + } else { + fieldvalue = formatNumber(fieldvalue, prec, + options.get('numberDigitGroupCount'), + options.get('numberDigitGroupSep'), + options.get('numberDecimalMark')); + } + } + return fieldvalue; + }); + } + }); + + // convience method to avoid needing the new operator + $.spformat = function(format, fclass) { + return new SPFormat(format, fclass); + }; + + clipval = function (val, min, max) { + if (val < min) { + return min; + } + if (val > max) { + return max; + } + return val; + }; + + quartile = function (values, q) { + var vl; + if (q === 2) { + vl = Math.floor(values.length / 2); + return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2; + } else { + if (values.length % 2 ) { // odd + vl = (values.length * q + q) / 4; + return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; + } else { //even + vl = (values.length * q + 2) / 4; + return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; + + } + } + }; + + normalizeValue = function (val) { + var nf; + switch (val) { + case 'undefined': + val = undefined; + break; + case 'null': + val = null; + break; + case 'true': + val = true; + break; + case 'false': + val = false; + break; + default: + nf = parseFloat(val); + if (val == nf) { + val = nf; + } + } + return val; + }; + + normalizeValues = function (vals) { + var i, result = []; + for (i = vals.length; i--;) { + result[i] = normalizeValue(vals[i]); + } + return result; + }; + + remove = function (vals, filter) { + var i, vl, result = []; + for (i = 0, vl = vals.length; i < vl; i++) { + if (vals[i] !== filter) { + result.push(vals[i]); + } + } + return result; + }; + + isNumber = function (num) { + return !isNaN(parseFloat(num)) && isFinite(num); + }; + + formatNumber = function (num, prec, groupsize, groupsep, decsep) { + var p, i; + num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split(''); + p = (p = $.inArray('.', num)) < 0 ? num.length : p; + if (p < num.length) { + num[p] = decsep; + } + for (i = p - groupsize; i > 0; i -= groupsize) { + num.splice(i, 0, groupsep); + } + return num.join(''); + }; + + // determine if all values of an array match a value + // returns true if the array is empty + all = function (val, arr, ignoreNull) { + var i; + for (i = arr.length; i--; ) { + if (ignoreNull && arr[i] === null) continue; + if (arr[i] !== val) { + return false; + } + } + return true; + }; + + // sums the numeric values in an array, ignoring other values + sum = function (vals) { + var total = 0, i; + for (i = vals.length; i--;) { + total += typeof vals[i] === 'number' ? vals[i] : 0; + } + return total; + }; + + ensureArray = function (val) { + return $.isArray(val) ? val : [val]; + }; + + // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/ + addCSS = function(css) { + var tag; + //if ('\v' == 'v') /* ie only */ { + if (document.createStyleSheet) { + document.createStyleSheet().cssText = css; + } else { + tag = document.createElement('style'); + tag.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(tag); + tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css; + } + }; + + // Provide a cross-browser interface to a few simple drawing primitives + $.fn.simpledraw = function (width, height, useExisting, interact) { + var target, mhandler; + if (useExisting && (target = this.data('_jqs_vcanvas'))) { + return target; + } + + if ($.fn.sparkline.canvas === false) { + // We've already determined that neither Canvas nor VML are available + return false; + + } else if ($.fn.sparkline.canvas === undefined) { + // No function defined yet -- need to see if we support Canvas or VML + var el = document.createElement('canvas'); + if (!!(el.getContext && el.getContext('2d'))) { + // Canvas is available + $.fn.sparkline.canvas = function(width, height, target, interact) { + return new VCanvas_canvas(width, height, target, interact); + }; + } else if (document.namespaces && !document.namespaces.v) { + // VML is available + document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); + $.fn.sparkline.canvas = function(width, height, target, interact) { + return new VCanvas_vml(width, height, target); + }; + } else { + // Neither Canvas nor VML are available + $.fn.sparkline.canvas = false; + return false; + } + } + + if (width === undefined) { + width = $(this).innerWidth(); + } + if (height === undefined) { + height = $(this).innerHeight(); + } + + target = $.fn.sparkline.canvas(width, height, this, interact); + + mhandler = $(this).data('_jqs_mhandler'); + if (mhandler) { + mhandler.registerCanvas(target); + } + return target; + }; + + $.fn.cleardraw = function () { + var target = this.data('_jqs_vcanvas'); + if (target) { + target.reset(); + } + }; + + $.RangeMapClass = RangeMap = createClass({ + init: function (map) { + var key, range, rangelist = []; + for (key in map) { + if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { + range = key.split(':'); + range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); + range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); + range[2] = map[key]; + rangelist.push(range); + } + } + this.map = map; + this.rangelist = rangelist || false; + }, + + get: function (value) { + var rangelist = this.rangelist, + i, range, result; + if ((result = this.map[value]) !== undefined) { + return result; + } + if (rangelist) { + for (i = rangelist.length; i--;) { + range = rangelist[i]; + if (range[0] <= value && range[1] >= value) { + return range[2]; + } + } + } + return undefined; + } + }); + + // Convenience function + $.range_map = function(map) { + return new RangeMap(map); + }; + + MouseHandler = createClass({ + init: function (el, options) { + var $el = $(el); + this.$el = $el; + this.options = options; + this.currentPageX = 0; + this.currentPageY = 0; + this.el = el; + this.splist = []; + this.tooltip = null; + this.over = false; + this.displayTooltips = !options.get('disableTooltips'); + this.highlightEnabled = !options.get('disableHighlight'); + }, + + registerSparkline: function (sp) { + this.splist.push(sp); + if (this.over) { + this.updateDisplay(); + } + }, + + registerCanvas: function (canvas) { + var $canvas = $(canvas.canvas); + this.canvas = canvas; + this.$canvas = $canvas; + $canvas.mouseenter($.proxy(this.mouseenter, this)); + $canvas.mouseleave($.proxy(this.mouseleave, this)); + $canvas.click($.proxy(this.mouseclick, this)); + }, + + reset: function (removeTooltip) { + this.splist = []; + if (this.tooltip && removeTooltip) { + this.tooltip.remove(); + this.tooltip = undefined; + } + }, + + mouseclick: function (e) { + var clickEvent = $.Event('sparklineClick'); + clickEvent.originalEvent = e; + clickEvent.sparklines = this.splist; + this.$el.trigger(clickEvent); + }, + + mouseenter: function (e) { + $(document.body).unbind('mousemove.jqs'); + $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this)); + this.over = true; + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (!this.tooltip && this.displayTooltips) { + this.tooltip = new Tooltip(this.options); + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + mouseleave: function () { + $(document.body).unbind('mousemove.jqs'); + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + sp, i; + this.over = false; + this.currentEl = null; + + if (this.tooltip) { + this.tooltip.remove(); + this.tooltip = null; + } + + for (i = 0; i < spcount; i++) { + sp = splist[i]; + if (sp.clearRegionHighlight()) { + needsRefresh = true; + } + } + + if (needsRefresh) { + this.canvas.render(); + } + }, + + mousemove: function (e) { + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (this.tooltip) { + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + updateDisplay: function () { + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + offset = this.$canvas.offset(), + localX = this.currentPageX - offset.left, + localY = this.currentPageY - offset.top, + tooltiphtml, sp, i, result, changeEvent; + if (!this.over) { + return; + } + for (i = 0; i < spcount; i++) { + sp = splist[i]; + result = sp.setRegionHighlight(this.currentEl, localX, localY); + if (result) { + needsRefresh = true; + } + } + if (needsRefresh) { + changeEvent = $.Event('sparklineRegionChange'); + changeEvent.sparklines = this.splist; + this.$el.trigger(changeEvent); + if (this.tooltip) { + tooltiphtml = ''; + for (i = 0; i < spcount; i++) { + sp = splist[i]; + tooltiphtml += sp.getCurrentRegionTooltip(); + } + this.tooltip.setContent(tooltiphtml); + } + if (!this.disableHighlight) { + this.canvas.render(); + } + } + if (result === null) { + this.mouseleave(); + } + } + }); + + + Tooltip = createClass({ + sizeStyle: 'position: static !important;' + + 'display: block !important;' + + 'visibility: hidden !important;' + + 'float: left !important;', + + init: function (options) { + var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'), + sizetipStyle = this.sizeStyle, + offset; + this.container = options.get('tooltipContainer') || document.body; + this.tooltipOffsetX = options.get('tooltipOffsetX', 10); + this.tooltipOffsetY = options.get('tooltipOffsetY', 12); + // remove any previous lingering tooltip + $('#jqssizetip').remove(); + $('#jqstooltip').remove(); + this.sizetip = $('
', { + id: 'jqssizetip', + style: sizetipStyle, + 'class': tooltipClassname + }); + this.tooltip = $('
', { + id: 'jqstooltip', + 'class': tooltipClassname + }).appendTo(this.container); + // account for the container's location + offset = this.tooltip.offset(); + this.offsetLeft = offset.left; + this.offsetTop = offset.top; + this.hidden = true; + $(window).unbind('resize.jqs scroll.jqs'); + $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this)); + this.updateWindowDims(); + }, + + updateWindowDims: function () { + this.scrollTop = $(window).scrollTop(); + this.scrollLeft = $(window).scrollLeft(); + this.scrollRight = this.scrollLeft + $(window).width(); + this.updatePosition(); + }, + + getSize: function (content) { + this.sizetip.html(content).appendTo(this.container); + this.width = this.sizetip.width() + 1; + this.height = this.sizetip.height(); + this.sizetip.remove(); + }, + + setContent: function (content) { + if (!content) { + this.tooltip.css('visibility', 'hidden'); + this.hidden = true; + return; + } + this.getSize(content); + this.tooltip.html(content) + .css({ + 'width': this.width, + 'height': this.height, + 'visibility': 'visible' + }); + if (this.hidden) { + this.hidden = false; + this.updatePosition(); + } + }, + + updatePosition: function (x, y) { + if (x === undefined) { + if (this.mousex === undefined) { + return; + } + x = this.mousex - this.offsetLeft; + y = this.mousey - this.offsetTop; + + } else { + this.mousex = x = x - this.offsetLeft; + this.mousey = y = y - this.offsetTop; + } + if (!this.height || !this.width || this.hidden) { + return; + } + + y -= this.height + this.tooltipOffsetY; + x += this.tooltipOffsetX; + + if (y < this.scrollTop) { + y = this.scrollTop; + } + if (x < this.scrollLeft) { + x = this.scrollLeft; + } else if (x + this.width > this.scrollRight) { + x = this.scrollRight - this.width; + } + + this.tooltip.css({ + 'left': x, + 'top': y + }); + }, + + remove: function () { + this.tooltip.remove(); + this.sizetip.remove(); + this.sizetip = this.tooltip = undefined; + $(window).unbind('resize.jqs scroll.jqs'); + } + }); + + initStyles = function() { + addCSS(defaultStyles); + }; + + $(initStyles); + + pending = []; + $.fn.sparkline = function (userValues, userOptions) { + return this.each(function () { + var options = new $.fn.sparkline.options(this, userOptions), + $this = $(this), + render, i; + render = function () { + var values, width, height, tmp, mhandler, sp, vals; + if (userValues === 'html' || userValues === undefined) { + vals = this.getAttribute(options.get('tagValuesAttribute')); + if (vals === undefined || vals === null) { + vals = $this.html(); + } + values = vals.replace(/(^\s*\s*$)|\s+/g, '').split(','); + } else { + values = userValues; + } + + width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width'); + if (options.get('height') === 'auto') { + if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) { + // must be a better way to get the line height + tmp = document.createElement('span'); + tmp.innerHTML = 'a'; + $this.html(tmp); + height = $(tmp).innerHeight() || $(tmp).height(); + $(tmp).remove(); + tmp = null; + } + } else { + height = options.get('height'); + } + + if (!options.get('disableInteraction')) { + mhandler = $.data(this, '_jqs_mhandler'); + if (!mhandler) { + mhandler = new MouseHandler(this, options); + $.data(this, '_jqs_mhandler', mhandler); + } else if (!options.get('composite')) { + mhandler.reset(); + } + } else { + mhandler = false; + } + + if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) { + if (!$.data(this, '_jqs_errnotify')) { + alert('Attempted to attach a composite sparkline to an element with no existing sparkline'); + $.data(this, '_jqs_errnotify', true); + } + return; + } + + sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height); + + sp.render(); + + if (mhandler) { + mhandler.registerSparkline(sp); + } + }; + if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) { + if (!options.get('composite') && $.data(this, '_jqs_pending')) { + // remove any existing references to the element + for (i = pending.length; i; i--) { + if (pending[i - 1][0] == this) { + pending.splice(i - 1, 1); + } + } + } + pending.push([this, render]); + $.data(this, '_jqs_pending', true); + } else { + render.call(this); + } + }); + }; + + $.fn.sparkline.defaults = getDefaults(); + + + $.sparkline_display_visible = function () { + var el, i, pl; + var done = []; + for (i = 0, pl = pending.length; i < pl; i++) { + el = pending[i][0]; + if ($(el).is(':visible') && !$(el).parents().is(':hidden')) { + pending[i][1].call(el); + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) { + // element has been inserted and removed from the DOM + // If it was not yet inserted into the dom then the .data request + // will return true. + // removing from the dom causes the data to be removed. + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } + } + for (i = done.length; i; i--) { + pending.splice(done[i - 1], 1); + } + }; + + + /** + * User option handler + */ + $.fn.sparkline.options = createClass({ + init: function (tag, userOptions) { + var extendedOptions, defaults, base, tagOptionType; + this.userOptions = userOptions = userOptions || {}; + this.tag = tag; + this.tagValCache = {}; + defaults = $.fn.sparkline.defaults; + base = defaults.common; + this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix); + + tagOptionType = this.getTagSetting('type'); + if (tagOptionType === UNSET_OPTION) { + extendedOptions = defaults[userOptions.type || base.type]; + } else { + extendedOptions = defaults[tagOptionType]; + } + this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); + }, + + + getTagSetting: function (key) { + var prefix = this.tagOptionsPrefix, + val, i, pairs, keyval; + if (prefix === false || prefix === undefined) { + return UNSET_OPTION; + } + if (this.tagValCache.hasOwnProperty(key)) { + val = this.tagValCache.key; + } else { + val = this.tag.getAttribute(prefix + key); + if (val === undefined || val === null) { + val = UNSET_OPTION; + } else if (val.substr(0, 1) === '[') { + val = val.substr(1, val.length - 2).split(','); + for (i = val.length; i--;) { + val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, '')); + } + } else if (val.substr(0, 1) === '{') { + pairs = val.substr(1, val.length - 2).split(','); + val = {}; + for (i = pairs.length; i--;) { + keyval = pairs[i].split(':', 2); + val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, '')); + } + } else { + val = normalizeValue(val); + } + this.tagValCache.key = val; + } + return val; + }, + + get: function (key, defaultval) { + var tagOption = this.getTagSetting(key), + result; + if (tagOption !== UNSET_OPTION) { + return tagOption; + } + return (result = this.mergedOptions[key]) === undefined ? defaultval : result; + } + }); + + + $.fn.sparkline._base = createClass({ + disabled: false, + + init: function (el, values, options, width, height) { + this.el = el; + this.$el = $(el); + this.values = values; + this.options = options; + this.width = width; + this.height = height; + this.currentRegion = undefined; + }, + + /** + * Setup the canvas + */ + initTarget: function () { + var interactive = !this.options.get('disableInteraction'); + if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) { + this.disabled = true; + } else { + this.canvasWidth = this.target.pixelWidth; + this.canvasHeight = this.target.pixelHeight; + } + }, + + /** + * Actually render the chart to the canvas + */ + render: function () { + if (this.disabled) { + this.el.innerHTML = ''; + return false; + } + return true; + }, + + /** + * Return a region id for a given x/y co-ordinate + */ + getRegion: function (x, y) { + }, + + /** + * Highlight an item based on the moused-over x,y co-ordinate + */ + setRegionHighlight: function (el, x, y) { + var currentRegion = this.currentRegion, + highlightEnabled = !this.options.get('disableHighlight'), + newRegion; + if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) { + return null; + } + newRegion = this.getRegion(el, x, y); + if (currentRegion !== newRegion) { + if (currentRegion !== undefined && highlightEnabled) { + this.removeHighlight(); + } + this.currentRegion = newRegion; + if (newRegion !== undefined && highlightEnabled) { + this.renderHighlight(); + } + return true; + } + return false; + }, + + /** + * Reset any currently highlighted item + */ + clearRegionHighlight: function () { + if (this.currentRegion !== undefined) { + this.removeHighlight(); + this.currentRegion = undefined; + return true; + } + return false; + }, + + renderHighlight: function () { + this.changeHighlight(true); + }, + + removeHighlight: function () { + this.changeHighlight(false); + }, + + changeHighlight: function (highlight) {}, + + /** + * Fetch the HTML to display as a tooltip + */ + getCurrentRegionTooltip: function () { + var options = this.options, + header = '', + entries = [], + fields, formats, formatlen, fclass, text, i, + showFields, showFieldsKey, newFields, fv, + formatter, format, fieldlen, j; + if (this.currentRegion === undefined) { + return ''; + } + fields = this.getCurrentRegionFields(); + formatter = options.get('tooltipFormatter'); + if (formatter) { + return formatter(this, options, fields); + } + if (options.get('tooltipChartTitle')) { + header += '
' + options.get('tooltipChartTitle') + '
\n'; + } + formats = this.options.get('tooltipFormat'); + if (!formats) { + return ''; + } + if (!$.isArray(formats)) { + formats = [formats]; + } + if (!$.isArray(fields)) { + fields = [fields]; + } + showFields = this.options.get('tooltipFormatFieldlist'); + showFieldsKey = this.options.get('tooltipFormatFieldlistKey'); + if (showFields && showFieldsKey) { + // user-selected ordering of fields + newFields = []; + for (i = fields.length; i--;) { + fv = fields[i][showFieldsKey]; + if ((j = $.inArray(fv, showFields)) != -1) { + newFields[j] = fields[i]; + } + } + fields = newFields; + } + formatlen = formats.length; + fieldlen = fields.length; + for (i = 0; i < formatlen; i++) { + format = formats[i]; + if (typeof format === 'string') { + format = new SPFormat(format); + } + fclass = format.fclass || 'jqsfield'; + for (j = 0; j < fieldlen; j++) { + if (!fields[j].isNull || !options.get('tooltipSkipNull')) { + $.extend(fields[j], { + prefix: options.get('tooltipPrefix'), + suffix: options.get('tooltipSuffix') + }); + text = format.render(fields[j], options.get('tooltipValueLookups'), options); + entries.push('
' + text + '
'); + } + } + } + if (entries.length) { + return header + entries.join('\n'); + } + return ''; + }, + + getCurrentRegionFields: function () {}, + + calcHighlightColor: function (color, options) { + var highlightColor = options.get('highlightColor'), + lighten = options.get('highlightLighten'), + parse, mult, rgbnew, i; + if (highlightColor) { + return highlightColor; + } + if (lighten) { + // extract RGB values + parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); + if (parse) { + rgbnew = []; + mult = color.length === 4 ? 16 : 1; + for (i = 0; i < 3; i++) { + rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255); + } + return 'rgb(' + rgbnew.join(',') + ')'; + } + + } + return color; + } + + }); + + barHighlightMixin = { + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + target = this.target, + shapeids = this.regionShapes[currentRegion], + newShapes; + // will be null if the region value was null + if (shapeids) { + newShapes = this.renderRegion(currentRegion, highlight); + if ($.isArray(newShapes) || $.isArray(shapeids)) { + target.replaceWithShapes(shapeids, newShapes); + this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) { + return newShape.id; + }); + } else { + target.replaceWithShape(shapeids, newShapes); + this.regionShapes[currentRegion] = newShapes.id; + } + } + }, + + render: function () { + var values = this.values, + target = this.target, + regionShapes = this.regionShapes, + shapes, ids, i, j; + + if (!this.cls._super.render.call(this)) { + return; + } + for (i = values.length; i--;) { + shapes = this.renderRegion(i); + if (shapes) { + if ($.isArray(shapes)) { + ids = []; + for (j = shapes.length; j--;) { + shapes[j].append(); + ids.push(shapes[j].id); + } + regionShapes[i] = ids; + } else { + shapes.append(); + regionShapes[i] = shapes.id; // store just the shapeid + } + } else { + // null value + regionShapes[i] = null; + } + } + target.render(); + } + }; + + /** + * Line charts + */ + $.fn.sparkline.line = line = createClass($.fn.sparkline._base, { + type: 'line', + + init: function (el, values, options, width, height) { + line._super.init.call(this, el, values, options, width, height); + this.vertices = []; + this.regionMap = []; + this.xvalues = []; + this.yvalues = []; + this.yminmax = []; + this.hightlightSpotId = null; + this.lastShapeId = null; + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var i, + regionMap = this.regionMap; // maps regions to value positions + for (i = regionMap.length; i--;) { + if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) { + return regionMap[i][2]; + } + } + return undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.yvalues[currentRegion] === null, + x: this.xvalues[currentRegion], + y: this.yvalues[currentRegion], + color: this.options.get('lineColor'), + fillColor: this.options.get('fillColor'), + offset: currentRegion + }; + }, + + renderHighlight: function () { + var currentRegion = this.currentRegion, + target = this.target, + vertex = this.vertices[currentRegion], + options = this.options, + spotRadius = options.get('spotRadius'), + highlightSpotColor = options.get('highlightSpotColor'), + highlightLineColor = options.get('highlightLineColor'), + highlightSpot, highlightLine; + + if (!vertex) { + return; + } + if (spotRadius && highlightSpotColor) { + highlightSpot = target.drawCircle(vertex[0], vertex[1], + spotRadius, undefined, highlightSpotColor); + this.highlightSpotId = highlightSpot.id; + target.insertAfterShape(this.lastShapeId, highlightSpot); + } + if (highlightLineColor) { + highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], + this.canvasTop + this.canvasHeight, highlightLineColor); + this.highlightLineId = highlightLine.id; + target.insertAfterShape(this.lastShapeId, highlightLine); + } + }, + + removeHighlight: function () { + var target = this.target; + if (this.highlightSpotId) { + target.removeShapeId(this.highlightSpotId); + this.highlightSpotId = null; + } + if (this.highlightLineId) { + target.removeShapeId(this.highlightLineId); + this.highlightLineId = null; + } + }, + + scanValues: function () { + var values = this.values, + valcount = values.length, + xvalues = this.xvalues, + yvalues = this.yvalues, + yminmax = this.yminmax, + i, val, isStr, isArray, sp; + for (i = 0; i < valcount; i++) { + val = values[i]; + isStr = typeof(values[i]) === 'string'; + isArray = typeof(values[i]) === 'object' && values[i] instanceof Array; + sp = isStr && values[i].split(':'); + if (isStr && sp.length === 2) { // x:y + xvalues.push(Number(sp[0])); + yvalues.push(Number(sp[1])); + yminmax.push(Number(sp[1])); + } else if (isArray) { + xvalues.push(val[0]); + yvalues.push(val[1]); + yminmax.push(val[1]); + } else { + xvalues.push(i); + if (values[i] === null || values[i] === 'null') { + yvalues.push(null); + } else { + yvalues.push(Number(val)); + yminmax.push(Number(val)); + } + } + } + if (this.options.get('xvalues')) { + xvalues = this.options.get('xvalues'); + } + + this.maxy = this.maxyorg = Math.max.apply(Math, yminmax); + this.miny = this.minyorg = Math.min.apply(Math, yminmax); + + this.maxx = Math.max.apply(Math, xvalues); + this.minx = Math.min.apply(Math, xvalues); + + this.xvalues = xvalues; + this.yvalues = yvalues; + this.yminmax = yminmax; + + }, + + processRangeOptions: function () { + var options = this.options, + normalRangeMin = options.get('normalRangeMin'), + normalRangeMax = options.get('normalRangeMax'); + + if (normalRangeMin !== undefined) { + if (normalRangeMin < this.miny) { + this.miny = normalRangeMin; + } + if (normalRangeMax > this.maxy) { + this.maxy = normalRangeMax; + } + } + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) { + this.miny = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) { + this.maxy = options.get('chartRangeMax'); + } + if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) { + this.minx = options.get('chartRangeMinX'); + } + if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) { + this.maxx = options.get('chartRangeMaxX'); + } + + }, + + drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) { + var normalRangeMin = this.options.get('normalRangeMin'), + normalRangeMax = this.options.get('normalRangeMax'), + ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))), + height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey); + this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append(); + }, + + render: function () { + var options = this.options, + target = this.target, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + vertices = this.vertices, + spotRadius = options.get('spotRadius'), + regionMap = this.regionMap, + rangex, rangey, yvallast, + canvasTop, canvasLeft, + vertex, path, paths, x, y, xnext, xpos, xposnext, + last, next, yvalcount, lineShapes, fillShapes, plen, + valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i; + + if (!line._super.render.call(this)) { + return; + } + + this.scanValues(); + this.processRangeOptions(); + + xvalues = this.xvalues; + yvalues = this.yvalues; + + if (!this.yminmax.length || this.yvalues.length < 2) { + // empty or all null valuess + return; + } + + canvasTop = canvasLeft = 0; + + rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx; + rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny; + yvallast = this.yvalues.length - 1; + + if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) { + spotRadius = 0; + } + if (spotRadius) { + // adjust the canvas size as required so that spots will fit + hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction'); + if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) { + canvasHeight -= Math.ceil(spotRadius); + } + if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) { + canvasHeight -= Math.ceil(spotRadius); + canvasTop += Math.ceil(spotRadius); + } + if (hlSpotsEnabled || + ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) { + canvasLeft += Math.ceil(spotRadius); + canvasWidth -= Math.ceil(spotRadius); + } + if (hlSpotsEnabled || options.get('spotColor') || + (options.get('minSpotColor') || options.get('maxSpotColor') && + (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) { + canvasWidth -= Math.ceil(spotRadius); + } + } + + + canvasHeight--; + + if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + path = []; + paths = [path]; + last = next = null; + yvalcount = yvalues.length; + for (i = 0; i < yvalcount; i++) { + x = xvalues[i]; + xnext = xvalues[i + 1]; + y = yvalues[i]; + xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)); + xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth; + next = xpos + ((xposnext - xpos) / 2); + regionMap[i] = [last || 0, next, i]; + last = next; + if (y === null) { + if (i) { + if (yvalues[i - 1] !== null) { + path = []; + paths.push(path); + } + vertices.push(null); + } + } else { + if (y < this.miny) { + y = this.miny; + } + if (y > this.maxy) { + y = this.maxy; + } + if (!path.length) { + // previous value was null + path.push([xpos, canvasTop + canvasHeight]); + } + vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))]; + path.push(vertex); + vertices.push(vertex); + } + } + + lineShapes = []; + fillShapes = []; + plen = paths.length; + for (i = 0; i < plen; i++) { + path = paths[i]; + if (path.length) { + if (options.get('fillColor')) { + path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]); + fillShapes.push(path.slice(0)); + path.pop(); + } + // if there's only a single point in this path, then we want to display it + // as a vertical line which means we keep path[0] as is + if (path.length > 2) { + // else we want the first value + path[0] = [path[0][0], path[1][1]]; + } + lineShapes.push(path); + } + } + + // draw the fill first, then optionally the normal range, then the line on top of that + plen = fillShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(fillShapes[i], + options.get('fillColor'), options.get('fillColor')).append(); + } + + if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + plen = lineShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(lineShapes[i], options.get('lineColor'), undefined, + options.get('lineWidth')).append(); + } + + if (spotRadius && options.get('valueSpots')) { + valueSpots = options.get('valueSpots'); + if (valueSpots.get === undefined) { + valueSpots = new RangeMap(valueSpots); + } + for (i = 0; i < yvalcount; i++) { + color = valueSpots.get(yvalues[i]); + if (color) { + target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))), + spotRadius, undefined, + color).append(); + } + } + + } + if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) { + target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))), + spotRadius, undefined, + options.get('spotColor')).append(); + } + if (this.maxy !== this.minyorg) { + if (spotRadius && options.get('minSpotColor')) { + x = xvalues[$.inArray(this.minyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('minSpotColor')).append(); + } + if (spotRadius && options.get('maxSpotColor')) { + x = xvalues[$.inArray(this.maxyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('maxSpotColor')).append(); + } + } + + this.lastShapeId = target.getLastShapeId(); + this.canvasTop = canvasTop; + target.render(); + } + }); + + /** + * Bar charts + */ + $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'bar', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10), + chartRangeMin = options.get('chartRangeMin'), + chartRangeMax = options.get('chartRangeMax'), + chartRangeClip = options.get('chartRangeClip'), + stackMin = Infinity, + stackMax = -Infinity, + isStackString, groupMin, groupMax, stackRanges, + numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, + stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; + bar._super.init.call(this, el, values, options, width, height); + + // scan values to determine whether to stack bars + for (i = 0, vlen = values.length; i < vlen; i++) { + val = values[i]; + isStackString = typeof(val) === 'string' && val.indexOf(':') > -1; + if (isStackString || $.isArray(val)) { + stacked = true; + if (isStackString) { + val = values[i] = normalizeValues(val.split(':')); + } + val = remove(val, null); // min/max will treat null as zero + groupMin = Math.min.apply(Math, val); + groupMax = Math.max.apply(Math, val); + if (groupMin < stackMin) { + stackMin = groupMin; + } + if (groupMax > stackMax) { + stackMax = groupMax; + } + } + } + + this.stacked = stacked; + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + this.initTarget(); + + if (chartRangeClip) { + clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; + clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; + } + + numValues = []; + stackRanges = stacked ? [] : numValues; + var stackTotals = []; + var stackRangesNeg = []; + for (i = 0, vlen = values.length; i < vlen; i++) { + if (stacked) { + vlist = values[i]; + values[i] = svals = []; + stackTotals[i] = 0; + stackRanges[i] = stackRangesNeg[i] = 0; + for (j = 0, slen = vlist.length; j < slen; j++) { + val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j]; + if (val !== null) { + if (val > 0) { + stackTotals[i] += val; + } + if (stackMin < 0 && stackMax > 0) { + if (val < 0) { + stackRangesNeg[i] += Math.abs(val); + } else { + stackRanges[i] += val; + } + } else { + stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); + } + numValues.push(val); + } + } + } else { + val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; + val = values[i] = normalizeValue(val); + if (val !== null) { + numValues.push(val); + } + } + } + this.max = max = Math.max.apply(Math, numValues); + this.min = min = Math.min.apply(Math, numValues); + this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; + this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; + + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { + min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { + max = options.get('chartRangeMax'); + } + + this.zeroAxis = zeroAxis = options.get('zeroAxis', true); + if (min <= 0 && max >= 0 && zeroAxis) { + xaxisOffset = 0; + } else if (zeroAxis == false) { + xaxisOffset = min; + } else if (min > 0) { + xaxisOffset = min; + } else { + xaxisOffset = max; + } + this.xaxisOffset = xaxisOffset; + + range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; + + // as we plot zero/min values a single pixel line, we add a pixel to all other + // values - Reduce the effective canvas size to suit + this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1; + + if (min < xaxisOffset) { + yMaxCalc = (stacked && max >= 0) ? stackMax : max; + yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight; + if (yoffset !== Math.ceil(yoffset)) { + this.canvasHeightEf -= 2; + yoffset = Math.ceil(yoffset); + } + } else { + yoffset = this.canvasHeight; + } + this.yoffset = yoffset; + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + + this.range = range; + }, + + getRegion: function (el, x, y) { + var result = Math.floor(x / this.totalBarWidth); + return (result < 0 || result >= this.values.length) ? undefined : result; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion, + values = ensureArray(this.values[currentRegion]), + result = [], + value, i; + for (i = values.length; i--;) { + value = values[i]; + result.push({ + isNull: value === null, + value: value, + color: this.calcColor(i, value, currentRegion), + offset: currentRegion + }); + } + return result; + }, + + calcColor: function (stacknum, value, valuenum) { + var colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + options = this.options, + color, newColor; + if (this.stacked) { + color = options.get('stackedBarColor'); + } else { + color = (value < 0) ? options.get('negBarColor') : options.get('barColor'); + } + if (value === 0 && options.get('zeroColor') !== undefined) { + color = options.get('zeroColor'); + } + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } + return $.isArray(color) ? color[stacknum % color.length] : color; + }, + + /** + * Render bar(s) for a region + */ + renderRegion: function (valuenum, highlight) { + var vals = this.values[valuenum], + options = this.options, + xaxisOffset = this.xaxisOffset, + result = [], + range = this.range, + stacked = this.stacked, + target = this.target, + x = valuenum * this.totalBarWidth, + canvasHeightEf = this.canvasHeightEf, + yoffset = this.yoffset, + y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin; + + vals = $.isArray(vals) ? vals : [vals]; + valcount = vals.length; + val = vals[0]; + isNull = all(null, vals); + allMin = all(xaxisOffset, vals, true); + + if (isNull) { + if (options.get('nullColor')) { + color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options); + y = (yoffset > 0) ? yoffset - 1 : yoffset; + return target.drawRect(x, y, this.barWidth - 1, 0, color, color); + } else { + return undefined; + } + } + yoffsetNeg = yoffset; + for (i = 0; i < valcount; i++) { + val = vals[i]; + + if (stacked && val === xaxisOffset) { + if (!allMin || minPlotted) { + continue; + } + minPlotted = true; + } + + if (range > 0) { + height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1; + } else { + height = 1; + } + if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) { + y = yoffsetNeg; + yoffsetNeg += height; + } else { + y = yoffset - height; + yoffset -= height; + } + color = this.calcColor(i, val, valuenum); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color)); + } + if (result.length === 1) { + return result[0]; + } + return result; + } + }); + + /** + * Tristate charts + */ + $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'tristate', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10); + tristate._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.values = $.map(values, Number); + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.totalBarWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + color: this.calcColor(this.values[currentRegion], currentRegion), + offset: currentRegion + }; + }, + + calcColor: function (value, valuenum) { + var values = this.values, + options = this.options, + colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + color, newColor; + + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } else if (values[valuenum] < 0) { + color = options.get('negBarColor'); + } else if (values[valuenum] > 0) { + color = options.get('posBarColor'); + } else { + color = options.get('zeroBarColor'); + } + return color; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + target = this.target, + canvasHeight, height, halfHeight, + x, y, color; + + canvasHeight = target.pixelHeight; + halfHeight = Math.round(canvasHeight / 2); + + x = valuenum * this.totalBarWidth; + if (values[valuenum] < 0) { + y = halfHeight; + height = halfHeight - 1; + } else if (values[valuenum] > 0) { + y = 0; + height = halfHeight - 1; + } else { + y = halfHeight - 1; + height = 2; + } + color = this.calcColor(values[valuenum], valuenum); + if (color === null) { + return; + } + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color); + } + }); + + /** + * Discrete charts + */ + $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'discrete', + + init: function (el, values, options, width, height) { + discrete._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.values = values = $.map(values, Number); + this.min = Math.min.apply(Math, values); + this.max = Math.max.apply(Math, values); + this.range = this.max - this.min; + this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width; + this.interval = Math.floor(width / values.length); + this.itemWidth = width / values.length; + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) { + this.min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) { + this.max = options.get('chartRangeMax'); + } + this.initTarget(); + if (this.target) { + this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight'); + } + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.itemWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + offset: currentRegion + }; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + min = this.min, + max = this.max, + range = this.range, + interval = this.interval, + target = this.target, + canvasHeight = this.canvasHeight, + lineHeight = this.lineHeight, + pheight = canvasHeight - lineHeight, + ytop, val, color, x; + + val = clipval(values[valuenum], min, max); + x = valuenum * interval; + ytop = Math.round(pheight - pheight * ((val - min) / range)); + color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawLine(x, ytop, x, ytop + lineHeight, color); + } + }); + + /** + * Bullet charts + */ + $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, { + type: 'bullet', + + init: function (el, values, options, width, height) { + var min, max, vals; + bullet._super.init.call(this, el, values, options, width, height); + + // values: target, performance, range1, range2, range3 + this.values = values = normalizeValues(values); + // target or performance could be null + vals = values.slice(); + vals[0] = vals[0] === null ? vals[2] : vals[0]; + vals[1] = values[1] === null ? vals[2] : vals[1]; + min = Math.min.apply(Math, values); + max = Math.max.apply(Math, values); + if (options.get('base') === undefined) { + min = min < 0 ? min : 0; + } else { + min = options.get('base'); + } + this.min = min; + this.max = max; + this.range = max - min; + this.shapes = {}; + this.valueShapes = {}; + this.regiondata = {}; + this.width = width = options.get('width') === 'auto' ? '4.0em' : width; + this.target = this.$el.simpledraw(width, height, options.get('composite')); + if (!values.length) { + this.disabled = true; + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + fieldkey: currentRegion.substr(0, 1), + value: this.values[currentRegion.substr(1)], + region: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + shapeid = this.valueShapes[currentRegion], + shape; + delete this.shapes[shapeid]; + switch (currentRegion.substr(0, 1)) { + case 'r': + shape = this.renderRange(currentRegion.substr(1), highlight); + break; + case 'p': + shape = this.renderPerformance(highlight); + break; + case 't': + shape = this.renderTarget(highlight); + break; + } + this.valueShapes[currentRegion] = shape.id; + this.shapes[shape.id] = currentRegion; + this.target.replaceWithShape(shapeid, shape); + }, + + renderRange: function (rn, highlight) { + var rangeval = this.values[rn], + rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), + color = this.options.get('rangeColors')[rn - 2]; + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color); + }, + + renderPerformance: function (highlight) { + var perfval = this.values[1], + perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), + color = this.options.get('performanceColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, + Math.round(this.canvasHeight * 0.4) - 1, color, color); + }, + + renderTarget: function (highlight) { + var targetval = this.values[0], + x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)), + targettop = Math.round(this.canvasHeight * 0.10), + targetheight = this.canvasHeight - (targettop * 2), + color = this.options.get('targetColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color); + }, + + render: function () { + var vlen = this.values.length, + target = this.target, + i, shape; + if (!bullet._super.render.call(this)) { + return; + } + for (i = 2; i < vlen; i++) { + shape = this.renderRange(i).append(); + this.shapes[shape.id] = 'r' + i; + this.valueShapes['r' + i] = shape.id; + } + if (this.values[1] !== null) { + shape = this.renderPerformance().append(); + this.shapes[shape.id] = 'p1'; + this.valueShapes.p1 = shape.id; + } + if (this.values[0] !== null) { + shape = this.renderTarget().append(); + this.shapes[shape.id] = 't0'; + this.valueShapes.t0 = shape.id; + } + target.render(); + } + }); + + /** + * Pie charts + */ + $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, { + type: 'pie', + + init: function (el, values, options, width, height) { + var total = 0, i; + + pie._super.init.call(this, el, values, options, width, height); + + this.shapes = {}; // map shape ids to value offsets + this.valueShapes = {}; // maps value offsets to shape ids + this.values = values = $.map(values, Number); + + if (options.get('width') === 'auto') { + this.width = this.height; + } + + if (values.length > 0) { + for (i = values.length; i--;) { + total += values[i]; + } + } + this.total = total; + this.initTarget(); + this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + percent: this.values[currentRegion] / this.total * 100, + color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length], + offset: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + newslice = this.renderSlice(currentRegion, highlight), + shapeid = this.valueShapes[currentRegion]; + delete this.shapes[shapeid]; + this.target.replaceWithShape(shapeid, newslice); + this.valueShapes[currentRegion] = newslice.id; + this.shapes[newslice.id] = currentRegion; + }, + + renderSlice: function (valuenum, highlight) { + var target = this.target, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + offset = options.get('offset'), + circle = 2 * Math.PI, + values = this.values, + total = this.total, + next = offset ? (2*Math.PI)*(offset/360) : 0, + start, end, i, vlen, color; + + vlen = values.length; + for (i = 0; i < vlen; i++) { + start = next; + end = next; + if (total > 0) { // avoid divide by zero + end = next + (circle * (values[i] / total)); + } + if (valuenum === i) { + color = options.get('sliceColors')[i % options.get('sliceColors').length]; + if (highlight) { + color = this.calcHighlightColor(color, options); + } + + return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color); + } + next = end; + } + }, + + render: function () { + var target = this.target, + values = this.values, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + shape, i; + + if (!pie._super.render.call(this)) { + return; + } + if (borderWidth) { + target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)), + options.get('borderColor'), undefined, borderWidth).append(); + } + for (i = values.length; i--;) { + if (values[i]) { // don't render zero values + shape = this.renderSlice(i).append(); + this.valueShapes[i] = shape.id; // store just the shapeid + this.shapes[shape.id] = i; + } + } + target.render(); + } + }); + + /** + * Box plots + */ + $.fn.sparkline.box = box = createClass($.fn.sparkline._base, { + type: 'box', + + init: function (el, values, options, width, height) { + box._super.init.call(this, el, values, options, width, height); + this.values = $.map(values, Number); + this.width = options.get('width') === 'auto' ? '4.0em' : width; + this.initTarget(); + if (!this.values.length) { + this.disabled = 1; + } + }, + + /** + * Simulate a single region + */ + getRegion: function () { + return 1; + }, + + getCurrentRegionFields: function () { + var result = [ + { field: 'lq', value: this.quartiles[0] }, + { field: 'med', value: this.quartiles[1] }, + { field: 'uq', value: this.quartiles[2] } + ]; + if (this.loutlier !== undefined) { + result.push({ field: 'lo', value: this.loutlier}); + } + if (this.routlier !== undefined) { + result.push({ field: 'ro', value: this.routlier}); + } + if (this.lwhisker !== undefined) { + result.push({ field: 'lw', value: this.lwhisker}); + } + if (this.rwhisker !== undefined) { + result.push({ field: 'rw', value: this.rwhisker}); + } + return result; + }, + + render: function () { + var target = this.target, + values = this.values, + vlen = values.length, + options = this.options, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'), + maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'), + canvasLeft = 0, + lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i, + size, unitSize; + + if (!box._super.render.call(this)) { + return; + } + + if (options.get('raw')) { + if (options.get('showOutliers') && values.length > 5) { + loutlier = values[0]; + lwhisker = values[1]; + q1 = values[2]; + q2 = values[3]; + q3 = values[4]; + rwhisker = values[5]; + routlier = values[6]; + } else { + lwhisker = values[0]; + q1 = values[1]; + q2 = values[2]; + q3 = values[3]; + rwhisker = values[4]; + } + } else { + values.sort(function (a, b) { return a - b; }); + q1 = quartile(values, 1); + q2 = quartile(values, 2); + q3 = quartile(values, 3); + iqr = q3 - q1; + if (options.get('showOutliers')) { + lwhisker = rwhisker = undefined; + for (i = 0; i < vlen; i++) { + if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) { + lwhisker = values[i]; + } + if (values[i] < q3 + (iqr * options.get('outlierIQR'))) { + rwhisker = values[i]; + } + } + loutlier = values[0]; + routlier = values[vlen - 1]; + } else { + lwhisker = values[0]; + rwhisker = values[vlen - 1]; + } + } + this.quartiles = [q1, q2, q3]; + this.lwhisker = lwhisker; + this.rwhisker = rwhisker; + this.loutlier = loutlier; + this.routlier = routlier; + + unitSize = canvasWidth / (maxValue - minValue + 1); + if (options.get('showOutliers')) { + canvasLeft = Math.ceil(options.get('spotRadius')); + canvasWidth -= 2 * Math.ceil(options.get('spotRadius')); + unitSize = canvasWidth / (maxValue - minValue + 1); + if (loutlier < lwhisker) { + target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + if (routlier > rwhisker) { + target.drawCircle((routlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + } + + // box + target.drawRect( + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q3 - q1) * unitSize), + Math.round(canvasHeight * 0.8), + options.get('boxLineColor'), + options.get('boxFillColor')).append(); + // left whisker + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // right whisker + target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q3 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // median line + target.drawLine( + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.9), + options.get('medianColor')).append(); + if (options.get('target')) { + size = Math.ceil(options.get('spotRadius')); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) - size), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) + size), + options.get('targetColor')).append(); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size), + Math.round(canvasHeight / 2), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size), + Math.round(canvasHeight / 2), + options.get('targetColor')).append(); + } + target.render(); + } + }); + + // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier + // This is accessible as $(foo).simpledraw() + + VShape = createClass({ + init: function (target, id, type, args) { + this.target = target; + this.id = id; + this.type = type; + this.args = args; + }, + append: function () { + this.target.appendShape(this); + return this; + } + }); + + VCanvas_base = createClass({ + _pxregex: /(\d+)(px)?\s*$/i, + + init: function (width, height, target) { + if (!width) { + return; + } + this.width = width; + this.height = height; + this.target = target; + this.lastShapeId = null; + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + }, + + drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) { + return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth); + }, + + drawShape: function (path, lineColor, fillColor, lineWidth) { + return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]); + }, + + drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) { + return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]); + }, + + drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) { + return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]); + }, + + drawRect: function (x, y, width, height, lineColor, fillColor) { + return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]); + }, + + getElement: function () { + return this.canvas; + }, + + /** + * Return the most recently inserted shape id + */ + getLastShapeId: function () { + return this.lastShapeId; + }, + + /** + * Clear and reset the canvas + */ + reset: function () { + alert('reset not implemented'); + }, + + _insert: function (el, target) { + $(target).html(el); + }, + + /** + * Calculate the pixel dimensions of the canvas + */ + _calculatePixelDims: function (width, height, canvas) { + // XXX This should probably be a configurable option + var match; + match = this._pxregex.exec(height); + if (match) { + this.pixelHeight = match[1]; + } else { + this.pixelHeight = $(canvas).height(); + } + match = this._pxregex.exec(width); + if (match) { + this.pixelWidth = match[1]; + } else { + this.pixelWidth = $(canvas).width(); + } + }, + + /** + * Generate a shape object and id for later rendering + */ + _genShape: function (shapetype, shapeargs) { + var id = shapeCount++; + shapeargs.unshift(id); + return new VShape(this, id, shapetype, shapeargs); + }, + + /** + * Add a shape to the end of the render queue + */ + appendShape: function (shape) { + alert('appendShape not implemented'); + }, + + /** + * Replace one shape with another + */ + replaceWithShape: function (shapeid, shape) { + alert('replaceWithShape not implemented'); + }, + + /** + * Insert one shape after another in the render queue + */ + insertAfterShape: function (shapeid, shape) { + alert('insertAfterShape not implemented'); + }, + + /** + * Remove a shape from the queue + */ + removeShapeId: function (shapeid) { + alert('removeShapeId not implemented'); + }, + + /** + * Find a shape at the specified x/y co-ordinates + */ + getShapeAt: function (el, x, y) { + alert('getShapeAt not implemented'); + }, + + /** + * Render all queued shapes onto the canvas + */ + render: function () { + alert('render not implemented'); + } + }); + + VCanvas_canvas = createClass(VCanvas_base, { + init: function (width, height, target, interact) { + VCanvas_canvas._super.init.call(this, width, height, target); + this.canvas = document.createElement('canvas'); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' }); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + this.interact = interact; + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight}); + }, + + _getContext: function (lineColor, fillColor, lineWidth) { + var context = this.canvas.getContext('2d'); + if (lineColor !== undefined) { + context.strokeStyle = lineColor; + } + context.lineWidth = lineWidth === undefined ? 1 : lineWidth; + if (fillColor !== undefined) { + context.fillStyle = fillColor; + } + return context; + }, + + reset: function () { + var context = this._getContext(); + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth), + i, plen; + context.beginPath(); + context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5); + for (i = 1, plen = path.length; i < plen; i++) { + context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth); + context.beginPath(); + context.arc(x, y, radius, 0, 2 * Math.PI, false); + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var context = this._getContext(lineColor, fillColor); + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, startAngle, endAngle, false); + context.lineTo(x, y); + context.closePath(); + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor); + }, + + appendShape: function (shape) { + this.shapes[shape.id] = shape; + this.shapeseq.push(shape.id); + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + this.shapes[shape.id] = shape; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] == shapeid) { + shapeseq[i] = shape.id; + } + } + delete this.shapes[shapeid]; + }, + + replaceWithShapes: function (shapeids, shapes) { + var shapeseq = this.shapeseq, + shapemap = {}, + sid, i, first; + + for (i = shapeids.length; i--;) { + shapemap[shapeids[i]] = true; + } + for (i = shapeseq.length; i--;) { + sid = shapeseq[i]; + if (shapemap[sid]) { + shapeseq.splice(i, 1); + delete this.shapes[sid]; + first = i; + } + } + for (i = shapes.length; i--;) { + shapeseq.splice(first, 0, shapes[i].id); + this.shapes[shapes[i].id] = shapes[i]; + } + + }, + + insertAfterShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i + 1, 0, shape.id); + this.shapes[shape.id] = shape; + return; + } + } + }, + + removeShapeId: function (shapeid) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i, 1); + break; + } + } + delete this.shapes[shapeid]; + }, + + getShapeAt: function (el, x, y) { + this.targetX = x; + this.targetY = y; + this.render(); + return this.currentTargetShapeId; + }, + + render: function () { + var shapeseq = this.shapeseq, + shapes = this.shapes, + shapeCount = shapeseq.length, + context = this._getContext(), + shapeid, shape, i; + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + for (i = 0; i < shapeCount; i++) { + shapeid = shapeseq[i]; + shape = shapes[shapeid]; + this['_draw' + shape.type].apply(this, shape.args); + } + if (!this.interact) { + // not interactive so no need to keep the shapes array + this.shapes = {}; + this.shapeseq = []; + } + } + + }); + + VCanvas_vml = createClass(VCanvas_base, { + init: function (width, height, target) { + var groupel; + VCanvas_vml._super.init.call(this, width, height, target); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + this.canvas = document.createElement('span'); + $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'}); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + groupel = ''; + this.canvas.insertAdjacentHTML('beforeEnd', groupel); + this.group = $(this.canvas).children()[0]; + this.rendered = false; + this.prerender = ''; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var vpath = [], + initial, stroke, fill, closed, vel, plen, i; + for (i = 0, plen = path.length; i < plen; i++) { + vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]); + } + initial = vpath.splice(0, 1); + lineWidth = lineWidth === undefined ? 1 : lineWidth; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : ''; + vel = '' + + ' '; + return vel; + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var stroke, fill, vel; + x -= radius; + y -= radius; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = ''; + return vel; + + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var vpath, startx, starty, endx, endy, stroke, fill, vel; + if (startAngle === endAngle) { + return ''; // VML seems to have problem when start angle equals end angle. + } + if ((endAngle - startAngle) === (2 * Math.PI)) { + startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0 + endAngle = (2 * Math.PI); + } + + startx = x + Math.round(Math.cos(startAngle) * radius); + starty = y + Math.round(Math.sin(startAngle) * radius); + endx = x + Math.round(Math.cos(endAngle) * radius); + endy = y + Math.round(Math.sin(endAngle) * radius); + + if (startx === endx && starty === endy) { + if ((endAngle - startAngle) < Math.PI) { + // Prevent very small slices from being mistaken as a whole pie + return ''; + } + // essentially going to be the entire circle, so ignore startAngle + startx = endx = x + radius; + starty = endy = y; + } + + if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) { + return ''; + } + + vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy]; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = '' + + ' '; + return vel; + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor); + }, + + reset: function () { + this.group.innerHTML = ''; + }, + + appendShape: function (shape) { + var vel = this['_draw' + shape.type].apply(this, shape.args); + if (this.rendered) { + this.group.insertAdjacentHTML('beforeEnd', vel); + } else { + this.prerender += vel; + } + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].outerHTML = vel; + }, + + replaceWithShapes: function (shapeids, shapes) { + // replace the first shapeid with all the new shapes then toast the remaining old shapes + var existing = $('#jqsshape' + shapeids[0]), + replace = '', + slen = shapes.length, + i; + for (i = 0; i < slen; i++) { + replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args); + } + existing[0].outerHTML = replace; + for (i = 1; i < shapeids.length; i++) { + $('#jqsshape' + shapeids[i]).remove(); + } + }, + + insertAfterShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].insertAdjacentHTML('afterEnd', vel); + }, + + removeShapeId: function (shapeid) { + var existing = $('#jqsshape' + shapeid); + this.group.removeChild(existing[0]); + }, + + getShapeAt: function (el, x, y) { + var shapeid = el.id.substr(8); + return shapeid; + }, + + render: function () { + if (!this.rendered) { + // batch the intial render into a single repaint + this.group.innerHTML = this.prerender; + this.rendered = true; + } + } + }); + +}))}(document, Math)); \ No newline at end of file diff --git a/static/maps/libs/jquery.sparklines.js.map b/static/maps/libs/jquery.sparklines.js.map new file mode 100644 index 00000000000..54f300148cb --- /dev/null +++ b/static/maps/libs/jquery.sparklines.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jquery.sparklines.js","sources":["../../src/libs/jquery.sparklines.js"],"names":["document","Math","undefined","factory","define","amd","jQuery","fn","sparkline","$","getDefaults","createClass","SPFormat","clipval","quartile","normalizeValue","normalizeValues","remove","isNumber","all","sum","addCSS","ensureArray","formatNumber","RangeMap","MouseHandler","Tooltip","barHighlightMixin","line","bar","tristate","discrete","bullet","pie","box","defaultStyles","initStyles","VShape","VCanvas_base","VCanvas_canvas","VCanvas_vml","pending","UNSET_OPTION","shapeCount","common","type","lineColor","fillColor","defaultPixelsPerValue","width","height","composite","tagValuesAttribute","tagOptionsPrefix","enableTagOptions","enableHighlight","highlightLighten","tooltipSkipNull","tooltipPrefix","tooltipSuffix","disableHiddenCheck","numberFormatter","numberDigitGroupCount","numberDigitGroupSep","numberDecimalMark","disableTooltips","disableInteraction","spotColor","highlightSpotColor","highlightLineColor","spotRadius","minSpotColor","maxSpotColor","lineWidth","normalRangeMin","normalRangeMax","normalRangeColor","drawNormalOnTop","chartRangeMin","chartRangeMax","chartRangeMinX","chartRangeMaxX","tooltipFormat","barColor","negBarColor","stackedBarColor","zeroColor","nullColor","zeroAxis","barWidth","barSpacing","chartRangeClip","colorMap","posBarColor","zeroBarColor","tooltipValueLookups","map","-1","0","1","lineHeight","thresholdColor","thresholdValue","targetColor","targetWidth","performanceColor","rangeColors","base","fields","r","p","t","offset","sliceColors","borderWidth","borderColor","raw","boxLineColor","boxFillColor","whiskerColor","outlierLineColor","outlierFillColor","medianColor","showOutliers","outlierIQR","target","tooltipFormatFieldlistKey","lq","med","uq","lo","ro","lw","rw","Class","args","this","init","apply","arguments","length","prototype","extend","_super","Array","slice","call","unshift","cls","SPFormatClass","fre","precre","format","fclass","render","fieldset","lookups","options","match","token","lookupkey","fieldvalue","prec","self","replace","lookup","exec","get","spformat","val","min","max","values","q","vl","floor","nf","parseFloat","vals","i","result","filter","push","num","isNaN","isFinite","groupsize","groupsep","decsep","toString","toFixed","split","inArray","splice","join","arr","ignoreNull","total","isArray","css","tag","createStyleSheet","cssText","createElement","getElementsByTagName","appendChild","body","style","WebkitAppearance","simpledraw","useExisting","interact","mhandler","data","canvas","el","getContext","namespaces","v","add","innerWidth","innerHeight","registerCanvas","cleardraw","reset","RangeMapClass","key","range","rangelist","hasOwnProperty","indexOf","value","range_map","$el","currentPageX","currentPageY","splist","tooltip","over","displayTooltips","highlightEnabled","registerSparkline","sp","updateDisplay","$canvas","mouseenter","proxy","mouseleave","click","mouseclick","removeTooltip","e","clickEvent","Event","originalEvent","sparklines","trigger","unbind","bind","mousemove","pageX","pageY","currentEl","updatePosition","spcount","needsRefresh","clearRegionHighlight","tooltiphtml","changeEvent","localX","left","localY","top","setRegionHighlight","getCurrentRegionTooltip","setContent","disableHighlight","sizeStyle","tooltipClassname","sizetipStyle","container","tooltipOffsetX","tooltipOffsetY","sizetip","id","class","appendTo","offsetLeft","offsetTop","hidden","window","updateWindowDims","scrollTop","scrollLeft","scrollRight","getSize","content","html","visibility","x","y","mousex","mousey","userValues","userOptions","each","$this","tmp","getAttribute","innerHTML","alert","is","parents","defaults","sparkline_display_visible","pl","done","closest","extendedOptions","tagOptionType","tagValCache","getTagSetting","mergedOptions","pairs","keyval","prefix","substr","defaultval","tagOption","_base","disabled","currentRegion","initTarget","interactive","canvasWidth","pixelWidth","canvasHeight","pixelHeight","getRegion","newRegion","removeHighlight","renderHighlight","changeHighlight","formats","formatlen","text","showFields","showFieldsKey","newFields","fv","formatter","fieldlen","j","header","entries","getCurrentRegionFields","isNull","suffix","calcHighlightColor","color","parse","mult","rgbnew","highlightColor","lighten","round","parseInt","highlight","newShapes","shapeids","regionShapes","renderRegion","replaceWithShapes","newShape","replaceWithShape","shapes","ids","append","vertices","regionMap","xvalues","yvalues","yminmax","hightlightSpotId","lastShapeId","highlightSpot","highlightLine","vertex","drawCircle","highlightSpotId","insertAfterShape","drawLine","canvasTop","highlightLineId","removeShapeId","scanValues","isStr","valcount","Number","maxy","maxyorg","miny","minyorg","maxx","minx","processRangeOptions","drawNormalRange","canvasLeft","rangey","ytop","drawRect","rangex","yvallast","path","paths","xnext","xpos","xposnext","last","next","yvalcount","lineShapes","fillShapes","plen","valueSpots","hlSpotsEnabled","ceil","pop","drawShape","getLastShapeId","isStackString","groupMin","groupMax","stackRanges","numValues","vlen","xaxisOffset","clipMin","clipMax","stacked","vlist","slen","svals","yoffset","yMaxCalc","stackMin","stackMax","totalBarWidth","stackTotals","stackRangesNeg","abs","canvasHeightEf","colorMapByIndex","colorMapByValue","calcColor","stacknum","valuenum","newColor","yoffsetNeg","minPlotted","allMin","halfHeight","interval","itemWidth","pheight","valueShapes","regiondata","shapeid","getShapeAt","fieldkey","region","shape","renderRange","renderPerformance","renderTarget","rn","rangeval","rangewidth","perfval","perfwidth","targetval","targettop","targetheight","p1","t0","radius","percent","newslice","renderSlice","start","end","circle","PI","drawPieSlice","field","quartiles","loutlier","routlier","lwhisker","rwhisker","iqr","q1","q2","q3","size","unitSize","minValue","maxValue","sort","a","b","appendShape","_pxregex","x1","y1","x2","y2","_genShape","startAngle","endAngle","getElement","_insert","_calculatePixelDims","shapetype","shapeargs","display","verticalAlign","shapeseq","currentTargetShapeId","_getContext","context","strokeStyle","fillStyle","clearRect","_drawShape","beginPath","moveTo","lineTo","stroke","fill","targetX","targetY","isPointInPath","_drawCircle","arc","_drawPieSlice","closePath","_drawRect","sid","first","shapemap","groupel","position","overflow","margin","padding","insertAdjacentHTML","group","children","rendered","prerender","initial","closed","vel","vpath","startx","starty","endx","endy","cos","sin","existing","outerHTML","removeChild"],"mappings":"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"} \ No newline at end of file diff --git a/templates/spark_base.mako b/templates/spark_base.mako new file mode 100644 index 00000000000..da4410f1056 --- /dev/null +++ b/templates/spark_base.mako @@ -0,0 +1,27 @@ +<%def name="jqs_style()"> + + + +<%def name="make_sparkline(id, data, sparktype, length)"> + <% + color = '●' + if sparktype == "bar": + tooltip = color + '{{value}} ' + length + '' + else: + tooltip = color + '{{prefix}}{{y}} ' + length + '{{suffix}}' + %> + + \ No newline at end of file From 82456bb1347a054050789d02a4b5a03bad6f8bfe Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 16 Jun 2015 15:26:49 -0500 Subject: [PATCH 02/68] Apply Patch --- .../webapps/reports/controllers/jobs.py | 254 +++++++++++++++++- templates/base.mako | 1 + .../webapps/reports/jobs_errors_per_tool.mako | 13 +- .../webapps/reports/jobs_per_month_all.mako | 5 + .../reports/jobs_per_month_in_error.mako | 5 + templates/webapps/reports/jobs_per_tool.mako | 14 +- templates/webapps/reports/jobs_per_user.mako | 12 +- .../reports/jobs_specified_month_all.mako | 5 + .../jobs_specified_month_in_error.mako | 9 +- .../webapps/reports/jobs_tool_per_month.mako | 10 +- .../webapps/reports/jobs_user_per_month.mako | 12 +- 11 files changed, 318 insertions(+), 22 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index de3edcb1ead..848d38829f0 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -1,3 +1,4 @@ +from __future__ import print_function import calendar from collections import namedtuple from datetime import datetime, date, timedelta @@ -7,6 +8,7 @@ from galaxy.web.framework.helpers import grids from galaxy.model.orm import and_, not_, or_ import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) +import re import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder @@ -271,6 +273,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): month_label = start_date.strftime( "%B" ) year_label = start_date.strftime( "%Y" ) + # Use to make the page table month_jobs = sa.select( ( sa.func.date( model.Job.table.c.create_time ).label( 'date' ), sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), whereclause=sa.and_( model.Job.table.c.user_id != monitor_user_id, @@ -280,13 +283,32 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=[ 'date' ], order_by=[ _order ] ) + # Use to make trendline + all_jobs = sa.select( ( model.Job.table.c.create_time.label('date'), model.Job.table.c.id.label('id') ), + whereclause=sa.and_( model.Job.table.c.user_id != monitor_user_id, + model.Job.table.c.create_time >= start_date, + model.Job.table.c.create_time < end_date ) ) + + trend = [0] * 24 jobs = [] for row in month_jobs.execute(): - jobs.append( ( row.date.strftime( "%A" ), - row.date.strftime( "%d" ), + trend = [0] * 24 + + row_dayname = row.date.strftime( "%A" ) + row_day = row.date.strftime( "%d" ) + + for job in all_jobs.execute(): + if row_day == job.date.strftime( "%d" ): + hour = int( job.date.strftime( "%-H" ) ) - 1 + trend[hour] += 1 + + jobs.append( ( row_dayname, + row_day, row.total_jobs, - row.date + row.date, + trend ) ) + return trans.fill_template( '/webapps/reports/jobs_specified_month_all.mako', order=order, arrow=arrow, @@ -334,12 +356,33 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=[ 'date' ], order_by=[ _order ] ) + # Use to make trendline + all_jobs_in_error = sa.select( ( model.Job.table.c.create_time.label('date'), model.Job.table.c.id.label('id') ), + whereclause=sa.and_( model.Job.table.c.user_id != monitor_user_id, + model.Job.table.c.state == 'error', + model.Job.table.c.create_time >= start_date, + model.Job.table.c.create_time < end_date ) ) + + trend = [0] * 24 jobs = [] for row in month_jobs_in_error.execute(): - jobs.append( ( row.date.strftime( "%A" ), - row.date, + trend = [0] * 24 + + row_dayname = row.date.strftime( "%A" ) + row_day = row.date.strftime( "%d" ) + + for job in all_jobs_in_error.execute(): + if row_day == job.date.strftime( "%d" ): + hour = int( job.date.strftime( "%-H" ) ) - 1 + trend[hour] += 1 + + jobs.append( ( row_dayname, + row_day, row.total_jobs, - row.date.strftime( "%d" ) ) ) + row.date, + trend + ) ) + return trans.fill_template( '/webapps/reports/jobs_specified_month_in_error.mako', order=order, arrow=arrow, @@ -369,26 +412,52 @@ class Jobs( BaseUIController, ReportQueryBuilder ): # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) + # Use to make the page table jobs_by_month = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), - sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), + sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), whereclause=model.Job.table.c.user_id != monitor_user_id, from_obj=[ model.Job.table ], group_by=self.group_by_month( model.Job.table.c.create_time ), order_by=[ _order ] ) + # Use to make sparkline + all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ) ) + + trends = dict() + for job in all_jobs.execute(): + job_day = int(job.date.strftime("%-d")) - 1 + job_month = int(job.date.strftime("%-m")) + job_month_name = job.date.strftime("%B") + job_year = job.date.strftime("%Y") + key = str( job_month_name + job_year) + + try: + trends[key][job_day] += 1 + except KeyError: + job_year = int(job_year) + wday, day_range = calendar.monthrange(job_year, job_month) + trends[key] = [0] * day_range + trends[key][job_day] += 1 + jobs = [] for row in jobs_by_month.execute(): + month = int(row.date.strftime("%-m")) + month_name = row.date.strftime("%B") + year = int(row.date.strftime("%Y")) + wday, day_range = calendar.monthrange(year, month) + jobs.append( ( row.date.strftime( "%Y-%m" ), row.total_jobs, - row.date.strftime( "%B" ), - row.date.strftime( "%y" ) + month_name, + year ) ) return trans.fill_template( '/webapps/reports/jobs_per_month_all.mako', order=order, arrow=arrow, sort_id=sort_id, + trends=trends, jobs=jobs, is_user_jobs_only=monitor_user_id, message=message ) @@ -411,6 +480,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) + # Use to make the page table jobs_in_error_by_month = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), whereclause=sa.and_( model.Job.table.c.state == 'error', @@ -419,12 +489,40 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=self.group_by_month( model.Job.table.c.create_time ), order_by=[ _order ] ) + # Use to make trendline + all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ), + whereclause=sa.and_( model.Job.table.c.state == 'error', + model.Job.table.c.user_id != monitor_user_id )) + + trends = dict() + for job in all_jobs.execute(): + job_day = int(job.date.strftime("%-d")) - 1 + job_month = int(job.date.strftime("%-m")) + job_month_name = job.date.strftime("%B") + job_year = job.date.strftime("%Y") + key = str( job_month_name + job_year) + + try: + trends[key][job_day] += 1 + except KeyError: + job_year = int(job_year) + wday, day_range = calendar.monthrange(job_year, job_month) + trends[key] = [0] * day_range + trends[key][job_day] += 1 + jobs = [] for row in jobs_in_error_by_month.execute(): - jobs.append( ( row.date.strftime( "%Y-%m" ), - row.total_jobs, - row.date.strftime( "%B" ), - row.date.strftime( "%y" ) ) ) + month = int(row.date.strftime("%-m")) + month_name = row.date.strftime("%B") + year = int(row.date.strftime("%Y")) + wday, day_range = calendar.monthrange(year, month) + + jobs.append( ( + row.date.strftime( "%Y-%m" ), + row.total_jobs, + month_name, + year + ) ) return trans.fill_template( '/webapps/reports/jobs_per_month_in_error.mako', order=order, arrow=arrow, @@ -443,6 +541,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order + day_limit = 50 jobs = [] jobs_per_user = sa.select( ( model.User.table.c.email.label( 'user_email' ), @@ -450,6 +549,28 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ sa.outerjoin( model.Job.table, model.User.table ) ], group_by=[ 'user_email' ], order_by=[ _order ] ) + + all_jobs_per_user = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), + model.Job.table.c.id.label( 'id' ), + model.User.table.c.email.label( 'user_email' ) ), + from_obj=[ sa.outerjoin( model.Job.table, model.User.table ) ] ) + + currday = datetime.today().date() + trends = dict() + for job in all_jobs_per_user.execute(): + curr_user = re.sub(r'\W+', '', job.user_email) + try: + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_user][day] += 1 + except KeyError: + trends[curr_user] = [0] * day_limit + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_user][day] += 1 + for row in jobs_per_user.execute(): if ( row.user_email is None ): jobs.append( ( 'Anonymous', @@ -459,10 +580,13 @@ class Jobs( BaseUIController, ReportQueryBuilder ): else: jobs.append( ( row.user_email, row.total_jobs ) ) + return trans.fill_template( '/webapps/reports/jobs_per_user.mako', order=order, arrow=arrow, sort_id=sort_id, + day_limit=day_limit, + trends=trends, jobs=jobs, message=message ) @@ -477,6 +601,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order + q = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), whereclause=sa.and_( model.Job.table.c.session_id == model.GalaxySession.table.c.id, @@ -485,6 +610,30 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ sa.join( model.Job.table, model.User.table ) ], group_by=self.group_by_month( model.Job.table.c.create_time ), order_by=[ _order ] ) + + all_jobs_per_user = sa.select( ( model.Job.table.c.create_time.label( 'date' ), + model.Job.table.c.id.label( 'job_id' ) ), + whereclause=sa.and_( model.Job.table.c.session_id == model.GalaxySession.table.c.id, + model.GalaxySession.table.c.user_id == model.User.table.c.id, + model.User.table.c.email == email), + from_obj=[ sa.join( model.Job.table, model.User.table ) ] ) + + trends = dict() + for job in all_jobs_per_user.execute(): + job_day = int(job.date.strftime("%-d")) - 1 + job_month = int(job.date.strftime("%-m")) + job_month_name = job.date.strftime("%B") + job_year = job.date.strftime("%Y") + key = str( job_month_name + job_year) + + try: + trends[key][job_day] += 1 + except KeyError: + job_year = int(job_year) + wday, day_range = calendar.monthrange(job_year, job_month) + trends[key] = [0] * day_range + trends[key][job_day] += 1 + jobs = [] for row in q.execute(): jobs.append( ( row.date.strftime( "%Y-%m" ), @@ -496,6 +645,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): arrow=arrow, sort_id=sort_id, id=kwd.get('id'), + trends=trends, email=util.sanitize_text( email ), jobs=jobs, message=message ) @@ -510,6 +660,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order + day_limit = 50 + # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -520,13 +672,38 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ model.Job.table ], group_by=[ 'tool_id' ], order_by=[ _order ] ) + + all_jobs_per_tool = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), + model.Job.table.c.id.label( 'id' ), + model.Job.table.c.tool_id.label( 'tool_id' ) ), + from_obj=[ model.Job.table ] ) + + currday = datetime.today().date() + trends = dict() + for job in all_jobs_per_tool.execute(): + curr_tool = re.sub(r'\W+', '', job.tool_id) + try: + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_tool][day] += 1 + except KeyError: + trends[curr_tool] = [0] * day_limit + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_tool][day] += 1 + for row in q.execute(): jobs.append( ( row.tool_id, row.total_jobs ) ) + return trans.fill_template( '/webapps/reports/jobs_per_tool.mako', order=order, arrow=arrow, sort_id=sort_id, + day_limit=day_limit, + trends=trends, jobs=jobs, message=message, is_user_jobs_only=monitor_user_id) @@ -545,6 +722,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order + day_limit = 50 # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -555,6 +733,31 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ model.Job.table ], group_by=[ 'tool_id' ], order_by=[ _order ] ) + + all_jobs_per_tool_errors = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), + model.Job.table.c.id.label( 'id' ), + model.Job.table.c.tool_id.label( 'tool_id' ) ), + whereclause=sa.and_( model.Job.table.c.state == 'error', + model.Job.table.c.user_id != monitor_user_id ), + from_obj=[ model.Job.table ] + ) + + currday = datetime.today().date() + trends = dict() + for job in all_jobs_per_tool_errors.execute(): + curr_tool = re.sub(r'\W+', '', job.tool_id) + try: + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_tool][day] += 1 + except KeyError: + trends[curr_tool] = [0] * day_limit + day = currday - job.date + day = day.days + if day < day_limit: + trends[curr_tool][day] += 1 + jobs = [] for row in jobs_in_error_per_tool.execute(): jobs.append( ( row.total_jobs, row.tool_id ) ) @@ -562,6 +765,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, + day_limit=day_limit, + trends=trends, jobs=jobs, message=message, is_user_jobs_only=monitor_user_id ) @@ -589,6 +794,28 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ model.Job.table ], group_by=self.group_by_month( model.Job.table.c.create_time ), order_by=[ _order ] ) + + # Use to make sparkline + all_jobs_for_tool = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ), + whereclause=sa.and_( model.Job.table.c.tool_id == tool_id, + model.Job.table.c.user_id != monitor_user_id ), + from_obj=[ model.Job.table ] ) + trends = dict() + for job in all_jobs_for_tool.execute(): + job_day = int(job.date.strftime("%-d")) - 1 + job_month = int(job.date.strftime("%-m")) + job_month_name = job.date.strftime("%B") + job_year = job.date.strftime("%Y") + key = str( job_month_name + job_year) + + try: + trends[key][job_day] += 1 + except KeyError: + job_year = int(job_year) + wday, day_range = calendar.monthrange(job_year, job_month) + trends[key] = [0] * day_range + trends[key][job_day] += 1 + jobs = [] for row in q.execute(): jobs.append( ( row.date.strftime( "%Y-%m" ), @@ -601,6 +828,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): sort_id=sort_id, specified_date=specified_date, tool_id=tool_id, + trends=trends, jobs=jobs, message=message, is_user_jobs_only=monitor_user_id ) diff --git a/templates/base.mako b/templates/base.mako index dba96d2d483..0752855bd95 100644 --- a/templates/base.mako +++ b/templates/base.mako @@ -48,6 +48,7 @@ "libs/jquery/jquery", "libs/jquery/jquery.migrate", "libs/jquery/select2", + "libs/jquery.sparklines", "libs/bootstrap", "libs/underscore", "libs/backbone/backbone", diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index 6977be38960..6ce25222959 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -1,18 +1,26 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%! + import re +%> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()}

Jobs In Error Per Tool

-
Click Tool ID to view details. Click error number to view job details.
+
+

Click Tool ID to view details. Click error number to view job details.

+

Graph goes from present to past(${day_limit} days).

+
%if len( jobs ) == 0: @@ -36,6 +44,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = re.sub(r'\W+', '', job[1]) %> %if ctr % 2 == 1: %else: @@ -43,6 +52,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "line", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_per_month_all.mako b/templates/webapps/reports/jobs_per_month_all.mako index c8c044e96ae..0b8a08ccdca 100644 --- a/templates/webapps/reports/jobs_per_month_all.mako +++ b/templates/webapps/reports/jobs_per_month_all.mako @@ -1,11 +1,13 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} @@ -36,6 +38,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = str(job[2]) + str(job[3]) %> %if ctr % 2 == 1: %else: @@ -43,6 +46,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "bar", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_per_month_in_error.mako b/templates/webapps/reports/jobs_per_month_in_error.mako index b1eca3b99f1..742fd1e3d79 100644 --- a/templates/webapps/reports/jobs_per_month_in_error.mako +++ b/templates/webapps/reports/jobs_per_month_in_error.mako @@ -1,11 +1,13 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} @@ -36,6 +38,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = str(job[2]) + str(job[3]) %> %if ctr % 2 == 1: %else: @@ -43,6 +46,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "bar", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index 90a866400d9..e6e31675f31 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -1,18 +1,25 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%! + import re +%> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} - +

Jobs Per Tool

-
Click Tool ID to view details
+
+ Click Tool ID to view details. Graph goes from present to past(${day_limit} days). +
There are no jobs in the error state.
${job[1]} ${job[0]}
${job[2]} ${job[3]} ${job[1]}
${job[2]} ${job[3]} ${job[1]}
%if len( jobs ) == 0: @@ -36,6 +43,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = re.sub(r'\W+', '', job[0]) %> %if ctr % 2 == 1: %else: @@ -43,6 +51,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "line", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index 4726ca9f7ab..5770d0063d3 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -1,18 +1,25 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%! + import re +%> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()}

Jobs Per User

-
Click User to view details.
+
+ Click User to view details. Graph goes from present to past(${day_limit} days). +
There are no jobs.
${job[0]} ${job[1]}
%if len( jobs ) == 0: @@ -29,6 +36,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = re.sub(r'\W+', '', job[0]) %> %if ctr % 2 == 1: %else: @@ -36,6 +44,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "line", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_specified_month_all.mako b/templates/webapps/reports/jobs_specified_month_all.mako index 7cfd0b1eaf8..15468ac9bb8 100644 --- a/templates/webapps/reports/jobs_specified_month_all.mako +++ b/templates/webapps/reports/jobs_specified_month_all.mako @@ -1,11 +1,13 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} @@ -37,6 +39,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = job[1] %> %if ctr % 2 == 1: %else: @@ -45,6 +48,8 @@ ${get_css()} + ${make_sparkline(key, job[4], "bar", "/ hour")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_specified_month_in_error.mako b/templates/webapps/reports/jobs_specified_month_in_error.mako index 3ca44979401..4501ca1bc6e 100644 --- a/templates/webapps/reports/jobs_specified_month_in_error.mako +++ b/templates/webapps/reports/jobs_specified_month_in_error.mako @@ -1,11 +1,13 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()}
@@ -36,14 +38,17 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = job[1] %> %if ctr % 2 == 1:
%else: %endif - - + + + ${make_sparkline(key, job[4], "bar", "/ hour")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_tool_per_month.mako b/templates/webapps/reports/jobs_tool_per_month.mako index 916bfb661f3..8d5eea5ad78 100644 --- a/templates/webapps/reports/jobs_tool_per_month.mako +++ b/templates/webapps/reports/jobs_tool_per_month.mako @@ -1,11 +1,13 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> %if message: ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} @@ -13,7 +15,10 @@ ${get_css()}

Jobs per month for tool "${tool_id}"

-
Click Jobs to view details
+
+

Click Jobs to view details.

+

Graph goes from first of the month to the last

+
There are no jobs.
${job[0]} ${job[1]}
${job[0]} ${month_label} ${job[1]}, ${year_label} ${job[2]}
${job[0]}${month_label} ${job[3]}, ${year_label}${job[2]}${month_label} ${job[1]}, ${year_label}${job[2]}
%if len( jobs ) == 0: @@ -37,6 +42,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = job[2] + job[3] %> %if ctr % 2 == 1: %else: @@ -44,6 +50,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "line", "/ day")} + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/jobs_user_per_month.mako b/templates/webapps/reports/jobs_user_per_month.mako index 7acbd73b0d5..d18d8c5235c 100644 --- a/templates/webapps/reports/jobs_user_per_month.mako +++ b/templates/webapps/reports/jobs_user_per_month.mako @@ -1,5 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <% from galaxy import util %> @@ -7,7 +8,8 @@ %if message: ${render_msg( message, 'done' )} %endif - + +${jqs_style()} ${get_css()} <% @@ -18,7 +20,10 @@ ${get_css()}

Jobs per month for user "${_email}"

-

Click Total Jobs to see the user's jobs for that month

+

+

Click Total Jobs to see the user's jobs for that month

+

Graph goes from first of the month to the last

+

There are no jobs for tool "${tool_id}"
${job[2]} ${job[3]} ${job[1]}
%if len( jobs ) == 0: @@ -35,6 +40,7 @@ ${get_css()} <% ctr = 0 %> %for job in jobs: + <% key = job[2] + job[3] %> %if ctr % 2 == 1: %else: @@ -42,6 +48,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "line", "/ day")} + <% ctr += 1 %> %endfor From 55eadd41f42fb8ddf9c46a21e5c1e3f8e2fe6d91 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 16 Jun 2015 15:38:38 -0500 Subject: [PATCH 03/68] Build with grunt --- static/scripts/libs/jquery.sparklines.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 static/scripts/libs/jquery.sparklines.js diff --git a/static/scripts/libs/jquery.sparklines.js b/static/scripts/libs/jquery.sparklines.js new file mode 100644 index 00000000000..7254f9a3725 --- /dev/null +++ b/static/scripts/libs/jquery.sparklines.js @@ -0,0 +1,3 @@ +!function(a,b,c){!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.sparkline&&a(jQuery)}(function(d){"use strict";var e,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,I,J,K={},L=0;e=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:c,normalRangeMax:c,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:c,chartRangeMax:c,chartRangeMinX:c,chartRangeMaxX:c,tooltipFormat:new g('● {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:c,nullColor:c,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,colorMap:c,tooltipFormat:new g('● {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new g('● {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:c,thresholdValue:0,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,tooltipFormat:new g("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:c,tooltipFormat:new g("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new g('● {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:c,targetColor:"#4a2",chartRangeMax:c,chartRangeMin:c,tooltipFormat:new g("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},D='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',f=function(){var a,b;return a=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(a.prototype=d.extend(new arguments[0],arguments[arguments.length-1]),a._super=arguments[0].prototype):a.prototype=arguments[arguments.length-1],arguments.length>2&&(b=Array.prototype.slice.call(arguments,1,-1),b.unshift(a.prototype),d.extend.apply(d,b))):a.prototype=arguments[0],a.prototype.cls=a,a},d.SPFormatClass=g=f({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,d){var e,f,g,h,i,j=this,k=a;return this.format.replace(this.fre,function(){var a;return f=arguments[1],g=arguments[3],e=j.precre.exec(f),e?(i=e[2],f=e[1]):i=!1,h=k[f],h===c?"":g&&b&&b[g]?(a=b[g],a.get?b[g].get(h)||h:b[g][h]||h):(m(h)&&(h=d.get("numberFormatter")?d.get("numberFormatter")(h):r(h,i,d.get("numberDigitGroupCount"),d.get("numberDigitGroupSep"),d.get("numberDecimalMark"))),h)})}}),d.spformat=function(a,b){return new g(a,b)},h=function(a,b,c){return b>a?b:a>c?c:a},i=function(a,c){var d;return 2===c?(d=b.floor(a.length/2),a.length%2?a[d]:(a[d-1]+a[d])/2):a.length%2?(d=(a.length*c+c)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1]):(d=(a.length*c+2)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1])},j=function(a){var b;switch(a){case"undefined":a=c;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},k=function(a){var b,c=[];for(b=a.length;b--;)c[b]=j(a[b]);return c},l=function(a,b){var c,d,e=[];for(c=0,d=a.length;d>c;c++)a[c]!==b&&e.push(a[c]);return e},m=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},r=function(a,b,c,e,f){var g,h;for(a=(b===!1?parseFloat(a).toString():a.toFixed(b)).split(""),g=(g=d.inArray(".",a))<0?a.length:g,g0;h-=c)a.splice(h,0,e);return a.join("")},n=function(a,b,c){var d;for(d=b.length;d--;)if((!c||null!==b[d])&&b[d]!==a)return!1;return!0},o=function(a){var b,c=0;for(b=a.length;b--;)c+="number"==typeof a[b]?a[b]:0;return c},q=function(a){return d.isArray(a)?a:[a]},p=function(b){var c;a.createStyleSheet?a.createStyleSheet().cssText=b:(c=a.createElement("style"),c.type="text/css",a.getElementsByTagName("head")[0].appendChild(c),c["string"==typeof a.body.style.WebkitAppearance?"innerText":"innerHTML"]=b)},d.fn.simpledraw=function(b,e,f,g){var h,i;if(f&&(h=this.data("_jqs_vcanvas")))return h;if(d.fn.sparkline.canvas===!1)return!1;if(d.fn.sparkline.canvas===c){var j=a.createElement("canvas");if(j.getContext&&j.getContext("2d"))d.fn.sparkline.canvas=function(a,b,c,d){return new H(a,b,c,d)};else{if(!a.namespaces||a.namespaces.v)return d.fn.sparkline.canvas=!1,!1;a.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),d.fn.sparkline.canvas=function(a,b,c){return new I(a,b,c)}}}return b===c&&(b=d(this).innerWidth()),e===c&&(e=d(this).innerHeight()),h=d.fn.sparkline.canvas(b,e,this,g),i=d(this).data("_jqs_mhandler"),i&&i.registerCanvas(h),h},d.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},d.RangeMapClass=s=f({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&"string"==typeof b&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=0===c[0].length?-(1/0):parseFloat(c[0]),c[1]=0===c[1].length?1/0:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b,d,e,f=this.rangelist;if((e=this.map[a])!==c)return e;if(f)for(b=f.length;b--;)if(d=f[b],d[0]<=a&&d[1]>=a)return d[2];return c}}),d.range_map=function(a){return new s(a)},t=f({init:function(a,b){var c=d(a);this.$el=c,this.options=b,this.currentPageX=0,this.currentPageY=0,this.el=a,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!b.get("disableTooltips"),this.highlightEnabled=!b.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(a){var b=d(a.canvas);this.canvas=a,this.$canvas=b,b.mouseenter(d.proxy(this.mouseenter,this)),b.mouseleave(d.proxy(this.mouseleave,this)),b.click(d.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=c)},mouseclick:function(a){var b=d.Event("sparklineClick");b.originalEvent=a,b.sparklines=this.splist,this.$el.trigger(b)},mouseenter:function(b){d(a.body).unbind("mousemove.jqs"),d(a.body).bind("mousemove.jqs",d.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new u(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){d(a.body).unbind("mousemove.jqs");var b,c,e=this.splist,f=e.length,g=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),c=0;f>c;c++)b=e[c],b.clearRegionHighlight()&&(g=!0);g&&this.canvas.render()},mousemove:function(a){this.currentPageX=a.pageX,this.currentPageY=a.pageY,this.currentEl=a.target,this.tooltip&&this.tooltip.updatePosition(a.pageX,a.pageY),this.updateDisplay()},updateDisplay:function(){var a,b,c,e,f,g=this.splist,h=g.length,i=!1,j=this.$canvas.offset(),k=this.currentPageX-j.left,l=this.currentPageY-j.top;if(this.over){for(c=0;h>c;c++)b=g[c],e=b.setRegionHighlight(this.currentEl,k,l),e&&(i=!0);if(i){if(f=d.Event("sparklineRegionChange"),f.sparklines=this.splist,this.$el.trigger(f),this.tooltip){for(a="",c=0;h>c;c++)b=g[c],a+=b.getCurrentRegionTooltip();this.tooltip.setContent(a)}this.disableHighlight||this.canvas.render()}null===e&&this.mouseleave()}}}),u=f({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(b){var c,e=b.get("tooltipClassname","jqstooltip"),f=this.sizeStyle;this.container=b.get("tooltipContainer")||a.body,this.tooltipOffsetX=b.get("tooltipOffsetX",10),this.tooltipOffsetY=b.get("tooltipOffsetY",12),d("#jqssizetip").remove(),d("#jqstooltip").remove(),this.sizetip=d("
",{id:"jqssizetip",style:f,"class":e}),this.tooltip=d("
",{id:"jqstooltip","class":e}).appendTo(this.container),c=this.tooltip.offset(),this.offsetLeft=c.left,this.offsetTop=c.top,this.hidden=!0,d(window).unbind("resize.jqs scroll.jqs"),d(window).bind("resize.jqs scroll.jqs",d.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=d(window).scrollTop(),this.scrollLeft=d(window).scrollLeft(),this.scrollRight=this.scrollLeft+d(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){return a?(this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),void(this.hidden&&(this.hidden=!1,this.updatePosition()))):(this.tooltip.css("visibility","hidden"),void(this.hidden=!0))},updatePosition:function(a,b){if(a===c){if(this.mousex===c)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;this.height&&this.width&&!this.hidden&&(b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,bthis.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b}))},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=c,d(window).unbind("resize.jqs scroll.jqs")}}),E=function(){p(D)},d(E),J=[],d.fn.sparkline=function(b,e){return this.each(function(){var f,g,h=new d.fn.sparkline.options(this,e),i=d(this);if(f=function(){var e,f,g,j,k,l,m;return"html"===b||b===c?(m=this.getAttribute(h.get("tagValuesAttribute")),(m===c||null===m)&&(m=i.html()),e=m.replace(/(^\s*\s*$)|\s+/g,"").split(",")):e=b,f="auto"===h.get("width")?e.length*h.get("defaultPixelsPerValue"):h.get("width"),"auto"===h.get("height")?h.get("composite")&&d.data(this,"_jqs_vcanvas")||(j=a.createElement("span"),j.innerHTML="a",i.html(j),g=d(j).innerHeight()||d(j).height(),d(j).remove(),j=null):g=h.get("height"),h.get("disableInteraction")?k=!1:(k=d.data(this,"_jqs_mhandler"),k?h.get("composite")||k.reset():(k=new t(this,h),d.data(this,"_jqs_mhandler",k))),h.get("composite")&&!d.data(this,"_jqs_vcanvas")?void(d.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),d.data(this,"_jqs_errnotify",!0))):(l=new(d.fn.sparkline[h.get("type")])(this,e,h,f,g),l.render(),void(k&&k.registerSparkline(l)))},d(this).html()&&!h.get("disableHiddenCheck")&&d(this).is(":hidden")||!d(this).parents("body").length){if(!h.get("composite")&&d.data(this,"_jqs_pending"))for(g=J.length;g;g--)J[g-1][0]==this&&J.splice(g-1,1);J.push([this,f]),d.data(this,"_jqs_pending",!0)}else f.call(this)})},d.fn.sparkline.defaults=e(),d.sparkline_display_visible=function(){var a,b,c,e=[];for(b=0,c=J.length;c>b;b++)a=J[b][0],d(a).is(":visible")&&!d(a).parents().is(":hidden")?(J[b][1].call(a),d.data(J[b][0],"_jqs_pending",!1),e.push(b)):d(a).closest("html").length||d.data(a,"_jqs_pending")||(d.data(J[b][0],"_jqs_pending",!1),e.push(b));for(b=e.length;b;b--)J.splice(e[b-1],1)},d.fn.sparkline.options=f({init:function(a,b){var c,e,f,g;this.userOptions=b=b||{},this.tag=a,this.tagValCache={},e=d.fn.sparkline.defaults,f=e.common,this.tagOptionsPrefix=b.enableTagOptions&&(b.tagOptionsPrefix||f.tagOptionsPrefix),g=this.getTagSetting("type"),c=g===K?e[b.type||f.type]:e[g],this.mergedOptions=d.extend({},f,c,b)},getTagSetting:function(a){var b,d,e,f,g=this.tagOptionsPrefix;if(g===!1||g===c)return K;if(this.tagValCache.hasOwnProperty(a))b=this.tagValCache.key;else{if(b=this.tag.getAttribute(g+a),b===c||null===b)b=K;else if("["===b.substr(0,1))for(b=b.substr(1,b.length-2).split(","),d=b.length;d--;)b[d]=j(b[d].replace(/(^\s*)|(\s*$)/g,""));else if("{"===b.substr(0,1))for(e=b.substr(1,b.length-2).split(","),b={},d=e.length;d--;)f=e[d].split(":",2),b[f[0].replace(/(^\s*)|(\s*$)/g,"")]=j(f[1].replace(/(^\s*)|(\s*$)/g,""));else b=j(b);this.tagValCache.key=b}return b},get:function(a,b){var d,e=this.getTagSetting(a);return e!==K?e:(d=this.mergedOptions[a])===c?b:d}}),d.fn.sparkline._base=f({disabled:!1,init:function(a,b,e,f,g){this.el=a,this.$el=d(a),this.values=b,this.options=e,this.width=f,this.height=g,this.currentRegion=c},initTarget:function(){var a=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),a))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return this.disabled?(this.el.innerHTML="",!1):!0},getRegion:function(){},setRegionHighlight:function(a,b,d){var e,f=this.currentRegion,g=!this.options.get("disableHighlight");return b>this.canvasWidth||d>this.canvasHeight||0>b||0>d?null:(e=this.getRegion(a,b,d),f!==e?(f!==c&&g&&this.removeHighlight(),this.currentRegion=e,e!==c&&g&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==c?(this.removeHighlight(),this.currentRegion=c,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(){},getCurrentRegionTooltip:function(){var a,b,e,f,h,i,j,k,l,m,n,o,p,q,r=this.options,s="",t=[];if(this.currentRegion===c)return"";if(a=this.getCurrentRegionFields(),n=r.get("tooltipFormatter"))return n(this,r,a);if(r.get("tooltipChartTitle")&&(s+='
'+r.get("tooltipChartTitle")+"
\n"),b=this.options.get("tooltipFormat"),!b)return"";if(d.isArray(b)||(b=[b]),d.isArray(a)||(a=[a]),j=this.options.get("tooltipFormatFieldlist"),k=this.options.get("tooltipFormatFieldlistKey"),j&&k){for(l=[],i=a.length;i--;)m=a[i][k],-1!=(q=d.inArray(m,j))&&(l[q]=a[i]);a=l}for(e=b.length,p=a.length,i=0;e>i;i++)for(o=b[i],"string"==typeof o&&(o=new g(o)),f=o.fclass||"jqsfield",q=0;p>q;q++)a[q].isNull&&r.get("tooltipSkipNull")||(d.extend(a[q],{prefix:r.get("tooltipPrefix"),suffix:r.get("tooltipSuffix")}),h=o.render(a[q],r.get("tooltipValueLookups"),r),t.push('
'+h+"
"));return t.length?s+t.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,c){var d,e,f,g,i=c.get("highlightColor"),j=c.get("highlightLighten");if(i)return i;if(j&&(d=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a))){for(f=[],e=4===a.length?16:1,g=0;3>g;g++)f[g]=h(b.round(parseInt(d[g+1],16)*e*j),0,255);return"rgb("+f.join(",")+")"}return a}}),v={changeHighlight:function(a){var b,c=this.currentRegion,e=this.target,f=this.regionShapes[c];f&&(b=this.renderRegion(c,a),d.isArray(b)||d.isArray(f)?(e.replaceWithShapes(f,b),this.regionShapes[c]=d.map(b,function(a){return a.id})):(e.replaceWithShape(f,b),this.regionShapes[c]=b.id))},render:function(){var a,b,c,e,f=this.values,g=this.target,h=this.regionShapes;if(this.cls._super.render.call(this)){for(c=f.length;c--;)if(a=this.renderRegion(c))if(d.isArray(a)){for(b=[],e=a.length;e--;)a[e].append(),b.push(a[e].id);h[c]=b}else a.append(),h[c]=a.id;else h[c]=null;g.render()}}},d.fn.sparkline.line=w=f(d.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){w._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b){var d,e=this.regionMap;for(d=e.length;d--;)if(null!==e[d]&&b>=e[d][0]&&b<=e[d][1])return e[d][2];return c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:null===this.yvalues[a],x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a,b,d=this.currentRegion,e=this.target,f=this.vertices[d],g=this.options,h=g.get("spotRadius"),i=g.get("highlightSpotColor"),j=g.get("highlightLineColor");f&&(h&&i&&(a=e.drawCircle(f[0],f[1],h,c,i),this.highlightSpotId=a.id,e.insertAfterShape(this.lastShapeId,a)),j&&(b=e.drawLine(f[0],this.canvasTop,f[0],this.canvasTop+this.canvasHeight,j),this.highlightLineId=b.id,e.insertAfterShape(this.lastShapeId,b)))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a,c,d,e,f,g=this.values,h=g.length,i=this.xvalues,j=this.yvalues,k=this.yminmax;for(a=0;h>a;a++)c=g[a],d="string"==typeof g[a],e="object"==typeof g[a]&&g[a]instanceof Array,f=d&&g[a].split(":"),d&&2===f.length?(i.push(Number(f[0])),j.push(Number(f[1])),k.push(Number(f[1]))):e?(i.push(c[0]),j.push(c[1]),k.push(c[1])):(i.push(a),null===g[a]||"null"===g[a]?j.push(null):(j.push(Number(c)),k.push(Number(c))));this.options.get("xvalues")&&(i=this.options.get("xvalues")),this.maxy=this.maxyorg=b.max.apply(b,k),this.miny=this.minyorg=b.min.apply(b,k),this.maxx=b.max.apply(b,i),this.minx=b.min.apply(b,i),this.xvalues=i,this.yvalues=j,this.yminmax=k},processRangeOptions:function(){var a=this.options,b=a.get("normalRangeMin"),d=a.get("normalRangeMax");b!==c&&(bthis.maxy&&(this.maxy=d)),a.get("chartRangeMin")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMin")this.maxy)&&(this.maxy=a.get("chartRangeMax")),a.get("chartRangeMinX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMinX")this.maxx)&&(this.maxx=a.get("chartRangeMaxX"))},drawNormalRange:function(a,d,e,f,g){var h=this.options.get("normalRangeMin"),i=this.options.get("normalRangeMax"),j=d+b.round(e-e*((i-this.miny)/g)),k=b.round(e*(i-h)/g);this.target.drawRect(a,j,f,k,c,this.options.get("normalRangeColor")).append()},render:function(){var a,e,f,g,h,i,j,k,l,m,n,o,p,q,r,t,u,v,x,y,z,A,B,C,D,E=this.options,F=this.target,G=this.canvasWidth,H=this.canvasHeight,I=this.vertices,J=E.get("spotRadius"),K=this.regionMap;if(w._super.render.call(this)&&(this.scanValues(),this.processRangeOptions(),B=this.xvalues,C=this.yvalues,this.yminmax.length&&!(this.yvalues.length<2))){for(g=h=0,a=this.maxx-this.minx===0?1:this.maxx-this.minx,e=this.maxy-this.miny===0?1:this.maxy-this.miny,f=this.yvalues.length-1,J&&(4*J>G||4*J>H)&&(J=0),J&&(z=E.get("highlightSpotColor")&&!E.get("disableInteraction"),(z||E.get("minSpotColor")||E.get("spotColor")&&C[f]===this.miny)&&(H-=b.ceil(J)),(z||E.get("maxSpotColor")||E.get("spotColor")&&C[f]===this.maxy)&&(H-=b.ceil(J),g+=b.ceil(J)),(z||(E.get("minSpotColor")||E.get("maxSpotColor"))&&(C[0]===this.miny||C[0]===this.maxy))&&(h+=b.ceil(J),G-=b.ceil(J)),(z||E.get("spotColor")||E.get("minSpotColor")||E.get("maxSpotColor")&&(C[f]===this.miny||C[f]===this.maxy))&&(G-=b.ceil(J))),H--,E.get("normalRangeMin")===c||E.get("drawNormalOnTop")||this.drawNormalRange(h,g,H,G,e),j=[],k=[j],q=r=null,t=C.length,D=0;t>D;D++)l=B[D],n=B[D+1],m=C[D],o=h+b.round((l-this.minx)*(G/a)),p=t-1>D?h+b.round((n-this.minx)*(G/a)):G,r=o+(p-o)/2,K[D]=[q||0,r,D],q=r,null===m?D&&(null!==C[D-1]&&(j=[],k.push(j)),I.push(null)):(mthis.maxy&&(m=this.maxy),j.length||j.push([o,g+H]),i=[o,g+b.round(H-H*((m-this.miny)/e))],j.push(i),I.push(i));for(u=[],v=[],x=k.length,D=0;x>D;D++)j=k[D],j.length&&(E.get("fillColor")&&(j.push([j[j.length-1][0],g+H]),v.push(j.slice(0)),j.pop()),j.length>2&&(j[0]=[j[0][0],j[1][1]]),u.push(j));for(x=v.length,D=0;x>D;D++)F.drawShape(v[D],E.get("fillColor"),E.get("fillColor")).append();for(E.get("normalRangeMin")!==c&&E.get("drawNormalOnTop")&&this.drawNormalRange(h,g,H,G,e),x=u.length,D=0;x>D;D++)F.drawShape(u[D],E.get("lineColor"),c,E.get("lineWidth")).append();if(J&&E.get("valueSpots"))for(y=E.get("valueSpots"),y.get===c&&(y=new s(y)),D=0;t>D;D++)A=y.get(C[D]),A&&F.drawCircle(h+b.round((B[D]-this.minx)*(G/a)),g+b.round(H-H*((C[D]-this.miny)/e)),J,c,A).append();J&&E.get("spotColor")&&null!==C[f]&&F.drawCircle(h+b.round((B[B.length-1]-this.minx)*(G/a)),g+b.round(H-H*((C[f]-this.miny)/e)),J,c,E.get("spotColor")).append(),this.maxy!==this.minyorg&&(J&&E.get("minSpotColor")&&(l=B[d.inArray(this.minyorg,C)],F.drawCircle(h+b.round((l-this.minx)*(G/a)),g+b.round(H-H*((this.minyorg-this.miny)/e)),J,c,E.get("minSpotColor")).append()),J&&E.get("maxSpotColor")&&(l=B[d.inArray(this.maxyorg,C)],F.drawCircle(h+b.round((l-this.minx)*(G/a)),g+b.round(H-H*((this.maxyorg-this.miny)/e)),J,c,E.get("maxSpotColor")).append())),this.lastShapeId=F.getLastShapeId(),this.canvasTop=g,F.render()}}}),d.fn.sparkline.bar=x=f(d.fn.sparkline._base,v,{type:"bar",init:function(a,e,f,g,i){var m,n,o,p,q,r,t,u,v,w,y,z,A,B,C,D,E,F,G,H,I,J,K=parseInt(f.get("barWidth"),10),L=parseInt(f.get("barSpacing"),10),M=f.get("chartRangeMin"),N=f.get("chartRangeMax"),O=f.get("chartRangeClip"),P=1/0,Q=-(1/0);for(x._super.init.call(this,a,e,f,g,i),r=0,t=e.length;t>r;r++)H=e[r],m="string"==typeof H&&H.indexOf(":")>-1,(m||d.isArray(H))&&(C=!0,m&&(H=e[r]=k(H.split(":"))),H=l(H,null),n=b.min.apply(b,H),o=b.max.apply(b,H),P>n&&(P=n),o>Q&&(Q=o));this.stacked=C,this.regionShapes={},this.barWidth=K,this.barSpacing=L,this.totalBarWidth=K+L,this.width=g=e.length*K+(e.length-1)*L,this.initTarget(),O&&(A=M===c?-(1/0):M,B=N===c?1/0:N),q=[],p=C?[]:q;var R=[],S=[];for(r=0,t=e.length;t>r;r++)if(C)for(D=e[r],e[r]=G=[],R[r]=0,p[r]=S[r]=0,E=0,F=D.length;F>E;E++)H=G[E]=O?h(D[E],A,B):D[E],null!==H&&(H>0&&(R[r]+=H),0>P&&Q>0?0>H?S[r]+=b.abs(H):p[r]+=H:p[r]+=b.abs(H-(0>H?Q:P)),q.push(H));else H=O?h(e[r],A,B):e[r],H=e[r]=j(H),null!==H&&q.push(H);this.max=z=b.max.apply(b,q),this.min=y=b.min.apply(b,q),this.stackMax=Q=C?b.max.apply(b,R):z,this.stackMin=P=C?b.min.apply(b,q):y,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")z)&&(z=f.get("chartRangeMax")),this.zeroAxis=v=f.get("zeroAxis",!0),w=0>=y&&z>=0&&v?0:0==v?y:y>0?y:z,this.xaxisOffset=w,u=C?b.max.apply(b,p)+b.max.apply(b,S):z-y,this.canvasHeightEf=v&&0>y?this.canvasHeight-2:this.canvasHeight-1,w>y?(J=C&&z>=0?Q:z,I=(J-w)/u*this.canvasHeight,I!==b.ceil(I)&&(this.canvasHeightEf-=2,I=b.ceil(I))):I=this.canvasHeight,this.yoffset=I,d.isArray(f.get("colorMap"))?(this.colorMapByIndex=f.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=f.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new s(this.colorMapByValue))),this.range=u},getRegion:function(a,d){var e=b.floor(d/this.totalBarWidth);return 0>e||e>=this.values.length?c:e},getCurrentRegionFields:function(){var a,b,c=this.currentRegion,d=q(this.values[c]),e=[];for(b=d.length;b--;)a=d[b],e.push({isNull:null===a,value:a,color:this.calcColor(b,a,c),offset:c});return e},calcColor:function(a,b,e){var f,g,h=this.colorMapByIndex,i=this.colorMapByValue,j=this.options;return f=j.get(this.stacked?"stackedBarColor":0>b?"negBarColor":"barColor"),0===b&&j.get("zeroColor")!==c&&(f=j.get("zeroColor")),i&&(g=i.get(b))?f=g:h&&h.length>e&&(f=h[e]),d.isArray(f)?f[a%f.length]:f},renderRegion:function(a,e){var f,g,h,i,j,k,l,m,o,p,q=this.values[a],r=this.options,s=this.xaxisOffset,t=[],u=this.range,v=this.stacked,w=this.target,x=a*this.totalBarWidth,y=this.canvasHeightEf,z=this.yoffset;if(q=d.isArray(q)?q:[q],l=q.length,m=q[0],i=n(null,q),p=n(s,q,!0),i)return r.get("nullColor")?(h=e?r.get("nullColor"):this.calcHighlightColor(r.get("nullColor"),r),f=z>0?z-1:z,w.drawRect(x,f,this.barWidth-1,0,h,h)):c;for(j=z,k=0;l>k;k++){if(m=q[k],v&&m===s){if(!p||o)continue;o=!0}g=u>0?b.floor(y*(b.abs(m-s)/u))+1:1,s>m||m===s&&0===z?(f=j,j+=g):(f=z-g,z-=g),h=this.calcColor(k,m,a),e&&(h=this.calcHighlightColor(h,r)),t.push(w.drawRect(x,f,this.barWidth-1,g-1,h,h))}return 1===t.length?t[0]:t}}),d.fn.sparkline.tristate=y=f(d.fn.sparkline._base,v,{type:"tristate",init:function(a,b,e,f,g){var h=parseInt(e.get("barWidth"),10),i=parseInt(e.get("barSpacing"),10);y._super.init.call(this,a,b,e,f,g),this.regionShapes={},this.barWidth=h,this.barSpacing=i,this.totalBarWidth=h+i,this.values=d.map(b,Number),this.width=f=b.length*h+(b.length-1)*i,d.isArray(e.get("colorMap"))?(this.colorMapByIndex=e.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=e.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new s(this.colorMapByValue))),this.initTarget()},getRegion:function(a,c){return b.floor(c/this.totalBarWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],color:this.calcColor(this.values[a],a),offset:a}},calcColor:function(a,b){var c,d,e=this.values,f=this.options,g=this.colorMapByIndex,h=this.colorMapByValue;return c=h&&(d=h.get(a))?d:g&&g.length>b?g[b]:f.get(e[b]<0?"negBarColor":e[b]>0?"posBarColor":"zeroBarColor")},renderRegion:function(a,c){var d,e,f,g,h,i,j=this.values,k=this.options,l=this.target;return d=l.pixelHeight,f=b.round(d/2),g=a*this.totalBarWidth,j[a]<0?(h=f,e=f-1):j[a]>0?(h=0,e=f-1):(h=f-1,e=2),i=this.calcColor(j[a],a),null!==i?(c&&(i=this.calcHighlightColor(i,k)),l.drawRect(g,h,this.barWidth-1,e-1,i,i)):void 0}}),d.fn.sparkline.discrete=z=f(d.fn.sparkline._base,v,{type:"discrete",init:function(a,e,f,g,h){z._super.init.call(this,a,e,f,g,h),this.regionShapes={},this.values=e=d.map(e,Number),this.min=b.min.apply(b,e),this.max=b.max.apply(b,e),this.range=this.max-this.min,this.width=g="auto"===f.get("width")?2*e.length:this.width,this.interval=b.floor(g/e.length),this.itemWidth=g/e.length,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")this.max)&&(this.max=f.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight="auto"===f.get("lineHeight")?b.round(.3*this.canvasHeight):f.get("lineHeight"))},getRegion:function(a,c){return b.floor(c/this.itemWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],offset:a}},renderRegion:function(a,c){var d,e,f,g,i=this.values,j=this.options,k=this.min,l=this.max,m=this.range,n=this.interval,o=this.target,p=this.canvasHeight,q=this.lineHeight,r=p-q;return e=h(i[a],k,l),g=a*n,d=b.round(r-r*((e-k)/m)),f=j.get(j.get("thresholdColor")&&eh?h:0:e.get("base"),this.min=h,this.max=i,this.range=i-h,this.shapes={},this.valueShapes={},this.regiondata={},this.width=f="auto"===e.get("width")?"4.0em":f,this.target=this.$el.simpledraw(f,g,e.get("composite")),d.length||(this.disabled=!0),this.initTarget()},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{fieldkey:a.substr(0,1),value:this.values[a.substr(1)],region:a}},changeHighlight:function(a){var b,c=this.currentRegion,d=this.valueShapes[c];switch(delete this.shapes[d],c.substr(0,1)){case"r":b=this.renderRange(c.substr(1),a);break;case"p":b=this.renderPerformance(a);break;case"t":b=this.renderTarget(a)}this.valueShapes[c]=b.id,this.shapes[b.id]=c,this.target.replaceWithShape(d,b)},renderRange:function(a,c){var d=this.values[a],e=b.round(this.canvasWidth*((d-this.min)/this.range)),f=this.options.get("rangeColors")[a-2];return c&&(f=this.calcHighlightColor(f,this.options)),this.target.drawRect(0,0,e-1,this.canvasHeight-1,f,f)},renderPerformance:function(a){var c=this.values[1],d=b.round(this.canvasWidth*((c-this.min)/this.range)),e=this.options.get("performanceColor");return a&&(e=this.calcHighlightColor(e,this.options)),this.target.drawRect(0,b.round(.3*this.canvasHeight),d-1,b.round(.4*this.canvasHeight)-1,e,e)},renderTarget:function(a){var c=this.values[0],d=b.round(this.canvasWidth*((c-this.min)/this.range)-this.options.get("targetWidth")/2),e=b.round(.1*this.canvasHeight),f=this.canvasHeight-2*e,g=this.options.get("targetColor");return a&&(g=this.calcHighlightColor(g,this.options)),this.target.drawRect(d,e,this.options.get("targetWidth")-1,f-1,g,g)},render:function(){var a,b,c=this.values.length,d=this.target;if(A._super.render.call(this)){for(a=2;c>a;a++)b=this.renderRange(a).append(),this.shapes[b.id]="r"+a,this.valueShapes["r"+a]=b.id;null!==this.values[1]&&(b=this.renderPerformance().append(),this.shapes[b.id]="p1",this.valueShapes.p1=b.id),null!==this.values[0]&&(b=this.renderTarget().append(),this.shapes[b.id]="t0",this.valueShapes.t0=b.id),d.render()}}}),d.fn.sparkline.pie=B=f(d.fn.sparkline._base,{type:"pie",init:function(a,c,e,f,g){var h,i=0;if(B._super.init.call(this,a,c,e,f,g),this.shapes={},this.valueShapes={},this.values=c=d.map(c,Number),"auto"===e.get("width")&&(this.width=this.height),c.length>0)for(h=c.length;h--;)i+=c[h];this.total=i,this.initTarget(),this.radius=b.floor(b.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],percent:this.values[a]/this.total*100,color:this.options.get("sliceColors")[a%this.options.get("sliceColors").length],offset:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.renderSlice(b,a),d=this.valueShapes[b];delete this.shapes[d],this.target.replaceWithShape(d,c),this.valueShapes[b]=c.id,this.shapes[c.id]=b},renderSlice:function(a,d){var e,f,g,h,i,j=this.target,k=this.options,l=this.radius,m=k.get("borderWidth"),n=k.get("offset"),o=2*b.PI,p=this.values,q=this.total,r=n?2*b.PI*(n/360):0;for(h=p.length,g=0;h>g;g++){if(e=r,f=r,q>0&&(f=r+o*(p[g]/q)),a===g)return i=k.get("sliceColors")[g%k.get("sliceColors").length],d&&(i=this.calcHighlightColor(i,k)),j.drawPieSlice(l,l,l-m,e,f,c,i);r=f}},render:function(){var a,d,e=this.target,f=this.values,g=this.options,h=this.radius,i=g.get("borderWidth");if(B._super.render.call(this)){ +for(i&&e.drawCircle(h,h,b.floor(h-i/2),g.get("borderColor"),c,i).append(),d=f.length;d--;)f[d]&&(a=this.renderSlice(d).append(),this.valueShapes[d]=a.id,this.shapes[a.id]=d);e.render()}}}),d.fn.sparkline.box=C=f(d.fn.sparkline._base,{type:"box",init:function(a,b,c,e,f){C._super.init.call(this,a,b,c,e,f),this.values=d.map(b,Number),this.width="auto"===c.get("width")?"4.0em":e,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var a=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]}];return this.loutlier!==c&&a.push({field:"lo",value:this.loutlier}),this.routlier!==c&&a.push({field:"ro",value:this.routlier}),this.lwhisker!==c&&a.push({field:"lw",value:this.lwhisker}),this.rwhisker!==c&&a.push({field:"rw",value:this.rwhisker}),a},render:function(){var a,d,e,f,g,h,j,k,l,m,n,o=this.target,p=this.values,q=p.length,r=this.options,s=this.canvasWidth,t=this.canvasHeight,u=r.get("chartRangeMin")===c?b.min.apply(b,p):r.get("chartRangeMin"),v=r.get("chartRangeMax")===c?b.max.apply(b,p):r.get("chartRangeMax"),w=0;if(C._super.render.call(this)){if(r.get("raw"))r.get("showOutliers")&&p.length>5?(d=p[0],a=p[1],f=p[2],g=p[3],h=p[4],j=p[5],k=p[6]):(a=p[0],f=p[1],g=p[2],h=p[3],j=p[4]);else if(p.sort(function(a,b){return a-b}),f=i(p,1),g=i(p,2),h=i(p,3),e=h-f,r.get("showOutliers")){for(a=j=c,l=0;q>l;l++)a===c&&p[l]>f-e*r.get("outlierIQR")&&(a=p[l]),p[l]d&&o.drawCircle((d-u)*n+w,t/2,r.get("spotRadius"),r.get("outlierLineColor"),r.get("outlierFillColor")).append(),k>j&&o.drawCircle((k-u)*n+w,t/2,r.get("spotRadius"),r.get("outlierLineColor"),r.get("outlierFillColor")).append()),o.drawRect(b.round((f-u)*n+w),b.round(.1*t),b.round((h-f)*n),b.round(.8*t),r.get("boxLineColor"),r.get("boxFillColor")).append(),o.drawLine(b.round((a-u)*n+w),b.round(t/2),b.round((f-u)*n+w),b.round(t/2),r.get("lineColor")).append(),o.drawLine(b.round((a-u)*n+w),b.round(t/4),b.round((a-u)*n+w),b.round(t-t/4),r.get("whiskerColor")).append(),o.drawLine(b.round((j-u)*n+w),b.round(t/2),b.round((h-u)*n+w),b.round(t/2),r.get("lineColor")).append(),o.drawLine(b.round((j-u)*n+w),b.round(t/4),b.round((j-u)*n+w),b.round(t-t/4),r.get("whiskerColor")).append(),o.drawLine(b.round((g-u)*n+w),b.round(.1*t),b.round((g-u)*n+w),b.round(.9*t),r.get("medianColor")).append(),r.get("target")&&(m=b.ceil(r.get("spotRadius")),o.drawLine(b.round((r.get("target")-u)*n+w),b.round(t/2-m),b.round((r.get("target")-u)*n+w),b.round(t/2+m),r.get("targetColor")).append(),o.drawLine(b.round((r.get("target")-u)*n+w-m),b.round(t/2),b.round((r.get("target")-u)*n+w+m),b.round(t/2),r.get("targetColor")).append()),o.render()}}}),F=f({init:function(a,b,c,d){this.target=a,this.id=b,this.type=c,this.args=d},append:function(){return this.target.appendShape(this),this}}),G=f({_pxregex:/(\d+)(px)?\s*$/i,init:function(a,b,c){a&&(this.width=a,this.height=b,this.target=c,this.lastShapeId=null,c[0]&&(c=c[0]),d.data(c,"_jqs_vcanvas",this))},drawLine:function(a,b,c,d,e,f){return this.drawShape([[a,b],[c,d]],e,f)},drawShape:function(a,b,c,d){return this._genShape("Shape",[a,b,c,d])},drawCircle:function(a,b,c,d,e,f){return this._genShape("Circle",[a,b,c,d,e,f])},drawPieSlice:function(a,b,c,d,e,f,g){return this._genShape("PieSlice",[a,b,c,d,e,f,g])},drawRect:function(a,b,c,d,e,f){return this._genShape("Rect",[a,b,c,d,e,f])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(a,b){d(b).html(a)},_calculatePixelDims:function(a,b,c){var e;e=this._pxregex.exec(b),this.pixelHeight=e?e[1]:d(c).height(),e=this._pxregex.exec(a),this.pixelWidth=e?e[1]:d(c).width()},_genShape:function(a,b){var c=L++;return b.unshift(c),new F(this,c,a,b)},appendShape:function(){alert("appendShape not implemented")},replaceWithShape:function(){alert("replaceWithShape not implemented")},insertAfterShape:function(){alert("insertAfterShape not implemented")},removeShapeId:function(){alert("removeShapeId not implemented")},getShapeAt:function(){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),H=f(G,{init:function(b,e,f,g){H._super.init.call(this,b,e,f),this.canvas=a.createElement("canvas"),f[0]&&(f=f[0]),d.data(f,"_jqs_vcanvas",this),d(this.canvas).css({display:"inline-block",width:b,height:e,verticalAlign:"top"}),this._insert(this.canvas,f),this._calculatePixelDims(b,e,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=g,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c,d(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(a,b,d){var e=this.canvas.getContext("2d");return a!==c&&(e.strokeStyle=a),e.lineWidth=d===c?1:d,b!==c&&(e.fillStyle=b),e},reset:function(){var a=this._getContext();a.clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c},_drawShape:function(a,b,d,e,f){var g,h,i=this._getContext(d,e,f);for(i.beginPath(),i.moveTo(b[0][0]+.5,b[0][1]+.5),g=1,h=b.length;h>g;g++)i.lineTo(b[g][0]+.5,b[g][1]+.5);d!==c&&i.stroke(),e!==c&&i.fill(),this.targetX!==c&&this.targetY!==c&&i.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawCircle:function(a,d,e,f,g,h,i){var j=this._getContext(g,h,i);j.beginPath(),j.arc(d,e,f,0,2*b.PI,!1),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a),g!==c&&j.stroke(),h!==c&&j.fill()},_drawPieSlice:function(a,b,d,e,f,g,h,i){var j=this._getContext(h,i);j.beginPath(),j.moveTo(b,d),j.arc(b,d,e,f,g,!1),j.lineTo(b,d),j.closePath(),h!==c&&j.stroke(),i&&j.fill(),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b+d,c],[b+d,c+e],[b,c+e],[b,c]],f,g)},appendShape:function(a){return this.shapes[a.id]=a,this.shapeseq.push(a.id),this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c,d=this.shapeseq;for(this.shapes[b.id]=b,c=d.length;c--;)d[c]==a&&(d[c]=b.id);delete this.shapes[a]},replaceWithShapes:function(a,b){var c,d,e,f=this.shapeseq,g={};for(d=a.length;d--;)g[a[d]]=!0;for(d=f.length;d--;)c=f[d],g[c]&&(f.splice(d,1),delete this.shapes[c],e=d);for(d=b.length;d--;)f.splice(e,0,b[d].id),this.shapes[b[d].id]=b[d]},insertAfterShape:function(a,b){var c,d=this.shapeseq;for(c=d.length;c--;)if(d[c]===a)return d.splice(c+1,0,b.id),void(this.shapes[b.id]=b)},removeShapeId:function(a){var b,c=this.shapeseq;for(b=c.length;b--;)if(c[b]===a){c.splice(b,1);break}delete this.shapes[a]},getShapeAt:function(a,b,c){return this.targetX=b,this.targetY=c,this.render(),this.currentTargetShapeId},render:function(){var a,b,c,d=this.shapeseq,e=this.shapes,f=d.length,g=this._getContext();for(g.clearRect(0,0,this.pixelWidth,this.pixelHeight),c=0;f>c;c++)a=d[c],b=e[a],this["_draw"+b.type].apply(this,b.args);this.interact||(this.shapes={},this.shapeseq=[])}}),I=f(G,{init:function(b,c,e){var f;I._super.init.call(this,b,c,e),e[0]&&(e=e[0]),d.data(e,"_jqs_vcanvas",this),this.canvas=a.createElement("span"),d(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:b,height:c,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,e),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,f='',this.canvas.insertAdjacentHTML("beforeEnd",f),this.group=d(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(a,b,d,e,f){var g,h,i,j,k,l,m,n=[];for(m=0,l=b.length;l>m;m++)n[m]=""+b[m][0]+","+b[m][1];return g=n.splice(0,1),f=f===c?1:f,h=d===c?' stroked="false" ':' strokeWeight="'+f+'px" strokeColor="'+d+'" ',i=e===c?' filled="false"':' fillColor="'+e+'" filled="true" ',j=n[0]===n[n.length-1]?"x ":"",k=' '},_drawCircle:function(a,b,d,e,f,g,h){var i,j,k;return b-=e,d-=e,i=f===c?' stroked="false" ':' strokeWeight="'+h+'px" strokeColor="'+f+'" ',j=g===c?' filled="false"':' fillColor="'+g+'" filled="true" ',k=''},_drawPieSlice:function(a,d,e,f,g,h,i,j){var k,l,m,n,o,p,q,r;if(g===h)return"";if(h-g===2*b.PI&&(g=0,h=2*b.PI),l=d+b.round(b.cos(g)*f),m=e+b.round(b.sin(g)*f),n=d+b.round(b.cos(h)*f),o=e+b.round(b.sin(h)*f),l===n&&m===o){if(h-g ')},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b,c+e],[b+d,c+e],[b+d,c],[b,c]],f,g)},reset:function(){this.group.innerHTML=""},appendShape:function(a){var b=this["_draw"+a.type].apply(this,a.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",b):this.prerender+=b,this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].outerHTML=e},replaceWithShapes:function(a,b){var c,e=d("#jqsshape"+a[0]),f="",g=b.length;for(c=0;g>c;c++)f+=this["_draw"+b[c].type].apply(this,b[c].args);for(e[0].outerHTML=f,c=1;c Date: Tue, 16 Jun 2015 15:42:43 -0500 Subject: [PATCH 04/68] Bug fix for page crash --- lib/galaxy/webapps/reports/controllers/jobs.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 848d38829f0..1f2e32a43d3 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -527,6 +527,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, + trends=trends, jobs=jobs, message=message, is_user_jobs_only=monitor_user_id ) From eca0329d26b607fa208bd9c07240d8511dfa7d3d Mon Sep 17 00:00:00 2001 From: Airistotal Date: Wed, 17 Jun 2015 13:01:19 -0500 Subject: [PATCH 05/68] Refactoring the creation of tool tips --- .../webapps/reports/controllers/jobs.py | 61 +++++++++++-------- .../reports/jobs_specified_month_all.mako | 2 +- .../jobs_specified_month_in_error.mako | 2 +- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 1f2e32a43d3..65f4ee00d23 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -256,6 +256,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): params = util.Params( kwd ) monitor_email = params.get( 'monitor_email', 'monitor@bx.psu.edu' ) specs = sorter( 'date', kwd ) + offset = 0 + limit = 10 sort_id = specs.sort_id order = specs.order arrow = specs.arrow @@ -267,6 +269,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): # If specified_date is not received, we'll default to the current month specified_date = kwd.get( 'specified_date', datetime.utcnow().strftime( "%Y-%m-%d" ) ) specified_month = specified_date[ :7 ] + year, month = map( int, specified_month.split( "-" ) ) start_date = date( year, month, 1 ) end_date = start_date + timedelta( days=calendar.monthrange( year, month )[1] ) @@ -281,7 +284,9 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.Job.table.c.create_time < end_date ), from_obj=[ model.Job.table ], group_by=[ 'date' ], - order_by=[ _order ] ) + order_by=[ _order ], + offset=offset, + limit=limit) # Use to make trendline all_jobs = sa.select( ( model.Job.table.c.create_time.label('date'), model.Job.table.c.id.label('id') ), @@ -289,24 +294,26 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.Job.table.c.create_time >= start_date, model.Job.table.c.create_time < end_date ) ) - trend = [0] * 24 + trends = dict() + for job in all_jobs.execute(): + job_hour = int(job.date.strftime("%-H")) + job_day = job.date.strftime("%d") + + try: + trends[job_day][job_hour] += 1 + except KeyError: + trends[job_day] = [0] * 24 + trends[job_day][job_hour] += 1 + jobs = [] for row in month_jobs.execute(): - trend = [0] * 24 - - row_dayname = row.date.strftime( "%A" ) - row_day = row.date.strftime( "%d" ) - - for job in all_jobs.execute(): - if row_day == job.date.strftime( "%d" ): - hour = int( job.date.strftime( "%-H" ) ) - 1 - trend[hour] += 1 + row_dayname = row.date.strftime("%A") + row_day = row.date.strftime("%d") jobs.append( ( row_dayname, row_day, row.total_jobs, - row.date, - trend + row.date ) ) return trans.fill_template( '/webapps/reports/jobs_specified_month_all.mako', @@ -317,6 +324,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): year_label=year_label, month=month, jobs=jobs, + trends=trends, is_user_jobs_only=monitor_user_id, message=message ) @@ -363,24 +371,26 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.Job.table.c.create_time >= start_date, model.Job.table.c.create_time < end_date ) ) - trend = [0] * 24 + trends = dict() + for job in all_jobs_in_error.execute(): + job_hour = int(job.date.strftime("%-H")) + job_day = job.date.strftime("%d") + + try: + trends[job_day][job_hour] += 1 + except KeyError: + trends[job_day] = [0] * 24 + trends[job_day][job_hour] += 1 + jobs = [] for row in month_jobs_in_error.execute(): - trend = [0] * 24 - - row_dayname = row.date.strftime( "%A" ) - row_day = row.date.strftime( "%d" ) - - for job in all_jobs_in_error.execute(): - if row_day == job.date.strftime( "%d" ): - hour = int( job.date.strftime( "%-H" ) ) - 1 - trend[hour] += 1 + row_dayname = row.date.strftime("%A") + row_day = row.date.strftime("%d") jobs.append( ( row_dayname, row_day, row.total_jobs, - row.date, - trend + row.date ) ) return trans.fill_template( '/webapps/reports/jobs_specified_month_in_error.mako', @@ -391,6 +401,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): year_label=year_label, month=month, jobs=jobs, + trends=trends, message=message, is_user_jobs_only=monitor_user_id ) diff --git a/templates/webapps/reports/jobs_specified_month_all.mako b/templates/webapps/reports/jobs_specified_month_all.mako index 15468ac9bb8..69b97d4492a 100644 --- a/templates/webapps/reports/jobs_specified_month_all.mako +++ b/templates/webapps/reports/jobs_specified_month_all.mako @@ -48,7 +48,7 @@ ${get_css()}
- ${make_sparkline(key, job[4], "bar", "/ hour")} + ${make_sparkline(key, trends[key], "bar", "/ hour")} <% ctr += 1 %> diff --git a/templates/webapps/reports/jobs_specified_month_in_error.mako b/templates/webapps/reports/jobs_specified_month_in_error.mako index 4501ca1bc6e..807205b0019 100644 --- a/templates/webapps/reports/jobs_specified_month_in_error.mako +++ b/templates/webapps/reports/jobs_specified_month_in_error.mako @@ -47,7 +47,7 @@ ${get_css()} - ${make_sparkline(key, job[4], "bar", "/ hour")} + ${make_sparkline(key, trends[key], "bar", "/ hour")} <% ctr += 1 %> From 6b021b1c989e3b62e24d11fff86d73c66ee019b2 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 08:20:43 -0500 Subject: [PATCH 06/68] Added type checking and casting for certain errors --- lib/galaxy/webapps/reports/controllers/jobs.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 65f4ee00d23..edf02630098 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -570,7 +570,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): currday = datetime.today().date() trends = dict() for job in all_jobs_per_user.execute(): - curr_user = re.sub(r'\W+', '', job.user_email) + curr_user = re.sub(r'\W+', '', str(job.user_email)) try: day = currday - job.date day = day.days @@ -690,10 +690,10 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.Job.table.c.tool_id.label( 'tool_id' ) ), from_obj=[ model.Job.table ] ) - currday = datetime.today().date() + currday = date.today() trends = dict() for job in all_jobs_per_tool.execute(): - curr_tool = re.sub(r'\W+', '', job.tool_id) + curr_tool = re.sub(r'\W+', '', str(job.tool_id)) try: day = currday - job.date day = day.days @@ -754,10 +754,10 @@ class Jobs( BaseUIController, ReportQueryBuilder ): from_obj=[ model.Job.table ] ) - currday = datetime.today().date() + currday = date.today() trends = dict() for job in all_jobs_per_tool_errors.execute(): - curr_tool = re.sub(r'\W+', '', job.tool_id) + curr_tool = re.sub(r'\W+', '', str(job.tool_id)) try: day = currday - job.date day = day.days @@ -769,6 +769,12 @@ class Jobs( BaseUIController, ReportQueryBuilder ): day = day.days if day < day_limit: trends[curr_tool][day] += 1 + except TypeError: + day = currday - date(job.date) + day = day.days + if day < day_limit: + trends[curr_tool][day] += 1 + jobs = [] for row in jobs_in_error_per_tool.execute(): From bc69acb8a99ea93b0179d2c2495c9d37e85464e9 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 08:26:42 -0500 Subject: [PATCH 07/68] Added whitespace to pass Travis CI. --- lib/galaxy/webapps/reports/controllers/jobs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index edf02630098..ebe478ed6ef 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -774,7 +774,6 @@ class Jobs( BaseUIController, ReportQueryBuilder ): day = day.days if day < day_limit: trends[curr_tool][day] += 1 - jobs = [] for row in jobs_in_error_per_tool.execute(): From 3a9ff2a1dd8b6e9f997335742532a511ae7c04b8 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 10:24:33 -0500 Subject: [PATCH 08/68] Added compatibility for postgres, bug fix where sparklines broke when no jobs were done in the past 50 days(arbitrary amount decided in code) --- .../webapps/reports/controllers/jobs.py | 48 +++++++++++-------- .../webapps/reports/jobs_errors_per_tool.mako | 5 +- templates/webapps/reports/jobs_per_tool.mako | 5 +- templates/webapps/reports/jobs_per_user.mako | 5 +- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index ebe478ed6ef..8a57daf2937 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -11,6 +11,7 @@ pkg_resources.require( "SQLAlchemy >= 0.4" ) import re import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder +import sys import logging log = logging.getLogger( __name__ ) @@ -570,16 +571,18 @@ class Jobs( BaseUIController, ReportQueryBuilder ): currday = datetime.today().date() trends = dict() for job in all_jobs_per_user.execute(): - curr_user = re.sub(r'\W+', '', str(job.user_email)) + curr_user = re.sub(r'\W+', '', job.user_email) try: day = currday - job.date - day = day.days + except TypeError: + day = currday - datetime.date(job.date) + + day = day.days + try: if day < day_limit: trends[curr_user][day] += 1 except KeyError: trends[curr_user] = [0] * day_limit - day = currday - job.date - day = day.days if day < day_limit: trends[curr_user][day] += 1 @@ -685,9 +688,10 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=[ 'tool_id' ], order_by=[ _order ] ) - all_jobs_per_tool = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), - model.Job.table.c.id.label( 'id' ), - model.Job.table.c.tool_id.label( 'tool_id' ) ), + all_jobs_per_tool = sa.select( ( model.Job.table.c.tool_id.label( 'tool_id' ), + model.Job.table.c.id.label( 'id' ), + self.select_month( model.Job.table.c.create_time ).label( 'date' ) ), + whereclause=model.Job.table.c.user_id != monitor_user_id, from_obj=[ model.Job.table ] ) currday = date.today() @@ -696,13 +700,15 @@ class Jobs( BaseUIController, ReportQueryBuilder ): curr_tool = re.sub(r'\W+', '', str(job.tool_id)) try: day = currday - job.date - day = day.days + except TypeError: + day = currday - datetime.date(job.date) + + day = day.days + try: if day < day_limit: trends[curr_tool][day] += 1 except KeyError: trends[curr_tool] = [0] * day_limit - day = currday - job.date - day = day.days if day < day_limit: trends[curr_tool][day] += 1 @@ -710,6 +716,14 @@ class Jobs( BaseUIController, ReportQueryBuilder ): jobs.append( ( row.tool_id, row.total_jobs ) ) + print("==========jobs==================", file=sys.stderr) + for job in jobs: + print(re.sub(r'\W+', '', job[0]), file=sys.stderr) + + print("==========trends==================", file=sys.stderr) + for item in trends.keys(): + print(item, file=sys.stderr) + return trans.fill_template( '/webapps/reports/jobs_per_tool.mako', order=order, arrow=arrow, @@ -760,21 +774,17 @@ class Jobs( BaseUIController, ReportQueryBuilder ): curr_tool = re.sub(r'\W+', '', str(job.tool_id)) try: day = currday - job.date - day = day.days + except TypeError: + day = currday - datetime.date(job.date) + + day = day.days + try: if day < day_limit: trends[curr_tool][day] += 1 except KeyError: trends[curr_tool] = [0] * day_limit - day = currday - job.date - day = day.days if day < day_limit: trends[curr_tool][day] += 1 - except TypeError: - day = currday - date(job.date) - day = day.days - if day < day_limit: - trends[curr_tool][day] += 1 - jobs = [] for row in jobs_in_error_per_tool.execute(): jobs.append( ( row.total_jobs, row.tool_id ) ) diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index 6ce25222959..5de08d9b71e 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -52,7 +52,10 @@ ${get_css()} %endif - ${make_sparkline(key, trends[key], "line", "/ day")} + %try: + ${make_sparkline(key, trends[key], "line", "/ day")} + %except KeyError: + %endtry <% ctr += 1 %> diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index e6e31675f31..7d5b621c905 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -51,7 +51,10 @@ ${get_css()} %endif - ${make_sparkline(key, trends[key], "line", "/ day")} + %try: + ${make_sparkline(key, trends[key], "line", "/ day")} + %except KeyError: + %endtry <% ctr += 1 %> diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index 5770d0063d3..00021fac347 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -44,7 +44,10 @@ ${get_css()} %endif - ${make_sparkline(key, trends[key], "line", "/ day")} + %try: + ${make_sparkline(key, trends[key], "line", "/ day")} + %except KeyError: + %endtry <% ctr += 1 %> From d870a24071341a4e874d9367cc22088264a1e683 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 12:45:39 -0500 Subject: [PATCH 09/68] Added option for how long sparklines jobs per user, jobs per tool and errors per tool are --- .../webapps/reports/controllers/jobs.py | 101 ++++++++++++------ templates/spark_base.mako | 51 +++++++++ templates/webapps/reports/index.mako | 2 +- .../webapps/reports/jobs_errors_per_tool.mako | 7 +- templates/webapps/reports/jobs_per_tool.mako | 7 +- templates/webapps/reports/jobs_per_user.mako | 7 +- 6 files changed, 135 insertions(+), 40 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 8a57daf2937..7aff6d4ef50 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -6,6 +6,7 @@ from galaxy.web.base.controller import BaseUIController, web from galaxy import model, util from galaxy.web.framework.helpers import grids from galaxy.model.orm import and_, not_, or_ +from math import floor import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) import re @@ -554,7 +555,19 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order - day_limit = 50 + time_period = kwd.get('spark_time') + if time_period == "days": + _time_period = 1.0 + elif time_period == "weeks": + _time_period = 7.0 + elif time_period == "months": + _time_period = 30.0 + elif time_period == "years": + _time_period = 365.0 + else: + time_period = "days" + _time_period = 1.0 + limit = 30 jobs = [] jobs_per_user = sa.select( ( model.User.table.c.email.label( 'user_email' ), @@ -568,7 +581,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.User.table.c.email.label( 'user_email' ) ), from_obj=[ sa.outerjoin( model.Job.table, model.User.table ) ] ) - currday = datetime.today().date() + currday = date.today() trends = dict() for job in all_jobs_per_user.execute(): curr_user = re.sub(r'\W+', '', job.user_email) @@ -578,13 +591,15 @@ class Jobs( BaseUIController, ReportQueryBuilder ): day = currday - datetime.date(job.date) day = day.days + container = floor(day / _time_period) + container = int(container) try: - if day < day_limit: - trends[curr_user][day] += 1 + if container < limit: + trends[curr_user][container] += 1 except KeyError: - trends[curr_user] = [0] * day_limit - if day < day_limit: - trends[curr_user][day] += 1 + trends[curr_user] = [0] * limit + if container < limit: + trends[curr_user][container] += 1 for row in jobs_per_user.execute(): if ( row.user_email is None ): @@ -600,7 +615,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, - day_limit=day_limit, + limit=limit, + time_period=time_period, trends=trends, jobs=jobs, message=message ) @@ -675,7 +691,20 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order - day_limit = 50 + time_period = kwd.get('spark_time') + if time_period == "days": + _time_period = 1.0 + elif time_period == "weeks": + _time_period = 7.0 + elif time_period == "months": + _time_period = 30.0 + elif time_period == "years": + _time_period = 365.0 + else: + time_period = "days" + _time_period = 1.0 + + limit = 30 # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -704,31 +733,26 @@ class Jobs( BaseUIController, ReportQueryBuilder ): day = currday - datetime.date(job.date) day = day.days + container = floor(day / _time_period) + container = int(container) try: - if day < day_limit: - trends[curr_tool][day] += 1 + if container < limit: + trends[curr_tool][container] += 1 except KeyError: - trends[curr_tool] = [0] * day_limit - if day < day_limit: - trends[curr_tool][day] += 1 + trends[curr_tool] = [0] * limit + if container < limit: + trends[curr_tool][container] += 1 for row in q.execute(): jobs.append( ( row.tool_id, row.total_jobs ) ) - print("==========jobs==================", file=sys.stderr) - for job in jobs: - print(re.sub(r'\W+', '', job[0]), file=sys.stderr) - - print("==========trends==================", file=sys.stderr) - for item in trends.keys(): - print(item, file=sys.stderr) - return trans.fill_template( '/webapps/reports/jobs_per_tool.mako', order=order, arrow=arrow, sort_id=sort_id, - day_limit=day_limit, + limit=limit, + time_period=time_period, trends=trends, jobs=jobs, message=message, @@ -748,7 +772,20 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order - day_limit = 50 + time_period = kwd.get('spark_time') + if time_period == "days": + _time_period = 1.0 + elif time_period == "weeks": + _time_period = 7.0 + elif time_period == "months": + _time_period = 30.0 + elif time_period == "years": + _time_period = 365.0 + else: + time_period = "days" + _time_period = 1.0 + + limit = 30 # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -777,14 +814,17 @@ class Jobs( BaseUIController, ReportQueryBuilder ): except TypeError: day = currday - datetime.date(job.date) + #convert day into days/weeks/months/years day = day.days + container = floor(day / _time_period) + container = int(container) try: - if day < day_limit: - trends[curr_tool][day] += 1 + if container < limit: + trends[curr_tool][container] += 1 except KeyError: - trends[curr_tool] = [0] * day_limit - if day < day_limit: - trends[curr_tool][day] += 1 + trends[curr_tool] = [0] * limit + if day < limit: + trends[curr_tool][container] += 1 jobs = [] for row in jobs_in_error_per_tool.execute(): jobs.append( ( row.total_jobs, row.tool_id ) ) @@ -792,7 +832,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, - day_limit=day_limit, + limit=limit, + time_period=time_period, trends=trends, jobs=jobs, message=message, diff --git a/templates/spark_base.mako b/templates/spark_base.mako index da4410f1056..ea19597f6b1 100644 --- a/templates/spark_base.mako +++ b/templates/spark_base.mako @@ -8,6 +8,57 @@ +<%def name="spark_css()"> + + + +<%def name="make_spark_settings( controller, action, limit, sort_id, order, time_period )"> +
+
+ + + ${limit} + + + +
+ + <%def name="make_sparkline(id, data, sparktype, length)"> <% color = '●' diff --git a/templates/webapps/reports/index.mako b/templates/webapps/reports/index.mako index 0ab41755770..8a259dad093 100644 --- a/templates/webapps/reports/index.mako +++ b/templates/webapps/reports/index.mako @@ -53,7 +53,7 @@ - +
diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index 5de08d9b71e..d2c40a0d425 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,6 +10,7 @@ ${render_msg( message, 'done' )} %endif +${spark_css()} ${jqs_style()} ${get_css()} @@ -19,7 +20,7 @@ ${get_css()}

Jobs In Error Per Tool

Click Tool ID to view details. Click error number to view job details.

-

Graph goes from present to past(${day_limit} days).

+ Graph goes from present to past for ${make_spark_settings( "jobs", "errors_per_tool", limit, sort_id, order, time_period )}
There are no jobs for user "${ _email }"
${job[2]} ${job[3]} ${job[1]}
${job[0]} ${month_label} ${job[1]}, ${year_label} ${job[2]}
${job[0]} ${month_label} ${job[1]}, ${year_label} ${job[2]}
${job[1]} ${job[0]}
${job[0]} ${job[1]}
${job[0]} ${job[1]}
%if len( jobs ) == 0: @@ -53,7 +54,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "line", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ day")} %except KeyError: %endtry diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index 7d5b621c905..f43342e4e0f 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,6 +10,7 @@ ${render_msg( message, 'done' )} %endif +${spark_css()} ${jqs_style()} ${get_css()} @@ -18,7 +19,7 @@ ${get_css()}

Jobs Per Tool

- Click Tool ID to view details. Graph goes from present to past(${day_limit} days). + Click Tool ID to view details. Graph goes from present to past ${make_spark_settings( "jobs", "per_tool", limit, sort_id, order, time_period )}
${job[1]} ${job[0]}
%if len( jobs ) == 0: @@ -52,7 +53,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "line", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ day")} %except KeyError: %endtry diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index 00021fac347..8db19930fd8 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,6 +10,7 @@ ${render_msg( message, 'done' )} %endif +${spark_css()} ${jqs_style()} ${get_css()} @@ -18,7 +19,7 @@ ${get_css()}

Jobs Per User

- Click User to view details. Graph goes from present to past(${day_limit} days). + Click User to view details. Graph goes from present to past ${make_spark_settings( "jobs", "per_user", limit, sort_id, order, time_period )}
${job[0]} ${job[1]}
%if len( jobs ) == 0: @@ -45,7 +46,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "line", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ day")} %except KeyError: %endtry From e286c14f6b718853124ae1ab5b83d7e2f07be5e9 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 12:47:47 -0500 Subject: [PATCH 10/68] Added whitespace for CI --- lib/galaxy/webapps/reports/controllers/jobs.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 7aff6d4ef50..fd1f3abf1ad 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -12,7 +12,6 @@ pkg_resources.require( "SQLAlchemy >= 0.4" ) import re import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder -import sys import logging log = logging.getLogger( __name__ ) @@ -784,7 +783,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): else: time_period = "days" _time_period = 1.0 - + limit = 30 # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -814,7 +813,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): except TypeError: day = currday - datetime.date(job.date) - #convert day into days/weeks/months/years + # convert day into days/weeks/months/years day = day.days container = floor(day / _time_period) container = int(container) From 895d09cd9b3682e99e1f365fa87970f0a425ff47 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 13:33:11 -0500 Subject: [PATCH 11/68] Fixed bug on Jobs per month page where postgres was showing all jobs on same day in sparkline --- lib/galaxy/webapps/reports/controllers/jobs.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index fd1f3abf1ad..108d0efba53 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -433,14 +433,16 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order_by=[ _order ] ) # Use to make sparkline - all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ) ) + all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('month'), + self.select_day(model.Job.table.c.create_time).label('day'), + model.Job.table.c.id.label('id') ) ) trends = dict() for job in all_jobs.execute(): - job_day = int(job.date.strftime("%-d")) - 1 - job_month = int(job.date.strftime("%-m")) - job_month_name = job.date.strftime("%B") - job_year = job.date.strftime("%Y") + job_day = int(job.day.strftime("%-d")) - 1 + job_month = int(job.month.strftime("%-m")) + job_month_name = job.month.strftime("%B") + job_year = job.month.strftime("%Y") key = str( job_month_name + job_year) try: From 08049542aacf23acff2c53b13bc7775d342bba16 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Mon, 22 Jun 2015 13:47:07 -0500 Subject: [PATCH 12/68] Small bug fix in sparklines tool tip where it said day even though it was measured in weeks/months/years --- templates/webapps/reports/jobs_errors_per_tool.mako | 2 +- templates/webapps/reports/jobs_per_tool.mako | 2 +- templates/webapps/reports/jobs_per_user.mako | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index d2c40a0d425..9b0bb819288 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -54,7 +54,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "bar", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ " + time_period[:-1])} %except KeyError: %endtry diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index f43342e4e0f..a6725de8b61 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -53,7 +53,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "bar", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ " + time_period[:-1])} %except KeyError: %endtry diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index 8db19930fd8..95a1eec659e 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -46,7 +46,7 @@ ${get_css()} %try: - ${make_sparkline(key, trends[key], "bar", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ " + time_period[:-1])} %except KeyError: %endtry From 1c7017cf4b44f55d94bdbb9d3e2dbbd8f757d032 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Thu, 25 Jun 2015 15:37:45 -0500 Subject: [PATCH 13/68] Fixed a bug where the queries truncated the days so the sparklines didn't display correctly --- .../webapps/reports/controllers/jobs.py | 52 +++++++++---------- .../webapps/reports/jobs_per_month_all.mako | 2 +- .../webapps/reports/jobs_tool_per_month.mako | 2 +- .../webapps/reports/jobs_user_per_month.mako | 2 +- 4 files changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 108d0efba53..409edf6c80f 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -433,16 +433,15 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order_by=[ _order ] ) # Use to make sparkline - all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('month'), - self.select_day(model.Job.table.c.create_time).label('day'), + all_jobs = sa.select( ( self.select_day(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ) ) trends = dict() for job in all_jobs.execute(): - job_day = int(job.day.strftime("%-d")) - 1 - job_month = int(job.month.strftime("%-m")) - job_month_name = job.month.strftime("%B") - job_year = job.month.strftime("%Y") + job_day = int(job.date.strftime("%-d")) - 1 + job_month = int(job.date.strftime("%-m")) + job_month_name = job.date.strftime("%B") + job_year = job.date.strftime("%Y") key = str( job_month_name + job_year) try: @@ -504,9 +503,10 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order_by=[ _order ] ) # Use to make trendline - all_jobs = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ), + all_jobs = sa.select( ( self.select_day(model.Job.table.c.create_time).label('date'), + model.Job.table.c.id.label('id') ), whereclause=sa.and_( model.Job.table.c.state == 'error', - model.Job.table.c.user_id != monitor_user_id )) + model.Job.table.c.user_id != monitor_user_id ) ) trends = dict() for job in all_jobs.execute(): @@ -577,12 +577,12 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=[ 'user_email' ], order_by=[ _order ] ) - all_jobs_per_user = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), - model.Job.table.c.id.label( 'id' ), - model.User.table.c.email.label( 'user_email' ) ), + all_jobs_per_user = sa.select( ( model.Job.table.c.id.label( 'id' ), + model.Job.table.c.create_time.label( 'date' ), + model.User.table.c.email.label( 'user_email' ) ), from_obj=[ sa.outerjoin( model.Job.table, model.User.table ) ] ) - currday = date.today() + currday = datetime.today() trends = dict() for job in all_jobs_per_user.execute(): curr_user = re.sub(r'\W+', '', job.user_email) @@ -636,18 +636,14 @@ class Jobs( BaseUIController, ReportQueryBuilder ): q = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), sa.func.count( model.Job.table.c.id ).label( 'total_jobs' ) ), - whereclause=sa.and_( model.Job.table.c.session_id == model.GalaxySession.table.c.id, - model.GalaxySession.table.c.user_id == model.User.table.c.id, - model.User.table.c.email == email ), + whereclause=model.User.table.c.email == email, from_obj=[ sa.join( model.Job.table, model.User.table ) ], group_by=self.group_by_month( model.Job.table.c.create_time ), order_by=[ _order ] ) all_jobs_per_user = sa.select( ( model.Job.table.c.create_time.label( 'date' ), model.Job.table.c.id.label( 'job_id' ) ), - whereclause=sa.and_( model.Job.table.c.session_id == model.GalaxySession.table.c.id, - model.GalaxySession.table.c.user_id == model.User.table.c.id, - model.User.table.c.email == email), + whereclause=sa.and_( model.User.table.c.email == email ), from_obj=[ sa.join( model.Job.table, model.User.table ) ] ) trends = dict() @@ -720,7 +716,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): all_jobs_per_tool = sa.select( ( model.Job.table.c.tool_id.label( 'tool_id' ), model.Job.table.c.id.label( 'id' ), - self.select_month( model.Job.table.c.create_time ).label( 'date' ) ), + self.select_day( model.Job.table.c.create_time ).label( 'date' ) ), whereclause=model.Job.table.c.user_id != monitor_user_id, from_obj=[ model.Job.table ] ) @@ -798,7 +794,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): group_by=[ 'tool_id' ], order_by=[ _order ] ) - all_jobs_per_tool_errors = sa.select( ( self.select_month( model.Job.table.c.create_time ).label( 'date' ), + all_jobs_per_tool_errors = sa.select( ( self.select_day( model.Job.table.c.create_time ).label( 'date' ), model.Job.table.c.id.label( 'id' ), model.Job.table.c.tool_id.label( 'tool_id' ) ), whereclause=sa.and_( model.Job.table.c.state == 'error', @@ -865,16 +861,18 @@ class Jobs( BaseUIController, ReportQueryBuilder ): order_by=[ _order ] ) # Use to make sparkline - all_jobs_for_tool = sa.select( ( self.select_month(model.Job.table.c.create_time).label('date'), model.Job.table.c.id.label('id') ), - whereclause=sa.and_( model.Job.table.c.tool_id == tool_id, - model.Job.table.c.user_id != monitor_user_id ), + all_jobs_for_tool = sa.select( ( self.select_month(model.Job.table.c.create_time).label('month'), + self.select_day(model.Job.table.c.create_time).label('day'), + model.Job.table.c.id.label('id') ), + whereclause=sa.and_( model.Job.table.c.tool_id == tool_id, + model.Job.table.c.user_id != monitor_user_id ), from_obj=[ model.Job.table ] ) trends = dict() for job in all_jobs_for_tool.execute(): - job_day = int(job.date.strftime("%-d")) - 1 - job_month = int(job.date.strftime("%-m")) - job_month_name = job.date.strftime("%B") - job_year = job.date.strftime("%Y") + job_day = int(job.day.strftime("%-d")) - 1 + job_month = int(job.month.strftime("%-m")) + job_month_name = job.month.strftime("%B") + job_year = job.month.strftime("%Y") key = str( job_month_name + job_year) try: diff --git a/templates/webapps/reports/jobs_per_month_all.mako b/templates/webapps/reports/jobs_per_month_all.mako index 0b8a08ccdca..fcb5d9ce348 100644 --- a/templates/webapps/reports/jobs_per_month_all.mako +++ b/templates/webapps/reports/jobs_per_month_all.mako @@ -14,7 +14,7 @@ ${get_css()}

Jobs Per Month

-
Click Month to view details.
+
Click Month to view details. Graph goes from the 1st to the last of the month.
${job[0]} ${job[1]}${job[1]} ${job[0]}${job[0]} ${job[1]}${job[0]} ${job[1]}
%if len( jobs ) == 0: diff --git a/templates/webapps/reports/jobs_tool_per_month.mako b/templates/webapps/reports/jobs_tool_per_month.mako index 8d5eea5ad78..2bedfc24010 100644 --- a/templates/webapps/reports/jobs_tool_per_month.mako +++ b/templates/webapps/reports/jobs_tool_per_month.mako @@ -50,7 +50,7 @@ ${get_css()} %endif - ${make_sparkline(key, trends[key], "line", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ day")} <% ctr += 1 %> diff --git a/templates/webapps/reports/jobs_user_per_month.mako b/templates/webapps/reports/jobs_user_per_month.mako index d18d8c5235c..3ad804d040c 100644 --- a/templates/webapps/reports/jobs_user_per_month.mako +++ b/templates/webapps/reports/jobs_user_per_month.mako @@ -48,7 +48,7 @@ ${get_css()} %endif - ${make_sparkline(key, trends[key], "line", "/ day")} + ${make_sparkline(key, trends[key], "bar", "/ day")} <% ctr += 1 %> From 88471eb21b6b22c416ae9f6dd19cca8322b3e75c Mon Sep 17 00:00:00 2001 From: Airistotal Date: Fri, 26 Jun 2015 10:09:55 -0500 Subject: [PATCH 14/68] Fix where days/weeks/... reverted to days when sorting columns. Refactored time_period code into function. Applied sparklines to workflows pages. --- .../webapps/reports/controllers/jobs.py | 57 ++++------- .../webapps/reports/controllers/workflows.py | 95 ++++++++++++++++++- templates/webapps/reports/index.mako | 2 +- .../webapps/reports/jobs_errors_per_tool.mako | 6 +- templates/webapps/reports/jobs_per_tool.mako | 6 +- templates/webapps/reports/jobs_per_user.mako | 4 +- .../webapps/reports/jobs_user_per_month.mako | 4 +- .../reports/workflows_per_month_all.mako | 9 ++ .../webapps/reports/workflows_per_user.mako | 19 +++- .../reports/workflows_user_per_month.mako | 8 ++ 10 files changed, 155 insertions(+), 55 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 409edf6c80f..460fcbcb48b 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -52,6 +52,22 @@ def sorter(default_sort_id, kwd): return SortSpec(sort_id, order, arrow, _order) +def get_spark_time( time_period ): + _time_period = 0 + + if time_period == "days": + _time_period = 1.0 + elif time_period == "weeks": + _time_period = 7.0 + elif time_period == "months": + _time_period = 30.0 + elif time_period == "years": + _time_period = 365.0 + else: + time_period = "days" + _time_period = 1.0 + + return time_period, _time_period class SpecifiedDateListGrid( grids.Grid ): @@ -454,10 +470,8 @@ class Jobs( BaseUIController, ReportQueryBuilder ): jobs = [] for row in jobs_by_month.execute(): - month = int(row.date.strftime("%-m")) month_name = row.date.strftime("%B") year = int(row.date.strftime("%Y")) - wday, day_range = calendar.monthrange(year, month) jobs.append( ( row.date.strftime( "%Y-%m" ), @@ -557,17 +571,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') - if time_period == "days": - _time_period = 1.0 - elif time_period == "weeks": - _time_period = 7.0 - elif time_period == "months": - _time_period = 30.0 - elif time_period == "years": - _time_period = 365.0 - else: - time_period = "days" - _time_period = 1.0 + time_period, _time_period = get_spark_time( time_period ) limit = 30 jobs = [] @@ -689,18 +693,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') - if time_period == "days": - _time_period = 1.0 - elif time_period == "weeks": - _time_period = 7.0 - elif time_period == "months": - _time_period = 30.0 - elif time_period == "years": - _time_period = 365.0 - else: - time_period = "days" - _time_period = 1.0 - + time_period, _time_period = get_spark_time( time_period ) limit = 30 # In case we don't know which is the monitor user we will query for all jobs @@ -770,19 +763,9 @@ class Jobs( BaseUIController, ReportQueryBuilder ): arrow = specs.arrow _order = specs.exc_order time_period = kwd.get('spark_time') - if time_period == "days": - _time_period = 1.0 - elif time_period == "weeks": - _time_period = 7.0 - elif time_period == "months": - _time_period = 30.0 - elif time_period == "years": - _time_period = 365.0 - else: - time_period = "days" - _time_period = 1.0 - + time_period, _time_period = get_spark_time( time_period ) limit = 30 + # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 562a1a55619..ef9c0abd7e2 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -1,14 +1,16 @@ import calendar -from datetime import date, timedelta +from datetime import datetime, date, timedelta from galaxy import eggs from galaxy import model, util from galaxy.model.orm import and_ +from math import floor from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids eggs.require( "SQLAlchemy >= 0.4" ) +import re import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder -from galaxy.webapps.reports.controllers.jobs import sorter +from galaxy.webapps.reports.controllers.jobs import sorter, get_spark_time import logging log = logging.getLogger( __name__ ) @@ -152,20 +154,46 @@ class Workflows( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order - q = sa.select( ( self.select_month( model.StoredWorkflow.table.c.create_time ).label( 'date' ), sa.func.count( model.StoredWorkflow.table.c.id ).label( 'total_workflows' ) ), + + q = sa.select( ( self.select_month( model.StoredWorkflow.table.c.create_time ).label( 'date' ), + sa.func.count( model.StoredWorkflow.table.c.id ).label( 'total_workflows' ) ), from_obj=[ sa.outerjoin( model.StoredWorkflow.table, model.User.table ) ], group_by=self.group_by_month( model.StoredWorkflow.table.c.create_time ), order_by=[ _order ] ) + + all_workflows = sa.select( ( self.select_day( model.StoredWorkflow.table.c.create_time ).label( 'date' ), + model.StoredWorkflow.table.c.id ) ) + + trends = dict() + for workflow in all_workflows.execute(): + workflow_day = int(workflow.date.strftime("%-d")) - 1 + workflow_month = int(workflow.date.strftime("%-m")) + workflow_month_name = workflow.date.strftime("%B") + workflow_year = workflow.date.strftime("%Y") + key = str( workflow_month_name + workflow_year) + + try: + trends[key][workflow_day] += 1 + except KeyError: + workflow_year = int(workflow_year) + wday, day_range = calendar.monthrange(workflow_year, workflow_month) + trends[key] = [0] * day_range + trends[key][workflow_day] += 1 + workflows = [] for row in q.execute(): + month_name = row.date.strftime("%B") + year = int(row.date.strftime("%Y")) + workflows.append( ( row.date.strftime( "%Y-%m" ), row.total_workflows, - row.date.strftime( "%B" ), - row.date.strftime( "%Y" ) ) ) + month_name, + year ) ) return trans.fill_template( '/webapps/reports/workflows_per_month_all.mako', order=order, arrow=arrow, sort_id=sort_id, + trends=trends, workflows=workflows, message=message ) @@ -177,12 +205,42 @@ class Workflows( BaseUIController, ReportQueryBuilder ): order = specs.order arrow = specs.arrow _order = specs.exc_order + time_period = kwd.get('spark_time') + time_period, _time_period = get_spark_time( time_period ) + limit=30 + workflows = [] q = sa.select( ( model.User.table.c.email.label( 'user_email' ), sa.func.count( model.StoredWorkflow.table.c.id ).label( 'total_workflows' ) ), from_obj=[ sa.outerjoin( model.StoredWorkflow.table, model.User.table ) ], group_by=[ 'user_email' ], order_by=[ _order ] ) + + all_workflows_per_user = sa.select( ( model.User.table.c.email.label( 'user_email' ), + self.select_day( model.StoredWorkflow.table.c.create_time ).label('date'), + model.StoredWorkflow.table.c.id ), + from_obj=[ sa.outerjoin( model.StoredWorkflow.table, + model.User.table ) ] ) + currday = datetime.today() + trends = dict() + for workflow in all_workflows_per_user.execute(): + curr_user = re.sub(r'\W+', '', workflow.user_email) + try: + day = currday - workflow.date + except TypeError: + day = datetime.date(currday) - datetime.date(workflow.date) + + day = day.days + container = floor(day / _time_period) + container = int(container) + try: + if container < limit: + trends[curr_user][container] += 1 + except KeyError: + trends[curr_user] = [0] * limit + if container < limit: + trends[curr_user][container] += 1 + for row in q.execute(): workflows.append( ( row.user_email, row.total_workflows ) ) @@ -190,6 +248,9 @@ class Workflows( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, + limit=limit, + trends=trends, + time_period=time_period, workflows=workflows, message=message ) @@ -204,12 +265,35 @@ class Workflows( BaseUIController, ReportQueryBuilder ): _order = specs.exc_order email = util.restore_text( params.get( 'email', '' ) ) user_id = trans.security.decode_id( params.get( 'id', '' ) ) + q = sa.select( ( self.select_month( model.StoredWorkflow.table.c.create_time ).label( 'date' ), sa.func.count( model.StoredWorkflow.table.c.id ).label( 'total_workflows' ) ), whereclause=model.StoredWorkflow.table.c.user_id == user_id, from_obj=[ model.StoredWorkflow.table ], group_by=self.group_by_month( model.StoredWorkflow.table.c.create_time ), order_by=[ _order ] ) + + all_workflows_user_month = sa.select( ( self.select_day( model.StoredWorkflow.table.c.create_time ).label( 'date' ), + model.StoredWorkflow.table.c.id ), + whereclause=model.StoredWorkflow.table.c.user_id == user_id, + from_obj=[ model.StoredWorkflow.table ] ) + + trends = dict() + for workflow in all_workflows_user_month.execute(): + workflow_day = int(workflow.date.strftime("%-d")) - 1 + workflow_month = int(workflow.date.strftime("%-m")) + workflow_month_name = workflow.date.strftime("%B") + workflow_year = workflow.date.strftime("%Y") + key = str( workflow_month_name + workflow_year) + + try: + trends[key][workflow_day] += 1 + except KeyError: + workflow_year = int(workflow_year) + wday, day_range = calendar.monthrange(workflow_year, workflow_month) + trends[key] = [0] * day_range + trends[key][workflow_day] += 1 + workflows = [] for row in q.execute(): workflows.append( ( row.date.strftime( "%Y-%m" ), @@ -221,6 +305,7 @@ class Workflows( BaseUIController, ReportQueryBuilder ): order=order, arrow=arrow, sort_id=sort_id, + trends=trends, workflows=workflows, message=message ) diff --git a/templates/webapps/reports/index.mako b/templates/webapps/reports/index.mako index 8a259dad093..c372d3ec438 100644 --- a/templates/webapps/reports/index.mako +++ b/templates/webapps/reports/index.mako @@ -53,7 +53,7 @@ - +
diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index 9b0bb819288..dbf23d06f00 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -28,17 +28,17 @@ ${get_css()} %else:
%if is_user_jobs_only: %else: %endif diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index a6725de8b61..f0cc4ac8b7c 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -27,17 +27,17 @@ ${get_css()} %else: %if is_user_jobs_only: %else: %endif diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index 95a1eec659e..f5252211e48 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -27,11 +27,11 @@ ${get_css()} %else: diff --git a/templates/webapps/reports/jobs_user_per_month.mako b/templates/webapps/reports/jobs_user_per_month.mako index 3ad804d040c..6b045916153 100644 --- a/templates/webapps/reports/jobs_user_per_month.mako +++ b/templates/webapps/reports/jobs_user_per_month.mako @@ -3,7 +3,9 @@ <%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> -<% from galaxy import util %> +<% + from galaxy import util +%> %if message: ${render_msg( message, 'done' )} diff --git a/templates/webapps/reports/workflows_per_month_all.mako b/templates/webapps/reports/workflows_per_month_all.mako index 23f21d65167..2416b135abe 100644 --- a/templates/webapps/reports/workflows_per_month_all.mako +++ b/templates/webapps/reports/workflows_per_month_all.mako @@ -1,11 +1,14 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> %if message: ${render_msg( message, 'done' )} %endif +${spark_css()} +${jqs_style()} ${get_css()}
@@ -27,6 +30,7 @@ ${get_css()} <% ctr = 0 %> %for workflow in workflows: + <% key = str(workflow[2]) + str(workflow[3]) %> <% month = workflow[0] total = workflow[1] @@ -38,6 +42,11 @@ ${get_css()} %endif
+ %try: + ${make_sparkline(key, trends[key], "bar", "/ day")} + %except KeyError: + %endtry + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/workflows_per_user.mako b/templates/webapps/reports/workflows_per_user.mako index cf0596322a1..20ea9419b9c 100644 --- a/templates/webapps/reports/workflows_per_user.mako +++ b/templates/webapps/reports/workflows_per_user.mako @@ -1,40 +1,48 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%! + import re + from galaxy import util +%> %if message: ${render_msg( message, 'done' )} %endif +${spark_css()} +${jqs_style()} ${get_css()}

Workflows Per User

+
Graph goes from present to past ${make_spark_settings( "jobs", "per_user", limit, sort_id, order, time_period )}
There are no jobs.
${job[2]} ${job[3]} ${job[1]}
${job[2]} ${job[3]} ${job[1]}
- ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'errors_per_tool', 'Tool ID')} + ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'errors_per_tool', 'Tool ID', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User Jobs in Error')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User Jobs in Error', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User and Monitor Jobs in Error')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User and Monitor Jobs in Error', spark_time=time_period)} ${arrow}
- ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'per_tool', 'Tool ID')} + ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'per_tool', 'Tool ID', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User Jobs')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User Jobs', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User and Monitor Jobs')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User and Monitor Jobs', spark_time=time_period)} ${arrow}
- ${get_sort_url(sort_id, order, 'user_email', 'jobs', 'per_user', 'User')} + ${get_sort_url(sort_id, order, 'user_email', 'jobs', 'per_user', 'User', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_user', 'Total Jobs')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_user', 'Total Jobs', spark_time=time_period)} ${arrow}
${month} ${total}
%if len( workflows ) == 0: %else: <% ctr = 0 %> %for workflow in workflows: <% - from galaxy import util email = workflow[0] total = workflow[1] user = trans.sa_session.query( trans.model.User ) \ .filter_by( email=email ) \ .one() + key = re.sub(r'\W+', '', workflow[0]) %> %if ctr % 2 == 1: @@ -43,6 +51,11 @@ ${get_css()} %endif + %try: + ${make_sparkline(key, trends[key], "bar", "/ " + time_period[:-1])} + %except KeyError: + %endtry + <% ctr += 1 %> %endfor diff --git a/templates/webapps/reports/workflows_user_per_month.mako b/templates/webapps/reports/workflows_user_per_month.mako index eb895740b46..f43266cc93f 100644 --- a/templates/webapps/reports/workflows_user_per_month.mako +++ b/templates/webapps/reports/workflows_user_per_month.mako @@ -1,5 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <% @@ -10,6 +11,7 @@ ${render_msg( message, 'done' )} %endif +${jqs_style()} ${get_css()} <% @@ -19,6 +21,9 @@ ${get_css()}

Workflows per month for user "${_email}"

+

+

Graph goes from first of the month to the last

+

There are no workflows
- ${get_sort_url(sort_id, order, 'user_email', 'workflows', 'per_user', 'User')} + ${get_sort_url(sort_id, order, 'user_email', 'workflows', 'per_user', 'User', spark_time=time_period)} ${arrow} - ${get_sort_url(sort_id, order, 'total_workflows', 'workflows', 'per_user', 'Total Workflows')} + ${get_sort_url(sort_id, order, 'total_workflows', 'workflows', 'per_user', 'Total Workflows', spark_time=time_period)} ${arrow}
${email} ${total}
%if len( workflows ) == 0: @@ -36,6 +41,7 @@ ${get_css()} <% ctr = 0 %> %for workflow in workflows: <% + key = workflow[2] + workflow[3] month = workflow[0] total = workflow[1] %> @@ -46,6 +52,8 @@ ${get_css()} %endif + ${make_sparkline(key, trends[key], "bar", "/ day")} + <% ctr += 1 %> %endfor From 263f6341274b06d60eb7e08d8bd834ad0b567c41 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Fri, 26 Jun 2015 10:17:21 -0500 Subject: [PATCH 15/68] Fixed up whitespaces --- lib/galaxy/webapps/reports/controllers/jobs.py | 2 ++ lib/galaxy/webapps/reports/controllers/workflows.py | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 460fcbcb48b..85131da4591 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -52,6 +52,7 @@ def sorter(default_sort_id, kwd): return SortSpec(sort_id, order, arrow, _order) + def get_spark_time( time_period ): _time_period = 0 @@ -69,6 +70,7 @@ def get_spark_time( time_period ): return time_period, _time_period + class SpecifiedDateListGrid( grids.Grid ): class JobIdColumn( grids.IntegerColumn ): diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index ef9c0abd7e2..41424e71934 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -160,7 +160,7 @@ class Workflows( BaseUIController, ReportQueryBuilder ): from_obj=[ sa.outerjoin( model.StoredWorkflow.table, model.User.table ) ], group_by=self.group_by_month( model.StoredWorkflow.table.c.create_time ), order_by=[ _order ] ) - + all_workflows = sa.select( ( self.select_day( model.StoredWorkflow.table.c.create_time ).label( 'date' ), model.StoredWorkflow.table.c.id ) ) @@ -207,7 +207,7 @@ class Workflows( BaseUIController, ReportQueryBuilder ): _order = specs.exc_order time_period = kwd.get('spark_time') time_period, _time_period = get_spark_time( time_period ) - limit=30 + limit = 30 workflows = [] q = sa.select( ( model.User.table.c.email.label( 'user_email' ), @@ -272,7 +272,7 @@ class Workflows( BaseUIController, ReportQueryBuilder ): from_obj=[ model.StoredWorkflow.table ], group_by=self.group_by_month( model.StoredWorkflow.table.c.create_time ), order_by=[ _order ] ) - + all_workflows_user_month = sa.select( ( self.select_day( model.StoredWorkflow.table.c.create_time ).label( 'date' ), model.StoredWorkflow.table.c.id ), whereclause=model.StoredWorkflow.table.c.user_id == user_id, From 328da98823722bb28ab09aa1caa00ca6085327c6 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 30 Jun 2015 09:46:50 -0500 Subject: [PATCH 16/68] Refactored and added styling --- client/galaxy/style/less/base.less | 29 +++++++++++++++++++ static/style/blue/base.css | 6 ++++ templates/spark_base.mako | 15 ---------- .../webapps/reports/jobs_errors_per_tool.mako | 10 +++---- .../webapps/reports/jobs_per_month_all.mako | 7 +++-- .../reports/jobs_per_month_in_error.mako | 7 +++-- templates/webapps/reports/jobs_per_tool.mako | 10 +++---- templates/webapps/reports/jobs_per_user.mako | 8 ++--- .../reports/jobs_specified_month_all.mako | 9 +++--- .../jobs_specified_month_in_error.mako | 9 +++--- .../webapps/reports/jobs_tool_per_month.mako | 7 +++-- .../webapps/reports/jobs_user_per_month.mako | 5 ++-- .../reports/registered_users_per_month.mako | 4 +-- .../registered_users_specified_month.mako | 4 +-- .../reports/requests_per_month_all.mako | 4 +-- .../webapps/reports/requests_per_user.mako | 4 +-- .../reports/requests_user_per_month.mako | 4 +-- .../reports/users_last_access_date.mako | 4 +-- .../reports/users_user_disk_usage.mako | 4 +-- .../reports/workflows_per_month_all.mako | 8 ++--- .../webapps/reports/workflows_per_user.mako | 8 ++--- .../reports/workflows_user_per_month.mako | 5 ++-- 22 files changed, 99 insertions(+), 72 deletions(-) diff --git a/client/galaxy/style/less/base.less b/client/galaxy/style/less/base.less index 80e8444b404..da5e65074e8 100644 --- a/client/galaxy/style/less/base.less +++ b/client/galaxy/style/less/base.less @@ -1705,3 +1705,32 @@ div.toolTitleNoSection #for_bears { display: none; } + +// ============================================================================ Reports Webapp + +.dir_arrow { + visibility: hidden +} + +#spark_time_select { + display: inline-block; +} + +#spark_select { + height: 23px; + width: 30px; + padding: 0; + border-radius: 2px; +} + +.quarter_width { + width: 25%; +} + +.third_width { + width: 30%; +} + +.half_width { + width: 50% +} diff --git a/static/style/blue/base.css b/static/style/blue/base.css index f1d6e219277..985db37d3f5 100644 --- a/static/style/blue/base.css +++ b/static/style/blue/base.css @@ -2377,3 +2377,9 @@ div.toolTitleNoSection{padding-bottom:5px;font-weight:bold} .icon-button.chevron-expand:hover{background-image:url(sprite-fugue.png);background-position:0px -336px;width:16px;height:16px;height:16px} .icon-button.chevron-expand{background-image:url(sprite-fugue.png);background-position:0px -320px;width:16px;height:16px;height:16px} #for_bears{display:none} +.dir_arrow{visibility:hidden} +#spark_time_select{display:inline-block} +#spark_select{height:23px;width:30px;padding:0;border-radius:2px} +.quarter_width{width:25%} +.third_width{width:30%} +.half_width{width:50%} diff --git a/templates/spark_base.mako b/templates/spark_base.mako index ea19597f6b1..33c4c642052 100644 --- a/templates/spark_base.mako +++ b/templates/spark_base.mako @@ -8,21 +8,6 @@ -<%def name="spark_css()"> - - - <%def name="make_spark_settings( controller, action, limit, sort_id, order, time_period )">
diff --git a/templates/webapps/reports/jobs_errors_per_tool.mako b/templates/webapps/reports/jobs_errors_per_tool.mako index dbf23d06f00..28defe9c22c 100644 --- a/templates/webapps/reports/jobs_errors_per_tool.mako +++ b/templates/webapps/reports/jobs_errors_per_tool.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,7 +10,6 @@ ${render_msg( message, 'done' )} %endif -${spark_css()} ${jqs_style()} ${get_css()} @@ -27,21 +26,22 @@ ${get_css()}
%else: - %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_per_month_all.mako b/templates/webapps/reports/jobs_per_month_all.mako index fcb5d9ce348..7cd4bf29d4c 100644 --- a/templates/webapps/reports/jobs_per_month_all.mako +++ b/templates/webapps/reports/jobs_per_month_all.mako @@ -20,21 +20,22 @@ ${get_css()} %else: - %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_per_month_in_error.mako b/templates/webapps/reports/jobs_per_month_in_error.mako index 742fd1e3d79..5c58b33b4aa 100644 --- a/templates/webapps/reports/jobs_per_month_in_error.mako +++ b/templates/webapps/reports/jobs_per_month_in_error.mako @@ -20,21 +20,22 @@ ${get_css()} %else: - %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_per_tool.mako b/templates/webapps/reports/jobs_per_tool.mako index f0cc4ac8b7c..b6c840fbfb7 100644 --- a/templates/webapps/reports/jobs_per_tool.mako +++ b/templates/webapps/reports/jobs_per_tool.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,7 +10,6 @@ ${render_msg( message, 'done' )} %endif -${spark_css()} ${jqs_style()} ${get_css()} @@ -26,21 +25,22 @@ ${get_css()} %else: - %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_per_user.mako b/templates/webapps/reports/jobs_per_user.mako index f5252211e48..c7886cfd380 100644 --- a/templates/webapps/reports/jobs_per_user.mako +++ b/templates/webapps/reports/jobs_per_user.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -10,7 +10,6 @@ ${render_msg( message, 'done' )} %endif -${spark_css()} ${jqs_style()} ${get_css()} @@ -26,14 +25,15 @@ ${get_css()} %else: - - + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_specified_month_all.mako b/templates/webapps/reports/jobs_specified_month_all.mako index 69b97d4492a..cb4f021dccf 100644 --- a/templates/webapps/reports/jobs_specified_month_all.mako +++ b/templates/webapps/reports/jobs_specified_month_all.mako @@ -20,22 +20,23 @@ ${get_css()} %else: - - + %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_specified_month_in_error.mako b/templates/webapps/reports/jobs_specified_month_in_error.mako index 807205b0019..daf8b0506bf 100644 --- a/templates/webapps/reports/jobs_specified_month_in_error.mako +++ b/templates/webapps/reports/jobs_specified_month_in_error.mako @@ -19,22 +19,23 @@ ${get_css()} %else: - - + %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_tool_per_month.mako b/templates/webapps/reports/jobs_tool_per_month.mako index 2bedfc24010..58e159f030c 100644 --- a/templates/webapps/reports/jobs_tool_per_month.mako +++ b/templates/webapps/reports/jobs_tool_per_month.mako @@ -24,21 +24,22 @@ ${get_css()} %else: - %if is_user_jobs_only: - %else: - %endif + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/jobs_user_per_month.mako b/templates/webapps/reports/jobs_user_per_month.mako index 6b045916153..d254d477ea5 100644 --- a/templates/webapps/reports/jobs_user_per_month.mako +++ b/templates/webapps/reports/jobs_user_per_month.mako @@ -31,14 +31,15 @@ ${get_css()} %else: - - + <% ctr = 0 %> %for job in jobs: diff --git a/templates/webapps/reports/registered_users_per_month.mako b/templates/webapps/reports/registered_users_per_month.mako index 5b54030f52a..8653a7741b6 100644 --- a/templates/webapps/reports/registered_users_per_month.mako +++ b/templates/webapps/reports/registered_users_per_month.mako @@ -17,11 +17,11 @@ ${get_css()} %else: - - diff --git a/templates/webapps/reports/registered_users_specified_month.mako b/templates/webapps/reports/registered_users_specified_month.mako index 0f63a3da3ce..f912d6aca36 100644 --- a/templates/webapps/reports/registered_users_specified_month.mako +++ b/templates/webapps/reports/registered_users_specified_month.mako @@ -14,8 +14,8 @@ %else: - - + + <% ctr = 0 %> %for user in users: diff --git a/templates/webapps/reports/requests_per_month_all.mako b/templates/webapps/reports/requests_per_month_all.mako index 2cd67314e45..a36ced7e8ee 100644 --- a/templates/webapps/reports/requests_per_month_all.mako +++ b/templates/webapps/reports/requests_per_month_all.mako @@ -13,8 +13,8 @@ %else: - - + + <% ctr = 0 %> %for request in requests: diff --git a/templates/webapps/reports/requests_per_user.mako b/templates/webapps/reports/requests_per_user.mako index 0eff425889f..f2727b0e6df 100644 --- a/templates/webapps/reports/requests_per_user.mako +++ b/templates/webapps/reports/requests_per_user.mako @@ -13,8 +13,8 @@ %else: - - + + <% ctr = 0 %> %for request in requests: diff --git a/templates/webapps/reports/requests_user_per_month.mako b/templates/webapps/reports/requests_user_per_month.mako index e3a78a52118..b3d5a2823ca 100644 --- a/templates/webapps/reports/requests_user_per_month.mako +++ b/templates/webapps/reports/requests_user_per_month.mako @@ -20,11 +20,11 @@ ${get_css()} %else: - - diff --git a/templates/webapps/reports/users_last_access_date.mako b/templates/webapps/reports/users_last_access_date.mako index 9a0b31ae5dc..a3564792e05 100644 --- a/templates/webapps/reports/users_last_access_date.mako +++ b/templates/webapps/reports/users_last_access_date.mako @@ -34,11 +34,11 @@ ${get_css()}
There are no workflows for user "${_email}"
${month} ${total}
There are no jobs in the error state.
+ ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'errors_per_tool', 'Tool ID', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User Jobs in Error', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'errors_per_tool', 'User and Monitor Jobs in Error', spark_time=time_period)} ${arrow}
There are no jobs.
+ ${get_sort_url(sort_id, order, 'date', 'jobs', 'per_month_all', 'Month')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_month_all', 'User Jobs')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_month_all', 'User and Monitor Jobs')} ${arrow}
There are no jobs in the error state.
+ ${get_sort_url(sort_id, order, 'date', 'jobs', 'per_month_in_error', 'Month')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_month_in_error', 'User Jobs')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_month_in_error', 'User and Monitor Jobs')} ${arrow}
There are no jobs.
+ ${get_sort_url(sort_id, order, 'tool_id', 'jobs', 'per_tool', 'Tool ID', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User Jobs', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_tool', 'User and Monitor Jobs', spark_time=time_period)} ${arrow}
There are no jobs.
+ ${get_sort_url(sort_id, order, 'user_email', 'jobs', 'per_user', 'User', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'per_user', 'Total Jobs', spark_time=time_period)} ${arrow}
There are no jobs for ${month_label} ${year_label}
Day + Day ${get_sort_url(sort_id, order, 'date', 'jobs', 'specified_month_all', 'Date')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User Jobs')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User and Monitor Jobs')} ${arrow}
There are no jobs in the error state for ${month_label} ${year_label}
Day + Day ${get_sort_url(sort_id, order, 'date', 'jobs', 'specified_month_in_error', 'Date')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_in_error', 'User Jobs in Error')} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_in_error', 'User and Monitor Jobs in Error')} ${arrow}
There are no jobs for tool "${tool_id}"
+ ${get_sort_url(sort_id, order, 'date', 'jobs', 'tool_per_month', 'Month', tool_id=tool_id)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'tool_per_month', 'User Jobs', tool_id=tool_id)} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'tool_per_month', 'User and Monitor Jobs', tool_id=tool_id)} ${arrow}
There are no jobs for user "${ _email }"
+ ${get_sort_url(sort_id, order, 'date', 'jobs', 'user_per_month', 'Month', email=email )} ${arrow} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'user_per_month', 'Total Jobs', email=email)} ${arrow}
There are no registered users
+ ${get_sort_url(sort_id, order, 'date', 'users', 'registered_users_per_month', 'Month')} ${arrow} + ${get_sort_url(sort_id, order, 'num_users', 'users', 'registered_users_per_month', 'Number of Registrations')} ${arrow}
There are no user registrations for ${month_label} ${year_label}
DayNew RegistrationsDayNew Registrations
There are no requests
MonthTotalMonthTotal
There are no requests
UserTotal RequestsUserTotal Requests
There are no requests for user "${util.restore_text( email )}"
+ ${get_sort_url(sort_id, order, 'date', 'users' 'requests_users_per_month', 'Month')} ${arrow} Total + Total ${get_sort_url(sort_id, order, 'num_users', 'users' 'requests_users_per_month', 'Month')} ${arrow}
%if users: - - diff --git a/templates/webapps/reports/users_user_disk_usage.mako b/templates/webapps/reports/users_user_disk_usage.mako index d2511140f6c..c232bf1dcc6 100644 --- a/templates/webapps/reports/users_user_disk_usage.mako +++ b/templates/webapps/reports/users_user_disk_usage.mako @@ -27,11 +27,11 @@ ${get_css()}
+ ${get_sort_url(sort_id, order, 'zero', 'users', 'last_access_date', 'Email', days_not_logged_in=days_not_logged_in)} ${arrow} + ${get_sort_url(sort_id, order, 'one', 'users', 'last_access_date', 'Date of last Login', days_not_logged_in=days_not_logged_in)} ${arrow}
%if users: - - diff --git a/templates/webapps/reports/workflows_per_month_all.mako b/templates/webapps/reports/workflows_per_month_all.mako index 2416b135abe..4b0fdf24496 100644 --- a/templates/webapps/reports/workflows_per_month_all.mako +++ b/templates/webapps/reports/workflows_per_month_all.mako @@ -1,13 +1,12 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> %if message: ${render_msg( message, 'done' )} %endif -${spark_css()} ${jqs_style()} ${get_css()} @@ -19,14 +18,15 @@ ${get_css()} %else: - - + <% ctr = 0 %> %for workflow in workflows: diff --git a/templates/webapps/reports/workflows_per_user.mako b/templates/webapps/reports/workflows_per_user.mako index 20ea9419b9c..6299aeb2d3d 100644 --- a/templates/webapps/reports/workflows_per_user.mako +++ b/templates/webapps/reports/workflows_per_user.mako @@ -1,6 +1,6 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings, spark_css" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> <%! import re @@ -11,7 +11,6 @@ ${render_msg( message, 'done' )} %endif -${spark_css()} ${jqs_style()} ${get_css()} @@ -24,15 +23,16 @@ ${get_css()} %else: - - + <% ctr = 0 %> %for workflow in workflows: diff --git a/templates/webapps/reports/workflows_user_per_month.mako b/templates/webapps/reports/workflows_user_per_month.mako index f43266cc93f..6d2f50cd084 100644 --- a/templates/webapps/reports/workflows_user_per_month.mako +++ b/templates/webapps/reports/workflows_user_per_month.mako @@ -29,14 +29,15 @@ ${get_css()} %else: - - + <% ctr = 0 %> %for workflow in workflows: From 860c39b48c37ca4bb37c2be555b983d1cd95f8a7 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 30 Jun 2015 10:44:06 -0500 Subject: [PATCH 17/68] Added new Runs per workflow page --- .../webapps/reports/controllers/workflows.py | 69 +++++++++++++++++++ templates/webapps/reports/index.mako | 1 + .../reports/workflows_per_workflow.mako | 65 +++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 templates/webapps/reports/workflows_per_workflow.mako diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 562a1a55619..ac6ea5b56f6 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -223,6 +223,75 @@ class Workflows( BaseUIController, ReportQueryBuilder ): sort_id=sort_id, workflows=workflows, message=message ) + + @web.expose + def per_workflow( self, trans, **kwd ): + message = '' + + params = util.Params( kwd ) + specs = sorter( 'workflow_name', kwd ) + sort_id = specs.sort_id + order = specs.order + arrow = specs.arrow + _order = specs.exc_order + time_period = kwd.get('spark_time') + time_period, _time_period = get_spark_time( time_period ) + limit = 30 + + # In case we don't know which is the monitor user we will query for all jobs + + q = sa.select( ( model.Workflow.table.c.id.label( 'workflow_id' ), + sa.func.min(model.Workflow.table.c.name).label( 'workflow_name' ), + sa.func.count( model.WorkflowInvocation.table.c.id ).label( 'total_runs' ) ), + from_obj=[ model.Workflow.table, + model.WorkflowInvocation.table ], + whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id==model.Workflow.table.c.id ), + group_by=[ model.Workflow.table.c.id ], + order_by=[ _order ] + ) + + all_runs_per_workflow = sa.select( ( model.Workflow.table.c.id.label( 'workflow_id' ), + model.Workflow.table.c.name.label( 'workflow_name' ), + self.select_day( model.WorkflowInvocation.table.c.create_time ).label( 'date' ) ), + from_obj=[ model.Workflow.table, + model.WorkflowInvocation.table ], + whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id==model.Workflow.table.c.id ) ) + + currday = date.today() + trends = dict() + for run in all_runs_per_workflow.execute(): + curr_tool = re.sub(r'\W+', '', str(run.workflow_id)) + try: + day = currday - run.date + except TypeError: + day = currday - datetime.date(run.date) + + day = day.days + container = floor(day / _time_period) + container = int(container) + try: + if container < limit: + trends[curr_tool][container] += 1 + except KeyError: + trends[curr_tool] = [0] * limit + if container < limit: + trends[curr_tool][container] += 1 + + runs = [] + for row in q.execute(): + runs.append( ( row.workflow_name, + row.total_runs, + row.workflow_id) ) + + return trans.fill_template( '/webapps/reports/workflows_per_workflow.mako', + order=order, + arrow=arrow, + sort_id=sort_id, + limit=limit, + time_period=time_period, + trends=trends, + runs=runs, + message=message) # ---- Utility methods ------------------------------------------------------- diff --git a/templates/webapps/reports/index.mako b/templates/webapps/reports/index.mako index 0ab41755770..5f8c72f34fb 100644 --- a/templates/webapps/reports/index.mako +++ b/templates/webapps/reports/index.mako @@ -74,6 +74,7 @@
diff --git a/templates/webapps/reports/workflows_per_workflow.mako b/templates/webapps/reports/workflows_per_workflow.mako new file mode 100644 index 00000000000..0dc1c59a617 --- /dev/null +++ b/templates/webapps/reports/workflows_per_workflow.mako @@ -0,0 +1,65 @@ +<%inherit file="/base.mako"/> +<%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/spark_base.mako" import="jqs_style, make_sparkline, make_spark_settings" /> +<%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%! + import re +%> + +%if message: + ${render_msg( message, 'done' )} +%endif + +${jqs_style()} +${get_css()} + + +
+
+

Runs per Workflow

+
+ Graph goes from present to past ${make_spark_settings( 'workflows', 'per_workflow', limit, sort_id, order, time_period )} +
+
+ ${get_sort_url(sort_id, order, 'email', 'users', 'user_disk_usage', 'Email')} + ${get_sort_url(sort_id, order, 'disk_usage', 'users', 'user_disk_usage', 'Disk Usage')} ${arrow}
There are no workflows
+ ${get_sort_url(sort_id, order, 'date', 'workflows', 'per_month_all', 'Month')} ${arrow} + ${get_sort_url(sort_id, order, 'total_workflows', 'workflows', 'per_month_all', 'Total')} ${arrow}
There are no workflows
+ ${get_sort_url(sort_id, order, 'user_email', 'workflows', 'per_user', 'User', spark_time=time_period)} ${arrow} + ${get_sort_url(sort_id, order, 'total_workflows', 'workflows', 'per_user', 'Total Workflows', spark_time=time_period)} ${arrow}
There are no workflows for user "${_email}"
+ ${get_sort_url(sort_id, order, 'date', 'workflows', 'user_per_month', 'Month', email=util.sanitize_text( email ))} ${arrow} + ${get_sort_url(sort_id, order, 'total_workflows', 'workflows', 'user_per_month', 'Total', email=util.sanitize_text( email ))} ${arrow}
+ %if len( runs ) == 0: + + %else: + + + + + + + <% ctr = 0 %> + %for run in runs: + <% key = re.sub(r'\W+', '', str(run[2])) %> + %if ctr % 2 == 1: + + %else: + + %endif + + + + %try: + ${make_sparkline(key, trends[key], "bar", "/ " + time_period[:-1])} + %except KeyError: + %endtry + + + <% ctr += 1 %> + %endfor + %endif +
There are no runs.
+ ${get_sort_url(sort_id, order, 'workflow_id', 'workflows', 'per_workflow', 'Workflow ID', spark_time=time_period)} + ${arrow} + + ${get_sort_url(sort_id, order, 'workflow_name', 'workflows', 'per_workflow', 'Workflow Name', spark_time=time_period)} + ${arrow} + + ${get_sort_url(sort_id, order, 'total_runs', 'workflows', 'per_workflow', 'Workflow Runs', spark_time=time_period)} + ${arrow} +
${run[2]}${run[0]}${run[1]}
+
+
+ From 33154aaac535fcac0c1a1b6ee9aa0617736862ba Mon Sep 17 00:00:00 2001 From: Airistotal Date: Tue, 30 Jun 2015 10:50:06 -0500 Subject: [PATCH 18/68] Fixed formatting --- lib/galaxy/webapps/reports/controllers/workflows.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 5232323a10e..b11ced0d3fc 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -308,12 +308,11 @@ class Workflows( BaseUIController, ReportQueryBuilder ): trends=trends, workflows=workflows, message=message ) - + @web.expose def per_workflow( self, trans, **kwd ): message = '' - params = util.Params( kwd ) specs = sorter( 'workflow_name', kwd ) sort_id = specs.sort_id order = specs.order @@ -330,17 +329,16 @@ class Workflows( BaseUIController, ReportQueryBuilder ): sa.func.count( model.WorkflowInvocation.table.c.id ).label( 'total_runs' ) ), from_obj=[ model.Workflow.table, model.WorkflowInvocation.table ], - whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id==model.Workflow.table.c.id ), + whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id ), group_by=[ model.Workflow.table.c.id ], - order_by=[ _order ] - ) + order_by=[ _order ] ) all_runs_per_workflow = sa.select( ( model.Workflow.table.c.id.label( 'workflow_id' ), model.Workflow.table.c.name.label( 'workflow_name' ), self.select_day( model.WorkflowInvocation.table.c.create_time ).label( 'date' ) ), from_obj=[ model.Workflow.table, model.WorkflowInvocation.table ], - whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id==model.Workflow.table.c.id ) ) + whereclause=sa.and_( model.WorkflowInvocation.table.c.workflow_id == model.Workflow.table.c.id ) ) currday = date.today() trends = dict() From 1b23081d41e28eccbd1f6dc4326e8f8340ba73c0 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Fri, 17 Jul 2015 14:00:39 +0100 Subject: [PATCH 19/68] Refactor reports styling out into its own less file. This was it doesn't need to be loaded for Galaxy. --- client/galaxy/style/less/base.less | 29 ---------------------- client/galaxy/style/less/reports.less | 28 +++++++++++++++++++++ client/grunt-tasks/style.js | 5 ++-- static/style/blue/base.css | 6 ----- static/style/blue/reports.css | 6 +++++ templates/webapps/reports/base_panels.mako | 6 +++++ 6 files changed, 43 insertions(+), 37 deletions(-) create mode 100644 client/galaxy/style/less/reports.less create mode 100644 static/style/blue/reports.css diff --git a/client/galaxy/style/less/base.less b/client/galaxy/style/less/base.less index da5e65074e8..80e8444b404 100644 --- a/client/galaxy/style/less/base.less +++ b/client/galaxy/style/less/base.less @@ -1705,32 +1705,3 @@ div.toolTitleNoSection #for_bears { display: none; } - -// ============================================================================ Reports Webapp - -.dir_arrow { - visibility: hidden -} - -#spark_time_select { - display: inline-block; -} - -#spark_select { - height: 23px; - width: 30px; - padding: 0; - border-radius: 2px; -} - -.quarter_width { - width: 25%; -} - -.third_width { - width: 30%; -} - -.half_width { - width: 50% -} diff --git a/client/galaxy/style/less/reports.less b/client/galaxy/style/less/reports.less new file mode 100644 index 00000000000..ddb102759e0 --- /dev/null +++ b/client/galaxy/style/less/reports.less @@ -0,0 +1,28 @@ +// ============================================================================ Reports Webapp + +.dir_arrow { + visibility: hidden +} + +#spark_time_select { + display: inline-block; +} + +#spark_select { + height: 23px; + width: 30px; + padding: 0; + border-radius: 2px; +} + +.quarter_width { + width: 25%; +} + +.third_width { + width: 30%; +} + +.half_width { + width: 50% +} diff --git a/client/grunt-tasks/style.js b/client/grunt-tasks/style.js index 47be772bf8d..97dad713735 100644 --- a/client/grunt-tasks/style.js +++ b/client/grunt-tasks/style.js @@ -20,7 +20,8 @@ module.exports = function( grunt ){ 'masthead', 'library', 'trackster', - 'circster' + 'circster', + 'reports' ]; @@ -79,4 +80,4 @@ module.exports = function( grunt ){ }); grunt.registerTask( 'style', [ 'sprite', 'less-site-config', 'less', 'clean' ] ); -}; \ No newline at end of file +}; diff --git a/static/style/blue/base.css b/static/style/blue/base.css index 985db37d3f5..f1d6e219277 100644 --- a/static/style/blue/base.css +++ b/static/style/blue/base.css @@ -2377,9 +2377,3 @@ div.toolTitleNoSection{padding-bottom:5px;font-weight:bold} .icon-button.chevron-expand:hover{background-image:url(sprite-fugue.png);background-position:0px -336px;width:16px;height:16px;height:16px} .icon-button.chevron-expand{background-image:url(sprite-fugue.png);background-position:0px -320px;width:16px;height:16px;height:16px} #for_bears{display:none} -.dir_arrow{visibility:hidden} -#spark_time_select{display:inline-block} -#spark_select{height:23px;width:30px;padding:0;border-radius:2px} -.quarter_width{width:25%} -.third_width{width:30%} -.half_width{width:50%} diff --git a/static/style/blue/reports.css b/static/style/blue/reports.css new file mode 100644 index 00000000000..cc14661617f --- /dev/null +++ b/static/style/blue/reports.css @@ -0,0 +1,6 @@ +.dir_arrow{visibility:hidden} +#spark_time_select{display:inline-block} +#spark_select{height:23px;width:30px;padding:0;border-radius:2px} +.quarter_width{width:25%} +.third_width{width:30%} +.half_width{width:50%} diff --git a/templates/webapps/reports/base_panels.mako b/templates/webapps/reports/base_panels.mako index d2c3f3623ff..84bd5624026 100644 --- a/templates/webapps/reports/base_panels.mako +++ b/templates/webapps/reports/base_panels.mako @@ -1,5 +1,11 @@ <%inherit file="/base/base_panels.mako"/> +<%def name="stylesheets()"> + ${parent.stylesheets()} + ${h.css( "reports" )} + + + ## Default title <%def name="title()">Galaxy Reports From 1ac9e5f05492e16a0cdd1409875efb6aec94d9cd Mon Sep 17 00:00:00 2001 From: Airistotal Date: Fri, 17 Jul 2015 14:33:34 -0500 Subject: [PATCH 20/68] Fixed import clash --- lib/galaxy/webapps/reports/controllers/jobs.py | 1 - lib/galaxy/webapps/reports/controllers/workflows.py | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index f5413c20f11..713c7b40afe 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -12,7 +12,6 @@ from sqlalchemy import and_, not_, or_ from galaxy import model, util from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids -from galaxy.model.orm import and_, not_, or_ from math import floor import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 78c1cf45d1e..66270290f53 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -7,7 +7,6 @@ import sqlalchemy as sa from sqlalchemy import and_ from galaxy import model, util -from galaxy.model.orm import and_ from math import floor from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids From 6f4eeb28e3ea8bba34e80b6543b837f2ee834a5b Mon Sep 17 00:00:00 2001 From: Airistotal Date: Fri, 17 Jul 2015 14:41:10 -0500 Subject: [PATCH 21/68] Removed duplicate import --- lib/galaxy/webapps/reports/controllers/jobs.py | 1 - lib/galaxy/webapps/reports/controllers/workflows.py | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index 713c7b40afe..755e42a9573 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -16,7 +16,6 @@ from math import floor import pkg_resources pkg_resources.require( "SQLAlchemy >= 0.4" ) import re -import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder log = logging.getLogger( __name__ ) diff --git a/lib/galaxy/webapps/reports/controllers/workflows.py b/lib/galaxy/webapps/reports/controllers/workflows.py index 66270290f53..4fdc9f92aca 100644 --- a/lib/galaxy/webapps/reports/controllers/workflows.py +++ b/lib/galaxy/webapps/reports/controllers/workflows.py @@ -12,7 +12,6 @@ from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids eggs.require( "SQLAlchemy >= 0.4" ) import re -import sqlalchemy as sa from galaxy.webapps.reports.controllers.query import ReportQueryBuilder from galaxy.webapps.reports.controllers.jobs import sorter, get_spark_time From e55c5e5d9d4d5bf878570ebe9d8b1803f3404204 Mon Sep 17 00:00:00 2001 From: Greg Von Kuster Date: Tue, 28 Jul 2015 08:36:13 -0400 Subject: [PATCH 22/68] Fix the ChangeDirectory.execute_step() method and enhance the "directory" recipe step classes to perform within the temporary working directory created by the InstallEnvironment.make_tmp_dir() method (via the use of a new TMP_WORK_DIR reserved word in recipes) in addition to the $INSTALL_DIR reserved word (which has always been supported in recipes). This commit grew out of a fix for the following code in the ChangeDirectory.execute_step() method, which does not perform as the comment describes: ================= # Change directory to a directory above the current working directory, but within the defined work_dir. dir = target_directory.replace( os.path.realpath( work_dir ), '' ).lstrip( '/' ) ================== The resulting directory is always within the current working directory rather than "above" it. The new TMP_WORK_DIR reserved word points to the actual temporary working directory, so recipes now have a way to do perform actions within that directory during the compilation and installation process. --- .../tool_dependencies/recipe/step_handler.py | 79 +++++++++++++------ 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py index 248d2a4c051..df81eaa923f 100755 --- a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py +++ b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py @@ -248,7 +248,31 @@ class RecipeStep( object ): raise "Unimplemented Method" -class AssertDirectoryExecutable( RecipeStep ): +class DirectoryRecipeStep( RecipeStep ): + """ + Class for handling recipe steps related to directory actions during the + installation process. Recipes that use the TMP_WORK_DIR reserved word + enable sub-classes (e.g., MakeDirectory, ChangeDirectory, etc) to perform + actions via the subclass's execute_step() method within the temporary + working directory created by the InstallEnvironment.make_tmp_dir() method. + This mirrors the same behavior that results from the use of the $INSTALL_DIR + keyword, where the subclasses perform the same directory actions within + the installation environment rather than the working environment. + """ + + def set_directory_path( self, work_dir, current_dir, target_dir ): + """ + This method currently replaces the TMP_WORK_DIR keyword with the path + to the temporary working directory. + """ + if target_dir.startswith( 'TMP_WORK_DIR' ): + target_dir = target_dir.replace( 'TMP_WORK_DIR', os.path.realpath( work_dir ) ) + elif current_dir is not None: + target_dir = os.path.join( current_dir, target_dir ) + return os.path.normpath( target_dir ) + + +class AssertDirectoryExecutable( DirectoryRecipeStep ): def __init__( self, app ): self.app = app @@ -277,10 +301,11 @@ class AssertDirectoryExecutable( RecipeStep ): Since this class is not used in the initial download stage, no recipe step filtering is performed here, and None values are always returned for filtered_actions and dir. """ - if os.path.isabs( action_dict[ 'full_path' ] ): - full_path = action_dict[ 'full_path' ] + tmp_path = self.set_directory_path( work_dir, current_dir, action_dict[ 'full_path' ] ) + if os.path.isabs( tmp_path ): + full_path = tmp_path else: - full_path = os.path.join( current_dir, action_dict[ 'full_path' ] ) + full_path = os.path.join( current_dir, tmp_path ) if not self.assert_directory_executable( full_path=full_path ): status = self.app.install_model.ToolDependency.installation_status.ERROR error_message = 'The path %s is not a directory or is not executable by the owner.' % str( full_path ) @@ -298,7 +323,7 @@ class AssertDirectoryExecutable( RecipeStep ): return action_dict -class AssertDirectoryExists( RecipeStep ): +class AssertDirectoryExists( DirectoryRecipeStep ): def __init__( self, app ): self.app = app @@ -323,10 +348,11 @@ class AssertDirectoryExists( RecipeStep ): class is not used in the initial download stage, no recipe step filtering is performed here, and None values are always returned for filtered_actions and dir. """ - if os.path.isabs( action_dict[ 'full_path' ] ): - full_path = action_dict[ 'full_path' ] + tmp_path = self.set_directory_path( work_dir, current_dir, action_dict[ 'full_path' ] ) + if os.path.isabs( tmp_path ): + full_path = tmp_path else: - full_path = os.path.join( current_dir, action_dict[ 'full_path' ] ) + full_path = os.path.join( current_dir, tmp_path ) if not self.assert_directory_exists( full_path=full_path ): status = self.app.install_model.ToolDependency.installation_status.ERROR error_message = 'The path %s is not a directory or does not exist.' % str( full_path ) @@ -476,7 +502,7 @@ class Autoconf( RecipeStep ): return action_dict -class ChangeDirectory( RecipeStep ): +class ChangeDirectory( DirectoryRecipeStep ): def __init__( self, app ): self.app = app @@ -489,15 +515,13 @@ class ChangeDirectory( RecipeStep ): no recipe step filtering is performed here and a None value is return for filtered_actions. However, the new dir value is returned since it is needed for later steps. """ - target_directory = os.path.realpath( os.path.normpath( os.path.join( current_dir, action_dict[ 'directory' ] ) ) ) - if target_directory.startswith( os.path.realpath( current_dir ) ) and os.path.exists( target_directory ): - # Change directory to a directory within the current working directory. - dir = target_directory - elif target_directory.startswith( os.path.realpath( work_dir ) ) and os.path.exists( target_directory ): - # Change directory to a directory above the current working directory, but within the defined work_dir. - dir = target_directory.replace( os.path.realpath( work_dir ), '' ).lstrip( '/' ) + target_directory = self.set_directory_path( work_dir, current_dir, action_dict[ 'directory' ] ) + if target_directory.startswith( os.path.realpath( work_dir ) ) and os.path.exists( target_directory ): + # Change directory to a directory either above or within current_dir, + # which is within the defined work_dir. + dir = os.path.normpath( target_directory ) else: - log.debug( 'Invalid or nonexistent directory %s specified, ignoring change_directory action.', target_directory ) + log.debug( 'Invalid or nonexistent directory %s specified, ignoring change_directory action.' % str( target_directory ) ) dir = current_dir return tool_dependency, None, dir @@ -760,7 +784,7 @@ class DownloadFile( Download, RecipeStep ): return action_dict -class MakeDirectory( RecipeStep ): +class MakeDirectory( DirectoryRecipeStep ): def __init__( self, app ): self.app = app @@ -772,10 +796,11 @@ class MakeDirectory( RecipeStep ): Make a directory on disk. Since this class is not used in the initial download stage, no recipe step filtering is performed here, and None values are always returned for filtered_actions and dir. """ - if os.path.isabs( action_dict[ 'full_path' ] ): - full_path = action_dict[ 'full_path' ] + tmp_dir = self.set_directory_path( work_dir, current_dir, action_dict[ 'full_path' ] ) + if os.path.isabs( tmp_dir ): + full_path = tmp_dir else: - full_path = os.path.join( current_dir, action_dict[ 'full_path' ] ) + full_path = os.path.join( current_dir, tmp_dir ) self.make_directory( full_path=full_path ) return tool_dependency, None, None @@ -821,7 +846,7 @@ class MakeInstall( RecipeStep ): return action_dict -class MoveDirectoryFiles( RecipeStep ): +class MoveDirectoryFiles( DirectoryRecipeStep ): def __init__( self, app ): self.app = app @@ -833,9 +858,15 @@ class MoveDirectoryFiles( RecipeStep ): Move a directory of files. Since this class is not used in the initial download stage, no recipe step filtering is performed here, and None values are always returned for filtered_actions and dir. """ + source_dir = self.set_directory_path( work_dir, + current_dir, + action_dict[ 'source_directory' ] ) + destination_dir = self.set_directory_path( work_dir, + current_dir, + action_dict[ 'destination_directory' ] ) self.move_directory_files( current_dir=current_dir, - source_dir=os.path.join( action_dict[ 'source_directory' ] ), - destination_dir=os.path.join( action_dict[ 'destination_directory' ] ) ) + source_dir=source_dir, + destination_dir=destination_dir ) return tool_dependency, None, None def move_directory_files( self, current_dir, source_dir, destination_dir ): From 2c2f49bf8e980ff7879452f0073ec755906f5591 Mon Sep 17 00:00:00 2001 From: Carl Eberhard Date: Wed, 29 Jul 2015 13:57:34 -0400 Subject: [PATCH 23/68] Visualizations, trackster: allow the user to add the dataset launched from as a new track in an existing trackster visualization; add utils/query-string-parsing.js for pulling query params from the query string --- .../scripts/utils/query-string-parsing.js | 21 +++++ client/galaxy/scripts/viz/trackster.js | 84 +++++++++++++++++-- .../trackster/config/trackster.xml | 1 + static/maps/utils/query-string-parsing.js.map | 1 + static/maps/viz/trackster.js.map | 2 +- static/scripts/utils/query-string-parsing.js | 2 + static/scripts/viz/trackster.js | 2 +- 7 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 client/galaxy/scripts/utils/query-string-parsing.js create mode 100644 static/maps/utils/query-string-parsing.js.map create mode 100644 static/scripts/utils/query-string-parsing.js diff --git a/client/galaxy/scripts/utils/query-string-parsing.js b/client/galaxy/scripts/utils/query-string-parsing.js new file mode 100644 index 00000000000..8b5ec29433d --- /dev/null +++ b/client/galaxy/scripts/utils/query-string-parsing.js @@ -0,0 +1,21 @@ +define([], function(){ +// ============================================================================ +function get( key, queryString ){ + queryString = queryString || window.location.search.substr( 1 ); + var keyRegex = new RegExp( key + '=([^&#$]+)' ), + matches = queryString.match( keyRegex ); + if( !matches || !matches.length ){ + return undefined; + } + matches = matches.splice( 1 ); + if( matches.length === 1 ){ + return matches[0]; + } + return matches; +} + +// ============================================================================ + return { + get : get + }; +}); diff --git a/client/galaxy/scripts/viz/trackster.js b/client/galaxy/scripts/viz/trackster.js index 02d162ca472..3131070c79c 100644 --- a/client/galaxy/scripts/viz/trackster.js +++ b/client/galaxy/scripts/viz/trackster.js @@ -31,8 +31,8 @@ require( }); // trackster viewer -define( ["libs/underscore", "base", "viz/trackster/tracks", "viz/visualization", "mvc/ui/icon-button" ], - function(_, base, tracks, visualization, mod_icon_btn) { +define( ["libs/underscore", "base", "viz/trackster/tracks", "viz/visualization", "mvc/ui/icon-button", "utils/query-string-parsing" ], + function(_, base, tracks, visualization, mod_icon_btn, query_string ) { /** * User interface controls for trackster */ @@ -401,11 +401,84 @@ var TracksterView = Backbone.View.extend( // hide right panel force_right_panel("hide"); + // check if id is available - if (galaxy_config.app.id) + if (galaxy_config.app.id){ this.view_existing(); - else + } else if( query_string.get( 'dataset_id' ) ){ + this.choose_existing_or_new(); + } else { this.view_new(); + } + }, + + choose_existing_or_new : function () { + var self = this; + var dbkey = query_string.get( 'dbkey' ), + listTracksParams = {}, + dataset_params = { + dbkey : dbkey, + dataset_id : query_string.get( 'dataset_id' ), + hda_ldda : query_string.get( 'hda_ldda' ) + }; + if (dbkey){ + listTracksParams[ 'f-dbkey' ] = dbkey; + } + $.ajax({ + url: galaxy_config.root + 'visualization/list_tracks?' + $.param( listTracksParams ), + dataType: "html", + error: function() { alert( "Could not add this dataset to browser." ); }, + + success: function(table_html) { + console.debug( 'success' ); + function view_in_saved(){ + // Show new modal with saved visualizations. + Galaxy.modal.show({ + title : "Add Data to Saved Visualization", + body : table_html, + buttons : { + "Cancel": function() { + // go back to the first choice + show_choice(); + }, + "Add to visualization": function() { + $(parent.document).find('input[name=id]:checked').each(function() { + var vis_id = $(this).val(); + dataset_params.id = vis_id; + window.location = galaxy_config.root + "visualization/trackster?" + $.param(dataset_params); + }); + } + } + }); + } + function show_choice(){ + Galaxy.modal.show({ + title : "View Data in a New or Saved Visualization?", + // either have text in here or have to remove body and the header/footer margins + body : ( + // TODO: yay. inline styles. thanks, galaxy + '

    You can add this dataset as:' + + "
  • a new track to one of your existing, saved Trackster " + + "sessions if they share the genome build: " + dbkey + "
  • " + + "
  • or create a new session with this dataset as the only track
  • " + + "

" + ), + buttons : { + "Cancel": function() { + window.location = galaxy_config.root + "visualization/list"; + }, + "View in saved visualization": function() { + view_in_saved(); + }, + "View in new visualization": function() { + self.view_new(); + } + } + }); + } + show_choice(); + } + }); }, // view @@ -459,7 +532,8 @@ var TracksterView = Backbone.View.extend( }); // select default - if (galaxy_config.app.default_dbkey) { + var dbkeys_in_genomes = response.map( function( r ){ return r[1]; }); + if (galaxy_config.app.default_dbkey && _.contains(dbkeys_in_genomes,galaxy_config.app.default_dbkey)) { $("#new-dbkey").val( galaxy_config.app.default_dbkey ); } diff --git a/config/plugins/visualizations/trackster/config/trackster.xml b/config/plugins/visualizations/trackster/config/trackster.xml index 02e06e73e52..2d63a12854b 100644 --- a/config/plugins/visualizations/trackster/config/trackster.xml +++ b/config/plugins/visualizations/trackster/config/trackster.xml @@ -15,6 +15,7 @@ None dataset_id hda_ldda + dbkey diff --git a/static/maps/utils/query-string-parsing.js.map b/static/maps/utils/query-string-parsing.js.map new file mode 100644 index 00000000000..d094099a2ac --- /dev/null +++ b/static/maps/utils/query-string-parsing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query-string-parsing.js","sources":["../../src/utils/query-string-parsing.js"],"names":["define","get","key","queryString","window","location","search","substr","keyRegex","RegExp","matches","match","length","splice","undefined"],"mappings":"AAAAA,UAAW,WAEX,QAASC,GAAKC,EAAKC,GACfA,EAAcA,GAAeC,OAAOC,SAASC,OAAOC,OAAQ,EAC5D,IAAIC,GAAW,GAAIC,QAAQP,EAAM,cAC7BQ,EAAUP,EAAYQ,MAAOH,EACjC,OAAKE,IAAYA,EAAQE,QAGzBF,EAAUA,EAAQG,OAAQ,GACH,IAAnBH,EAAQE,OACDF,EAAQ,GAEZA,GANII,OAUX,OACIb,IAAMA"} \ No newline at end of file diff --git a/static/maps/viz/trackster.js.map b/static/maps/viz/trackster.js.map index 83d0ceaa2fe..99be99d004d 100644 --- a/static/maps/viz/trackster.js.map +++ b/static/maps/viz/trackster.js.map @@ -1 +1 @@ -{"version":3,"file":"trackster.js","sources":["../../src/viz/trackster.js"],"names":["ui","view","browser_router","require","mod_utils","cssLoadFile","define","_","base","tracks","visualization","mod_icon_btn","TracksterUI","Base","extend","initialize","baseURL","this","save_viz","Galaxy","modal","show","title","body","bookmarks","$","each","push","position","children","text","annotation","overview_track_name","overview_drawable","config","get_value","viz_config","to_dict","viewport","chrom","start","low","end","high","overview","ajax","url","galaxy_config","root","type","dataType","data","id","vis_id","dbkey","vis_json","JSON","stringify","success","vis_info","hide","has_changes","window","history","pushState","location","hash","error","buttons","Cancel","createButtonMenu","self","menu","create_icon_buttons_menu","icon_class","on_click","select_datasets","f-dbkey","new_tracks","track","add_drawable","object_from_template","DrawableGroup","name","force_right_panel","css","handle_unsaved_changes","tooltip_config","placement","buttonMenu","add_bookmarks","alert","table_html","Insert","first","val","attr","hda_id","ldda_id","then","i","length","row","add_bookmark","editable","bookmarks_container","new_bookmark","addClass","appendTo","position_div","annotation_div","click","go_to","delete_icon_container","prependTo","slideUp","remove","make_text_editable","num_rows","use_textarea","help_text","create_visualization","view_config","viewport_config","drawables_config","bookmarks_config","TracksterView","header","editor","when","load_chroms_deferred","chrom_info","overview_drawable_name","undefined","change_chrom","drawables","set_overview","bookmark","set_up_router","options","TrackBrowserRouter","Backbone","init_keyboard_nav","document","keyup","e","srcElement","is","which","move_fraction","Math","round","viewport_container","height","scrollTop","Leave without Saving","off","Save","View","$el","append","resize_window","app","view_existing","view_new","container","init_editor","response","template_view_new","Create","create_browser","default_dbkey","focus","select2","html","trigger","gene_region","add_dataset","hda_ldda","data_type","track_data","on","GalaxyApp"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"trackster.js","sources":["../../src/viz/trackster.js"],"names":["ui","view","browser_router","require","mod_utils","cssLoadFile","define","_","base","tracks","visualization","mod_icon_btn","query_string","TracksterUI","Base","extend","initialize","baseURL","this","save_viz","Galaxy","modal","show","title","body","bookmarks","$","each","push","position","children","text","annotation","overview_track_name","overview_drawable","config","get_value","viz_config","to_dict","viewport","chrom","start","low","end","high","overview","ajax","url","galaxy_config","root","type","dataType","data","id","vis_id","dbkey","vis_json","JSON","stringify","success","vis_info","hide","has_changes","window","history","pushState","location","hash","error","buttons","Cancel","createButtonMenu","self","menu","create_icon_buttons_menu","icon_class","on_click","select_datasets","f-dbkey","new_tracks","track","add_drawable","object_from_template","DrawableGroup","name","force_right_panel","css","handle_unsaved_changes","tooltip_config","placement","buttonMenu","add_bookmarks","alert","table_html","Insert","first","val","attr","hda_id","ldda_id","then","i","length","row","add_bookmark","editable","bookmarks_container","new_bookmark","addClass","appendTo","position_div","annotation_div","click","go_to","delete_icon_container","prependTo","slideUp","remove","make_text_editable","num_rows","use_textarea","help_text","create_visualization","view_config","viewport_config","drawables_config","bookmarks_config","TracksterView","header","editor","when","load_chroms_deferred","chrom_info","overview_drawable_name","undefined","change_chrom","drawables","set_overview","bookmark","set_up_router","options","TrackBrowserRouter","Backbone","init_keyboard_nav","document","keyup","e","srcElement","is","which","move_fraction","Math","round","viewport_container","height","scrollTop","Leave without Saving","off","Save","View","$el","append","resize_window","app","view_existing","get","choose_existing_or_new","view_new","listTracksParams","dataset_params","dataset_id","hda_ldda","param","view_in_saved","show_choice","Add to visualization","parent","find","View in saved visualization","View in new visualization","console","debug","container","init_editor","response","template_view_new","Create","create_browser","dbkeys_in_genomes","map","r","default_dbkey","contains","focus","select2","html","trigger","gene_region","add_dataset","data_type","track_data","on","GalaxyApp"],"mappings":"AAKA,GAAIA,IAAkB,KAClBC,KAAkB,KAClBC,eAAkB,IAGtBC,UAGI,cACA,gCACA,iCACA,gCACA,wBACA,sBACA,kBACA,0BACA,6BACD,SAASC,GAGRA,EAAUC,YAAY,kCACtBD,EAAUC,YAAY,yCACtBD,EAAUC,YAAY,mDACtBD,EAAUC,YAAY,4BACtBD,EAAUC,YAAY,gCAI1BC,QAAS,kBAAmB,OAAQ,uBAAwB,oBAAqB,qBAAsB,8BAC/F,SAASC,EAAGC,EAAMC,EAAQC,EAAeC,EAAcC,GAI/D,GAAIC,GAAcL,EAAKM,KAAKC,QACxBC,WAAY,SAAUC,GAClBC,KAAKD,QAAUA,GAMnBE,SAAU,WAENC,OAAOC,MAAMC,MAAMC,MAAO,YAAaC,KAAM,YAG7C,IAAIC,KACJC,GAAE,aAAaC,KAAK,WAChBF,EAAUG,MACNC,SAAUH,EAAER,MAAMY,SAAS,aAAaC,OACxCC,WAAYN,EAAER,MAAMY,SAAS,eAAeC,UAKpD,IAAIE,GAAuBhC,KAAKiC,kBAAoBjC,KAAKiC,kBAAkBC,OAAOC,UAAU,QAAU,KAClGC,GACIpC,KAAQA,KAAKqC,UACbC,UAAcC,MAASvC,KAAKuC,MAAOC,MAASxC,KAAKyC,IAAMC,IAAO1C,KAAK2C,KAAMC,SAAYZ,GACrFR,UAAaA,EAIrB,OAAOC,GAAEoB,MACLC,IAAKC,cAAcC,KAAO,qBAC1BC,KAAM,OACNC,SAAU,OACVC,MACIC,GAAcpD,KAAKqD,OACnB/B,MAActB,KAAKkC,OAAOC,UAAU,QACpCmB,MAActD,KAAKsD,MACnBL,KAAc,YACdM,SAAcC,KAAKC,UAAUrB,MAElCsB,QAAQ,SAASC,GAChBxC,OAAOC,MAAMwC,OACb5D,KAAKqD,OAASM,EAASN,OACvBrD,KAAK6D,aAAc,EAGnBC,OAAOC,QAAQC,aAAc,GAAIL,EAASb,IAAMgB,OAAOG,SAASC,QACjEC,MAAM,WAELhD,OAAOC,MAAMC,MACTC,MAAU,iBACVC,KAAU,wDACV6C,SAAYC,OAAU,WAAalD,OAAOC,MAAMwC,cAQ5DU,iBAAkB,WACd,GAAIC,GAAOtD,KACPuD,EAAO9D,EAAa+D,2BAClBC,WAAY,cAAepD,MAAO,aAAcqD,SAAU,WACxDlE,EAAcmE,gBAAgB7B,cAAcC,KAAO,8CAA+CD,cAAcC,KAAO,gBAAkB6B,UAAW7E,KAAKsD,OACzJ,SAASwB,GACLxE,EAAEoB,KAAKoD,EAAY,SAASC,GACxB/E,KAAKgF,aAAcxE,EAAOyE,qBAAqBF,EAAO/E,KAAMA,cAItE0E,WAAY,cAAepD,MAAO,YAAaqD,SAAU,WACvD3E,KAAKgF,aAAc,GAAIxE,GAAO0E,cAAclF,KAAMA,MAAQmF,KAAM,kBAElET,WAAY,YAAapD,MAAO,YAAaqD,SAAU,WAErDS,kBAAkD,OAA/B3D,EAAE,aAAa4D,IAAI,SAAoB,OAAS,WAGnEX,WAAY,QACZpD,MAAO,WACPqD,SAAU,WACNb,OAAOG,SAAWM,EAAKvD,QAAU,6BAA+BhB,KAAKqD,UAG3EqB,WAAY,cAAepD,MAAO,OAAQqD,SAAU,WAClDJ,EAAKrD,cAGLwD,WAAY,eACZpD,MAAO,QACPqD,SAAU,WACNJ,EAAKe,uBAAuBtF,UAKpCuF,gBAAkBC,UAAW,WAGjC,OADAvE,MAAKwE,WAAajB,EACXA,GAMXkB,cAAe,WACX,CAAA,GAAInB,GAAOtD,IACGA,MAAKD,QAGnBG,OAAOC,MAAMC,MAAMC,MAAO,mCAAoCC,KAAM,aAEpEE,EAAEoB,MACEC,IAAK7B,KAAKD,QAAU,gCACpBmC,MAAQ0B,UAAW7E,KAAKsD,OACxBa,MAAO,WAAawB,MAAO,gBAC3BjC,QAAS,SAASkC,GAGdzE,OAAOC,MAAMC,MAETC,MAAU,mCACVC,KAAUqE,EACVxB,SAEIC,OAAU,WAENlD,OAAOC,MAAMwC,QAGjBiC,OAAU,WAGNpE,EAAE,uDAAuDqE,QAAQpE,KAAK,WAElE,GAAIyB,GAAMC,EAAK3B,EAAER,MAAM8E,KAEnB5C,GADyB,OAAzB1B,EAAER,MAAM+E,KAAK,SACJC,OAAQ7C,IAER8C,QAAS9C,GAEtB3B,EAAEoB,MACEC,IAAK7B,KAAKD,QAAU,wCACpBmC,KAAMA,EACND,SAAU,SACXiD,KAAM,SAAShD,GACd,IAAKiD,EAAI,EAAGA,EAAIjD,EAAKA,KAAKkD,OAAQD,IAAM,CACpC,GAAIE,GAAMnD,EAAKA,KAAKiD,EACpB7B,GAAKgC,aAAcD,EAAI,GAAIA,EAAI,SAI3CnF,OAAOC,MAAMwC,eAWrC2C,aAAc,SAAS3E,EAAUG,EAAYyE,GAEzC,GAAIC,GAAsBhF,EAAE,8BACxBiF,EAAejF,EAAE,UAAUkF,SAAS,YAAYC,SAASH,GAEzDI,EAAepF,EAAE,UAAUkF,SAAS,YAAYC,SAASF,GAKzDI,GAJgBrF,EAAE,gBAAgBK,KAAKF,GAAUgF,SAASC,GAAcE,MAAM,WAE1E,MADA/G,MAAKgH,MAAMpF,IACJ,IAEMH,EAAE,UAAUK,KAAKC,GAAY6E,SAASF,GAG3D,IAAIF,EAAU,CACV,CAAA,GAAIS,GAAwBxF,EAAE,UAAUkF,SAAS,yBAAyBO,UAAUR,GAAcK,MAAM,WAKhG,MAHAL,GAAaS,QAAQ,QACrBT,EAAaU,SACbpH,KAAK6D,aAAc,GACZ,GAEGpC,GAAE,gBAAgBkF,SAAS,sBAAsBC,SAASK,GAC5EH,EAAeO,oBACXC,SAAU,EACVC,cAAc,EACdC,UAAW,uBACZb,SAAS,cAIhB,MADA3G,MAAK6D,aAAc,EACZ6C,GAMXe,qBAAsB,SAASC,EAAaC,EAAiBC,EAAkBC,EAAkBrB,GAG7F,GAAIjC,GAAOtD,KACPjB,EAAO,GAAIQ,GAAOsH,cAAcxH,EAAEQ,OAAO4G,GAAcK,QAAQ,IA2DnE,OA1DA/H,GAAKgI,QAAS,EACdvG,EAAEwG,KAAMjI,EAAKkI,sBAAuB/B,KAAK,SAASgC,GAE9C,GAAIR,EAAiB,CACjB,GAAIpF,GAAQoF,EAAgBpF,MACxBC,EAAQmF,EAAgBnF,MACxBE,EAAMiF,EAAgBjF,IACtB0F,EAAyBT,EAAgB/E,QAEzCL,IAAoB8F,SAAV7F,GAAwBE,EAClC1C,EAAKsI,aAAa/F,EAAOC,EAAOE,GAIhC1C,EAAKsI,aAAaH,EAAW,GAAG5F,WAKpCvC,GAAKsI,aAAaH,EAAW,GAAG5F,MAIpC,IAAIqF,EAKA,IAAK,GAAIxB,GAAI,EAAGA,EAAIwB,EAAiBvB,OAAQD,IACzCpG,EAAKgF,aAAcxE,EAAOyE,qBAAsB2C,EAAiBxB,GAAIpG,EAAMA,GAMnF,KAAK,GAAIoG,GAAI,EAAGA,EAAIpG,EAAKuI,UAAUlC,OAAQD,IACvC,GAAIpG,EAAKuI,UAAUnC,GAAGlE,OAAOC,UAAU,UAAYiG,EAAwB,CACvEpI,EAAKwI,aAAaxI,EAAKuI,UAAUnC,GACjC,OAKR,GAAIyB,EAEA,IAAK,GADDY,GACKrC,EAAI,EAAGA,EAAIyB,EAAiBxB,OAAQD,IACzCqC,EAAWZ,EAAiBzB,GAC5B7B,EAAKgC,aAAakC,EAAmB,SAAGA,EAAqB,WAAGjC,EAKxExG,GAAK6D,aAAc,IAIvB5C,KAAKyH,eAAe1I,KAAMA,IAEnBA,GAMX0I,cAAgB,SAASC,GAErB,GAAIlI,GAAcmI,mBAAmBD,GACrCE,SAAS9E,QAAQvB,SAMrBsG,kBAAmB,SAAS9I,GAExByB,EAAEsH,UAAUC,MAAM,SAASC,GAEvB,IAAIxH,EAAEwH,EAAEC,YAAYC,GAAG,UAKvB,OAAOF,EAAEG,OACL,IAAK,IACDpJ,EAAKqJ,cAAc,IACnB,MACJ,KAAK,IACD,CAAaC,KAAKC,MAAMvJ,EAAKwJ,mBAAmBC,SAAS,IACzDzJ,EAAKwJ,mBAAmBE,UAAW1J,EAAKwJ,mBAAmBE,YAAc,GACzE,MACJ,KAAK,IACD1J,EAAKqJ,eAAe,IACpB,MACJ,KAAK,IACD,CAAaC,KAAKC,MAAMvJ,EAAKwJ,mBAAmBC,SAAS,IACzDzJ,EAAKwJ,mBAAmBE,UAAW1J,EAAKwJ,mBAAmBE,YAAc,QASzFpE,uBAAwB,SAAStF,GAC7B,GAAIA,EAAK6D,YAAa,CAClB,GAAIU,GAAOtD,IACXE,QAAOC,MAAMC,MACTC,MAAO,sBACPC,KAAM,8FACN6C,SACIC,OAAU,WAAalD,OAAOC,MAAMwC,QACpC+F,uBAAyB,WACrBlI,EAAEqC,QAAQ8F,IAAI,gBACd9F,OAAOG,SAAWlB,cAAcC,KAAO,iBAE3C6G,KAAS,WACLpI,EAAEwG,KAAK1D,EAAKrD,YAAYiF,KAAK,WACzBrC,OAAOG,SAAWlB,cAAcC,KAAO,0BAQvDc,QAAOG,SAAWlB,cAAcC,KAAO,mBAM/C8E,EAAgBe,SAASiB,KAAKhJ,QAG9BC,WAAa,WAGThB,GAAK,GAAIa,GAAYmC,cAAcC,MAGnCjD,GAAGuE,mBAGHvE,GAAG0F,WAAWsE,IAAI/D,KAAK,QAAS,gBAGhCvE,EAAE,uCAAuCuI,OAAOjK,GAAG0F,WAAWsE,KAG9DtI,EAAE,+BAA+BuI,OAAO,aACxCvI,EAAE,+BAA+BuI,OAAO,gIAGxCvI,EAAE,iBAAiBsF,MAAM,WAAa/G,KAAKiK,kBAG3C7E,kBAAkB,QAIdrC,cAAcmH,IAAI9G,GAClBnC,KAAKkJ,gBACExJ,EAAayJ,IAAK,cACzBnJ,KAAKoJ,yBAELpJ,KAAKqJ,YAIbD,uBAAyB,WACrB,GAAI9F,GAAOtD,KACPqC,EAAQ3C,EAAayJ,IAAK,SAC1BG,KACAC,GACIlH,MAAcA,EACdmH,WAAc9J,EAAayJ,IAAK,cAChCM,SAAc/J,EAAayJ,IAAK,YAEpC9G,KACAiH,EAAkB,WAAcjH,GAEpC7B,EAAEoB,MACEC,IAAKC,cAAcC,KAAO,6BAA+BvB,EAAEkJ,MAAOJ,GAClErH,SAAU,OACViB,MAAO,WAAawB,MAAO,2CAE3BjC,QAAS,SAASkC,GAEd,QAASgF,KAELzJ,OAAOC,MAAMC,MACTC,MAAQ,kCACRC,KAAOqE,EACPxB,SACIC,OAAU,WAENwG,KAEJC,uBAAwB,WACpBrJ,EAAEsJ,OAAOhC,UAAUiC,KAAK,0BAA0BtJ,KAAK,WACnD,GAAI2B,GAAS5B,EAAER,MAAM8E,KACrByE,GAAepH,GAAKC,EACpBS,OAAOG,SAAWlB,cAAcC,KAAO,2BAA6BvB,EAAEkJ,MAAMH,SAMhG,QAASK,KACL1J,OAAOC,MAAMC,MACTC,MAAQ,6CAERC,KAEI,gLAEqD+B,EAAQ,yFAIjEc,SACIC,OAAU,WACNP,OAAOG,SAAWlB,cAAcC,KAAO,sBAE3CiI,8BAA+B,WAC3BL,KAEJM,4BAA6B,WACzB3G,EAAK+F,eAzCrBa,QAAQC,MAAO,WA8CfP,QAMZV,cAAgB,WAGZ,GAAI/H,GAAaW,cAAcmH,IAAI9H,UAGnCpC,MAAOD,GAAG0H,sBAEN4D,UAAW5J,EAAE,+BACb0D,KAAM/C,EAAWd,MACjB+B,OAAQjB,EAAWiB,OACnBC,MAAOlB,EAAWkB,OACnBlB,EAAWE,SAAUF,EAAW5B,OAAQ4B,EAAWZ,WAAW,GAGjEP,KAAKqK,eAIThB,SAAW,WAUP,GAAI/F,GAAOtD,IAGXQ,GAAEoB,MAEEC,IAAKC,cAAcC,KAAO,8BAC1BG,QACAgB,MAAO,WAAawB,MAAO,iCAC3BjC,QAAS,SAAS6H,GAGdpK,OAAOC,MAAMC,MACTC,MAAU,oBACVC,KAAUgD,EAAKiH,kBAAkBD,GACjCnH,SACIC,OAAU,WAAaP,OAAOG,SAAWlB,cAAcC,KAAO,sBAC9DyI,OAAU,WAAalH,EAAKmH,eAAejK,EAAE,cAAcsE,MAAOtE,EAAE,cAAcsE,OAAQ5E,OAAOC,MAAMwC,UAK/G,IAAI+H,GAAoBJ,EAASK,IAAK,SAAUC,GAAK,MAAOA,GAAE,IAC1D9I,eAAcmH,IAAI4B,eAAiBxL,EAAEyL,SAASJ,EAAkB5I,cAAcmH,IAAI4B,gBAClFrK,EAAE,cAAcsE,IAAKhD,cAAcmH,IAAI4B,eAI3CrK,EAAE,cAAcuK,QAChBvK,EAAE,wBAAwBwK,UAG1BxK,EAAE,YAAY4D,IAAI,WAAY,YAM1CmG,kBAAmB,SAASD,GAiBxB,IAAK,GAdDW,GAAQ,ycAcH9F,EAAI,EAAGA,EAAImF,EAASlF,OAAQD,IACjC8F,GAAQ,kBAAoBX,EAASnF,GAAG,GAAK,KAAOmF,EAASnF,GAAG,GAAK,WAezE,OAXA8F,IAAwB,qHAMUnJ,cAAcC,KAAO,oEAS3D0I,eAAiB,SAASvG,EAAM7B,GAE5B7B,EAAEsH,UAAUoD,QAAQ,qBAEpBnM,KAAOD,GAAG0H,sBAEN4D,UAAW5J,EAAE,+BACb0D,KAAMA,EACN7B,MAAOA,GACRP,cAAcmH,IAAIkC,aAGrBnL,KAAKqK,cAGLtL,KAAKgI,QAAS,GAIlBsD,YAAc,WAGV7J,EAAE,gCAAgCK,KAAK9B,KAAKkC,OAAOC,UAAU,QAAU,KAAOnC,KAAKsD,MAAQ,KAGvFP,cAAcmH,IAAImC,aAClB5K,EAAEoB,MACEC,IAAKC,cAAcC,KAAO,gBAAkBD,cAAcmH,IAAImC,YAC9DlJ,MAAQuH,SAAU,MAAO4B,UAAW,gBACpCpJ,SAAU,OACVQ,QAAS,SAAS6I,GAAcvM,KAAKgF,aAAcxE,EAAOyE,qBAAqBsH,EAAYvM,KAAMA,UAIzGyB,EAAE,wBAAwBsF,MAAM,WAG5B,GAAInF,GAAW5B,KAAKuC,MAAQ,IAAMvC,KAAKyC,IAAM,IAAMzC,KAAK2C,KACpDZ,EAAa,sBACjB,OAAOhC,IAAGwG,aAAa3E,EAAUG,GAAY,KAIjDhC,GAAG+I,kBAAkB9I,MAErByB,EAAEqC,QAAQ0I,GAAG,eAAgB,WACzB,MAAIxM,MAAK6D,YACE,4FADX,WAOZ,QACIjD,YAAaA,EACb6L,UAAY3E"} \ No newline at end of file diff --git a/static/scripts/utils/query-string-parsing.js b/static/scripts/utils/query-string-parsing.js new file mode 100644 index 00000000000..5876aca56f3 --- /dev/null +++ b/static/scripts/utils/query-string-parsing.js @@ -0,0 +1,2 @@ +define([],function(){function a(a,b){b=b||window.location.search.substr(1);var c=new RegExp(a+"=([^&#$]+)"),d=b.match(c);return d&&d.length?(d=d.splice(1),1===d.length?d[0]:d):void 0}return{get:a}}); +//# sourceMappingURL=../../maps/utils/query-string-parsing.js.map \ No newline at end of file diff --git a/static/scripts/viz/trackster.js b/static/scripts/viz/trackster.js index 2703449f2b3..7f0e84a9531 100644 --- a/static/scripts/viz/trackster.js +++ b/static/scripts/viz/trackster.js @@ -1,2 +1,2 @@ -var ui=null,view=null,browser_router=null;require(["utils/utils","libs/jquery/jquery.event.drag","libs/jquery/jquery.event.hover","libs/jquery/jquery.mousewheel","libs/jquery/jquery-ui","libs/jquery/select2","libs/farbtastic","libs/jquery/jquery.form","libs/jquery/jquery.rating"],function(a){a.cssLoadFile("static/style/jquery.rating.css"),a.cssLoadFile("static/style/autocomplete_tagging.css"),a.cssLoadFile("static/style/jquery-ui/smoothness/jquery-ui.css"),a.cssLoadFile("static/style/library.css"),a.cssLoadFile("static/style/trackster.css")}),define(["libs/underscore","base","viz/trackster/tracks","viz/visualization","mvc/ui/icon-button"],function(a,b,c,d,e){var f=b.Base.extend({initialize:function(a){this.baseURL=a},save_viz:function(){Galaxy.modal.show({title:"Saving...",body:"progress"});var a=[];$(".bookmark").each(function(){a.push({position:$(this).children(".position").text(),annotation:$(this).children(".annotation").text()})});var b=view.overview_drawable?view.overview_drawable.config.get_value("name"):null,c={view:view.to_dict(),viewport:{chrom:view.chrom,start:view.low,end:view.high,overview:b},bookmarks:a};return $.ajax({url:galaxy_config.root+"visualization/save",type:"POST",dataType:"json",data:{id:view.vis_id,title:view.config.get_value("name"),dbkey:view.dbkey,type:"trackster",vis_json:JSON.stringify(c)}}).success(function(a){Galaxy.modal.hide(),view.vis_id=a.vis_id,view.has_changes=!1,window.history.pushState({},"",a.url+window.location.hash)}).error(function(){Galaxy.modal.show({title:"Could Not Save",body:"Could not save visualization. Please try again later.",buttons:{Cancel:function(){Galaxy.modal.hide()}}})})},createButtonMenu:function(){var b=this,f=e.create_icon_buttons_menu([{icon_class:"plus-button",title:"Add tracks",on_click:function(){d.select_datasets(galaxy_config.root+"visualization/list_current_history_datasets",galaxy_config.root+"api/datasets",{"f-dbkey":view.dbkey},function(b){a.each(b,function(a){view.add_drawable(c.object_from_template(a,view,view))})})}},{icon_class:"block--plus",title:"Add group",on_click:function(){view.add_drawable(new c.DrawableGroup(view,view,{name:"New Group"}))}},{icon_class:"bookmarks",title:"Bookmarks",on_click:function(){force_right_panel("0px"==$("div#right").css("right")?"hide":"show")}},{icon_class:"globe",title:"Circster",on_click:function(){window.location=b.baseURL+"visualization/circster?id="+view.vis_id}},{icon_class:"disk--arrow",title:"Save",on_click:function(){b.save_viz()}},{icon_class:"cross-circle",title:"Close",on_click:function(){b.handle_unsaved_changes(view)}}],{tooltip_config:{placement:"bottom"}});return this.buttonMenu=f,f},add_bookmarks:function(){{var a=this;this.baseURL}Galaxy.modal.show({title:"Select dataset for new bookmarks",body:"progress"}),$.ajax({url:this.baseURL+"/visualization/list_histories",data:{"f-dbkey":view.dbkey},error:function(){alert("Grid failed")},success:function(b){Galaxy.modal.show({title:"Select dataset for new bookmarks",body:b,buttons:{Cancel:function(){Galaxy.modal.hide()},Insert:function(){$("input[name=id]:checked,input[name=ldda_ids]:checked").first().each(function(){var b,c=$(this).val();b="id"===$(this).attr("name")?{hda_id:c}:{ldda_id:c},$.ajax({url:this.baseURL+"/visualization/bookmarks_from_dataset",data:b,dataType:"json"}).then(function(b){for(i=0;i").addClass("bookmark").appendTo(d),f=$("
").addClass("position").appendTo(e),g=($("").text(a).appendTo(f).click(function(){return view.go_to(a),!1}),$("
").text(b).appendTo(e));if(c){{var h=$("
").addClass("delete-icon-container").prependTo(e).click(function(){return e.slideUp("fast"),e.remove(),view.has_changes=!0,!1});$("").addClass("icon-button delete").appendTo(h)}g.make_text_editable({num_rows:3,use_textarea:!0,help_text:"Edit bookmark note"}).addClass("annotation")}return view.has_changes=!0,e},create_visualization:function(b,d,e,f,g){var h=this,i=new c.TracksterView(a.extend(b,{header:!1}));return i.editor=!0,$.when(i.load_chroms_deferred).then(function(a){if(d){var b=d.chrom,j=d.start,k=d.end,l=d.overview;b&&void 0!==j&&k?i.change_chrom(b,j,k):i.change_chrom(a[0].chrom)}else i.change_chrom(a[0].chrom);if(e)for(var m=0;m"),$("#right-border").click(function(){view.resize_window()}),force_right_panel("hide"),galaxy_config.app.id?this.view_existing():this.view_new()},view_existing:function(){var a=galaxy_config.app.viz_config;view=ui.create_visualization({container:$("#center .unified-panel-body"),name:a.title,vis_id:a.vis_id,dbkey:a.dbkey},a.viewport,a.tracks,a.bookmarks,!0),this.init_editor()},view_new:function(){var a=this;$.ajax({url:galaxy_config.root+"api/genomes?chrom_info=True",data:{},error:function(){alert("Couldn't create new browser.")},success:function(b){Galaxy.modal.show({title:"New Visualization",body:a.template_view_new(b),buttons:{Cancel:function(){window.location=galaxy_config.root+"visualization/list"},Create:function(){a.create_browser($("#new-title").val(),$("#new-dbkey").val()),Galaxy.modal.hide()}}}),galaxy_config.app.default_dbkey&&$("#new-dbkey").val(galaxy_config.app.default_dbkey),$("#new-title").focus(),$("select[name='dbkey']").select2(),$("#overlay").css("overflow","auto")}})},template_view_new:function(a){for(var b='
Is the build not listed here? Add a Custom Build
'},create_browser:function(a,b){$(document).trigger("convert_to_values"),view=ui.create_visualization({container:$("#center .unified-panel-body"),name:a,dbkey:b},galaxy_config.app.gene_region),this.init_editor(),view.editor=!0},init_editor:function(){$("#center .unified-panel-title").text(view.config.get_value("name")+" ("+view.dbkey+")"),galaxy_config.app.add_dataset&&$.ajax({url:galaxy_config.root+"api/datasets/"+galaxy_config.app.add_dataset,data:{hda_ldda:"hda",data_type:"track_config"},dataType:"json",success:function(a){view.add_drawable(c.object_from_template(a,view,view))}}),$("#add-bookmark-button").click(function(){var a=view.chrom+":"+view.low+"-"+view.high,b="Bookmark description";return ui.add_bookmark(a,b,!0)}),ui.init_keyboard_nav(view),$(window).on("beforeunload",function(){return view.has_changes?"There are unsaved changes to your visualization that will be lost if you leave this page.":void 0})}});return{TracksterUI:f,GalaxyApp:g}}); +var ui=null,view=null,browser_router=null;require(["utils/utils","libs/jquery/jquery.event.drag","libs/jquery/jquery.event.hover","libs/jquery/jquery.mousewheel","libs/jquery/jquery-ui","libs/jquery/select2","libs/farbtastic","libs/jquery/jquery.form","libs/jquery/jquery.rating"],function(a){a.cssLoadFile("static/style/jquery.rating.css"),a.cssLoadFile("static/style/autocomplete_tagging.css"),a.cssLoadFile("static/style/jquery-ui/smoothness/jquery-ui.css"),a.cssLoadFile("static/style/library.css"),a.cssLoadFile("static/style/trackster.css")}),define(["libs/underscore","base","viz/trackster/tracks","viz/visualization","mvc/ui/icon-button","utils/query-string-parsing"],function(a,b,c,d,e,f){var g=b.Base.extend({initialize:function(a){this.baseURL=a},save_viz:function(){Galaxy.modal.show({title:"Saving...",body:"progress"});var a=[];$(".bookmark").each(function(){a.push({position:$(this).children(".position").text(),annotation:$(this).children(".annotation").text()})});var b=view.overview_drawable?view.overview_drawable.config.get_value("name"):null,c={view:view.to_dict(),viewport:{chrom:view.chrom,start:view.low,end:view.high,overview:b},bookmarks:a};return $.ajax({url:galaxy_config.root+"visualization/save",type:"POST",dataType:"json",data:{id:view.vis_id,title:view.config.get_value("name"),dbkey:view.dbkey,type:"trackster",vis_json:JSON.stringify(c)}}).success(function(a){Galaxy.modal.hide(),view.vis_id=a.vis_id,view.has_changes=!1,window.history.pushState({},"",a.url+window.location.hash)}).error(function(){Galaxy.modal.show({title:"Could Not Save",body:"Could not save visualization. Please try again later.",buttons:{Cancel:function(){Galaxy.modal.hide()}}})})},createButtonMenu:function(){var b=this,f=e.create_icon_buttons_menu([{icon_class:"plus-button",title:"Add tracks",on_click:function(){d.select_datasets(galaxy_config.root+"visualization/list_current_history_datasets",galaxy_config.root+"api/datasets",{"f-dbkey":view.dbkey},function(b){a.each(b,function(a){view.add_drawable(c.object_from_template(a,view,view))})})}},{icon_class:"block--plus",title:"Add group",on_click:function(){view.add_drawable(new c.DrawableGroup(view,view,{name:"New Group"}))}},{icon_class:"bookmarks",title:"Bookmarks",on_click:function(){force_right_panel("0px"==$("div#right").css("right")?"hide":"show")}},{icon_class:"globe",title:"Circster",on_click:function(){window.location=b.baseURL+"visualization/circster?id="+view.vis_id}},{icon_class:"disk--arrow",title:"Save",on_click:function(){b.save_viz()}},{icon_class:"cross-circle",title:"Close",on_click:function(){b.handle_unsaved_changes(view)}}],{tooltip_config:{placement:"bottom"}});return this.buttonMenu=f,f},add_bookmarks:function(){{var a=this;this.baseURL}Galaxy.modal.show({title:"Select dataset for new bookmarks",body:"progress"}),$.ajax({url:this.baseURL+"/visualization/list_histories",data:{"f-dbkey":view.dbkey},error:function(){alert("Grid failed")},success:function(b){Galaxy.modal.show({title:"Select dataset for new bookmarks",body:b,buttons:{Cancel:function(){Galaxy.modal.hide()},Insert:function(){$("input[name=id]:checked,input[name=ldda_ids]:checked").first().each(function(){var b,c=$(this).val();b="id"===$(this).attr("name")?{hda_id:c}:{ldda_id:c},$.ajax({url:this.baseURL+"/visualization/bookmarks_from_dataset",data:b,dataType:"json"}).then(function(b){for(i=0;i").addClass("bookmark").appendTo(d),f=$("
").addClass("position").appendTo(e),g=($("").text(a).appendTo(f).click(function(){return view.go_to(a),!1}),$("
").text(b).appendTo(e));if(c){{var h=$("
").addClass("delete-icon-container").prependTo(e).click(function(){return e.slideUp("fast"),e.remove(),view.has_changes=!0,!1});$("").addClass("icon-button delete").appendTo(h)}g.make_text_editable({num_rows:3,use_textarea:!0,help_text:"Edit bookmark note"}).addClass("annotation")}return view.has_changes=!0,e},create_visualization:function(b,d,e,f,g){var h=this,i=new c.TracksterView(a.extend(b,{header:!1}));return i.editor=!0,$.when(i.load_chroms_deferred).then(function(a){if(d){var b=d.chrom,j=d.start,k=d.end,l=d.overview;b&&void 0!==j&&k?i.change_chrom(b,j,k):i.change_chrom(a[0].chrom)}else i.change_chrom(a[0].chrom);if(e)for(var m=0;m"),$("#right-border").click(function(){view.resize_window()}),force_right_panel("hide"),galaxy_config.app.id?this.view_existing():f.get("dataset_id")?this.choose_existing_or_new():this.view_new()},choose_existing_or_new:function(){var a=this,b=f.get("dbkey"),c={},d={dbkey:b,dataset_id:f.get("dataset_id"),hda_ldda:f.get("hda_ldda")};b&&(c["f-dbkey"]=b),$.ajax({url:galaxy_config.root+"visualization/list_tracks?"+$.param(c),dataType:"html",error:function(){alert("Could not add this dataset to browser.")},success:function(c){function e(){Galaxy.modal.show({title:"Add Data to Saved Visualization",body:c,buttons:{Cancel:function(){f()},"Add to visualization":function(){$(parent.document).find("input[name=id]:checked").each(function(){var a=$(this).val();d.id=a,window.location=galaxy_config.root+"visualization/trackster?"+$.param(d)})}}})}function f(){Galaxy.modal.show({title:"View Data in a New or Saved Visualization?",body:'

    You can add this dataset as:
  • a new track to one of your existing, saved Trackster sessions if they share the genome build: '+b+"
  • or create a new session with this dataset as the only track

",buttons:{Cancel:function(){window.location=galaxy_config.root+"visualization/list"},"View in saved visualization":function(){e()},"View in new visualization":function(){a.view_new()}}})}console.debug("success"),f()}})},view_existing:function(){var a=galaxy_config.app.viz_config;view=ui.create_visualization({container:$("#center .unified-panel-body"),name:a.title,vis_id:a.vis_id,dbkey:a.dbkey},a.viewport,a.tracks,a.bookmarks,!0),this.init_editor()},view_new:function(){var b=this;$.ajax({url:galaxy_config.root+"api/genomes?chrom_info=True",data:{},error:function(){alert("Couldn't create new browser.")},success:function(c){Galaxy.modal.show({title:"New Visualization",body:b.template_view_new(c),buttons:{Cancel:function(){window.location=galaxy_config.root+"visualization/list"},Create:function(){b.create_browser($("#new-title").val(),$("#new-dbkey").val()),Galaxy.modal.hide()}}});var d=c.map(function(a){return a[1]});galaxy_config.app.default_dbkey&&a.contains(d,galaxy_config.app.default_dbkey)&&$("#new-dbkey").val(galaxy_config.app.default_dbkey),$("#new-title").focus(),$("select[name='dbkey']").select2(),$("#overlay").css("overflow","auto")}})},template_view_new:function(a){for(var b='
Is the build not listed here? Add a Custom Build
'},create_browser:function(a,b){$(document).trigger("convert_to_values"),view=ui.create_visualization({container:$("#center .unified-panel-body"),name:a,dbkey:b},galaxy_config.app.gene_region),this.init_editor(),view.editor=!0},init_editor:function(){$("#center .unified-panel-title").text(view.config.get_value("name")+" ("+view.dbkey+")"),galaxy_config.app.add_dataset&&$.ajax({url:galaxy_config.root+"api/datasets/"+galaxy_config.app.add_dataset,data:{hda_ldda:"hda",data_type:"track_config"},dataType:"json",success:function(a){view.add_drawable(c.object_from_template(a,view,view))}}),$("#add-bookmark-button").click(function(){var a=view.chrom+":"+view.low+"-"+view.high,b="Bookmark description";return ui.add_bookmark(a,b,!0)}),ui.init_keyboard_nav(view),$(window).on("beforeunload",function(){return view.has_changes?"There are unsaved changes to your visualization that will be lost if you leave this page.":void 0})}});return{TracksterUI:g,GalaxyApp:h}}); //# sourceMappingURL=../../maps/viz/trackster.js.map \ No newline at end of file From 91a29d8a6af6f26c556b6655a0697c3524554783 Mon Sep 17 00:00:00 2001 From: "y.hoogstrate@erasmusmc.nl" Date: Thu, 30 Jul 2015 12:06:07 +0200 Subject: [PATCH 24/68] extract_genomic_dna support for 2bit files from Local data --- tools/extract/extract_genomic_dna.py | 22 ++++++++++++++++++---- tools/extract/extract_genomic_dna.xml | 10 +++++----- 2 files changed, 23 insertions(+), 9 deletions(-) mode change 100644 => 100755 tools/extract/extract_genomic_dna.py diff --git a/tools/extract/extract_genomic_dna.py b/tools/extract/extract_genomic_dna.py old mode 100644 new mode 100755 index a5018934224..3b23ea739f5 --- a/tools/extract/extract_genomic_dna.py +++ b/tools/extract/extract_genomic_dna.py @@ -4,7 +4,7 @@ usage: %prog $input $out_file1 -1, --cols=N,N,N,N,N: Columns for start, end, strand in input file -d, --dbkey=N: Genome build of input file -o, --output_format=N: the data type of the output file - -g, --GALAXY_DATA_INDEX_DIR=N: the directory containing alignseq.loc + -g, --GALAXY_DATA_INDEX_DIR=N: the directory containing alignseq.loc or twobit.loc -I, --interpret_features: if true, complete features are interpreted when input is GFF -F, --fasta=: genomic sequences to use for extraction -G, --gff: input and output file, when it is interval, coordinates are treated as GFF format (1-based, half-open) rather than 'traditional' 0-based, closed format. @@ -35,17 +35,31 @@ def reverse_complement( s ): return "".join( reversed_s ) def check_seq_file( dbkey, GALAXY_DATA_INDEX_DIR ): + # Checks for the presence of *.nib files matching the dbkey within alignseq.loc seq_file = "%s/alignseq.loc" % GALAXY_DATA_INDEX_DIR seq_path = '' for line in open( seq_file ): line = line.rstrip( '\r\n' ) if line and not line.startswith( "#" ) and line.startswith( 'seq' ): fields = line.split( '\t' ) - if len( fields ) < 3: - continue - if fields[1] == dbkey: + if len( fields) >= 3 and fields[1] == dbkey: + print "Using *.nib genomic reference files" seq_path = fields[2].strip() break + + # If no entry in aligseq.loc was found, check for the presence of a *.2bit file in twobit.loc + if seq_path == '': + seq_file = "%s/twobit.loc" % GALAXY_DATA_INDEX_DIR + seq_path = '' + for line in open( seq_file ): + line = line.rstrip( '\r\n' ) + if line and not line.startswith( "#" ) and line.endswith( '.2bit' ): + fields = line.split( '\t' ) + if len(fields) >= 2 and fields[0] == dbkey: + print "Using a *.2bit genomic reference file" + seq_path = fields[1].strip() + break + return seq_path def __main__(): diff --git a/tools/extract/extract_genomic_dna.xml b/tools/extract/extract_genomic_dna.xml index d568d84835a..69847cd77c4 100644 --- a/tools/extract/extract_genomic_dna.xml +++ b/tools/extract/extract_genomic_dna.xml @@ -29,7 +29,7 @@ - + @@ -39,10 +39,10 @@ - - - - + + + + From 6ce94ce7e6b54f50720cc9559477d3b8035527a5 Mon Sep 17 00:00:00 2001 From: "y.hoogstrate@erasmusmc.nl" Date: Thu, 30 Jul 2015 13:12:51 +0200 Subject: [PATCH 25/68] Fixed comments --- tools/extract/extract_genomic_dna.py | 31 ++++++++++++---------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/tools/extract/extract_genomic_dna.py b/tools/extract/extract_genomic_dna.py index 3b23ea739f5..72d672ed97c 100755 --- a/tools/extract/extract_genomic_dna.py +++ b/tools/extract/extract_genomic_dna.py @@ -37,30 +37,25 @@ def reverse_complement( s ): def check_seq_file( dbkey, GALAXY_DATA_INDEX_DIR ): # Checks for the presence of *.nib files matching the dbkey within alignseq.loc seq_file = "%s/alignseq.loc" % GALAXY_DATA_INDEX_DIR - seq_path = '' - for line in open( seq_file ): + for line in open(seq_file): line = line.rstrip( '\r\n' ) if line and not line.startswith( "#" ) and line.startswith( 'seq' ): fields = line.split( '\t' ) if len( fields) >= 3 and fields[1] == dbkey: print "Using *.nib genomic reference files" - seq_path = fields[2].strip() - break - - # If no entry in aligseq.loc was found, check for the presence of a *.2bit file in twobit.loc - if seq_path == '': - seq_file = "%s/twobit.loc" % GALAXY_DATA_INDEX_DIR - seq_path = '' - for line in open( seq_file ): - line = line.rstrip( '\r\n' ) - if line and not line.startswith( "#" ) and line.endswith( '.2bit' ): - fields = line.split( '\t' ) - if len(fields) >= 2 and fields[0] == dbkey: - print "Using a *.2bit genomic reference file" - seq_path = fields[1].strip() - break + return fields[2].strip() - return seq_path + # If no entry in aligseq.loc was found, check for the presence of a *.2bit file in twobit.loc + seq_file = "%s/twobit.loc" % GALAXY_DATA_INDEX_DIR + for line in open( seq_file ): + line = line.rstrip( '\r\n' ) + if line and not line.startswith( "#" ) and line.endswith( '.2bit' ): + fields = line.split( '\t' ) + if len(fields) >= 2 and fields[0] == dbkey: + print "Using a *.2bit genomic reference file" + return fields[1].strip() + + return '' def __main__(): # From bb4588aaaf268e56baf3e8d35e5f8cbc1979207b Mon Sep 17 00:00:00 2001 From: Carl Eberhard Date: Thu, 30 Jul 2015 09:43:57 -0400 Subject: [PATCH 26/68] Managers, history: replace _get_history_data with proper serializers --- lib/galaxy/managers/histories.py | 17 ++++++--- .../webapps/galaxy/controllers/history.py | 37 ++++++++++--------- lib/galaxy/webapps/galaxy/controllers/page.py | 16 ++++---- lib/galaxy/webapps/galaxy/controllers/root.py | 9 +++-- 4 files changed, 47 insertions(+), 32 deletions(-) diff --git a/lib/galaxy/managers/histories.py b/lib/galaxy/managers/histories.py index ef8933f3478..5451a52a245 100644 --- a/lib/galaxy/managers/histories.py +++ b/lib/galaxy/managers/histories.py @@ -321,14 +321,21 @@ class HistorySerializer( sharable.SharableModelSerializer, deletable.PurgableSer return state - def serialize_contents( self, history, *args, **context ): + def serialize_contents( self, history, key, trans=None, **context ): contents_dictionaries = [] for content in history.contents_iter( types=[ 'dataset', 'dataset_collection' ] ): contents_dict = {} + if isinstance( content, model.HistoryDatasetAssociation ): - contents_dict = self.hda_serializer.serialize_to_view( content, view='detailed', **context ) - # elif isinstance( content, model.HistoryDatasetCollectionAssociation ): - # contents_dict = self._serialize_collection( trans, content ) + contents_dict = self.hda_serializer.serialize_to_view( content, + view='detailed', trans=trans, **context ) + # TODO: work out: shouldn't history annotations *always* use user=history.user? why anything else? + hda_annotation = self.hda_serializer.serialize_annotation( content, 'annotation', user=history.user ) + contents_dict[ 'annotation' ] = hda_annotation + + elif isinstance( content, model.HistoryDatasetCollectionAssociation ): + contents_dict = self._serialize_collection( trans, content ) + contents_dictionaries.append( contents_dict ) return contents_dictionaries @@ -341,7 +348,7 @@ class HistorySerializer( sharable.SharableModelSerializer, deletable.PurgableSer id=self.app.security.encode_id( collection.id ), ) return collections_util.dictify_dataset_collection_instance( dataset_collection_instance, - security=self.app.security, parent=dataset_collection_instance.history, view="element" ) + security=self.app.security, parent=dataset_collection_instance.history, view="element" ) class HistoryDeserializer( sharable.SharableModelDeserializer, deletable.PurgableDeserializerMixin ): diff --git a/lib/galaxy/webapps/galaxy/controllers/history.py b/lib/galaxy/webapps/galaxy/controllers/history.py index 6a4068db785..f04a3f60396 100644 --- a/lib/galaxy/webapps/galaxy/controllers/history.py +++ b/lib/galaxy/webapps/galaxy/controllers/history.py @@ -564,9 +564,10 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI unencoded_history_id = self.decode_id( id ) history_to_view = self.history_manager.get_accessible( unencoded_history_id, trans.user, current_history=trans.history ) - history_data = self.history_manager._get_history_data( trans, history_to_view ) - history_dictionary = history_data[ 'history' ] - hda_dictionaries = history_data[ 'contents' ] + history_dictionary = self.history_serializer.serialize_to_view( history_to_view, + view='detailed', user=trans.user, trans=trans ) + contents = self.history_serializer.serialize_contents( history_to_view, + 'contents', trans=trans, user=trans.user ) jobs = ( trans.sa_session.query( trans.app.model.Job ) .filter( trans.app.model.Job.user == history_to_view.user ) @@ -583,7 +584,7 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI tools[ tool_id ] = tool.to_dict( trans, io_details=True, link_details=True ) return trans.fill_template( "history/structure.mako", historyId=history_dictionary[ 'id' ], - history=history_dictionary, hdas=hda_dictionaries, jobs=jobs, tools=tools, **kwargs ) + history=history_dictionary, hdas=contents, jobs=jobs, tools=tools, **kwargs ) @web.expose def view( self, trans, id=None, show_deleted=False, show_hidden=False, use_panels=True ): @@ -599,16 +600,18 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI use_panels = galaxy.util.string_as_bool( use_panels ) history_dictionary = {} - hda_dictionaries = [] + contents = [] user_is_owner = False try: - history_to_view = self.history_manager.get_accessible( self.decode_id( id ), trans.user, current_history=trans.history ) + history_to_view = self.history_manager.get_accessible( self.decode_id( id ), trans.user, + current_history=trans.history ) user_is_owner = history_to_view.user == trans.user # include all datasets: hidden, deleted, and purged - history_data = self.history_manager._get_history_data( trans, history_to_view ) - history_dictionary = history_data[ 'history' ] - hda_dictionaries = history_data[ 'contents' ] + history_dictionary = self.history_serializer.serialize_to_view( history_to_view, + view='detailed', user=trans.user, trans=trans ) + contents = self.history_serializer.serialize_contents( history_to_view, + 'contents', trans=trans, user=trans.user ) except Exception, exc: user_id = str( trans.user.id ) if trans.user else '(anonymous)' @@ -621,8 +624,8 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI return trans.show_error_message( error_msg, use_panels=use_panels ) return trans.fill_template_mako( "history/view.mako", - history=history_dictionary, hdas=hda_dictionaries, user_is_owner=user_is_owner, - show_deleted=show_deleted, show_hidden=show_hidden, use_panels=use_panels ) + history=history_dictionary, hdas=contents, user_is_owner=user_is_owner, + show_deleted=show_deleted, show_hidden=show_hidden, use_panels=use_panels ) @web.expose def view_multiple( self, trans, include_deleted_histories=False, order='update' ): @@ -683,19 +686,19 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI # create ownership flag for template, dictify models user_is_owner = trans.user == history.user - history_data = self.history_manager._get_history_data( trans, history ) - history_dict = history_data[ 'history' ] - hda_dicts = history_data[ 'contents' ] + history_dictionary = self.history_serializer.serialize_to_view( history, + view='detailed', user=trans.user, trans=trans ) + contents = self.history_serializer.serialize_contents( history, 'contents', trans=trans, user=trans.user ) - history_dict[ 'annotation' ] = self.get_item_annotation_str( trans.sa_session, history.user, history ) + history_dictionary[ 'annotation' ] = self.get_item_annotation_str( trans.sa_session, history.user, history ) # note: adding original annotation since this is published - get_dict returns user-based annos # for hda_dict in hda_dicts: # hda_dict[ 'annotation' ] = hda.annotation # dataset.annotation = self.get_item_annotation_str( trans.sa_session, history.user, dataset ) return trans.stream_template_mako( "history/display.mako", item=history, item_data=[], - user_is_owner=user_is_owner, history_dict=history_dict, hda_dicts=hda_dicts, - user_item_rating=user_item_rating, ave_item_rating=ave_item_rating, num_ratings=num_ratings ) + user_is_owner=user_is_owner, history_dict=history_dictionary, hda_dicts=contents, + user_item_rating=user_item_rating, ave_item_rating=ave_item_rating, num_ratings=num_ratings ) # ......................................................................... sharing & publishing @web.expose diff --git a/lib/galaxy/webapps/galaxy/controllers/page.py b/lib/galaxy/webapps/galaxy/controllers/page.py index a99aeba6472..6f3e0ea4d22 100644 --- a/lib/galaxy/webapps/galaxy/controllers/page.py +++ b/lib/galaxy/webapps/galaxy/controllers/page.py @@ -302,6 +302,7 @@ class PageController( BaseUIController, SharableMixin, def __init__( self, app ): super( PageController, self ).__init__( app ) self.history_manager = managers.histories.HistoryManager( app ) + self.history_serializer = managers.histories.HistorySerializer( self.app ) self.hda_manager = managers.hdas.HDAManager( app ) @web.expose @@ -755,15 +756,16 @@ class PageController( BaseUIController, SharableMixin, history.annotation = self.get_item_annotation_str( trans.sa_session, history.user, history ) # include all datasets: hidden, deleted, and purged - history_data = self.history_manager._get_history_data( trans, history ) - history_dictionary = history_data[ 'history' ] - hda_dictionaries = history_data[ 'contents' ] + history_dictionary = self.history_serializer.serialize_to_view( history, + view='detailed', user=trans.user, trans=trans ) + contents = self.history_serializer.serialize_contents( history, 'contents', trans=trans, user=trans.user ) history_dictionary[ 'annotation' ] = history.annotation - filled = trans.fill_template( "history/embed.mako", item=history, - user_is_owner=user_is_owner, - history_dict=history_dictionary, - hda_dicts=hda_dictionaries ) + filled = trans.fill_template( "history/embed.mako", + item=history, + user_is_owner=user_is_owner, + history_dict=history_dictionary, + hda_dicts=contents ) return filled def _get_embedded_visualization_html( self, trans, id ): diff --git a/lib/galaxy/webapps/galaxy/controllers/root.py b/lib/galaxy/webapps/galaxy/controllers/root.py index a80a714f797..9af41eb7ef0 100644 --- a/lib/galaxy/webapps/galaxy/controllers/root.py +++ b/lib/galaxy/webapps/galaxy/controllers/root.py @@ -26,6 +26,7 @@ class RootController( BaseUIController, UsesAnnotations ): def __init__( self, app ): super( RootController, self ).__init__( app ) self.history_manager = managers.histories.HistoryManager( app ) + self.history_serializer = managers.histories.HistorySerializer( self.app ) @web.expose def default(self, trans, target1=None, target2=None, **kwd): @@ -124,9 +125,11 @@ class RootController( BaseUIController, UsesAnnotations ): history_dictionary = {} hda_dictionaries = [] try: - history_data = self.history_manager._get_history_data( trans, trans.get_history( create=True ) ) - history_dictionary = history_data[ 'history' ] - hda_dictionaries = history_data[ 'contents' ] + history = trans.get_history( create=True ) + history_dictionary = self.history_serializer.serialize_to_view( history, + view='detailed', user=trans.user, trans=trans ) + hda_dictionaries = self.history_serializer.serialize_contents( history, + 'contents', trans=trans, user=trans.user ) except Exception, exc: user_id = str( trans.user.id ) if trans.user else '(anonymous)' From 8644b21808fd779c062e1fbd475b8912845226d8 Mon Sep 17 00:00:00 2001 From: Carl Eberhard Date: Thu, 30 Jul 2015 10:00:26 -0400 Subject: [PATCH 27/68] Managers, history: remove _get_history_data; rename hdas -> contents in altered templates and web methods --- lib/galaxy/managers/histories.py | 49 ------------------- .../webapps/galaxy/controllers/history.py | 13 ++--- lib/galaxy/webapps/galaxy/controllers/page.py | 2 +- lib/galaxy/webapps/galaxy/controllers/root.py | 8 +-- templates/webapps/galaxy/history/display.mako | 5 +- templates/webapps/galaxy/history/embed.mako | 2 +- .../webapps/galaxy/history/structure.mako | 4 +- templates/webapps/galaxy/history/view.mako | 6 +-- templates/webapps/galaxy/root/history.mako | 12 ++--- 9 files changed, 23 insertions(+), 78 deletions(-) diff --git a/lib/galaxy/managers/histories.py b/lib/galaxy/managers/histories.py index 5451a52a245..e9030cc8797 100644 --- a/lib/galaxy/managers/histories.py +++ b/lib/galaxy/managers/histories.py @@ -122,55 +122,6 @@ class HistoryManager( sharable.SharableModelManager, deletable.PurgableManagerMi """ return self.set_current( trans, self.by_id( history_id ) ) -# TODO: replace or move to serializer - def _get_history_data( self, trans, history ): - """ - Returns a dictionary containing ``history`` and ``contents``, serialized - history and an array of serialized history contents respectively. - """ - # TODO: instantiate here? really? - history_serializer = HistorySerializer( self.app ) - hda_serializer = hdas.HDASerializer( self.app ) - history_dictionary = {} - contents_dictionaries = [] - try: - history_dictionary = history_serializer.serialize_to_view( history, view='detailed', - user=trans.user, trans=trans ) - - for content in history.contents_iter( types=[ 'dataset', 'dataset_collection' ] ): - contents_dict = {} - if isinstance( content, model.HistoryDatasetAssociation ): - contents_dict = hda_serializer.serialize_to_view(content, view='detailed', user=trans.user, trans=trans ) - hda_annotation = hda_serializer.serialize_annotation( content, 'annotation', user=history.user ) - contents_dict[ 'annotation' ] = hda_annotation - elif isinstance( content, model.HistoryDatasetCollectionAssociation ): - try: - service = self.app.dataset_collections_service - collection = service.get_dataset_collection_instance( - trans=trans, - instance_type='history', - id=self.app.security.encode_id( content.id ), - ) - serializer = collections_util.dictify_dataset_collection_instance - contents_dict = serializer( collection, - security=self.app.security, - parent=collection.history, - view="element" ) - except Exception, exc: - log.exception( "Error in history API at listing dataset collection: %s", exc ) - # TODO: return some dict with the error - contents_dictionaries.append( contents_dict ) - - except Exception, exc: - user_id = str( trans.user.id ) if trans.user else '(anonymous)' - log.exception( 'Error bootstrapping history for user %s: %s', user_id, str( exc ) ) - message = ( 'An error occurred getting the history data from the server. ' - 'Please contact a Galaxy administrator if the problem persists.' ) - history_dictionary[ 'error' ] = message - - return { 'history': history_dictionary, - 'contents': contents_dictionaries } - # container interface def _filter_to_contained( self, container, content_class ): return content_class.history == container diff --git a/lib/galaxy/webapps/galaxy/controllers/history.py b/lib/galaxy/webapps/galaxy/controllers/history.py index f04a3f60396..1a519ad99cb 100644 --- a/lib/galaxy/webapps/galaxy/controllers/history.py +++ b/lib/galaxy/webapps/galaxy/controllers/history.py @@ -562,7 +562,8 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI unencoded_history_id = trans.history.id if id: unencoded_history_id = self.decode_id( id ) - history_to_view = self.history_manager.get_accessible( unencoded_history_id, trans.user, current_history=trans.history ) + history_to_view = self.history_manager.get_accessible( unencoded_history_id, trans.user, + current_history=trans.history ) history_dictionary = self.history_serializer.serialize_to_view( history_to_view, view='detailed', user=trans.user, trans=trans ) @@ -570,8 +571,8 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI 'contents', trans=trans, user=trans.user ) jobs = ( trans.sa_session.query( trans.app.model.Job ) - .filter( trans.app.model.Job.user == history_to_view.user ) - .filter( trans.app.model.Job.history_id == unencoded_history_id ) ).all() + .filter( trans.app.model.Job.user == history_to_view.user ) + .filter( trans.app.model.Job.history_id == unencoded_history_id ) ).all() jobs = map( lambda j: self.encode_all_ids( trans, j.to_dict( 'element' ), True ), jobs ) tools = {} @@ -584,7 +585,7 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI tools[ tool_id ] = tool.to_dict( trans, io_details=True, link_details=True ) return trans.fill_template( "history/structure.mako", historyId=history_dictionary[ 'id' ], - history=history_dictionary, hdas=contents, jobs=jobs, tools=tools, **kwargs ) + history=history_dictionary, contents=contents, jobs=jobs, tools=tools, **kwargs ) @web.expose def view( self, trans, id=None, show_deleted=False, show_hidden=False, use_panels=True ): @@ -624,7 +625,7 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI return trans.show_error_message( error_msg, use_panels=use_panels ) return trans.fill_template_mako( "history/view.mako", - history=history_dictionary, hdas=contents, user_is_owner=user_is_owner, + history=history_dictionary, contents=contents, user_is_owner=user_is_owner, show_deleted=show_deleted, show_hidden=show_hidden, use_panels=use_panels ) @web.expose @@ -697,7 +698,7 @@ class HistoryController( BaseUIController, SharableMixin, UsesAnnotations, UsesI # dataset.annotation = self.get_item_annotation_str( trans.sa_session, history.user, dataset ) return trans.stream_template_mako( "history/display.mako", item=history, item_data=[], - user_is_owner=user_is_owner, history_dict=history_dictionary, hda_dicts=contents, + user_is_owner=user_is_owner, history_dict=history_dictionary, content_dicts=contents, user_item_rating=user_item_rating, ave_item_rating=ave_item_rating, num_ratings=num_ratings ) # ......................................................................... sharing & publishing diff --git a/lib/galaxy/webapps/galaxy/controllers/page.py b/lib/galaxy/webapps/galaxy/controllers/page.py index 6f3e0ea4d22..43050a8b4cf 100644 --- a/lib/galaxy/webapps/galaxy/controllers/page.py +++ b/lib/galaxy/webapps/galaxy/controllers/page.py @@ -765,7 +765,7 @@ class PageController( BaseUIController, SharableMixin, item=history, user_is_owner=user_is_owner, history_dict=history_dictionary, - hda_dicts=contents ) + content_dicts=contents ) return filled def _get_embedded_visualization_html( self, trans, id ): diff --git a/lib/galaxy/webapps/galaxy/controllers/root.py b/lib/galaxy/webapps/galaxy/controllers/root.py index 9af41eb7ef0..74388e74dc7 100644 --- a/lib/galaxy/webapps/galaxy/controllers/root.py +++ b/lib/galaxy/webapps/galaxy/controllers/root.py @@ -123,12 +123,12 @@ class RootController( BaseUIController, UsesAnnotations ): show_deleted = string_as_bool_or_none( show_deleted ) history_dictionary = {} - hda_dictionaries = [] + content_dictionaries = [] try: history = trans.get_history( create=True ) history_dictionary = self.history_serializer.serialize_to_view( history, view='detailed', user=trans.user, trans=trans ) - hda_dictionaries = self.history_serializer.serialize_contents( history, + content_dictionaries = self.history_serializer.serialize_contents( history, 'contents', trans=trans, user=trans.user ) except Exception, exc: @@ -138,8 +138,8 @@ class RootController( BaseUIController, UsesAnnotations ): 'Please contact a Galaxy administrator if the problem persists.' ) return trans.fill_template_mako( "root/history.mako", - history=history_dictionary, hdas=hda_dictionaries, - show_deleted=show_deleted, show_hidden=show_hidden ) + history=history_dictionary, contents=content_dictionaries, + show_deleted=show_deleted, show_hidden=show_hidden ) # ---- Dataset display / editing ---------------------------------------- @web.expose diff --git a/templates/webapps/galaxy/history/display.mako b/templates/webapps/galaxy/history/display.mako index 82bf1636059..977ae417e09 100644 --- a/templates/webapps/galaxy/history/display.mako +++ b/templates/webapps/galaxy/history/display.mako @@ -46,7 +46,7 @@
-${ galaxy_client.load( app='app', historyId=historyId, history=history, hdas=hdas, jobs=jobs, tools=tools ) } +${ galaxy_client.load( app='app', historyId=historyId, history=history, contents=contents, jobs=jobs, tools=tools ) } diff --git a/templates/webapps/galaxy/history/view.mako b/templates/webapps/galaxy/history/view.mako index 807ce39fa54..baca4dac391 100644 --- a/templates/webapps/galaxy/history/view.mako +++ b/templates/webapps/galaxy/history/view.mako @@ -167,7 +167,7 @@ a.btn { var hasMasthead = ${ 'true' if use_panels else 'false' }, userIsOwner = ${ 'true' if user_is_owner else 'false' }, historyJSON = ${ h.dumps( history ) }, - hdaJSON = ${ h.dumps( hdas ) }, + contentsJSON = ${ h.dumps( contents ) }, panelToUse = ( userIsOwner )? //TODO: change class names ({ location: 'mvc/history/history-panel-edit', className: 'HistoryPanelEdit' }): @@ -190,11 +190,11 @@ a.btn { if( hasMasthead ){ $( '#center' ).css( 'overflow', 'auto' ); } - + var panelClass = panelMod[ panelToUse.className ], // history module is already in the dpn chain from the panel. We can re-scope it here. historyModel = require( 'mvc/history/history-model' ), - history = new historyModel.History( historyJSON, hdaJSON ); + history = new historyModel.History( historyJSON, contentsJSON ); window.historyPanel = new panelClass({ show_deleted : ${show_deleted_json}, diff --git a/templates/webapps/galaxy/root/history.mako b/templates/webapps/galaxy/root/history.mako index 0750f93720a..2223ce06f2a 100644 --- a/templates/webapps/galaxy/root/history.mako +++ b/templates/webapps/galaxy/root/history.mako @@ -20,28 +20,22 @@ $(function(){ -${ galaxy_client.load( app='app', history=history, hdas=hdas, show_deleted=show_deleted, show_hidden=show_hidden ) } +${ galaxy_client.load( app='app', history=history, contents=contents, + show_deleted=show_deleted, show_hidden=show_hidden ) } From 45fb7f8994bbbcc21505379f37a46d8608390c89 Mon Sep 17 00:00:00 2001 From: Airistotal Date: Thu, 30 Jul 2015 09:18:19 -0500 Subject: [PATCH 28/68] Moved styles to reports.less Added import to base.less to include reports.less --- client/galaxy/style/less/base.less | 11 +- client/galaxy/style/less/reports.less | 113 ++++++++++++++++-- .../webapps/reports/controllers/jobs.py | 2 +- static/style/blue/base.css | 4 +- static/style/blue/reports.css | 7 +- templates/page_base.mako | 87 -------------- templates/sorting_base.mako | 4 - templates/spark_base.mako | 10 -- .../webapps/reports/jobs_errors_per_tool.mako | 3 +- .../webapps/reports/jobs_per_month_all.mako | 3 +- .../reports/jobs_per_month_in_error.mako | 3 +- templates/webapps/reports/jobs_per_tool.mako | 3 +- templates/webapps/reports/jobs_per_user.mako | 3 +- .../reports/jobs_specified_month_all.mako | 3 +- .../jobs_specified_month_in_error.mako | 3 +- .../webapps/reports/jobs_tool_per_month.mako | 3 +- .../webapps/reports/jobs_user_per_month.mako | 3 +- .../reports/workflows_per_month_all.mako | 3 +- .../webapps/reports/workflows_per_user.mako | 3 +- .../reports/workflows_per_workflow.mako | 3 +- .../reports/workflows_user_per_month.mako | 3 +- 21 files changed, 123 insertions(+), 154 deletions(-) diff --git a/client/galaxy/style/less/base.less b/client/galaxy/style/less/base.less index 8dad18887c1..72dfbd62e78 100644 --- a/client/galaxy/style/less/base.less +++ b/client/galaxy/style/less/base.less @@ -4,6 +4,9 @@ // Galaxy specific variables @import "galaxy_variables.less"; +// Galaxy Report Webapp +@import "reports"; + @white: #fff; @black: #000; @@ -134,14 +137,6 @@ body { #left-border { left: 250px; } -.reports-panel-container { - position: absolute; - top: @panel_header_height; - bottom: 10px; - overflow: scroll; - width: 100%; - padding: 10px; -} #center { left:250 + @border-default-color_padding; right: 250 + @border-default-color_padding; diff --git a/client/galaxy/style/less/reports.less b/client/galaxy/style/less/reports.less index ddb102759e0..1a4d26ec6b0 100644 --- a/client/galaxy/style/less/reports.less +++ b/client/galaxy/style/less/reports.less @@ -1,13 +1,19 @@ // ============================================================================ Reports Webapp - -.dir_arrow { - visibility: hidden +// ======================================================== Left ============== +.reports-panel-container { + position: absolute; + /*From base.less, top should be @panel_header_height*/ + top: 30px; + bottom: 10px; + overflow: scroll; + width: 100%; + padding: 10px; } +// ======================================================== SparkLines ======== #spark_time_select { display: inline-block; } - #spark_select { height: 23px; width: 30px; @@ -15,14 +21,101 @@ border-radius: 2px; } -.quarter_width { - width: 25%; +.jqstooltip { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + } + +// ======================================================== Sorting =========== +.dir_arrow { + visibility: hidden } +// ======================================================== Paging ============ +// ======================================== Pages ============================= +#back_button, #next_button, #curr_button, .miss_pages, .page_button { + position: relative; + float: left; + height: 24px; + width: 23px; + margin: 0 -1px 0 0; + padding-top: 2.5px; + border: 1px solid #bfbfbf; + z-index: 0; +} + +#back_button { + cursor: pointer; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#curr_button { + background: #ebd9b2; + border: 1px solid #5f6990; + z-index: 1; +} + +#formHeader > tbody > tr { + vertical-align: middle; +} + +#next_button { + cursor: pointer; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#page_selector { + cursor: default; + position: relative; + text-align: center; +} + + + +.page_button > a { + text-decoration: none; + padding: 8px; + margin: -8px; + height: 100%; + width: 100%; +} +// ======================================== Entry Selector ==================== +#entries_edit { + position: relative; + padding: 0; + width: 36px; + height: 20px; + text-align: center; + border: 1px solid black; + border-radius: 3px; + z-index: 6; +} + +#entry_submit { + cursor: default; + position: relative; + display: inline-block; + border: 1px solid black; + padding: 0; + width: 22px; + height: 22px; + border-radius: 11px; + background-color: #ebd9b2; + text-align: center; + opacity: 0.0; + z-index: 0; +} + +// ======================================================== Misc. ============= +.half_width { + width: 50% +} .third_width { width: 30%; } - -.half_width { - width: 50% -} +.quarter_width { + width: 25%; +} \ No newline at end of file diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index ac5f50977fe..6638ab815cb 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -288,7 +288,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): if "entries" in kwd: entries = int(kwd.get( 'entries' )) else: - entries = 50 + entries = 25 limit = entries * 4 if "offset" in kwd: diff --git a/static/style/blue/base.css b/static/style/blue/base.css index 312a11dcd11..e94d8b88702 100644 --- a/static/style/blue/base.css +++ b/static/style/blue/base.css @@ -1,4 +1,4 @@ -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff !important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:12px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#303030;text-decoration:none}a:hover,a:focus{color:#0a0a0a;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:5px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #bfbfbf;border-radius:3px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:17px;margin-bottom:17px;border:0;border-top:1px solid #bfbfbf}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 8.5px}.lead{margin-bottom:17px;font-size:13.8px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:18px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#5f6990}.text-warning{color:#1c1306}.text-danger{color:#1f0a0a}.text-success{color:#010301}.text-info{color:#000}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-weight:800;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:17px;margin-bottom:8.5px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:8.5px;margin-bottom:8.5px}h4 small,h5 small,h6 small{font-size:75%}h1,.h1{font-size:24px}h2,.h2{font-size:21px}h3,.h3{font-size:18px}h4,.h4{font-size:15px}h5,.h5{font-size:12px}h6,.h6{font-size:11px}.page-header{padding-bottom:7.5px;margin:34px 0 17px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:8.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:17px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:0){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:8.5px 17px;margin:0 0 17px;border-left:5px solid #eee}blockquote p{font-size:15px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:17px;font-style:normal;line-height:1.42857143}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}@media (min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:17px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #d6b161}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #d6b161}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #d6b161}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #d6b161}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #d6b161}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#b4eeb4;border-color:#29ad29}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#a0e9a0;border-color:#249924}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f8cfce;border-color:#da2520}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#f5bab8;border-color:#c4211d}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fae4c5;border-color:#e18c13}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#f8d9ae;border-color:#c97d11}@media (max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #d6b161;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:17px;font-size:18px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #bfbfbf}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-size:inherit;font-style:inherit;font-family:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:5px;font-size:12px;line-height:1.42857143;color:#555;vertical-align:middle}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:27px;padding:4px 10px;font-size:12px;line-height:1.42857143;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:17px;margin-top:10px;margin-bottom:10px;padding-left:20px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:24px;padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:37px;padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}select.input-lg{height:37px;line-height:37px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#1c1306}.has-warning .form-control{border-color:#1c1306;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6f4c1a;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6f4c1a}.has-warning .input-group-addon{color:#1c1306;border-color:#1c1306;background-color:#fae4c5}.has-error .help-block,.has-error .control-label{color:#1f0a0a}.has-error .form-control{border-color:#1f0a0a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6d2422;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6d2422}.has-error .input-group-addon{color:#1f0a0a;border-color:#1f0a0a;background-color:#f8cfce}.has-success .help-block,.has-success .control-label{color:#010301}.has-success .form-control{border-color:#010301;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #204b20;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #204b20}.has-success .input-group-addon{color:#010301;border-color:#010301;background-color:#b4eeb4}.form-control-static{margin-bottom:0;padding-top:5px}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:5px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#f2f2f2;border-color:#bfbfbf}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#dedede;border-color:#a1a1a1}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#f2f2f2;border-color:#bfbfbf}.btn-primary{color:#fff;background-color:#5f6990;border-color:#0e0f15}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#4e5777;border-color:#000}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#5f6990;border-color:#0e0f15}.btn-warning{color:#fff;background-color:#5a3e15;border-color:#000}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#39270d;border-color:#000}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#5a3e15;border-color:#000}.btn-danger{color:#fff;background-color:#5a1e1c;border-color:#000}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#3b1312;border-color:#000}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#5a1e1c;border-color:#000}.btn-success{color:#fff;background-color:#183918;border-color:#000}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#0c1c0c;border-color:#000}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#183918;border-color:#000}.btn-info{color:#fff;background-color:#113039;border-color:#000}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#08161a;border-color:#000}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#113039;border-color:#000}.btn-link{color:#303030;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#0a0a0a;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}.btn-sm,.btn-xs{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#fff;background-color:#5f6990}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#5f6990}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:0){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:none}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px;padding:1px 5px}.btn-group-sm>.btn{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-lg>.btn{padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified .btn{float:none;display:table-cell;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-left:0;padding-right:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:37px;padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:37px;line-height:37px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:4px 10px;font-size:12px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #aaa;border-radius:3px}.input-group-addon.input-sm{padding:3px 8px;font-size:11px;border-radius:2px}.input-group-addon.input-lg{padding:8px 14px;font-size:15px;border-radius:5px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:4px 10px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#303030}.nav .nav-divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #bfbfbf}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:3px 3px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #bfbfbf}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #bfbfbf;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #bfbfbf}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #bfbfbf;border-radius:3px 3px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#5f6990}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #bfbfbf}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #bfbfbf;border-radius:3px 3px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tabbable:before,.tabbable:after{content:" ";display:table}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{content:" ";display:table}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#303030;border-bottom-color:#303030}.nav a:hover .caret{border-top-color:#0a0a0a;border-bottom-color:#0a0a0a}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:33px;margin-bottom:17px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width:0){.navbar{border-radius:3px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width:0){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:0){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media (min-width:0){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media (min-width:0){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{z-index:1030;top:0}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:8px 15px;font-size:15px;line-height:17px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:0){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:-0.5px;margin-bottom:-0.5px;background-color:transparent;border:1px solid transparent;border-radius:3px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:4px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:17px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:17px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:8px;padding-bottom:8px}}@media (min-width:0){.navbar-left{float:left !important;float:left}.navbar-right{float:right !important;float:right}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:3px;margin-bottom:3px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:0){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar-btn{margin-top:3px;margin-bottom:3px}.navbar-text{float:left;margin-top:8px;margin-bottom:8px}@media (min-width:0){.navbar-text{margin-left:15px;margin-right:15px}}.navbar-default{background-color:#eee;border-color:#888}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#dedede}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#ddd}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#dedede;color:#555}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#dedede}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#2c3143;border-color:#181a24}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#181a24}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#666;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#1e212d}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#181a24;color:#fff}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#181a24}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#181a24}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#666;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:17px;list-style:none;background-color:#f5f5f5;border-radius:3px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:17px 0;border-radius:3px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:4px 10px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #bfbfbf;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#5f6990;border-color:#5f6990;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#bfbfbf;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:8px 14px;font-size:15px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:5px;border-top-left-radius:5px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:5px;border-top-right-radius:5px}.pagination-sm>li>a,.pagination-sm>li>span{padding:3px 8px;font-size:11px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager{padding-left:0;margin:17px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #bfbfbf;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#303030;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:2.14285714;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:5px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1{font-size:54px}}.alert{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#b4eeb4;border-color:#29ad29;color:#010301}.alert-success hr{border-top-color:#249924}.alert-success .alert-link{color:#000}.alert-info{background-color:#a8e2f3;border-color:#1992b6;color:#000}.alert-info hr{border-top-color:#16809f}.alert-info .alert-link{color:#000}.alert-warning{background-color:#fae4c5;border-color:#e18c13;color:#1c1306}.alert-warning hr{border-top-color:#c97d11}.alert-warning .alert-link{color:#000}.alert-danger{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a}.alert-danger hr{border-top-color:#c4211d}.alert-danger .alert-link{color:#000}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:17px;margin-bottom:17px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#5f6990;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#183918}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#113039}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#5a3e15}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#5a1e1c}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #bfbfbf}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#5f6990;border-color:#5f6990}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#d6d9e4}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:17px;background-color:#fff;border:1px solid transparent;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #d6b161}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px}.panel-title{margin-top:0;margin-bottom:0;font-size:14px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #bfbfbf;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel-group .panel{margin-bottom:0;border-radius:3px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #bfbfbf}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #bfbfbf}.panel-default{border-color:#bfbfbf}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#bfbfbf}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#bfbfbf}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bfbfbf}.panel-primary{border-color:#5f6990}.panel-primary>.panel-heading{color:#fff;background-color:#5f6990;border-color:#5f6990}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#5f6990}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#5f6990}.panel-success{border-color:#29ad29}.panel-success>.panel-heading{color:#010301;background-color:#b4eeb4;border-color:#29ad29}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#29ad29}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#29ad29}.panel-warning{border-color:#e18c13}.panel-warning>.panel-heading{color:#1c1306;background-color:#fae4c5;border-color:#e18c13}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#e18c13}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e18c13}.panel-danger{border-color:#da2520}.panel-danger>.panel-heading{color:#1f0a0a;background-color:#f8cfce;border-color:#da2520}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#da2520}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#da2520}.panel-info{border-color:#1992b6}.panel-info>.panel-heading{color:#000;background-color:#a8e2f3;border-color:#1992b6}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#1992b6}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#1992b6}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #ddd;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:5px}.well-sm{padding:9px;border-radius:2px}.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{margin-left:auto;margin-right:auto;width:auto;padding:10px;z-index:1050}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #bfbfbf;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #bfbfbf}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{left:50%;right:auto;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);filter:alpha(opacity=0)}.tooltip.in{opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:3px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:12px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.navbar-fixed-top .navbar-brand{font-family:Verdana;font-weight:bold;font-size:160%}pre{overflow:auto;word-wrap:normal;white-space:pre}.btn{white-space:normal}.dropdown-menu{max-width:auto}input[type="checkbox"],input[type="radio"]{margin-left:.5ex;margin-right:.5ex}.modal-dialog{width:690px}.pagination>.active>a{background-color:#ebd9b2;color:black}.pagination>.active>a:hover{color:black;background-color:#ebd9b2}.modal-body{overflow:auto}.nav-tabs{margin-bottom:15px}a{text-decoration:underline}label{font-weight:normal}/*! +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff !important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:12px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#303030;text-decoration:none}a:hover,a:focus{color:#0a0a0a;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:5px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #bfbfbf;border-radius:3px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:17px;margin-bottom:17px;border:0;border-top:1px solid #bfbfbf}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 8.5px}.lead{margin-bottom:17px;font-size:13.8px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:18px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#5f6990}.text-warning{color:#1c1306}.text-danger{color:#1f0a0a}.text-success{color:#010301}.text-info{color:#000}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-weight:800;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:17px;margin-bottom:8.5px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:8.5px;margin-bottom:8.5px}h4 small,h5 small,h6 small{font-size:75%}h1,.h1{font-size:24px}h2,.h2{font-size:21px}h3,.h3{font-size:18px}h4,.h4{font-size:15px}h5,.h5{font-size:12px}h6,.h6{font-size:11px}.page-header{padding-bottom:7.5px;margin:34px 0 17px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:8.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:17px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:0){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:8.5px 17px;margin:0 0 17px;border-left:5px solid #eee}blockquote p{font-size:15px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:17px;font-style:normal;line-height:1.42857143}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}@media (min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:17px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #d6b161}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #d6b161}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #d6b161}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #d6b161}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #d6b161}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#b4eeb4;border-color:#29ad29}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#a0e9a0;border-color:#249924}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f8cfce;border-color:#da2520}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#f5bab8;border-color:#c4211d}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fae4c5;border-color:#e18c13}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#f8d9ae;border-color:#c97d11}@media (max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #d6b161;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:17px;font-size:18px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #bfbfbf}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-size:inherit;font-style:inherit;font-family:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:5px;font-size:12px;line-height:1.42857143;color:#555;vertical-align:middle}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:27px;padding:4px 10px;font-size:12px;line-height:1.42857143;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:17px;margin-top:10px;margin-bottom:10px;padding-left:20px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:24px;padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:37px;padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}select.input-lg{height:37px;line-height:37px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#1c1306}.has-warning .form-control{border-color:#1c1306;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6f4c1a;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6f4c1a}.has-warning .input-group-addon{color:#1c1306;border-color:#1c1306;background-color:#fae4c5}.has-error .help-block,.has-error .control-label{color:#1f0a0a}.has-error .form-control{border-color:#1f0a0a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6d2422;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #6d2422}.has-error .input-group-addon{color:#1f0a0a;border-color:#1f0a0a;background-color:#f8cfce}.has-success .help-block,.has-success .control-label{color:#010301}.has-success .form-control{border-color:#010301;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#000;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #204b20;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #204b20}.has-success .input-group-addon{color:#010301;border-color:#010301;background-color:#b4eeb4}.form-control-static{margin-bottom:0;padding-top:5px}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:5px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#f2f2f2;border-color:#bfbfbf}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#dedede;border-color:#a1a1a1}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#f2f2f2;border-color:#bfbfbf}.btn-primary{color:#fff;background-color:#5f6990;border-color:#0e0f15}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#4e5777;border-color:#000}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#5f6990;border-color:#0e0f15}.btn-warning{color:#fff;background-color:#5a3e15;border-color:#000}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#39270d;border-color:#000}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#5a3e15;border-color:#000}.btn-danger{color:#fff;background-color:#5a1e1c;border-color:#000}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#3b1312;border-color:#000}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#5a1e1c;border-color:#000}.btn-success{color:#fff;background-color:#183918;border-color:#000}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#0c1c0c;border-color:#000}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#183918;border-color:#000}.btn-info{color:#fff;background-color:#113039;border-color:#000}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#08161a;border-color:#000}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#113039;border-color:#000}.btn-link{color:#303030;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#0a0a0a;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}.btn-sm,.btn-xs{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#fff;background-color:#5f6990}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#5f6990}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:0){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:none}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px;padding:1px 5px}.btn-group-sm>.btn{padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-lg>.btn{padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified .btn{float:none;display:table-cell;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-left:0;padding-right:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:37px;padding:8px 14px;font-size:15px;line-height:1.33;border-radius:5px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:37px;line-height:37px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:3px 8px;font-size:11px;line-height:1.5;border-radius:2px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:4px 10px;font-size:12px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #aaa;border-radius:3px}.input-group-addon.input-sm{padding:3px 8px;font-size:11px;border-radius:2px}.input-group-addon.input-lg{padding:8px 14px;font-size:15px;border-radius:5px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:4px 10px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#303030}.nav .nav-divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #bfbfbf}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:3px 3px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #bfbfbf}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #bfbfbf;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #bfbfbf}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #bfbfbf;border-radius:3px 3px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#5f6990}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #bfbfbf}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #bfbfbf;border-radius:3px 3px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tabbable:before,.tabbable:after{content:" ";display:table}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{content:" ";display:table}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#303030;border-bottom-color:#303030}.nav a:hover .caret{border-top-color:#0a0a0a;border-bottom-color:#0a0a0a}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:33px;margin-bottom:17px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width:0){.navbar{border-radius:3px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width:0){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:0){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media (min-width:0){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media (min-width:0){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{z-index:1030;top:0}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:8px 15px;font-size:15px;line-height:17px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:0){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:-0.5px;margin-bottom:-0.5px;background-color:transparent;border:1px solid transparent;border-radius:3px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:4px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:17px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:17px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:8px;padding-bottom:8px}}@media (min-width:0){.navbar-left{float:left !important;float:left}.navbar-right{float:right !important;float:right}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:3px;margin-bottom:3px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:0){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar-btn{margin-top:3px;margin-bottom:3px}.navbar-text{float:left;margin-top:8px;margin-bottom:8px}@media (min-width:0){.navbar-text{margin-left:15px;margin-right:15px}}.navbar-default{background-color:#eee;border-color:#888}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#dedede}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#ddd}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#dedede;color:#555}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#dedede}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#2c3143;border-color:#181a24}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#181a24}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#666;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#1e212d}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#181a24;color:#fff}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#181a24}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#181a24}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#666;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:17px;list-style:none;background-color:#f5f5f5;border-radius:3px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:17px 0;border-radius:3px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:4px 10px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #bfbfbf;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#5f6990;border-color:#5f6990;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#bfbfbf;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:8px 14px;font-size:15px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:5px;border-top-left-radius:5px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:5px;border-top-right-radius:5px}.pagination-sm>li>a,.pagination-sm>li>span{padding:3px 8px;font-size:11px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager{padding-left:0;margin:17px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #bfbfbf;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#303030;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:2.14285714;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:5px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1{font-size:54px}}.alert{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#b4eeb4;border-color:#29ad29;color:#010301}.alert-success hr{border-top-color:#249924}.alert-success .alert-link{color:#000}.alert-info{background-color:#a8e2f3;border-color:#1992b6;color:#000}.alert-info hr{border-top-color:#16809f}.alert-info .alert-link{color:#000}.alert-warning{background-color:#fae4c5;border-color:#e18c13;color:#1c1306}.alert-warning hr{border-top-color:#c97d11}.alert-warning .alert-link{color:#000}.alert-danger{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a}.alert-danger hr{border-top-color:#c4211d}.alert-danger .alert-link{color:#000}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:17px;margin-bottom:17px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#5f6990;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#183918}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#113039}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#5a3e15}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#5a1e1c}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #bfbfbf}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#5f6990;border-color:#5f6990}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#d6d9e4}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:17px;background-color:#fff;border:1px solid transparent;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #d6b161}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px}.panel-title{margin-top:0;margin-bottom:0;font-size:14px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #bfbfbf;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel-group .panel{margin-bottom:0;border-radius:3px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #bfbfbf}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #bfbfbf}.panel-default{border-color:#bfbfbf}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#bfbfbf}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#bfbfbf}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bfbfbf}.panel-primary{border-color:#5f6990}.panel-primary>.panel-heading{color:#fff;background-color:#5f6990;border-color:#5f6990}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#5f6990}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#5f6990}.panel-success{border-color:#29ad29}.panel-success>.panel-heading{color:#010301;background-color:#b4eeb4;border-color:#29ad29}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#29ad29}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#29ad29}.panel-warning{border-color:#e18c13}.panel-warning>.panel-heading{color:#1c1306;background-color:#fae4c5;border-color:#e18c13}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#e18c13}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e18c13}.panel-danger{border-color:#da2520}.panel-danger>.panel-heading{color:#1f0a0a;background-color:#f8cfce;border-color:#da2520}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#da2520}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#da2520}.panel-info{border-color:#1992b6}.panel-info>.panel-heading{color:#000;background-color:#a8e2f3;border-color:#1992b6}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#1992b6}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#1992b6}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #ddd;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:5px}.well-sm{padding:9px;border-radius:2px}.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{margin-left:auto;margin-right:auto;width:auto;padding:10px;z-index:1050}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #bfbfbf;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #bfbfbf}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{left:50%;right:auto;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);filter:alpha(opacity=0)}.tooltip.in{opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:3px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:12px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.navbar-fixed-top .navbar-brand{font-family:Verdana;font-weight:bold;font-size:160%}pre{overflow:auto;word-wrap:normal;white-space:pre}.btn{white-space:normal}.dropdown-menu{max-width:auto}input[type="checkbox"],input[type="radio"]{margin-left:.5ex;margin-right:.5ex}.modal-dialog{width:690px}.pagination>.active>a{background-color:#ebd9b2;color:black}.pagination>.active>a:hover{color:black;background-color:#ebd9b2}.modal-body{overflow:auto}.nav-tabs{margin-bottom:15px}a{text-decoration:underline}label{font-weight:normal}.reports-panel-container{position:absolute;top:30px;bottom:10px;overflow:scroll;width:100%;padding:10px}#spark_time_select{display:inline-block}#spark_select{height:23px;width:30px;padding:0;border-radius:2px}.jqstooltip{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dir_arrow{visibility:hidden}#back_button,#next_button,#curr_button,.miss_pages,.page_button{position:relative;float:left;height:24px;width:23px;margin:0 -1px 0 0;padding-top:2.5px;border:1px solid #bfbfbf;z-index:0}#back_button{cursor:pointer;border-top-left-radius:3px;border-bottom-left-radius:3px}#curr_button{background:#ebd9b2;border:1px solid #5f6990;z-index:1}#formHeader>tbody>tr{vertical-align:middle}#next_button{cursor:pointer;border-top-right-radius:3px;border-bottom-right-radius:3px}#page_selector{cursor:default;position:relative;text-align:center}.page_button>a{text-decoration:none;padding:8px;margin:-8px;height:100%;width:100%}#entries_edit{position:relative;padding:0;width:36px;height:20px;text-align:center;border:1px solid black;border-radius:3px;z-index:6}#entry_submit{cursor:default;position:relative;display:inline-block;border:1px solid black;padding:0;width:22px;height:22px;border-radius:11px;background-color:#ebd9b2;text-align:center;opacity:0;z-index:0}.half_width{width:50%}.third_width{width:30%}.quarter_width{width:25%}/*! * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../images/fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../images/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../images/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../images/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../images/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-icon{font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(.5, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0, #fff 50%);background-image:-moz-linear-gradient(center bottom, #eee 0, #fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top, #eee 0, #fff 50%)}html[dir="rtl"] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(.9, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0, #fff 90%);background-image:-moz-linear-gradient(center bottom, #eee 0, #fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom, #eee 0, #fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir="rtl"] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url('../images/select2.png') right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,0.15);box-shadow:0 4px 5px rgba(0,0,0,0.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,0.15);box-shadow:0 -4px 5px rgba(0,0,0,0.15)}.select2-drop-active{border:1px solid #5897fb;border-top:none}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(.6, #eee));background-image:-webkit-linear-gradient(center bottom, #ccc 0, #eee 60%);background-image:-moz-linear-gradient(center bottom, #ccc 0, #eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background-image:linear-gradient(to top, #ccc 0, #eee 60%)}html[dir="rtl"] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url('../images/select2.png') no-repeat 0 1px}html[dir="rtl"] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto !important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#fff url('../images/select2.png') no-repeat 100% -22px;background:url('../images/select2.png') no-repeat 100% -22px,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2.png') no-repeat 100% -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat 100% -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat 100% -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}html[dir="rtl"] .select2-search input{padding:4px 5px 4px 20px;background:#fff url('../images/select2.png') no-repeat -37px -22px;background:url('../images/select2.png') no-repeat -37px -22px,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2.png') no-repeat -37px -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat -37px -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat -37px -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url('../images/select2-spinner.gif') no-repeat 100%;background:url('../images/select2-spinner.gif') no-repeat 100%,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2-spinner.gif') no-repeat 100%,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2-spinner.gif') no-repeat 100%,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2-spinner.gif') no-repeat 100%,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(.5, #eee));background-image:-webkit-linear-gradient(center bottom, #fff 0, #eee 50%);background-image:-moz-linear-gradient(center bottom, #fff 0, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top, #fff 0, #eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(.5, #eee));background-image:-webkit-linear-gradient(center top, #fff 0, #eee 50%);background-image:-moz-linear-gradient(center top, #fff 0, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to bottom, #fff 0, #eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:none;filter:none}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow{border-right:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}html[dir="rtl"] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:bold}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-ajax-error,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url('../images/select2-spinner.gif') no-repeat 100%}.select2-results .select2-ajax-error{background:rgba(255,50,50,0.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto !important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear, 0 0, 0 100%, color-stop(1%, #eee), color-stop(15%, #fff));background-image:-webkit-linear-gradient(top, #eee 1%, #fff 15%);background-image:-moz-linear-gradient(top, #eee 1%, #fff 15%);background-image:linear-gradient(to bottom, #eee 1%, #fff 15%)}html[dir="rtl"] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px 3px 5px !important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir="rtl"] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:transparent !important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url('../images/select2-spinner.gif') no-repeat 100% !important}.select2-default{color:#999 !important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear, 0 0, 0 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));background-image:-webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:-moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%)}html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url('../images/select2.png') right top no-repeat}html[dir="rtl"] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir="rtl"] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px 3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;position:absolute !important;outline:0 !important;left:0 !important;top:0 !important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png') !important;background-repeat:no-repeat !important;background-size:60px 40px !important}.select2-search input{background-position:100% -21px !important}}.select2-minwidth{min-width:256px}.galaxy-frame .corner{-moz-border-radius:5px;border-radius:5px}.galaxy-frame .toggle{color:gold}.galaxy-frame .frame-background{z-index:1000;position:absolute;display:none;top:0;left:0;height:100%;width:100%;opacity:.6;background:#000;overflow:auto}.galaxy-frame .frame-shadow{z-index:1001;position:absolute;display:none;top:0;left:0;opacity:.5;background:#2c3143;border:1px solid #888}.galaxy-frame .frame-menu{z-index:1005;position:absolute;cursor:pointer;color:gold;right:10px}.galaxy-frame .frame-scroll-up{top:50px}.galaxy-frame .frame-scroll-down{bottom:20px}.galaxy-frame .frame{z-index:1002;overflow:hidden;position:absolute;background:#fff;border:1px solid #888;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3)}.galaxy-frame .frame .f-content{position:absolute;overflow:hidden;background:#fff;border:none;top:24px;bottom:3px;left:3px;right:3px}.galaxy-frame .frame .f-cover{position:absolute;display:none;top:0;left:0;height:100%;width:100%;opacity:0;background:#fff}.galaxy-frame .frame .f-iframe{border:none;width:100%;height:100%}.galaxy-frame .frame .f-header{height:17px;margin:2px;cursor:pointer;border:1px solid #000;background:#2c3143;color:#fff}.galaxy-frame .frame .f-title{position:absolute;top:2px;left:16px;right:16px;font-size:12px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;text-align:center}.galaxy-frame .frame .f-icon{position:absolute;cursor:pointer;font-size:14px}.galaxy-frame .frame .f-not-allowed{cursor:not-allowed}.galaxy-frame .frame .f-close{right:5px;top:3px}.galaxy-frame .frame .f-pin{left:6px;top:3px}.galaxy-frame .frame .f-resize{background:#fff;width:16px;height:16px;color:#2c3143;right:0;bottom:0;text-align:center;line-height:16px;border:0}.upload-button{position:relative;width:31px;height:21px;top:-4px;cursor:pointer;-moz-border-radius:3px;border-radius:3px}.upload-button .progress{height:21px}.upload-button .progress-bar-danger{background:#f8cfce}.upload-button .progress-bar-success{background:#b4eeb4}.upload-button .progress-bar-info{background:#ffc}.upload-button .progress-bar-notransition{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.upload-button .label{position:absolute;top:2px;width:inherit;text-align:center;line-height:19px;font-size:1.2em}.upload-icon{font-size:1.2em;width:1.2em}.upload-icon-button{font-size:1.2em;width:1.2em;cursor:pointer}.upload-box{width:100%;height:90%;text-align:center;overflow:scroll;font-size:12px;line-height:1.33;-moz-border-radius:5px;border-radius:5px;border:1px dashed #bfbfbf;padding:10px;overflow-x:hidden;-ms-overflow-style:none}.upload-box .table{width:100%}.upload-box .table th{text-align:center;white-space:nowrap}.upload-box .table td{margin:0}.upload-box .upload-item .select2-arrow b{background-position:0 -3px}.upload-box .upload-item .select2-choice{max-height:20px;line-height:18px;background:transparent}.upload-box .upload-item .select2-container-disabled .select2-arrow{background:transparent}.upload-box .name-column{position:relative}.upload-box .mode{float:left;font-size:1.2em;width:1.2em;color:#555}.upload-box .title{width:130px;word-wrap:break-word;font-size:11px;float:left}.upload-box .text{position:absolute;display:none}.upload-box .text .text-content{font-size:11px;width:100%;height:50px;resize:none;background:inherit;color:#000}.upload-box .text .text-info{font-size:11px}.upload-box .extension{width:100px;min-width:100px;font-size:11px}.upload-box .genome{width:150px;min-width:150px;font-size:11px}.upload-box .size{width:60px;white-space:nowrap}.upload-box .info{width:130px;font-size:11px;line-height:1.2em}.upload-box .info .progress{top:1px;position:relative;width:100%;padding:0;margin:0;line-height:1.55em}.upload-box .info .progress .progress-bar{border-radius:inherit;-moz-border-radius:inherit}.upload-box .info .progress .percentage{position:absolute;text-align:center;width:100%;color:#fff}.upload-ftp{height:250px;width:500px;overflow:auto}.upload-ftp .upload-ftp-wait{font-size:1.2em;position:absolute;bottom:10px;right:10px}.upload-ftp .upload-ftp-help{margin-bottom:10px}.upload-ftp .upload-ftp-warning{text-align:center;margin-top:20px}.upload-ftp .upload-ftp-row{cursor:pointer}.upload-ftp .upload-ftp-row .label{width:240px}.upload-ftp .upload-ftp-row .label p{width:inherit;word-wrap:break-word}.upload-ftp .upload-ftp-row .nonlabel{white-space:nowrap}.upload-settings .upload-settings-cover{position:absolute;width:100%;height:100%;top:0;left:0;background:#fff;opacity:.4;cursor:no-drop}.upload-header{height:5%;text-align:left;max-height:20px;line-height:18px;margin-top:10px}.upload-header .header-title{font-weight:bold;padding-left:60px;padding-right:20px}.upload-header .header-selection{width:200px;min-width:200px;font-size:11px;padding-right:10px}.upload-header .select2-choice{max-height:20px;line-height:18px;background:transparent;text-align:center;font-weight:normal}.upload-header .select2-choice .select2-arrow b{background-position:0 -3px}.upload-top{height:5%;text-align:center}.upload-top .upload-info{margin-top:0;font-weight:normal;text-align:center}.no-highlight,.ui-button-icon{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.no-padding{padding:0 !important}.ui-margin-top{padding-top:5px !important}.ui-margin-bottom{margin-bottom:5px !important}.ui-error{-moz-border-radius:3px;border-radius:3px;background:#f8cfce;padding:5px}.ui-label{font-weight:bold}.ui-message{padding:2px 10px 2px 10px;margin:0}.ui-icon{font-size:1.2em}.ui-button-icon{height:auto !important}.ui-button-icon ul i{font-size:1.2em;margin-right:5px;position:relative;top:1px}.ui-button-icon .button{margin-right:5px;margin-left:5px}.ui-button-icon .button .title{position:relative;font-size:.8em;font-weight:normal;top:-1px;word-break:break-word}.ui-button-icon .button.disabled{opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65)}.ui-button-menu .dropdown-menu{min-width:50px}.ui-button-menu .dropdown-item{text-align:left}.ui-button-icon-plain{border:none !important;background:none !important;height:inherit !important;width:inherit !important;padding-right:3px !important}.ui-tabs .ui-tabs-add{font-size:.8em;margin-right:5px}.ui-tabs .ui-tabs-delete{font-size:.8em;margin-left:5px;cursor:pointer}.ui-table tbody,.ui-table-plain tbody{cursor:pointer}.ui-table-plain{table-layout:fixed}.ui-table-plain tbody{cursor:auto !important}.ui-table-plain tbody td{padding:0 !important;border:none !important}.ui-table-plain .ui-table-section{border-left:solid 3px #ebd9b2;border-radius:5px !important;margin-bottom:5px;padding-left:10px}.ui-table-form-element{margin-top:5px;margin-bottom:5px;overflow:visible}.ui-table-form-element .ui-table-form-title{word-break:break-word;font-weight:bold}.ui-table-form-element .ui-table-form-title .ui-table-form-optional{cursor:pointer}.ui-table-form-element .ui-table-form-title .ui-table-form-optional .icon{margin-right:5px;font-size:1.2em}.ui-table-form-element .ui-table-form-field{margin-top:5px}.ui-table-form-separator{font-weight:bold;font-size:.9em}.ui-table-form-info{clear:both !important}.ui-table-form-error{display:none}.ui-table-form-error .ui-table-form-error-text{padding-left:5px}.ui-portlet,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow{border:solid #d6b161 1px;border-radius:3px;position:relative;clear:both;width:auto;height:100%}.ui-portlet .portlet-header,.ui-portlet-limited .portlet-header,.ui-portlet-narrow .portlet-header{background:#ebd9b2;border-bottom:solid #d6b161 1px;padding:2px 8px;overflow:visible;float:right;width:100%}.ui-portlet .portlet-header .portlet-title,.ui-portlet-limited .portlet-header .portlet-title,.ui-portlet-narrow .portlet-header .portlet-title{word-break:break-word;display:inline;vertical-align:middle}.ui-portlet .portlet-header .portlet-title .portlet-title-text,.ui-portlet-limited .portlet-header .portlet-title .portlet-title-text,.ui-portlet-narrow .portlet-header .portlet-title .portlet-title-text{vertical-align:middle;line-height:22px}.ui-portlet .portlet-header .portlet-title .icon,.ui-portlet-limited .portlet-header .portlet-title .icon,.ui-portlet-narrow .portlet-header .portlet-title .icon{font-size:1.2em;vertical-align:middle}.ui-portlet .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-limited .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-narrow .portlet-header .portlet-operations .ui-button-icon{margin-left:5px}.ui-portlet .portlet-content,.ui-portlet-limited .portlet-content,.ui-portlet-narrow .portlet-content{height:inherit;padding-left:10px;padding-right:10px;clear:both}.ui-portlet .portlet-content .content,.ui-portlet-limited .portlet-content .content,.ui-portlet-narrow .portlet-content .content{padding:0;height:100%;width:100%}.ui-portlet .portlet-content .buttons,.ui-portlet-limited .portlet-content .buttons,.ui-portlet-narrow .portlet-content .buttons{margin-top:5px;margin-bottom:5px}.ui-portlet .portlet-backdrop,.ui-portlet-limited .portlet-backdrop,.ui-portlet-narrow .portlet-backdrop{display:none;z-index:10;position:absolute;top:0;width:100%;height:100%;opacity:.2;background:#fff;cursor:not-allowed}.ui-portlet-repeat,.ui-portlet-section{border:none;border-left:solid 3px #ebd9b2;border-radius:5px;margin-bottom:5px}.ui-portlet-repeat .portlet-header,.ui-portlet-section .portlet-header{background:#ebd9b2;border-radius:5px;border-bottom-left-radius:0;border-top-left-radius:0;padding:0 2px}.ui-portlet-repeat .portlet-header .portlet-title-text,.ui-portlet-section .portlet-header .portlet-title-text{vertical-align:middle;line-height:20px !important}.ui-portlet-repeat .portlet-content,.ui-portlet-section .portlet-content{padding-right:0}.ui-portlet-section{margin-top:5px;border-left:solid 3px #dfe5f9}.ui-portlet-section .portlet-header{background:#dfe5f9;border-bottom:solid #b4c2f1 1px}.ui-portlet-section .portlet-highlight{text-decoration:underline}.ui-portlet-narrow{border:none}.ui-portlet-narrow .portlet-header{border-radius:3px}.ui-portlet-narrow .portlet-header .portlet-operations .ui-button-icon{margin-left:3px}.ui-portlet-narrow .ui-portlet-repeat .portlet-header,.ui-portlet-narrow .ui-portlet-section .portlet-header{border-radius:5px;border-bottom-left-radius:0;border-top-left-radius:0}.ui-portlet-narrow .portlet-content{padding:0}.ui-portlet-narrow .ui-table-section,.ui-portlet-narrow .ui-portlet-repeat .portlet-content,.ui-portlet-narrow .ui-portlet-section .portlet-content{padding-left:5px}.ui-portlet-limited,.ui-portlet-narrow{max-width:900px}.ui-popover{max-width:700px;display:none}.ui-popover .popover-close{position:absolute;right:10px;top:7px;font-size:1.2em;cursor:pointer}.ui-popover .popover-title{padding:4px 10px}.ui-input,.ui-input-basic,.ui-textarea,.ui-options .ui-options-list,.ui-form-slider .ui-form-slider-text,.ui-select .select2-container-multi .select2-choices,.ui-select select,.ui-select .select2-container .select2-choice{width:100%;display:block;height:27px;padding:4px 10px;font-size:12px;line-height:1.42857143;color:#555;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);background-image:none;background:transparent;-webkit-appearance:none;-moz-border-radius:3px}.ui-input[disabled],.ui-input[readonly],fieldset[disabled] .ui-input{cursor:not-allowed;background-color:#eee}.ui-input-basic,.ui-select select,.ui-select .select2-container .select2-choice{-webkit-box-shadow:inset 0 -1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 -1px 1px rgba(0,0,0,0.075)}.ui-textarea{height:100px !important}.ui-options .ui-options-list{height:100% !important}.ui-options .ui-options-list input[type=checkbox],.ui-options .ui-options-list input[type=radio]{display:none}.ui-options .ui-options-list label{margin:0;cursor:pointer}.ui-options .ui-options-list .ui-drilldown-button{position:relative;top:2px;left:-3px;margin-right:3px;cursor:pointer}.ui-options .ui-options-list input[type=checkbox]+label:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-size:1.2em;margin-right:5px;position:relative;top:1px;width:10px;content:"\f096"}.ui-options .ui-options-list input[type=checkbox]:checked+label:before{content:"\f046"}.ui-options .ui-options-list input[type=radio]+label:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-size:1.2em;margin-right:5px;position:relative;top:1px;width:10px;content:"\f1db"}.ui-options .ui-options-list input[type=radio]:checked+label:before{content:"\f192"}.ui-form-slider{display:inline-block;width:100%}.ui-form-slider .ui-form-slider-text{width:100px;float:left}.ui-form-slider .ui-form-slider-element{width:calc(100% - 110px);float:left;top:8px;left:10px}.ui-radiobutton{width:100%}.ui-radiobutton label{height:23px;line-height:1em}.ui-radiobutton i{padding-right:5px}.ui-button-check{cursor:pointer;margin-bottom:5px}.ui-button-check .icon{font-size:1.2em;width:1.2em}.ui-color-picker .ui-color-picker-header{cursor:pointer}.ui-color-picker .ui-color-picker-value{float:left;border-radius:3px;border:solid 1px #000;width:12px;height:12px;margin-right:5px}.ui-color-picker .ui-color-picker-label{float:left;line-height:1.2em}.ui-color-picker .ui-color-picker-view{height:100%;overflow:auto;display:none;float:left;margin-top:5px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel{width:210px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content{margin-bottom:15px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .label{padding-bottom:2px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .line .ui-color-picker-box{cursor:pointer;float:left;margin-right:5px;border:solid 1px #c0c0c0;width:15px;height:15px;border-radius:2px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .line .ui-color-picker-box .ui-color-picker-check{color:black;font-size:1.2em;position:relative;left:1px}.ui-list .ui-list-select{float:left;width:calc(100% - 27px)}.ui-list .ui-list-button .ui-button-icon{margin-top:3px;margin-right:5px}.ui-list .ui-list-message,.ui-list .ui-list-portlet{clear:both}.ui-list .ui-list-id{cursor:pointer;margin-top:5px}.ui-list .ui-list-id .ui-list-delete{font-size:1.2em;margin-right:5px}.ui-select{position:relative}.ui-select .button{position:absolute;top:5px;right:5px}.ui-select select{position:relative;top:0;height:27px;width:100%;padding-right:20px;cursor:pointer;padding-left:5px}.ui-select .select2-container{width:100%}.ui-select .select2-container .select2-choice{height:27px;padding-left:5px}.ui-select .select2-container .select2-choice .select2-arrow{display:none}.ui-select .select2-container-multi .select2-choices{padding:0}.ui-select-multiple select{height:80px !important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.ui-select-content .ui-options{float:left;padding-top:2px}.select2-container .select2-choice,.select2-container .select2-choices{border:1px solid #aaa}.select2-dropdown-open .select2-choice,.select2-dropdown-open .select2-choices{border:1px solid #aaa;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.select2-drop-active{border:1px solid #aaa;border-radius:3px;border-top-left-radius:0;border-top-right-radius:0}.select2-drop-active .select2-search{padding-top:5px}.select2-drop.select2-drop-above.select2-drop-active{border:1px solid #aaa;border-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-drop.select2-drop-above.select2-drop-active .select2-search{padding-top:0}.libraryRow{background-color:#ebd9b2}.datasetHighlighted{background-color:#f9f9f9}.libraryItemDeleted-True{font-style:italic}div.libraryItemBody{padding:4px 4px 2px 4px}li.folderRow,li.datasetRow{border-top:solid 1px #c6bfa8}li.folderRow:hover,li.datasetRow:hover{background-color:#f9f9f9}td.right-center{vertical-align:middle !important;text-align:right}.library-genome-select{max-width:350px}.library-extension-select{max-width:140px}.library_table td{border-top:1px solid #5f6990 !important}.library_table th{border-bottom:2px solid #5f6990 !important}.library_table a{color:#0a143d}.library_table a:hover{color:maroon}.library_style_container{width:95%;margin:auto;margin-top:2em;overflow:auto !important}.library_style_container tr{height:32px}tr.light td{background-color:white;color:black}tr.light:hover td{background-color:#f5e8cc}tr.dark td{background-color:#d6b161;color:white}tr.dark:hover td{background-color:#ebd4a4;color:white}a.dark{color:white}.dataset_table tr{border-bottom:1px solid #5f6990 !important}.dataset_table th{border:none !important}.dataset_table td{border:none !important}th.button_heading{width:2em}.bigdrop.select2-container .select2-results{max-height:300px}.bigdrop .select2-results{max-height:300px}.select2-container-multi{width:100%}.roles-selection{width:66%}#library_toolbar{margin-bottom:1em}#library_toolbar span{margin-right:.2em}img.expanderIcon{padding-right:4px}input.datasetCheckbox,li,ul{padding:0;margin:0}.rowTitle{padding:2px}ul{list-style:none}.libraryTitle th{text-align:left}pre.peek{background:white;color:black;overflow:auto}pre.peek th{color:white;background:#ebd9b2}.help-button{float:right}span.expandLink{padding-left:12px;display:inline-block;vertical-align:middle;background:url(../images/silk/resultset_next.png) no-repeat}.folderRow.expanded span.expandLink{background:url(../images/silk/resultset_bottom.png) no-repeat}.folderRow span.rowIcon{float:left;margin-right:5px;width:16px;height:16px;display:inline-block;vertical-align:middle;background:url(../images/silk/folder.png)}.libraryItem-error{margin-right:2px;padding:0 2px 0 2px;border:1px solid #da2520;background:#f8cfce}.libraryItem-queued{margin-right:2px;padding:0 2px 0 2px;border:1px solid #bfbfbf;background:#eee}.libraryItem-running{margin-right:2px;padding:0 2px 0 2px;border:1px solid #aa6;background:#ffc}.libraryItem-upload{margin-right:2px;padding:0 2px 0 2px;border:1px solid #1992b6;background:#a8e2f3}.pagination-sm{height:15px}.library-paginator{margin-left:2em}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:4em 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;-moz-box-shadow:5px 5px 4px -4px #666;-webkit-box-shadow:2px 2px 2px #999;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;-moz-text-shadow:1px 1px 0 white;-webkit-text-shadow:1px 1px 0 white;text-shadow:1px 1px 0 white;-moz-border-radius:1px;-webkit-border-radius:1px;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;-moz-text-shadow:0 0 0 transparent;-webkit-text-shadow:0 0 0 transparent;text-shadow:0 0 0 transparent;-moz-box-shadow:0 0 0 transparent;-webkit-box-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:transparent;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:bold}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url("../images/jstree/32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:transparent;width:16px;height:16px}#jstree-dnd.jstree-default .jstree-ok{background-position:-9px -71px}#jstree-dnd.jstree-default .jstree-er{background-position:-39px -71px}.jstree-default>.jstree-striped{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-moz-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #beebff), color-stop(100%, #a8e4ff));background:-webkit-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-o-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-ms-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:linear-gradient(to bottom, #beebff 0, #a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:transparent}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:transparent}.jstree-default .jstree-disabled.jstree-hovered{background:transparent}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default .jstree-file{background:url("../images/jstree/32px.png") -100px -68px no-repeat}.jstree-default .jstree-folder{background:url("../images/jstree/32px.png") -260px -4px no-repeat}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:transparent}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:transparent}.jstree-default-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default-small .jstree-file{background:url("../images/jstree/32px.png") -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url("../images/jstree/32px.png") -263px -7px no-repeat}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:transparent}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:transparent}.jstree-default-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default-large .jstree-file{background:url("../images/jstree/32px.png") -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url("../images/jstree/32px.png") -256px 0 no-repeat}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("../images/jstree/40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("../images/jstree/40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url("../images/jstree/40px.png")}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-responsive>.jstree-striped{background:transparent}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,0.7);border-bottom:1px solid rgba(64,64,64,0.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url("../images/jstree/40px.png");background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:transparent}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url("../images/jstree/40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url("../images/jstree/40px.png") -40px -40px no-repeat;background-size:120px 240px}}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}.unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.parent-width{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;*width:90%}.clear:before,.clear:after{content:" ";display:table}.clear:after{clear:both}.clear:before,.clear:after{content:" ";display:table}.clear:after{clear:both}body{background:#fff;color:#000;margin:10px}body.full-content{overflow:hidden;margin:0;padding:0;width:100%;height:100%}#background{position:absolute;background:#fff;z-index:-1;top:0;left:0;margin:0;padding:0;width:100%;height:100%}#messagebox{position:absolute;top:34px;left:0;width:100%;height:30px !important;overflow:hidden;border-bottom:solid #999 1px;font-size:90%}#inactivebox{position:absolute;top:34px;left:0;width:100%;height:30px !important;overflow:hidden;border-bottom:solid #999 1px;font-size:90%}#left,#left-border,#center,#right-border,#right{position:absolute;top:34px;bottom:0;overflow:hidden;background:#fff}#left{left:0;width:250px;z-index:200;border-right:solid #999 1px}#left-border{left:250px}.reports-panel-container{position:absolute;top:30px;bottom:10px;overflow:scroll;width:100%;padding:10px}#center{left:250px;right:250px;overflow:hidden;z-index:1}#right-border{right:250px}#right{width:250px;right:0;z-index:200;border-left:solid #999 1px}body.has-message-box #left,body.has-inactivity-box #left,body.has-message-box #left-border,body.has-inactivity-box #left-border,body.has-message-box #center,body.has-inactivity-box #center,body.has-message-box #right-border,body.has-inactivity-box #right-border,body.has-message-box #right,body.has-inactivity-box #right{top:64px}body.has-message-box.has-inactivity-box #left,body.has-message-box.has-inactivity-box #left-border,body.has-message-box.has-inactivity-box #center,body.has-message-box.has-inactivity-box #right-border,body.has-message-box.has-inactivity-box #right{top:94px}body.has-message-box.has-inactivity-box #inactivebox{top:64px}.subnavbar{background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-bottom:solid #bfbfbf 1px;border-top:solid #bfbfbf 1px;padding:5px;color:#555}.unified-panel-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;height:30px;z-index:1000;text-shadow:rgba(255,255,255,0.8) 0 1px 0;background:#eee;border-bottom:solid #999 1px;margin:0;padding:0;padding-right:10px;padding-left:10px;font-weight:bold;color:#555}.unified-panel-header a{color:#555}.unified-panel-header .fa{font-size:1.2em}.unified-panel-header-inner{padding-top:8px}.unified-panel-footer{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:absolute;bottom:0;height:25px;line-height:25px;width:100%;z-index:1000;border-top:solid #999 1px;background:#eee;color:#555}.unified-panel-footer a{color:#555}.unified-panel-footer .drag{position:absolute;top:0;right:0;padding:0 5px;text-align:center;height:25px;width:20px;background-image:url(../images/visualization/draggable_horizontal.png);background-repeat:no-repeat;background-position:50% 50%;cursor:w-resize}#right>.unified-panel-footer .drag{left:0}.panel-collapse{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:absolute;width:100%;z-index:1000;color:#555;font-size:1.33333333em;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;z-index:201;display:block;position:fixed;left:0;top:inherit;bottom:0;padding:0 5px;text-align:center;height:25px;line-height:25px;width:20px;background:none;border-right:solid #999 1px;border-top:solid #999 1px;background:#eee}.panel-collapse a{color:#555}.panel-collapse .drag{position:absolute;top:0;right:0;padding:0 5px;text-align:center;height:25px;width:20px;background-image:url(../images/visualization/draggable_horizontal.png);background-repeat:no-repeat;background-position:50% 50%;cursor:w-resize}.panel-collapse:before{content:'\f053'}.panel-collapse.hidden:before{content:'\f054'}.panel-collapse.right{left:inherit;right:0;border-right:none;border-left:solid #bfbfbf 1px}.panel-collapse.right.right:before{content:'\f054'}.panel-collapse.right.right.hidden:before{content:'\f053'}.menu-bg{background:whiteSmoke top repeat-x}div.unified-panel-body{position:absolute;top:30px;bottom:0;width:100%}#left>div.unified-panel-body,#right>div.unified-panel-body{bottom:25px}.panel-header-button{color:#333;text-decoration:none;display:inline-block;cursor:pointer;margin:-1px;padding:1px;margin-top:-0.2em;padding-right:.5em;padding-left:.5em}.panel-header-button:hover{color:maroon;-webkit-transition:color .25s linear;transition:color .25s linear}.panel-header-button .caret{margin-top:7px}.panel-header-button.popup{padding-right:1.75em;background:url(../images/dropdownarrow.png) no-repeat right 7px}#DD-helper{background:white;opacity:0;z-index:900;position:absolute;top:0;left:0;width:100%;height:100%}.panel-error-message,.panel-warning-message,.panel-done-message,.panel-info-message{height:30px;line-height:30px;padding:0;padding-left:26px;background-color:#f8cfce;background-image:url(error_small.png);background-repeat:no-repeat;background-position:6px 50%}.panel-warning-message{background-image:url(warn_small.png);background-color:#fae4c5}.panel-done-message{background-image:url(ok_small.png);background-color:#b4eeb4}.panel-info-message{background-image:url(info_small.png);background-color:#a8e2f3}#masthead{position:absolute;top:0;left:0;width:100%;min-width:990px;padding:0}#masthead .nav{z-index:15001}#masthead .nav>li>a{cursor:pointer;text-decoration:none}#masthead .nav>li>a:hover{color:gold}#masthead li.dropdown>a:hover .caret{border-top-color:gold;border-bottom-color:gold}#masthead .navbar-brand{position:absolute;left:0;top:0;font-family:verdana;font-weight:bold;font-size:20px;line-height:1;color:white;padding:5px 20px 12px;margin-left:-15px;z-index:2000}#masthead .navbar-brand img{display:inline;width:26px;vertical-align:top}#masthead .navbar-brand a{color:white;text-decoration:none}#masthead .iconbar{position:absolute;top:7px;right:110px;cursor:pointer;color:#999;overflow:hidden}#masthead .iconbar .symbol{float:left;margin:0 10px;font-size:11px}#masthead .iconbar .symbol .number{font-weight:bold;font-size:10px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;position:relative;left:23px;top:-12px}#masthead .iconbar .toggle{color:gold}.quota-meter-container{position:absolute;top:0;right:0;height:32px}.quota-meter{position:absolute;top:8px;right:8px;height:16px;width:100px;background-color:#f5f5f5}.quota-meter-bar{position:absolute;top:0;left:0;height:16px;background-color:#5f6990}.quota-meter-bar-warn{background-color:#5a3e15}.quota-meter-bar-error{background-color:#5a1e1c}.quota-meter-text{position:absolute;top:50%;left:0;width:100px;height:16px;margin-top:-6px;text-align:center;z-index:9001;color:#000;white-space:nowrap}div.metadataForm{border:solid #aaa 1px}div.metadataFormTitle{font-weight:bold;padding:5px;padding-left:10px;padding-right:10px;background:#ccc;background-repeat:repeat-x;background-position:top;border-bottom:solid #aaa 1px}div.metadataFormBody{background:#fff;padding:5px 0}div.metadataFormBody div.metadataFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #dcb790 1px;margin-bottom:5px}div.metadataFormDisabled div.metadataFormTitle{background:#eee;border-color:#999}div.metadataFormDisabled{border-color:#999}div.metadataHelpBody{width:100%;overflow:auto}div.titleRow{font-weight:bold;border-bottom:dotted gray 1px;margin-bottom:.5em;padding-bottom:.25em}div.toolFormBody div.toolFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #d6b161 1px;margin-bottom:5px}div.toolFormDisabled div.toolFormTitle{background:#f5f5f5;border-color:#bfbfbf}div.toolFormDisabled{border-color:#bfbfbf}div.toolHelp{margin-top:15px;padding:5px}div.toolHelpBody{width:100%}.toolForm.toolFormInCanvas{border:solid #d6b161 1px;background:#fff}.toolForm.toolFormInCanvas.toolForm-active{border:solid #5f6990 3px;margin:4px}.toolForm.toolFormInCanvas .toolFormTitle{font-size:12px;line-height:1.42857143}div.form,div.toolForm{border:solid #d6b161 1px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}div.form-title,div.toolFormTitle{padding:5px 10px;background:#ebd9b2;border-bottom:solid #d6b161 1px}div.form-body{padding:5px 0}div.form-row{padding:5px 10px}div.form-title-row{padding:5px 10px}div.repeat-group-item{border-left:solid #d6b161 5px;margin-left:10px;margin-bottom:10px}div.form-row-error{background:#f8cfce}div.form-row label{font-weight:bold;display:block;margin-bottom:.2em}div.form-row label.inline{display:inline}div.form-row-input{width:90%;float:left}div.form-row-input label{font-weight:normal;display:inline}div.form-row-error-message{width:300px;float:left;color:red;font-weight:bold;padding:3px 0}.form-row .help,.toolParamHelp,.ui-table-form-info{color:#666}.form-row .help a,.toolParamHelp a{color:#666}.form-row.form-actions{background:whiteSmoke;border-top:solid #ddd 1px;padding-top:10px;padding-bottom:10px;margin-top:5px}select{padding:2px;font-size:12px;line-height:1.42857143}select,input,textarea{font:inherit}.form-row select,.form-row textarea,.form-row input[type="text"],.form-row input[type="file"],.form-row input[type="password"]{max-width:90%}textarea,input[type="text"],input[type="password"]{font-size:12px;line-height:1.42857143;border:1px solid #aaa;padding:3px}input[type="submit"],button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}input[type="submit"]:focus,button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="submit"]:hover,button:hover,input[type="submit"]:focus,button:focus{color:#333;text-decoration:none}input[type="submit"]:active,button:active,input[type="submit"].active,button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}input[type="submit"].disabled,button.disabled,input[type="submit"][disabled],button[disabled],fieldset[disabled] input[type="submit"],fieldset[disabled] button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}input[type="submit"]:hover,button:hover,input[type="submit"]:focus,button:focus,input[type="submit"]:active,button:active,input[type="submit"].active,button.active,.open .dropdown-toggleinput[type="submit"],.open .dropdown-togglebutton{color:#333;background-color:#dedede;border-color:#a1a1a1}input[type="submit"]:active,button:active,input[type="submit"].active,button.active,.open .dropdown-toggleinput[type="submit"],.open .dropdown-togglebutton{background-image:none}input[type="submit"].disabled,button.disabled,input[type="submit"][disabled],button[disabled],fieldset[disabled] input[type="submit"],fieldset[disabled] button,input[type="submit"].disabled:hover,button.disabled:hover,input[type="submit"][disabled]:hover,button[disabled]:hover,fieldset[disabled] input[type="submit"]:hover,fieldset[disabled] button:hover,input[type="submit"].disabled:focus,button.disabled:focus,input[type="submit"][disabled]:focus,button[disabled]:focus,fieldset[disabled] input[type="submit"]:focus,fieldset[disabled] button:focus,input[type="submit"].disabled:active,button.disabled:active,input[type="submit"][disabled]:active,button[disabled]:active,fieldset[disabled] input[type="submit"]:active,fieldset[disabled] button:active,input[type="submit"].disabled.active,button.disabled.active,input[type="submit"][disabled].active,button[disabled].active,fieldset[disabled] input[type="submit"].active,fieldset[disabled] button.active{background-color:#f2f2f2;border-color:#bfbfbf}input[type="submit"].btn-primary,button.btn-primary{color:#fff;background-color:#5f6990;border-color:#0e0f15}input[type="submit"].btn-primary:hover,button.btn-primary:hover,input[type="submit"].btn-primary:focus,button.btn-primary:focus,input[type="submit"].btn-primary:active,button.btn-primary:active,input[type="submit"].btn-primary.active,button.btn-primary.active,.open .dropdown-toggleinput[type="submit"].btn-primary,.open .dropdown-togglebutton.btn-primary{color:#fff;background-color:#4e5777;border-color:#000}input[type="submit"].btn-primary:active,button.btn-primary:active,input[type="submit"].btn-primary.active,button.btn-primary.active,.open .dropdown-toggleinput[type="submit"].btn-primary,.open .dropdown-togglebutton.btn-primary{background-image:none}input[type="submit"].btn-primary.disabled,button.btn-primary.disabled,input[type="submit"].btn-primary[disabled],button.btn-primary[disabled],fieldset[disabled] input[type="submit"].btn-primary,fieldset[disabled] button.btn-primary,input[type="submit"].btn-primary.disabled:hover,button.btn-primary.disabled:hover,input[type="submit"].btn-primary[disabled]:hover,button.btn-primary[disabled]:hover,fieldset[disabled] input[type="submit"].btn-primary:hover,fieldset[disabled] button.btn-primary:hover,input[type="submit"].btn-primary.disabled:focus,button.btn-primary.disabled:focus,input[type="submit"].btn-primary[disabled]:focus,button.btn-primary[disabled]:focus,fieldset[disabled] input[type="submit"].btn-primary:focus,fieldset[disabled] button.btn-primary:focus,input[type="submit"].btn-primary.disabled:active,button.btn-primary.disabled:active,input[type="submit"].btn-primary[disabled]:active,button.btn-primary[disabled]:active,fieldset[disabled] input[type="submit"].btn-primary:active,fieldset[disabled] button.btn-primary:active,input[type="submit"].btn-primary.disabled.active,button.btn-primary.disabled.active,input[type="submit"].btn-primary[disabled].active,button.btn-primary[disabled].active,fieldset[disabled] input[type="submit"].btn-primary.active,fieldset[disabled] button.btn-primary.active{background-color:#5f6990;border-color:#0e0f15}.search-query{display:inline-block;padding:4px;font-size:12px;line-height:1.42857143;color:#555;border:1px solid #aaa;padding-left:14px !important;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;max-width:auto}.search-query:focus{border-color:rgba(24,132,218,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);outline:0;outline:thin dotted \9}.search-spinner{position:absolute;display:none;right:6px;top:9px}#search-clear-btn{position:absolute;right:6px;top:9px;display:block;font-size:1.4em !important;text-decoration:none;color:#888;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#search-clear-btn:before{content:"\f057"}.errormessagelarge,.warningmessagelarge,.donemessagelarge,.infomessagelarge{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px;min-height:36px;padding-left:52px;background-image:url(error_large.png);background-repeat:no-repeat;background-position:10px 8px}.errormessagelarge h4,.warningmessagelarge h4,.donemessagelarge h4,.infomessagelarge h4{margin-top:0;color:inherit}.errormessagelarge .alert-link,.warningmessagelarge .alert-link,.donemessagelarge .alert-link,.infomessagelarge .alert-link{font-weight:bold}.errormessagelarge>p,.warningmessagelarge>p,.donemessagelarge>p,.infomessagelarge>p,.errormessagelarge>ul,.warningmessagelarge>ul,.donemessagelarge>ul,.infomessagelarge>ul{margin-bottom:0}.errormessagelarge>p+p,.warningmessagelarge>p+p,.donemessagelarge>p+p,.infomessagelarge>p+p{margin-top:5px}.errormessagelarge{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a;padding-left:52px}.errormessagelarge hr{border-top-color:#c4211d}.errormessagelarge .alert-link{color:#000}.warningmessagelarge{background-color:#fae4c5;border-color:#e18c13;color:#1c1306;padding-left:52px;background-image:url(warn_large.png)}.warningmessagelarge hr{border-top-color:#c97d11}.warningmessagelarge .alert-link{color:#000}.donemessagelarge{background-color:#b4eeb4;border-color:#29ad29;color:#010301;padding-left:52px;background-image:url(ok_large.png)}.donemessagelarge hr{border-top-color:#249924}.donemessagelarge .alert-link{color:#000}.infomessagelarge{background-color:#a8e2f3;border-color:#1992b6;color:#000;background-image:url(info_large.png)}.infomessagelarge hr{border-top-color:#16809f}.infomessagelarge .alert-link{color:#000}.screencastBox{padding-left:10px;border-color:#aa6;background-color:#ffc;background-image:none}.errormessage,.warningmessage,.donemessage,.infomessage,.errormessagesmall,.warningmessagesmall,.donemessagesmall,.infomessagesmall{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px;padding:5px;padding-left:25px;min-height:15px;background-image:url(error_small.png);background-repeat:no-repeat;background-position:5px 5px}.errormessage h4,.warningmessage h4,.donemessage h4,.infomessage h4,.errormessagesmall h4,.warningmessagesmall h4,.donemessagesmall h4,.infomessagesmall h4{margin-top:0;color:inherit}.errormessage .alert-link,.warningmessage .alert-link,.donemessage .alert-link,.infomessage .alert-link,.errormessagesmall .alert-link,.warningmessagesmall .alert-link,.donemessagesmall .alert-link,.infomessagesmall .alert-link{font-weight:bold}.errormessage>p,.warningmessage>p,.donemessage>p,.infomessage>p,.errormessagesmall>p,.warningmessagesmall>p,.donemessagesmall>p,.infomessagesmall>p,.errormessage>ul,.warningmessage>ul,.donemessage>ul,.infomessage>ul,.errormessagesmall>ul,.warningmessagesmall>ul,.donemessagesmall>ul,.infomessagesmall>ul{margin-bottom:0}.errormessage>p+p,.warningmessage>p+p,.donemessage>p+p,.infomessage>p+p,.errormessagesmall>p+p,.warningmessagesmall>p+p,.donemessagesmall>p+p,.infomessagesmall>p+p{margin-top:5px}.errormessage,.errormessagesmall{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a}.errormessage hr,.errormessagesmall hr{border-top-color:#c4211d}.errormessage .alert-link,.errormessagesmall .alert-link{color:#000}.warningmessage,.warningmessagesmall{background-color:#fae4c5;border-color:#e18c13;color:#1c1306;background-image:url(warn_small.png)}.warningmessage hr,.warningmessagesmall hr{border-top-color:#c97d11}.warningmessage .alert-link,.warningmessagesmall .alert-link{color:#000}.donemessage,.donemessagesmall{background-color:#b4eeb4;border-color:#29ad29;color:#010301;background-image:url(ok_small.png)}.donemessage hr,.donemessagesmall hr{border-top-color:#249924}.donemessage .alert-link,.donemessagesmall .alert-link{color:#000}.infomessage,.infomessagesmall{background-color:#a8e2f3;border-color:#1992b6;color:#000;background-image:url(info_small.png)}.infomessage hr,.infomessagesmall hr{border-top-color:#16809f}.infomessage .alert-link,.infomessagesmall .alert-link{color:#000}.errormark,.warningmark,.donemark,.infomark,.ok_bgr,.err_bgr{padding-left:20px;min-height:15px;background:url(error_small.png) no-repeat}.warningmark{background-image:url(warn_small.png)}.donemark{background-image:url(ok_small.png)}.infomark,.ok_bgr{background-image:url(info_small.png)}table.simple{font-size:12px;background:#fff;margin:1em;border-collapse:collapse;text-align:left}table.simple th{font-size:14px;font-weight:normal;padding:10px 8px;border-bottom:2px solid #333}table.simple td{padding:10px 8px 0 8px}table.simple tbody tr:hover td{color:#333}table.tabletip{width:100%;border-collapse:collapse;text-align:left}table.tabletip th{white-space:nowrap;border-bottom:1px solid #444;padding-right:3px}table.tabletip td{border-bottom:1px solid #ddd}table.tabletip tbody tr:hover td{background-color:#eee}table.colored{border-top:solid #d6b161 1px;border-bottom:solid #d6b161 1px}table.colored td,table.colored th{text-align:left;padding:5px;line-height:1.42857143}table.colored tr.header{background:#ebd9b2;color:#000;background-repeat:repeat-x;background-position:top;border-bottom:solid #d6b161 1px;font-weight:bold}table.colored tr{background:#fff}table.colored tr.odd_row{background:#f9f9f9}div.debug{margin:10px;padding:5px;background:#ff9;border:solid #ff3 1px;color:black}.grid-header{padding-bottom:1em}.grid-header h2{margin:0;margin-bottom:.5em}.grid-header .title{font-weight:bold}.grid,.ui-table,.ui-table-plain{padding-top:1em;border-collapse:collapse;width:100%}.grid tbody td,.ui-table tbody td,.ui-table-plain tbody td{line-height:1.42857143;border-top:solid #ddd 1px;border-bottom:solid #ddd 1px;padding:5px}.grid tbody td:empty{padding:0}.grid thead tr{height:2em}.grid thead th{line-height:1.42857143;background:#ebd9b2;color:#000;border-top:solid #d6b161 1px;border-bottom:solid #d6b161 1px;padding:5px;text-align:left;white-space:nowrap}.grid tfoot td{background-color:#f8f8f8;border-top:solid #ddd 1px;border-bottom:solid #ddd 1px;padding:5px}.grid .current{background-color:#eef}.count-box{min-width:1.1em;padding:5px;border-width:1px;border-style:solid;text-align:center;display:inline-block}.text-filter-val{border:solid 1px #aaa;padding:1px 2px 1px 3px;margin-right:5px;-moz-border-radius:.5em;-webkit-border-radius:.5em;font-style:italic}.page-link a,.inactive-link{padding:0 7px 0 7px;color:#555}.inactive-link,.current-filter{font-weight:bold;color:#000}.submit-image{background:url(../images/fugue/magnifier-left.png) no-repeat center transparent;background-color:#eee;width:9.42857143;height:9.42857143;cursor:pointer;margin:0;padding:0;border:1px solid #aaa;border-left:none}#advanced-search td{padding:3px}#advanced-search table{border-collapse:separate}.delete-search-icon{background:url(../images/delete_tag_icon_gray.png) center no-repeat;display:inline-block;width:10px;cursor:pointer;height:18px;vertical-align:middle;margin-left:2px}.search-box-input{border:0;float:left;outline:medium none;font-style:italic;font-size:inherit}.search-box{vertical-align:bottom;display:inline-block;padding:0;white-space:nowrap}.gray-background{background-color:#ddd}.loading-elt-overlay{background-color:white;opacity:.5;width:100%;height:100%;z-index:14000;position:fixed;display:none}div.odd_row{background:#f9f9f9}#footer{display:none}span.toolParameterExpandableCollapsable{font-weight:bold;cursor:pointer}ul.toolParameterExpandableCollapsable{list-style:none}ul.manage-table-actions{float:right;margin-top:-2.5em}ul.manage-table-actions li{display:block;float:left;margin-left:.5em}.state-color-new{border-color:#bfbfbf;background:#eee}.state-color-upload{border-color:#1992b6;background:#a8e2f3}.state-color-waiting{border-color:#bfbfbf;background:#eee}.state-color-queued{border-color:#bfbfbf;background:#eee}.state-color-running{border-color:#aa6;background:#ffc}.state-color-ok{border-color:#29ad29;background:#b4eeb4}.state-color-error{border-color:#da2520;background:#f8cfce}.state-color-deleted{border-color:#306;background:#39f}.state-fg-new{color:#ffb030}.state-fg-upload{color:#d090d0}.state-fg-waiting{color:#e8c060}.state-fg-queued{color:#888}.state-fg-running{color:#aa6}.state-fg-ok{color:#6a6}.state-fg-error{color:#a66}.state-fg-deleted{color:#39f}button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}button:hover,button:focus{color:#333;text-decoration:none}button:active,button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}button.disabled,button[disabled],fieldset[disabled] button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}button:hover,button:focus,button:active,button.active,.open .dropdown-togglebutton{color:#333;background-color:#dedede;border-color:#a1a1a1}button:active,button.active,.open .dropdown-togglebutton{background-image:none}button.disabled,button[disabled],fieldset[disabled] button,button.disabled:hover,button[disabled]:hover,fieldset[disabled] button:hover,button.disabled:focus,button[disabled]:focus,fieldset[disabled] button:focus,button.disabled:active,button[disabled]:active,fieldset[disabled] button:active,button.disabled.active,button[disabled].active,fieldset[disabled] button.active{background-color:#f2f2f2;border-color:#bfbfbf}.action-button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}.action-button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.action-button:hover,.action-button:focus{color:#333;text-decoration:none}.action-button:active,.action-button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.action-button.disabled,.action-button[disabled],fieldset[disabled] .action-button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.action-button:hover,.action-button:focus,.action-button:active,.action-button.active,.open .dropdown-toggle.action-button{color:#333;background-color:#dedede;border-color:#a1a1a1}.action-button:active,.action-button.active,.open .dropdown-toggle.action-button{background-image:none}.action-button.disabled,.action-button[disabled],fieldset[disabled] .action-button,.action-button.disabled:hover,.action-button[disabled]:hover,fieldset[disabled] .action-button:hover,.action-button.disabled:focus,.action-button[disabled]:focus,fieldset[disabled] .action-button:focus,.action-button.disabled:active,.action-button[disabled]:active,fieldset[disabled] .action-button:active,.action-button.disabled.active,.action-button[disabled].active,fieldset[disabled] .action-button.active{background-color:#f2f2f2;border-color:#bfbfbf}a.action-button{color:#333;text-decoration:none}.action-button>img{vertical-align:middle}.action-button:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton{padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;border:1px solid transparent;border-radius:3px;white-space:nowrap;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf;display:inline-block;cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.menubutton:hover,.menubutton:focus{color:#333;text-decoration:none}.menubutton:active,.menubutton.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton.disabled,.menubutton[disabled],fieldset[disabled] .menubutton{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.menubutton:hover,.menubutton:focus,.menubutton:active,.menubutton.active,.open .dropdown-toggle.menubutton{color:#333;background-color:#dedede;border-color:#a1a1a1}.menubutton:active,.menubutton.active,.open .dropdown-toggle.menubutton{background-image:none}.menubutton.disabled,.menubutton[disabled],fieldset[disabled] .menubutton,.menubutton.disabled:hover,.menubutton[disabled]:hover,fieldset[disabled] .menubutton:hover,.menubutton.disabled:focus,.menubutton[disabled]:focus,fieldset[disabled] .menubutton:focus,.menubutton.disabled:active,.menubutton[disabled]:active,fieldset[disabled] .menubutton:active,.menubutton.disabled.active,.menubutton[disabled].active,fieldset[disabled] .menubutton.active{background-color:#f2f2f2;border-color:#bfbfbf}.menubutton:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.menubutton a{text-decoration:none}.menubutton .label,.menubutton>label{position:relative;display:inline-block;border-right:none;text-decoration:none;text-align:left;max-height:2.85714286;line-height:1.42857143;overflow:hidden;text-overflow:ellipsis}.menubutton.popup .label{border-right:solid #bfbfbf 1px;padding-right:6px}.menubutton.popup,.menubutton.popup.split{padding-right:18px}.menubutton.popup:after,.menubutton.popup.split:after{top:45%;position:absolute;right:6px;display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:""}.btn-default .menubutton.popup:after,.btn-default .menubutton.popup.split:after{border-top-color:#333}.btn-primary .menubutton.popup:after,.btn-primary .menubutton.popup.split:after,.btn-success .menubutton.popup:after,.btn-success .menubutton.popup.split:after,.btn-warning .menubutton.popup:after,.btn-warning .menubutton.popup.split:after,.btn-danger .menubutton.popup:after,.btn-danger .menubutton.popup.split:after,.btn-info .menubutton.popup:after,.btn-info .menubutton.popup.split:after{border-top-color:#fff}div.popmenu-wrapper{position:absolute;top:100%;z-index:20000}div.popmenu-wrapper ul.dropdown-menu{display:block;position:relative;float:none}ul.dropdown-menu a{text-decoration:none}ul.dropdown-menu li.head>a{text-shadow:0 1px 0 rgba(255,255,255,0.5);font-size:11px;font-weight:bold;line-height:1.42857143;color:#999;text-transform:uppercase}ul.dropdown-menu li.head>a:hover{background:inherit;border-color:transparent}.popup-arrow{cursor:pointer;text-decoration:none;color:#555}.popup-arrow:hover{color:black}div.permissionContainer{padding-left:20px}.text-content hr{display:block;background:black;color:black;width:100%;height:1px;border:none;background:#aaa;color:#aaa}.text-content table{border-collapse:collapse;border-top:1px solid #ccc;border-left:1px solid #ccc}.text-content blockquote{color:#666}.text-content fieldset{border-color:#ccc;border:1px solid #ccc}.text-content th,.text-content td{border-bottom:1px solid #ddd;border-right:1px solid #ccc}.text-content th,.text-content td{padding:.8em}.icon-button{width:16px;height:16px;display:block;float:left;margin-left:2px;text-indent:20px;background-repeat:no-repeat;background-position:0 0;padding:0}.fa-icon-button{text-align:center;text-decoration:none;display:inline-block;cursor:pointer;width:16px;height:16px;line-height:8px}.fa-icon-button:hover{color:maroon;-webkit-transition:color .25s linear;transition:color .25s linear}.editable-text{cursor:pointer}.editable-text:hover{cursor:text;border:dotted #999 1px}.icon-button.multiinput{background:url(../images/documents-stack.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.icon-button.multiinput.disabled{background:url(../images/documents-stack-faded.png) no-repeat;cursor:pointer}.icon-button.link{background:url(../images/silk/link.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.icon-button.link-broken{background:url(../images/silk/link_break.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.workflow-invocation-complete{border:solid 1px #6a6;border-left-width:5px;margin:10px 0;padding-left:5px}.icon-btn,.ui-button-icon,.ui-button-icon-plain{display:inline-block;height:22px;width:22px;text-align:center;line-height:19px;font-size:1.2em;border-radius:3px;border:1px solid #bfbfbf;background-color:#f2f2f2;color:#333;cursor:pointer}.icon-btn:focus,.icon-btn:hover{outline:0;background-color:white;color:maroon}.icon-btn.disabled{background-color:transparent;color:#bbb;border-color:#bbb}.icon-btn-group{display:inline-block}.icon-btn-group .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.icon-btn-group .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.icon-btn-group .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.icon-btn-group .icon-btn:only-child{margin:0;border-radius:3px}.list-item{border:1px solid #bfbfbf}.list-item .vertical-spacing{margin-bottom:8px}.list-item .info-section{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px}.list-item .padded{padding:6px 10px 6px 8px}.list-item .warnings:not(:empty){padding-top:4px}.list-item .warnings [class$=messagesmall]{margin:6px 10px 2px 8px;font-size:90%}.list-item .warnings [class$=messagesmall]:first-child{margin-top:0}.list-item .warnings [class$=messagesmall]:last-child{margin-bottom:0}.list-item .help-text{font-weight:normal;color:#555}.list-item .selector{float:left;display:none;width:32px;height:32px;margin:0 0 -6px 0;padding:8px 0 2px 7px;font-size:80%;color:#333;cursor:pointer;vertical-align:middle}.list-item .selector:hover{color:maroon}.list-item .title-bar{cursor:pointer;outline:none;padding:6px 10px 6px 8px}.list-item .title-bar .title{display:inline;font-weight:bold;text-decoration:underline;word-wrap:break-word;word-break:break-all;line-height:16px}.list-item .title-bar .subtitle{color:#777;font-size:90%}.list-item .title-bar .subtitle a{color:inherit}.list-item .primary-actions{display:inline-block;float:right;margin:6px 10px 0}.list-item .primary-actions .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.list-item .primary-actions .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.list-item .primary-actions .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.list-item .primary-actions .icon-btn:only-child{margin:0;border-radius:3px}.list-item .primary-actions .icon-btn{margin-left:2px}.list-item .details{display:none;padding:0 10px 6px 8px}.list-item .details>[class$=messagesmall]{margin:0 0 8px 0}.list-item .details label{margin:0;padding:0;font-weight:normal}.list-item .details .prompt{font-weight:normal;color:#555}.list-item .details .prompt:after{content:':';margin-right:4px}.list-panel .vertical-spacing{margin-bottom:8px}.list-panel .controls>*:not(:empty){margin-bottom:8px}.list-panel .controls .name{word-wrap:break-word;font-weight:bold}.list-panel .controls .name input{width:100%;margin:-3px 0 -3px -3px;font-weight:bold}.list-panel .controls .subtitle{color:#777;font-size:90%}.list-panel .controls .subtitle a{color:inherit}.list-panel .controls .editable-text{border:solid transparent 1px}.list-panel .controls .editable-text:hover{cursor:pointer;border:1px dotted #999}.list-panel .controls .actions{display:inline-block;float:right}.list-panel .controls .actions .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.list-panel .controls .actions .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.list-panel .controls .actions .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.list-panel .controls .actions .icon-btn:only-child{margin:0;border-radius:3px}.list-panel .controls .actions .icon-btn{margin-left:2px}.list-panel .controls .messages:before,.list-panel .controls .messages:after{content:" ";display:table}.list-panel .controls .messages:after{clear:both}.list-panel .controls .messages:before,.list-panel .controls .messages:after{content:" ";display:table}.list-panel .controls .messages:after{clear:both}.list-panel .controls .messages [class$=message],.list-panel .controls .messages [class$=messagesmall]{margin:0}.list-panel .controls .messages [class$=message]:not(:last-child),.list-panel .controls .messages [class$=messagesmall]:not(:last-child){margin-bottom:8px}.list-panel .controls .list-actions{display:none}.list-panel .controls .list-actions:before,.list-panel .controls .list-actions:after{content:" ";display:table}.list-panel .controls .list-actions:after{clear:both}.list-panel .controls .list-actions:before,.list-panel .controls .list-actions:after{content:" ";display:table}.list-panel .controls .list-actions:after{clear:both}.list-panel .controls .list-actions .btn{padding-top:2px;padding-bottom:2px;font-size:90%}.list-panel .controls .list-actions .list-action-menu{float:right}.list-panel .list-items .list-item{border-width:1px 0 1px 0}.list-panel .list-items .list-item:not(:last-child){border-bottom-width:0}.list-panel .empty-message{display:none;margin:0}.list-item .details .list-panel{margin-top:8px;border-radius:3px;background:white;padding:4px}.list-item .details .list-panel .list-items{border:1px solid #bfbfbf;border-radius:3px}.list-item .details .list-panel .list-items .list-item:first-child{border-top-width:0;border-radius:3px 3px 0 0}.list-item .details .list-panel .list-items .list-item:last-child{border-bottom-width:0;border-radius:0 0 3px 3px}.history-panel-header .panel-header-button{display:inline-block;height:22px;width:22px;text-align:center;line-height:19px;font-size:1.2em;padding:0}.state-icon{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;margin-right:4px;vertical-align:middle;width:16px;height:16px;line-height:16px;text-align:center;font-size:16px}.state-icon-running{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.state-icon-running:before{content:"\f110"}.state-icon-upload{overflow:hidden}.state-icon-upload:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.state-icon-error{background-color:white;border-radius:8px}.state-icon-error:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.has-job-state-mixin.state-ok,.has-job-state-mixin.state-failed_metadata{background:#b4eeb4}.has-job-state-mixin.state-ok .state-icon,.has-job-state-mixin.state-failed_metadata .state-icon{display:none}.has-job-state-mixin.state-error,.has-job-state-mixin.state-empty{background:#f8cfce}.has-job-state-mixin.state-error .state-icon,.has-job-state-mixin.state-empty .state-icon{background-color:white;border-radius:8px}.has-job-state-mixin.state-error .state-icon:before,.has-job-state-mixin.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.has-job-state-mixin.state-upload{background:#a8e2f3}.has-job-state-mixin.state-upload .state-icon{overflow:hidden}.has-job-state-mixin.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.has-job-state-mixin.state-queued{background:#eee}.has-job-state-mixin.state-queued .state-icon:before{content:"\f017"}.has-job-state-mixin.state-running,.has-job-state-mixin.state-setting_metadata{background:#ffc}.has-job-state-mixin.state-running .state-icon,.has-job-state-mixin.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.has-job-state-mixin.state-running .state-icon:before,.has-job-state-mixin.state-setting_metadata .state-icon:before{content:"\f110"}.has-job-state-mixin.state-paused{background:#d9edf7}.has-job-state-mixin.state-paused .state-icon:before{content:"\f04c"}.has-job-state-mixin.state-discarded{background:#eee}.has-job-state-mixin.state-discarded .state-icon:before{content:"\f014"}.has-job-state-mixin.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.has-job-state-mixin.state-noPermission .state-icon{font-size:20px}.has-job-state-mixin.state-noPermission .state-icon:before{content:"\f023"}.has-job-state-mixin.state-new{background:#eee}.has-job-state-mixin.state-new .state-icon:before{content:"\f06a"}.dataset.state-ok,.dataset.state-failed_metadata{background:#b4eeb4}.dataset.state-ok .state-icon,.dataset.state-failed_metadata .state-icon{display:none}.dataset.state-error,.dataset.state-empty{background:#f8cfce}.dataset.state-error .state-icon,.dataset.state-empty .state-icon{background-color:white;border-radius:8px}.dataset.state-error .state-icon:before,.dataset.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.dataset.state-upload{background:#a8e2f3}.dataset.state-upload .state-icon{overflow:hidden}.dataset.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.dataset.state-queued{background:#eee}.dataset.state-queued .state-icon:before{content:"\f017"}.dataset.state-running,.dataset.state-setting_metadata{background:#ffc}.dataset.state-running .state-icon,.dataset.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.dataset.state-running .state-icon:before,.dataset.state-setting_metadata .state-icon:before{content:"\f110"}.dataset.state-paused{background:#d9edf7}.dataset.state-paused .state-icon:before{content:"\f04c"}.dataset.state-discarded{background:#eee}.dataset.state-discarded .state-icon:before{content:"\f014"}.dataset.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.dataset.state-noPermission .state-icon{font-size:20px}.dataset.state-noPermission .state-icon:before{content:"\f023"}.dataset.state-new{background:#eee}.dataset.state-new .state-icon:before{content:"\f06a"}.dataset .details .summary{margin-bottom:8px}.dataset .details .summary .blurb{margin-bottom:2px}.dataset .details .summary .datatype,.dataset .details .summary .dbkey{display:inline}.dataset .details .summary .datatype .value,.dataset .details .summary .dbkey .value{font-weight:bold}.dataset .details .summary .datatype .value:after{content:',';font-weight:normal;color:#555;margin-right:4px}.dataset .details .summary .dbkey:after{content:' ';display:block;margin-bottom:8px}.dataset .details .summary .info{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;overflow:auto}.dataset .details .summary .info .value{white-space:pre-line}.dataset .details .summary .job-error-text{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;overflow:auto;white-space:pre}.dataset .details .actions .metafile-dropdown{display:inline-block}.dataset .details .actions .visualizations-dropdown{display:inline-block}.dataset .details .actions .left{display:inline-block;float:left}.dataset .details .actions .left .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.dataset .details .actions .left .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.dataset .details .actions .left .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.dataset .details .actions .left .icon-btn:only-child{margin:0;border-radius:3px}.dataset .details .actions .left .icon-btn{margin-right:2px}.dataset .details .actions .left .icon-btn.visualization-btn{margin-left:0;border-radius:0 3px 3px 0;border-right:1px solid #bfbfbf}.dataset .details .actions .right{display:inline-block;float:right}.dataset .details .actions .right .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.dataset .details .actions .right .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.dataset .details .actions .right .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.dataset .details .actions .right .icon-btn:only-child{margin:0;border-radius:3px}.dataset .details .actions .right .icon-btn{margin-left:2px}.dataset .details .actions:not(:last-child){margin-bottom:8px}.dataset .details .tags-display{display:none;margin-bottom:8px}.dataset .details .tags-display .select2-container{min-width:0}.dataset .details .tags-display .select2-container .select2-choices{border-radius:3px}.dataset .details .annotation-display{display:none;margin-bottom:8px}.dataset .details .annotation-display .annotation{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;white-space:pre-wrap;overflow:auto}.dataset .details .annotation-display .annotation:empty:after{position:relative;top:-4px;font-size:10px;font-style:italic;color:grey;content:'Click here to edit annotation'}.dataset .details .annotation-display textarea{margin:0 0 2px 0;display:block;border-radius:3px;width:100%}.dataset .details .display-applications .display-application:last-child{margin-bottom:8px}.dataset .details .dataset-peek{margin-bottom:8px;width:100%;margin:0;border-radius:3px;background:white;color:black;font-size:10px;overflow:auto}.dataset .details .dataset-peek th{color:white;background:#5f6990}.dataset .details .dataset-peek table,.dataset .details .dataset-peek th,.dataset .details .dataset-peek tr,.dataset .details .dataset-peek td{font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:10px}.history-content.dataset .title-bar .title .hid:after,.history-content.dataset-collection .title-bar .title .hid:after{content:':'}.history-panel>.controls{margin:10px 10px 0 10px;padding:0}.history-panel>.controls .messages{margin-bottom:0}.history-panel>.controls .messages>*{cursor:pointer}.history-panel>.controls .messages>*:last-child{margin-bottom:8px}.history-panel>.controls .title{margin-bottom:4px}.history-panel>.controls .title input{width:100%;margin:-3px 0 -3px -3px;font-weight:bold}.history-panel>.controls .subtitle:not(:empty){margin-top:-4px;margin-bottom:6px}.history-panel>.controls .history-size{display:inline-block;margin-top:4px;color:black}.history-panel>.controls .actions{margin-bottom:0}.history-panel>.controls .quota-message{display:none;margin:8px 0 5px 0}.history-panel>.controls .tags-display,.history-panel>.controls .annotation-display{display:none;margin-bottom:8px}.history-panel>.controls .tags-display label,.history-panel>.controls .annotation-display label{display:block;margin:0;padding:0;font-weight:normal;color:#555}.history-panel>.controls .tags-display label:after,.history-panel>.controls .annotation-display label:after{content:':'}.history-panel>.controls .tags-display .select2-container{min-width:0}.history-panel>.controls .tags-display .select2-container .select2-choices{border-radius:3px}.history-panel>.controls .tags-display input{border-radius:3px}.history-panel>.controls .annotation-display .annotation{border-radius:3px;border:1px solid rgba(153,153,153,0.5);padding:4px;white-space:pre-wrap;overflow:auto}.history-panel>.controls .annotation-display .annotation:empty:after{position:relative;top:-4px;font-size:10px;font-style:italic;color:grey;content:'Click here to edit annotation'}.history-panel>.controls .annotation-display textarea{margin:0 0 2px 0;border-radius:3px;width:100%}.history-panel .list-item.history-content{border-width:1px 0 0 0}.history-panel .list-item.history-content:last-child{border-width:1px 0 1px 0}.history-panel .empty-message{margin:0 10px 0 10px}.history-panel .dataset-collection .subtitle{margin-top:2px}.annotated-history-panel>.controls{margin:0}.annotated-history-panel>.controls .name{font-size:150%;margin-bottom:4px}.annotated-history-panel>.controls .subtitle{color:black}.annotated-history-panel>.controls .subtitle:not(:empty){margin:0 0 0 4px}.annotated-history-panel>.controls .messages:not(:empty){margin-top:16px}.annotated-history-panel>.controls .annotation-display{display:block;border:1px solid lightgrey;border-width:1px 0 0 0;padding:4px 0 4px 0;margin:4px 4px 0 4px;white-space:pre-wrap}.annotated-history-panel>.controls .annotation-display:empty{display:none}.annotated-history-panel>.controls .search{padding:16px 0 0 0;margin-bottom:0}.annotated-history-panel table.list-items{width:100%;table-layout:fixed}.annotated-history-panel table.list-items .headers{border-bottom:2px solid grey}.annotated-history-panel table.list-items .headers th{padding:8px}.annotated-history-panel table.list-items>tbody>tr{cursor:pointer;border-bottom:1px solid grey}.annotated-history-panel table.list-items>tbody>tr>td{margin:0;padding:0;vertical-align:top}.annotated-history-panel table.list-items>tbody>tr>td:nth-child(1){width:50%}.annotated-history-panel table.list-items>tbody>tr>td:nth-child(2){padding:8px 16px 8px 16px;white-space:pre-wrap}.annotated-history-panel table.list-items>tbody>tr>td>.list-item{border:0}.annotated-history-panel .empty-message{margin-top:8px}.current-history-panel .list-item.history-content.current-content{border-left:5px solid #4e5777}.multi-panel-history{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.multi-panel-history .flex-row-container,.multi-panel-history .flex-column-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;min-height:0;-webkit-align-items:stretch;-ms-align-items:stretch;align-items:stretch;-webkit-align-content:stretch;-ms-align-content:stretch;align-content:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.multi-panel-history .flex-row-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.multi-panel-history .flex-column-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.multi-panel-history .flex-row,.multi-panel-history .flex-column{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.multi-panel-history .header,.multi-panel-history .footer{width:100%;background-color:lightgrey}.multi-panel-history .header .btn,.multi-panel-history .footer .btn{height:21px}.multi-panel-history .header{min-height:29px;max-height:29px}.multi-panel-history .header .more-options .btn{height:26px}.multi-panel-history .header .more-options input[type=checkbox]{margin-top:1px}.multi-panel-history .footer{min-height:0;max-height:0}.multi-panel-history .smaller-btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .control-column{margin-top:4px}.multi-panel-history .control-column .btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .control-column .search-control{display:inline-block;width:40%}.multi-panel-history .control-column .search-control .search-clear,.multi-panel-history .control-column .search-control .search-loading{margin-top:-22px}.multi-panel-history .control-column input.search-query{font-size:90%;height:21px;line-height:normal;padding:2px 2px 1px 2px}.multi-panel-history .control-column .open-more-options{padding:2px 6px 2px 6px;font-size:100%}.multi-panel-history .control-column .header-info{display:inline-block;padding:2px 4px 2px 4px;color:grey}.multi-panel-history .control-column.control-column-right,.multi-panel-history .control-column.control-column-left{margin-right:8px;margin-left:8px}.multi-panel-history .control-column.control-column-right>*,.multi-panel-history .control-column.control-column-left>*{margin:0 4px 4px 0}.multi-panel-history .control-column.control-column-center{text-align:center;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-height:22px}.multi-panel-history .control-column.control-column-right{text-align:right}.multi-panel-history .outer-middle{overflow:auto}.multi-panel-history .middle{min-width:100%;margin:0 0 0 0;background-color:white;padding:8px}.multi-panel-history .history-column{width:312px;margin:0 8px 0 0}.multi-panel-history .history-column:first-child{position:fixed;z-index:10}.multi-panel-history .history-column:first-child .history-panel{border:1px solid black;box-shadow:4px 4px 4px rgba(96,96,96,0.3)}.multi-panel-history .history-column:nth-child(2){margin-left:320px}.multi-panel-history .history-column:last-child{margin-right:0}.multi-panel-history .history-column .dropdown-menu{z-index:inherit}.multi-panel-history .history-column .panel-controls{width:100%;height:24px;border-radius:3px;background-color:white;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.multi-panel-history .history-column .panel-controls .btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .history-column .panel-controls .pull-left .btn{margin-right:4px}.multi-panel-history .history-column .panel-controls .pull-right .btn{margin-left:4px}.multi-panel-history .history-column .panel-controls .panel-menu{z-index:1}.multi-panel-history .history-column .panel-controls .panel-menu .dropdown-menu a{text-align:left}.multi-panel-history .history-column .panel-controls .current-label{display:inline-block;color:grey;padding-left:2px;margin-top:2px}.multi-panel-history .history-column .history-panel{width:100%;border:1px solid grey;border-radius:3px;background-color:#dfe5f9;overflow:auto}body.historyPage{background:#dfe5f9;color:#000;margin:5px;border:0;padding:0}div.historyLinks{margin:5px 5px}div.historyItem{margin:0 -5px;padding:8px 10px;border-top:solid #bfbfbf 1px;border-right:none;word-wrap:break-word;background:#eee}div.historyItem .state-icon{display:inline-block;vertical-align:middle;width:16px;height:16px;background-position:0 1px;background-repeat:no-repeat}div.historyItem .historyItemTitle{font-weight:bold;line-height:16px}.historyItemContainer:last-child div.historyItem{border-bottom:solid #bfbfbf 1px}div.historyItem div.historyItem{margin-right:-11px}div.historyItem-ok,div.historyItem-failed_metadata{background:#b4eeb4}div.historyItem-ok .state-icon,div.historyItem-failed_metadata .state-icon{display:none}div.historyItem-error{background:#f8cfce}div.historyItem-error .state-icon{background-image:url(sprite-history-states.png);background-position:-15px 0;width:15px;height:15px}div.historyItem-empty{background:#f8cfce}div.historyItem-empty .state-icon{background-image:url(sprite-history-states.png);background-position:0 0;width:15px;height:15px}div.historyItem-running{background:#ffc}div.historyItem-running .state-icon{background-image:url(data_running.gif)}div.historyItem-setting_metadata{background:#ffc}div.historyItem-setting_metadata .state-icon{background-image:url(data_running.gif)}div.historyItem-upload{background:#a8e2f3}div.historyItem-upload .state-icon{background-image:url(data_upload.gif)}div.historyItem-queued{background:#eee}div.historyItem-queued .state-icon{background-image:url(sprite-history-states.png);background-position:-15px -15px;width:15px;height:15px}div.historyItem-noPermission{filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}div.historyItem-noPermission .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-noPermission .state-icon:before{content:"\f05e"}div.historyItem-paused{background:#d9edf7}div.historyItem-paused .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-paused .state-icon:before{content:"\f04c"}div.historyItem-new .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-new .state-icon:before{content:"\f071"}div.historyItemTitleBar.spinner .state-icon{background:url(data_running.gif) 0 1px no-repeat !important}div.historyItemButtons{float:right}div.historyItemButtons .icon-button.display{background-image:url(sprite-history-buttons.png);background-position:-16px -16px;width:16px;height:16px}div.historyItemButtons .icon-button.display:hover{background-image:url(sprite-history-buttons.png);background-position:-32px 0;width:16px;height:16px}div.historyItemButtons .icon-button.display_disabled{background-image:url(sprite-history-buttons.png);background-position:-32px -16px;width:16px;height:16px}div.historyItemButtons .icon-button.delete{background-image:url(sprite-history-buttons.png);background-position:0 0;width:16px;height:16px}div.historyItemButtons .icon-button.delete:hover{background-image:url(sprite-history-buttons.png);background-position:-16px 0;width:16px;height:16px}div.historyItemButtons .icon-button.delete_disabled{background-image:url(sprite-history-buttons.png);background-position:0 -16px;width:16px;height:16px}div.historyItemButtons .icon-button.edit{background-image:url(sprite-history-buttons.png);background-position:0 -32px;width:16px;height:16px}div.historyItemButtons .icon-button.edit:hover{background-image:url(sprite-history-buttons.png);background-position:-16px -32px;width:16px;height:16px}div.historyItemButtons .icon-button.edit_disabled{background-image:url(sprite-history-buttons.png);background-position:-32px -32px;width:16px;height:16px}div.historyItemBody div{padding-top:2px}pre.peek{background:white;color:black;width:100%;font-size:10px;overflow:auto}pre.peek th{color:white;background:#5f6990}pre.peek table,pre.peek th,pre.peek tr,pre.peek td{font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:10px}.dataset-collection-element.state-ok,.dataset-collection-element.state-failed_metadata{background:#b4eeb4}.dataset-collection-element.state-ok .state-icon,.dataset-collection-element.state-failed_metadata .state-icon{display:none}.dataset-collection-element.state-error,.dataset-collection-element.state-empty{background:#f8cfce}.dataset-collection-element.state-error .state-icon,.dataset-collection-element.state-empty .state-icon{background-color:white;border-radius:8px}.dataset-collection-element.state-error .state-icon:before,.dataset-collection-element.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.dataset-collection-element.state-upload{background:#a8e2f3}.dataset-collection-element.state-upload .state-icon{overflow:hidden}.dataset-collection-element.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.dataset-collection-element.state-queued{background:#eee}.dataset-collection-element.state-queued .state-icon:before{content:"\f017"}.dataset-collection-element.state-running,.dataset-collection-element.state-setting_metadata{background:#ffc}.dataset-collection-element.state-running .state-icon,.dataset-collection-element.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.dataset-collection-element.state-running .state-icon:before,.dataset-collection-element.state-setting_metadata .state-icon:before{content:"\f110"}.dataset-collection-element.state-paused{background:#d9edf7}.dataset-collection-element.state-paused .state-icon:before{content:"\f04c"}.dataset-collection-element.state-discarded{background:#eee}.dataset-collection-element.state-discarded .state-icon:before{content:"\f014"}.dataset-collection-element.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.dataset-collection-element.state-noPermission .state-icon{font-size:20px}.dataset-collection-element.state-noPermission .state-icon:before{content:"\f023"}.dataset-collection-element.state-new{background:#eee}.dataset-collection-element.state-new .state-icon:before{content:"\f06a"}.dataset-collection-element .title-bar .subtitle{margin-top:2px}.dataset-collection-element .details{display:none}.history-content.dataset-collection.state-ok,.history-content.dataset-collection.state-failed_metadata{background:#b4eeb4}.history-content.dataset-collection.state-ok .state-icon,.history-content.dataset-collection.state-failed_metadata .state-icon{display:none}.history-content.dataset-collection.state-error,.history-content.dataset-collection.state-empty{background:#f8cfce}.history-content.dataset-collection.state-error .state-icon,.history-content.dataset-collection.state-empty .state-icon{background-color:white;border-radius:8px}.history-content.dataset-collection.state-error .state-icon:before,.history-content.dataset-collection.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.history-content.dataset-collection.state-upload{background:#a8e2f3}.history-content.dataset-collection.state-upload .state-icon{overflow:hidden}.history-content.dataset-collection.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.history-content.dataset-collection.state-queued{background:#eee}.history-content.dataset-collection.state-queued .state-icon:before{content:"\f017"}.history-content.dataset-collection.state-running,.history-content.dataset-collection.state-setting_metadata{background:#ffc}.history-content.dataset-collection.state-running .state-icon,.history-content.dataset-collection.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.history-content.dataset-collection.state-running .state-icon:before,.history-content.dataset-collection.state-setting_metadata .state-icon:before{content:"\f110"}.history-content.dataset-collection.state-paused{background:#d9edf7}.history-content.dataset-collection.state-paused .state-icon:before{content:"\f04c"}.history-content.dataset-collection.state-discarded{background:#eee}.history-content.dataset-collection.state-discarded .state-icon:before{content:"\f014"}.history-content.dataset-collection.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.history-content.dataset-collection.state-noPermission .state-icon{font-size:20px}.history-content.dataset-collection.state-noPermission .state-icon:before{content:"\f023"}.history-content.dataset-collection.state-new{background:#eee}.history-content.dataset-collection.state-new .state-icon:before{content:"\f06a"}.dataset-collection-panel{margin:0;padding:0}.dataset-collection-panel .vertically-spaced{margin-top:4px}.dataset-collection-panel .controls{padding:8px}.dataset-collection-panel .controls .navigation{margin-top:4px}.dataset-collection-panel .controls .navigation .back .fa-icon{margin-right:4px;font-size:120%;font-weight:bold;text-decoration:none}.dataset-collection-panel .controls .title{margin-top:12px}.dataset-collection-panel .controls .title .name{font-weight:bold}.dataset-collection-panel .list-items .dataset-collection-element{border-width:1px 0 0 0}.dataset-collection-panel .list-items .dataset-collection-element:last-child{border-bottom-width:1px}.job.list-item{border:1px solid #bfbfbf}.job.list-item .title-bar .subtitle{color:grey;font-size:80%}.job.list-item>.details{padding:0}.job.list-item>.details .params{padding:0 8px 0 8px}.job.list-item>.details .params .param .prompt,.job.list-item>.details .params .input .prompt{font-size:80%;color:grey}.job.list-item>.details .params .param .value,.job.list-item>.details .params .input .value{display:inline-block;font-weight:bold}.job.list-item>.details .list-panel{padding:0}.job.list-item>.details .list-panel .list-items{border:0;border-radius:0}.job.list-item>.details .list-panel .list-items .list-item{border:0;border-radius:0;border-top:1px solid #bfbfbf}.collection-creator{height:100%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.collection-creator ol,.collection-creator li{list-style:none;padding:0;margin:0}.collection-creator>*:not(.popover){padding:0 8px 0 8px}.collection-creator .btn{border-color:#bfbfbf}.collection-creator .vertically-spaced{margin-top:8px}.collection-creator .scroll-container{overflow:auto}.collection-creator .truncate{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.collection-creator .empty-message{color:grey;font-style:italic}.collection-creator.flex-row-container,.collection-creator .flex-row-container,.collection-creator .flex-column-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-ms-align-items:stretch;align-items:stretch;-webkit-align-content:stretch;-ms-align-content:stretch;align-content:stretch}.collection-creator.flex-row-container,.collection-creator .flex-row-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.collection-creator .flex-row{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 0 auto}.collection-creator .flex-row.no-flex{-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 0 auto}.collection-creator .flex-column-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.collection-creator .flex-column{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 1 auto}.collection-creator .flex-column.no-flex{-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 0 auto}.collection-creator .choose-filters .help{margin-bottom:2px;font-size:90%;color:grey}.collection-creator .choose-filters button{width:100%;margin-top:2px}.collection-creator .header .alert{display:none}.collection-creator .header .alert li{list-style:circle;margin-left:32px}.collection-creator .column{width:30%}.collection-creator .column-title{height:22px;line-height:22px;overflow:hidden}.collection-creator .column-title:hover{text-decoration:underline;cursor:pointer}.collection-creator .column-title .title{font-weight:bold}.collection-creator .column-title .title-info{color:grey}.collection-creator .column-title .title-info:before{content:' - '}.collection-creator .paired-column{text-align:center;width:22%}.collection-creator .header .main-help{margin-bottom:17px;overflow:hidden;padding:15px;background:#f8f8f8}.collection-creator .header .main-help:not(.expanded){max-height:49px}.collection-creator .header .main-help:not(.expanded) .help-content p:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.collection-creator .header .main-help:not(.expanded) .help-content>*:not(:first-child){display:none}.collection-creator .header .main-help.expanded{max-height:none}.collection-creator .header .main-help .help-content i{cursor:help;border-bottom:1px dotted grey;font-style:normal}.collection-creator .header .main-help .help-content ul,.collection-creator .header .main-help .help-content li{list-style:circle;margin-left:16px}.collection-creator .header .main-help .help-content .less-help{display:inline-block;width:100%;text-align:right}.collection-creator .header .main-help .more-help{float:right}.collection-creator .header .column-headers .column-header .unpaired-filter{width:100%}.collection-creator .header .column-headers .column-header .unpaired-filter .search-query{width:100%;height:22px}.collection-creator .header .paired-column a:not(:last-child){margin-right:8px}.collection-creator .header .reverse-column .column-title{text-align:right}.collection-creator .flex-bordered-vertically{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0}.collection-creator .column-datasets{list-style:none;overflow:hidden}.collection-creator .column-datasets .dataset{height:32px;margin-top:2px;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer}.collection-creator .column-datasets .dataset:last-of-type{margin-bottom:2px}.collection-creator .column-datasets .dataset.unpaired{border-color:grey}.collection-creator .column-datasets .dataset.paired{margin-left:34px;margin-right:34px;border:2px solid grey;background:#aff1af}.collection-creator .column-datasets .dataset.paired span{display:inline-block;overflow:hidden}.collection-creator .column-datasets .dataset.paired .forward-dataset-name{text-align:right;border-right:1px solid grey;padding-right:8px}.collection-creator .column-datasets .dataset.paired .forward-dataset-name:after{margin-left:8px;font-family:FontAwesome;content:'\f061'}.collection-creator .column-datasets .dataset.paired .pair-name-column{text-align:center}.collection-creator .column-datasets .dataset.paired .pair-name-column .pair-name:hover{text-decoration:underline}.collection-creator .column-datasets .dataset.paired .reverse-dataset-name{border-left:1px solid grey;padding-left:8px}.collection-creator .column-datasets .dataset.paired .reverse-dataset-name:before{margin-right:8px;font-family:FontAwesome;content:'\f060'}.collection-creator .column-datasets .dataset:hover{border-color:black}.collection-creator .column-datasets .dataset.selected{border-color:black;background:black;color:white}.collection-creator .column-datasets .dataset.selected a{color:white}.collection-creator .unpaired-columns{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0}.collection-creator .unpaired-columns .forward-column .dataset.unpaired{margin-right:32px}.collection-creator .unpaired-columns .paired-column .dataset.unpaired{border-color:lightgrey;color:lightgrey}.collection-creator .unpaired-columns .paired-column .dataset.unpaired:hover{border-color:black;color:black}.collection-creator .unpaired-columns .reverse-column .dataset.unpaired{text-align:right;margin-left:32px}.collection-creator .flexible-partition .flexible-partition-drag{width:100%;height:8px;cursor:ns-resize;line-height:2px;text-align:center;color:lightgrey}.collection-creator .flexible-partition .flexible-partition-drag:before{content:'...'}.collection-creator .flexible-partition .flexible-partition-drag:hover{background:lightgrey;color:black}.collection-creator .flexible-partition .column-header{width:100%;text-align:center}.collection-creator .flexible-partition .column-header .column-title{display:inline}.collection-creator .flexible-partition .column-header>*:not(:last-child){margin-right:8px}.collection-creator .flexible-partition .column-header .remove-extensions-link{display:none}.collection-creator .paired-columns{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0;margin-bottom:8px}.collection-creator .paired-columns .column-datasets{width:100%;overflow:auto}.collection-creator .paired-columns .unpair-btn{float:right;margin-top:-32px;width:31px;height:32px;border-color:transparent;background:transparent;font-size:120%}.collection-creator .paired-columns .unpair-btn:hover{border-color:#bfbfbf;background:#dedede}.collection-creator .paired-columns .empty-message{text-align:center}.collection-creator .element-drop-placeholder{width:60px;height:3px;margin:2px 0 0 14px;background:black}.collection-creator .element-drop-placeholder:before{float:left;font-size:120%;margin:-9px 0 0 -8px;font-family:FontAwesome;content:'\f0da'}.collection-creator .element-drop-placeholder:last-child{margin-bottom:8px}.collection-creator .footer{padding-bottom:8px}.collection-creator .footer .attributes .remove-extensions-prompt{line-height:32px}.collection-creator .footer .attributes .remove-extensions-prompt .remove-extensions{display:inline-block;width:24px;height:24px}.collection-creator .footer .attributes .collection-name-prompt{margin:5px 4px 0 0}.collection-creator .footer .attributes .collection-name-prompt.validation-warning:before{content:'(required)';margin-right:4px;color:red}.collection-creator .footer .attributes .collection-name{width:50%}.collection-creator .footer .attributes .collection-name.validation-warning{border-color:red}.collection-creator .footer .actions .other-options>*{display:none;margin-left:4px}.collection-creator.list-collection-creator .footer{margin-top:8px}.collection-creator.list-collection-creator .main-help{cursor:pointer}.collection-creator.list-collection-creator .collection-elements-controls{margin-bottom:8px}.collection-creator.list-collection-creator .collection-elements-controls .clear-selected{float:right !important;float:right;display:none}.collection-creator.list-collection-creator .collection-elements{max-height:400px;border:0 solid lightgrey;overflow-y:auto;overflow-x:hidden}.collection-creator.list-collection-creator .collection-element{height:32px;margin:2px 4px 0 4px;opacity:1;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer;overflow:hidden}.collection-creator.list-collection-creator .collection-element:last-of-type{margin-bottom:2px}.collection-creator.list-collection-creator .collection-element:hover{border-color:black}.collection-creator.list-collection-creator .collection-element.selected{border-color:black;background:black;color:white}.collection-creator.list-collection-creator .collection-element.selected a{color:white}.collection-creator.list-collection-creator .collection-element.dragging{opacity:.4}.collection-creator.list-collection-creator .collection-element.dragging button{display:none}.collection-creator.list-collection-creator .collection-element .name:hover{text-decoration:underline}.collection-creator.list-collection-creator .collection-element button{margin-top:3px}.collection-creator.list-collection-creator .collection-element .discard{float:right !important;float:right}.collection-creator.list-collection-creator .element-drop-placeholder{margin-left:8px}.collection-creator.list-collection-creator .element-drop-placeholder:before{margin:-8.5px 0 0 -8px}.collection-creator.list-collection-creator .empty-message{margin:8px;color:grey;font-style:italic;text-align:center}.collection-creator.list-collection-creator .no-elements-left-message{text-align:left}.collection-creator.pair-collection-creator .footer{margin-top:8px}.collection-creator.pair-collection-creator .main-help{cursor:pointer}.collection-creator.pair-collection-creator .collection-elements-controls{margin-bottom:8px}.collection-creator.pair-collection-creator .collection-elements-controls .clear-selected{float:right !important;float:right;display:none}.collection-creator.pair-collection-creator .collection-elements{max-height:400px;border:0 solid lightgrey;overflow-y:auto;overflow-x:hidden}.collection-creator.pair-collection-creator .collection-element{height:32px;margin:2px 4px 0 4px;opacity:1;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer;overflow:hidden}.collection-creator.pair-collection-creator .collection-element:last-of-type{margin-bottom:2px}.collection-creator.pair-collection-creator .collection-element:hover{border-color:black}.collection-creator.pair-collection-creator .collection-element button{margin-top:3px}.collection-creator.pair-collection-creator .collection-element .identifier:after{content:':';margin-right:6px}.collection-creator.pair-collection-creator .collection-element .name:hover{text-decoration:none}.collection-creator.pair-collection-creator .empty-message{margin:8px;color:grey;font-style:italic;text-align:center}.collection-creator.list-of-pairs-collection-creator .column-headers{margin-bottom:8px}.search-input .search-query{width:100%;padding-right:24px}.search-input .search-clear,.search-input .search-loading{position:relative;display:inline-block;float:right;margin-top:-24px;margin-right:4px;font-size:1.4em;line-height:23px;color:grey}.search-input .search-clear:hover{color:#303030}.dataset-choice{border:1px solid lightgrey;border-radius:3px;overflow:hidden;padding:10px 8px 8px 8px}.dataset-choice:hover{border-color:black;cursor:pointer}.dataset-choice:hover>*{cursor:pointer}.dataset-choice .prompt{margin-right:8px}.dataset-choice .prompt:after{content:':'}.dataset-choice .prompt:empty{display:none}.dataset-choice .none-selected-msg{color:grey}.dataset-choice .selected{display:inline-block}.dataset-choice .selected .title{font-weight:bold}.dataset-choice .selected .subtitle{color:grey}.dataset-choice .selected .subtitle:before{content:'-';margin:0 4px 0 4px}.dataset-choice .selected .subtitle i{font-style:normal}.dataset-choice .selected .subtitle i:not(:last-child):after{content:', '}.dataset-choice.multi .selected{display:block;font-weight:normal}.dataset-choice.multi table{width:100%;margin-top:8px;cursor:pointer}.dataset-choice.multi table:hover{border-color:black}.dataset-choice.multi table tr:nth-child(even){background-color:aliceblue}.dataset-choice.multi table th{padding:0;font-weight:normal;font-size:80%;color:grey}.dataset-choice.multi table th:not(:last-child),.dataset-choice.multi table td:not(:last-child){padding-right:8px}.dataset-choice.multi table td.cell-name{font-weight:bold}.dataset-choice-modal .list-panel .list-item.dataset{border-left-width:1px;border-right-width:1px}.dataset-choice-modal .list-panel .controls .title .name{font-size:120%}.peek-column-selector{border-radius:3px;border:1px solid #5f6990}.peek-column-selector td,.peek-column-selector th{padding:4px 10px 4px 4px}.peek-column-selector th:last-child{width:100%}.peek-column-selector .top-left{width:10%;white-space:normal;vertical-align:top;text-align:right;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-weight:normal}.peek-column-selector .renamable-header:hover{background-color:black}.peek-column-selector .control td.control-prompt{background-color:#5f6990;padding:0 4px 0 8px;text-align:right;color:white}.peek-column-selector .control td{padding:1px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;color:grey}.peek-column-selector .control td .button{min-width:28px;border:1px solid grey;border-radius:3px;padding:4px;color:grey}.peek-column-selector .control td:hover .button{background-color:#eee;border:1px solid black;cursor:pointer;color:black}.peek-column-selector .control td.disabled .button,.peek-column-selector .control td.disabled:hover .button{background-color:transparent;border:1px solid #ccc;cursor:not-allowed;color:#ccc}.peek-column-selector .control td.selected .button{background-color:black;border:1px solid black;color:white}.pagination{margin:0}.pagination-scroll-container{display:inline-block;background-color:#f8f8f8;border-radius:3px;border:1px solid #bfbfbf;overflow:auto}.pagination-scroll-container .pagination-page-list{margin:3px 0 3px 0}.pagination-scroll-container .pagination-page-list>li:first-child>a,.pagination-scroll-container .pagination-page-list>li:first-child>span{border-radius:0;border-left:0}.pagination-scroll-container .pagination-page-list>li:last-child>a,.pagination-scroll-container .pagination-page-list>li:last-child>span{border-radius:0}.pagination-scroll-container .pagination-page-list>li>a{float:none;position:static;border:1px solid #bfbfbf;border-width:0 0 0 1px}.toolMenuContainer{color:#000;background:#dfe5f9;min-height:100%;padding:5px 10px}div.toolSectionPad{margin:0;padding:0;height:5px;font-size:0}div.toolSectionWrapper{margin-bottom:5px}div.toolSectionDetailsInner{margin-left:5px;margin-right:5px}div.toolSectionTitle{font-weight:bold}div.toolPanelLabel{padding-top:10px;padding-bottom:5px;font-weight:bold;color:gray;text-transform:uppercase}div.toolTitle{padding-top:5px;padding-bottom:5px;margin-left:16px;margin-right:10px;display:list-item;list-style:square outside}div.toolSectionBody div.toolPanelLabel{padding-top:5px;padding-bottom:5px;margin-left:16px;margin-right:10px;display:list-item;list-style:none outside}div.toolTitleNoSection{padding-bottom:5px;font-weight:bold}#tool-search{padding-top:5px;padding-bottom:10px;position:relative}#loading_indicator{position:fixed;right:10px;top:10px;height:32px;width:32px;display:none;background:url(largespinner.gif)}#content_table td{text-align:right;white-space:nowrap;padding:2px 10px}#content_table th{white-space:nowrap;padding:2px 10px}#content_table td.stringalign{text-align:left}#content_table .dark_row{background-color:#ddd}#content_table th{background-color:#aaa}.toolMenuAndView .toolForm{float:left;background-color:white;margin:10px}.text-and-autocomplete-select{background:none;position:relative;padding-right:18px}.text-and-autocomplete-select:after{margin-top:6px;position:absolute;top:2px;right:6px;width:10px;height:10px;display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:"";opacity:80;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=8000);filter:alpha(opacity=8000)}.btn-default .text-and-autocomplete-select:after{border-top-color:#333}.btn-primary .text-and-autocomplete-select:after,.btn-success .text-and-autocomplete-select:after,.btn-warning .text-and-autocomplete-select:after,.btn-danger .text-and-autocomplete-select:after,.btn-info .text-and-autocomplete-select:after{border-top-color:#fff}.icon-button.general-question{background:url(question-octagon-frame.png) no-repeat;float:right;margin-top:3px;margin-right:4px}.icon-button.tag-question{background:url(question-balloon.png) no-repeat;float:right;margin-top:3px;margin-right:4px}.icon-button.tag{background-image:url(sprite-fugue.png);background-position:-16px -112px;width:16px;height:16px}.icon-button.tags{background-image:url(sprite-fugue.png);background-position:-32px -112px;width:16px;height:16px}.icon-button.tag--plus{background-image:url(sprite-fugue.png);background-position:0 -112px;width:16px;height:16px}.icon-button.toggle-expand{background-image:url(sprite-fugue.png);background-position:-80px -112px;width:16px;height:16px}.icon-button.toggle{background-image:url(sprite-fugue.png);background-position:-48px -112px;width:16px;height:16px}.icon-button.toggle:hover{background-image:url(sprite-fugue.png);background-position:-96px -112px;width:16px;height:16px}.icon-button.arrow-circle{background-image:url(sprite-fugue.png);background-position:-32px 0;width:16px;height:16px}.icon-button.chevron{background-image:url(sprite-fugue.png);background-position:-32px -64px;width:16px;height:16px}.icon-button.bug{background-image:url(sprite-fugue.png);background-position:-64px -32px;width:16px;height:16px}.icon-button.disk{background-image:url(sprite-fugue.png);background-position:-16px -80px;width:16px;height:16px}.icon-button.information{background-image:url(sprite-fugue.png);background-position:-96px -80px;width:16px;height:16px}.icon-button.annotate{background-image:url(sprite-fugue.png);background-position:-112px -96px;width:16px;height:16px}.icon-button.go-to-full-screen{background-image:url(sprite-fugue.png);background-position:0 0;width:16px;height:16px}.icon-button.import{background-image:url(sprite-fugue.png);background-position:-112px -80px;width:16px;height:16px}.icon-button.plus-button{background-image:url(sprite-fugue.png);background-position:-112px -48px;width:16px;height:16px}.icon-button.plus-button:hover{background-image:url(sprite-fugue.png);background-position:-112px -64px;width:16px;height:16px}.icon-button.gear{background-image:url(sprite-fugue.png);background-position:-96px 0;width:16px;height:16px}.icon-button.chart_curve{background-image:url(sprite-fugue.png);background-position:-64px -48px;width:16px;height:16px}.icon-button.disk--arrow{background-image:url(sprite-fugue.png);background-position:-80px -64px;width:16px;height:16px}.icon-button.disk--arrow:hover{background-image:url(sprite-fugue.png);background-position:0 -80px;width:16px;height:16px}.icon-button.cross-circle{background-image:url(sprite-fugue.png);background-position:-80px 0;width:16px;height:16px}.icon-button.cross-circle:hover{background-image:url(sprite-fugue.png);background-position:-80px -16px;width:16px;height:16px}.icon-button.arrow-split{background-image:url(sprite-fugue.png);background-position:-16px -32px;width:16px;height:16px}.icon-button.arrow-split:hover{background-image:url(sprite-fugue.png);background-position:-32px -32px;width:16px;height:16px}.icon-button.chevron-expand:hover{background-image:url(sprite-fugue.png);background-position:-16px -64px;width:16px;height:16px}.icon-button.chevron-expand{background-image:url(sprite-fugue.png);background-position:0 -64px;width:16px;height:16px}#for_bears{display:none} \ No newline at end of file + */@font-face{font-family:'FontAwesome';src:url('../images/fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../images/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../images/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../images/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../images/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-icon{font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(.5, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0, #fff 50%);background-image:-moz-linear-gradient(center bottom, #eee 0, #fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top, #eee 0, #fff 50%)}html[dir="rtl"] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(.9, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0, #fff 90%);background-image:-moz-linear-gradient(center bottom, #eee 0, #fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom, #eee 0, #fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir="rtl"] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url('../images/select2.png') right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,0.15);box-shadow:0 4px 5px rgba(0,0,0,0.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,0.15);box-shadow:0 -4px 5px rgba(0,0,0,0.15)}.select2-drop-active{border:1px solid #5897fb;border-top:none}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(.6, #eee));background-image:-webkit-linear-gradient(center bottom, #ccc 0, #eee 60%);background-image:-moz-linear-gradient(center bottom, #ccc 0, #eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background-image:linear-gradient(to top, #ccc 0, #eee 60%)}html[dir="rtl"] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url('../images/select2.png') no-repeat 0 1px}html[dir="rtl"] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto !important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#fff url('../images/select2.png') no-repeat 100% -22px;background:url('../images/select2.png') no-repeat 100% -22px,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2.png') no-repeat 100% -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat 100% -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat 100% -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}html[dir="rtl"] .select2-search input{padding:4px 5px 4px 20px;background:#fff url('../images/select2.png') no-repeat -37px -22px;background:url('../images/select2.png') no-repeat -37px -22px,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2.png') no-repeat -37px -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat -37px -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2.png') no-repeat -37px -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url('../images/select2-spinner.gif') no-repeat 100%;background:url('../images/select2-spinner.gif') no-repeat 100%,-webkit-gradient(linear, left bottom, left top, color-stop(.85, #fff), color-stop(.99, #eee));background:url('../images/select2-spinner.gif') no-repeat 100%,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2-spinner.gif') no-repeat 100%,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url('../images/select2-spinner.gif') no-repeat 100%,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(.5, #eee));background-image:-webkit-linear-gradient(center bottom, #fff 0, #eee 50%);background-image:-moz-linear-gradient(center bottom, #fff 0, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top, #fff 0, #eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(.5, #eee));background-image:-webkit-linear-gradient(center top, #fff 0, #eee 50%);background-image:-moz-linear-gradient(center top, #fff 0, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to bottom, #fff 0, #eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:none;filter:none}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow{border-right:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}html[dir="rtl"] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:bold}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-ajax-error,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url('../images/select2-spinner.gif') no-repeat 100%}.select2-results .select2-ajax-error{background:rgba(255,50,50,0.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto !important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear, 0 0, 0 100%, color-stop(1%, #eee), color-stop(15%, #fff));background-image:-webkit-linear-gradient(top, #eee 1%, #fff 15%);background-image:-moz-linear-gradient(top, #eee 1%, #fff 15%);background-image:linear-gradient(to bottom, #eee 1%, #fff 15%)}html[dir="rtl"] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px 3px 5px !important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir="rtl"] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:transparent !important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url('../images/select2-spinner.gif') no-repeat 100% !important}.select2-default{color:#999 !important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear, 0 0, 0 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));background-image:-webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:-moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%)}html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url('../images/select2.png') right top no-repeat}html[dir="rtl"] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir="rtl"] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px 3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;position:absolute !important;outline:0 !important;left:0 !important;top:0 !important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png') !important;background-repeat:no-repeat !important;background-size:60px 40px !important}.select2-search input{background-position:100% -21px !important}}.select2-minwidth{min-width:256px}.galaxy-frame .corner{-moz-border-radius:5px;border-radius:5px}.galaxy-frame .toggle{color:gold}.galaxy-frame .frame-background{z-index:1000;position:absolute;display:none;top:0;left:0;height:100%;width:100%;opacity:.6;background:#000;overflow:auto}.galaxy-frame .frame-shadow{z-index:1001;position:absolute;display:none;top:0;left:0;opacity:.5;background:#2c3143;border:1px solid #888}.galaxy-frame .frame-menu{z-index:1005;position:absolute;cursor:pointer;color:gold;right:10px}.galaxy-frame .frame-scroll-up{top:50px}.galaxy-frame .frame-scroll-down{bottom:20px}.galaxy-frame .frame{z-index:1002;overflow:hidden;position:absolute;background:#fff;border:1px solid #888;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3)}.galaxy-frame .frame .f-content{position:absolute;overflow:hidden;background:#fff;border:none;top:24px;bottom:3px;left:3px;right:3px}.galaxy-frame .frame .f-cover{position:absolute;display:none;top:0;left:0;height:100%;width:100%;opacity:0;background:#fff}.galaxy-frame .frame .f-iframe{border:none;width:100%;height:100%}.galaxy-frame .frame .f-header{height:17px;margin:2px;cursor:pointer;border:1px solid #000;background:#2c3143;color:#fff}.galaxy-frame .frame .f-title{position:absolute;top:2px;left:16px;right:16px;font-size:12px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;text-align:center}.galaxy-frame .frame .f-icon{position:absolute;cursor:pointer;font-size:14px}.galaxy-frame .frame .f-not-allowed{cursor:not-allowed}.galaxy-frame .frame .f-close{right:5px;top:3px}.galaxy-frame .frame .f-pin{left:6px;top:3px}.galaxy-frame .frame .f-resize{background:#fff;width:16px;height:16px;color:#2c3143;right:0;bottom:0;text-align:center;line-height:16px;border:0}.upload-button{position:relative;width:31px;height:21px;top:-4px;cursor:pointer;-moz-border-radius:3px;border-radius:3px}.upload-button .progress{height:21px}.upload-button .progress-bar-danger{background:#f8cfce}.upload-button .progress-bar-success{background:#b4eeb4}.upload-button .progress-bar-info{background:#ffc}.upload-button .progress-bar-notransition{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.upload-button .label{position:absolute;top:2px;width:inherit;text-align:center;line-height:19px;font-size:1.2em}.upload-icon{font-size:1.2em;width:1.2em}.upload-icon-button{font-size:1.2em;width:1.2em;cursor:pointer}.upload-box{width:100%;height:90%;text-align:center;overflow:scroll;font-size:12px;line-height:1.33;-moz-border-radius:5px;border-radius:5px;border:1px dashed #bfbfbf;padding:10px;overflow-x:hidden;-ms-overflow-style:none}.upload-box .table{width:100%}.upload-box .table th{text-align:center;white-space:nowrap}.upload-box .table td{margin:0}.upload-box .upload-item .select2-arrow b{background-position:0 -3px}.upload-box .upload-item .select2-choice{max-height:20px;line-height:18px;background:transparent}.upload-box .upload-item .select2-container-disabled .select2-arrow{background:transparent}.upload-box .name-column{position:relative}.upload-box .mode{float:left;font-size:1.2em;width:1.2em;color:#555}.upload-box .title{width:130px;word-wrap:break-word;font-size:11px;float:left}.upload-box .text{position:absolute;display:none}.upload-box .text .text-content{font-size:11px;width:100%;height:50px;resize:none;background:inherit;color:#000}.upload-box .text .text-info{font-size:11px}.upload-box .extension{width:100px;min-width:100px;font-size:11px}.upload-box .genome{width:150px;min-width:150px;font-size:11px}.upload-box .size{width:60px;white-space:nowrap}.upload-box .info{width:130px;font-size:11px;line-height:1.2em}.upload-box .info .progress{top:1px;position:relative;width:100%;padding:0;margin:0;line-height:1.55em}.upload-box .info .progress .progress-bar{border-radius:inherit;-moz-border-radius:inherit}.upload-box .info .progress .percentage{position:absolute;text-align:center;width:100%;color:#fff}.upload-ftp{height:250px;width:500px;overflow:auto}.upload-ftp .upload-ftp-wait{font-size:1.2em;position:absolute;bottom:10px;right:10px}.upload-ftp .upload-ftp-help{margin-bottom:10px}.upload-ftp .upload-ftp-warning{text-align:center;margin-top:20px}.upload-ftp .upload-ftp-row{cursor:pointer}.upload-ftp .upload-ftp-row .label{width:240px}.upload-ftp .upload-ftp-row .label p{width:inherit;word-wrap:break-word}.upload-ftp .upload-ftp-row .nonlabel{white-space:nowrap}.upload-settings .upload-settings-cover{position:absolute;width:100%;height:100%;top:0;left:0;background:#fff;opacity:.4;cursor:no-drop}.upload-header{height:5%;text-align:left;max-height:20px;line-height:18px;margin-top:10px}.upload-header .header-title{font-weight:bold;padding-left:60px;padding-right:20px}.upload-header .header-selection{width:200px;min-width:200px;font-size:11px;padding-right:10px}.upload-header .select2-choice{max-height:20px;line-height:18px;background:transparent;text-align:center;font-weight:normal}.upload-header .select2-choice .select2-arrow b{background-position:0 -3px}.upload-top{height:5%;text-align:center}.upload-top .upload-info{margin-top:0;font-weight:normal;text-align:center}.no-highlight,.ui-button-icon{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.no-padding{padding:0 !important}.ui-margin-top{padding-top:5px !important}.ui-margin-bottom{margin-bottom:5px !important}.ui-error{-moz-border-radius:3px;border-radius:3px;background:#f8cfce;padding:5px}.ui-label{font-weight:bold}.ui-message{padding:2px 10px 2px 10px;margin:0}.ui-icon{font-size:1.2em}.ui-button-icon{height:auto !important}.ui-button-icon ul i{font-size:1.2em;margin-right:5px;position:relative;top:1px}.ui-button-icon .button{margin-right:5px;margin-left:5px}.ui-button-icon .button .title{position:relative;font-size:.8em;font-weight:normal;top:-1px;word-break:break-word}.ui-button-icon .button.disabled{opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65)}.ui-button-menu .dropdown-menu{min-width:50px}.ui-button-menu .dropdown-item{text-align:left}.ui-button-icon-plain{border:none !important;background:none !important;height:inherit !important;width:inherit !important;padding-right:3px !important}.ui-tabs .ui-tabs-add{font-size:.8em;margin-right:5px}.ui-tabs .ui-tabs-delete{font-size:.8em;margin-left:5px;cursor:pointer}.ui-table tbody,.ui-table-plain tbody{cursor:pointer}.ui-table-plain{table-layout:fixed}.ui-table-plain tbody{cursor:auto !important}.ui-table-plain tbody td{padding:0 !important;border:none !important}.ui-table-plain .ui-table-section{border-left:solid 3px #ebd9b2;border-radius:5px !important;margin-bottom:5px;padding-left:10px}.ui-table-form-element{margin-top:5px;margin-bottom:5px;overflow:visible}.ui-table-form-element .ui-table-form-title{word-break:break-word;font-weight:bold}.ui-table-form-element .ui-table-form-title .ui-table-form-optional{cursor:pointer}.ui-table-form-element .ui-table-form-title .ui-table-form-optional .icon{margin-right:5px;font-size:1.2em}.ui-table-form-element .ui-table-form-field{margin-top:5px}.ui-table-form-separator{font-weight:bold;font-size:.9em}.ui-table-form-info{clear:both !important}.ui-table-form-error{display:none}.ui-table-form-error .ui-table-form-error-text{padding-left:5px}.ui-portlet,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow{border:solid #d6b161 1px;border-radius:3px;position:relative;clear:both;width:auto;height:100%}.ui-portlet .portlet-header,.ui-portlet-limited .portlet-header,.ui-portlet-narrow .portlet-header{background:#ebd9b2;border-bottom:solid #d6b161 1px;padding:2px 8px;overflow:visible;float:right;width:100%}.ui-portlet .portlet-header .portlet-title,.ui-portlet-limited .portlet-header .portlet-title,.ui-portlet-narrow .portlet-header .portlet-title{word-break:break-word;display:inline;vertical-align:middle}.ui-portlet .portlet-header .portlet-title .portlet-title-text,.ui-portlet-limited .portlet-header .portlet-title .portlet-title-text,.ui-portlet-narrow .portlet-header .portlet-title .portlet-title-text{vertical-align:middle;line-height:22px}.ui-portlet .portlet-header .portlet-title .icon,.ui-portlet-limited .portlet-header .portlet-title .icon,.ui-portlet-narrow .portlet-header .portlet-title .icon{font-size:1.2em;vertical-align:middle}.ui-portlet .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-limited .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-narrow .portlet-header .portlet-operations .ui-button-icon{margin-left:5px}.ui-portlet .portlet-content,.ui-portlet-limited .portlet-content,.ui-portlet-narrow .portlet-content{height:inherit;padding-left:10px;padding-right:10px;clear:both}.ui-portlet .portlet-content .content,.ui-portlet-limited .portlet-content .content,.ui-portlet-narrow .portlet-content .content{padding:0;height:100%;width:100%}.ui-portlet .portlet-content .buttons,.ui-portlet-limited .portlet-content .buttons,.ui-portlet-narrow .portlet-content .buttons{margin-top:5px;margin-bottom:5px}.ui-portlet .portlet-backdrop,.ui-portlet-limited .portlet-backdrop,.ui-portlet-narrow .portlet-backdrop{display:none;z-index:10;position:absolute;top:0;width:100%;height:100%;opacity:.2;background:#fff;cursor:not-allowed}.ui-portlet-repeat,.ui-portlet-section{border:none;border-left:solid 3px #ebd9b2;border-radius:5px;margin-bottom:5px}.ui-portlet-repeat .portlet-header,.ui-portlet-section .portlet-header{background:#ebd9b2;border-radius:5px;border-bottom-left-radius:0;border-top-left-radius:0;padding:0 2px}.ui-portlet-repeat .portlet-header .portlet-title-text,.ui-portlet-section .portlet-header .portlet-title-text{vertical-align:middle;line-height:20px !important}.ui-portlet-repeat .portlet-content,.ui-portlet-section .portlet-content{padding-right:0}.ui-portlet-section{margin-top:5px;border-left:solid 3px #dfe5f9}.ui-portlet-section .portlet-header{background:#dfe5f9;border-bottom:solid #b4c2f1 1px}.ui-portlet-section .portlet-highlight{text-decoration:underline}.ui-portlet-narrow{border:none}.ui-portlet-narrow .portlet-header{border-radius:3px}.ui-portlet-narrow .portlet-header .portlet-operations .ui-button-icon{margin-left:3px}.ui-portlet-narrow .ui-portlet-repeat .portlet-header,.ui-portlet-narrow .ui-portlet-section .portlet-header{border-radius:5px;border-bottom-left-radius:0;border-top-left-radius:0}.ui-portlet-narrow .portlet-content{padding:0}.ui-portlet-narrow .ui-table-section,.ui-portlet-narrow .ui-portlet-repeat .portlet-content,.ui-portlet-narrow .ui-portlet-section .portlet-content{padding-left:5px}.ui-portlet-limited,.ui-portlet-narrow{max-width:900px}.ui-popover{max-width:700px;display:none}.ui-popover .popover-close{position:absolute;right:10px;top:7px;font-size:1.2em;cursor:pointer}.ui-popover .popover-title{padding:4px 10px}.ui-input,.ui-input-basic,.ui-textarea,.ui-options .ui-options-list,.ui-form-slider .ui-form-slider-text,.ui-select .select2-container-multi .select2-choices,.ui-select select,.ui-select .select2-container .select2-choice{width:100%;display:block;height:27px;padding:4px 10px;font-size:12px;line-height:1.42857143;color:#555;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);background-image:none;background:transparent;-webkit-appearance:none;-moz-border-radius:3px}.ui-input[disabled],.ui-input[readonly],fieldset[disabled] .ui-input{cursor:not-allowed;background-color:#eee}.ui-input-basic,.ui-select select,.ui-select .select2-container .select2-choice{-webkit-box-shadow:inset 0 -1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 -1px 1px rgba(0,0,0,0.075)}.ui-textarea{height:100px !important}.ui-options .ui-options-list{height:100% !important}.ui-options .ui-options-list input[type=checkbox],.ui-options .ui-options-list input[type=radio]{display:none}.ui-options .ui-options-list label{margin:0;cursor:pointer}.ui-options .ui-options-list .ui-drilldown-button{position:relative;top:2px;left:-3px;margin-right:3px;cursor:pointer}.ui-options .ui-options-list input[type=checkbox]+label:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-size:1.2em;margin-right:5px;position:relative;top:1px;width:10px;content:"\f096"}.ui-options .ui-options-list input[type=checkbox]:checked+label:before{content:"\f046"}.ui-options .ui-options-list input[type=radio]+label:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-size:1.2em;margin-right:5px;position:relative;top:1px;width:10px;content:"\f1db"}.ui-options .ui-options-list input[type=radio]:checked+label:before{content:"\f192"}.ui-form-slider{display:inline-block;width:100%}.ui-form-slider .ui-form-slider-text{width:100px;float:left}.ui-form-slider .ui-form-slider-element{width:calc(100% - 110px);float:left;top:8px;left:10px}.ui-radiobutton{width:100%}.ui-radiobutton label{height:23px;line-height:1em}.ui-radiobutton i{padding-right:5px}.ui-button-check{cursor:pointer;margin-bottom:5px}.ui-button-check .icon{font-size:1.2em;width:1.2em}.ui-color-picker .ui-color-picker-header{cursor:pointer}.ui-color-picker .ui-color-picker-value{float:left;border-radius:3px;border:solid 1px #000;width:12px;height:12px;margin-right:5px}.ui-color-picker .ui-color-picker-label{float:left;line-height:1.2em}.ui-color-picker .ui-color-picker-view{height:100%;overflow:auto;display:none;float:left;margin-top:5px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel{width:210px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content{margin-bottom:15px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .label{padding-bottom:2px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .line .ui-color-picker-box{cursor:pointer;float:left;margin-right:5px;border:solid 1px #c0c0c0;width:15px;height:15px;border-radius:2px}.ui-color-picker .ui-color-picker-view .ui-color-picker-panel .ui-color-picker-content .line .ui-color-picker-box .ui-color-picker-check{color:black;font-size:1.2em;position:relative;left:1px}.ui-list .ui-list-select{float:left;width:calc(100% - 27px)}.ui-list .ui-list-button .ui-button-icon{margin-top:3px;margin-right:5px}.ui-list .ui-list-message,.ui-list .ui-list-portlet{clear:both}.ui-list .ui-list-id{cursor:pointer;margin-top:5px}.ui-list .ui-list-id .ui-list-delete{font-size:1.2em;margin-right:5px}.ui-select{position:relative}.ui-select .button{position:absolute;top:5px;right:5px}.ui-select select{position:relative;top:0;height:27px;width:100%;padding-right:20px;cursor:pointer;padding-left:5px}.ui-select .select2-container{width:100%}.ui-select .select2-container .select2-choice{height:27px;padding-left:5px}.ui-select .select2-container .select2-choice .select2-arrow{display:none}.ui-select .select2-container-multi .select2-choices{padding:0}.ui-select-multiple select{height:80px !important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.ui-select-content .ui-options{float:left;padding-top:2px}.select2-container .select2-choice,.select2-container .select2-choices{border:1px solid #aaa}.select2-dropdown-open .select2-choice,.select2-dropdown-open .select2-choices{border:1px solid #aaa;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.select2-drop-active{border:1px solid #aaa;border-radius:3px;border-top-left-radius:0;border-top-right-radius:0}.select2-drop-active .select2-search{padding-top:5px}.select2-drop.select2-drop-above.select2-drop-active{border:1px solid #aaa;border-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-drop.select2-drop-above.select2-drop-active .select2-search{padding-top:0}.libraryRow{background-color:#ebd9b2}.datasetHighlighted{background-color:#f9f9f9}.libraryItemDeleted-True{font-style:italic}div.libraryItemBody{padding:4px 4px 2px 4px}li.folderRow,li.datasetRow{border-top:solid 1px #c6bfa8}li.folderRow:hover,li.datasetRow:hover{background-color:#f9f9f9}td.right-center{vertical-align:middle !important;text-align:right}.library-genome-select{max-width:350px}.library-extension-select{max-width:140px}.library_table td{border-top:1px solid #5f6990 !important}.library_table th{border-bottom:2px solid #5f6990 !important}.library_table a{color:#0a143d}.library_table a:hover{color:maroon}.library_style_container{width:95%;margin:auto;margin-top:2em;overflow:auto !important}.library_style_container tr{height:32px}tr.light td{background-color:white;color:black}tr.light:hover td{background-color:#f5e8cc}tr.dark td{background-color:#d6b161;color:white}tr.dark:hover td{background-color:#ebd4a4;color:white}a.dark{color:white}.dataset_table tr{border-bottom:1px solid #5f6990 !important}.dataset_table th{border:none !important}.dataset_table td{border:none !important}th.button_heading{width:2em}.bigdrop.select2-container .select2-results{max-height:300px}.bigdrop .select2-results{max-height:300px}.select2-container-multi{width:100%}.roles-selection{width:66%}#library_toolbar{margin-bottom:1em}#library_toolbar span{margin-right:.2em}img.expanderIcon{padding-right:4px}input.datasetCheckbox,li,ul{padding:0;margin:0}.rowTitle{padding:2px}ul{list-style:none}.libraryTitle th{text-align:left}pre.peek{background:white;color:black;overflow:auto}pre.peek th{color:white;background:#ebd9b2}.help-button{float:right}span.expandLink{padding-left:12px;display:inline-block;vertical-align:middle;background:url(../images/silk/resultset_next.png) no-repeat}.folderRow.expanded span.expandLink{background:url(../images/silk/resultset_bottom.png) no-repeat}.folderRow span.rowIcon{float:left;margin-right:5px;width:16px;height:16px;display:inline-block;vertical-align:middle;background:url(../images/silk/folder.png)}.libraryItem-error{margin-right:2px;padding:0 2px 0 2px;border:1px solid #da2520;background:#f8cfce}.libraryItem-queued{margin-right:2px;padding:0 2px 0 2px;border:1px solid #bfbfbf;background:#eee}.libraryItem-running{margin-right:2px;padding:0 2px 0 2px;border:1px solid #aa6;background:#ffc}.libraryItem-upload{margin-right:2px;padding:0 2px 0 2px;border:1px solid #1992b6;background:#a8e2f3}.pagination-sm{height:15px}.library-paginator{margin-left:2em}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:4em 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;-moz-box-shadow:5px 5px 4px -4px #666;-webkit-box-shadow:2px 2px 2px #999;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;-moz-text-shadow:1px 1px 0 white;-webkit-text-shadow:1px 1px 0 white;text-shadow:1px 1px 0 white;-moz-border-radius:1px;-webkit-border-radius:1px;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;-moz-text-shadow:0 0 0 transparent;-webkit-text-shadow:0 0 0 transparent;text-shadow:0 0 0 transparent;-moz-box-shadow:0 0 0 transparent;-webkit-box-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:transparent;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:bold}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url("../images/jstree/32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:transparent;width:16px;height:16px}#jstree-dnd.jstree-default .jstree-ok{background-position:-9px -71px}#jstree-dnd.jstree-default .jstree-er{background-position:-39px -71px}.jstree-default>.jstree-striped{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-moz-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #beebff), color-stop(100%, #a8e4ff));background:-webkit-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-o-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:-ms-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:linear-gradient(to bottom, #beebff 0, #a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:transparent}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:transparent}.jstree-default .jstree-disabled.jstree-hovered{background:transparent}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default .jstree-file{background:url("../images/jstree/32px.png") -100px -68px no-repeat}.jstree-default .jstree-folder{background:url("../images/jstree/32px.png") -260px -4px no-repeat}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:transparent}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:transparent}.jstree-default-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default-small .jstree-file{background:url("../images/jstree/32px.png") -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url("../images/jstree/32px.png") -263px -7px no-repeat}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url("../images/jstree/32px.png")}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:transparent}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:transparent}.jstree-default-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("../images/jstree/throbber.gif") center center no-repeat}.jstree-default-large .jstree-file{background:url("../images/jstree/32px.png") -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url("../images/jstree/32px.png") -256px 0 no-repeat}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("../images/jstree/40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("../images/jstree/40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url("../images/jstree/40px.png")}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-responsive>.jstree-striped{background:transparent}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,0.7);border-bottom:1px solid rgba(64,64,64,0.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url("../images/jstree/40px.png");background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:transparent}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url("../images/jstree/40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url("../images/jstree/40px.png") -40px -40px no-repeat;background-size:120px 240px}}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}.unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.parent-width{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;*width:90%}.clear:before,.clear:after{content:" ";display:table}.clear:after{clear:both}.clear:before,.clear:after{content:" ";display:table}.clear:after{clear:both}body{background:#fff;color:#000;margin:10px}body.full-content{overflow:hidden;margin:0;padding:0;width:100%;height:100%}#background{position:absolute;background:#fff;z-index:-1;top:0;left:0;margin:0;padding:0;width:100%;height:100%}#messagebox{position:absolute;top:34px;left:0;width:100%;height:30px !important;overflow:hidden;border-bottom:solid #999 1px;font-size:90%}#inactivebox{position:absolute;top:34px;left:0;width:100%;height:30px !important;overflow:hidden;border-bottom:solid #999 1px;font-size:90%}#left,#left-border,#center,#right-border,#right{position:absolute;top:34px;bottom:0;overflow:hidden;background:#fff}#left{left:0;width:250px;z-index:200;border-right:solid #999 1px}#left-border{left:250px}#center{left:250px;right:250px;overflow:hidden;z-index:1}#right-border{right:250px}#right{width:250px;right:0;z-index:200;border-left:solid #999 1px}body.has-message-box #left,body.has-inactivity-box #left,body.has-message-box #left-border,body.has-inactivity-box #left-border,body.has-message-box #center,body.has-inactivity-box #center,body.has-message-box #right-border,body.has-inactivity-box #right-border,body.has-message-box #right,body.has-inactivity-box #right{top:64px}body.has-message-box.has-inactivity-box #left,body.has-message-box.has-inactivity-box #left-border,body.has-message-box.has-inactivity-box #center,body.has-message-box.has-inactivity-box #right-border,body.has-message-box.has-inactivity-box #right{top:94px}body.has-message-box.has-inactivity-box #inactivebox{top:64px}.subnavbar{background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-bottom:solid #bfbfbf 1px;border-top:solid #bfbfbf 1px;padding:5px;color:#555}.unified-panel-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;height:30px;z-index:1000;text-shadow:rgba(255,255,255,0.8) 0 1px 0;background:#eee;border-bottom:solid #999 1px;margin:0;padding:0;padding-right:10px;padding-left:10px;font-weight:bold;color:#555}.unified-panel-header a{color:#555}.unified-panel-header .fa{font-size:1.2em}.unified-panel-header-inner{padding-top:8px}.unified-panel-footer{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:absolute;bottom:0;height:25px;line-height:25px;width:100%;z-index:1000;border-top:solid #999 1px;background:#eee;color:#555}.unified-panel-footer a{color:#555}.unified-panel-footer .drag{position:absolute;top:0;right:0;padding:0 5px;text-align:center;height:25px;width:20px;background-image:url(../images/visualization/draggable_horizontal.png);background-repeat:no-repeat;background-position:50% 50%;cursor:w-resize}#right>.unified-panel-footer .drag{left:0}.panel-collapse{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:absolute;width:100%;z-index:1000;color:#555;font-size:1.33333333em;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;z-index:201;display:block;position:fixed;left:0;top:inherit;bottom:0;padding:0 5px;text-align:center;height:25px;line-height:25px;width:20px;background:none;border-right:solid #999 1px;border-top:solid #999 1px;background:#eee}.panel-collapse a{color:#555}.panel-collapse .drag{position:absolute;top:0;right:0;padding:0 5px;text-align:center;height:25px;width:20px;background-image:url(../images/visualization/draggable_horizontal.png);background-repeat:no-repeat;background-position:50% 50%;cursor:w-resize}.panel-collapse:before{content:'\f053'}.panel-collapse.hidden:before{content:'\f054'}.panel-collapse.right{left:inherit;right:0;border-right:none;border-left:solid #bfbfbf 1px}.panel-collapse.right.right:before{content:'\f054'}.panel-collapse.right.right.hidden:before{content:'\f053'}.menu-bg{background:whiteSmoke top repeat-x}div.unified-panel-body{position:absolute;top:30px;bottom:0;width:100%}#left>div.unified-panel-body,#right>div.unified-panel-body{bottom:25px}.panel-header-button{color:#333;text-decoration:none;display:inline-block;cursor:pointer;margin:-1px;padding:1px;margin-top:-0.2em;padding-right:.5em;padding-left:.5em}.panel-header-button:hover{color:maroon;-webkit-transition:color .25s linear;transition:color .25s linear}.panel-header-button .caret{margin-top:7px}.panel-header-button.popup{padding-right:1.75em;background:url(../images/dropdownarrow.png) no-repeat right 7px}#DD-helper{background:white;opacity:0;z-index:900;position:absolute;top:0;left:0;width:100%;height:100%}.panel-error-message,.panel-warning-message,.panel-done-message,.panel-info-message{height:30px;line-height:30px;padding:0;padding-left:26px;background-color:#f8cfce;background-image:url(error_small.png);background-repeat:no-repeat;background-position:6px 50%}.panel-warning-message{background-image:url(warn_small.png);background-color:#fae4c5}.panel-done-message{background-image:url(ok_small.png);background-color:#b4eeb4}.panel-info-message{background-image:url(info_small.png);background-color:#a8e2f3}#masthead{position:absolute;top:0;left:0;width:100%;min-width:990px;padding:0}#masthead .nav{z-index:15001}#masthead .nav>li>a{cursor:pointer;text-decoration:none}#masthead .nav>li>a:hover{color:gold}#masthead li.dropdown>a:hover .caret{border-top-color:gold;border-bottom-color:gold}#masthead .navbar-brand{position:absolute;left:0;top:0;font-family:verdana;font-weight:bold;font-size:20px;line-height:1;color:white;padding:5px 20px 12px;margin-left:-15px;z-index:2000}#masthead .navbar-brand img{display:inline;width:26px;vertical-align:top}#masthead .navbar-brand a{color:white;text-decoration:none}#masthead .iconbar{position:absolute;top:7px;right:110px;cursor:pointer;color:#999;overflow:hidden}#masthead .iconbar .symbol{float:left;margin:0 10px;font-size:11px}#masthead .iconbar .symbol .number{font-weight:bold;font-size:10px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;position:relative;left:23px;top:-12px}#masthead .iconbar .toggle{color:gold}.quota-meter-container{position:absolute;top:0;right:0;height:32px}.quota-meter{position:absolute;top:8px;right:8px;height:16px;width:100px;background-color:#f5f5f5}.quota-meter-bar{position:absolute;top:0;left:0;height:16px;background-color:#5f6990}.quota-meter-bar-warn{background-color:#5a3e15}.quota-meter-bar-error{background-color:#5a1e1c}.quota-meter-text{position:absolute;top:50%;left:0;width:100px;height:16px;margin-top:-6px;text-align:center;z-index:9001;color:#000;white-space:nowrap}div.metadataForm{border:solid #aaa 1px}div.metadataFormTitle{font-weight:bold;padding:5px;padding-left:10px;padding-right:10px;background:#ccc;background-repeat:repeat-x;background-position:top;border-bottom:solid #aaa 1px}div.metadataFormBody{background:#fff;padding:5px 0}div.metadataFormBody div.metadataFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #dcb790 1px;margin-bottom:5px}div.metadataFormDisabled div.metadataFormTitle{background:#eee;border-color:#999}div.metadataFormDisabled{border-color:#999}div.metadataHelpBody{width:100%;overflow:auto}div.titleRow{font-weight:bold;border-bottom:dotted gray 1px;margin-bottom:.5em;padding-bottom:.25em}div.toolFormBody div.toolFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #d6b161 1px;margin-bottom:5px}div.toolFormDisabled div.toolFormTitle{background:#f5f5f5;border-color:#bfbfbf}div.toolFormDisabled{border-color:#bfbfbf}div.toolHelp{margin-top:15px;padding:5px}div.toolHelpBody{width:100%}.toolForm.toolFormInCanvas{border:solid #d6b161 1px;background:#fff}.toolForm.toolFormInCanvas.toolForm-active{border:solid #5f6990 3px;margin:4px}.toolForm.toolFormInCanvas .toolFormTitle{font-size:12px;line-height:1.42857143}div.form,div.toolForm{border:solid #d6b161 1px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}div.form-title,div.toolFormTitle{padding:5px 10px;background:#ebd9b2;border-bottom:solid #d6b161 1px}div.form-body{padding:5px 0}div.form-row{padding:5px 10px}div.form-title-row{padding:5px 10px}div.repeat-group-item{border-left:solid #d6b161 5px;margin-left:10px;margin-bottom:10px}div.form-row-error{background:#f8cfce}div.form-row label{font-weight:bold;display:block;margin-bottom:.2em}div.form-row label.inline{display:inline}div.form-row-input{width:90%;float:left}div.form-row-input label{font-weight:normal;display:inline}div.form-row-error-message{width:300px;float:left;color:red;font-weight:bold;padding:3px 0}.form-row .help,.toolParamHelp,.ui-table-form-info{color:#666}.form-row .help a,.toolParamHelp a{color:#666}.form-row.form-actions{background:whiteSmoke;border-top:solid #ddd 1px;padding-top:10px;padding-bottom:10px;margin-top:5px}select{padding:2px;font-size:12px;line-height:1.42857143}select,input,textarea{font:inherit}.form-row select,.form-row textarea,.form-row input[type="text"],.form-row input[type="file"],.form-row input[type="password"]{max-width:90%}textarea,input[type="text"],input[type="password"]{font-size:12px;line-height:1.42857143;border:1px solid #aaa;padding:3px}input[type="submit"],button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}input[type="submit"]:focus,button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="submit"]:hover,button:hover,input[type="submit"]:focus,button:focus{color:#333;text-decoration:none}input[type="submit"]:active,button:active,input[type="submit"].active,button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}input[type="submit"].disabled,button.disabled,input[type="submit"][disabled],button[disabled],fieldset[disabled] input[type="submit"],fieldset[disabled] button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}input[type="submit"]:hover,button:hover,input[type="submit"]:focus,button:focus,input[type="submit"]:active,button:active,input[type="submit"].active,button.active,.open .dropdown-toggleinput[type="submit"],.open .dropdown-togglebutton{color:#333;background-color:#dedede;border-color:#a1a1a1}input[type="submit"]:active,button:active,input[type="submit"].active,button.active,.open .dropdown-toggleinput[type="submit"],.open .dropdown-togglebutton{background-image:none}input[type="submit"].disabled,button.disabled,input[type="submit"][disabled],button[disabled],fieldset[disabled] input[type="submit"],fieldset[disabled] button,input[type="submit"].disabled:hover,button.disabled:hover,input[type="submit"][disabled]:hover,button[disabled]:hover,fieldset[disabled] input[type="submit"]:hover,fieldset[disabled] button:hover,input[type="submit"].disabled:focus,button.disabled:focus,input[type="submit"][disabled]:focus,button[disabled]:focus,fieldset[disabled] input[type="submit"]:focus,fieldset[disabled] button:focus,input[type="submit"].disabled:active,button.disabled:active,input[type="submit"][disabled]:active,button[disabled]:active,fieldset[disabled] input[type="submit"]:active,fieldset[disabled] button:active,input[type="submit"].disabled.active,button.disabled.active,input[type="submit"][disabled].active,button[disabled].active,fieldset[disabled] input[type="submit"].active,fieldset[disabled] button.active{background-color:#f2f2f2;border-color:#bfbfbf}input[type="submit"].btn-primary,button.btn-primary{color:#fff;background-color:#5f6990;border-color:#0e0f15}input[type="submit"].btn-primary:hover,button.btn-primary:hover,input[type="submit"].btn-primary:focus,button.btn-primary:focus,input[type="submit"].btn-primary:active,button.btn-primary:active,input[type="submit"].btn-primary.active,button.btn-primary.active,.open .dropdown-toggleinput[type="submit"].btn-primary,.open .dropdown-togglebutton.btn-primary{color:#fff;background-color:#4e5777;border-color:#000}input[type="submit"].btn-primary:active,button.btn-primary:active,input[type="submit"].btn-primary.active,button.btn-primary.active,.open .dropdown-toggleinput[type="submit"].btn-primary,.open .dropdown-togglebutton.btn-primary{background-image:none}input[type="submit"].btn-primary.disabled,button.btn-primary.disabled,input[type="submit"].btn-primary[disabled],button.btn-primary[disabled],fieldset[disabled] input[type="submit"].btn-primary,fieldset[disabled] button.btn-primary,input[type="submit"].btn-primary.disabled:hover,button.btn-primary.disabled:hover,input[type="submit"].btn-primary[disabled]:hover,button.btn-primary[disabled]:hover,fieldset[disabled] input[type="submit"].btn-primary:hover,fieldset[disabled] button.btn-primary:hover,input[type="submit"].btn-primary.disabled:focus,button.btn-primary.disabled:focus,input[type="submit"].btn-primary[disabled]:focus,button.btn-primary[disabled]:focus,fieldset[disabled] input[type="submit"].btn-primary:focus,fieldset[disabled] button.btn-primary:focus,input[type="submit"].btn-primary.disabled:active,button.btn-primary.disabled:active,input[type="submit"].btn-primary[disabled]:active,button.btn-primary[disabled]:active,fieldset[disabled] input[type="submit"].btn-primary:active,fieldset[disabled] button.btn-primary:active,input[type="submit"].btn-primary.disabled.active,button.btn-primary.disabled.active,input[type="submit"].btn-primary[disabled].active,button.btn-primary[disabled].active,fieldset[disabled] input[type="submit"].btn-primary.active,fieldset[disabled] button.btn-primary.active{background-color:#5f6990;border-color:#0e0f15}.search-query{display:inline-block;padding:4px;font-size:12px;line-height:1.42857143;color:#555;border:1px solid #aaa;padding-left:14px !important;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;max-width:auto}.search-query:focus{border-color:rgba(24,132,218,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);outline:0;outline:thin dotted \9}.search-spinner{position:absolute;display:none;right:6px;top:9px}#search-clear-btn{position:absolute;right:6px;top:9px;display:block;font-size:1.4em !important;text-decoration:none;color:#888;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#search-clear-btn:before{content:"\f057"}.errormessagelarge,.warningmessagelarge,.donemessagelarge,.infomessagelarge{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px;min-height:36px;padding-left:52px;background-image:url(error_large.png);background-repeat:no-repeat;background-position:10px 8px}.errormessagelarge h4,.warningmessagelarge h4,.donemessagelarge h4,.infomessagelarge h4{margin-top:0;color:inherit}.errormessagelarge .alert-link,.warningmessagelarge .alert-link,.donemessagelarge .alert-link,.infomessagelarge .alert-link{font-weight:bold}.errormessagelarge>p,.warningmessagelarge>p,.donemessagelarge>p,.infomessagelarge>p,.errormessagelarge>ul,.warningmessagelarge>ul,.donemessagelarge>ul,.infomessagelarge>ul{margin-bottom:0}.errormessagelarge>p+p,.warningmessagelarge>p+p,.donemessagelarge>p+p,.infomessagelarge>p+p{margin-top:5px}.errormessagelarge{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a;padding-left:52px}.errormessagelarge hr{border-top-color:#c4211d}.errormessagelarge .alert-link{color:#000}.warningmessagelarge{background-color:#fae4c5;border-color:#e18c13;color:#1c1306;padding-left:52px;background-image:url(warn_large.png)}.warningmessagelarge hr{border-top-color:#c97d11}.warningmessagelarge .alert-link{color:#000}.donemessagelarge{background-color:#b4eeb4;border-color:#29ad29;color:#010301;padding-left:52px;background-image:url(ok_large.png)}.donemessagelarge hr{border-top-color:#249924}.donemessagelarge .alert-link{color:#000}.infomessagelarge{background-color:#a8e2f3;border-color:#1992b6;color:#000;background-image:url(info_large.png)}.infomessagelarge hr{border-top-color:#16809f}.infomessagelarge .alert-link{color:#000}.screencastBox{padding-left:10px;border-color:#aa6;background-color:#ffc;background-image:none}.errormessage,.warningmessage,.donemessage,.infomessage,.errormessagesmall,.warningmessagesmall,.donemessagesmall,.infomessagesmall{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px;padding:5px;padding-left:25px;min-height:15px;background-image:url(error_small.png);background-repeat:no-repeat;background-position:5px 5px}.errormessage h4,.warningmessage h4,.donemessage h4,.infomessage h4,.errormessagesmall h4,.warningmessagesmall h4,.donemessagesmall h4,.infomessagesmall h4{margin-top:0;color:inherit}.errormessage .alert-link,.warningmessage .alert-link,.donemessage .alert-link,.infomessage .alert-link,.errormessagesmall .alert-link,.warningmessagesmall .alert-link,.donemessagesmall .alert-link,.infomessagesmall .alert-link{font-weight:bold}.errormessage>p,.warningmessage>p,.donemessage>p,.infomessage>p,.errormessagesmall>p,.warningmessagesmall>p,.donemessagesmall>p,.infomessagesmall>p,.errormessage>ul,.warningmessage>ul,.donemessage>ul,.infomessage>ul,.errormessagesmall>ul,.warningmessagesmall>ul,.donemessagesmall>ul,.infomessagesmall>ul{margin-bottom:0}.errormessage>p+p,.warningmessage>p+p,.donemessage>p+p,.infomessage>p+p,.errormessagesmall>p+p,.warningmessagesmall>p+p,.donemessagesmall>p+p,.infomessagesmall>p+p{margin-top:5px}.errormessage,.errormessagesmall{background-color:#f8cfce;border-color:#da2520;color:#1f0a0a}.errormessage hr,.errormessagesmall hr{border-top-color:#c4211d}.errormessage .alert-link,.errormessagesmall .alert-link{color:#000}.warningmessage,.warningmessagesmall{background-color:#fae4c5;border-color:#e18c13;color:#1c1306;background-image:url(warn_small.png)}.warningmessage hr,.warningmessagesmall hr{border-top-color:#c97d11}.warningmessage .alert-link,.warningmessagesmall .alert-link{color:#000}.donemessage,.donemessagesmall{background-color:#b4eeb4;border-color:#29ad29;color:#010301;background-image:url(ok_small.png)}.donemessage hr,.donemessagesmall hr{border-top-color:#249924}.donemessage .alert-link,.donemessagesmall .alert-link{color:#000}.infomessage,.infomessagesmall{background-color:#a8e2f3;border-color:#1992b6;color:#000;background-image:url(info_small.png)}.infomessage hr,.infomessagesmall hr{border-top-color:#16809f}.infomessage .alert-link,.infomessagesmall .alert-link{color:#000}.errormark,.warningmark,.donemark,.infomark,.ok_bgr,.err_bgr{padding-left:20px;min-height:15px;background:url(error_small.png) no-repeat}.warningmark{background-image:url(warn_small.png)}.donemark{background-image:url(ok_small.png)}.infomark,.ok_bgr{background-image:url(info_small.png)}table.simple{font-size:12px;background:#fff;margin:1em;border-collapse:collapse;text-align:left}table.simple th{font-size:14px;font-weight:normal;padding:10px 8px;border-bottom:2px solid #333}table.simple td{padding:10px 8px 0 8px}table.simple tbody tr:hover td{color:#333}table.tabletip{width:100%;border-collapse:collapse;text-align:left}table.tabletip th{white-space:nowrap;border-bottom:1px solid #444;padding-right:3px}table.tabletip td{border-bottom:1px solid #ddd}table.tabletip tbody tr:hover td{background-color:#eee}table.colored{border-top:solid #d6b161 1px;border-bottom:solid #d6b161 1px}table.colored td,table.colored th{text-align:left;padding:5px;line-height:1.42857143}table.colored tr.header{background:#ebd9b2;color:#000;background-repeat:repeat-x;background-position:top;border-bottom:solid #d6b161 1px;font-weight:bold}table.colored tr{background:#fff}table.colored tr.odd_row{background:#f9f9f9}div.debug{margin:10px;padding:5px;background:#ff9;border:solid #ff3 1px;color:black}.grid-header{padding-bottom:1em}.grid-header h2{margin:0;margin-bottom:.5em}.grid-header .title{font-weight:bold}.grid,.ui-table,.ui-table-plain{padding-top:1em;border-collapse:collapse;width:100%}.grid tbody td,.ui-table tbody td,.ui-table-plain tbody td{line-height:1.42857143;border-top:solid #ddd 1px;border-bottom:solid #ddd 1px;padding:5px}.grid tbody td:empty{padding:0}.grid thead tr{height:2em}.grid thead th{line-height:1.42857143;background:#ebd9b2;color:#000;border-top:solid #d6b161 1px;border-bottom:solid #d6b161 1px;padding:5px;text-align:left;white-space:nowrap}.grid tfoot td{background-color:#f8f8f8;border-top:solid #ddd 1px;border-bottom:solid #ddd 1px;padding:5px}.grid .current{background-color:#eef}.count-box{min-width:1.1em;padding:5px;border-width:1px;border-style:solid;text-align:center;display:inline-block}.text-filter-val{border:solid 1px #aaa;padding:1px 2px 1px 3px;margin-right:5px;-moz-border-radius:.5em;-webkit-border-radius:.5em;font-style:italic}.page-link a,.inactive-link{padding:0 7px 0 7px;color:#555}.inactive-link,.current-filter{font-weight:bold;color:#000}.submit-image{background:url(../images/fugue/magnifier-left.png) no-repeat center transparent;background-color:#eee;width:9.42857143;height:9.42857143;cursor:pointer;margin:0;padding:0;border:1px solid #aaa;border-left:none}#advanced-search td{padding:3px}#advanced-search table{border-collapse:separate}.delete-search-icon{background:url(../images/delete_tag_icon_gray.png) center no-repeat;display:inline-block;width:10px;cursor:pointer;height:18px;vertical-align:middle;margin-left:2px}.search-box-input{border:0;float:left;outline:medium none;font-style:italic;font-size:inherit}.search-box{vertical-align:bottom;display:inline-block;padding:0;white-space:nowrap}.gray-background{background-color:#ddd}.loading-elt-overlay{background-color:white;opacity:.5;width:100%;height:100%;z-index:14000;position:fixed;display:none}div.odd_row{background:#f9f9f9}#footer{display:none}span.toolParameterExpandableCollapsable{font-weight:bold;cursor:pointer}ul.toolParameterExpandableCollapsable{list-style:none}ul.manage-table-actions{float:right;margin-top:-2.5em}ul.manage-table-actions li{display:block;float:left;margin-left:.5em}.state-color-new{border-color:#bfbfbf;background:#eee}.state-color-upload{border-color:#1992b6;background:#a8e2f3}.state-color-waiting{border-color:#bfbfbf;background:#eee}.state-color-queued{border-color:#bfbfbf;background:#eee}.state-color-running{border-color:#aa6;background:#ffc}.state-color-ok{border-color:#29ad29;background:#b4eeb4}.state-color-error{border-color:#da2520;background:#f8cfce}.state-color-deleted{border-color:#306;background:#39f}.state-fg-new{color:#ffb030}.state-fg-upload{color:#d090d0}.state-fg-waiting{color:#e8c060}.state-fg-queued{color:#888}.state-fg-running{color:#aa6}.state-fg-ok{color:#6a6}.state-fg-error{color:#a66}.state-fg-deleted{color:#39f}button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}button:hover,button:focus{color:#333;text-decoration:none}button:active,button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}button.disabled,button[disabled],fieldset[disabled] button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}button:hover,button:focus,button:active,button.active,.open .dropdown-togglebutton{color:#333;background-color:#dedede;border-color:#a1a1a1}button:active,button.active,.open .dropdown-togglebutton{background-image:none}button.disabled,button[disabled],fieldset[disabled] button,button.disabled:hover,button[disabled]:hover,fieldset[disabled] button:hover,button.disabled:focus,button[disabled]:focus,fieldset[disabled] button:focus,button.disabled:active,button[disabled]:active,fieldset[disabled] button:active,button.disabled.active,button[disabled].active,fieldset[disabled] button.active{background-color:#f2f2f2;border-color:#bfbfbf}.action-button{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:3px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf}.action-button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.action-button:hover,.action-button:focus{color:#333;text-decoration:none}.action-button:active,.action-button.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.action-button.disabled,.action-button[disabled],fieldset[disabled] .action-button{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.action-button:hover,.action-button:focus,.action-button:active,.action-button.active,.open .dropdown-toggle.action-button{color:#333;background-color:#dedede;border-color:#a1a1a1}.action-button:active,.action-button.active,.open .dropdown-toggle.action-button{background-image:none}.action-button.disabled,.action-button[disabled],fieldset[disabled] .action-button,.action-button.disabled:hover,.action-button[disabled]:hover,fieldset[disabled] .action-button:hover,.action-button.disabled:focus,.action-button[disabled]:focus,fieldset[disabled] .action-button:focus,.action-button.disabled:active,.action-button[disabled]:active,fieldset[disabled] .action-button:active,.action-button.disabled.active,.action-button[disabled].active,fieldset[disabled] .action-button.active{background-color:#f2f2f2;border-color:#bfbfbf}a.action-button{color:#333;text-decoration:none}.action-button>img{vertical-align:middle}.action-button:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton{padding:4px 10px;margin-bottom:0;font-size:12px;font-weight:normal;line-height:1.42857143;text-align:center;vertical-align:middle;border:1px solid transparent;border-radius:3px;white-space:nowrap;white-space:normal;color:#333;background-color:#f2f2f2;border-color:#bfbfbf;display:inline-block;cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.menubutton:hover,.menubutton:focus{color:#333;text-decoration:none}.menubutton:active,.menubutton.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton.disabled,.menubutton[disabled],fieldset[disabled] .menubutton{cursor:not-allowed;pointer-events:none;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.menubutton:hover,.menubutton:focus,.menubutton:active,.menubutton.active,.open .dropdown-toggle.menubutton{color:#333;background-color:#dedede;border-color:#a1a1a1}.menubutton:active,.menubutton.active,.open .dropdown-toggle.menubutton{background-image:none}.menubutton.disabled,.menubutton[disabled],fieldset[disabled] .menubutton,.menubutton.disabled:hover,.menubutton[disabled]:hover,fieldset[disabled] .menubutton:hover,.menubutton.disabled:focus,.menubutton[disabled]:focus,fieldset[disabled] .menubutton:focus,.menubutton.disabled:active,.menubutton[disabled]:active,fieldset[disabled] .menubutton:active,.menubutton.disabled.active,.menubutton[disabled].active,fieldset[disabled] .menubutton.active{background-color:#f2f2f2;border-color:#bfbfbf}.menubutton:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.menubutton a{text-decoration:none}.menubutton .label,.menubutton>label{position:relative;display:inline-block;border-right:none;text-decoration:none;text-align:left;max-height:2.85714286;line-height:1.42857143;overflow:hidden;text-overflow:ellipsis}.menubutton.popup .label{border-right:solid #bfbfbf 1px;padding-right:6px}.menubutton.popup,.menubutton.popup.split{padding-right:18px}.menubutton.popup:after,.menubutton.popup.split:after{top:45%;position:absolute;right:6px;display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:""}.btn-default .menubutton.popup:after,.btn-default .menubutton.popup.split:after{border-top-color:#333}.btn-primary .menubutton.popup:after,.btn-primary .menubutton.popup.split:after,.btn-success .menubutton.popup:after,.btn-success .menubutton.popup.split:after,.btn-warning .menubutton.popup:after,.btn-warning .menubutton.popup.split:after,.btn-danger .menubutton.popup:after,.btn-danger .menubutton.popup.split:after,.btn-info .menubutton.popup:after,.btn-info .menubutton.popup.split:after{border-top-color:#fff}div.popmenu-wrapper{position:absolute;top:100%;z-index:20000}div.popmenu-wrapper ul.dropdown-menu{display:block;position:relative;float:none}ul.dropdown-menu a{text-decoration:none}ul.dropdown-menu li.head>a{text-shadow:0 1px 0 rgba(255,255,255,0.5);font-size:11px;font-weight:bold;line-height:1.42857143;color:#999;text-transform:uppercase}ul.dropdown-menu li.head>a:hover{background:inherit;border-color:transparent}.popup-arrow{cursor:pointer;text-decoration:none;color:#555}.popup-arrow:hover{color:black}div.permissionContainer{padding-left:20px}.text-content hr{display:block;background:black;color:black;width:100%;height:1px;border:none;background:#aaa;color:#aaa}.text-content table{border-collapse:collapse;border-top:1px solid #ccc;border-left:1px solid #ccc}.text-content blockquote{color:#666}.text-content fieldset{border-color:#ccc;border:1px solid #ccc}.text-content th,.text-content td{border-bottom:1px solid #ddd;border-right:1px solid #ccc}.text-content th,.text-content td{padding:.8em}.icon-button{width:16px;height:16px;display:block;float:left;margin-left:2px;text-indent:20px;background-repeat:no-repeat;background-position:0 0;padding:0}.fa-icon-button{text-align:center;text-decoration:none;display:inline-block;cursor:pointer;width:16px;height:16px;line-height:8px}.fa-icon-button:hover{color:maroon;-webkit-transition:color .25s linear;transition:color .25s linear}.editable-text{cursor:pointer}.editable-text:hover{cursor:text;border:dotted #999 1px}.icon-button.multiinput{background:url(../images/documents-stack.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.icon-button.multiinput.disabled{background:url(../images/documents-stack-faded.png) no-repeat;cursor:pointer}.icon-button.link{background:url(../images/silk/link.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.icon-button.link-broken{background:url(../images/silk/link_break.png) no-repeat;cursor:pointer;float:none;display:inline-block;margin-left:10px}.workflow-invocation-complete{border:solid 1px #6a6;border-left-width:5px;margin:10px 0;padding-left:5px}.icon-btn,.ui-button-icon,.ui-button-icon-plain{display:inline-block;height:22px;width:22px;text-align:center;line-height:19px;font-size:1.2em;border-radius:3px;border:1px solid #bfbfbf;background-color:#f2f2f2;color:#333;cursor:pointer}.icon-btn:focus,.icon-btn:hover{outline:0;background-color:white;color:maroon}.icon-btn.disabled{background-color:transparent;color:#bbb;border-color:#bbb}.icon-btn-group{display:inline-block}.icon-btn-group .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.icon-btn-group .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.icon-btn-group .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.icon-btn-group .icon-btn:only-child{margin:0;border-radius:3px}.list-item{border:1px solid #bfbfbf}.list-item .vertical-spacing{margin-bottom:8px}.list-item .info-section{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px}.list-item .padded{padding:6px 10px 6px 8px}.list-item .warnings:not(:empty){padding-top:4px}.list-item .warnings [class$=messagesmall]{margin:6px 10px 2px 8px;font-size:90%}.list-item .warnings [class$=messagesmall]:first-child{margin-top:0}.list-item .warnings [class$=messagesmall]:last-child{margin-bottom:0}.list-item .help-text{font-weight:normal;color:#555}.list-item .selector{float:left;display:none;width:32px;height:32px;margin:0 0 -6px 0;padding:8px 0 2px 7px;font-size:80%;color:#333;cursor:pointer;vertical-align:middle}.list-item .selector:hover{color:maroon}.list-item .title-bar{cursor:pointer;outline:none;padding:6px 10px 6px 8px}.list-item .title-bar .title{display:inline;font-weight:bold;text-decoration:underline;word-wrap:break-word;word-break:break-all;line-height:16px}.list-item .title-bar .subtitle{color:#777;font-size:90%}.list-item .title-bar .subtitle a{color:inherit}.list-item .primary-actions{display:inline-block;float:right;margin:6px 10px 0}.list-item .primary-actions .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.list-item .primary-actions .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.list-item .primary-actions .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.list-item .primary-actions .icon-btn:only-child{margin:0;border-radius:3px}.list-item .primary-actions .icon-btn{margin-left:2px}.list-item .details{display:none;padding:0 10px 6px 8px}.list-item .details>[class$=messagesmall]{margin:0 0 8px 0}.list-item .details label{margin:0;padding:0;font-weight:normal}.list-item .details .prompt{font-weight:normal;color:#555}.list-item .details .prompt:after{content:':';margin-right:4px}.list-panel .vertical-spacing{margin-bottom:8px}.list-panel .controls>*:not(:empty){margin-bottom:8px}.list-panel .controls .name{word-wrap:break-word;font-weight:bold}.list-panel .controls .name input{width:100%;margin:-3px 0 -3px -3px;font-weight:bold}.list-panel .controls .subtitle{color:#777;font-size:90%}.list-panel .controls .subtitle a{color:inherit}.list-panel .controls .editable-text{border:solid transparent 1px}.list-panel .controls .editable-text:hover{cursor:pointer;border:1px dotted #999}.list-panel .controls .actions{display:inline-block;float:right}.list-panel .controls .actions .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.list-panel .controls .actions .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.list-panel .controls .actions .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.list-panel .controls .actions .icon-btn:only-child{margin:0;border-radius:3px}.list-panel .controls .actions .icon-btn{margin-left:2px}.list-panel .controls .messages:before,.list-panel .controls .messages:after{content:" ";display:table}.list-panel .controls .messages:after{clear:both}.list-panel .controls .messages:before,.list-panel .controls .messages:after{content:" ";display:table}.list-panel .controls .messages:after{clear:both}.list-panel .controls .messages [class$=message],.list-panel .controls .messages [class$=messagesmall]{margin:0}.list-panel .controls .messages [class$=message]:not(:last-child),.list-panel .controls .messages [class$=messagesmall]:not(:last-child){margin-bottom:8px}.list-panel .controls .list-actions{display:none}.list-panel .controls .list-actions:before,.list-panel .controls .list-actions:after{content:" ";display:table}.list-panel .controls .list-actions:after{clear:both}.list-panel .controls .list-actions:before,.list-panel .controls .list-actions:after{content:" ";display:table}.list-panel .controls .list-actions:after{clear:both}.list-panel .controls .list-actions .btn{padding-top:2px;padding-bottom:2px;font-size:90%}.list-panel .controls .list-actions .list-action-menu{float:right}.list-panel .list-items .list-item{border-width:1px 0 1px 0}.list-panel .list-items .list-item:not(:last-child){border-bottom-width:0}.list-panel .empty-message{display:none;margin:0}.list-item .details .list-panel{margin-top:8px;border-radius:3px;background:white;padding:4px}.list-item .details .list-panel .list-items{border:1px solid #bfbfbf;border-radius:3px}.list-item .details .list-panel .list-items .list-item:first-child{border-top-width:0;border-radius:3px 3px 0 0}.list-item .details .list-panel .list-items .list-item:last-child{border-bottom-width:0;border-radius:0 0 3px 3px}.history-panel-header .panel-header-button{display:inline-block;height:22px;width:22px;text-align:center;line-height:19px;font-size:1.2em;padding:0}.state-icon{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;margin-right:4px;vertical-align:middle;width:16px;height:16px;line-height:16px;text-align:center;font-size:16px}.state-icon-running{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.state-icon-running:before{content:"\f110"}.state-icon-upload{overflow:hidden}.state-icon-upload:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.state-icon-error{background-color:white;border-radius:8px}.state-icon-error:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.has-job-state-mixin.state-ok,.has-job-state-mixin.state-failed_metadata{background:#b4eeb4}.has-job-state-mixin.state-ok .state-icon,.has-job-state-mixin.state-failed_metadata .state-icon{display:none}.has-job-state-mixin.state-error,.has-job-state-mixin.state-empty{background:#f8cfce}.has-job-state-mixin.state-error .state-icon,.has-job-state-mixin.state-empty .state-icon{background-color:white;border-radius:8px}.has-job-state-mixin.state-error .state-icon:before,.has-job-state-mixin.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.has-job-state-mixin.state-upload{background:#a8e2f3}.has-job-state-mixin.state-upload .state-icon{overflow:hidden}.has-job-state-mixin.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.has-job-state-mixin.state-queued{background:#eee}.has-job-state-mixin.state-queued .state-icon:before{content:"\f017"}.has-job-state-mixin.state-running,.has-job-state-mixin.state-setting_metadata{background:#ffc}.has-job-state-mixin.state-running .state-icon,.has-job-state-mixin.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.has-job-state-mixin.state-running .state-icon:before,.has-job-state-mixin.state-setting_metadata .state-icon:before{content:"\f110"}.has-job-state-mixin.state-paused{background:#d9edf7}.has-job-state-mixin.state-paused .state-icon:before{content:"\f04c"}.has-job-state-mixin.state-discarded{background:#eee}.has-job-state-mixin.state-discarded .state-icon:before{content:"\f014"}.has-job-state-mixin.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.has-job-state-mixin.state-noPermission .state-icon{font-size:20px}.has-job-state-mixin.state-noPermission .state-icon:before{content:"\f023"}.has-job-state-mixin.state-new{background:#eee}.has-job-state-mixin.state-new .state-icon:before{content:"\f06a"}.dataset.state-ok,.dataset.state-failed_metadata{background:#b4eeb4}.dataset.state-ok .state-icon,.dataset.state-failed_metadata .state-icon{display:none}.dataset.state-error,.dataset.state-empty{background:#f8cfce}.dataset.state-error .state-icon,.dataset.state-empty .state-icon{background-color:white;border-radius:8px}.dataset.state-error .state-icon:before,.dataset.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.dataset.state-upload{background:#a8e2f3}.dataset.state-upload .state-icon{overflow:hidden}.dataset.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.dataset.state-queued{background:#eee}.dataset.state-queued .state-icon:before{content:"\f017"}.dataset.state-running,.dataset.state-setting_metadata{background:#ffc}.dataset.state-running .state-icon,.dataset.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.dataset.state-running .state-icon:before,.dataset.state-setting_metadata .state-icon:before{content:"\f110"}.dataset.state-paused{background:#d9edf7}.dataset.state-paused .state-icon:before{content:"\f04c"}.dataset.state-discarded{background:#eee}.dataset.state-discarded .state-icon:before{content:"\f014"}.dataset.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.dataset.state-noPermission .state-icon{font-size:20px}.dataset.state-noPermission .state-icon:before{content:"\f023"}.dataset.state-new{background:#eee}.dataset.state-new .state-icon:before{content:"\f06a"}.dataset .details .summary{margin-bottom:8px}.dataset .details .summary .blurb{margin-bottom:2px}.dataset .details .summary .datatype,.dataset .details .summary .dbkey{display:inline}.dataset .details .summary .datatype .value,.dataset .details .summary .dbkey .value{font-weight:bold}.dataset .details .summary .datatype .value:after{content:',';font-weight:normal;color:#555;margin-right:4px}.dataset .details .summary .dbkey:after{content:' ';display:block;margin-bottom:8px}.dataset .details .summary .info{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;overflow:auto}.dataset .details .summary .info .value{white-space:pre-line}.dataset .details .summary .job-error-text{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;overflow:auto;white-space:pre}.dataset .details .actions .metafile-dropdown{display:inline-block}.dataset .details .actions .visualizations-dropdown{display:inline-block}.dataset .details .actions .left{display:inline-block;float:left}.dataset .details .actions .left .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.dataset .details .actions .left .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.dataset .details .actions .left .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.dataset .details .actions .left .icon-btn:only-child{margin:0;border-radius:3px}.dataset .details .actions .left .icon-btn{margin-right:2px}.dataset .details .actions .left .icon-btn.visualization-btn{margin-left:0;border-radius:0 3px 3px 0;border-right:1px solid #bfbfbf}.dataset .details .actions .right{display:inline-block;float:right}.dataset .details .actions .right .icon-btn:not(:last-child){margin:0;border-radius:0;border-right:none}.dataset .details .actions .right .icon-btn:first-child{margin-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.dataset .details .actions .right .icon-btn:last-child{margin-left:0;border-radius:0 3px 3px 0}.dataset .details .actions .right .icon-btn:only-child{margin:0;border-radius:3px}.dataset .details .actions .right .icon-btn{margin-left:2px}.dataset .details .actions:not(:last-child){margin-bottom:8px}.dataset .details .tags-display{display:none;margin-bottom:8px}.dataset .details .tags-display .select2-container{min-width:0}.dataset .details .tags-display .select2-container .select2-choices{border-radius:3px}.dataset .details .annotation-display{display:none;margin-bottom:8px}.dataset .details .annotation-display .annotation{border-radius:3px;border:1px solid rgba(153,153,153,0.3);padding:4px;white-space:pre-wrap;overflow:auto}.dataset .details .annotation-display .annotation:empty:after{position:relative;top:-4px;font-size:10px;font-style:italic;color:grey;content:'Click here to edit annotation'}.dataset .details .annotation-display textarea{margin:0 0 2px 0;display:block;border-radius:3px;width:100%}.dataset .details .display-applications .display-application:last-child{margin-bottom:8px}.dataset .details .dataset-peek{margin-bottom:8px;width:100%;margin:0;border-radius:3px;background:white;color:black;font-size:10px;overflow:auto}.dataset .details .dataset-peek th{color:white;background:#5f6990}.dataset .details .dataset-peek table,.dataset .details .dataset-peek th,.dataset .details .dataset-peek tr,.dataset .details .dataset-peek td{font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:10px}.history-content.dataset .title-bar .title .hid:after,.history-content.dataset-collection .title-bar .title .hid:after{content:':'}.history-panel>.controls{margin:10px 10px 0 10px;padding:0}.history-panel>.controls .messages{margin-bottom:0}.history-panel>.controls .messages>*{cursor:pointer}.history-panel>.controls .messages>*:last-child{margin-bottom:8px}.history-panel>.controls .title{margin-bottom:4px}.history-panel>.controls .title input{width:100%;margin:-3px 0 -3px -3px;font-weight:bold}.history-panel>.controls .subtitle:not(:empty){margin-top:-4px;margin-bottom:6px}.history-panel>.controls .history-size{display:inline-block;margin-top:4px;color:black}.history-panel>.controls .actions{margin-bottom:0}.history-panel>.controls .quota-message{display:none;margin:8px 0 5px 0}.history-panel>.controls .tags-display,.history-panel>.controls .annotation-display{display:none;margin-bottom:8px}.history-panel>.controls .tags-display label,.history-panel>.controls .annotation-display label{display:block;margin:0;padding:0;font-weight:normal;color:#555}.history-panel>.controls .tags-display label:after,.history-panel>.controls .annotation-display label:after{content:':'}.history-panel>.controls .tags-display .select2-container{min-width:0}.history-panel>.controls .tags-display .select2-container .select2-choices{border-radius:3px}.history-panel>.controls .tags-display input{border-radius:3px}.history-panel>.controls .annotation-display .annotation{border-radius:3px;border:1px solid rgba(153,153,153,0.5);padding:4px;white-space:pre-wrap;overflow:auto}.history-panel>.controls .annotation-display .annotation:empty:after{position:relative;top:-4px;font-size:10px;font-style:italic;color:grey;content:'Click here to edit annotation'}.history-panel>.controls .annotation-display textarea{margin:0 0 2px 0;border-radius:3px;width:100%}.history-panel .list-item.history-content{border-width:1px 0 0 0}.history-panel .list-item.history-content:last-child{border-width:1px 0 1px 0}.history-panel .empty-message{margin:0 10px 0 10px}.history-panel .dataset-collection .subtitle{margin-top:2px}.annotated-history-panel>.controls{margin:0}.annotated-history-panel>.controls .name{font-size:150%;margin-bottom:4px}.annotated-history-panel>.controls .subtitle{color:black}.annotated-history-panel>.controls .subtitle:not(:empty){margin:0 0 0 4px}.annotated-history-panel>.controls .messages:not(:empty){margin-top:16px}.annotated-history-panel>.controls .annotation-display{display:block;border:1px solid lightgrey;border-width:1px 0 0 0;padding:4px 0 4px 0;margin:4px 4px 0 4px;white-space:pre-wrap}.annotated-history-panel>.controls .annotation-display:empty{display:none}.annotated-history-panel>.controls .search{padding:16px 0 0 0;margin-bottom:0}.annotated-history-panel table.list-items{width:100%;table-layout:fixed}.annotated-history-panel table.list-items .headers{border-bottom:2px solid grey}.annotated-history-panel table.list-items .headers th{padding:8px}.annotated-history-panel table.list-items>tbody>tr{cursor:pointer;border-bottom:1px solid grey}.annotated-history-panel table.list-items>tbody>tr>td{margin:0;padding:0;vertical-align:top}.annotated-history-panel table.list-items>tbody>tr>td:nth-child(1){width:50%}.annotated-history-panel table.list-items>tbody>tr>td:nth-child(2){padding:8px 16px 8px 16px;white-space:pre-wrap}.annotated-history-panel table.list-items>tbody>tr>td>.list-item{border:0}.annotated-history-panel .empty-message{margin-top:8px}.current-history-panel .list-item.history-content.current-content{border-left:5px solid #4e5777}.multi-panel-history{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.multi-panel-history .flex-row-container,.multi-panel-history .flex-column-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;min-height:0;-webkit-align-items:stretch;-ms-align-items:stretch;align-items:stretch;-webkit-align-content:stretch;-ms-align-content:stretch;align-content:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.multi-panel-history .flex-row-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.multi-panel-history .flex-column-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.multi-panel-history .flex-row,.multi-panel-history .flex-column{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.multi-panel-history .header,.multi-panel-history .footer{width:100%;background-color:lightgrey}.multi-panel-history .header .btn,.multi-panel-history .footer .btn{height:21px}.multi-panel-history .header{min-height:29px;max-height:29px}.multi-panel-history .header .more-options .btn{height:26px}.multi-panel-history .header .more-options input[type=checkbox]{margin-top:1px}.multi-panel-history .footer{min-height:0;max-height:0}.multi-panel-history .smaller-btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .control-column{margin-top:4px}.multi-panel-history .control-column .btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .control-column .search-control{display:inline-block;width:40%}.multi-panel-history .control-column .search-control .search-clear,.multi-panel-history .control-column .search-control .search-loading{margin-top:-22px}.multi-panel-history .control-column input.search-query{font-size:90%;height:21px;line-height:normal;padding:2px 2px 1px 2px}.multi-panel-history .control-column .open-more-options{padding:2px 6px 2px 6px;font-size:100%}.multi-panel-history .control-column .header-info{display:inline-block;padding:2px 4px 2px 4px;color:grey}.multi-panel-history .control-column.control-column-right,.multi-panel-history .control-column.control-column-left{margin-right:8px;margin-left:8px}.multi-panel-history .control-column.control-column-right>*,.multi-panel-history .control-column.control-column-left>*{margin:0 4px 4px 0}.multi-panel-history .control-column.control-column-center{text-align:center;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-height:22px}.multi-panel-history .control-column.control-column-right{text-align:right}.multi-panel-history .outer-middle{overflow:auto}.multi-panel-history .middle{min-width:100%;margin:0 0 0 0;background-color:white;padding:8px}.multi-panel-history .history-column{width:312px;margin:0 8px 0 0}.multi-panel-history .history-column:first-child{position:fixed;z-index:10}.multi-panel-history .history-column:first-child .history-panel{border:1px solid black;box-shadow:4px 4px 4px rgba(96,96,96,0.3)}.multi-panel-history .history-column:nth-child(2){margin-left:320px}.multi-panel-history .history-column:last-child{margin-right:0}.multi-panel-history .history-column .dropdown-menu{z-index:inherit}.multi-panel-history .history-column .panel-controls{width:100%;height:24px;border-radius:3px;background-color:white;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto}.multi-panel-history .history-column .panel-controls .btn{height:20px;line-height:normal;font-size:90%;padding-top:0;padding-bottom:0}.multi-panel-history .history-column .panel-controls .pull-left .btn{margin-right:4px}.multi-panel-history .history-column .panel-controls .pull-right .btn{margin-left:4px}.multi-panel-history .history-column .panel-controls .panel-menu{z-index:1}.multi-panel-history .history-column .panel-controls .panel-menu .dropdown-menu a{text-align:left}.multi-panel-history .history-column .panel-controls .current-label{display:inline-block;color:grey;padding-left:2px;margin-top:2px}.multi-panel-history .history-column .history-panel{width:100%;border:1px solid grey;border-radius:3px;background-color:#dfe5f9;overflow:auto}body.historyPage{background:#dfe5f9;color:#000;margin:5px;border:0;padding:0}div.historyLinks{margin:5px 5px}div.historyItem{margin:0 -5px;padding:8px 10px;border-top:solid #bfbfbf 1px;border-right:none;word-wrap:break-word;background:#eee}div.historyItem .state-icon{display:inline-block;vertical-align:middle;width:16px;height:16px;background-position:0 1px;background-repeat:no-repeat}div.historyItem .historyItemTitle{font-weight:bold;line-height:16px}.historyItemContainer:last-child div.historyItem{border-bottom:solid #bfbfbf 1px}div.historyItem div.historyItem{margin-right:-11px}div.historyItem-ok,div.historyItem-failed_metadata{background:#b4eeb4}div.historyItem-ok .state-icon,div.historyItem-failed_metadata .state-icon{display:none}div.historyItem-error{background:#f8cfce}div.historyItem-error .state-icon{background-image:url(sprite-history-states.png);background-position:-15px 0;width:15px;height:15px}div.historyItem-empty{background:#f8cfce}div.historyItem-empty .state-icon{background-image:url(sprite-history-states.png);background-position:0 0;width:15px;height:15px}div.historyItem-running{background:#ffc}div.historyItem-running .state-icon{background-image:url(data_running.gif)}div.historyItem-setting_metadata{background:#ffc}div.historyItem-setting_metadata .state-icon{background-image:url(data_running.gif)}div.historyItem-upload{background:#a8e2f3}div.historyItem-upload .state-icon{background-image:url(data_upload.gif)}div.historyItem-queued{background:#eee}div.historyItem-queued .state-icon{background-image:url(sprite-history-states.png);background-position:-15px -15px;width:15px;height:15px}div.historyItem-noPermission{filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}div.historyItem-noPermission .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-noPermission .state-icon:before{content:"\f05e"}div.historyItem-paused{background:#d9edf7}div.historyItem-paused .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-paused .state-icon:before{content:"\f04c"}div.historyItem-new .state-icon{line-height:16px;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;font-family:FontAwesome;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}div.historyItem-new .state-icon:before{content:"\f071"}div.historyItemTitleBar.spinner .state-icon{background:url(data_running.gif) 0 1px no-repeat !important}div.historyItemButtons{float:right}div.historyItemButtons .icon-button.display{background-image:url(sprite-history-buttons.png);background-position:-16px -16px;width:16px;height:16px}div.historyItemButtons .icon-button.display:hover{background-image:url(sprite-history-buttons.png);background-position:-32px 0;width:16px;height:16px}div.historyItemButtons .icon-button.display_disabled{background-image:url(sprite-history-buttons.png);background-position:-32px -16px;width:16px;height:16px}div.historyItemButtons .icon-button.delete{background-image:url(sprite-history-buttons.png);background-position:0 0;width:16px;height:16px}div.historyItemButtons .icon-button.delete:hover{background-image:url(sprite-history-buttons.png);background-position:-16px 0;width:16px;height:16px}div.historyItemButtons .icon-button.delete_disabled{background-image:url(sprite-history-buttons.png);background-position:0 -16px;width:16px;height:16px}div.historyItemButtons .icon-button.edit{background-image:url(sprite-history-buttons.png);background-position:0 -32px;width:16px;height:16px}div.historyItemButtons .icon-button.edit:hover{background-image:url(sprite-history-buttons.png);background-position:-16px -32px;width:16px;height:16px}div.historyItemButtons .icon-button.edit_disabled{background-image:url(sprite-history-buttons.png);background-position:-32px -32px;width:16px;height:16px}div.historyItemBody div{padding-top:2px}pre.peek{background:white;color:black;width:100%;font-size:10px;overflow:auto}pre.peek th{color:white;background:#5f6990}pre.peek table,pre.peek th,pre.peek tr,pre.peek td{font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:10px}.dataset-collection-element.state-ok,.dataset-collection-element.state-failed_metadata{background:#b4eeb4}.dataset-collection-element.state-ok .state-icon,.dataset-collection-element.state-failed_metadata .state-icon{display:none}.dataset-collection-element.state-error,.dataset-collection-element.state-empty{background:#f8cfce}.dataset-collection-element.state-error .state-icon,.dataset-collection-element.state-empty .state-icon{background-color:white;border-radius:8px}.dataset-collection-element.state-error .state-icon:before,.dataset-collection-element.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.dataset-collection-element.state-upload{background:#a8e2f3}.dataset-collection-element.state-upload .state-icon{overflow:hidden}.dataset-collection-element.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.dataset-collection-element.state-queued{background:#eee}.dataset-collection-element.state-queued .state-icon:before{content:"\f017"}.dataset-collection-element.state-running,.dataset-collection-element.state-setting_metadata{background:#ffc}.dataset-collection-element.state-running .state-icon,.dataset-collection-element.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.dataset-collection-element.state-running .state-icon:before,.dataset-collection-element.state-setting_metadata .state-icon:before{content:"\f110"}.dataset-collection-element.state-paused{background:#d9edf7}.dataset-collection-element.state-paused .state-icon:before{content:"\f04c"}.dataset-collection-element.state-discarded{background:#eee}.dataset-collection-element.state-discarded .state-icon:before{content:"\f014"}.dataset-collection-element.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.dataset-collection-element.state-noPermission .state-icon{font-size:20px}.dataset-collection-element.state-noPermission .state-icon:before{content:"\f023"}.dataset-collection-element.state-new{background:#eee}.dataset-collection-element.state-new .state-icon:before{content:"\f06a"}.dataset-collection-element .title-bar .subtitle{margin-top:2px}.dataset-collection-element .details{display:none}.history-content.dataset-collection.state-ok,.history-content.dataset-collection.state-failed_metadata{background:#b4eeb4}.history-content.dataset-collection.state-ok .state-icon,.history-content.dataset-collection.state-failed_metadata .state-icon{display:none}.history-content.dataset-collection.state-error,.history-content.dataset-collection.state-empty{background:#f8cfce}.history-content.dataset-collection.state-error .state-icon,.history-content.dataset-collection.state-empty .state-icon{background-color:white;border-radius:8px}.history-content.dataset-collection.state-error .state-icon:before,.history-content.dataset-collection.state-empty .state-icon:before{font-size:20px;line-height:16px;color:red;content:"\f057"}.history-content.dataset-collection.state-upload{background:#a8e2f3}.history-content.dataset-collection.state-upload .state-icon{overflow:hidden}.history-content.dataset-collection.state-upload .state-icon:before{display:inline-block;-webkit-animation:eclipse 2s infinite linear;-moz-animation:eclipse 2s infinite linear;-o-animation:eclipse 2s infinite linear;animation:eclipse 2s infinite linear;content:"\f062"}@-moz-keyframes eclipse{0%{-moz-transform:translate(0, 16px)}100%{-moz-transform:translate(0, -16px)}}@-webkit-keyframes eclipse{0%{-webkit-transform:translate(0, 16px)}100%{-webkit-transform:translate(0, -16px)}}@-o-keyframes eclipse{0%{-o-transform:translate(0, 16px)}100%{-o-transform:translate(0, -16px)}}@-ms-keyframes eclipse{0%{-ms-transform:translate(0, 16px)}100%{-ms-transform:translate(0, -16px)}}@keyframes eclipse{0%{transform:translate(0, 16px)}100%{transform:translate(0, -16px)}}.history-content.dataset-collection.state-queued{background:#eee}.history-content.dataset-collection.state-queued .state-icon:before{content:"\f017"}.history-content.dataset-collection.state-running,.history-content.dataset-collection.state-setting_metadata{background:#ffc}.history-content.dataset-collection.state-running .state-icon,.history-content.dataset-collection.state-setting_metadata .state-icon{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.history-content.dataset-collection.state-running .state-icon:before,.history-content.dataset-collection.state-setting_metadata .state-icon:before{content:"\f110"}.history-content.dataset-collection.state-paused{background:#d9edf7}.history-content.dataset-collection.state-paused .state-icon:before{content:"\f04c"}.history-content.dataset-collection.state-discarded{background:#eee}.history-content.dataset-collection.state-discarded .state-icon:before{content:"\f014"}.history-content.dataset-collection.state-noPermission{background:#eee;filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6}.history-content.dataset-collection.state-noPermission .state-icon{font-size:20px}.history-content.dataset-collection.state-noPermission .state-icon:before{content:"\f023"}.history-content.dataset-collection.state-new{background:#eee}.history-content.dataset-collection.state-new .state-icon:before{content:"\f06a"}.dataset-collection-panel{margin:0;padding:0}.dataset-collection-panel .vertically-spaced{margin-top:4px}.dataset-collection-panel .controls{padding:8px}.dataset-collection-panel .controls .navigation{margin-top:4px}.dataset-collection-panel .controls .navigation .back .fa-icon{margin-right:4px;font-size:120%;font-weight:bold;text-decoration:none}.dataset-collection-panel .controls .title{margin-top:12px}.dataset-collection-panel .controls .title .name{font-weight:bold}.dataset-collection-panel .list-items .dataset-collection-element{border-width:1px 0 0 0}.dataset-collection-panel .list-items .dataset-collection-element:last-child{border-bottom-width:1px}.job.list-item{border:1px solid #bfbfbf}.job.list-item .title-bar .subtitle{color:grey;font-size:80%}.job.list-item>.details{padding:0}.job.list-item>.details .params{padding:0 8px 0 8px}.job.list-item>.details .params .param .prompt,.job.list-item>.details .params .input .prompt{font-size:80%;color:grey}.job.list-item>.details .params .param .value,.job.list-item>.details .params .input .value{display:inline-block;font-weight:bold}.job.list-item>.details .list-panel{padding:0}.job.list-item>.details .list-panel .list-items{border:0;border-radius:0}.job.list-item>.details .list-panel .list-items .list-item{border:0;border-radius:0;border-top:1px solid #bfbfbf}.collection-creator{height:100%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.collection-creator ol,.collection-creator li{list-style:none;padding:0;margin:0}.collection-creator>*:not(.popover){padding:0 8px 0 8px}.collection-creator .btn{border-color:#bfbfbf}.collection-creator .vertically-spaced{margin-top:8px}.collection-creator .scroll-container{overflow:auto}.collection-creator .truncate{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.collection-creator .empty-message{color:grey;font-style:italic}.collection-creator.flex-row-container,.collection-creator .flex-row-container,.collection-creator .flex-column-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-ms-align-items:stretch;align-items:stretch;-webkit-align-content:stretch;-ms-align-content:stretch;align-content:stretch}.collection-creator.flex-row-container,.collection-creator .flex-row-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.collection-creator .flex-row{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 0 auto}.collection-creator .flex-row.no-flex{-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 0 auto}.collection-creator .flex-column-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.collection-creator .flex-column{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 1 auto}.collection-creator .flex-column.no-flex{-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 0 auto}.collection-creator .choose-filters .help{margin-bottom:2px;font-size:90%;color:grey}.collection-creator .choose-filters button{width:100%;margin-top:2px}.collection-creator .header .alert{display:none}.collection-creator .header .alert li{list-style:circle;margin-left:32px}.collection-creator .column{width:30%}.collection-creator .column-title{height:22px;line-height:22px;overflow:hidden}.collection-creator .column-title:hover{text-decoration:underline;cursor:pointer}.collection-creator .column-title .title{font-weight:bold}.collection-creator .column-title .title-info{color:grey}.collection-creator .column-title .title-info:before{content:' - '}.collection-creator .paired-column{text-align:center;width:22%}.collection-creator .header .main-help{margin-bottom:17px;overflow:hidden;padding:15px;background:#f8f8f8}.collection-creator .header .main-help:not(.expanded){max-height:49px}.collection-creator .header .main-help:not(.expanded) .help-content p:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.collection-creator .header .main-help:not(.expanded) .help-content>*:not(:first-child){display:none}.collection-creator .header .main-help.expanded{max-height:none}.collection-creator .header .main-help .help-content i{cursor:help;border-bottom:1px dotted grey;font-style:normal}.collection-creator .header .main-help .help-content ul,.collection-creator .header .main-help .help-content li{list-style:circle;margin-left:16px}.collection-creator .header .main-help .help-content .less-help{display:inline-block;width:100%;text-align:right}.collection-creator .header .main-help .more-help{float:right}.collection-creator .header .column-headers .column-header .unpaired-filter{width:100%}.collection-creator .header .column-headers .column-header .unpaired-filter .search-query{width:100%;height:22px}.collection-creator .header .paired-column a:not(:last-child){margin-right:8px}.collection-creator .header .reverse-column .column-title{text-align:right}.collection-creator .flex-bordered-vertically{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0}.collection-creator .column-datasets{list-style:none;overflow:hidden}.collection-creator .column-datasets .dataset{height:32px;margin-top:2px;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer}.collection-creator .column-datasets .dataset:last-of-type{margin-bottom:2px}.collection-creator .column-datasets .dataset.unpaired{border-color:grey}.collection-creator .column-datasets .dataset.paired{margin-left:34px;margin-right:34px;border:2px solid grey;background:#aff1af}.collection-creator .column-datasets .dataset.paired span{display:inline-block;overflow:hidden}.collection-creator .column-datasets .dataset.paired .forward-dataset-name{text-align:right;border-right:1px solid grey;padding-right:8px}.collection-creator .column-datasets .dataset.paired .forward-dataset-name:after{margin-left:8px;font-family:FontAwesome;content:'\f061'}.collection-creator .column-datasets .dataset.paired .pair-name-column{text-align:center}.collection-creator .column-datasets .dataset.paired .pair-name-column .pair-name:hover{text-decoration:underline}.collection-creator .column-datasets .dataset.paired .reverse-dataset-name{border-left:1px solid grey;padding-left:8px}.collection-creator .column-datasets .dataset.paired .reverse-dataset-name:before{margin-right:8px;font-family:FontAwesome;content:'\f060'}.collection-creator .column-datasets .dataset:hover{border-color:black}.collection-creator .column-datasets .dataset.selected{border-color:black;background:black;color:white}.collection-creator .column-datasets .dataset.selected a{color:white}.collection-creator .unpaired-columns{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0}.collection-creator .unpaired-columns .forward-column .dataset.unpaired{margin-right:32px}.collection-creator .unpaired-columns .paired-column .dataset.unpaired{border-color:lightgrey;color:lightgrey}.collection-creator .unpaired-columns .paired-column .dataset.unpaired:hover{border-color:black;color:black}.collection-creator .unpaired-columns .reverse-column .dataset.unpaired{text-align:right;margin-left:32px}.collection-creator .flexible-partition .flexible-partition-drag{width:100%;height:8px;cursor:ns-resize;line-height:2px;text-align:center;color:lightgrey}.collection-creator .flexible-partition .flexible-partition-drag:before{content:'...'}.collection-creator .flexible-partition .flexible-partition-drag:hover{background:lightgrey;color:black}.collection-creator .flexible-partition .column-header{width:100%;text-align:center}.collection-creator .flexible-partition .column-header .column-title{display:inline}.collection-creator .flexible-partition .column-header>*:not(:last-child){margin-right:8px}.collection-creator .flexible-partition .column-header .remove-extensions-link{display:none}.collection-creator .paired-columns{height:0;border:1px solid lightgrey;border-width:1px 0 1px 0;margin-bottom:8px}.collection-creator .paired-columns .column-datasets{width:100%;overflow:auto}.collection-creator .paired-columns .unpair-btn{float:right;margin-top:-32px;width:31px;height:32px;border-color:transparent;background:transparent;font-size:120%}.collection-creator .paired-columns .unpair-btn:hover{border-color:#bfbfbf;background:#dedede}.collection-creator .paired-columns .empty-message{text-align:center}.collection-creator .element-drop-placeholder{width:60px;height:3px;margin:2px 0 0 14px;background:black}.collection-creator .element-drop-placeholder:before{float:left;font-size:120%;margin:-9px 0 0 -8px;font-family:FontAwesome;content:'\f0da'}.collection-creator .element-drop-placeholder:last-child{margin-bottom:8px}.collection-creator .footer{padding-bottom:8px}.collection-creator .footer .attributes .remove-extensions-prompt{line-height:32px}.collection-creator .footer .attributes .remove-extensions-prompt .remove-extensions{display:inline-block;width:24px;height:24px}.collection-creator .footer .attributes .collection-name-prompt{margin:5px 4px 0 0}.collection-creator .footer .attributes .collection-name-prompt.validation-warning:before{content:'(required)';margin-right:4px;color:red}.collection-creator .footer .attributes .collection-name{width:50%}.collection-creator .footer .attributes .collection-name.validation-warning{border-color:red}.collection-creator .footer .actions .other-options>*{display:none;margin-left:4px}.collection-creator.list-collection-creator .footer{margin-top:8px}.collection-creator.list-collection-creator .main-help{cursor:pointer}.collection-creator.list-collection-creator .collection-elements-controls{margin-bottom:8px}.collection-creator.list-collection-creator .collection-elements-controls .clear-selected{float:right !important;float:right;display:none}.collection-creator.list-collection-creator .collection-elements{max-height:400px;border:0 solid lightgrey;overflow-y:auto;overflow-x:hidden}.collection-creator.list-collection-creator .collection-element{height:32px;margin:2px 4px 0 4px;opacity:1;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer;overflow:hidden}.collection-creator.list-collection-creator .collection-element:last-of-type{margin-bottom:2px}.collection-creator.list-collection-creator .collection-element:hover{border-color:black}.collection-creator.list-collection-creator .collection-element.selected{border-color:black;background:black;color:white}.collection-creator.list-collection-creator .collection-element.selected a{color:white}.collection-creator.list-collection-creator .collection-element.dragging{opacity:.4}.collection-creator.list-collection-creator .collection-element.dragging button{display:none}.collection-creator.list-collection-creator .collection-element .name:hover{text-decoration:underline}.collection-creator.list-collection-creator .collection-element button{margin-top:3px}.collection-creator.list-collection-creator .collection-element .discard{float:right !important;float:right}.collection-creator.list-collection-creator .element-drop-placeholder{margin-left:8px}.collection-creator.list-collection-creator .element-drop-placeholder:before{margin:-8.5px 0 0 -8px}.collection-creator.list-collection-creator .empty-message{margin:8px;color:grey;font-style:italic;text-align:center}.collection-creator.list-collection-creator .no-elements-left-message{text-align:left}.collection-creator.pair-collection-creator .footer{margin-top:8px}.collection-creator.pair-collection-creator .main-help{cursor:pointer}.collection-creator.pair-collection-creator .collection-elements-controls{margin-bottom:8px}.collection-creator.pair-collection-creator .collection-elements-controls .clear-selected{float:right !important;float:right;display:none}.collection-creator.pair-collection-creator .collection-elements{max-height:400px;border:0 solid lightgrey;overflow-y:auto;overflow-x:hidden}.collection-creator.pair-collection-creator .collection-element{height:32px;margin:2px 4px 0 4px;opacity:1;border:1px solid lightgrey;border-radius:3px;padding:0 8px 0 8px;line-height:28px;cursor:pointer;overflow:hidden}.collection-creator.pair-collection-creator .collection-element:last-of-type{margin-bottom:2px}.collection-creator.pair-collection-creator .collection-element:hover{border-color:black}.collection-creator.pair-collection-creator .collection-element button{margin-top:3px}.collection-creator.pair-collection-creator .collection-element .identifier:after{content:':';margin-right:6px}.collection-creator.pair-collection-creator .collection-element .name:hover{text-decoration:none}.collection-creator.pair-collection-creator .empty-message{margin:8px;color:grey;font-style:italic;text-align:center}.collection-creator.list-of-pairs-collection-creator .column-headers{margin-bottom:8px}.search-input .search-query{width:100%;padding-right:24px}.search-input .search-clear,.search-input .search-loading{position:relative;display:inline-block;float:right;margin-top:-24px;margin-right:4px;font-size:1.4em;line-height:23px;color:grey}.search-input .search-clear:hover{color:#303030}.dataset-choice{border:1px solid lightgrey;border-radius:3px;overflow:hidden;padding:10px 8px 8px 8px}.dataset-choice:hover{border-color:black;cursor:pointer}.dataset-choice:hover>*{cursor:pointer}.dataset-choice .prompt{margin-right:8px}.dataset-choice .prompt:after{content:':'}.dataset-choice .prompt:empty{display:none}.dataset-choice .none-selected-msg{color:grey}.dataset-choice .selected{display:inline-block}.dataset-choice .selected .title{font-weight:bold}.dataset-choice .selected .subtitle{color:grey}.dataset-choice .selected .subtitle:before{content:'-';margin:0 4px 0 4px}.dataset-choice .selected .subtitle i{font-style:normal}.dataset-choice .selected .subtitle i:not(:last-child):after{content:', '}.dataset-choice.multi .selected{display:block;font-weight:normal}.dataset-choice.multi table{width:100%;margin-top:8px;cursor:pointer}.dataset-choice.multi table:hover{border-color:black}.dataset-choice.multi table tr:nth-child(even){background-color:aliceblue}.dataset-choice.multi table th{padding:0;font-weight:normal;font-size:80%;color:grey}.dataset-choice.multi table th:not(:last-child),.dataset-choice.multi table td:not(:last-child){padding-right:8px}.dataset-choice.multi table td.cell-name{font-weight:bold}.dataset-choice-modal .list-panel .list-item.dataset{border-left-width:1px;border-right-width:1px}.dataset-choice-modal .list-panel .controls .title .name{font-size:120%}.peek-column-selector{border-radius:3px;border:1px solid #5f6990}.peek-column-selector td,.peek-column-selector th{padding:4px 10px 4px 4px}.peek-column-selector th:last-child{width:100%}.peek-column-selector .top-left{width:10%;white-space:normal;vertical-align:top;text-align:right;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-weight:normal}.peek-column-selector .renamable-header:hover{background-color:black}.peek-column-selector .control td.control-prompt{background-color:#5f6990;padding:0 4px 0 8px;text-align:right;color:white}.peek-column-selector .control td{padding:1px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;color:grey}.peek-column-selector .control td .button{min-width:28px;border:1px solid grey;border-radius:3px;padding:4px;color:grey}.peek-column-selector .control td:hover .button{background-color:#eee;border:1px solid black;cursor:pointer;color:black}.peek-column-selector .control td.disabled .button,.peek-column-selector .control td.disabled:hover .button{background-color:transparent;border:1px solid #ccc;cursor:not-allowed;color:#ccc}.peek-column-selector .control td.selected .button{background-color:black;border:1px solid black;color:white}.pagination{margin:0}.pagination-scroll-container{display:inline-block;background-color:#f8f8f8;border-radius:3px;border:1px solid #bfbfbf;overflow:auto}.pagination-scroll-container .pagination-page-list{margin:3px 0 3px 0}.pagination-scroll-container .pagination-page-list>li:first-child>a,.pagination-scroll-container .pagination-page-list>li:first-child>span{border-radius:0;border-left:0}.pagination-scroll-container .pagination-page-list>li:last-child>a,.pagination-scroll-container .pagination-page-list>li:last-child>span{border-radius:0}.pagination-scroll-container .pagination-page-list>li>a{float:none;position:static;border:1px solid #bfbfbf;border-width:0 0 0 1px}.toolMenuContainer{color:#000;background:#dfe5f9;min-height:100%;padding:5px 10px}div.toolSectionPad{margin:0;padding:0;height:5px;font-size:0}div.toolSectionWrapper{margin-bottom:5px}div.toolSectionDetailsInner{margin-left:5px;margin-right:5px}div.toolSectionTitle{font-weight:bold}div.toolPanelLabel{padding-top:10px;padding-bottom:5px;font-weight:bold;color:gray;text-transform:uppercase}div.toolTitle{padding-top:5px;padding-bottom:5px;margin-left:16px;margin-right:10px;display:list-item;list-style:square outside}div.toolSectionBody div.toolPanelLabel{padding-top:5px;padding-bottom:5px;margin-left:16px;margin-right:10px;display:list-item;list-style:none outside}div.toolTitleNoSection{padding-bottom:5px;font-weight:bold}#tool-search{padding-top:5px;padding-bottom:10px;position:relative}#loading_indicator{position:fixed;right:10px;top:10px;height:32px;width:32px;display:none;background:url(largespinner.gif)}#content_table td{text-align:right;white-space:nowrap;padding:2px 10px}#content_table th{white-space:nowrap;padding:2px 10px}#content_table td.stringalign{text-align:left}#content_table .dark_row{background-color:#ddd}#content_table th{background-color:#aaa}.toolMenuAndView .toolForm{float:left;background-color:white;margin:10px}.text-and-autocomplete-select{background:none;position:relative;padding-right:18px}.text-and-autocomplete-select:after{margin-top:6px;position:absolute;top:2px;right:6px;width:10px;height:10px;display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted;content:"";opacity:80;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=8000);filter:alpha(opacity=8000)}.btn-default .text-and-autocomplete-select:after{border-top-color:#333}.btn-primary .text-and-autocomplete-select:after,.btn-success .text-and-autocomplete-select:after,.btn-warning .text-and-autocomplete-select:after,.btn-danger .text-and-autocomplete-select:after,.btn-info .text-and-autocomplete-select:after{border-top-color:#fff}.icon-button.general-question{background:url(question-octagon-frame.png) no-repeat;float:right;margin-top:3px;margin-right:4px}.icon-button.tag-question{background:url(question-balloon.png) no-repeat;float:right;margin-top:3px;margin-right:4px}.icon-button.tag{background-image:url(sprite-fugue.png);background-position:-16px -112px;width:16px;height:16px}.icon-button.tags{background-image:url(sprite-fugue.png);background-position:-32px -112px;width:16px;height:16px}.icon-button.tag--plus{background-image:url(sprite-fugue.png);background-position:0 -112px;width:16px;height:16px}.icon-button.toggle-expand{background-image:url(sprite-fugue.png);background-position:-80px -112px;width:16px;height:16px}.icon-button.toggle{background-image:url(sprite-fugue.png);background-position:-48px -112px;width:16px;height:16px}.icon-button.toggle:hover{background-image:url(sprite-fugue.png);background-position:-96px -112px;width:16px;height:16px}.icon-button.arrow-circle{background-image:url(sprite-fugue.png);background-position:-32px 0;width:16px;height:16px}.icon-button.chevron{background-image:url(sprite-fugue.png);background-position:-32px -64px;width:16px;height:16px}.icon-button.bug{background-image:url(sprite-fugue.png);background-position:-64px -32px;width:16px;height:16px}.icon-button.disk{background-image:url(sprite-fugue.png);background-position:-16px -80px;width:16px;height:16px}.icon-button.information{background-image:url(sprite-fugue.png);background-position:-96px -80px;width:16px;height:16px}.icon-button.annotate{background-image:url(sprite-fugue.png);background-position:-112px -96px;width:16px;height:16px}.icon-button.go-to-full-screen{background-image:url(sprite-fugue.png);background-position:0 0;width:16px;height:16px}.icon-button.import{background-image:url(sprite-fugue.png);background-position:-112px -80px;width:16px;height:16px}.icon-button.plus-button{background-image:url(sprite-fugue.png);background-position:-112px -48px;width:16px;height:16px}.icon-button.plus-button:hover{background-image:url(sprite-fugue.png);background-position:-112px -64px;width:16px;height:16px}.icon-button.gear{background-image:url(sprite-fugue.png);background-position:-96px 0;width:16px;height:16px}.icon-button.chart_curve{background-image:url(sprite-fugue.png);background-position:-64px -48px;width:16px;height:16px}.icon-button.disk--arrow{background-image:url(sprite-fugue.png);background-position:-80px -64px;width:16px;height:16px}.icon-button.disk--arrow:hover{background-image:url(sprite-fugue.png);background-position:0 -80px;width:16px;height:16px}.icon-button.cross-circle{background-image:url(sprite-fugue.png);background-position:-80px 0;width:16px;height:16px}.icon-button.cross-circle:hover{background-image:url(sprite-fugue.png);background-position:-80px -16px;width:16px;height:16px}.icon-button.arrow-split{background-image:url(sprite-fugue.png);background-position:-16px -32px;width:16px;height:16px}.icon-button.arrow-split:hover{background-image:url(sprite-fugue.png);background-position:-32px -32px;width:16px;height:16px}.icon-button.chevron-expand:hover{background-image:url(sprite-fugue.png);background-position:-16px -64px;width:16px;height:16px}.icon-button.chevron-expand{background-image:url(sprite-fugue.png);background-position:0 -64px;width:16px;height:16px}#for_bears{display:none} \ No newline at end of file diff --git a/static/style/blue/reports.css b/static/style/blue/reports.css index cc14661617f..be512d2cb21 100644 --- a/static/style/blue/reports.css +++ b/static/style/blue/reports.css @@ -1,6 +1 @@ -.dir_arrow{visibility:hidden} -#spark_time_select{display:inline-block} -#spark_select{height:23px;width:30px;padding:0;border-radius:2px} -.quarter_width{width:25%} -.third_width{width:30%} -.half_width{width:50%} +.reports-panel-container{position:absolute;top:30px;bottom:10px;overflow:scroll;width:100%;padding:10px}#spark_time_select{display:inline-block}#spark_select{height:23px;width:30px;padding:0;border-radius:2px}.jqstooltip{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dir_arrow{visibility:hidden}#back_button,#next_button,#curr_button,.miss_pages,.page_button{position:relative;float:left;height:24px;width:23px;margin:0 -1px 0 0;padding-top:2.5px;border:1px solid #bfbfbf;z-index:0}#back_button{cursor:pointer;border-top-left-radius:3px;border-bottom-left-radius:3px}#curr_button{background:#ebd9b2;border:1px solid #5f6990;z-index:1}#formHeader>tbody>tr{vertical-align:middle}#next_button{cursor:pointer;border-top-right-radius:3px;border-bottom-right-radius:3px}#page_selector{cursor:default;position:relative;text-align:center}.page_button>a{text-decoration:none;padding:8px;margin:-8px;height:100%;width:100%}#entries_edit{position:relative;padding:0;width:36px;height:20px;text-align:center;border:1px solid black;border-radius:3px;z-index:6}#entry_submit{cursor:default;position:relative;display:inline-block;border:1px solid black;padding:0;width:22px;height:22px;border-radius:11px;background-color:#ebd9b2;text-align:center;opacity:0;z-index:0}.half_width{width:50%}.third_width{width:30%}.quarter_width{width:25%} \ No newline at end of file diff --git a/templates/page_base.mako b/templates/page_base.mako index 76f4490ec79..5e5d7c16e4c 100644 --- a/templates/page_base.mako +++ b/templates/page_base.mako @@ -14,7 +14,6 @@ <%def name="get_pages( sort_id, order, page_specs, *args, **kwargs )"> ## Creates the page buttons ${get_page_script()} - ${get_page_css()}
↞
@@ -61,92 +60,6 @@
-<%def name="get_page_css()"> - <%doc> - Page Styling - - - - <%doc> - Entry Styling - - - - <%def name="get_page_script()">