galaxy-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/ce64f5d64ff4/
changeset: ce64f5d64ff4
user: carlfeberhard
date: 2012-09-12 17:03:17
summary: Client side templates for history panel; IconButtonView in ui.js; copied BaseModel/View into base-mvc.js; stubs for annotations, tags MVC; cleaned up controllers/root.py
affected #: 18 files
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 lib/galaxy/web/controllers/root.py
--- a/lib/galaxy/web/controllers/root.py
+++ b/lib/galaxy/web/controllers/root.py
@@ -120,9 +120,9 @@
show_hidden = util.string_as_bool( show_hidden )
datasets = self.get_history_datasets( trans, history, show_deleted, show_hidden, show_purged )
+ history_panel_template = "root/history.mako"
# history panel -> backbone
- history_panel_template = "root/history.mako"
- #history_panel_template = "root/alternate_history.mako"
+ ##history_panel_template = "root/alternate_history.mako"
return trans.stream_template_mako( history_panel_template,
history = history,
annotation = self.get_item_annotation_str( trans.sa_session, trans.user, history ),
@@ -512,85 +512,3 @@
@web.expose
def generate_error( self, trans ):
raise Exception( "Fake error!" )
-
-
-
-"""
-import galaxy.web.framework.helpers as web_helpers
-from functools import wraps
-def debug_mako_template( template_fn ):
- # Wrap a function that produces a mako template for better debugging
-
- # http://stackoverflow.com/questions/390409/how-do-you-debug-mako-templates
- @wraps( template_fn )
- def wrapper( *args, **kwargs ):
- try:
- log.debug( 'rendering template' )
- return template_fn( *args, **kwargs )
- log.debug( 'done rendering template' )
- except Exception, ex:
- log.error( "Mako Exception: " + str( ex ), exc_info=True )
- return exceptions.html_error_template().render()
- return wrapper
-
-def prep_dataset( hda, trans ):
- states = trans.app.model.Dataset.states
- print states
- STATES_INTERPRETED_AS_QUEUED = [ 'no state', '', None ]
- ## dataset is actually a HistoryDatasetAssociation
- #ported mostly from history_common
- #post: return dictionary form
- #??: move out of templates?
- #??: gather data from model?
-
-
- #TODO: clean up magic strings
-
- hda_dict = hda.get_api_value()
- #TODO: use hda_dict.update to add these (instead of localvars)
- def add_to_hda( **kwargs ):
- hda_dict.update( kwargs )
-
- # trans
- encoded_hda_id = trans.security.encode_id( hda.id )
- add_to_hda( id=encoded_hda_id )
-
- add_to_hda( state=hda.state )
- if hda.state in STATES_INTERPRETED_AS_QUEUED:
- #TODO: magic string
- add_to_hda( state='queued' )
-
- # trans
- current_user_roles = trans.get_current_user_roles()
- add_to_hda( can_edit=( not ( hda.deleted or hda.purged ) ) )
-
- # considered accessible if user can access or user isn't admin
- # trans
- accessible = trans.app.security_agent.can_access_dataset( current_user_roles, hda.dataset )
- accessible = trans.user_is_admin() or accessible
- add_to_hda( accessible=accessible )
-
- #TODO: move urls into js galaxy_paths (decorate)
- deleted = hda.deleted
- purged = hda.purged
- dataset_purged = hda.dataset.purged
- if not ( dataset_purged or purged ) and for_editing:
- undelete_url = web_helpers.url_for( controller='dataset', action='undelete', dataset_id=encoded_hda_id )
- # trans
- if trans.app.config.allow_user_dataset_purge:
- purge_url = web_helpers.url_for( controller='dataset', action='purge', dataset_id=encoded_hda_id )
-
- if not hda.visible:
- unhide_url = web_helpers.url_for( controller='dataset', action='unhide', dataset_id=encoded_hda_id )
-
-
- print 'dataset:', dataset
-
- undelete_url = web_helpers.url_for( controller='dataset', action='undelete', dataset_id=encoded_hda_id )
- purge_url = web_helpers.url_for( controller='dataset', action='purge', dataset_id=encoded_hda_id )
- unhide_url = web_helpers.url_for( controller='dataset', action='unhide', dataset_id=encoded_hda_id )
- print 'urls:', '\n'.join( undelete_url, purge_url, unhide_url )
-
- return hda_dict
-
-"""
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/libs/handlebars.full.js
--- /dev/null
+++ b/static/scripts/libs/handlebars.full.js
@@ -0,0 +1,1550 @@
+// lib/handlebars/base.js
+var Handlebars = {};
+
+Handlebars.VERSION = "1.0.beta.6";
+
+Handlebars.helpers = {};
+Handlebars.partials = {};
+
+Handlebars.registerHelper = function(name, fn, inverse) {
+ if(inverse) { fn.not = inverse; }
+ this.helpers[name] = fn;
+};
+
+Handlebars.registerPartial = function(name, str) {
+ this.partials[name] = str;
+};
+
+Handlebars.registerHelper('helperMissing', function(arg) {
+ if(arguments.length === 2) {
+ return undefined;
+ } else {
+ throw new Error("Could not find property '" + arg + "'");
+ }
+});
+
+var toString = Object.prototype.toString, functionType = "[object Function]";
+
+Handlebars.registerHelper('blockHelperMissing', function(context, options) {
+ var inverse = options.inverse || function() {}, fn = options.fn;
+
+
+ var ret = "";
+ var type = toString.call(context);
+
+ if(type === functionType) { context = context.call(this); }
+
+ if(context === true) {
+ return fn(this);
+ } else if(context === false || context == null) {
+ return inverse(this);
+ } else if(type === "[object Array]") {
+ if(context.length > 0) {
+ for(var i=0, j=context.length; i<j; i++) {
+ ret = ret + fn(context[i]);
+ }
+ } else {
+ ret = inverse(this);
+ }
+ return ret;
+ } else {
+ return fn(context);
+ }
+});
+
+Handlebars.registerHelper('each', function(context, options) {
+ var fn = options.fn, inverse = options.inverse;
+ var ret = "";
+
+ if(context && context.length > 0) {
+ for(var i=0, j=context.length; i<j; i++) {
+ ret = ret + fn(context[i]);
+ }
+ } else {
+ ret = inverse(this);
+ }
+ return ret;
+});
+
+Handlebars.registerHelper('if', function(context, options) {
+ var type = toString.call(context);
+ if(type === functionType) { context = context.call(this); }
+
+ if(!context || Handlebars.Utils.isEmpty(context)) {
+ return options.inverse(this);
+ } else {
+ return options.fn(this);
+ }
+});
+
+Handlebars.registerHelper('unless', function(context, options) {
+ var fn = options.fn, inverse = options.inverse;
+ options.fn = inverse;
+ options.inverse = fn;
+
+ return Handlebars.helpers['if'].call(this, context, options);
+});
+
+Handlebars.registerHelper('with', function(context, options) {
+ return options.fn(context);
+});
+
+Handlebars.registerHelper('log', function(context) {
+ Handlebars.log(context);
+});
+;
+// lib/handlebars/compiler/parser.js
+/* Jison generated parser */
+var handlebars = (function(){
+
+var parser = {trace: function trace() { },
+yy: {},
+symbols_: {"error":2,"root":3,"program":4,"EOF":5,"statements":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"OPEN_PARTIAL":24,"params":25,"hash":26,"param":27,"STRING":28,"INTEGER":29,"BOOLEAN":30,"hashSegments":31,"hashSegment":32,"ID":33,"EQUALS":34,"pathSegments":35,"SEP":36,"$accept":0,"$end":1},
+terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"STRING",29:"INTEGER",30:"BOOLEAN",33:"ID",34:"EQUALS",36:"SEP"},
+productions_: [0,[3,2],[4,3],[4,1],[4,0],[6,1],[6,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[7,2],[17,3],[17,2],[17,2],[17,1],[25,2],[25,1],[27,1],[27,1],[27,1],[27,1],[26,1],[31,2],[31,1],[32,3],[32,3],[32,3],[32,3],[21,1],[35,3],[35,1]],
+performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
+
+var $0 = $$.length - 1;
+switch (yystate) {
+case 1: return $$[$0-1]
+break;
+case 2: this.$ = new yy.ProgramNode($$[$0-2], $$[$0])
+break;
+case 3: this.$ = new yy.ProgramNode($$[$0])
+break;
+case 4: this.$ = new yy.ProgramNode([])
+break;
+case 5: this.$ = [$$[$0]]
+break;
+case 6: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]
+break;
+case 7: this.$ = new yy.InverseNode($$[$0-2], $$[$0-1], $$[$0])
+break;
+case 8: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0])
+break;
+case 9: this.$ = $$[$0]
+break;
+case 10: this.$ = $$[$0]
+break;
+case 11: this.$ = new yy.ContentNode($$[$0])
+break;
+case 12: this.$ = new yy.CommentNode($$[$0])
+break;
+case 13: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1])
+break;
+case 14: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1])
+break;
+case 15: this.$ = $$[$0-1]
+break;
+case 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1])
+break;
+case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true)
+break;
+case 18: this.$ = new yy.PartialNode($$[$0-1])
+break;
+case 19: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1])
+break;
+case 20:
+break;
+case 21: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]]
+break;
+case 22: this.$ = [[$$[$0-1]].concat($$[$0]), null]
+break;
+case 23: this.$ = [[$$[$0-1]], $$[$0]]
+break;
+case 24: this.$ = [[$$[$0]], null]
+break;
+case 25: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
+break;
+case 26: this.$ = [$$[$0]]
+break;
+case 27: this.$ = $$[$0]
+break;
+case 28: this.$ = new yy.StringNode($$[$0])
+break;
+case 29: this.$ = new yy.IntegerNode($$[$0])
+break;
+case 30: this.$ = new yy.BooleanNode($$[$0])
+break;
+case 31: this.$ = new yy.HashNode($$[$0])
+break;
+case 32: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]
+break;
+case 33: this.$ = [$$[$0]]
+break;
+case 34: this.$ = [$$[$0-2], $$[$0]]
+break;
+case 35: this.$ = [$$[$0-2], new yy.StringNode($$[$0])]
+break;
+case 36: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])]
+break;
+case 37: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])]
+break;
+case 38: this.$ = new yy.IdNode($$[$0])
+break;
+case 39: $$[$0-2].push($$[$0]); this.$ = $$[$0-2];
+break;
+case 40: this.$ = [$$[$0]]
+break;
+}
+},
+table: [{3:1,4:2,5:[2,4],6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{1:[3]},{5:[1,16]},{5:[2,3],7:17,8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,19],20:[2,3],22:[1,13],23:[1,14],24:[1,15]},{5:[2,5],14:[2,5],15:[2,5],16:[2,5],19:[2,5],20:[2,5],22:[2,5],23:[2,5],24:[2,5]},{4:20,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{4:21,6:3,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],24:[1,15]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{17:22,21:23,33:[1,25],35:24},{17:26,21:23,33:[1,25],35:24},{17:27,21:23,33:[1,25],35:24},{17:28,21:23,33:[1,25],35:24},{21:29,33:[1,25],35:24},{1:[2,1]},{6:30,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],24:[1,15]},{5:[2,6],14:[2,6],15:[2,6],16:[2,6],19:[2,6],20:[2,6],22:[2,6],23:[2,6],24:[2,6]},{17:22,18:[1,31],21:23,33:[1,25],35:24},{10:32,20:[1,33]},{10:34,20:[1,33]},{18:[1,35]},{18:[2,24],21:40,25:36,26:37,27:38,28:[1,41],29:[1,42],30:[1,43],31:39,32:44,33:[1,45],35:24},{18:[2,38],28:[2,38],29:[2,38],30:[2,38],33:[2,38],36:[1,46]},{18:[2,40],28:[2,40],29:[2,40],30:[2,40],33:[2,40],36:[2,40]},{18:[1,47]},{18:[1,48]},{18:[1,49]},{18:[1,50],21:51,33:[1,25],35:24},{5:[2,2],8:18,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,2],22:[1,13],23:[1,14],24:[1,15]},{14:[2,20],15:[2,20],16:[2,20],19:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,7],14:[2,7],15:[2,7],16:[2,7],19:[2,7],20:[2,7],22:[2,7],23:[2,7],24:[2,7]},{21:52,33:[1,25],35:24},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{18:[2,22],21:40,26:53,27:54,28:[1,41],29:[1,42],30:[1,43],31:39,32:44,33:[1,45],35:24},{18:[2,23]},{18:[2,26],28:[2,26],29:[2,26],30:[2,26],33:[2,26]},{18:[2,31],32:55,33:[1,56]},{18:[2,27],28:[2,27],29:[2,27],30:[2,27],33:[2,27]},{18:[2,28],28:[2,28],29:[2,28],30:[2,28],33:[2,28]},{18:[2,29],28:[2,29],29:[2,29],30:[2,29],33:[2,29]},{18:[2,30],28:[2,30],29:[2,30],30:[2,30],33:[2,30]},{18:[2,33],33:[2,33]},{18:[2,40],28:[2,40],29:[2,40],30:[2,40],33:[2,40],34:[1,57],36:[2,40]},{33:[1,58]},{14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,17],14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]},{18:[1,59]},{18:[1,60]},{18:[2,21]},{18:[2,25],28:[2,25],29:[2,25],30:[2,25],33:[2,25]},{18:[2,32],33:[2,32]},{34:[1,57]},{21:61,28:[1,62],29:[1,63],30:[1,64],33:[1,25],35:24},{18:[2,39],28:[2,39],29:[2,39],30:[2,39],33:[2,39],36:[2,39]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{18:[2,34],33:[2,34]},{18:[2,35],33:[2,35]},{18:[2,36],33:[2,36]},{18:[2,37],33:[2,37]}],
+defaultActions: {16:[2,1],37:[2,23],53:[2,21]},
+parseError: function parseError(str, hash) {
+ throw new Error(str);
+},
+parse: function parse(input) {
+ var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
+ this.lexer.setInput(input);
+ this.lexer.yy = this.yy;
+ this.yy.lexer = this.lexer;
+ if (typeof this.lexer.yylloc == "undefined")
+ this.lexer.yylloc = {};
+ var yyloc = this.lexer.yylloc;
+ lstack.push(yyloc);
+ if (typeof this.yy.parseError === "function")
+ this.parseError = this.yy.parseError;
+ function popStack(n) {
+ stack.length = stack.length - 2 * n;
+ vstack.length = vstack.length - n;
+ lstack.length = lstack.length - n;
+ }
+ function lex() {
+ var token;
+ token = self.lexer.lex() || 1;
+ if (typeof token !== "number") {
+ token = self.symbols_[token] || token;
+ }
+ return token;
+ }
+ var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
+ while (true) {
+ state = stack[stack.length - 1];
+ if (this.defaultActions[state]) {
+ action = this.defaultActions[state];
+ } else {
+ if (symbol == null)
+ symbol = lex();
+ action = table[state] && table[state][symbol];
+ }
+ if (typeof action === "undefined" || !action.length || !action[0]) {
+ if (!recovering) {
+ expected = [];
+ for (p in table[state])
+ if (this.terminals_[p] && p > 2) {
+ expected.push("'" + this.terminals_[p] + "'");
+ }
+ var errStr = "";
+ if (this.lexer.showPosition) {
+ errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + this.terminals_[symbol] + "'";
+ } else {
+ errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
+ }
+ this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
+ }
+ }
+ if (action[0] instanceof Array && action.length > 1) {
+ throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+ }
+ switch (action[0]) {
+ case 1:
+ stack.push(symbol);
+ vstack.push(this.lexer.yytext);
+ lstack.push(this.lexer.yylloc);
+ stack.push(action[1]);
+ symbol = null;
+ if (!preErrorSymbol) {
+ yyleng = this.lexer.yyleng;
+ yytext = this.lexer.yytext;
+ yylineno = this.lexer.yylineno;
+ yyloc = this.lexer.yylloc;
+ if (recovering > 0)
+ recovering--;
+ } else {
+ symbol = preErrorSymbol;
+ preErrorSymbol = null;
+ }
+ break;
+ case 2:
+ len = this.productions_[action[1]][1];
+ yyval.$ = vstack[vstack.length - len];
+ yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
+ r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+ if (typeof r !== "undefined") {
+ return r;
+ }
+ if (len) {
+ stack = stack.slice(0, -1 * len * 2);
+ vstack = vstack.slice(0, -1 * len);
+ lstack = lstack.slice(0, -1 * len);
+ }
+ stack.push(this.productions_[action[1]][0]);
+ vstack.push(yyval.$);
+ lstack.push(yyval._$);
+ newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+ stack.push(newState);
+ break;
+ case 3:
+ return true;
+ }
+ }
+ return true;
+}
+};/* Jison generated lexer */
+var lexer = (function(){
+
+var lexer = ({EOF:1,
+parseError:function parseError(str, hash) {
+ if (this.yy.parseError) {
+ this.yy.parseError(str, hash);
+ } else {
+ throw new Error(str);
+ }
+ },
+setInput:function (input) {
+ this._input = input;
+ this._more = this._less = this.done = false;
+ this.yylineno = this.yyleng = 0;
+ this.yytext = this.matched = this.match = '';
+ this.conditionStack = ['INITIAL'];
+ this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
+ return this;
+ },
+input:function () {
+ var ch = this._input[0];
+ this.yytext+=ch;
+ this.yyleng++;
+ this.match+=ch;
+ this.matched+=ch;
+ var lines = ch.match(/\n/);
+ if (lines) this.yylineno++;
+ this._input = this._input.slice(1);
+ return ch;
+ },
+unput:function (ch) {
+ this._input = ch + this._input;
+ return this;
+ },
+more:function () {
+ this._more = true;
+ return this;
+ },
+pastInput:function () {
+ var past = this.matched.substr(0, this.matched.length - this.match.length);
+ return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
+ },
+upcomingInput:function () {
+ var next = this.match;
+ if (next.length < 20) {
+ next += this._input.substr(0, 20-next.length);
+ }
+ return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
+ },
+showPosition:function () {
+ var pre = this.pastInput();
+ var c = new Array(pre.length + 1).join("-");
+ return pre + this.upcomingInput() + "\n" + c+"^";
+ },
+next:function () {
+ if (this.done) {
+ return this.EOF;
+ }
+ if (!this._input) this.done = true;
+
+ var token,
+ match,
+ col,
+ lines;
+ if (!this._more) {
+ this.yytext = '';
+ this.match = '';
+ }
+ var rules = this._currentRules();
+ for (var i=0;i < rules.length; i++) {
+ match = this._input.match(this.rules[rules[i]]);
+ if (match) {
+ lines = match[0].match(/\n.*/g);
+ if (lines) this.yylineno += lines.length;
+ this.yylloc = {first_line: this.yylloc.last_line,
+ last_line: this.yylineno+1,
+ first_column: this.yylloc.last_column,
+ last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}
+ this.yytext += match[0];
+ this.match += match[0];
+ this.matches = match;
+ this.yyleng = this.yytext.length;
+ this._more = false;
+ this._input = this._input.slice(match[0].length);
+ this.matched += match[0];
+ token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);
+ if (token) return token;
+ else return;
+ }
+ }
+ if (this._input === "") {
+ return this.EOF;
+ } else {
+ this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
+ {text: "", token: null, line: this.yylineno});
+ }
+ },
+lex:function lex() {
+ var r = this.next();
+ if (typeof r !== 'undefined') {
+ return r;
+ } else {
+ return this.lex();
+ }
+ },
+begin:function begin(condition) {
+ this.conditionStack.push(condition);
+ },
+popState:function popState() {
+ return this.conditionStack.pop();
+ },
+_currentRules:function _currentRules() {
+ return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
+ },
+topState:function () {
+ return this.conditionStack[this.conditionStack.length-2];
+ },
+pushState:function begin(condition) {
+ this.begin(condition);
+ }});
+lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
+
+var YYSTATE=YY_START
+switch($avoiding_name_collisions) {
+case 0:
+ if(yy_.yytext.slice(-1) !== "\\") this.begin("mu");
+ if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1), this.begin("emu");
+ if(yy_.yytext) return 14;
+
+break;
+case 1: return 14;
+break;
+case 2: this.popState(); return 14;
+break;
+case 3: return 24;
+break;
+case 4: return 16;
+break;
+case 5: return 20;
+break;
+case 6: return 19;
+break;
+case 7: return 19;
+break;
+case 8: return 23;
+break;
+case 9: return 23;
+break;
+case 10: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15;
+break;
+case 11: return 22;
+break;
+case 12: return 34;
+break;
+case 13: return 33;
+break;
+case 14: return 33;
+break;
+case 15: return 36;
+break;
+case 16: /*ignore whitespace*/
+break;
+case 17: this.popState(); return 18;
+break;
+case 18: this.popState(); return 18;
+break;
+case 19: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\"/g,'"'); return 28;
+break;
+case 20: return 30;
+break;
+case 21: return 30;
+break;
+case 22: return 29;
+break;
+case 23: return 33;
+break;
+case 24: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 33;
+break;
+case 25: return 'INVALID';
+break;
+case 26: return 5;
+break;
+}
+};
+lexer.rules = [/^[^\x00]*?(?=(\{\{))/,/^[^\x00]+/,/^[^\x00]{2,}?(?=(\{\{))/,/^\{\{>/,/^\{\{#/,/^\{\{\//,/^\{\{\^/,/^\{\{\s*else\b/,/^\{\{\{/,/^\{\{&/,/^\{\{![\s\S]*?\}\}/,/^\{\{/,/^=/,/^\.(?=[} ])/,/^\.\./,/^[\/.]/,/^\s+/,/^\}\}\}/,/^\}\}/,/^"(\\["]|[^"])*"/,/^true(?=[}\s])/,/^false(?=[}\s])/,/^[0-9]+(?=[}\s])/,/^[a-zA-Z0-9_$-]+(?=[=}\s\/.])/,/^\[[^\]]*\]/,/^./,/^$/];
+lexer.conditions = {"mu":{"rules":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"INITIAL":{"rules":[0,1,26],"inclusive":true}};return lexer;})()
+parser.lexer = lexer;
+return parser;
+})();
+if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
+exports.parser = handlebars;
+exports.parse = function () { return handlebars.parse.apply(handlebars, arguments); }
+exports.main = function commonjsMain(args) {
+ if (!args[1])
+ throw new Error('Usage: '+args[0]+' FILE');
+ if (typeof process !== 'undefined') {
+ var source = require('fs').readFileSync(require('path').join(process.cwd(), args[1]), "utf8");
+ } else {
+ var cwd = require("file").path(require("file").cwd());
+ var source = cwd.join(args[1]).read({charset: "utf-8"});
+ }
+ return exports.parser.parse(source);
+}
+if (typeof module !== 'undefined' && require.main === module) {
+ exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
+}
+};
+;
+// lib/handlebars/compiler/base.js
+Handlebars.Parser = handlebars;
+
+Handlebars.parse = function(string) {
+ Handlebars.Parser.yy = Handlebars.AST;
+ return Handlebars.Parser.parse(string);
+};
+
+Handlebars.print = function(ast) {
+ return new Handlebars.PrintVisitor().accept(ast);
+};
+
+Handlebars.logger = {
+ DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
+
+ // override in the host environment
+ log: function(level, str) {}
+};
+
+Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
+;
+// lib/handlebars/compiler/ast.js
+(function() {
+
+ Handlebars.AST = {};
+
+ Handlebars.AST.ProgramNode = function(statements, inverse) {
+ this.type = "program";
+ this.statements = statements;
+ if(inverse) { this.inverse = new Handlebars.AST.ProgramNode(inverse); }
+ };
+
+ Handlebars.AST.MustacheNode = function(params, hash, unescaped) {
+ this.type = "mustache";
+ this.id = params[0];
+ this.params = params.slice(1);
+ this.hash = hash;
+ this.escaped = !unescaped;
+ };
+
+ Handlebars.AST.PartialNode = function(id, context) {
+ this.type = "partial";
+
+ // TODO: disallow complex IDs
+
+ this.id = id;
+ this.context = context;
+ };
+
+ var verifyMatch = function(open, close) {
+ if(open.original !== close.original) {
+ throw new Handlebars.Exception(open.original + " doesn't match " + close.original);
+ }
+ };
+
+ Handlebars.AST.BlockNode = function(mustache, program, close) {
+ verifyMatch(mustache.id, close);
+ this.type = "block";
+ this.mustache = mustache;
+ this.program = program;
+ };
+
+ Handlebars.AST.InverseNode = function(mustache, program, close) {
+ verifyMatch(mustache.id, close);
+ this.type = "inverse";
+ this.mustache = mustache;
+ this.program = program;
+ };
+
+ Handlebars.AST.ContentNode = function(string) {
+ this.type = "content";
+ this.string = string;
+ };
+
+ Handlebars.AST.HashNode = function(pairs) {
+ this.type = "hash";
+ this.pairs = pairs;
+ };
+
+ Handlebars.AST.IdNode = function(parts) {
+ this.type = "ID";
+ this.original = parts.join(".");
+
+ var dig = [], depth = 0;
+
+ for(var i=0,l=parts.length; i<l; i++) {
+ var part = parts[i];
+
+ if(part === "..") { depth++; }
+ else if(part === "." || part === "this") { this.isScoped = true; }
+ else { dig.push(part); }
+ }
+
+ this.parts = dig;
+ this.string = dig.join('.');
+ this.depth = depth;
+ this.isSimple = (dig.length === 1) && (depth === 0);
+ };
+
+ Handlebars.AST.StringNode = function(string) {
+ this.type = "STRING";
+ this.string = string;
+ };
+
+ Handlebars.AST.IntegerNode = function(integer) {
+ this.type = "INTEGER";
+ this.integer = integer;
+ };
+
+ Handlebars.AST.BooleanNode = function(bool) {
+ this.type = "BOOLEAN";
+ this.bool = bool;
+ };
+
+ Handlebars.AST.CommentNode = function(comment) {
+ this.type = "comment";
+ this.comment = comment;
+ };
+
+})();;
+// lib/handlebars/utils.js
+Handlebars.Exception = function(message) {
+ var tmp = Error.prototype.constructor.apply(this, arguments);
+
+ for (var p in tmp) {
+ if (tmp.hasOwnProperty(p)) { this[p] = tmp[p]; }
+ }
+
+ this.message = tmp.message;
+};
+Handlebars.Exception.prototype = new Error;
+
+// Build out our basic SafeString type
+Handlebars.SafeString = function(string) {
+ this.string = string;
+};
+Handlebars.SafeString.prototype.toString = function() {
+ return this.string.toString();
+};
+
+(function() {
+ var escape = {
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ "`": "`"
+ };
+
+ var badChars = /&(?!\w+;)|[<>"'`]/g;
+ var possible = /[&<>"'`]/;
+
+ var escapeChar = function(chr) {
+ return escape[chr] || "&";
+ };
+
+ Handlebars.Utils = {
+ escapeExpression: function(string) {
+ // don't escape SafeStrings, since they're already safe
+ if (string instanceof Handlebars.SafeString) {
+ return string.toString();
+ } else if (string == null || string === false) {
+ return "";
+ }
+
+ if(!possible.test(string)) { return string; }
+ return string.replace(badChars, escapeChar);
+ },
+
+ isEmpty: function(value) {
+ if (typeof value === "undefined") {
+ return true;
+ } else if (value === null) {
+ return true;
+ } else if (value === false) {
+ return true;
+ } else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ };
+})();;
+// lib/handlebars/compiler/compiler.js
+Handlebars.Compiler = function() {};
+Handlebars.JavaScriptCompiler = function() {};
+
+(function(Compiler, JavaScriptCompiler) {
+ Compiler.OPCODE_MAP = {
+ appendContent: 1,
+ getContext: 2,
+ lookupWithHelpers: 3,
+ lookup: 4,
+ append: 5,
+ invokeMustache: 6,
+ appendEscaped: 7,
+ pushString: 8,
+ truthyOrFallback: 9,
+ functionOrFallback: 10,
+ invokeProgram: 11,
+ invokePartial: 12,
+ push: 13,
+ assignToHash: 15,
+ pushStringParam: 16
+ };
+
+ Compiler.MULTI_PARAM_OPCODES = {
+ appendContent: 1,
+ getContext: 1,
+ lookupWithHelpers: 2,
+ lookup: 1,
+ invokeMustache: 3,
+ pushString: 1,
+ truthyOrFallback: 1,
+ functionOrFallback: 1,
+ invokeProgram: 3,
+ invokePartial: 1,
+ push: 1,
+ assignToHash: 1,
+ pushStringParam: 1
+ };
+
+ Compiler.DISASSEMBLE_MAP = {};
+
+ for(var prop in Compiler.OPCODE_MAP) {
+ var value = Compiler.OPCODE_MAP[prop];
+ Compiler.DISASSEMBLE_MAP[value] = prop;
+ }
+
+ Compiler.multiParamSize = function(code) {
+ return Compiler.MULTI_PARAM_OPCODES[Compiler.DISASSEMBLE_MAP[code]];
+ };
+
+ Compiler.prototype = {
+ compiler: Compiler,
+
+ disassemble: function() {
+ var opcodes = this.opcodes, opcode, nextCode;
+ var out = [], str, name, value;
+
+ for(var i=0, l=opcodes.length; i<l; i++) {
+ opcode = opcodes[i];
+
+ if(opcode === 'DECLARE') {
+ name = opcodes[++i];
+ value = opcodes[++i];
+ out.push("DECLARE " + name + " = " + value);
+ } else {
+ str = Compiler.DISASSEMBLE_MAP[opcode];
+
+ var extraParams = Compiler.multiParamSize(opcode);
+ var codes = [];
+
+ for(var j=0; j<extraParams; j++) {
+ nextCode = opcodes[++i];
+
+ if(typeof nextCode === "string") {
+ nextCode = "\"" + nextCode.replace("\n", "\\n") + "\"";
+ }
+
+ codes.push(nextCode);
+ }
+
+ str = str + " " + codes.join(" ");
+
+ out.push(str);
+ }
+ }
+
+ return out.join("\n");
+ },
+
+ guid: 0,
+
+ compile: function(program, options) {
+ this.children = [];
+ this.depths = {list: []};
+ this.options = options;
+
+ // These changes will propagate to the other compiler components
+ var knownHelpers = this.options.knownHelpers;
+ this.options.knownHelpers = {
+ 'helperMissing': true,
+ 'blockHelperMissing': true,
+ 'each': true,
+ 'if': true,
+ 'unless': true,
+ 'with': true,
+ 'log': true
+ };
+ if (knownHelpers) {
+ for (var name in knownHelpers) {
+ this.options.knownHelpers[name] = knownHelpers[name];
+ }
+ }
+
+ return this.program(program);
+ },
+
+ accept: function(node) {
+ return this[node.type](node);
+ },
+
+ program: function(program) {
+ var statements = program.statements, statement;
+ this.opcodes = [];
+
+ for(var i=0, l=statements.length; i<l; i++) {
+ statement = statements[i];
+ this[statement.type](statement);
+ }
+ this.isSimple = l === 1;
+
+ this.depths.list = this.depths.list.sort(function(a, b) {
+ return a - b;
+ });
+
+ return this;
+ },
+
+ compileProgram: function(program) {
+ var result = new this.compiler().compile(program, this.options);
+ var guid = this.guid++;
+
+ this.usePartial = this.usePartial || result.usePartial;
+
+ this.children[guid] = result;
+
+ for(var i=0, l=result.depths.list.length; i<l; i++) {
+ depth = result.depths.list[i];
+
+ if(depth < 2) { continue; }
+ else { this.addDepth(depth - 1); }
+ }
+
+ return guid;
+ },
+
+ block: function(block) {
+ var mustache = block.mustache;
+ var depth, child, inverse, inverseGuid;
+
+ var params = this.setupStackForMustache(mustache);
+
+ var programGuid = this.compileProgram(block.program);
+
+ if(block.program.inverse) {
+ inverseGuid = this.compileProgram(block.program.inverse);
+ this.declare('inverse', inverseGuid);
+ }
+
+ this.opcode('invokeProgram', programGuid, params.length, !!mustache.hash);
+ this.declare('inverse', null);
+ this.opcode('append');
+ },
+
+ inverse: function(block) {
+ var params = this.setupStackForMustache(block.mustache);
+
+ var programGuid = this.compileProgram(block.program);
+
+ this.declare('inverse', programGuid);
+
+ this.opcode('invokeProgram', null, params.length, !!block.mustache.hash);
+ this.declare('inverse', null);
+ this.opcode('append');
+ },
+
+ hash: function(hash) {
+ var pairs = hash.pairs, pair, val;
+
+ this.opcode('push', '{}');
+
+ for(var i=0, l=pairs.length; i<l; i++) {
+ pair = pairs[i];
+ val = pair[1];
+
+ this.accept(val);
+ this.opcode('assignToHash', pair[0]);
+ }
+ },
+
+ partial: function(partial) {
+ var id = partial.id;
+ this.usePartial = true;
+
+ if(partial.context) {
+ this.ID(partial.context);
+ } else {
+ this.opcode('push', 'depth0');
+ }
+
+ this.opcode('invokePartial', id.original);
+ this.opcode('append');
+ },
+
+ content: function(content) {
+ this.opcode('appendContent', content.string);
+ },
+
+ mustache: function(mustache) {
+ var params = this.setupStackForMustache(mustache);
+
+ this.opcode('invokeMustache', params.length, mustache.id.original, !!mustache.hash);
+
+ if(mustache.escaped && !this.options.noEscape) {
+ this.opcode('appendEscaped');
+ } else {
+ this.opcode('append');
+ }
+ },
+
+ ID: function(id) {
+ this.addDepth(id.depth);
+
+ this.opcode('getContext', id.depth);
+
+ this.opcode('lookupWithHelpers', id.parts[0] || null, id.isScoped || false);
+
+ for(var i=1, l=id.parts.length; i<l; i++) {
+ this.opcode('lookup', id.parts[i]);
+ }
+ },
+
+ STRING: function(string) {
+ this.opcode('pushString', string.string);
+ },
+
+ INTEGER: function(integer) {
+ this.opcode('push', integer.integer);
+ },
+
+ BOOLEAN: function(bool) {
+ this.opcode('push', bool.bool);
+ },
+
+ comment: function() {},
+
+ // HELPERS
+ pushParams: function(params) {
+ var i = params.length, param;
+
+ while(i--) {
+ param = params[i];
+
+ if(this.options.stringParams) {
+ if(param.depth) {
+ this.addDepth(param.depth);
+ }
+
+ this.opcode('getContext', param.depth || 0);
+ this.opcode('pushStringParam', param.string);
+ } else {
+ this[param.type](param);
+ }
+ }
+ },
+
+ opcode: function(name, val1, val2, val3) {
+ this.opcodes.push(Compiler.OPCODE_MAP[name]);
+ if(val1 !== undefined) { this.opcodes.push(val1); }
+ if(val2 !== undefined) { this.opcodes.push(val2); }
+ if(val3 !== undefined) { this.opcodes.push(val3); }
+ },
+
+ declare: function(name, value) {
+ this.opcodes.push('DECLARE');
+ this.opcodes.push(name);
+ this.opcodes.push(value);
+ },
+
+ addDepth: function(depth) {
+ if(depth === 0) { return; }
+
+ if(!this.depths[depth]) {
+ this.depths[depth] = true;
+ this.depths.list.push(depth);
+ }
+ },
+
+ setupStackForMustache: function(mustache) {
+ var params = mustache.params;
+
+ this.pushParams(params);
+
+ if(mustache.hash) {
+ this.hash(mustache.hash);
+ }
+
+ this.ID(mustache.id);
+
+ return params;
+ }
+ };
+
+ JavaScriptCompiler.prototype = {
+ // PUBLIC API: You can override these methods in a subclass to provide
+ // alternative compiled forms for name lookup and buffering semantics
+ nameLookup: function(parent, name, type) {
+ if (/^[0-9]+$/.test(name)) {
+ return parent + "[" + name + "]";
+ } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
+ return parent + "." + name;
+ }
+ else {
+ return parent + "['" + name + "']";
+ }
+ },
+
+ appendToBuffer: function(string) {
+ if (this.environment.isSimple) {
+ return "return " + string + ";";
+ } else {
+ return "buffer += " + string + ";";
+ }
+ },
+
+ initializeBuffer: function() {
+ return this.quotedString("");
+ },
+
+ namespace: "Handlebars",
+ // END PUBLIC API
+
+ compile: function(environment, options, context, asObject) {
+ this.environment = environment;
+ this.options = options || {};
+
+ this.name = this.environment.name;
+ this.isChild = !!context;
+ this.context = context || {
+ programs: [],
+ aliases: { self: 'this' },
+ registers: {list: []}
+ };
+
+ this.preamble();
+
+ this.stackSlot = 0;
+ this.stackVars = [];
+
+ this.compileChildren(environment, options);
+
+ var opcodes = environment.opcodes, opcode;
+
+ this.i = 0;
+
+ for(l=opcodes.length; this.i<l; this.i++) {
+ opcode = this.nextOpcode(0);
+
+ if(opcode[0] === 'DECLARE') {
+ this.i = this.i + 2;
+ this[opcode[1]] = opcode[2];
+ } else {
+ this.i = this.i + opcode[1].length;
+ this[opcode[0]].apply(this, opcode[1]);
+ }
+ }
+
+ return this.createFunctionContext(asObject);
+ },
+
+ nextOpcode: function(n) {
+ var opcodes = this.environment.opcodes, opcode = opcodes[this.i + n], name, val;
+ var extraParams, codes;
+
+ if(opcode === 'DECLARE') {
+ name = opcodes[this.i + 1];
+ val = opcodes[this.i + 2];
+ return ['DECLARE', name, val];
+ } else {
+ name = Compiler.DISASSEMBLE_MAP[opcode];
+
+ extraParams = Compiler.multiParamSize(opcode);
+ codes = [];
+
+ for(var j=0; j<extraParams; j++) {
+ codes.push(opcodes[this.i + j + 1 + n]);
+ }
+
+ return [name, codes];
+ }
+ },
+
+ eat: function(opcode) {
+ this.i = this.i + opcode.length;
+ },
+
+ preamble: function() {
+ var out = [];
+
+ // this register will disambiguate helper lookup from finding a function in
+ // a context. This is necessary for mustache compatibility, which requires
+ // that context functions in blocks are evaluated by blockHelperMissing, and
+ // then proceed as if the resulting value was provided to blockHelperMissing.
+ this.useRegister('foundHelper');
+
+ if (!this.isChild) {
+ var namespace = this.namespace;
+ var copies = "helpers = helpers || " + namespace + ".helpers;";
+ if(this.environment.usePartial) { copies = copies + " partials = partials || " + namespace + ".partials;"; }
+ out.push(copies);
+ } else {
+ out.push('');
+ }
+
+ if (!this.environment.isSimple) {
+ out.push(", buffer = " + this.initializeBuffer());
+ } else {
+ out.push("");
+ }
+
+ // track the last context pushed into place to allow skipping the
+ // getContext opcode when it would be a noop
+ this.lastContext = 0;
+ this.source = out;
+ },
+
+ createFunctionContext: function(asObject) {
+ var locals = this.stackVars;
+ if (!this.isChild) {
+ locals = locals.concat(this.context.registers.list);
+ }
+
+ if(locals.length > 0) {
+ this.source[1] = this.source[1] + ", " + locals.join(", ");
+ }
+
+ // Generate minimizer alias mappings
+ if (!this.isChild) {
+ var aliases = []
+ for (var alias in this.context.aliases) {
+ this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
+ }
+ }
+
+ if (this.source[1]) {
+ this.source[1] = "var " + this.source[1].substring(2) + ";";
+ }
+
+ // Merge children
+ if (!this.isChild) {
+ this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
+ }
+
+ if (!this.environment.isSimple) {
+ this.source.push("return buffer;");
+ }
+
+ var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
+
+ for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
+ params.push("depth" + this.environment.depths.list[i]);
+ }
+
+ if (asObject) {
+ params.push(this.source.join("\n "));
+
+ return Function.apply(this, params);
+ } else {
+ var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n ' + this.source.join("\n ") + '}';
+ Handlebars.log(Handlebars.logger.DEBUG, functionSource + "\n\n");
+ return functionSource;
+ }
+ },
+
+ appendContent: function(content) {
+ this.source.push(this.appendToBuffer(this.quotedString(content)));
+ },
+
+ append: function() {
+ var local = this.popStack();
+ this.source.push("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
+ if (this.environment.isSimple) {
+ this.source.push("else { " + this.appendToBuffer("''") + " }");
+ }
+ },
+
+ appendEscaped: function() {
+ var opcode = this.nextOpcode(1), extra = "";
+ this.context.aliases.escapeExpression = 'this.escapeExpression';
+
+ if(opcode[0] === 'appendContent') {
+ extra = " + " + this.quotedString(opcode[1][0]);
+ this.eat(opcode);
+ }
+
+ this.source.push(this.appendToBuffer("escapeExpression(" + this.popStack() + ")" + extra));
+ },
+
+ getContext: function(depth) {
+ if(this.lastContext !== depth) {
+ this.lastContext = depth;
+ }
+ },
+
+ lookupWithHelpers: function(name, isScoped) {
+ if(name) {
+ var topStack = this.nextStack();
+
+ this.usingKnownHelper = false;
+
+ var toPush;
+ if (!isScoped && this.options.knownHelpers[name]) {
+ toPush = topStack + " = " + this.nameLookup('helpers', name, 'helper');
+ this.usingKnownHelper = true;
+ } else if (isScoped || this.options.knownHelpersOnly) {
+ toPush = topStack + " = " + this.nameLookup('depth' + this.lastContext, name, 'context');
+ } else {
+ this.register('foundHelper', this.nameLookup('helpers', name, 'helper'));
+ toPush = topStack + " = foundHelper || " + this.nameLookup('depth' + this.lastContext, name, 'context');
+ }
+
+ toPush += ';';
+ this.source.push(toPush);
+ } else {
+ this.pushStack('depth' + this.lastContext);
+ }
+ },
+
+ lookup: function(name) {
+ var topStack = this.topStack();
+ this.source.push(topStack + " = (" + topStack + " === null || " + topStack + " === undefined || " + topStack + " === false ? " +
+ topStack + " : " + this.nameLookup(topStack, name, 'context') + ");");
+ },
+
+ pushStringParam: function(string) {
+ this.pushStack('depth' + this.lastContext);
+ this.pushString(string);
+ },
+
+ pushString: function(string) {
+ this.pushStack(this.quotedString(string));
+ },
+
+ push: function(name) {
+ this.pushStack(name);
+ },
+
+ invokeMustache: function(paramSize, original, hasHash) {
+ this.populateParams(paramSize, this.quotedString(original), "{}", null, hasHash, function(nextStack, helperMissingString, id) {
+ if (!this.usingKnownHelper) {
+ this.context.aliases.helperMissing = 'helpers.helperMissing';
+ this.context.aliases.undef = 'void 0';
+ this.source.push("else if(" + id + "=== undef) { " + nextStack + " = helperMissing.call(" + helperMissingString + "); }");
+ if (nextStack !== id) {
+ this.source.push("else { " + nextStack + " = " + id + "; }");
+ }
+ }
+ });
+ },
+
+ invokeProgram: function(guid, paramSize, hasHash) {
+ var inverse = this.programExpression(this.inverse);
+ var mainProgram = this.programExpression(guid);
+
+ this.populateParams(paramSize, null, mainProgram, inverse, hasHash, function(nextStack, helperMissingString, id) {
+ if (!this.usingKnownHelper) {
+ this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
+ this.source.push("else { " + nextStack + " = blockHelperMissing.call(" + helperMissingString + "); }");
+ }
+ });
+ },
+
+ populateParams: function(paramSize, helperId, program, inverse, hasHash, fn) {
+ var needsRegister = hasHash || this.options.stringParams || inverse || this.options.data;
+ var id = this.popStack(), nextStack;
+ var params = [], param, stringParam, stringOptions;
+
+ if (needsRegister) {
+ this.register('tmp1', program);
+ stringOptions = 'tmp1';
+ } else {
+ stringOptions = '{ hash: {} }';
+ }
+
+ if (needsRegister) {
+ var hash = (hasHash ? this.popStack() : '{}');
+ this.source.push('tmp1.hash = ' + hash + ';');
+ }
+
+ if(this.options.stringParams) {
+ this.source.push('tmp1.contexts = [];');
+ }
+
+ for(var i=0; i<paramSize; i++) {
+ param = this.popStack();
+ params.push(param);
+
+ if(this.options.stringParams) {
+ this.source.push('tmp1.contexts.push(' + this.popStack() + ');');
+ }
+ }
+
+ if(inverse) {
+ this.source.push('tmp1.fn = tmp1;');
+ this.source.push('tmp1.inverse = ' + inverse + ';');
+ }
+
+ if(this.options.data) {
+ this.source.push('tmp1.data = data;');
+ }
+
+ params.push(stringOptions);
+
+ this.populateCall(params, id, helperId || id, fn, program !== '{}');
+ },
+
+ populateCall: function(params, id, helperId, fn, program) {
+ var paramString = ["depth0"].concat(params).join(", ");
+ var helperMissingString = ["depth0"].concat(helperId).concat(params).join(", ");
+
+ var nextStack = this.nextStack();
+
+ if (this.usingKnownHelper) {
+ this.source.push(nextStack + " = " + id + ".call(" + paramString + ");");
+ } else {
+ this.context.aliases.functionType = '"function"';
+ var condition = program ? "foundHelper && " : ""
+ this.source.push("if(" + condition + "typeof " + id + " === functionType) { " + nextStack + " = " + id + ".call(" + paramString + "); }");
+ }
+ fn.call(this, nextStack, helperMissingString, id);
+ this.usingKnownHelper = false;
+ },
+
+ invokePartial: function(context) {
+ params = [this.nameLookup('partials', context, 'partial'), "'" + context + "'", this.popStack(), "helpers", "partials"];
+
+ if (this.options.data) {
+ params.push("data");
+ }
+
+ this.pushStack("self.invokePartial(" + params.join(", ") + ");");
+ },
+
+ assignToHash: function(key) {
+ var value = this.popStack();
+ var hash = this.topStack();
+
+ this.source.push(hash + "['" + key + "'] = " + value + ";");
+ },
+
+ // HELPERS
+
+ compiler: JavaScriptCompiler,
+
+ compileChildren: function(environment, options) {
+ var children = environment.children, child, compiler;
+
+ for(var i=0, l=children.length; i<l; i++) {
+ child = children[i];
+ compiler = new this.compiler();
+
+ this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
+ var index = this.context.programs.length;
+ child.index = index;
+ child.name = 'program' + index;
+ this.context.programs[index] = compiler.compile(child, options, this.context);
+ }
+ },
+
+ programExpression: function(guid) {
+ if(guid == null) { return "self.noop"; }
+
+ var child = this.environment.children[guid],
+ depths = child.depths.list;
+ var programParams = [child.index, child.name, "data"];
+
+ for(var i=0, l = depths.length; i<l; i++) {
+ depth = depths[i];
+
+ if(depth === 1) { programParams.push("depth0"); }
+ else { programParams.push("depth" + (depth - 1)); }
+ }
+
+ if(depths.length === 0) {
+ return "self.program(" + programParams.join(", ") + ")";
+ } else {
+ programParams.shift();
+ return "self.programWithDepth(" + programParams.join(", ") + ")";
+ }
+ },
+
+ register: function(name, val) {
+ this.useRegister(name);
+ this.source.push(name + " = " + val + ";");
+ },
+
+ useRegister: function(name) {
+ if(!this.context.registers[name]) {
+ this.context.registers[name] = true;
+ this.context.registers.list.push(name);
+ }
+ },
+
+ pushStack: function(item) {
+ this.source.push(this.nextStack() + " = " + item + ";");
+ return "stack" + this.stackSlot;
+ },
+
+ nextStack: function() {
+ this.stackSlot++;
+ if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
+ return "stack" + this.stackSlot;
+ },
+
+ popStack: function() {
+ return "stack" + this.stackSlot--;
+ },
+
+ topStack: function() {
+ return "stack" + this.stackSlot;
+ },
+
+ quotedString: function(str) {
+ return '"' + str
+ .replace(/\\/g, '\\\\')
+ .replace(/"/g, '\\"')
+ .replace(/\n/g, '\\n')
+ .replace(/\r/g, '\\r') + '"';
+ }
+ };
+
+ var reservedWords = (
+ "break else new var" +
+ " case finally return void" +
+ " catch for switch while" +
+ " continue function this with" +
+ " default if throw" +
+ " delete in try" +
+ " do instanceof typeof" +
+ " abstract enum int short" +
+ " boolean export interface static" +
+ " byte extends long super" +
+ " char final native synchronized" +
+ " class float package throws" +
+ " const goto private transient" +
+ " debugger implements protected volatile" +
+ " double import public let yield"
+ ).split(" ");
+
+ var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+ for(var i=0, l=reservedWords.length; i<l; i++) {
+ compilerWords[reservedWords[i]] = true;
+ }
+
+ JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
+ if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {
+ return true;
+ }
+ return false;
+ }
+
+})(Handlebars.Compiler, Handlebars.JavaScriptCompiler);
+
+Handlebars.precompile = function(string, options) {
+ options = options || {};
+
+ var ast = Handlebars.parse(string);
+ var environment = new Handlebars.Compiler().compile(ast, options);
+ return new Handlebars.JavaScriptCompiler().compile(environment, options);
+};
+
+Handlebars.compile = function(string, options) {
+ options = options || {};
+
+ var compiled;
+ function compile() {
+ var ast = Handlebars.parse(string);
+ var environment = new Handlebars.Compiler().compile(ast, options);
+ var templateSpec = new Handlebars.JavaScriptCompiler().compile(environment, options, undefined, true);
+ return Handlebars.template(templateSpec);
+ }
+
+ // Template is only compiled on first use and cached after that point.
+ return function(context, options) {
+ if (!compiled) {
+ compiled = compile();
+ }
+ return compiled.call(this, context, options);
+ };
+};
+;
+// lib/handlebars/runtime.js
+Handlebars.VM = {
+ template: function(templateSpec) {
+ // Just add water
+ var container = {
+ escapeExpression: Handlebars.Utils.escapeExpression,
+ invokePartial: Handlebars.VM.invokePartial,
+ programs: [],
+ program: function(i, fn, data) {
+ var programWrapper = this.programs[i];
+ if(data) {
+ return Handlebars.VM.program(fn, data);
+ } else if(programWrapper) {
+ return programWrapper;
+ } else {
+ programWrapper = this.programs[i] = Handlebars.VM.program(fn);
+ return programWrapper;
+ }
+ },
+ programWithDepth: Handlebars.VM.programWithDepth,
+ noop: Handlebars.VM.noop
+ };
+
+ return function(context, options) {
+ options = options || {};
+ return templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data);
+ };
+ },
+
+ programWithDepth: function(fn, data, $depth) {
+ var args = Array.prototype.slice.call(arguments, 2);
+
+ return function(context, options) {
+ options = options || {};
+
+ return fn.apply(this, [context, options.data || data].concat(args));
+ };
+ },
+ program: function(fn, data) {
+ return function(context, options) {
+ options = options || {};
+
+ return fn(context, options.data || data);
+ };
+ },
+ noop: function() { return ""; },
+ invokePartial: function(partial, name, context, helpers, partials, data) {
+ options = { helpers: helpers, partials: partials, data: data };
+
+ if(partial === undefined) {
+ throw new Handlebars.Exception("The partial " + name + " could not be found");
+ } else if(partial instanceof Function) {
+ return partial(context, options);
+ } else if (!Handlebars.compile) {
+ throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
+ } else {
+ partials[name] = Handlebars.compile(partial);
+ return partials[name](context, options);
+ }
+ }
+};
+
+Handlebars.template = Handlebars.VM.template;
+;
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/mvc/annotations.js
--- /dev/null
+++ b/static/scripts/mvc/annotations.js
@@ -0,0 +1,35 @@
+/*==============================================================================
+Backbone MV for Annotations
+
+
+TODO:
+
+==============================================================================*/
+/** Single Tag model
+ */
+var Annotation = BaseModel.extend( LoggableMixin ).extend({
+
+ // uncomment this out see log messages
+ logger : console,
+
+ toString : function(){
+ return 'Annotation()';
+ }
+});
+
+//------------------------------------------------------------------------------
+/** Single Tag view
+ */
+var AnnotationView = BaseView.extend( LoggableMixin ).extend({
+
+ // uncomment this out see log messages
+ logger : console,
+
+ toString : function(){
+ return 'AnnotationView()';
+ }
+});
+
+//==============================================================================
+/** YAGNI? A collection of Annotations, mainView?
+ */
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/mvc/base-mvc.js
--- /dev/null
+++ b/static/scripts/mvc/base-mvc.js
@@ -0,0 +1,271 @@
+/**
+ * Simple base model for any visible element. Includes useful attributes and ability
+ * to set and track visibility.
+ */
+var BaseModel = Backbone.RelationalModel.extend({
+ defaults: {
+ name: null,
+ hidden: false
+ },
+
+ show: function() {
+ this.set("hidden", false);
+ },
+
+ hide: function() {
+ this.set("hidden", true);
+ },
+
+ is_visible: function() {
+ return !this.attributes.hidden;
+ }
+});
+
+
+/**
+ * Base view that handles visibility based on model's hidden attribute.
+ */
+var BaseView = Backbone.View.extend({
+
+ initialize: function() {
+ this.model.on("change:hidden", this.update_visible, this);
+ this.update_visible();
+ },
+
+ update_visible: function() {
+ if( this.model.attributes.hidden ){
+ this.$el.hide();
+ } else {
+ this.$el.show();
+ }
+ }
+});
+
+//==============================================================================
+/**
+ * Adds logging capabilities to your Models/Views
+ * can be used with plain browser console (or something more complex like an AJAX logger)
+ *
+ * add to your models/views at the definition using chaining:
+ * var MyModel = BaseModel.extend( LoggableMixin ).extend({ // ... });
+ *
+ * or - more explicitly AFTER the definition:
+ * var MyModel = BaseModel.extend({
+ * logger : console
+ * // ...
+ * this.log( '$#%& it! - broken already...' );
+ * })
+ * _.extend( MyModel.prototype, LoggableMixin )
+ *
+ * NOTE: currently only uses the console.debug log function (as opposed to debug, error, warn, etc.)
+ */
+var LoggableMixin = {
+ // replace null with console (if available) to see all logs
+ logger : null,
+
+ log : function(){
+ return ( this.logger )?( this.logger.log.apply( this, arguments ) )
+ :( undefined );
+ }
+};
+
+
+//==============================================================================
+/**
+ * Base class for template loaders:
+ * The main interface is loader.getTemplates( templatesToLoad )
+ * where templatesToLoad is in the form:
+ * {
+ * remoteTemplateFilename1: {
+ * templateFunctionName1 : templateID1,
+ * templateFunctionName2 : templateID2,
+ * ...
+ * },
+ * remoteTemplateFilename2: {
+ * templateFunctionName3 : templateID3,
+ * templateFunctionName4 : templateID4,
+ * ...
+ * }
+ * }
+ * getTemplates will return a map of the templates in the form:
+ * {
+ * templateFunctionName1 : compiledTemplateFn1(),
+ * templateFunctionName2 : compiledTemplateFn2(),
+ * templateFunctionName3 : compiledTemplateFn3(),
+ * ...
+ * }
+ *
+ * Generally meant to be called for Backbone views, etc like this:
+ * BackboneView.templates = CompiledTemplateLoader( templatesToLoad );
+ */
+var TemplateLoader = _.extend( {}, LoggableMixin, {
+ //TODO: incorporate caching of template functions (for use across objects)
+ //TODO: only require and use 2 level (or some variation) map templatesToLoad for the remote loader
+
+ // comment next line out to suppress logging
+ //logger : console,
+
+ //cachedTemplates : {},
+
+ getTemplateLoadFn : function(){
+ throw( "There is no templateLoadFn. Make sure you're using a subclass of TemplateLoader" );
+ },
+
+ // loop through templatesToLoad assuming it is a map in the form mentioned above
+ getTemplates : function( templatesToLoad, forceReload ){
+ forceReload = forceReload || false;
+ this.log( this, 'getTemplates:', templatesToLoad, ', forceReload:', forceReload );
+
+ //!TODO: cache templates here
+ var templates = {},
+ loader = this,
+ templateLoadFn = this.getTemplateLoadFn();
+
+ if( !templatesToLoad ){ return templates; }
+ jQuery.each( templatesToLoad, function( templateFile, templateData ){
+
+ //TODO: handle flatter map versions of templatesToLoad ({ name : id })
+ jQuery.each( templateData, function( templateName, templateID ){
+ loader.log( loader + ', templateFile:', templateFile,
+ 'templateName:', templateName, ', templateID:', templateID );
+ templates[ templateName ] = templateLoadFn.call( loader, templateFile, templateName, templateID );
+ });
+ });
+ return templates;
+ }
+});
+
+
+//..............................................................................
+/** find the compiled template in Handlebars.templates by templateName
+ * and return the entire, requested templates map
+ */
+var CompiledTemplateLoader = _.extend( {}, TemplateLoader, {
+ getTemplateLoadFn : function(){ return this.loadCompiledHandlebarsTemplate; },
+
+ // override if new compiler
+ loadCompiledHandlebarsTemplate : function( templateFile, templateName, templateID ){
+ //pre: compiled templates should have been loaded with the mako helper h.templates
+ // (although these could be dynamically loaded as well?)
+ this.log( 'getInDomTemplates, templateFile:', templateFile,
+ 'templateName:', templateName, ', templateID:', templateID );
+
+ if( !Handlebars.templates || !Handlebars.templates[ templateID ] ){
+ throw( 'Template not found: Handlebars.' + templateID
+ + '. Check your h.templates() call in the mako file that rendered this page' );
+ }
+ this.log( 'found template function:', templateID );
+ // really this is just a lookup
+ return Handlebars.templates[ templateID ];
+ }
+
+ //TEST: Handlebars.full NOT runtime
+ //TEST: no Handlebars
+ //TEST: bad id
+ //TEST: Handlebars.runtime, good id
+});
+
+//..............................................................................
+/** find the NON-compiled template templateID in the DOM, compile it (using Handlebars),
+ * and return the entire, requested templates map
+ * (Note: for use with Mako.include and multiple templates)
+ */
+var InDomTemplateLoader = _.extend( {}, TemplateLoader, {
+
+ // override or change if a new compiler (Underscore, etc.) is being used
+ compileTemplate : function( templateText ){
+ // we'll need the compiler
+ if( !Handlebars || !Handlebars.compile ){
+ throw( 'No Handlebars.compile found. You may only have Handlebars.runtime loaded.'
+ + 'Include handlebars.full for this to work' );
+ }
+ // copy fn ref to this view under the templateName
+ this.log( 'compiling template:', templateText );
+ return Handlebars.compile( templateText );
+ },
+
+ findTemplateInDom : function( templateFile, templateName, templateID ){
+ // assume the last is best
+ return $( 'script#' + templateID ).last();
+ },
+
+ getTemplateLoadFn : function(){ return this.loadInDomTemplate; },
+
+ loadInDomTemplate : function( templateFile, templateName, templateID ){
+ this.log( 'getInDomTemplate, templateFile:', templateFile,
+ 'templateName:', templateName, ', templateID:', templateID );
+
+ // find it in the dom by the id and compile
+ var template = this.findTemplateInDom( templateFile, templateName, templateID );
+ if( !template || !template.length ){
+ throw( 'Template not found within the DOM: ' + templateID
+ + '. Check that this template has been included in the page' );
+ }
+ this.log( 'found template in dom:', template.html() );
+ return this.compileTemplate( template.html() );
+ }
+
+ //TEST: no compiler
+ //TEST: good url, good id, in DOM
+ //TEST: good url, good id, NOT in DOM
+});
+
+//..............................................................................
+/** HTTP GET the NON-compiled templates, append into the DOM, compile them,
+ * and return the entire, requested templates map
+ * (for use with dynamically loaded views)
+ */
+var RemoteTemplateLoader = _.extend( {}, InDomTemplateLoader, {
+ templateBaseURL : 'static/scripts/templates/',
+
+ getTemplateLoadFn : function(){ return this.loadViaHttpGet; },
+
+ loadViaHttpGet : function( templateFile, templateName, templateID ){
+ var templateBaseURL = 'static/scripts/templates/';
+ this.log( 'loadViaHttpGet, templateFile:', templateFile,
+ 'templateName:', templateName, ', templateID:', templateID,
+ 'templateBaseURL:', this.templateBaseURL );
+
+ //??: possibly not the best pattern here...
+ // try in-dom first (prevent loading the same templateFile for each of its templates)
+ var template = null;
+ try {
+ template = this.loadInDomTemplate( templateFile, templateName, templateID );
+
+ // if that didn't work, load the templateFile via GET,...
+ } catch( exception ){
+ this.log( 'getInDomTemplate exception:' + exception );
+ // handle no compiler exception
+ if( !Handlebars.compile ){ throw( exception ); }
+ //TEST:
+
+ this.log( "Couldn't locate template in DOM: " + templateID );
+ var loader = this;
+ var url = templateBaseURL + templateFile;
+ //??: async : false may cause problems in the long run
+ jQuery.ajax( url, {
+ method : 'GET',
+ async : false,
+ success : function( data ){
+ loader.log( templateFile + ' loaded via GET. Attempting compile...' );
+ //...move the templateFile into the DOM and try that again
+ $( 'body' ).append( data );
+ template = loader.loadInDomTemplate( templateFile, templateName, templateID );
+ },
+ error : function( data, status, xhr ){
+ throw( 'Failed to fetch ' + url + ':' + status );
+ }
+ });
+ }
+ if( !template ){
+ throw( "Couldn't load or fetch template: " + templateID );
+ }
+ return template;
+ }
+
+ //TEST: no compiler
+ //TEST: good url, good id, already local
+ //TEST: good url, good id, remote load
+ //TEST: good url, bad template id
+ //TEST: bad url, error from ajax
+});
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/mvc/history.js
--- a/static/scripts/mvc/history.js
+++ b/static/scripts/mvc/history.js
@@ -1,3 +1,4 @@
+if( console ){ console.debug( 'history mvc loaded' ); }
/*
Backbone.js implementation of history panel
@@ -13,6 +14,8 @@
convert function comments to /** style
complete comments
+ don't draw body until it's first unhide event
+
as always: where does the model end and the view begin?
HistoryPanel
HistoryCollection: (collection of History: 'Saved Histories')
@@ -30,23 +33,12 @@
poly HistoryItemView on: can/cant_edit
*/
-_ = _;
//==============================================================================
-var Loggable = {
- // replace null with console (if available) to see all logs
- logger : null,
-
- log : function(){
- return ( this.logger )?( this.logger.debug.apply( this, arguments ) )
- :( undefined );
- }
-};
-var LoggingModel = BaseModel.extend( Loggable );
-var LoggingView = BaseView.extend( Loggable );
//==============================================================================
//TODO: move to Galaxy obj./namespace, decorate for current page (as GalaxyPaths)
+/*
var Localizable = {
localizedStrings : {},
setLocalizedString : function( str, localizedString ){
@@ -58,6 +50,7 @@
}
};
var LocalizableView = LoggingView.extend( Localizable );
+*/
//TODO: wire up to views
//==============================================================================
@@ -93,7 +86,8 @@
}
//==============================================================================
-var HistoryItem = LoggingModel.extend({
+//TODO: use initialize (or validate) to check purged AND deleted -> purged XOR deleted
+var HistoryItem = BaseModel.extend( LoggableMixin ).extend({
// a single HDA model
// uncomment this out see log messages
@@ -141,7 +135,11 @@
},
toString : function(){
- return 'HistoryItem(' + ( this.get( 'name' ) || this.get( 'id' ) || '' ) + ')';
+ var nameAndId = this.get( 'id' ) || '';
+ if( this.get( 'name' ) ){
+ nameAndId += ':"' + this.get( 'name' ) + '"';
+ }
+ return 'HistoryItem(' + nameAndId + ')';
}
});
@@ -161,20 +159,19 @@
//==============================================================================
-var HistoryItemView = LoggingView.extend({
+var HistoryItemView = BaseView.extend( LoggableMixin ).extend({
// view for HistoryItem model above
// uncomment this out see log messages
- logger : console,
+ //logger : console,
tagName : "div",
className : "historyItemContainer",
-
// ................................................................................ SET UP
initialize : function(){
this.log( this + '.initialize:', this, this.model );
- return this;
+
},
// ................................................................................ RENDER MAIN
@@ -190,12 +187,8 @@
.addClass( 'historyItemWrapper' ).addClass( 'historyItem' )
.addClass( 'historyItem-' + state );
- itemWrapper.append( this._render_purgedWarning() );
- itemWrapper.append( this._render_deletionWarning() );
- itemWrapper.append( this._render_visibleWarning() );
-
+ itemWrapper.append( this._render_warnings() );
itemWrapper.append( this._render_titleBar() );
-
this.body = $( this._render_body() );
itemWrapper.append( this.body );
@@ -215,52 +208,9 @@
},
// ................................................................................ RENDER WARNINGS
- //TODO: refactor into generalized warning widget/view
- //TODO: refactor the three following - too much common ground
- _render_purgedWarning : function(){
- // Render warnings for purged
- //this.log( this + '_render_purgedWarning' );
- var warning = null;
- if( this.model.get( 'purged' ) ){
- warning = $( HistoryItemView.STRINGS.purgedMsg );
- }
- //this.log( 'warning:', warning );
- return warning;
- },
-
- _render_deletionWarning : function(){
- //this.log( this + '_render_deletionWarning' );
- // Render warnings for deleted items (and links: undelete and purge)
- //pre: this.model.purge_url will be undefined if trans.app.config.allow_user_dataset_purge=False
- var warningElem = null;
- if( this.model.get( 'deleted' ) ){
- var warning = '';
-
- if( this.model.get( 'undelete_url' ) ){
- warning += HistoryItemView.TEMPLATES.undeleteLink( this.model.attributes );
- }
- if( this.model.get( 'purge_url' ) ){
- warning += HistoryItemView.TEMPLATES.purgeLink( this.model.attributes );
- }
- // wrap it in the standard warning msg
- warningElem = $( HistoryItemView.TEMPLATES.warningMsg({ warning: warning }) );
- }
- //this.log( 'warning:', warning );
- return warningElem;
- },
-
- _render_visibleWarning : function(){
- //this.log( this + '_render_visibleWarning' );
- // Render warnings for hidden items (and link: unhide)
- var warningElem = null;
- if( !this.model.get( 'visible' ) && this.model.get( 'unhide_url' ) ){
- var warning = HistoryItemView.TEMPLATES.hiddenMsg( this.model.attributes );
-
- // wrap it in the standard warning msg
- warningElem = $( HistoryItemView.TEMPLATES.warningMsg({ warning: warning }) );
- }
- //this.log( 'warning:', warning );
- return warningElem;
+ _render_warnings : function(){
+ // jQ errs on building dom with whitespace - if there are no messages, trim -> ''
+ return $( jQuery.trim( HistoryItemView.templates.messages( this.model.toJSON() ) ) );
},
// ................................................................................ RENDER TITLEBAR
@@ -292,23 +242,21 @@
//TODO: move other data (non-href) into {} in view definition, cycle over those keys in _titlebuttons
//TODO: move disabled span data into view def, move logic into _titlebuttons
_render_displayButton : function(){
- // render the display icon-button
- // show a disabled display if the data's been purged
- if( this.model.get( 'purged' ) ){
- return $( '<span class="icon-button display_disabled tooltip" ' +
- 'title="Cannot display datasets removed from disk"></span>' );
- }
- var id = this.model.get( 'id' ),
- displayBtnData = {
- //TODO: localized title
- title : 'Display data in browser',
- //TODO: need generated url here
- href : '/datasets/' + id + '/display/?preview=True',
- target : ( this.model.get( 'for_editing' ) )?( 'galaxy_main' ):( '' ),
- classes : [ 'icon-button', 'tooltip', 'display' ],
- dataset_id : id
- };
- return $( linkHTMLTemplate( displayBtnData ) );
+ displayBtnData = ( this.model.get( 'purged' ) )?({
+ // show a disabled display if the data's been purged
+ title : 'Cannot display datasets removed from disk',
+ icon_class : 'display',
+ enabled : false,
+ }):({
+ // if not, render the display icon-button with href
+ title : 'Display data in browser',
+ //TODO: need generated url here
+ href : this.model.get( 'display_url' ),
+ target : ( this.model.get( 'for_editing' ) )?( 'galaxy_main' ):( null ),
+ icon_class : 'display',
+ });
+ this.displayButton = new IconButtonView({ model : new IconButton( displayBtnData ) });
+ return this.displayButton.render().$el;
},
_render_editButton : function(){
@@ -317,44 +265,42 @@
purged = this.model.get( 'purged' ),
deleted = this.model.get( 'deleted' );
+ var editBtnData = {
+ title : 'Edit attributes',
+ href : this.model.get( 'edit_url' ),
+ target : 'galaxy_main',
+ icon_class : 'edit'
+ }
+ // disable if purged or deleted and explain why in the tooltip
+ //TODO: if for_editing
if( deleted || purged ){
- if( !purged ){
- return $( '<span class="icon-button edit_disabled tooltip" ' +
- 'title="Undelete dataset to edit attributes"></span>' );
- } else {
- return $( '<span class="icon-button edit_disabled tooltip" ' +
- 'title="Cannot edit attributes of datasets removed from disk"></span>' );
- }
+ editBtnData = {
+ enabled : false,
+ icon_class : 'edit'
+ };
+ editBtnData.title = ( !purged )?( 'Undelete dataset to edit attributes' ):
+ ( 'Cannot edit attributes of datasets removed from disk' );
}
- return $( linkHTMLTemplate({
- title : 'Edit attributes',
- //TODO: need generated url here
- href : '/datasets/' + id + '/edit',
- target : 'galaxy_main',
- classes : [ 'icon-button', 'tooltip', 'edit' ]
- }) );
+ this.editButton = new IconButtonView({ model : new IconButton( editBtnData ) });
+ return this.editButton.render().$el;
},
_render_deleteButton : function(){
- // render the delete icon-button
- var id = this.model.get( 'id' ),
- purged = this.model.get( 'purged' ),
- deleted = this.model.get( 'deleted' );
-
- //??: WHAAAA? can_edit == deleted??
- // yes! : (history_common.mako) can_edit=( not ( data.deleted or data.purged ) )
- if( purged || deleted ){
- return $( '<span title="Dataset is already deleted" ' +
- 'class="icon-button delete_disabled tooltip"></span>' );
- }
- return $( linkHTMLTemplate({
+ if( !this.model.get( 'for_editing' ) ){ return null; }
+
+ var deleteBtnData = ( this.model.get( 'delete_url' ) )?({
title : 'Delete',
- //TODO: need generated url here
- href : '/datasets/' + id + '/delete?show_deleted_on_refresh=False',
+ href : this.model.get( 'delete_url' ),
target : 'galaxy_main',
- id : 'historyItemDeleter-' + id,
- classes : [ 'icon-button', 'tooltip', 'delete' ]
- }));
+ id : 'historyItemDeleter-' + this.model.get( 'id' ),
+ icon_class : 'delete'
+ }):({
+ title : 'Dataset is already deleted',
+ icon_class : 'delete',
+ enabled : false
+ });
+ this.deleteButton = new IconButtonView({ model : new IconButton( deleteBtnData ) });
+ return this.deleteButton.render().$el;
},
_render_titleLink : function(){
@@ -441,7 +387,7 @@
});
warningMsgText += 'You may be able to ' + editLink + '.';
}
- parent.append( $( HistoryItemView.TEMPLATES.warningMsg({ warning: warningMsgText }) ) );
+ parent.append( $( HistoryItemView.templates.warningMsg({ warning: warningMsgText }) ) );
//...render the remaining body as STATES.OK (only diff between these states is the box above)
this._render_body_ok( parent );
@@ -497,7 +443,8 @@
// if trans.user
if( this.model.get( 'retag_url' ) && this.model.get( 'annotate_url' ) ){
- // tags, annotation buttons and display areas
+ // tag, annotate buttons
+ //TODO: move to tag, Annot MV
var tagsAnnotationsBtns = $( '<div style="float: right;"></div>' );
tagsAnnotationsBtns.append( $( linkHTMLTemplate({
title : 'Edit dataset tags',
@@ -514,17 +461,20 @@
actionBtnDiv.append( tagsAnnotationsBtns );
actionBtnDiv.append( '<div style="clear: both"></div>' );
- var tagArea = $( '<div class="tag-area" style="display: none">' );
- tagArea.append( '<strong>Tags:</strong>' );
- tagArea.append( '<div class="tag-elt"></div>' );
- actionBtnDiv.append( tagArea );
+ // tag/annot display areas
+ this.tagArea = $( '<div class="tag-area" style="display: none">' );
+ this.tagArea.append( '<strong>Tags:</strong>' );
+ this.tagElt = $( '<div class="tag-elt"></div>' );
+ actionBtnDiv.append( this.tagArea.append( this.tagElt ) );
var annotationArea = $( ( '<div id="${dataset_id}-annotation-area"'
+ ' class="annotation-area" style="display: none">' ) );
+ this.annotationArea = annotationArea;
annotationArea.append( '<strong>Annotation:</strong>' );
- annotationArea.append( ( '<div id="${dataset_id}-annotation-elt" '
+ this.annotationElem = $( '<div id="' + this.model.get( 'id' ) + '-annotation-elt" '
+ 'style="margin: 1px 0px 1px 0px" class="annotation-elt tooltip editable-text" '
- + 'title="Edit dataset annotation"></div>' ) );
+ + 'title="Edit dataset annotation"></div>' );
+ annotationArea.append( this.annotationElem );
actionBtnDiv.append( annotationArea );
}
}
@@ -564,10 +514,10 @@
},
_render_body : function(){
- this.log( this + '_render_body' );
+ //this.log( this + '_render_body' );
var state = this.model.get( 'state' ),
for_editing = this.model.get( 'for_editing' );
- this.log( 'state:', state, 'for_editing', for_editing );
+ //this.log( 'state:', state, 'for_editing', for_editing );
//TODO: incorrect id (encoded - use hid?)
var body = $( '<div/>' )
@@ -708,10 +658,86 @@
// ................................................................................ EVENTS
events : {
- 'click .historyItemTitle' : 'toggleBodyVisibility'
+ 'click .historyItemTitle' : 'toggleBodyVisibility',
+ 'click a.icon-button.tags' : 'loadAndDisplayTags',
+ 'click a.icon-button.annotate' : 'loadAndDisplayAnnotation'
},
// ................................................................................ STATE CHANGES / MANIPULATION
+ loadAndDisplayTags : function( event ){
+ //TODO: this is a drop in from history.mako - should use MV as well
+ this.log( this, '.loadAndDisplayTags', event );
+ var tagArea = this.tagArea;
+ var tagElt = this.tagElt;
+
+ // Show or hide tag area; if showing tag area and it's empty, fill it.
+ if( tagArea.is( ":hidden" ) ){
+ if( !tagElt.html() ){
+ // Need to fill tag element.
+ $.ajax({
+ url: this.model.get( 'ajax_get_tag_url' ),
+ error: function() { alert( "Tagging failed" ) },
+ success: function(tag_elt_html) {
+ console.debug( 'tag_elt_html:', tag_elt_html );
+ tagElt.html(tag_elt_html);
+ tagElt.find(".tooltip").tooltip();
+ tagArea.slideDown("fast");
+ }
+ });
+ } else {
+ // Tag element is filled; show.
+ tagArea.slideDown("fast");
+ }
+
+ } else {
+ // Hide.
+ tagArea.slideUp("fast");
+ }
+ return false;
+ },
+
+ loadAndDisplayAnnotation : function( event ){
+ //TODO: this is a drop in from history.mako - should use MV as well
+ this.log( this, '.loadAndDisplayAnnotation', event );
+ var annotationArea = this.annotationArea,
+ annotationElem = this.annotationElem,
+ setAnnotationUrl = this.model.get( 'ajax_set_annotation_url' );
+
+ // Show or hide annotation area; if showing annotation area and it's empty, fill it.
+ this.log( 'annotationArea hidden:', annotationArea.is( ":hidden" ) );
+ this.log( 'annotationElem html:', annotationElem.html() );
+ if ( annotationArea.is( ":hidden" ) ){
+ if( !annotationElem.html() ){
+ // Need to fill annotation element.
+ $.ajax({
+ url: this.model.get( 'ajax_get_annotation_url' ),
+ error: function(){ alert( "Annotations failed" ) },
+ success: function( htmlFromAjax ){
+ if( htmlFromAjax === "" ){
+ htmlFromAjax = "<em>Describe or add notes to dataset</em>";
+ }
+ annotationElem.html( htmlFromAjax );
+ annotationArea.find(".tooltip").tooltip();
+
+ async_save_text(
+ annotationElem.attr("id"), annotationElem.attr("id"),
+ setAnnotationUrl,
+ "new_annotation", 18, true, 4
+ );
+ annotationArea.slideDown("fast");
+ }
+ });
+ } else {
+ annotationArea.slideDown("fast");
+ }
+
+ } else {
+ // Hide.
+ annotationArea.slideUp("fast");
+ }
+ return false;
+ },
+
toggleBodyVisibility : function(){
this.log( this + '.toggleBodyVisibility' );
this.$el.find( '.historyItemBody' ).toggle();
@@ -723,30 +749,8 @@
return 'HistoryItemView(' + modelString + ')';
}
});
-
-//------------------------------------------------------------------------------
HistoryItemView.TEMPLATES = {};
-//TODO: move next one out - doesn't belong
-HistoryItemView.TEMPLATES.warningMsg =
- _.template( '<div class=warningmessagesmall><strong><%= warning %></strong></div>' );
-
-
-//??TODO: move into functions?
-HistoryItemView.TEMPLATES.undeleteLink = _.template(
- 'This dataset has been deleted. ' +
- 'Click <a href="<%= undelete_url %>" class="historyItemUndelete" id="historyItemUndeleter-{{ id }}" ' +
- ' target="galaxy_history">here</a> to undelete it.' );
-
-HistoryItemView.TEMPLATES.purgeLink = _.template(
- ' or <a href="<%= purge_url %>" class="historyItemPurge" id="historyItemPurger-{{ id }}"' +
- ' target="galaxy_history">here</a> to immediately remove it from disk.' );
-
-HistoryItemView.TEMPLATES.hiddenMsg = _.template(
- 'This dataset has been hidden. ' +
- 'Click <a href="<%= unhide_url %>" class="historyItemUnhide" id="historyItemUnhider-{{ id }}" ' +
- ' target="galaxy_history">here</a> to unhide it.' );
-
//TODO: contains localized strings
HistoryItemView.TEMPLATES.hdaSummary = _.template([
'<%= misc_blurb %><br />',
@@ -754,13 +758,18 @@
'database: <%= dbkeyHTML %>'
].join( '' ));
-
-//------------------------------------------------------------------------------
-HistoryItemView.STRINGS = {};
-HistoryItemView.STRINGS.purgedMsg = HistoryItemView.TEMPLATES.warningMsg(
- { warning: 'This dataset has been deleted and removed from disk.' });
-
+//==============================================================================
+//HistoryItemView.templates = InDomTemplateLoader.getTemplates({
+HistoryItemView.templates = CompiledTemplateLoader.getTemplates({
+ 'common-templates.html' : {
+ warningMsg : 'template-warningmessagesmall',
+ },
+ 'history-templates.html' : {
+ messages : 'template-history-warning-messages2',
+ hdaSummary : 'template-history-hdaSummary'
+ }
+});
//==============================================================================
var HistoryCollection = Backbone.Collection.extend({
@@ -773,10 +782,10 @@
//==============================================================================
-var History = LoggingModel.extend({
+var History = BaseModel.extend( LoggableMixin ).extend({
// uncomment this out see log messages
- logger : console,
+ //logger : console,
// values from api (may need more)
defaults : {
@@ -867,11 +876,11 @@
});
//------------------------------------------------------------------------------
-var HistoryView = LoggingView.extend({
+var HistoryView = BaseView.extend( LoggableMixin ).extend({
// view for the HistoryCollection (as per current right hand panel)
// uncomment this out see log messages
- logger : console,
+ //logger : console,
// direct attachment to existing element
el : 'body.historyPage',
@@ -908,8 +917,7 @@
//==============================================================================
-//USE_MOCK_DATA = true;
-if( window.USE_MOCK_DATA ){
+function createMockHistoryData(){
mockHistory = {};
mockHistory.data = {
@@ -986,6 +994,7 @@
notvisible :
_.extend( _.clone( mockHistory.data.template ),
{ visible : false }),
+
hasDisplayApps :
_.extend( _.clone( mockHistory.data.template ),
{ display_apps : {
@@ -1041,7 +1050,8 @@
failed_metadata :
_.extend( _.clone( mockHistory.data.template ),
{ state : HistoryItem.STATES.FAILED_METADATA })
-
+/*
+*/
});
$( document ).ready( function(){
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/mvc/tags.js
--- /dev/null
+++ b/static/scripts/mvc/tags.js
@@ -0,0 +1,66 @@
+/*==============================================================================
+Backbone MV for Tags
+
+
+TODO:
+move rendering from tagging_common.py
+move functionality from controllers/tag.py
+?? - polymorph on class or simply class as attr?
+
+==============================================================================*/
+/** Single Tag model
+ */
+var Tag = BaseModel.extend( LoggableMixin ).extend({
+
+ // uncomment this out see log messages
+ logger : console,
+
+ defaults : {
+ id : null,
+ itemClass : null
+ },
+
+ toString : function(){
+ return 'Tag()';
+ }
+});
+
+//------------------------------------------------------------------------------
+/** Single Tag view
+ */
+var TagView = BaseView.extend( LoggableMixin ).extend({
+
+ // uncomment this out see log messages
+ logger : console,
+
+ toString : function(){
+ return 'TagView()';
+ }
+});
+
+//==============================================================================
+/** A collection of Tags
+ */
+var TagCollection = Backbone.Collection.extend( LoggableMixin ).extend({
+ model : Tag,
+
+ // uncomment this out see log messages
+ logger : console,
+
+ toString : function(){
+ return 'TagCollection()';
+ }
+});
+
+//------------------------------------------------------------------------------
+/** View for a TagCollection (and it's controls) - as per an hda's tag controls on the history panel
+ */
+var TagList = BaseView.extend( LoggableMixin ).extend({
+
+ // uncomment this out see log messages
+ logger : console,
+
+ toString : function(){
+ return 'TagList()';
+ }
+});
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/mvc/ui.js
--- a/static/scripts/mvc/ui.js
+++ b/static/scripts/mvc/ui.js
@@ -1,41 +1,12 @@
/**
* -- Functions for creating large UI elements. --
*/
-
-/**
- * Returns an IconButtonMenuView for the provided configuration.
- * Configuration is a list of dictionaries where each dictionary
- * defines an icon button. Each dictionary must have the following
- * elements: icon_class, title, and on_click.
- */
-var create_icon_buttons_menu = function(config, global_config) {
- if (!global_config) { global_config = {}; }
-
- // Create and initialize menu.
- var buttons = new IconButtonCollection(
- _.map(config, function(button_config) {
- return new IconButton(_.extend(button_config, global_config));
- })
- );
-
- return new IconButtonMenuView( {collection: buttons} );
-};
-
+// =============================================================================
/**
* -- Utility models and views for Galaxy objects. --
*/
/**
- * Necessary Galaxy paths.
- */
-var GalaxyPaths = Backbone.Model.extend({
- defaults: {
- root_path: "",
- image_path: ""
- }
-});
-
-/**
* Clickable button represented as an icon.
*/
var IconButton = Backbone.Model.extend({
@@ -43,14 +14,107 @@
title: "",
icon_class: "",
on_click: null,
- tooltip_config: {}
+ tooltip_config: {},
+
+ isMenuButton : true,
+ id : null,
+ href : null,
+ target : null,
+ enabled : true,
+ visible : true
+ }
+
+ //validate : function( attributes ){
+ //TODO: validate href or on_click
+ //TODO: validate icon_class
+ //}
+});
+
+
+/**
+ *
+ */
+var IconButtonView = Backbone.View.extend({
+ tagName : 'a',
+ className : 'icon-button',
+
+ // jsHint.shut( up )
+ hrefVoidFn : [ 'javascript', ':void(0)' ].join( '' ),
+ fadeSpeed : 0,
+
+ initialize : function(){
+ // better rendering this way (for me anyway)
+ this.model.attributes.tooltip_config = { placement : 'bottom' };
+ this.model.bind( 'change', this.render, this );
+ },
+
+ render : function(){
+ //NOTE: this is meant to be rerendered on a model change
+ // - since most of the rendering is attributes, it gets complicated
+ //TODO: template would be faster, more concise - more PITA
+ var disabled_class = this.model.attributes.icon_class + '_disabled';
+
+ if( !this.model.attributes.visible ){
+ //TODO: fancy - but may not work as you expect
+ this.$el.fadeOut( this.fadeSpeed );
+ }
+
+ if( this.model.attributes.enabled ){
+ if( this.$el.hasClass( disabled_class ) ){
+ this.$el.removeClass( disabled_class );
+ }
+ this.$el.addClass( this.model.attributes.icon_class );
+ } else {
+ this.$el.removeClass( this.model.attributes.icon_class );
+ this.$el.addClass( disabled_class );
+ }
+
+ if( this.model.attributes.isMenuButton ){
+ this.$el.addClass( 'menu-button' );
+ } else {
+ this.$el.removeClass( 'menu-button' );
+ }
+
+ this.$el.data( 'tooltip', false );
+ this.$el.attr( 'data-original-title', null );
+ this.$el.removeClass( 'tooltip' );
+ if( this.model.attributes.title ){
+ this.$el.attr( 'title', this.model.attributes.title ).addClass( 'tooltip' );
+ this.$el.tooltip( this.model.attributes.tooltip_config );
+ }
+
+ this.$el.attr( 'id', ( this.model.attributes.id )?( this.model.attributes.id ):( null ) );
+ this.$el.attr( 'target', ( this.model.attributes.target )?( this.model.attributes.target ):( null ) );
+ this.$el.attr( 'href', ( this.model.attributes.href && !this.model.attributes.on_click )?
+ ( this.model.attributes.href ):( this.hrefVoidFn ) );
+
+ if( this.model.attributes.visible ){
+ this.$el.fadeIn( this.fadeSpeed );
+ }
+ return this;
+ },
+
+ events : {
+ 'click' : 'click'
+ },
+
+ click : function( event ){
+ // if on_click pass to that function
+ if( this.model.attributes.on_click ){
+ this.model.attributes.on_click( event );
+ return false;
+ }
+ // otherwise, bubble up (to href or whatever)
+ return true;
}
});
+
var IconButtonCollection = Backbone.Collection.extend({
model: IconButton
});
+//------------------------------------------------------------------------------
/**
* Menu with multiple icon buttons. Views are not needed nor used for individual buttons.
*/
@@ -82,6 +146,27 @@
});
/**
+ * Returns an IconButtonMenuView for the provided configuration.
+ * Configuration is a list of dictionaries where each dictionary
+ * defines an icon button. Each dictionary must have the following
+ * elements: icon_class, title, and on_click.
+ */
+var create_icon_buttons_menu = function(config, global_config) {
+ if (!global_config) { global_config = {}; }
+
+ // Create and initialize menu.
+ var buttons = new IconButtonCollection(
+ _.map(config, function(button_config) {
+ return new IconButton(_.extend(button_config, global_config));
+ })
+ );
+
+ return new IconButtonMenuView( {collection: buttons} );
+};
+
+
+// =============================================================================
+/**
*
*/
var Grid = Backbone.Collection.extend({
@@ -95,4 +180,101 @@
});
+// =============================================================================
+/**
+ * Necessary Galaxy paths.
+ */
+var GalaxyPaths = Backbone.Model.extend({
+ defaults: {
+ root_path: "",
+ image_path: ""
+ }
+});
+// =============================================================================
+/** Global string localization object (and global short form alias)
+ * set with either:
+ * GalaxyLocalization.setLocalizedString( original, localized )
+ * GalaxyLocalization.setLocalizedString({ original1 : localized1, original2 : localized2 })
+ * get with either:
+ * _l( original )
+ */
+//TODO: move to Galaxy.Localization
+var GalaxyLocalization = jQuery.extend({}, {
+ aliasName : '_l',
+ localizedStrings : {},
+
+ setLocalizedString : function( str_or_obj, localizedString ){
+ // pass in either two strings (english, translated) or an obj (map) of english : translated attributes
+ //console.debug( this + '.setLocalizedString:', str_or_obj, localizedString );
+ var self = this;
+
+ // DRY non-duplicate assignment function
+ var setStringIfNotDuplicate = function( original, localized ){
+ // do not set if identical - strcmp expensive but should only happen once per page per word
+ if( original !== localized ){
+ self.localizedStrings[ original ] = localized;
+ }
+ };
+
+ if( jQuery.type( str_or_obj ) === "string" ){
+ setStringIfNotDuplicate( str_or_obj, localizedString );
+
+ } else if( jQuery.type( str_or_obj ) === "object" ){
+ jQuery.each( str_or_obj, function( key, val ){
+ //console.debug( 'key=>val', key, '=>', val );
+ // could recurse here but no reason
+ setStringIfNotDuplicate( key, val );
+ });
+
+ } else {
+ throw( 'Localization.setLocalizedString needs either a string or object as the first argument,' +
+ ' given: ' + str_or_obj );
+ }
+ },
+
+ localize : function( strToLocalize ){
+ //console.debug( this + '.localize:', strToLocalize );
+ // return the localized version if it's there, the strToLocalize if not
+ // try/catch cheaper than if in
+ try {
+ //var localized = this.localizedStrings[ strToLocalize ];
+ //return localized;
+ return this.localizedStrings[ strToLocalize ];
+ } catch( err ){
+ //TODO??: potentially problematic catch all
+ //console.error( err );
+ return strToLocalize;
+ }
+ },
+
+ toString : function(){ return 'GalaxyLocalization'; }
+});
+
+// global localization alias
+window[ GalaxyLocalization.aliasName ] = function( str ){ return GalaxyLocalization.localize( str ); };
+
+//TEST: setLocalizedString( string, string ), _l( string )
+//TEST: setLocalizedString( hash ), _l( string )
+//TEST: setLocalizedString( string === string ), _l( string )
+//TEST: _l( non assigned string )
+
+
+// =============================================================================
+/** UI icon-button (Backbone.View only - no model)
+ *
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/common-templates.html
--- /dev/null
+++ b/static/scripts/templates/common-templates.html
@@ -0,0 +1,3 @@
+<script type="text/template" class="template-common" id="template-warningmessagesmall">
+ <div class=warningmessagesmall><strong>{{{warning}}}</strong></div>
+</script>
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/compile_templates.py
--- a/static/scripts/templates/compile_templates.py
+++ b/static/scripts/templates/compile_templates.py
@@ -3,24 +3,274 @@
# Script requires handlebars compiler be installed; use node package manager
# to install handlebars.
+"""%prog [options] [ specific .handlebars or .html template file to compile ]
+ Compiles handlebars templates into javascript for better load times and performance.
+
+ Handlebars compilation errors will print to stderr.
+ NOTE!: you will need node.js, npm, and handlebars (installed from npm) in order to compile templates
+ See http://handlebarsjs.com/precompilation.html for more info.
+
+ Should be called from the $GLX_ROOT/static/scripts/templates directory.
+ Compiled templates will be written to the compiled/ directory.
+
+ If the --multi-ext option is passed a file extension string, the script will:
+ * search for *.<extension> in the current directory,
+ * extract each '<script type="text/template"> from the file and write them into a new handlebars file
+ named using the id of the script tag (eg. id="undeleteMsg" -> undeleteMsg.handlebars)
+ * these new handlebars scripts will be compiled along with any other handlebars templates in the dir
+
+ additionally for each of those files, the script will:
+ * extract each '<script type="text/javascript"> from the file and write them ALL into a single js file
+ named using the prefix 'helpers-' and the basename of the enclosing file
+ (eg. common-templates.html -> helpers-common-templates.js )
+ * these new handlebars scripts will be compiled along with any other handlebars templates in the dir
+ These files can be included as if they were templates (eg. h.templates( 'helpers-common-templates' ) )
+
+ This hopefully will allow both multiple templates and their associated Handlebars helper functions to be
+ included in one file.
+
+ Currently, this works (best?) if:
+ * the multiple templates are within one html file
+ * each template is enclosed in a <script> tag with type="text/template" and some id attribute
+ * each helper fn is enclosed in a <script> tag with type="text/javascript" and some id attribute
+ e.g. <script type="text/template" id="history-deletedMsg" class="template">Deleted {{ msg }}</script>
+
+"""
+# ------------------------------------------------------------------------------
+
+TODO = """
+"""
+
import sys
from glob import glob
from subprocess import call
from shutil import copyfile
from os import path
+from optparse import OptionParser
+from HTMLParser import HTMLParser
-cmd = "handlebars %s -f compiled/%s.js"
+import logging
+log = logging.getLogger( __name__ )
-# If specific scripts specified on command line, just pack them, otherwise pack
-# all.
+COMPILED_DIR = 'compiled'
+COMPILED_EXT = '.js'
+COMPILE_CMD_STR = "handlebars %s -f %s"
+COMPILE_MINIMIZE_SWITCH = ' -m'
-if len( sys.argv ) > 1:
- to_pack = sys.argv[1:]
-else:
- to_pack = glob( "*.handlebars" )
+# both of these are off by default for backward compat
+DEFAULT_MINIMIZATION = False
+DEFAULT_MULTI_EXT = None #'.html'
+
+# ------------------------------------------------------------------------------
+class HTMLMultiTemplateParser( HTMLParser ):
+ """Parses multiple templates from an HTML file, saving them to a map of:
+ { id : template_text, ... }
+
+ Templates must:
+ * be within the TEMPLATE_TAG
+ * TEMPLATE_TAG must have a type attribute
+ * that attr must == TEMPLATE_TYPE
+ * TEMPLATE_TAG cannot be nested within one another
+ * TEMPLATE_TAG must have an id attribute
+ """
+ TEMPLATE_TAG = 'script'
+ TEMPLATE_TYPES = [ 'text/template' ]
-for fname in to_pack:
- fname_base = path.splitext( path.split( fname )[1] )[0]
- print "%s --> compiled/%s.js" % ( fname, fname_base )
- out = call( cmd % ( fname, fname_base ), shell=True )
+ HELPER_TAG = 'script'
+ HELPER_TYPES = [ 'text/javascript' ]
+
+ def __init__( self ):
+ HTMLParser.__init__( self )
+ self.templates = {}
+ self.curr_template_id = None
+ self.template_data = ''
+
+ self.helpers = {}
+ self.curr_helper_id = None
+ self.helper_data = ''
+
+ def is_template_tag( self, tag, attr_dict ):
+ # both tag and type attr must match
+ return ( ( tag == self.TEMPLATE_TAG )
+ and ( 'type' in attr_dict )
+ and ( attr_dict[ 'type' ] in self.TEMPLATE_TYPES ) )
+
+ def is_helper_tag( self, tag, attr_dict ):
+ # both tag and type attr must match
+ return ( ( tag == self.HELPER_TAG )
+ and ( 'type' in attr_dict )
+ and ( attr_dict[ 'type' ] in self.HELPER_TYPES ) )
+
+ def handle_starttag( self, tag, attrs ):
+ attr_dict = dict( attrs )
+ if self.is_template_tag( tag, attr_dict ):
+ log.debug( "\t template tag: %s, %s", tag, str( attr_dict ) );
+
+ # as far as I know these tags can't/shouldn't nest/overlap
+ #pre: not already inside a template/helper tag
+ assert self.curr_template_id == None, "Found nested template tag: %s" % ( self.curr_template_id )
+ assert self.curr_helper_id == None, "Found template tag inside helper: %s" % ( self.curr_helper_id )
+ #pre: must have an id
+ assert 'id' in attr_dict, "No id attribute in template: " + str( attr_dict )
+
+ self.curr_template_id = attr_dict[ 'id' ]
+
+ elif self.is_helper_tag( tag, attr_dict ):
+ log.debug( "\t helper tag: %s, %s", tag, str( attr_dict ) );
+
+ #pre: not already inside a template/helper tag
+ assert self.curr_helper_id == None, "Found nested helper tag: %s" % ( self.curr_helper_id )
+ assert self.curr_template_id == None, "Found helper tag inside template: %s" % ( self.curr_template_id )
+ #pre: must have an id
+ assert 'id' in attr_dict, "No id attribute in helper: " + str( attr_dict )
+
+ self.curr_helper_id = attr_dict[ 'id' ]
+
+ def handle_endtag( self, tag ):
+ if( ( tag == self.TEMPLATE_TAG )
+ and ( self.curr_template_id ) ):
+ log.debug( "\t ending template tag :", tag, self.curr_template_id );
+
+ # store the template data by the id
+ if self.template_data:
+ self.templates[ self.curr_template_id ] = self.template_data
+
+ #! reset for next template
+ self.curr_template_id = None
+ self.template_data = ''
+
+ elif( ( tag == self.HELPER_TAG )
+ and ( self.curr_helper_id ) ):
+ log.debug( "\t ending helper tag :", tag, self.curr_template_id );
+
+ # store the template data by the id
+ if self.helper_data:
+ self.helpers[ self.curr_helper_id ] = self.helper_data
+
+ #! reset for next template
+ self.curr_helper_id = None
+ self.helper_data = ''
+
+ def handle_data(self, data):
+ data = data.strip()
+ if data:
+ if self.curr_template_id:
+ log.debug( "\t template text :", data );
+ self.template_data += data
+
+ elif self.curr_helper_id:
+ log.debug( "\t helper js fn :", data );
+ self.helper_data += data
+
+
+# ------------------------------------------------------------------------------
+def break_multi_template( multi_template_filename ):
+ """parse the multi template, writing each template into a new handlebars tmpl and returning their names"""
+ template_filenames = []
+ parser = HTMLMultiTemplateParser()
+
+ # parse the multi template
+ print "\nBreaking multi-template file %s into individual templates and helpers:" % ( multi_template_filename )
+ with open( multi_template_filename, 'r' ) as multi_template_file:
+ # wish I could use a gen here
+ parser.feed( multi_template_file.read() )
+
+ # after breaking, write each indiv. template and save the names
+ for template_id, template_text in parser.templates.items():
+ handlebar_template_filename = template_id + '.handlebars'
+ with open( handlebar_template_filename, 'w' ) as handlebar_template_file:
+ handlebar_template_file.write( template_text )
+
+ template_filenames.append( handlebar_template_filename )
+
+ # write all helpers to a 'helper-' prefixed js file in the compilation dir
+ if parser.helpers:
+ helper_filename = 'helpers-' + path.splitext( multi_template_filename )[0] + '.js'
+ helper_filename = path.join( COMPILED_DIR, helper_filename )
+ with open( helper_filename, 'w' ) as helper_file:
+ for helper_fn_name, helper_fn in parser.helpers.items():
+ print '(helper)', helper_fn_name
+ helper_file.write( helper_fn + '\n' )
+
+ print '\n'.join( template_filenames )
+ return template_filenames
+
+
+# ------------------------------------------------------------------------------
+def compile_template( template_filename, minimize=False ):
+ """compile the given template file (optionally minimizing the js) using subprocess.
+
+ Use the basename of the template file for the outputed js.
+ """
+ template_basename = path.splitext( path.split( template_filename )[1] )[0]
+ compiled_filename = path.join( COMPILED_DIR, template_basename + COMPILED_EXT )
+
+ command_string = COMPILE_CMD_STR % ( template_filename, compiled_filename )
+ if minimize:
+ command_string += COMPILE_MINIMIZE_SWITCH
+ print command_string
+ return call( command_string, shell=True )
+
+
+# ------------------------------------------------------------------------------
+def main( options, args ):
+ """Break multi template files into single templates, compile all single templates.
+
+ If args, compile that as a list of specific handlebars and/or multi template files.
+ """
+ print "(Call this script with the '-h' option for more help)"
+
+ handlebars_templates = []
+ # If specific scripts specified on command line, just compile them,
+ if len( args ) >= 1:
+ handlebars_templates = filter( lambda( x ): x.endswith( '.handlebars' ), args )
+
+ # otherwise compile all in the current dir
+ else:
+ handlebars_templates = glob( '*.handlebars' )
+
+ # if desired, break up any passed-in or found multi template files
+ # adding the names of the new single templates to those needing compilation
+ if options.multi_ext:
+ multi_templates = []
+ if len( args ) >= 1:
+ multi_templates = filter( lambda( x ): x.endswith( options.multi_ext ), args )
+ else:
+ multi_templates = glob( '*' + options.multi_ext )
+
+ for multi_template_filename in multi_templates:
+ handlebars_templates.extend( break_multi_template( multi_template_filename ) )
+
+ # unique filenames only (Q&D)
+ handlebars_templates = list( set( handlebars_templates ) )
+
+ # compile the templates
+ print "\nCompiling templates:"
+ filenames_w_possible_errors = []
+ for handlebars_template in handlebars_templates:
+ shell_ret = compile_template( handlebars_template, options.minimize )
+ if shell_ret:
+ filenames_w_possible_errors.append( handlebars_template )
+
+ # report any possible errors
+ if filenames_w_possible_errors:
+ print "\nThere may have been errors on the following files:"
+ print ',\n'.join( filenames_w_possible_errors )
+ print "\nCall this script with the '-h' for more help"
+
+
+# ------------------------------------------------------------------------------
+if __name__ == '__main__':
+ optparser = OptionParser( usage=__doc__ )
+ optparser.add_option( '-m', '--minimize', dest='minimize', action='store_true', default=DEFAULT_MINIMIZATION,
+ help=( 'minimize compiled template scripts via handlebars '
+ + '(defaults to %s)' % DEFAULT_MINIMIZATION ) )
+ optparser.add_option( '--multi-ext', dest='multi_ext', metavar="FILE_EXTENSION", default=DEFAULT_MULTI_EXT,
+ help=( 'indicates that files ending with the given string contain multiple '
+ + 'templates and the script should break those into individual '
+ + 'handlebars templates (defaults to "%s")' ) % DEFAULT_MULTI_EXT )
+
+ ( options, args ) = optparser.parse_args()
+ sys.exit( main( options, args ) )
+
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/compiled/template-history-hdaSummary.js
--- /dev/null
+++ b/static/scripts/templates/compiled/template-history-hdaSummary.js
@@ -0,0 +1,25 @@
+(function() {
+ var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['template-history-hdaSummary'] = template(function (Handlebars,depth0,helpers,partials,data) {
+ helpers = helpers || Handlebars.helpers;
+ var buffer = "", stack1, foundHelper, functionType="function", escapeExpression=this.escapeExpression;
+
+
+ foundHelper = helpers.misc_blurb;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.misc_blurb; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "<br />\nformat: <span class=\"";
+ foundHelper = helpers.data_type;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.data_type; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\">";
+ foundHelper = helpers.data_type;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.data_type; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "</span>, ',\ndatabase: ";
+ foundHelper = helpers.dbkeyHTML;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.dbkeyHTML; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1);
+ return buffer;});
+})();
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/compiled/template-history-warning-messages.js
--- /dev/null
+++ b/static/scripts/templates/compiled/template-history-warning-messages.js
@@ -0,0 +1,87 @@
+(function() {
+ var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['template-history-warning-messages'] = template(function (Handlebars,depth0,helpers,partials,data) {
+ helpers = helpers || Handlebars.helpers;
+ var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+
+ var buffer = "", stack1;
+ buffer += "\n<div class=warningmessagesmall><strong>\nThis dataset has been deleted.\n ";
+ stack1 = depth0.undelete_url;
+ stack1 = helpers['if'].call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(2, program2, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "\n</strong></div>\n";
+ return buffer;}
+function program2(depth0,data) {
+
+ var buffer = "", stack1, foundHelper;
+ buffer += "\n Click <a href=\"";
+ foundHelper = helpers.undelete_url;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.undelete_url; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\" class=\"historyItemUndelete\" id=\"historyItemUndeleter-";
+ foundHelper = helpers.id;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\"\n target=\"galaxy_history\">here</a> to undelete it\n ";
+ stack1 = depth0.purge_url;
+ stack1 = helpers['if'].call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(3, program3, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "\n ";
+ return buffer;}
+function program3(depth0,data) {
+
+ var buffer = "", stack1, foundHelper;
+ buffer += "\n or\n <a href=\"";
+ foundHelper = helpers.purge_url;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.purge_url; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\" class=\"historyItemPurge\" id=\"historyItemPurger-";
+ foundHelper = helpers.id;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\"\n target=\"galaxy_history\">here</a> to immediately remove it from disk\n ";
+ return buffer;}
+
+function program5(depth0,data) {
+
+
+ return "\n<div class=warningmessagesmall><strong>\nThis dataset has been deleted and removed from disk.\n</strong></div>\n";}
+
+function program7(depth0,data) {
+
+ var buffer = "", stack1;
+ buffer += "\n<div class=warningmessagesmall><strong>\nThis dataset has been hidden.\n ";
+ stack1 = depth0.undelete_url;
+ stack1 = helpers['if'].call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(8, program8, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "\n</strong></div>\n";
+ return buffer;}
+function program8(depth0,data) {
+
+ var buffer = "", stack1, foundHelper;
+ buffer += "\n Click <a href=\"";
+ foundHelper = helpers.unhide_url;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.unhide_url; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\" class=\"historyItemUnhide\" id=\"historyItemUnhider-";
+ foundHelper = helpers.id;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ buffer += escapeExpression(stack1) + "\"\n target=\"galaxy_history\">here</a> to unhide it\n ";
+ return buffer;}
+
+ stack1 = depth0.deleted;
+ stack1 = helpers['if'].call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(1, program1, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "\n\n";
+ stack1 = depth0.purged;
+ stack1 = helpers['if'].call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(5, program5, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "\n\n";
+ stack1 = depth0.visible;
+ stack1 = helpers.unless.call(depth0, stack1, {hash:{},inverse:self.noop,fn:self.program(7, program7, data)});
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ return buffer;});
+})();
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/compiled/template-warningmessagesmall.js
--- /dev/null
+++ b/static/scripts/templates/compiled/template-warningmessagesmall.js
@@ -0,0 +1,15 @@
+(function() {
+ var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['template-warningmessagesmall'] = template(function (Handlebars,depth0,helpers,partials,data) {
+ helpers = helpers || Handlebars.helpers;
+ var buffer = "", stack1, foundHelper, functionType="function";
+
+
+ buffer += "<div class=warningmessagesmall><strong>";
+ foundHelper = helpers.warning;
+ if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{}}); }
+ else { stack1 = depth0.warning; stack1 = typeof stack1 === functionType ? stack1() : stack1; }
+ if(stack1 || stack1 === 0) { buffer += stack1; }
+ buffer += "</strong></div>";
+ return buffer;});
+})();
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/history-templates.html
--- /dev/null
+++ b/static/scripts/templates/history-templates.html
@@ -0,0 +1,38 @@
+<script type="text/template" class="template-history" id="template-history-warning-messages">
+{{#if deleted}}
+<div class=warningmessagesmall><strong>
+This dataset has been deleted.
+ {{#if undelete_url}}
+ Click <a href="{{ undelete_url }}" class="historyItemUndelete" id="historyItemUndeleter-{{ id }}"
+ target="galaxy_history">here</a> to undelete it
+ {{#if purge_url}}
+ or
+ <a href="{{ purge_url }}" class="historyItemPurge" id="historyItemPurger-{{ id }}"
+ target="galaxy_history">here</a> to immediately remove it from disk
+ {{/if}}
+ {{/if}}
+</strong></div>
+{{/if}}
+
+{{#if purged}}
+<div class=warningmessagesmall><strong>
+This dataset has been deleted and removed from disk.
+</strong></div>
+{{/if}}
+
+{{#unless visible}}
+<div class=warningmessagesmall><strong>
+This dataset has been hidden.
+ {{#if undelete_url}}
+ Click <a href="{{ unhide_url }}" class="historyItemUnhide" id="historyItemUnhider-{{ id }}"
+ target="galaxy_history">here</a> to unhide it
+ {{/if}}
+</strong></div>
+{{/unless}}
+</script>
+
+<script type="text/template" class="template-history" id="template-history-hdaSummary">
+{{ misc_blurb }}<br />
+format: <span class="{{ data_type }}">{{ data_type }}</span>, ',
+database: {{ dbkeyHTML }}
+</script>
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/template-history-hdaSummary.handlebars
--- /dev/null
+++ b/static/scripts/templates/template-history-hdaSummary.handlebars
@@ -0,0 +1,3 @@
+{{ misc_blurb }}<br />
+format: <span class="{{ data_type }}">{{ data_type }}</span>, ',
+database: {{ dbkeyHTML }}
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/template-history-warning-messages.handlebars
--- /dev/null
+++ b/static/scripts/templates/template-history-warning-messages.handlebars
@@ -0,0 +1,30 @@
+{{#if deleted}}
+<div class=warningmessagesmall><strong>
+This dataset has been deleted.
+ {{#if undelete_url}}
+ Click <a href="{{ undelete_url }}" class="historyItemUndelete" id="historyItemUndeleter-{{ id }}"
+ target="galaxy_history">here</a> to undelete it
+ {{#if purge_url}}
+ or
+ <a href="{{ purge_url }}" class="historyItemPurge" id="historyItemPurger-{{ id }}"
+ target="galaxy_history">here</a> to immediately remove it from disk
+ {{/if}}
+ {{/if}}
+</strong></div>
+{{/if}}
+
+{{#if purged}}
+<div class=warningmessagesmall><strong>
+This dataset has been deleted and removed from disk.
+</strong></div>
+{{/if}}
+
+{{#unless visible}}
+<div class=warningmessagesmall><strong>
+This dataset has been hidden.
+ {{#if undelete_url}}
+ Click <a href="{{ unhide_url }}" class="historyItemUnhide" id="historyItemUnhider-{{ id }}"
+ target="galaxy_history">here</a> to unhide it
+ {{/if}}
+</strong></div>
+{{/unless}}
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 static/scripts/templates/template-warningmessagesmall.handlebars
--- /dev/null
+++ b/static/scripts/templates/template-warningmessagesmall.handlebars
@@ -0,0 +1,1 @@
+<div class=warningmessagesmall><strong>{{{warning}}}</strong></div>
\ No newline at end of file
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 templates/base.mako
--- a/templates/base.mako
+++ b/templates/base.mako
@@ -26,7 +26,18 @@
## <!--[if lt IE 7]>
## <script type='text/javascript' src="/static/scripts/libs/IE/IE7.js"></script>
## <![endif]-->
- ${h.js( "libs/jquery/jquery", "libs/bootstrap", "galaxy.base", "libs/underscore", "libs/backbone/backbone", "libs/backbone/backbone-relational", "libs/handlebars.runtime", "mvc/ui" )}
+
+ ${h.js(
+ "libs/jquery/jquery",
+ "libs/bootstrap",
+ "galaxy.base",
+ "libs/underscore",
+ "libs/backbone/backbone",
+ "libs/backbone/backbone-relational",
+ "libs/handlebars.runtime",
+ "mvc/ui"
+ )}
+
<script type="text/javascript">
// Set up needed paths.
var galaxy_paths = new GalaxyPaths({
diff -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 templates/root/alternate_history.mako
--- a/templates/root/alternate_history.mako
+++ b/templates/root/alternate_history.mako
@@ -54,7 +54,7 @@
<%def name="get_urls_for_hda( hda, encoded_data_id, for_editing )"><%
from galaxy.datatypes.metadata import FileParameter
-
+
data_dict = {}
def add_to_data( **kwargs ):
data_dict.update( kwargs )
@@ -79,7 +79,10 @@
#TODO??: better way to do urls (move into js galaxy_paths (decorate) - _not_ dataset specific)
deleted = hda.deleted
- purged = hda.purged or hda.dataset.purged
+ purged = hda.purged
+
+ #purged = purged or hda.dataset.purged //??
+
# all of these urls are 'datasets/data_id/<action>
if not ( dataset_purged or purged ) and for_editing:
add_to_data( undelete_url=h.url_for( controller='dataset', action='undelete', dataset_id=encoded_data_id ) )
@@ -106,7 +109,21 @@
display_url = h.url_for( controller='dataset', action='display', dataset_id=encoded_data_id, preview=True, filename='' )
add_to_data( display_url=display_url )
- if app.config.get_bool( 'enable_tracks', False ) and hda.ext in app.datatypes_registry.get_available_tracks():
+ # edit attr button
+ if for_editing:
+ if not( hda.deleted or hda.purged ):
+ edit_url = h.url_for( controller='dataset', action='edit', dataset_id=encoded_data_id )
+ add_to_data( edit_url=edit_url )
+
+ # delete button
+ if for_editing and not ( dataset_purged or purged ):
+ add_to_data( delete_url=h.url_for( controller='dataset', action='delete', dataset_id=encoded_data_id ) )
+ ##TODO: loose end
+ ##show_deleted_on_refresh=show_deleted_on_refresh ) )
+ #show_deleted_on_refresh=False ) )
+
+ #print app
+ if hda.ext in app.datatypes_registry.get_available_tracks():
# do these need _localized_ dbkeys?
trackster_urls = {}
if hda.dbkey != '?':
@@ -117,11 +134,21 @@
trackster_urls[ 'hda-url' ] = data_url
trackster_urls[ 'action-url' ] = h.url_for( controller='tracks', action='browser', dataset_id=encoded_data_id )
trackster_urls[ 'new-url' ] = h.url_for( controller='tracks', action='index', dataset_id=encoded_data_id, default_dbkey=hda.dbkey )
- add_to_data( trackster_url=trackster_url )
+ add_to_data( trackster_url=trackster_urls )
if trans.user:
- add_to_data( retag_url=( h.url_for( controller='tag', action='retag', item_class=hda.__class__.__name__, item_id=encoded_data_id ) ) )
+ add_to_data( ajax_get_tag_url=( h.url_for(
+ controller='tag', action='get_tagging_elt_async',
+ item_class=hda.__class__.__name__, item_id=encoded_data_id ) ) )
+ add_to_data( retag_url=( h.url_for(
+ controller='tag', action='retag',
+ item_class=hda.__class__.__name__, item_id=encoded_data_id ) ) )
+
add_to_data( annotate_url=( h.url_for( controller='dataset', action='annotate', id=encoded_data_id ) ) )
+ add_to_data( ajax_get_annotation_url=( h.url_for(
+ controller='dataset', action='get_annotation_async', id=encoded_data_id ) ) )
+ add_to_data( ajax_set_annotation_url=( h.url_for(
+ controller='/dataset', action='annotate_async', id=encoded_data_id ) ) )
display_type_display_links = {}
#TODO: this doesn't seem to get called with the hda I'm using. What would call this? How can I spoof it?
@@ -182,8 +209,8 @@
data_dict.update( kwargs )
# trans
+ add_to_data( non_encoded_id=data.id )
encoded_data_id = trans.security.encode_id( data.id )
- #print data.name, encoded_data_id
add_to_data( id=encoded_data_id )
# localize dbkey
@@ -205,8 +232,8 @@
add_to_data( accessible=accessible )
url_dict = get_urls_for_hda( data, encoded_data_id, for_editing )
+ data_dict.update( url_dict )
#print 'url_dict:', pformat( url_dict, indent=2 )
- data_dict.update( url_dict )
#print 'data_dict:', pformat( data_dict, indent=2 ), "\n"
#print data_dict
@@ -227,7 +254,7 @@
user_is_admin = trans.user_is_admin()
user_roles = trans.get_current_user_roles()
prepped_hdas = [
- prep_hda( hda, true ) for hda in datasets ]
+ prep_hda( hda, True ) for hda in datasets ]
context_dict = {
'history' : {
@@ -257,74 +284,66 @@
<%def name="javascripts()">
${parent.javascripts()}
- ${h.templates( "tool_link", "panel_section", "tool_search" )}
- ${h.js( "galaxy.base", "json2", "autocomplete_tagging", "bootstrap", "mvc/tools", "mvc/history" )}
+
+ ${h.js(
+ "libs/json2", "libs/jquery/jstorage", "libs/jquery/jquery.autocomplete",
+ ##"libs/handlebars.full",
+ "galaxy.autocom_tagging",
+ "mvc/base-mvc", "mvc/ui"
+ )}
+
+ ${h.templates(
+ "helpers-common-templates",
+ "template-warningmessagesmall",
+
+ "template-history-warning-messages",
+ "template-history-hdaSummary"
+ )}
+
+ ## if using in-dom templates they need to go here (before the Backbone classes are defined)
+ ##NOTE: it's impossible(?) to include _ templates in this way bc they use identical delims as mako
+ ## (without altering Underscore.templateSettings)
+ ##<%include file="../../static/scripts/templates/common-templates.html" />
+ ##<%include file="../../static/scripts/templates/history-templates.html" />
+
+ ${h.js(
+ "mvc/history"
+ ##"mvc/tags", "mvc/annotations"
+ )}
<script type="text/javascript">
- ##//var localization = local( ${ create_localization_json( get_page_localized_strings() ) } );
+ GalaxyLocalization.setLocalizedString( ${ create_localization_json( get_page_localized_strings() ) } );
+ // add needed controller urls to GalaxyPaths
+ galaxy_paths.set( 'dataset_path', "${h.url_for( controller='dataset' )}" )
+
// Init. on document load.
var pageData = ${context_to_js()};
- // add needed controller urls to GalaxyPaths
- galaxy_paths.set( 'dataset_path', "${h.url_for( controller='dataset' )}" )
+ //USE_MOCK_DATA = true;
$(function(){
if( console && console.debug ){ console.debug( 'using backbone.js in history panel' ); }
- if( window.USE_MOCK_DATA ){ return; }
+ if( window.USE_MOCK_DATA ){
+ if( console && console.debug ){ console.debug( '\t using mock data' ); }
+ createMockHistoryData();
+ return;
+ }
glx_history = new History( pageData.history ).loadDatasetsAsHistoryItems( pageData.hdas );
glx_history_view = new HistoryView({ model: glx_history });
glx_history_view.render();
- //hi = glx_history.items.at( 0 );
- //hi_view = new HistoryItemView({ model: hi });
- //$( 'body' ).append( hi_view.render() );
+ hi = glx_history.items.at( 0 );
+ hi_view = new HistoryItemView({ model: hi });
+ $( 'body' ).append( hi_view.render() );
});
</script>
-
- <script type='text/javascript'>
-function tag_handling(parent_elt) {
- $(parent_elt).find("a.icon-button.tags").each( function() {
- // Use links parameters but custom URL as ajax URL.
- $(this).click( function() {
- // Get tag area, tag element.
- var history_item = $(this).parents(".historyItem");
- var tag_area = history_item.find(".tag-area");
- var tag_elt = history_item.find(".tag-elt");
-
- // Show or hide tag area; if showing tag area and it's empty, fill it.
- if ( tag_area.is( ":hidden" ) ) {
- if (!tag_elt.html()) {
- // Need to fill tag element.
- var href_parms = $(this).attr("href").split("?")[1];
- var ajax_url = "${h.url_for( controller='tag', action='get_tagging_elt_async' )}?" + href_parms;
- $.ajax({
- url: ajax_url,
- error: function() { alert( "Tagging failed" ) },
- success: function(tag_elt_html) {
- tag_elt.html(tag_elt_html);
- tag_elt.find(".tooltip").tooltip();
- tag_area.slideDown("fast");
- }
- });
- } else {
- // Tag element is filled; show.
- tag_area.slideDown("fast");
- }
- } else {
- // Hide.
- tag_area.slideUp("fast");
- }
- return false;
- });
- });
-};
- </script></%def><%def name="stylesheets()">
${parent.stylesheets()}
- <style>
+ ${h.css("base", "history", "autocomplete_tagging" )}
+ <style>"
.historyItemBody {
display: none;
}
https://bitbucket.org/galaxy/galaxy-central/changeset/e2cb958b3f75/
changeset: e2cb958b3f75
user: carlfeberhard
date: 2012-09-12 17:09:09
summary: clean debug statements from history.js
affected #: 1 file
diff -r ce64f5d64ff4a55d85bd0e9ba2c3ec712357c115 -r e2cb958b3f7596744bb08febc858fa25139fd1ac static/scripts/mvc/history.js
--- a/static/scripts/mvc/history.js
+++ b/static/scripts/mvc/history.js
@@ -1,4 +1,3 @@
-if( console ){ console.debug( 'history mvc loaded' ); }
/*
Backbone.js implementation of history panel
@@ -678,7 +677,7 @@
url: this.model.get( 'ajax_get_tag_url' ),
error: function() { alert( "Tagging failed" ) },
success: function(tag_elt_html) {
- console.debug( 'tag_elt_html:', tag_elt_html );
+ this.log( 'tag_elt_html:', tag_elt_html );
tagElt.html(tag_elt_html);
tagElt.find(".tooltip").tooltip();
tagArea.slideDown("fast");
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Allow for overriding app.config.track_jobs_in_database.
by Bitbucket 11 Sep '12
by Bitbucket 11 Sep '12
11 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/244b4cb100d1/
changeset: 244b4cb100d1
user: natefoo
date: 2012-09-11 20:58:13
summary: Allow for overriding app.config.track_jobs_in_database.
affected #: 2 files
diff -r 9a8614de4141be276ab4a416ef7b0def8c5703d2 -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -105,6 +105,7 @@
self.smtp_server = kwargs.get( 'smtp_server', None )
self.smtp_username = kwargs.get( 'smtp_username', None )
self.smtp_password = kwargs.get( 'smtp_password', None )
+ self.track_jobs_in_database = kwargs.get( 'track_jobs_in_database', None )
self.start_job_runners = kwargs.get( 'start_job_runners', None )
self.expose_dataset_path = string_as_bool( kwargs.get( 'expose_dataset_path', 'False' ) )
# External Service types used in sample tracking
@@ -210,9 +211,12 @@
self.job_handlers = [ x.strip() for x in kwargs.get('job_handlers', self.server_name).split(',') ]
self.default_job_handlers = [ x.strip() for x in kwargs.get('default_job_handlers', ','.join( self.job_handlers ) ).split(',') ]
# Use database for IPC unless this is a standalone server (or multiple servers doing self dispatching in memory)
- self.track_jobs_in_database = True
- if ( len( self.job_handlers ) == 1 ) and ( self.job_handlers[0] == self.server_name ) and ( self.job_manager == self.server_name ):
- self.track_jobs_in_database = False
+ if self.track_jobs_in_database is None or self.track_jobs_in_database == "None":
+ self.track_jobs_in_database = True
+ if ( len( self.job_handlers ) == 1 ) and ( self.job_handlers[0] == self.server_name ) and ( self.job_manager == self.server_name ):
+ self.track_jobs_in_database = False
+ else:
+ self.track_jobs_in_database = string_as_bool( self.track_jobs_in_database )
# Store per-tool runner configs
self.tool_handlers = self.__read_tool_job_config( global_conf_parser, 'galaxy:tool_handlers', 'name' )
self.tool_runners = self.__read_tool_job_config( global_conf_parser, 'galaxy:tool_runners', 'url' )
diff -r 9a8614de4141be276ab4a416ef7b0def8c5703d2 -r 244b4cb100d19ed7d005fabcf2390204b3630aa5 universe_wsgi.ini.sample
--- a/universe_wsgi.ini.sample
+++ b/universe_wsgi.ini.sample
@@ -586,6 +586,15 @@
# used for jobs without explicit handlers.
#default_job_handlers = main
+# In multiprocess configurations, notification between processes about new jobs
+# is done via the database. In single process configurations, this is done in
+# memory, which is a bit quicker. Galaxy tries to automatically determine
+# which method it should used based on your manager/handler configuration
+# above, but can't reliably determine if you have multiple processes for web
+# servers but only a single process as a manager/handler. In that scenario,
+# you can override the tracking method by setting the following to True:
+#track_jobs_in_database = None
+
# This enables splitting of jobs into tasks, if specified by the particular tool config.
# This is a new feature and not recommended for production servers yet.
#use_tasked_jobs = False
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: carlfeberhard: removed console.debug statement from history.mako
by Bitbucket 11 Sep '12
by Bitbucket 11 Sep '12
11 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/9a8614de4141/
changeset: 9a8614de4141
user: carlfeberhard
date: 2012-09-11 19:52:55
summary: removed console.debug statement from history.mako
affected #: 1 file
diff -r 7b1b6e81b1756234001eb1c3a32d7a9b98da92c3 -r 9a8614de4141be276ab4a416ef7b0def8c5703d2 templates/root/history.mako
--- a/templates/root/history.mako
+++ b/templates/root/history.mako
@@ -233,7 +233,6 @@
//TODO: hack (github has an issue on this - see how it's resolved)
// fix for two line bootstrap tooltips when placement: above
$( this ).find( '.tooltip' ).each( function(){
- console.debug( 'tooltip:', this );
var $this = $( this );
// documented method - that doesn't seem to work
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Do not report the disk usage of purged HDAs in history disk usage.
by Bitbucket 11 Sep '12
by Bitbucket 11 Sep '12
11 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/7b1b6e81b175/
changeset: 7b1b6e81b175
user: natefoo
date: 2012-09-11 19:33:20
summary: Do not report the disk usage of purged HDAs in history disk usage.
affected #: 1 file
diff -r 2b4111248390ae6340f4bec54d0cff29f48665fb -r 7b1b6e81b1756234001eb1c3a32d7a9b98da92c3 lib/galaxy/model/__init__.py
--- a/lib/galaxy/model/__init__.py
+++ b/lib/galaxy/model/__init__.py
@@ -685,6 +685,7 @@
db_session = object_session( self )
rval = db_session.query( func.sum( db_session.query( HistoryDatasetAssociation.dataset_id, Dataset.total_size ).join( Dataset )
.filter( HistoryDatasetAssociation.table.c.history_id == self.id )
+ .filter( HistoryDatasetAssociation.purged != True )
.filter( Dataset.purged != True )
.distinct().subquery().c.total_size ) ).first()[0]
if rval is None:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Distributed object store fixes for pgcleanup.py.
by Bitbucket 11 Sep '12
by Bitbucket 11 Sep '12
11 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/2b4111248390/
changeset: 2b4111248390
user: natefoo
date: 2012-09-11 18:22:03
summary: Distributed object store fixes for pgcleanup.py.
affected #: 1 file
diff -r 63cd6402badaf98f26080e71b1f0ed49db30e3ab -r 2b4111248390ae6340f4bec54d0cff29f48665fb scripts/cleanup_datasets/pgcleanup.py
--- a/scripts/cleanup_datasets/pgcleanup.py
+++ b/scripts/cleanup_datasets/pgcleanup.py
@@ -31,6 +31,12 @@
log = logging.getLogger()
+class MetadataFile(Bunch):
+ pass
+
+class Dataset(Bunch):
+ pass
+
class Cleanup(object):
def __init__(self):
self.options = None
@@ -199,12 +205,13 @@
log.info("All changes committed")
def _remove_metadata_file(self, id, object_store_id, action_name):
- metadata_file = Bunch(id=id, object_store_id=object_store_id)
+ metadata_file = MetadataFile(id=id, object_store_id=object_store_id)
try:
filename = self.object_store.get_filename(metadata_file, extra_dir='_metadata_files', extra_dir_at_root=True, alt_name="metadata_%d.dat" % id)
self._log('Removing from disk: %s' % filename, action_name)
- except ObjectNotFound:
+ except (ObjectNotFound, AttributeError), e:
+ log.error('Unable to get MetadataFile %s filename: %s' % (id, e))
return
if not self.options.dry_run:
@@ -656,8 +663,6 @@
"""
log.info('Marking purged all Datasets marked deleted that are older than the specified number of days.')
- # TODO: force retry option
-
event_id = self._create_event(inspect.stack()[0][3])
sql = """
@@ -700,15 +705,16 @@
self._log('Marked Dataset purged: %s in Object Store: %s' % (tup[0], tup[1]))
# always try to remove the "object store path" - if it's at an external_filename, that file will be untouched anyway (which is what we want)
- dataset = Bunch(id=tup[0], object_store_id=tup[1])
+ dataset = Dataset(id=tup[0], object_store_id=tup[1])
try:
filename = self.object_store.get_filename(dataset)
- except ObjectNotFound, AttributeError:
+ except (ObjectNotFound, AttributeError), e:
+ log.error('Unable to get Dataset %s filename: %s' % (tup[0], e))
continue
try:
extra_files_dir = self.object_store.get_filename(dataset, dir_only=True, extra_dir="dataset_%d_files" % tup[0])
- except ObjectNotFound, AttributeError:
+ except (ObjectNotFound, AttributeError):
extra_files_dir = None
# don't check for existence of the dataset, it should exist
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: carlfeberhard: historyPanel: temp fix for 2 line tooltips when placement = 'above'
by Bitbucket 11 Sep '12
by Bitbucket 11 Sep '12
11 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/63cd6402bada/
changeset: 63cd6402bada
user: carlfeberhard
date: 2012-09-11 17:46:15
summary: historyPanel: temp fix for 2 line tooltips when placement = 'above'
affected #: 1 file
diff -r 6568368038dc220ce1f66d5566570f32633055d9 -r 63cd6402badaf98f26080e71b1f0ed49db30e3ab templates/root/history.mako
--- a/templates/root/history.mako
+++ b/templates/root/history.mako
@@ -45,7 +45,7 @@
error: function() { alert( "Tagging failed" ) },
success: function(tag_elt_html) {
tag_elt.html(tag_elt_html);
- tag_elt.find(".tooltip").tooltip();
+ tag_elt.find(".tooltip").tooltip({ placement : 'bottom' });
tag_area.slideDown("fast");
}
});
@@ -86,7 +86,7 @@
annotation = "<em>Describe or add notes to dataset</em>";
}
annotation_elt.html(annotation);
- annotation_area.find(".tooltip").tooltip();
+ annotation_area.find(".tooltip").tooltip({ placement : 'bottom' });
async_save_text(
annotation_elt.attr("id"), annotation_elt.attr("id"),
"${h.url_for( controller='/dataset', action='annotate_async')}?" + href_parms,
@@ -229,6 +229,25 @@
tag_handling(this);
annotation_handling(this);
+
+ //TODO: hack (github has an issue on this - see how it's resolved)
+ // fix for two line bootstrap tooltips when placement: above
+ $( this ).find( '.tooltip' ).each( function(){
+ console.debug( 'tooltip:', this );
+ var $this = $( this );
+
+ // documented method - that doesn't seem to work
+ //$( this ).tooltip( 'destroy' );
+
+ $this.data( 'tooltip', false );
+ var title = $this.attr( 'data-original-title' );
+ $this.attr( 'data-original-title', null );
+ $this.attr( 'title', title );
+
+ // place them on the bottom for now
+ $this.tooltip({ placement : 'bottom' });
+ });
+
});
// Trackster links
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/ef7f11e99547/
changeset: ef7f11e99547
user: james_taylor
date: 2012-09-10 23:09:09
summary: circster: Allow data_standalone types to work; phyloviz: add tree datatypes to sample conf
affected #: 2 files
diff -r 6e79399b38d22512d8438522d26945c53f95b11a -r ef7f11e995473293a2e45f5517a627ad7177a3b1 datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample
+++ b/datatypes_conf.xml.sample
@@ -198,6 +198,10 @@
<display file="igv/vcf.xml" /><converter file="vcf_bgzip_to_tabix_converter.xml" target_datatype="tabix"/></datatype>
+ <!-- Phylogenetic tree datatypes -->
+ <datatype extension="phyloxml" type="galaxy.datatypes.xml:Phyloxml" display_in_upload="true" />
+ <datatype extension="nhx" type="galaxy.datatypes.data:Newick" display_in_upload="true" />
+ <datatype extension="nex" type="galaxy.datatypes.data:Nexus" display_in_upload="true" /><!-- Start RGenetics Datatypes --><datatype extension="affybatch" type="galaxy.datatypes.genetics:Affybatch" display_in_upload="true"/><!-- eigenstrat pedigree input file -->
diff -r 6e79399b38d22512d8438522d26945c53f95b11a -r ef7f11e995473293a2e45f5517a627ad7177a3b1 lib/galaxy/web/controllers/tracks.py
--- a/lib/galaxy/web/controllers/tracks.py
+++ b/lib/galaxy/web/controllers/tracks.py
@@ -553,11 +553,14 @@
# Get dataset and indexed datatype.
dataset = self.get_hda_or_ldda( trans, track[ 'hda_ldda'], track[ 'dataset_id' ] )
data_sources = self._get_datasources( trans, dataset )
- indexed_type = data_sources['index']['name']
-
- # Get converted dataset and append track's genome data.
- converted_dataset = dataset.get_converted_dataset( trans, indexed_type )
- data_provider = get_data_provider( indexed_type )( converted_dataset, dataset )
+ if 'data_standalone' in data_sources:
+ indexed_type = data_sources['data_standalone']['name']
+ data_provider = get_data_provider( indexed_type )( dataset )
+ else:
+ indexed_type = data_sources['index']['name']
+ # Get converted dataset and append track's genome data.
+ converted_dataset = dataset.get_converted_dataset( trans, indexed_type )
+ data_provider = get_data_provider( indexed_type )( converted_dataset, dataset )
# HACK: pass in additional params, which are only used for summary tree data, not BBI data.
track[ 'genome_wide_data' ] = { 'data': data_provider.get_genome_data( chroms_info, level=3, detail_cutoff=0, draw_cutoff=0 ) }
https://bitbucket.org/galaxy/galaxy-central/changeset/c71026b3d7ac/
changeset: c71026b3d7ac
user: james_taylor
date: 2012-09-10 23:40:56
summary: circster: render in entire window, ensure initially entire plot fits in view and is centered
affected #: 2 files
diff -r ef7f11e995473293a2e45f5517a627ad7177a3b1 -r c71026b3d7ac3c01ed6ee5350962de96b6ca47dd static/scripts/viz/visualization.js
--- a/static/scripts/viz/visualization.js
+++ b/static/scripts/viz/visualization.js
@@ -823,26 +823,27 @@
className: 'circster',
initialize: function(options) {
- this.width = options.width;
- this.height = options.height;
this.total_gap = options.total_gap;
this.genome = options.genome;
this.dataset_arc_height = options.dataset_arc_height;
this.track_gap = 5;
-
- // Compute radius start based on model.
- this.radius_start = this.width/2 - this.model.get('tracks').length * (this.dataset_arc_height + this.track_gap);
},
render: function() {
var self = this,
- dataset_arc_height = this.dataset_arc_height;
+ dataset_arc_height = this.dataset_arc_height,
+ width = self.$el.width(),
+ height = self.$el.height(),
+ // Compute radius start based on model, will be centered
+ // and fit entirely inside element by default
+ init_radius_start = ( Math.min(width,height)/2
+ - this.model.get('tracks').length * (this.dataset_arc_height + this.track_gap) );
// Set up SVG element.
var svg = d3.select(self.$el[0])
.append("svg")
- .attr("width", self.width)
- .attr("height", self.height)
+ .attr("width", width)
+ .attr("height", height)
.attr("pointer-events", "all")
// Set up zooming, dragging.
.append('svg:g')
@@ -851,14 +852,14 @@
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}))
- .attr("transform", "translate(" + self.width / 2 + "," + self.height / 2 + ")")
+ .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")")
.append('svg:g')
// -- Render each dataset in the visualization. --
this.model.get('tracks').each(function(track, index) {
var dataset = track.get('genome_wide_data'),
- radius_start = self.radius_start + index * (dataset_arc_height + self.track_gap),
+ radius_start = init_radius_start + index * (dataset_arc_height + self.track_gap),
// Layout chromosome arcs.
layout_class = (dataset instanceof GenomeWideBigWigData ? CircsterBigWigLayout : CircsterSummaryTreeLayout ),
arcs_layout = new layout_class({
diff -r ef7f11e995473293a2e45f5517a627ad7177a3b1 -r c71026b3d7ac3c01ed6ee5350962de96b6ca47dd templates/visualization/circster.mako
--- a/templates/visualization/circster.mako
+++ b/templates/visualization/circster.mako
@@ -69,8 +69,7 @@
var genome = new Genome(JSON.parse('${ h.to_json_string( genome ) }'))
visualization = new GenomeVisualization(JSON.parse('${ h.to_json_string( viz_config ) }')),
viz_view = new CircsterView({
- width: 700,
- height: 700,
+ el: $('#vis'),
// Gap is difficult to set because it very dependent on chromosome size and organization.
total_gap: 2 * Math.PI * 0.1,
genome: genome,
@@ -81,7 +80,7 @@
// -- Render viz. --
viz_view.render();
- $('#vis').append(viz_view.$el);
+
});
</script></%def>
https://bitbucket.org/galaxy/galaxy-central/changeset/6568368038dc/
changeset: 6568368038dc
user: james_taylor
date: 2012-09-10 23:41:20
summary: Automated merge with https://bitbucket.org/galaxy/galaxy-central
affected #: 4 files
diff -r 04cd4894e8406028c6acfd521cbcef7a396748b2 -r 6568368038dc220ce1f66d5566570f32633055d9 datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample
+++ b/datatypes_conf.xml.sample
@@ -198,6 +198,10 @@
<display file="igv/vcf.xml" /><converter file="vcf_bgzip_to_tabix_converter.xml" target_datatype="tabix"/></datatype>
+ <!-- Phylogenetic tree datatypes -->
+ <datatype extension="phyloxml" type="galaxy.datatypes.xml:Phyloxml" display_in_upload="true" />
+ <datatype extension="nhx" type="galaxy.datatypes.data:Newick" display_in_upload="true" />
+ <datatype extension="nex" type="galaxy.datatypes.data:Nexus" display_in_upload="true" /><!-- Start RGenetics Datatypes --><datatype extension="affybatch" type="galaxy.datatypes.genetics:Affybatch" display_in_upload="true"/><!-- eigenstrat pedigree input file -->
diff -r 04cd4894e8406028c6acfd521cbcef7a396748b2 -r 6568368038dc220ce1f66d5566570f32633055d9 lib/galaxy/web/controllers/tracks.py
--- a/lib/galaxy/web/controllers/tracks.py
+++ b/lib/galaxy/web/controllers/tracks.py
@@ -553,11 +553,14 @@
# Get dataset and indexed datatype.
dataset = self.get_hda_or_ldda( trans, track[ 'hda_ldda'], track[ 'dataset_id' ] )
data_sources = self._get_datasources( trans, dataset )
- indexed_type = data_sources['index']['name']
-
- # Get converted dataset and append track's genome data.
- converted_dataset = dataset.get_converted_dataset( trans, indexed_type )
- data_provider = get_data_provider( indexed_type )( converted_dataset, dataset )
+ if 'data_standalone' in data_sources:
+ indexed_type = data_sources['data_standalone']['name']
+ data_provider = get_data_provider( indexed_type )( dataset )
+ else:
+ indexed_type = data_sources['index']['name']
+ # Get converted dataset and append track's genome data.
+ converted_dataset = dataset.get_converted_dataset( trans, indexed_type )
+ data_provider = get_data_provider( indexed_type )( converted_dataset, dataset )
# HACK: pass in additional params, which are only used for summary tree data, not BBI data.
track[ 'genome_wide_data' ] = { 'data': data_provider.get_genome_data( chroms_info, level=4, detail_cutoff=0, draw_cutoff=0 ) }
diff -r 04cd4894e8406028c6acfd521cbcef7a396748b2 -r 6568368038dc220ce1f66d5566570f32633055d9 static/scripts/viz/visualization.js
--- a/static/scripts/viz/visualization.js
+++ b/static/scripts/viz/visualization.js
@@ -823,26 +823,27 @@
className: 'circster',
initialize: function(options) {
- this.width = options.width;
- this.height = options.height;
this.total_gap = options.total_gap;
this.genome = options.genome;
this.dataset_arc_height = options.dataset_arc_height;
this.track_gap = 5;
-
- // Compute radius start based on model.
- this.radius_start = this.width/2 - this.model.get('tracks').length * (this.dataset_arc_height + this.track_gap);
},
render: function() {
var self = this,
- dataset_arc_height = this.dataset_arc_height;
+ dataset_arc_height = this.dataset_arc_height,
+ width = self.$el.width(),
+ height = self.$el.height(),
+ // Compute radius start based on model, will be centered
+ // and fit entirely inside element by default
+ init_radius_start = ( Math.min(width,height)/2
+ - this.model.get('tracks').length * (this.dataset_arc_height + this.track_gap) );
// Set up SVG element.
var svg = d3.select(self.$el[0])
.append("svg")
- .attr("width", self.width)
- .attr("height", self.height)
+ .attr("width", width)
+ .attr("height", height)
.attr("pointer-events", "all")
// Set up zooming, dragging.
.append('svg:g')
@@ -851,14 +852,14 @@
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}))
- .attr("transform", "translate(" + self.width / 2 + "," + self.height / 2 + ")")
+ .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")")
.append('svg:g')
// -- Render each dataset in the visualization. --
this.model.get('tracks').each(function(track, index) {
var dataset = track.get('genome_wide_data'),
- radius_start = self.radius_start + index * (dataset_arc_height + self.track_gap),
+ radius_start = init_radius_start + index * (dataset_arc_height + self.track_gap),
// Layout chromosome arcs.
layout_class = (dataset instanceof GenomeWideBigWigData ? CircsterBigWigLayout : CircsterSummaryTreeLayout ),
arcs_layout = new layout_class({
diff -r 04cd4894e8406028c6acfd521cbcef7a396748b2 -r 6568368038dc220ce1f66d5566570f32633055d9 templates/visualization/circster.mako
--- a/templates/visualization/circster.mako
+++ b/templates/visualization/circster.mako
@@ -69,8 +69,7 @@
var genome = new Genome(JSON.parse('${ h.to_json_string( genome ) }'))
visualization = new GenomeVisualization(JSON.parse('${ h.to_json_string( viz_config ) }')),
viz_view = new CircsterView({
- width: 700,
- height: 700,
+ el: $('#vis'),
// Gap is difficult to set because it very dependent on chromosome size and organization.
total_gap: 2 * Math.PI * 0.1,
genome: genome,
@@ -81,7 +80,7 @@
// -- Render viz. --
viz_view.render();
- $('#vis').append(viz_view.$el);
+
});
</script></%def>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/04cd4894e840/
changeset: 04cd4894e840
user: natefoo
date: 2012-09-10 22:59:33
summary: Bug fixes for pgcleanup.py
affected #: 1 file
diff -r 4e69bc5d9e1e02074de22cc6e809c33f3462f587 -r 04cd4894e8406028c6acfd521cbcef7a396748b2 scripts/cleanup_datasets/pgcleanup.py
--- a/scripts/cleanup_datasets/pgcleanup.py
+++ b/scripts/cleanup_datasets/pgcleanup.py
@@ -25,6 +25,7 @@
import galaxy.config
+from galaxy.exceptions import ObjectNotFound
from galaxy.objectstore import build_object_store_from_config
from galaxy.util.bunch import Bunch
@@ -60,6 +61,7 @@
parser.add_option('-c', '--config', dest='config', help='Path to Galaxy config file (universe_wsgi.ini)', default=default_config)
parser.add_option('-d', '--debug', action='store_true', dest='debug', help='Enable debug logging', default=False)
parser.add_option('--dry-run', action='store_true', dest='dry_run', help="Dry run (rollback all transactions)", default=False)
+ parser.add_option('--force-retry', action='store_true', dest='force_retry', help="Retry file removals (on applicable actions)", default=False)
parser.add_option('-o', '--older-than', type='int', dest='days', help='Only perform action(s) on objects that have not been updated since the specified number of days', default=14)
parser.add_option('-U', '--no-update-time', action='store_false', dest='update_time', help="Don't set update_time on updated objects", default=True)
parser.add_option('-s', '--sequence', dest='sequence', help='Comma-separated sequence of actions, chosen from: %s' % self.action_names, default='')
@@ -68,18 +70,11 @@
self.options.sequence = [ x.strip() for x in self.options.sequence.split(',') ]
def __setup_logging(self):
+ format = "%(funcName)s %(levelname)s %(asctime)s %(message)s"
if self.options.debug:
- log.setLevel('DEBUG')
+ logging.basicConfig(level=logging.DEBUG, format=format)
else:
- log.setLevel('INFO')
-
- format = "%(funcName)s %(levelname)s %(asctime)s %(message)s"
- formatter = logging.Formatter(format)
-
- handler = logging.StreamHandler(sys.stdout)
- handler.setFormatter(formatter)
-
- log.addHandler(handler)
+ logging.basicConfig(level=logging.INFO, format=format)
def __load_config(self):
log.info('Reading config from %s' % self.options.config)
@@ -203,11 +198,15 @@
self.conn.commit()
log.info("All changes committed")
- def _remove_metadata_file(self, id, action_name):
- metadata_file = Bunch(id=id)
- filename = self.object_store.get_filename(metadata_file, extra_dir='_metadata_files', extra_dir_at_root=True, alt_name="metadata_%d.dat" % id)
+ def _remove_metadata_file(self, id, object_store_id, action_name):
+ metadata_file = Bunch(id=id, object_store_id=object_store_id)
- self._log('Removing from disk: %s' % filename, action_name)
+ try:
+ filename = self.object_store.get_filename(metadata_file, extra_dir='_metadata_files', extra_dir_at_root=True, alt_name="metadata_%d.dat" % id)
+ self._log('Removing from disk: %s' % filename, action_name)
+ except ObjectNotFound:
+ return
+
if not self.options.dry_run:
try:
os.unlink(filename)
@@ -329,7 +328,7 @@
update_time_sql = ''
if self.options.update_time:
update_time_sql = """,
- update_time = NOW()'"""
+ update_time = NOW()"""
sql = sql % (update_time_sql, '%s', '%s')
args = (self.options.days, event_id)
@@ -356,8 +355,7 @@
WITH purged_hda_ids
AS ( UPDATE history_dataset_association
SET purged = true%s
- WHERE deleted
- AND NOT purged
+ WHERE deleted%s
AND update_time < (NOW() - interval '%s days')
RETURNING id,
history_id),
@@ -367,7 +365,8 @@
FROM purged_hda_ids
WHERE purged_hda_ids.id = metadata_file.hda_id
RETURNING metadata_file.hda_id AS hda_id,
- metadata_file.id AS id),
+ metadata_file.id AS id,
+ metadata_file.object_store_id AS object_store_id),
deleted_icda_ids
AS ( UPDATE implicitly_converted_dataset_association
SET deleted = true%s
@@ -403,6 +402,7 @@
SELECT purged_hda_ids.id,
history.user_id,
deleted_metadata_file_ids.id,
+ deleted_metadata_file_ids.object_store_id,
deleted_icda_ids.id,
deleted_icda_ids.hda_id
FROM purged_hda_ids
@@ -414,12 +414,19 @@
ON purged_hda_ids.history_id = history.id;
"""
+ force_retry_sql = """
+ AND NOT purged"""
update_time_sql = ""
- if self.options.update_time:
- update_time_sql += """,
+
+ if self.options.force_retry:
+ force_retry_sql = ""
+ else:
+ # only update time if not doing force retry (otherwise a lot of things would have their update times reset that were actually purged a long time ago)
+ if self.options.update_time:
+ update_time_sql = """,
update_time = NOW()"""
- sql = sql % (update_time_sql, '%s', update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s')
+ sql = sql % (update_time_sql, force_retry_sql, '%s', update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s')
args = (self.options.days, event_id, event_id, event_id, event_id)
cur = self._update(sql, args)
self._flush()
@@ -430,10 +437,10 @@
if tup[1] is not None and tup[1] not in self.disk_accounting_user_ids:
self.disk_accounting_user_ids.append(int(tup[1]))
if tup[2] is not None:
- self._log('Purge of HDA %s caused deletion of MetadataFile: %s' % (tup[0], tup[2]))
- self._remove_metadata_file(tup[2], 'purge_deleted_hdas')
- if tup[3] is not None:
- self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[0], tup[3], tup[4]))
+ self._log('Purge of HDA %s caused deletion of MetadataFile: %s in Object Store: %s' % (tup[0], tup[2], tup[3]))
+ self._remove_metadata_file(tup[2], tup[3], 'purge_deleted_hdas')
+ if tup[4] is not None:
+ self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[0], tup[4], tup[5]))
self._close_logfile()
def purge_deleted_histories(self):
@@ -449,8 +456,7 @@
WITH purged_history_ids
AS ( UPDATE history
SET purged = true%s
- WHERE deleted
- AND NOT purged
+ WHERE deleted%s
AND update_time < (NOW() - interval '%s days')
RETURNING id,
user_id),
@@ -468,7 +474,8 @@
FROM purged_hda_ids
WHERE purged_hda_ids.id = metadata_file.hda_id
RETURNING metadata_file.hda_id AS hda_id,
- metadata_file.id AS id),
+ metadata_file.id AS id,
+ metadata_file.object_store_id AS object_store_id),
deleted_icda_ids
AS ( UPDATE implicitly_converted_dataset_association
SET deleted = true%s
@@ -510,6 +517,7 @@
purged_history_ids.user_id,
purged_hda_ids.id,
deleted_metadata_file_ids.id,
+ deleted_metadata_file_ids.object_store_id,
deleted_icda_ids.id,
deleted_icda_ids.hda_id
FROM purged_history_ids
@@ -521,12 +529,18 @@
ON deleted_icda_ids.hda_parent_id = purged_hda_ids.id;
"""
+ force_retry_sql = """
+ AND NOT purged"""
update_time_sql = ""
- if self.options.update_time:
- update_time_sql += """,
+
+ if self.options.force_retry:
+ force_retry_sql = ""
+ else:
+ if self.options.update_time:
+ update_time_sql += """,
update_time = NOW()"""
- sql = sql % (update_time_sql, '%s', update_time_sql, update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s', '%s')
+ sql = sql % (update_time_sql, force_retry_sql, '%s', update_time_sql, update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s', '%s')
args = (self.options.days, event_id, event_id, event_id, event_id, event_id)
cur = self._update(sql, args)
self._flush()
@@ -539,10 +553,10 @@
if tup[2] is not None:
self._log('Purge of History %s caused deletion of HistoryDatasetAssociation: %s' % (tup[0], tup[2]))
if tup[3] is not None:
- self._log('Purge of HDA %s caused deletion of MetadataFile: %s' % (tup[1], tup[3]))
- self._remove_metadata_file(tup[3], 'purge_deleted_histories')
- if tup[4] is not None:
- self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[1], tup[4], tup[5]))
+ self._log('Purge of HDA %s caused deletion of MetadataFile: %s in Object Store: %s' % (tup[1], tup[3], tup[4]))
+ self._remove_metadata_file(tup[3], tup[4], 'purge_deleted_histories')
+ if tup[5] is not None:
+ self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[1], tup[5], tup[6]))
self._close_logfile()
def delete_exported_histories(self):
@@ -559,6 +573,7 @@
SET deleted = true%s
FROM job_export_history_archive
WHERE job_export_history_archive.dataset_id = dataset.id
+ AND NOT deleted
AND dataset.update_time <= (NOW() - interval '%s days')
RETURNING dataset.id),
dataset_events
@@ -649,38 +664,52 @@
WITH purged_dataset_ids
AS ( UPDATE dataset
SET purged = true%s
- WHERE deleted = true
- AND purged = false
+ WHERE deleted%s
AND update_time < (NOW() - interval '%s days')
- RETURNING id),
+ RETURNING id,
+ object_store_id),
dataset_events
AS (INSERT INTO cleanup_event_dataset_association
(create_time, cleanup_event_id, dataset_id)
SELECT NOW(), %s, id
FROM purged_dataset_ids)
- SELECT id
+ SELECT id,
+ object_store_id
FROM purged_dataset_ids
ORDER BY id;
"""
+ force_retry_sql = """
+ AND NOT purged"""
update_time_sql = ""
- if self.options.update_time:
- update_time_sql += """,
+
+ if self.options.force_retry:
+ force_retry_sql = ""
+ else:
+ if self.options.update_time:
+ update_time_sql = """,
update_time = NOW()"""
- sql = sql % (update_time_sql, '%s', '%s')
+ sql = sql % (update_time_sql, force_retry_sql, '%s', '%s')
args = (self.options.days, event_id)
cur = self._update(sql, args)
self._flush()
self._open_logfile()
for tup in cur:
- self._log('Marked Dataset purged: %s' % tup[0])
+ self._log('Marked Dataset purged: %s in Object Store: %s' % (tup[0], tup[1]))
# always try to remove the "object store path" - if it's at an external_filename, that file will be untouched anyway (which is what we want)
- dataset = Bunch(id=tup[0])
- filename = self.object_store.get_filename(dataset)
- extra_files_dir = self.object_store.get_filename(dataset, dir_only=True, extra_dir="dataset_%d_files" % tup[0])
+ dataset = Bunch(id=tup[0], object_store_id=tup[1])
+ try:
+ filename = self.object_store.get_filename(dataset)
+ except ObjectNotFound, AttributeError:
+ continue
+
+ try:
+ extra_files_dir = self.object_store.get_filename(dataset, dir_only=True, extra_dir="dataset_%d_files" % tup[0])
+ except ObjectNotFound, AttributeError:
+ extra_files_dir = None
# don't check for existence of the dataset, it should exist
self._log('Removing from disk: %s' % filename)
@@ -691,7 +720,7 @@
self._log('Removal of %s failed with error: %s' % (filename, e))
# extra_files_dir is optional so it's checked first
- if os.path.exists(extra_files_dir):
+ if extra_files_dir is not None and os.path.exists(extra_files_dir):
self._log('Removing from disk: %s' % extra_files_dir)
if not self.options.dry_run:
try:
@@ -703,6 +732,10 @@
if __name__ == '__main__':
cleanup = Cleanup()
- cleanup._run()
- cleanup._update_user_disk_usage()
+ try:
+ cleanup._run()
+ if cleanup.disk_accounting_user_ids:
+ cleanup._update_user_disk_usage()
+ except:
+ log.exception('Caught exception in run sequence:')
cleanup._shutdown()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/5118cb9c05f7/
changeset: 5118cb9c05f7
user: jgoecks
date: 2012-09-10 20:12:52
summary: Small fixes to make summary tree compatible with Circster.
affected #: 2 files
diff -r 6d3023815cd77ec3045bf81ff15af884b828c38d -r 5118cb9c05f700a244b0d091bbb1b28edda3a881 lib/galaxy/visualization/tracks/summary.py
--- a/lib/galaxy/visualization/tracks/summary.py
+++ b/lib/galaxy/visualization/tracks/summary.py
@@ -93,8 +93,10 @@
starting_block = self.find_block( start, level )
ending_block = self.find_block( end, level )
for block in range( starting_block, ending_block + 1 ):
+ val = 0
if block in blocks[ level ]:
- results.append( ( block * multiplier, blocks[ level ][ block ] ) )
+ val = blocks[ level ][ block ]
+ results.append( ( block * multiplier, val ) )
return results
return None
diff -r 6d3023815cd77ec3045bf81ff15af884b828c38d -r 5118cb9c05f700a244b0d091bbb1b28edda3a881 lib/galaxy/web/controllers/tracks.py
--- a/lib/galaxy/web/controllers/tracks.py
+++ b/lib/galaxy/web/controllers/tracks.py
@@ -559,7 +559,7 @@
converted_dataset = dataset.get_converted_dataset( trans, indexed_type )
data_provider = get_data_provider( indexed_type )( converted_dataset, dataset )
# HACK: pass in additional params, which are only used for summary tree data, not BBI data.
- track[ 'genome_wide_data' ] = { 'data': data_provider.get_genome_data( chroms_info, level=3, detail_cutoff=0, draw_cutoff=0 ) }
+ track[ 'genome_wide_data' ] = { 'data': data_provider.get_genome_data( chroms_info, level=4, detail_cutoff=0, draw_cutoff=0 ) }
return trans.fill_template( 'visualization/circster.mako', viz_config=viz_config, genome=genome )
https://bitbucket.org/galaxy/galaxy-central/changeset/4e69bc5d9e1e/
changeset: 4e69bc5d9e1e
user: jgoecks
date: 2012-09-10 20:13:09
summary: Merge
affected #: 3 files
diff -r 5118cb9c05f700a244b0d091bbb1b28edda3a881 -r 4e69bc5d9e1e02074de22cc6e809c33f3462f587 lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -186,6 +186,8 @@
self.os_conn_path = kwargs.get( 'os_conn_path', '/' )
self.object_store_cache_size = float(kwargs.get( 'object_store_cache_size', -1 ))
self.distributed_object_store_config_file = kwargs.get( 'distributed_object_store_config_file', None )
+ if self.distributed_object_store_config_file is not None:
+ self.distributed_object_store_config_file = resolve_path( self.distributed_object_store_config_file, self.root )
# Parse global_conf and save the parser
global_conf = kwargs.get( 'global_conf', None )
global_conf_parser = ConfigParser.ConfigParser()
diff -r 5118cb9c05f700a244b0d091bbb1b28edda3a881 -r 4e69bc5d9e1e02074de22cc6e809c33f3462f587 lib/galaxy/web/base/controller.py
--- a/lib/galaxy/web/base/controller.py
+++ b/lib/galaxy/web/base/controller.py
@@ -19,6 +19,7 @@
from galaxy.security.validate_user_input import validate_publicname
from paste.httpexceptions import *
from galaxy.exceptions import *
+from galaxy.model import NoConverterException, ConverterDependencyException
from Cheetah.Template import Template
diff -r 5118cb9c05f700a244b0d091bbb1b28edda3a881 -r 4e69bc5d9e1e02074de22cc6e809c33f3462f587 scripts/cleanup_datasets/pgcleanup.py
--- a/scripts/cleanup_datasets/pgcleanup.py
+++ b/scripts/cleanup_datasets/pgcleanup.py
@@ -90,6 +90,7 @@
config_dict = {}
for key, value in config_parser.items('app:main'):
config_dict[key] = value
+ config_dict['root_dir'] = galaxy_root
self.config = galaxy.config.Configuration(**config_dict)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/6b35719fdcc8/
changeset: 6b35719fdcc8
user: natefoo
date: 2012-09-10 20:07:05
summary: Bugfix for pgcleanup.py
affected #: 2 files
diff -r 6e79399b38d22512d8438522d26945c53f95b11a -r 6b35719fdcc8356267ebe786ecd738d0c14fb52b lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -186,6 +186,8 @@
self.os_conn_path = kwargs.get( 'os_conn_path', '/' )
self.object_store_cache_size = float(kwargs.get( 'object_store_cache_size', -1 ))
self.distributed_object_store_config_file = kwargs.get( 'distributed_object_store_config_file', None )
+ if self.distributed_object_store_config_file is not None:
+ self.distributed_object_store_config_file = resolve_path( self.distributed_object_store_config_file, self.root )
# Parse global_conf and save the parser
global_conf = kwargs.get( 'global_conf', None )
global_conf_parser = ConfigParser.ConfigParser()
diff -r 6e79399b38d22512d8438522d26945c53f95b11a -r 6b35719fdcc8356267ebe786ecd738d0c14fb52b scripts/cleanup_datasets/pgcleanup.py
--- a/scripts/cleanup_datasets/pgcleanup.py
+++ b/scripts/cleanup_datasets/pgcleanup.py
@@ -90,6 +90,7 @@
config_dict = {}
for key, value in config_parser.items('app:main'):
config_dict[key] = value
+ config_dict['root_dir'] = galaxy_root
self.config = galaxy.config.Configuration(**config_dict)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: james_taylor: Datatype conversion exceptions no imported but used in base controller.
by Bitbucket 10 Sep '12
by Bitbucket 10 Sep '12
10 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/6e79399b38d2/
changeset: 6e79399b38d2
user: james_taylor
date: 2012-09-10 20:05:56
summary: Datatype conversion exceptions no imported but used in base controller.
affected #: 1 file
diff -r 6d3023815cd77ec3045bf81ff15af884b828c38d -r 6e79399b38d22512d8438522d26945c53f95b11a lib/galaxy/web/base/controller.py
--- a/lib/galaxy/web/base/controller.py
+++ b/lib/galaxy/web/base/controller.py
@@ -19,6 +19,7 @@
from galaxy.security.validate_user_input import validate_publicname
from paste.httpexceptions import *
from galaxy.exceptions import *
+from galaxy.model import NoConverterException, ConverterDependencyException
from Cheetah.Template import Template
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/b64b57240149/
changeset: b64b57240149
user: nuwan_ag
date: 2012-08-23 06:22:13
summary: Modified REST API to support multipart/form-data requests, to enable large file upload.
affected #: 2 files
diff -r dd8a939cf0a26ea9e3cb969297bbfe7d749e88f7 -r b64b572401493be2b424e7166c67473cf1f298dd lib/galaxy/tools/actions/upload_common.py
--- a/lib/galaxy/tools/actions/upload_common.py
+++ b/lib/galaxy/tools/actions/upload_common.py
@@ -28,7 +28,7 @@
local_filename = local_filename )
elif type( f ) == dict and 'filename' and 'local_filename' not in f:
raise Exception( 'Uploaded file was encoded in a way not understood by Galaxy.' )
- if upload_dataset['url_paste'].strip() != '':
+ if upload_dataset['url_paste'] and upload_dataset['url_paste'].strip() != '':
upload_dataset['url_paste'], is_multi_byte = datatypes.sniff.stream_to_file( StringIO.StringIO( upload_dataset['url_paste'] ), prefix="strio_url_paste_" )
else:
upload_dataset['url_paste'] = None
diff -r dd8a939cf0a26ea9e3cb969297bbfe7d749e88f7 -r b64b572401493be2b424e7166c67473cf1f298dd lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -5,6 +5,7 @@
import pkg_resources
import os, sys, time, socket, random, string
+import inspect
pkg_resources.require( "Cheetah" )
from Cheetah.Template import Template
import base
@@ -125,9 +126,25 @@
return error
trans.set_user( provided_key.user )
if trans.request.body:
- try:
- payload = util.recursively_stringify_dictionary_keys( simplejson.loads( trans.request.body ) )
- kwargs['payload'] = payload
+ def extract_payload_from_request(trans, func, kwargs):
+ content_type = trans.request.headers['content-type']
+ if content_type.startswith('multipart/form-data'):
+ # If the content type is a standard type such as multipart/form-data, the wsgi framework parses the request body
+ # and loads all field values into kwargs. However, kwargs also contains formal method parameters etc. which
+ # are not a part of the request body. This is a problem because it's not possible to differentiate between values
+ # which are a part of the request body, and therefore should be a part of the payload, and values which should not be
+ # in the payload. Therefore, the decorated method's formal arguments are discovered through reflection and removed from
+ # the payload dictionary. This helps to prevent duplicate argument conflicts in downstream methods.
+ payload = kwargs.copy()
+ named_args, _, _, _ = inspect.getargspec(func)
+ for arg in named_args:
+ payload.pop(arg, None)
+ else:
+ # When it's a non standard request body (e.g. json), the wsgi framework does not parse the request body. So do so manually.
+ payload = util.recursively_stringify_dictionary_keys( simplejson.loads( trans.request.body ) )
+ return payload
+ try:
+ kwargs['payload'] = extract_payload_from_request(trans, func, kwargs)
except ValueError:
error_status = '400 Bad Request'
error_message = 'Your request did not appear to be valid JSON, please consult the API documentation'
https://bitbucket.org/galaxy/galaxy-central/changeset/5747b665127a/
changeset: 5747b665127a
user: nuwan_ag
date: 2012-08-23 07:09:20
summary: Also added support for x-www-form-urlencoded REST API requests, for consistencies sake. This way, API clients can post as either JSON, multi-part form data, or standard url form encoding.
affected #: 1 file
diff -r b64b572401493be2b424e7166c67473cf1f298dd -r 5747b665127a5e4f82e102783048358fca68083b lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -128,7 +128,7 @@
if trans.request.body:
def extract_payload_from_request(trans, func, kwargs):
content_type = trans.request.headers['content-type']
- if content_type.startswith('multipart/form-data'):
+ if content_type.startswith('application/x-www-form-urlencoded') or content_type.startswith('multipart/form-data'):
# If the content type is a standard type such as multipart/form-data, the wsgi framework parses the request body
# and loads all field values into kwargs. However, kwargs also contains formal method parameters etc. which
# are not a part of the request body. This is a problem because it's not possible to differentiate between values
@@ -140,7 +140,9 @@
for arg in named_args:
payload.pop(arg, None)
else:
- # When it's a non standard request body (e.g. json), the wsgi framework does not parse the request body. So do so manually.
+ # Assume application/json content type and parse request body manually, since wsgi won't do it. However, the order of this check
+ # should ideally be in reverse, with the if clause being a check for application/json and the else clause assuming a standard encoding
+ # such as multipart/form-data. Leaving it as is for backward compatibility, just in case.
payload = util.recursively_stringify_dictionary_keys( simplejson.loads( trans.request.body ) )
return payload
try:
https://bitbucket.org/galaxy/galaxy-central/changeset/6d3023815cd7/
changeset: 6d3023815cd7
user: dannon
date: 2012-09-10 18:33:01
summary: Merged in nuwan_ag/galaxy-central (pull request #63)
affected #: 2 files
diff -r e0975c9b9bd25d44cfcacc202470bb8037da6d6f -r 6d3023815cd77ec3045bf81ff15af884b828c38d lib/galaxy/tools/actions/upload_common.py
--- a/lib/galaxy/tools/actions/upload_common.py
+++ b/lib/galaxy/tools/actions/upload_common.py
@@ -28,7 +28,7 @@
local_filename = local_filename )
elif type( f ) == dict and 'filename' and 'local_filename' not in f:
raise Exception( 'Uploaded file was encoded in a way not understood by Galaxy.' )
- if upload_dataset['url_paste'].strip() != '':
+ if upload_dataset['url_paste'] and upload_dataset['url_paste'].strip() != '':
upload_dataset['url_paste'], is_multi_byte = datatypes.sniff.stream_to_file( StringIO.StringIO( upload_dataset['url_paste'] ), prefix="strio_url_paste_" )
else:
upload_dataset['url_paste'] = None
diff -r e0975c9b9bd25d44cfcacc202470bb8037da6d6f -r 6d3023815cd77ec3045bf81ff15af884b828c38d lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -5,6 +5,7 @@
import pkg_resources
import os, sys, time, socket, random, string
+import inspect
pkg_resources.require( "Cheetah" )
from Cheetah.Template import Template
import base
@@ -125,9 +126,27 @@
return error
trans.set_user( provided_key.user )
if trans.request.body:
- try:
- payload = util.recursively_stringify_dictionary_keys( simplejson.loads( trans.request.body ) )
- kwargs['payload'] = payload
+ def extract_payload_from_request(trans, func, kwargs):
+ content_type = trans.request.headers['content-type']
+ if content_type.startswith('application/x-www-form-urlencoded') or content_type.startswith('multipart/form-data'):
+ # If the content type is a standard type such as multipart/form-data, the wsgi framework parses the request body
+ # and loads all field values into kwargs. However, kwargs also contains formal method parameters etc. which
+ # are not a part of the request body. This is a problem because it's not possible to differentiate between values
+ # which are a part of the request body, and therefore should be a part of the payload, and values which should not be
+ # in the payload. Therefore, the decorated method's formal arguments are discovered through reflection and removed from
+ # the payload dictionary. This helps to prevent duplicate argument conflicts in downstream methods.
+ payload = kwargs.copy()
+ named_args, _, _, _ = inspect.getargspec(func)
+ for arg in named_args:
+ payload.pop(arg, None)
+ else:
+ # Assume application/json content type and parse request body manually, since wsgi won't do it. However, the order of this check
+ # should ideally be in reverse, with the if clause being a check for application/json and the else clause assuming a standard encoding
+ # such as multipart/form-data. Leaving it as is for backward compatibility, just in case.
+ payload = util.recursively_stringify_dictionary_keys( simplejson.loads( trans.request.body ) )
+ return payload
+ try:
+ kwargs['payload'] = extract_payload_from_request(trans, func, kwargs)
except ValueError:
error_status = '400 Bad Request'
error_message = 'Your request did not appear to be valid JSON, please consult the API documentation'
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

10 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/e0975c9b9bd2/
changeset: e0975c9b9bd2
user: natefoo
date: 2012-09-10 18:03:23
summary: Add a dataset cleanup script that's optimized for (and compatible only with) PostgreSQL 9.1+. Also add a bunch of tables for logging all cleanup events, which makes reversing such events trivial.
affected #: 2 files
diff -r 9207ba35fa0caad1f8eac717afceb50f5c2a61c0 -r e0975c9b9bd25d44cfcacc202470bb8037da6d6f lib/galaxy/model/migrate/versions/0105_add_cleanup_event_table.py
--- /dev/null
+++ b/lib/galaxy/model/migrate/versions/0105_add_cleanup_event_table.py
@@ -0,0 +1,83 @@
+"""
+Migration script to add the cleanup_event* tables.
+"""
+from sqlalchemy import *
+from sqlalchemy.orm import *
+from migrate import *
+from migrate.changeset import *
+import sys, logging
+from galaxy.model.custom_types import *
+from sqlalchemy.exc import *
+import datetime
+now = datetime.datetime.utcnow
+
+log = logging.getLogger( __name__ )
+log.setLevel( logging.DEBUG )
+handler = logging.StreamHandler( sys.stdout )
+format = "%(name)s %(levelname)s %(asctime)s %(message)s"
+formatter = logging.Formatter( format )
+handler.setFormatter( formatter )
+log.addHandler( handler )
+
+metadata = MetaData( migrate_engine )
+
+# New table to log cleanup events
+CleanupEvent_table = Table( "cleanup_event", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "message", TrimmedString( 1024 ) ) )
+
+CleanupEventDatasetAssociation_table = Table( "cleanup_event_dataset_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "cleanup_event_id", Integer, ForeignKey( "cleanup_event.id" ), index=True, nullable=True ),
+ Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ) )
+
+CleanupEventMetadataFileAssociation_table = Table( "cleanup_event_metadata_file_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "cleanup_event_id", Integer, ForeignKey( "cleanup_event.id" ), index=True, nullable=True ),
+ Column( "metadata_file_id", Integer, ForeignKey( "metadata_file.id" ), index=True ) )
+
+CleanupEventHistoryAssociation_table = Table( "cleanup_event_history_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "cleanup_event_id", Integer, ForeignKey( "cleanup_event.id" ), index=True, nullable=True ),
+ Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ) )
+
+CleanupEventHistoryDatasetAssociationAssociation_table = Table( "cleanup_event_hda_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "cleanup_event_id", Integer, ForeignKey( "cleanup_event.id" ), index=True, nullable=True ),
+ Column( "hda_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ) )
+
+CleanupEventImplicitlyConvertedDatasetAssociationAssociation_table = Table( "cleanup_event_icda_association", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "cleanup_event_id", Integer, ForeignKey( "cleanup_event.id" ), index=True, nullable=True ),
+ Column( "icda_id", Integer, ForeignKey( "implicitly_converted_dataset_association.id" ), index=True ) )
+
+def upgrade():
+ print __doc__
+ metadata.reflect()
+ try:
+ CleanupEvent_table.create()
+ CleanupEventDatasetAssociation_table.create()
+ CleanupEventMetadataFileAssociation_table.create()
+ CleanupEventHistoryAssociation_table.create()
+ CleanupEventHistoryDatasetAssociationAssociation_table.create()
+ CleanupEventImplicitlyConvertedDatasetAssociationAssociation_table.create()
+ except Exception, e:
+ log.debug( "Creating table failed: %s" % str( e ) )
+
+def downgrade():
+ metadata.reflect()
+ try:
+ CleanupEventImplicitlyConvertedDatasetAssociationAssociation_table.drop()
+ CleanupEventHistoryDatasetAssociationAssociation_table.drop()
+ CleanupEventHistoryAssociation_table.drop()
+ CleanupEventMetadataFileAssociation_table.drop()
+ CleanupEventDatasetAssociation_table.drop()
+ CleanupEvent_table.drop()
+ except Exception, e:
+ log.debug( "Dropping table failed: %s" % str( e ) )
diff -r 9207ba35fa0caad1f8eac717afceb50f5c2a61c0 -r e0975c9b9bd25d44cfcacc202470bb8037da6d6f scripts/cleanup_datasets/pgcleanup.py
--- /dev/null
+++ b/scripts/cleanup_datasets/pgcleanup.py
@@ -0,0 +1,707 @@
+#!/usr/bin/env python
+"""
+pgcleanup.py - A script for cleaning up datasets in Galaxy efficiently, by
+ bypassing the Galaxy model and operating directly on the database.
+ PostgreSQL 9.1 or greater is required.
+"""
+
+import os
+import sys
+import shutil
+import logging
+import inspect
+import datetime
+from ConfigParser import ConfigParser
+from optparse import OptionParser
+
+galaxy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
+sys.path.insert(0, os.path.join(galaxy_root, 'lib'))
+
+from galaxy import eggs
+eggs.require('psycopg2')
+eggs.require('SQLAlchemy')
+import psycopg2
+from sqlalchemy.engine.url import make_url
+
+import galaxy.config
+
+from galaxy.objectstore import build_object_store_from_config
+from galaxy.util.bunch import Bunch
+
+log = logging.getLogger()
+
+class Cleanup(object):
+ def __init__(self):
+ self.options = None
+ self.args = None
+ self.config = None
+ self.conn = None
+ self.action_names = []
+ self.logs = {}
+ self.disk_accounting_user_ids = []
+ self.object_store = None
+
+ self.__cache_action_names()
+ self.__parse_args()
+ self.__setup_logging()
+ self.__load_config()
+ self.__connect_db()
+ self.__load_object_store()
+
+ def __cache_action_names(self):
+ for name, value in inspect.getmembers(self):
+ if not name.startswith('_') and inspect.ismethod(value):
+ self.action_names.append(name)
+
+ def __parse_args(self):
+ default_config = os.path.abspath(os.path.join(galaxy_root, 'universe_wsgi.ini'))
+
+ parser = OptionParser()
+ parser.add_option('-c', '--config', dest='config', help='Path to Galaxy config file (universe_wsgi.ini)', default=default_config)
+ parser.add_option('-d', '--debug', action='store_true', dest='debug', help='Enable debug logging', default=False)
+ parser.add_option('--dry-run', action='store_true', dest='dry_run', help="Dry run (rollback all transactions)", default=False)
+ parser.add_option('-o', '--older-than', type='int', dest='days', help='Only perform action(s) on objects that have not been updated since the specified number of days', default=14)
+ parser.add_option('-U', '--no-update-time', action='store_false', dest='update_time', help="Don't set update_time on updated objects", default=True)
+ parser.add_option('-s', '--sequence', dest='sequence', help='Comma-separated sequence of actions, chosen from: %s' % self.action_names, default='')
+ ( self.options, self.args ) = parser.parse_args()
+
+ self.options.sequence = [ x.strip() for x in self.options.sequence.split(',') ]
+
+ def __setup_logging(self):
+ if self.options.debug:
+ log.setLevel('DEBUG')
+ else:
+ log.setLevel('INFO')
+
+ format = "%(funcName)s %(levelname)s %(asctime)s %(message)s"
+ formatter = logging.Formatter(format)
+
+ handler = logging.StreamHandler(sys.stdout)
+ handler.setFormatter(formatter)
+
+ log.addHandler(handler)
+
+ def __load_config(self):
+ log.info('Reading config from %s' % self.options.config)
+ config_parser = ConfigParser(dict(here = os.getcwd(),
+ database_connection = 'sqlite:///database/universe.sqlite?isolation_level=IMMEDIATE'))
+ config_parser.read(self.options.config)
+
+ config_dict = {}
+ for key, value in config_parser.items('app:main'):
+ config_dict[key] = value
+
+ self.config = galaxy.config.Configuration(**config_dict)
+
+ def __connect_db(self):
+ url = make_url(self.config.database_connection)
+
+ log.info('Connecting to database with URL: %s' % url)
+ args = url.translate_connect_args()
+ args.update(url.query)
+
+ assert url.get_dialect().name == 'postgres', 'This script can only be used with PostgreSQL.'
+
+ self.conn = psycopg2.connect(**args)
+
+ def __load_object_store(self):
+ self.object_store = build_object_store_from_config(self.config)
+
+ def _open_logfile(self):
+ action_name = inspect.stack()[1][3]
+ logname = os.path.join(galaxy_root, 'scripts', 'cleanup_datasets', action_name + '.log')
+
+ if self.options.dry_run:
+ log.debug('--dry-run specified, logging changes to stdout instead of log file: %s' % logname)
+ self.logs[action_name] = sys.stdout
+ else:
+ log.debug('Opening log file: %s' % logname)
+ self.logs[action_name] = open(logname, 'a')
+
+ message = '==== Log opened: %s ' % datetime.datetime.now().isoformat()
+ self.logs[action_name].write(message.ljust(72, '='))
+ self.logs[action_name].write('\n')
+
+ def _log(self, message, action_name=None):
+ if action_name is None:
+ action_name = inspect.stack()[1][3]
+ if not message.endswith('\n'):
+ message += '\n'
+ self.logs[action_name].write(message)
+
+ def _close_logfile(self):
+ action_name = inspect.stack()[1][3]
+
+ message = '==== Log closed: %s ' % datetime.datetime.now().isoformat()
+ self.logs[action_name].write(message.ljust(72, '='))
+ self.logs[action_name].write('\n')
+
+ if self.options.dry_run:
+ log.debug('--dry-run specified, changes were logged to stdout insted of log file')
+ else:
+ log.debug('Closing log file: %s' % self.logs[action_name].name)
+ self.logs[action_name].close()
+
+ del self.logs[action_name]
+
+ def _run(self):
+ ok = True
+ for name in self.options.sequence:
+ if name not in self.action_names:
+ log.error('Unknown action in sequence: %s' % name)
+ ok = False
+ if not ok:
+ log.critical('Exiting due to previous error(s)')
+ sys.exit(1)
+ for name in self.options.sequence:
+ log.info('Calling %s' % name)
+ self.__getattribute__(name)()
+ log.info('Finished %s' % name)
+
+ def _create_event(self, message):
+ """
+ Create a new event in the cleanup_event table.
+ """
+
+ sql = """
+ INSERT INTO cleanup_event
+ (create_time, message)
+ VALUES (NOW(), %s)
+ RETURNING id;
+ """
+
+ log.debug("SQL is: %s" % sql % ("'" + message + "'"))
+
+ args = (message,)
+
+ cur = self.conn.cursor()
+ log.info("Executing SQL")
+ cur.execute(sql, args)
+ log.info('Database status: %s' % cur.statusmessage)
+
+ return cur.fetchone()[0]
+
+ def _update(self, sql, args):
+ if args is not None:
+ log.debug('SQL is: %s' % sql % args)
+ else:
+ log.debug('SQL is: %s' % sql)
+
+ cur = self.conn.cursor()
+ log.info('Executing SQL')
+ cur.execute(sql, args)
+ log.info('Database status: %s' % cur.statusmessage)
+
+ return cur
+
+ def _flush(self):
+ if self.options.dry_run:
+ self.conn.rollback()
+ log.info("--dry-run specified, all changes rolled back")
+ else:
+ self.conn.commit()
+ log.info("All changes committed")
+
+ def _remove_metadata_file(self, id, action_name):
+ metadata_file = Bunch(id=id)
+ filename = self.object_store.get_filename(metadata_file, extra_dir='_metadata_files', extra_dir_at_root=True, alt_name="metadata_%d.dat" % id)
+
+ self._log('Removing from disk: %s' % filename, action_name)
+ if not self.options.dry_run:
+ try:
+ os.unlink(filename)
+ except Exception, e:
+ self._log('Removal of %s failed with error: %s' % (filename, e), action_name)
+
+ def _update_user_disk_usage(self):
+ """
+ Any operation that purges a HistoryDatasetAssociation may require
+ updating a user's disk usage. Rather than attempt to resolve dataset
+ copies at purge-time, simply maintain a list of users that have had
+ HDAs purged, and update their usages once all updates are complete.
+
+ This could probably be done more efficiently.
+ """
+ log.info('Recalculating disk usage for users whose HistoryDatasetAssociations were purged')
+
+ for user_id in self.disk_accounting_user_ids:
+
+ # TODO: h.purged = false should be unnecessary once all hdas in purged histories are purged.
+ sql = """
+ UPDATE galaxy_user
+ SET disk_usage = (SELECT SUM(total_size)
+ FROM ( SELECT d.total_size
+ FROM history_dataset_association hda
+ JOIN history h ON h.id = hda.history_id
+ JOIN dataset d ON hda.dataset_id = d.id
+ WHERE h.user_id = %s
+ AND h.purged = false
+ AND hda.purged = false
+ AND d.purged = false
+ AND d.id NOT IN (SELECT dataset_id
+ FROM library_dataset_dataset_association)
+ GROUP BY d.id) sizes)
+ WHERE id = %s
+ RETURNING disk_usage;
+ """
+
+ args = (user_id, user_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ for tup in cur:
+ # disk_usage might be None (e.g. user has purged all data)
+ log.debug('Updated disk usage for user id %i to %s bytes' % (user_id, tup[0]))
+
+ def _shutdown(self):
+ self.object_store.shutdown()
+ self.conn.close()
+ for handle in self.logs.values():
+ message = '==== Log closed at shutdown: %s ' % datetime.datetime.now().isoformat()
+ handle.write(message.ljust(72, '='))
+ handle.write('\n')
+ handle.close()
+
+ def update_hda_purged_flag(self):
+ """
+ The old cleanup script does not mark HistoryDatasetAssociations as purged when deleted Histories are purged. This method can be used to rectify that situation.
+ """
+ log.info('Marking purged all HistoryDatasetAssociations associated with purged Datasets')
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ # update_time is intentionally left unmodified.
+ sql = """
+ WITH purged_hda_ids
+ AS ( UPDATE history_dataset_association
+ SET purged = true
+ FROM dataset
+ WHERE history_dataset_association.dataset_id = dataset.id
+ AND dataset.purged
+ AND NOT history_dataset_association.purged
+ RETURNING history_dataset_association.id),
+ hda_events
+ AS (INSERT INTO cleanup_event_hda_association
+ (create_time, cleanup_event_id, hda_id)
+ SELECT NOW(), %s, id
+ FROM purged_hda_ids)
+ SELECT id
+ FROM purged_hda_ids
+ ORDER BY id;
+ """
+
+ args = (event_id,)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked HistoryDatasetAssociation purged: %s' % tup[0])
+ self._close_logfile()
+
+ def delete_userless_histories(self):
+ """
+ Mark deleted all "anonymous" Histories (not owned by a registered user) that are older than the specified number of days.
+ """
+ log.info('Marking deleted all userless Histories older than %i days' % self.options.days)
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH deleted_history_ids
+ AS ( UPDATE history
+ SET deleted = true%s
+ WHERE user_id is null
+ AND NOT deleted
+ AND update_time < (NOW() - interval '%s days')
+ RETURNING id),
+ history_events
+ AS (INSERT INTO cleanup_event_history_association
+ (create_time, cleanup_event_id, history_id)
+ SELECT NOW(), %s, id
+ FROM deleted_history_ids)
+ SELECT id
+ FROM deleted_history_ids
+ ORDER BY id;
+ """
+
+ update_time_sql = ''
+ if self.options.update_time:
+ update_time_sql = """,
+ update_time = NOW()'"""
+
+ sql = sql % (update_time_sql, '%s', '%s')
+ args = (self.options.days, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked userless History deleted: %s' % tup[0])
+ self._close_logfile()
+
+ def purge_deleted_hdas(self):
+ """
+ Mark purged all HistoryDatasetAssociations currently marked deleted that are older than the specified number of days.
+ Mark deleted all MetadataFiles whose hda_id is purged in this step.
+ Mark deleted all ImplicitlyConvertedDatasetAssociations whose hda_parent_id is purged in this step.
+ Mark purged all HistoryDatasetAssociations for which an ImplicitlyConvertedDatasetAssociation with matching hda_id is deleted in this step.
+ """
+ log.info('Marking purged all deleted HistoryDatasetAssociations older than %i days' % self.options.days)
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH purged_hda_ids
+ AS ( UPDATE history_dataset_association
+ SET purged = true%s
+ WHERE deleted
+ AND NOT purged
+ AND update_time < (NOW() - interval '%s days')
+ RETURNING id,
+ history_id),
+ deleted_metadata_file_ids
+ AS ( UPDATE metadata_file
+ SET deleted = true%s
+ FROM purged_hda_ids
+ WHERE purged_hda_ids.id = metadata_file.hda_id
+ RETURNING metadata_file.hda_id AS hda_id,
+ metadata_file.id AS id),
+ deleted_icda_ids
+ AS ( UPDATE implicitly_converted_dataset_association
+ SET deleted = true%s
+ FROM purged_hda_ids
+ WHERE purged_hda_ids.id = implicitly_converted_dataset_association.hda_parent_id
+ RETURNING implicitly_converted_dataset_association.hda_id AS hda_id,
+ implicitly_converted_dataset_association.hda_parent_id AS hda_parent_id,
+ implicitly_converted_dataset_association.id AS id),
+ deleted_icda_purged_child_hda_ids
+ AS ( UPDATE history_dataset_association
+ SET purged = true%s
+ FROM deleted_icda_ids where deleted_icda_ids.hda_id = history_dataset_association.id),
+ hda_events
+ AS (INSERT INTO cleanup_event_hda_association
+ (create_time, cleanup_event_id, hda_id)
+ SELECT NOW(), %s, id
+ FROM purged_hda_ids),
+ metadata_file_events
+ AS (INSERT INTO cleanup_event_metadata_file_association
+ (create_time, cleanup_event_id, metadata_file_id)
+ SELECT NOW(), %s, id
+ FROM deleted_metadata_file_ids),
+ icda_events
+ AS (INSERT INTO cleanup_event_icda_association
+ (create_time, cleanup_event_id, icda_id)
+ SELECT NOW(), %s, id
+ FROM deleted_icda_ids),
+ icda_hda_events
+ AS (INSERT INTO cleanup_event_hda_association
+ (create_time, cleanup_event_id, hda_id)
+ SELECT NOW(), %s, hda_id
+ FROM deleted_icda_ids)
+ SELECT purged_hda_ids.id,
+ history.user_id,
+ deleted_metadata_file_ids.id,
+ deleted_icda_ids.id,
+ deleted_icda_ids.hda_id
+ FROM purged_hda_ids
+ LEFT OUTER JOIN deleted_metadata_file_ids
+ ON deleted_metadata_file_ids.hda_id = purged_hda_ids.id
+ LEFT OUTER JOIN deleted_icda_ids
+ ON deleted_icda_ids.hda_parent_id = purged_hda_ids.id
+ LEFT OUTER JOIN history
+ ON purged_hda_ids.history_id = history.id;
+ """
+
+ update_time_sql = ""
+ if self.options.update_time:
+ update_time_sql += """,
+ update_time = NOW()"""
+
+ sql = sql % (update_time_sql, '%s', update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s')
+ args = (self.options.days, event_id, event_id, event_id, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked HistoryDatasetAssociations purged: %s' % tup[0])
+ if tup[1] is not None and tup[1] not in self.disk_accounting_user_ids:
+ self.disk_accounting_user_ids.append(int(tup[1]))
+ if tup[2] is not None:
+ self._log('Purge of HDA %s caused deletion of MetadataFile: %s' % (tup[0], tup[2]))
+ self._remove_metadata_file(tup[2], 'purge_deleted_hdas')
+ if tup[3] is not None:
+ self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[0], tup[3], tup[4]))
+ self._close_logfile()
+
+ def purge_deleted_histories(self):
+ """
+ Mark purged all Histories marked deleted that are older than the specified number of days.
+ Mark purged all HistoryDatasetAssociations in Histories marked purged in this step (if not already purged).
+ """
+ log.info('Marking purged all deleted histories that are older than the specified number of days.')
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH purged_history_ids
+ AS ( UPDATE history
+ SET purged = true%s
+ WHERE deleted
+ AND NOT purged
+ AND update_time < (NOW() - interval '%s days')
+ RETURNING id,
+ user_id),
+ purged_hda_ids
+ AS ( UPDATE history_dataset_association
+ SET purged = true%s
+ FROM purged_history_ids
+ WHERE purged_history_ids.id = history_dataset_association.history_id
+ AND NOT history_dataset_association.purged
+ RETURNING history_dataset_association.history_id AS history_id,
+ history_dataset_association.id AS id),
+ deleted_metadata_file_ids
+ AS ( UPDATE metadata_file
+ SET deleted = true%s
+ FROM purged_hda_ids
+ WHERE purged_hda_ids.id = metadata_file.hda_id
+ RETURNING metadata_file.hda_id AS hda_id,
+ metadata_file.id AS id),
+ deleted_icda_ids
+ AS ( UPDATE implicitly_converted_dataset_association
+ SET deleted = true%s
+ FROM purged_hda_ids
+ WHERE purged_hda_ids.id = implicitly_converted_dataset_association.hda_parent_id
+ RETURNING implicitly_converted_dataset_association.hda_id AS hda_id,
+ implicitly_converted_dataset_association.hda_parent_id AS hda_parent_id,
+ implicitly_converted_dataset_association.id AS id),
+ deleted_icda_purged_child_hda_ids
+ AS ( UPDATE history_dataset_association
+ SET purged = true%s
+ FROM deleted_icda_ids where deleted_icda_ids.hda_id = history_dataset_association.id),
+ history_events
+ AS (INSERT INTO cleanup_event_history_association
+ (create_time, cleanup_event_id, history_id)
+ SELECT NOW(), %s, id
+ FROM purged_history_ids),
+ hda_events
+ AS (INSERT INTO cleanup_event_hda_association
+ (create_time, cleanup_event_id, hda_id)
+ SELECT NOW(), %s, id
+ FROM purged_hda_ids),
+ metadata_file_events
+ AS (INSERT INTO cleanup_event_metadata_file_association
+ (create_time, cleanup_event_id, metadata_file_id)
+ SELECT NOW(), %s, id
+ FROM deleted_metadata_file_ids),
+ icda_events
+ AS (INSERT INTO cleanup_event_icda_association
+ (create_time, cleanup_event_id, icda_id)
+ SELECT NOW(), %s, id
+ FROM deleted_icda_ids),
+ icda_hda_events
+ AS (INSERT INTO cleanup_event_hda_association
+ (create_time, cleanup_event_id, hda_id)
+ SELECT NOW(), %s, hda_id
+ FROM deleted_icda_ids)
+ SELECT purged_history_ids.id,
+ purged_history_ids.user_id,
+ purged_hda_ids.id,
+ deleted_metadata_file_ids.id,
+ deleted_icda_ids.id,
+ deleted_icda_ids.hda_id
+ FROM purged_history_ids
+ LEFT OUTER JOIN purged_hda_ids
+ ON purged_history_ids.id = purged_hda_ids.history_id
+ LEFT OUTER JOIN deleted_metadata_file_ids
+ ON deleted_metadata_file_ids.hda_id = purged_hda_ids.id
+ LEFT OUTER JOIN deleted_icda_ids
+ ON deleted_icda_ids.hda_parent_id = purged_hda_ids.id;
+ """
+
+ update_time_sql = ""
+ if self.options.update_time:
+ update_time_sql += """,
+ update_time = NOW()"""
+
+ sql = sql % (update_time_sql, '%s', update_time_sql, update_time_sql, update_time_sql, update_time_sql, '%s', '%s', '%s', '%s', '%s')
+ args = (self.options.days, event_id, event_id, event_id, event_id, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked History purged: %s' % tup[0])
+ if tup[1] is not None and tup[1] not in self.disk_accounting_user_ids:
+ self.disk_accounting_user_ids.append(int(tup[1]))
+ if tup[2] is not None:
+ self._log('Purge of History %s caused deletion of HistoryDatasetAssociation: %s' % (tup[0], tup[2]))
+ if tup[3] is not None:
+ self._log('Purge of HDA %s caused deletion of MetadataFile: %s' % (tup[1], tup[3]))
+ self._remove_metadata_file(tup[3], 'purge_deleted_histories')
+ if tup[4] is not None:
+ self._log('Purge of HDA %s caused deletion of ImplicitlyConvertedDatasetAssociation: %s and converted HistoryDatasetAssociation: %s' % (tup[1], tup[4], tup[5]))
+ self._close_logfile()
+
+ def delete_exported_histories(self):
+ """
+ Mark deleted all Datasets that are derivative of JobExportHistoryArchives that are older than the specified number of days.
+ """
+ log.info('Marking deleted all Datasets that are derivative of JobExportHistoryArchives that are older than the specified number of days.')
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH deleted_dataset_ids
+ AS ( UPDATE dataset
+ SET deleted = true%s
+ FROM job_export_history_archive
+ WHERE job_export_history_archive.dataset_id = dataset.id
+ AND dataset.update_time <= (NOW() - interval '%s days')
+ RETURNING dataset.id),
+ dataset_events
+ AS (INSERT INTO cleanup_event_dataset_association
+ (create_time, cleanup_event_id, dataset_id)
+ SELECT NOW(), %s, id
+ FROM deleted_dataset_ids)
+ SELECT id
+ FROM deleted_dataset_ids
+ ORDER BY id;
+ """
+
+ update_time_sql = ""
+ if self.options.update_time:
+ update_time_sql += """,
+ update_time = NOW()"""
+
+ sql = sql % (update_time_sql, '%s', '%s')
+ args = (self.options.days, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked Dataset deleted: %s' % tup[0])
+ self._close_logfile()
+
+ def delete_datasets(self):
+ """
+ Mark deleted all Datasets whose associations are all marked as deleted (LDDA) or purged (HDA) that are older than the specified number of days.
+ """
+ log.info('Marking deleted all Datasets whose associations are all marked as deleted/purged that are older than the specified number of days.')
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH deleted_dataset_ids
+ AS ( UPDATE dataset
+ SET deleted = true%s
+ WHERE NOT deleted
+ AND NOT EXISTS (SELECT true
+ FROM library_dataset_dataset_association
+ WHERE (NOT deleted
+ OR update_time >= (NOW() - interval '%s days'))
+ AND dataset.id = dataset_id)
+ AND NOT EXISTS (SELECT true
+ FROM history_dataset_association
+ WHERE (NOT purged
+ OR update_time >= (NOW() - interval '%s days'))
+ AND dataset.id = dataset_id)
+ RETURNING id),
+ dataset_events
+ AS (INSERT INTO cleanup_event_dataset_association
+ (create_time, cleanup_event_id, dataset_id)
+ SELECT NOW(), %s, id
+ FROM deleted_dataset_ids)
+ SELECT id
+ FROM deleted_dataset_ids
+ ORDER BY id;
+ """
+
+ update_time_sql = ""
+ if self.options.update_time:
+ update_time_sql += """,
+ update_time = NOW()"""
+
+ sql = sql % (update_time_sql, '%s', '%s', '%s')
+ args = (self.options.days, self.options.days, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked Dataset deleted: %s' % tup[0])
+ self._close_logfile()
+
+ def purge_datasets(self):
+ """
+ Mark purged all Datasets marked deleted that are older than the specified number of days.
+ """
+ log.info('Marking purged all Datasets marked deleted that are older than the specified number of days.')
+
+ # TODO: force retry option
+
+ event_id = self._create_event(inspect.stack()[0][3])
+
+ sql = """
+ WITH purged_dataset_ids
+ AS ( UPDATE dataset
+ SET purged = true%s
+ WHERE deleted = true
+ AND purged = false
+ AND update_time < (NOW() - interval '%s days')
+ RETURNING id),
+ dataset_events
+ AS (INSERT INTO cleanup_event_dataset_association
+ (create_time, cleanup_event_id, dataset_id)
+ SELECT NOW(), %s, id
+ FROM purged_dataset_ids)
+ SELECT id
+ FROM purged_dataset_ids
+ ORDER BY id;
+ """
+
+ update_time_sql = ""
+ if self.options.update_time:
+ update_time_sql += """,
+ update_time = NOW()"""
+
+ sql = sql % (update_time_sql, '%s', '%s')
+ args = (self.options.days, event_id)
+ cur = self._update(sql, args)
+ self._flush()
+
+ self._open_logfile()
+ for tup in cur:
+ self._log('Marked Dataset purged: %s' % tup[0])
+
+ # always try to remove the "object store path" - if it's at an external_filename, that file will be untouched anyway (which is what we want)
+ dataset = Bunch(id=tup[0])
+ filename = self.object_store.get_filename(dataset)
+ extra_files_dir = self.object_store.get_filename(dataset, dir_only=True, extra_dir="dataset_%d_files" % tup[0])
+
+ # don't check for existence of the dataset, it should exist
+ self._log('Removing from disk: %s' % filename)
+ if not self.options.dry_run:
+ try:
+ os.unlink(filename)
+ except Exception, e:
+ self._log('Removal of %s failed with error: %s' % (filename, e))
+
+ # extra_files_dir is optional so it's checked first
+ if os.path.exists(extra_files_dir):
+ self._log('Removing from disk: %s' % extra_files_dir)
+ if not self.options.dry_run:
+ try:
+ shutil.rmtree(extra_files_dir)
+ except Exception, e:
+ self._log('Removal of %s failed with error: %s' % (extra_files_dir, e))
+
+ self._close_logfile()
+
+if __name__ == '__main__':
+ cleanup = Cleanup()
+ cleanup._run()
+ cleanup._update_user_disk_usage()
+ cleanup._shutdown()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: rmarenco: Added the base.css generated from base.less
by Bitbucket 09 Sep '12
by Bitbucket 09 Sep '12
09 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/9207ba35fa0c/
changeset: 9207ba35fa0c
user: rmarenco
date: 2012-09-10 00:24:51
summary: Added the base.css generated from base.less
affected #: 1 file
diff -r 110a69b0d387228ec7bed84814192b9c99082d7c -r 9207ba35fa0caad1f8eac717afceb50f5c2a61c0 static/june_2007_style/blue/base.css
--- /dev/null
+++ b/static/june_2007_style/blue/base.css
@@ -0,0 +1,914 @@
+article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
+audio:not([controls]){display:none;}
+html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
+a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+a:hover,a:active{outline:0;}
+sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
+sup{top:-0.5em;}
+sub{bottom:-0.25em;}
+img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
+#map_canvas img{max-width:none;}
+button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
+button,input{*overflow:visible;line-height:normal;}
+button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
+button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
+input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
+input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
+textarea{overflow:auto;vertical-align:top;}
+.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
+.clearfix:after{clear:both;}
+.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
+.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
+article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
+audio:not([controls]){display:none;}
+html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
+a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+a:hover,a:active{outline:0;}
+sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
+sup{top:-0.5em;}
+sub{bottom:-0.25em;}
+img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
+#map_canvas img{max-width:none;}
+button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
+button,input{*overflow:visible;line-height:normal;}
+button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
+button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
+input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
+input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
+textarea{overflow:auto;vertical-align:top;}
+.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
+.clearfix:after{clear:both;}
+.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
+.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
+body{margin:0;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:12px;line-height:16px;color:#111111;background-color:#ffffff;}
+a{color:#303030;text-decoration:none;}
+a:hover{color:#0a0a0a;text-decoration:underline;}
+p{margin:0 0 8px;}p small{font-size:10px;color:#999999;}
+.lead{margin-bottom:16px;font-size:20px;font-weight:200;line-height:24px;}
+h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
+h1{font-size:30px;line-height:32px;}h1 small{font-size:18px;}
+h2{font-size:24px;line-height:32px;}h2 small{font-size:18px;}
+h3{font-size:18px;line-height:24px;}h3 small{font-size:14px;}
+h4,h5,h6{line-height:16px;}
+h4{font-size:14px;}h4 small{font-size:12px;}
+h5{font-size:12px;}
+h6{font-size:11px;color:#999999;text-transform:uppercase;}
+.page-header{padding-bottom:15px;margin:16px 0;border-bottom:1px solid #eeeeee;}
+.page-header h1{line-height:1;}
+ul,ol{padding:0;margin:0 0 8px 25px;}
+ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
+ul{list-style:disc;}
+ol{list-style:decimal;}
+li{line-height:16px;}
+ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
+dl{margin-bottom:16px;}
+dt,dd{line-height:16px;}
+dt{font-weight:bold;line-height:15px;}
+dd{margin-left:8px;}
+.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
+.dl-horizontal dd{margin-left:130px;}
+hr{margin:16px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
+strong{font-weight:bold;}
+em{font-style:italic;}
+.muted{color:#999999;}
+abbr[title]{cursor:help;border-bottom:1px dotted #999999;}
+abbr.initialism{font-size:90%;text-transform:uppercase;}
+blockquote{padding:0 0 0 15px;margin:0 0 16px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:20px;font-size:16px;font-weight:300;line-height:20px;}
+blockquote small{display:block;line-height:16px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
+blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
+q:before,q:after,blockquote:before,blockquote:after{content:"";}
+address{display:block;margin-bottom:16px;font-style:normal;line-height:16px;}
+small{font-size:100%;}
+cite{font-style:normal;}
+table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;}
+.table{width:100%;margin-bottom:16px;}.table th,.table td{padding:8px;line-height:16px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
+.table th{font-weight:bold;}
+.table thead th{vertical-align:bottom;}
+.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;}
+.table tbody+tbody{border-top:2px solid #dddddd;}
+.table-condensed th,.table-condensed td{padding:4px 5px;}
+.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
+.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
+.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px;}
+.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px;}
+.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;}
+.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;}
+.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
+.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;}
+table .span1{float:none;width:44px;margin-left:0;float:none;width:44px;margin-left:0;}
+table .span2{float:none;width:124px;margin-left:0;float:none;width:124px;margin-left:0;}
+table .span3{float:none;width:204px;margin-left:0;float:none;width:204px;margin-left:0;}
+table .span4{float:none;width:284px;margin-left:0;float:none;width:284px;margin-left:0;}
+table .span5{float:none;width:364px;margin-left:0;float:none;width:364px;margin-left:0;}
+table .span6{float:none;width:444px;margin-left:0;float:none;width:444px;margin-left:0;}
+table .span7{float:none;width:524px;margin-left:0;float:none;width:524px;margin-left:0;}
+table .span8{float:none;width:604px;margin-left:0;float:none;width:604px;margin-left:0;}
+table .span9{float:none;width:684px;margin-left:0;float:none;width:684px;margin-left:0;}
+table .span10{float:none;width:764px;margin-left:0;float:none;width:764px;margin-left:0;}
+table .span11{float:none;width:844px;margin-left:0;float:none;width:844px;margin-left:0;}
+table .span12{float:none;width:924px;margin-left:0;float:none;width:924px;margin-left:0;}
+table .span13{float:none;width:1004px;margin-left:0;float:none;width:1004px;margin-left:0;}
+table .span14{float:none;width:1084px;margin-left:0;float:none;width:1084px;margin-left:0;}
+table .span15{float:none;width:1164px;margin-left:0;float:none;width:1164px;margin-left:0;}
+table .span16{float:none;width:1244px;margin-left:0;float:none;width:1244px;margin-left:0;}
+table .span17{float:none;width:1324px;margin-left:0;float:none;width:1324px;margin-left:0;}
+table .span18{float:none;width:1404px;margin-left:0;float:none;width:1404px;margin-left:0;}
+table .span19{float:none;width:1484px;margin-left:0;float:none;width:1484px;margin-left:0;}
+table .span20{float:none;width:1564px;margin-left:0;float:none;width:1564px;margin-left:0;}
+table .span21{float:none;width:1644px;margin-left:0;float:none;width:1644px;margin-left:0;}
+table .span22{float:none;width:1724px;margin-left:0;float:none;width:1724px;margin-left:0;}
+table .span23{float:none;width:1804px;margin-left:0;float:none;width:1804px;margin-left:0;}
+table .span24{float:none;width:1884px;margin-left:0;float:none;width:1884px;margin-left:0;}
+.dropup,.dropdown{position:relative;}
+.dropdown-toggle{*margin-bottom:-3px;}
+.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
+.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);}
+.dropdown .caret{margin-top:8px;margin-left:2px;}
+.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
+.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;}
+.dropdown-menu .divider{*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
+.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:16px;color:#333333;white-space:nowrap;}
+.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#303030;}
+.open{*z-index:1000;}.open >.dropdown-menu{display:block;}
+.pull-right>.dropdown-menu{right:0;left:auto;}
+.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";}
+.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
+.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
+.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
+.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
+.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;}
+.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;}
+.close{float:right;font-size:20px;font-weight:bold;line-height:16px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);opacity:0.4;filter:alpha(opacity=40);}
+button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}
+.btn{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.btn:active,.btn.active{background-color:#cccccc \9;}
+.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.btn:active,.btn.active{background-color:#cccccc \9;}
+.btn:first-child{*margin-left:0;}
+.btn:first-child{*margin-left:0;}
+.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
+.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
+.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:0.65;filter:alpha(opacity=65);opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
+.btn-large{padding:9px 14px;font-size:14px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
+.btn-large [class^="icon-"]{margin-top:1px;}
+.btn-small{padding:5px 9px;font-size:10px;line-height:14px;}
+.btn-small [class^="icon-"]{margin-top:-1px;}
+.btn-mini{padding:2px 6px;font-size:10px;line-height:12px;}
+.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
+.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);}
+.btn{border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
+.btn-primary{background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0031cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0031cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0031cd;*background-color:#002bb4;}
+.btn-primary:active,.btn-primary.active{background-color:#00259a \9;}
+.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0031cd;*background-color:#002bb4;}
+.btn-primary:active,.btn-primary.active{background-color:#00259a \9;}
+.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505;}
+.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
+.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505;}
+.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
+.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;}
+.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
+.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;}
+.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
+.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249;}
+.btn-success:active,.btn-success.active{background-color:#408140 \9;}
+.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249;}
+.btn-success:active,.btn-success.active{background-color:#408140 \9;}
+.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0;}
+.btn-info:active,.btn-info.active{background-color:#24748c \9;}
+.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0;}
+.btn-info:active,.btn-info.active{background-color:#24748c \9;}
+.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;*background-color:#151515;}
+.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
+.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;*background-color:#151515;}
+.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
+button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
+button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;}
+button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;}
+button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;}
+.btn-group{position:relative;*zoom:1;*zoom:1;*margin-left:.3em;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";}
+.btn-group:after{clear:both;}
+.btn-group:before,.btn-group:after{display:table;content:"";}
+.btn-group:after{clear:both;}
+.btn-group:first-child{*margin-left:0;}
+.btn-group:first-child{*margin-left:0;}
+.btn-group+.btn-group{margin-left:5px;}
+.btn-toolbar{margin-top:8px;margin-bottom:8px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;}
+.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
+.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
+.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
+.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
+.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
+.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;}
+.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
+.btn-group>.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:4px;*padding-bottom:4px;}
+.btn-group>.btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;}
+.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;}
+.btn-group>.btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;}
+.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
+.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;}
+.btn-group.open .btn-primary.dropdown-toggle{background-color:#0031cd;}
+.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;}
+.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;}
+.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;}
+.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;}
+.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;}
+.btn .caret{margin-top:7px;margin-left:0;}
+.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
+.btn-mini .caret{margin-top:5px;}
+.btn-small .caret{margin-top:6px;}
+.btn-large .caret{margin-top:6px;border-left-width:5px;border-right-width:5px;border-top-width:5px;}
+.dropup .btn-large .caret{border-bottom:5px solid #000000;border-top:0;}
+.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);opacity:0.75;filter:alpha(opacity=75);}
+.alert{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;}
+.alert-heading{color:inherit;}
+.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;}
+.alert-success{background-color:#ccffcc;border-color:#1a9900;color:#006600;}
+.alert-danger,.alert-error{background-color:#ffcccc;border-color:#ff3355;color:#660000;}
+.alert-info{background-color:#d9edf7;border-color:#1b7183;color:#134158;}
+.alert-block{padding-top:14px;padding-bottom:14px;}
+.alert-block>p,.alert-block>ul{margin-bottom:0;}
+.alert-block p+p{margin-top:5px;}
+.nav{margin-left:0;margin-bottom:16px;list-style:none;}
+.nav>li>a{display:block;}
+.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;}
+.nav>.pull-right{float:right;}
+.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:16px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;}
+.nav li+.nav-header{margin-top:9px;}
+.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;}
+.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
+.nav-list>li>a{padding:3px 15px;}
+.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#303030;}
+.nav-list [class^="icon-"]{margin-right:2px;}
+.nav-list .divider{*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
+.nav-tabs,.nav-pills{*zoom:1;*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
+.nav-tabs:after,.nav-pills:after{clear:both;}
+.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
+.nav-tabs:after,.nav-pills:after{clear:both;}
+.nav-tabs>li,.nav-pills>li{float:left;}
+.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
+.nav-tabs{border-bottom:1px solid #ddd;}
+.nav-tabs>li{margin-bottom:-1px;}
+.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:16px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #999999;}
+.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #999;border-bottom-color:transparent;cursor:default;}
+.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
+.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#303030;}
+.nav-stacked>li{float:none;}
+.nav-stacked>li>a{margin-right:0;}
+.nav-tabs.nav-stacked{border-bottom:0;}
+.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
+.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
+.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
+.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;}
+.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
+.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
+.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;}
+.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
+.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#303030;border-bottom-color:#303030;margin-top:6px;}
+.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#0a0a0a;border-bottom-color:#0a0a0a;}
+.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;}
+.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;}
+.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;}
+.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
+.tabs-stacked .open>a:hover{border-color:#999999;}
+.tabbable{*zoom:1;*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";}
+.tabbable:after{clear:both;}
+.tabbable:before,.tabbable:after{display:table;content:"";}
+.tabbable:after{clear:both;}
+.tab-content{overflow:auto;}
+.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;}
+.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
+.tab-content>.active,.pill-content>.active{display:block;}
+.tabs-below>.nav-tabs{border-top:1px solid #ddd;}
+.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;}
+.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;}
+.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;}
+.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;}
+.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
+.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
+.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
+.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
+.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
+.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
+.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
+.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
+.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
+.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:16px;}
+.navbar-inner{min-height:32px;padding-left:20px;padding-right:20px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);}
+.navbar .container{width:auto;}
+.nav-collapse.collapse{height:auto;}
+.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;}
+.navbar .brand{float:left;display:block;padding:4px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999999;}
+.navbar .navbar-text{margin-bottom:0;line-height:32px;}
+.navbar .navbar-link{color:#999999;}.navbar .navbar-link:hover{color:#ffffff;}
+.navbar .btn,.navbar .btn-group{margin-top:1px;margin-top:1px;}
+.navbar .btn-group .btn{margin:0;}
+.navbar-form{margin-bottom:0;*zoom:1;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";}
+.navbar-form:after{clear:both;}
+.navbar-form:before,.navbar-form:after{display:table;content:"";}
+.navbar-form:after{clear:both;}
+.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:1px;margin-top:1px;}
+.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;}
+.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
+.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;}
+.navbar-search{position:relative;float:left;margin-top:2px;margin-top:2px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:13px;font-weight:normal;line-height:1;font-size:13px;font-weight:normal;line-height:1;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:13px;font-weight:normal;line-height:1;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#5f6990;border:1px solid #222634;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;}
+.navbar-search .search-query:-ms-input-placeholder{color:#cccccc;}
+.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
+.navbar-search .search-query:-moz-placeholder{color:#cccccc;}
+.navbar-search .search-query:-ms-input-placeholder{color:#cccccc;}
+.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
+.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
+.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;}
+.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
+.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;width:940px;}
+.navbar-fixed-top{top:0;}
+.navbar-fixed-bottom{bottom:0;}
+.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
+.navbar .nav.pull-right{float:right;}
+.navbar .nav>li{display:block;float:left;}
+.navbar .nav>li>a{float:none;padding:5px 10px 7px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
+.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:1px 5px 2px;line-height:16px;}
+.navbar .btn-group{margin:0;padding:1px 5px 2px;}
+.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;}
+.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:rgba(0, 0, 0, 0.5);}
+.navbar .divider-vertical{height:32px;width:1px;margin:0 9px;overflow:hidden;background-color:#2c3143;border-right:1px solid #333333;}
+.navbar .nav.pull-right{margin-left:10px;margin-right:0;}
+.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2c3143;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2c3143;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#2c3143;*background-color:#222634;}
+.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#181a24 \9;}
+.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#2c3143;*background-color:#222634;}
+.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#181a24 \9;}
+.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
+.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
+.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
+.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
+.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;}
+.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;}
+.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
+.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
+.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent;}
+.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#ffffff;}
+.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{left:auto;right:12px;}
+.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{left:auto;right:13px;}
+.breadcrumb{padding:7px 14px;margin:0 0 16px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}
+.breadcrumb .divider{padding:0 5px;color:#999999;}
+.breadcrumb .active a{color:#333333;}
+.pagination{height:32px;margin:16px 0;}
+.pagination ul{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
+.pagination li{display:inline;}
+.pagination a{float:left;padding:0 14px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:0;}
+.pagination a:hover,.pagination .active a{background-color:#f5f5f5;}
+.pagination .active a{color:#999999;cursor:default;}
+.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;}
+.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
+.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
+.pagination-centered{text-align:center;}
+.pagination-right{text-align:right;}
+.pager{margin-left:0;margin-bottom:16px;list-style:none;text-align:center;*zoom:1;*zoom:1;}.pager:before,.pager:after{display:table;content:"";}
+.pager:after{clear:both;}
+.pager:before,.pager:after{display:table;content:"";}
+.pager:after{clear:both;}
+.pager li{display:inline;}
+.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
+.pager a:hover{text-decoration:none;background-color:#f5f5f5;}
+.pager .next a{float:right;}
+.pager .previous a{float:left;}
+.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;}
+.modal-open .dropdown-menu{z-index:2050;}
+.modal-open .dropdown.open{*z-index:2050;}
+.modal-open .popover{z-index:2060;}
+.modal-open .tooltip{z-index:2070;}
+.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
+.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
+.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
+.modal.fade.in{top:50%;}
+.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
+.modal-body{overflow-y:auto;max-height:400px;padding:15px;}
+.modal-form{margin-bottom:0;}
+.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";}
+.modal-footer:after{clear:both;}
+.modal-footer:before,.modal-footer:after{display:table;content:"";}
+.modal-footer:after{clear:both;}
+.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;}
+.modal-footer .btn-group .btn+.btn{margin-left:-1px;}
+.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;}
+.popover.right{margin-left:5px;}
+.popover.bottom{margin-top:5px;}
+.popover.left{margin-left:-5px;}
+.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
+.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
+.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
+.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
+.popover .arrow{position:absolute;width:0;height:0;}
+.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
+.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;}
+.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;}
+@-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;}}@-ms-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:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
+.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
+.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
+.progress.active .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-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);}
+.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);}
+.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);}
+.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);}
+.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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);}
+.accordion{margin-bottom:16px;}
+.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
+.accordion-heading{border-bottom:0;}
+.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
+.accordion-toggle{cursor:pointer;}
+.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
+.carousel{position:relative;margin-bottom:16px;line-height:1;}
+.carousel-inner{overflow:hidden;width:100%;position:relative;}
+.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}
+.carousel .item>img{display:block;line-height:1;}
+.carousel .active,.carousel .next,.carousel .prev{display:block;}
+.carousel .active{left:0;}
+.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;}
+.carousel .next{left:100%;}
+.carousel .prev{left:-100%;}
+.carousel .next.left,.carousel .prev.right{left:0;}
+.carousel .active.left{left:-100%;}
+.carousel .active.right{left:100%;}
+.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
+.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);opacity:0.9;filter:alpha(opacity=90);}
+.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);}
+.carousel-caption h4,.carousel-caption p{color:#ffffff;}
+.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;}
+.hero-unit p{font-size:18px;font-weight:200;line-height:24px;color:inherit;}
+.pull-right{float:right;}
+.pull-left{float:left;}
+.hide{display:none;}
+.show{display:block;}
+.invisible{visibility:hidden;}
+.btn{padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);}
+.btn.active,.btn:active{color:inherit;}
+.dropdown-menu{max-width:auto;}
+input[type="checkbox"],input[type="radio"]{margin-left:0.5ex;margin-right:0.5ex;}
+.nav-tabs{border-bottom:1px solid #999999;}
+.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #999999;}
+.nav-tabs>.active>a,.nav-tabs>.active>a:hover{border:1px solid #999999;border-bottom-color:transparent;}
+.bs-tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);opacity:0;filter:alpha(opacity=0);}.bs-tooltip.in{opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
+.bs-tooltip.top{margin-top:-2px;}
+.bs-tooltip.right{margin-left:2px;}
+.bs-tooltip.bottom{margin-top:2px;}
+.bs-tooltip.left{margin-left:-2px;}
+.bs-tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
+.bs-tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
+.bs-tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
+.bs-tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
+.bs-tooltip .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;}
+.bs-tooltip .tooltip-arrow{position:absolute;width:0;height:0;}
+@font-face{font-family:'FontAwesome';src:url('../images/fonts/fontawesome-webfont.eot');src:url('../images/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../images/fonts/fontawesome-webfont.woff') format('woff'),url('../images/fonts/fontawesome-webfont.ttf') format('truetype'),url('../images/fonts/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),url('../images/fonts/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');font-weight:normal;font-style:normal;}.ficon,[class^="ficon"]:before,[class*=" ficon"]:before{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;}
+.ficon.large:before{font-size:1.3333333333333333em;}
+.btn [class^="ficon"],.btn [class*=" ficon"]{line-height:.9em;}
+li [class^="ficon"],li [class*=" ficon"]{display:inline-block;width:1.25em;text-align:center;}
+li .ficon.large[class^="ficon"],li .ficon.large[class*=" ficon"]{width:1.875em;}
+li[class^="ficon"],li[class*=" ficon"]{margin-left:0;list-style-type:none;}li[class^="ficon"]:before,li[class*=" ficon"]:before{text-indent:-2em;text-align:center;}
+li[class^="ficon"].ficon.large:before,li[class*=" ficon"].ficon.large:before{text-indent:-1.3333333333333333em;}
+.ficon.glass:before{content:"\f000";}
+.ficon.music:before{content:"\f001";}
+.ficon.search:before{content:"\f002";}
+.ficon.envelope:before{content:"\f003";}
+.ficon.heart:before{content:"\f004";}
+.ficon.star:before{content:"\f005";}
+.ficon.star-empty:before{content:"\f006";}
+.ficon.user:before{content:"\f007";}
+.ficon.film:before{content:"\f008";}
+.ficon.th-large:before{content:"\f009";}
+.ficon.th:before{content:"\f00a";}
+.ficon.th-list:before{content:"\f00b";}
+.ficon.ok:before{content:"\f00c";}
+.ficon.remove:before{content:"\f00d";}
+.ficon.zoom-in:before{content:"\f00e";}
+.ficon.zoom-out:before{content:"\f010";}
+.ficon.off:before{content:"\f011";}
+.ficon.signal:before{content:"\f012";}
+.ficon.cog:before{content:"\f013";}
+.ficon.trash:before{content:"\f014";}
+.ficon.home:before{content:"\f015";}
+.ficon.file:before{content:"\f016";}
+.ficon.time:before{content:"\f017";}
+.ficon.road:before{content:"\f018";}
+.ficon.download-alt:before{content:"\f019";}
+.ficon.download:before{content:"\f01a";}
+.ficon.upload:before{content:"\f01b";}
+.ficon.inbox:before{content:"\f01c";}
+.ficon.play-circle:before{content:"\f01d";}
+.ficon.repeat:before{content:"\f01e";}
+.ficon.refresh:before{content:"\f021";}
+.ficon.list-alt:before{content:"\f022";}
+.ficon.lock:before{content:"\f023";}
+.ficon.flag:before{content:"\f024";}
+.ficon.headphones:before{content:"\f025";}
+.ficon.volume-off:before{content:"\f026";}
+.ficon.volume-down:before{content:"\f027";}
+.ficon.volume-up:before{content:"\f028";}
+.ficon.qrcode:before{content:"\f029";}
+.ficon.barcode:before{content:"\f02a";}
+.ficon.tag:before{content:"\f02b";}
+.ficon.tags:before{content:"\f02c";}
+.ficon.book:before{content:"\f02d";}
+.ficon.bookmark:before{content:"\f02e";}
+.ficon.print:before{content:"\f02f";}
+.ficon.camera:before{content:"\f030";}
+.ficon.font:before{content:"\f031";}
+.ficon.bold:before{content:"\f032";}
+.ficon.italic:before{content:"\f033";}
+.ficon.text-height:before{content:"\f034";}
+.ficon.text-width:before{content:"\f035";}
+.ficon.align-left:before{content:"\f036";}
+.ficon.align-center:before{content:"\f037";}
+.ficon.align-right:before{content:"\f038";}
+.ficon.align-justify:before{content:"\f039";}
+.ficon.list:before{content:"\f03a";}
+.ficon.indent-left:before{content:"\f03b";}
+.ficon.indent-right:before{content:"\f03c";}
+.ficon.facetime-video:before{content:"\f03d";}
+.ficon.picture:before{content:"\f03e";}
+.ficon.pencil:before{content:"\f040";}
+.ficon.map-marker:before{content:"\f041";}
+.ficon.adjust:before{content:"\f042";}
+.ficon.tint:before{content:"\f043";}
+.ficon.edit:before{content:"\f044";}
+.ficon.share:before{content:"\f045";}
+.ficon.check:before{content:"\f046";}
+.ficon.move:before{content:"\f047";}
+.ficon.step-backward:before{content:"\f048";}
+.ficon.fast-backward:before{content:"\f049";}
+.ficon.backward:before{content:"\f04a";}
+.ficon.play:before{content:"\f04b";}
+.ficon.pause:before{content:"\f04c";}
+.ficon.stop:before{content:"\f04d";}
+.ficon.forward:before{content:"\f04e";}
+.ficon.fast-forward:before{content:"\f050";}
+.ficon.step-forward:before{content:"\f051";}
+.ficon.eject:before{content:"\f052";}
+.ficon.chevron-left:before{content:"\f053";}
+.ficon.chevron-right:before{content:"\f054";}
+.ficon.plus-sign:before{content:"\f055";}
+.ficon.minus-sign:before{content:"\f056";}
+.ficon.remove-sign:before{content:"\f057";}
+.ficon.ok-sign:before{content:"\f058";}
+.ficon.question-sign:before{content:"\f059";}
+.ficon.info-sign:before{content:"\f05a";}
+.ficon.screenshot:before{content:"\f05b";}
+.ficon.remove-circle:before{content:"\f05c";}
+.ficon.ok-circle:before{content:"\f05d";}
+.ficon.ban-circle:before{content:"\f05e";}
+.ficon.arrow-left:before{content:"\f060";}
+.ficon.arrow-right:before{content:"\f061";}
+.ficon.arrow-up:before{content:"\f062";}
+.ficon.arrow-down:before{content:"\f063";}
+.ficon.share-alt:before{content:"\f064";}
+.ficon.resize-full:before{content:"\f065";}
+.ficon.resize-small:before{content:"\f066";}
+.ficon.plus:before{content:"\f067";}
+.ficon.minus:before{content:"\f068";}
+.ficon.asterisk:before{content:"\f069";}
+.ficon.exclamation-sign:before{content:"\f06a";}
+.ficon.gift:before{content:"\f06b";}
+.ficon.leaf:before{content:"\f06c";}
+.ficon.fire:before{content:"\f06d";}
+.ficon.eye-open:before{content:"\f06e";}
+.ficon.eye-close:before{content:"\f070";}
+.ficon.warning-sign:before{content:"\f071";}
+.ficon.plane:before{content:"\f072";}
+.ficon.calendar:before{content:"\f073";}
+.ficon.random:before{content:"\f074";}
+.ficon.comment:before{content:"\f075";}
+.ficon.magnet:before{content:"\f076";}
+.ficon.chevron-up:before{content:"\f077";}
+.ficon.chevron-down:before{content:"\f078";}
+.ficon.retweet:before{content:"\f079";}
+.ficon.shopping-cart:before{content:"\f07a";}
+.ficon.folder-close:before{content:"\f07b";}
+.ficon.folder-open:before{content:"\f07c";}
+.ficon.resize-vertical:before{content:"\f07d";}
+.ficon.resize-horizontal:before{content:"\f07e";}
+.ficon.bar-chart:before{content:"\f080";}
+.ficon.twitter-sign:before{content:"\f081";}
+.ficon.facebook-sign:before{content:"\f082";}
+.ficon.camera-retro:before{content:"\f083";}
+.ficon.key:before{content:"\f084";}
+.ficon.cogs:before{content:"\f085";}
+.ficon.comments:before{content:"\f086";}
+.ficon.thumbs-up:before{content:"\f087";}
+.ficon.thumbs-down:before{content:"\f088";}
+.ficon.star-half:before{content:"\f089";}
+.ficon.heart-empty:before{content:"\f08a";}
+.ficon.signout:before{content:"\f08b";}
+.ficon.linkedin-sign:before{content:"\f08c";}
+.ficon.pushpin:before{content:"\f08d";}
+.ficon.external-link:before{content:"\f08e";}
+.ficon.signin:before{content:"\f090";}
+.ficon.trophy:before{content:"\f091";}
+.ficon.github-sign:before{content:"\f092";}
+.ficon.upload-alt:before{content:"\f093";}
+.ficon.lemon:before{content:"\f094";}
+.unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-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;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;width:100%;*width:90%;}
+.clear{*zoom:1;*zoom:1;}.clear:before,.clear:after{display:table;content:"";}
+.clear:after{clear:both;}
+.clear:before,.clear:after{display:table;content:"";}
+.clear:after{clear:both;}
+body{background:#ffffff;color:#303030;background-image:url(base_bg.png);background-repeat:repeat-x;background-position:top;margin:10px;}
+img{border:0;}
+a,a:link,a:visited,a:active{text-decoration:underline;color:#303030;}
+.nav-tabs a{text-decoration:none;}
+h1,h2,h3,h4{color:#023858;margin:0.5em 0;}
+h1{font-size:24px;}
+h2{font-size:18px;line-height:24px;}h2 small{font-size:14px;}
+h3{font-size:14px;line-height:16px;}h3 small{font-size:12px;}
+h1:first-child,h2:first-child,h3:first-child,h4:first-child{margin-top:0px;}
+hr{border:none;height:0px;border-bottom:dotted #303030 1px;}
+table{border-collapse:collapse;}
+th{text-align:left;}
+#background{position:absolute;background:#eeeeee;z-index:-1;top:0;left:0;margin:0;padding:0;width:100%;height:100%;}
+#messagebox{position:absolute;top:33px;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:33px;bottom:0px;overflow:hidden;background:#fff;}
+#left{left:0px;width:250px;z-index:200;border-right:solid #999999 1px;}
+#left-border{left:250px;}
+#center{left:250px;right:250px;overflow:hidden;z-index:1;}
+#right-border{right:250px;}
+#right{width:250px;right:0px;z-index:200;border-left:solid #999999 1px;}
+.subnavbar{background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-bottom:solid #999999 1px;border-top:solid #999999 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;-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-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-bottom:solid #999999 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-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;-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 #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);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;-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 #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);color:#555;z-index:10000;position:fixed;left:0;top:inherit;bottom:0;padding:0 5px;text-align:center;width:20px;background:none;border-right:solid #999999 1px;border-top:solid #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;font-size:1.3333333333333333em;}.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 #999999 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%;margin-top:1px;}
+#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:0.5em;padding-left:0.5em;}.panel-header-button:hover{color:maroon;-webkit-transition:color 0.25s linear;-moz-transition:color 0.25s linear;-ms-transition:color 0.25s linear;-o-transition:color 0.25s linear;transition:color 0.25s linear;-webkit-transition:color 0.25s linear;-moz-transition:color 0.25s linear;-ms-transition:color 0.25s linear;-o-transition:color 0.25s linear;transition:color 0.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;}
+#overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:20000;}
+#overlay.is_modal #overlay-background,.overlay-background{background:rgba(0, 0, 0, 0.5);}
+.panel-error-message,.panel-warning-message,.panel-done-message,.panel-info-message{height:24px;line-height:24px;color:#303030;padding:0px;padding-left:26px;background-color:#ffcccc;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:#ffffcc;}
+.panel-done-message{background-image:url(ok_small.png);background-color:#ccffcc;}
+.panel-info-message{background-image:url(info_small.png);background-color:#d9edf7;}
+#masthead{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;*position:relative;*z-index:2;overflow:visible;margin-bottom:16px;color:#999999;position:absolute;top:0;left:0;width:100%;min-width:900px;height:32px;border-bottom:solid #444444 1px;z-index:15000;padding:0;}#masthead .brand:hover{text-decoration:none;}
+#masthead .brand{float:left;display:block;padding:4px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999999;}
+#masthead .navbar-text{margin-bottom:0;line-height:32px;}
+#masthead .navbar-link{color:#999999;}#masthead .navbar-link:hover{color:#ffffff;}
+#masthead .btn,#masthead .btn-group{margin-top:1px;margin-top:1px;}
+#masthead .btn-group .btn{margin:0;}
+#masthead .nav{z-index:10000;background-color:#2c3143;}
+#masthead .nav>li>a{padding:6px 10px 8px;cursor:pointer;}#masthead .nav>li>a:hover{color:gold;}
+#masthead .dropdown-menu a,#masthead .dropdown-menu a:hover{text-decoration:none;}
+#masthead .title{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 .title img{display:inline;width:26px;vertical-align:top;}
+#masthead .title a{color:white;text-decoration:none;}
+#masthead .masthead-inner{min-height:32px;padding-left:20px;padding-right:20px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;height:32px;}
+#masthead a:hover{text-decoration:underline;}
+.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:#c1c9e5;}
+.quota-meter-bar{position:absolute;top:0;left:0;height:16px;background-color:#969db3;}
+.quota-meter-bar-warn{background-color:#ffb400;}
+.quota-meter-bar-error{background-color:#ff4343;}
+.quota-meter-text{position:absolute;top:50%;left:0;width:100px;height:16px;margin-top:-6px;text-align:center;z-index:9001;color:#000000;white-space:nowrap;}
+div.metadataForm{border:solid #aaaaaa 1px;}
+div.metadataFormTitle{font-weight:bold;padding:5px;padding-left:10px;padding-right:10px;background:#cccccc;background-repeat:repeat-x;background-position:top;border-bottom:solid #aaaaaa 1px;}
+div.metadataFormBody{background:#FFFFFF;background-image:url(form_body_bg.png);background-repeat:repeat-x;background-position:top;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:0.5em;padding-bottom:0.25em;}
+div.toolFormBody{background:#ffffff;background-image:url(form_body_bg.png);background-repeat:repeat-x;background-position:top;padding:5px 0;}
+div.toolFormBody div.toolFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #d8b365 1px;margin-bottom:5px;}
+div.toolFormDisabled div.toolFormTitle{background:#eeeeee;border-color:#999999;}
+div.toolFormDisabled{border-color:#999999;}
+div.toolHelp{margin-top:15px;padding:5px;}
+div.toolHelpBody{width:100%;}
+.toolForm.toolFormInCanvas{border:solid #d8b365 1px;}.toolForm.toolFormInCanvas .toolFormTitle{font-size:12px;line-height:16px;}
+div.form-title,div.toolFormTitle{font-size:15px;line-height:24px;padding:5px 10px;background:#ebd9b2;border-bottom:solid #d8b365 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 #d8b365 5px;margin-left:10px;margin-bottom:10px;}
+div.form-row-error{background:#ffcccc;}
+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{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:16px;}
+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:16px;border:1px solid #999999;padding:3px;}
+.search-query{display:inline-block;padding:4px;font-size:12px;line-height:16px;color:#555555;border:1px solid #999999;padding-left:14px !important;padding-right:14px !important;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;-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);-moz-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);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-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:5px;top:9px;}
+#search-clear-btn{position:absolute;right:4px;top:8px;}
+.errormessagelarge,.warningmessagelarge,.donemessagelarge,.infomessagelarge{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;min-height:36px;padding-left:52px;background-image:url(error_large.png);background-repeat:no-repeat;background-position:10px 10px;}
+.errormessagelarge{background-color:#ffcccc;border-color:#ff3355;color:#660000;padding-left:52px;}
+.warningmessagelarge{background-image:url(warn_large.png);border-color:#aaaa66;background-color:#ffffcc;}
+.donemessagelarge{background-color:#ccffcc;border-color:#1a9900;color:#006600;padding-left:52px;background-image:url(ok_large.png);}
+.infomessagelarge{background-color:#d9edf7;border-color:#1b7183;color:#134158;background-image:url(info_large.png);border-color:#6666aa;background-color:#d9edf7;}
+.screencastBox{padding-left:10px;border-color:#AAAA66;background-color:#FFFFCC;background-image:none;}
+.errormessage,.warningmessage,.donemessage,.infomessage,.errormessagesmall,.warningmessagesmall,.donemessagesmall,.infomessagesmall{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;padding:5px;padding-left:25px;min-height:15px;background-image:url(error_small.png);background-repeat:no-repeat;background-position:5px 5px;}
+.errormessage{background-color:#ffcccc;border-color:#ff3355;color:#660000;}
+.warningmessage,.warningmessagesmall{background-image:url(warn_small.png);}
+.donemessage,.donemessagesmall{background-color:#ccffcc;border-color:#1a9900;color:#006600;background-image:url(ok_small.png);}
+.infomessage,.infomessagesmall{background-color:#d9edf7;border-color:#1b7183;color:#134158;background-image:url(info_small.png);}
+.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 0px 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 #d8b365 1px;border-bottom:solid #d8b365 1px;}
+table.colored td,table.colored th{text-align:left;padding:5px;line-height:16px;}
+table.colored tr.header{background:#ebd9b2;background-image:url(form_title_bg.png);background-repeat:repeat-x;background-position:top;border-bottom:solid #d8b365 1px;font-weight:bold;}
+table.colored tr{background:#ffffff;}
+table.colored tr.odd_row{background:#dadfef;}
+div.debug{margin:10px;padding:5px;background:#FFFF99;border:solid #FFFF33 1px;color:black;}
+.grid-header{padding-bottom:1em;}
+.grid-header h2{margin:0;margin-bottom:0.5em;}
+.grid-header .title{font-weight:bold;}
+.grid{padding-top:1em;border-collapse:collapse;width:100%;}
+.grid tbody td{line-height:16px;border-top:solid #DDDDDD 1px;border-bottom:solid #DDDDDD 1px;padding:5px;}
+.grid tbody td:empty{padding:0;}
+.grid thead tr{height:2em;}
+.grid thead th{line-height:16px;background:#ebd9b2;background-repeat:repeat-x;background-position:top;border-top:solid #d8b365 1px;border-bottom:solid #d8b365 1px;padding:5px;text-align:left;white-space:nowrap;}
+.grid tfoot td{background-color:#F8F8F8;border-top:solid #DDDDDD 1px;border-bottom:solid #DDDDDD 1px;padding:5px;}
+.grid .current{background-color:#EEEEFF;}
+.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 #AAAAAA;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:0px 7px 0px 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:24px;height:24px;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;}
+.gray-background{background-color:#DDDDDD;}
+.loading-elt-overlay{background-color:white;opacity:0.5;width:100%;height:100%;z-index:14000;position:fixed;display:none;}
+div.odd_row{background:#dadfef;}
+#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:0.5em;}
+.state-color-new{border-color:#a86030;background:#ffb030;}
+.state-color-upload{border-color:#6666aa;background:#ccccff;}
+.state-color-waiting{border-color:#a86030;background:#e8c060;}
+.state-color-queued{border-color:#888888;background:#eeeeee;}
+.state-color-running{border-color:#aaaa66;background:#ffffcc;}
+.state-color-ok{border-color:#66aa66;background:#ccffcc;}
+.state-color-error{border-color:#aa6666;background:#ffcccc;}
+.state-color-deleted{border-color:#330066;background:#3399ff;}
+.state-fg-new{color:#FFB030;}
+.state-fg-upload{color:#D090D0;}
+.state-fg-waiting{color:#E8C060;}
+.state-fg-queued{color:#888888;}
+.state-fg-running{color:#AAAA66;}
+.state-fg-ok{color:#66AA66;}
+.state-fg-error{color:#AA6666;}
+.state-fg-deleted{color:#3399FF;}
+.action-button{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);}.action-button:hover,.action-button:active,.action-button.active,.action-button.disabled,.action-button[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.action-button:active,.action-button.active{background-color:#cccccc \9;}
+.action-button:hover,.action-button:active,.action-button.active,.action-button.disabled,.action-button[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.action-button:active,.action-button.active{background-color:#cccccc \9;}
+.action-button:first-child{*margin-left:0;}
+.action-button:first-child{*margin-left:0;}
+.action-button [class^="ficon"],.action-button [class*=" ficon"]{line-height:.9em;}
+a.action-button{text-decoration:none;}
+.action-button>img{vertical-align:middle;}
+.action-button:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);color:inherit;}
+.menubutton{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.menubutton:hover,.menubutton:active,.menubutton.active,.menubutton.disabled,.menubutton[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.menubutton:active,.menubutton.active{background-color:#cccccc \9;}
+.menubutton:hover,.menubutton:active,.menubutton.active,.menubutton.disabled,.menubutton[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
+.menubutton:active,.menubutton.active{background-color:#cccccc \9;}
+.menubutton:first-child{*margin-left:0;}
+.menubutton:first-child{*margin-left:0;}
+.menubutton [class^="ficon"],.menubutton [class*=" ficon"]{line-height:.9em;}
+.menubutton:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);color:inherit;}
+.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;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:32px;line-height:16px;overflow:hidden;text-overflow:ellipsis;}
+.menubutton.popup .label{border-right:solid #999999 1px;padding-right:6px;}
+.menubutton.popup,.menubutton.popup.split{padding-right:18px;}.menubutton.popup:after,.menubutton.popup.split:after{margin-top:6px;position:absolute;top:2px;right:6px;display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);}
+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:16px;color:#999999;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:0px 0px;padding:0;}
+.tipsy{padding:5px;font-size:10px;filter:alpha(opacity=80);background-repeat:no-repeat;background-image:url(../images/tipsy.gif);}
+.tipsy-inner{padding:5px 8px 4px 8px;background-color:black;color:white;max-width:200px;text-align:center;}
+.tipsy-north{background-position:top center;}
+.tipsy-south{background-position:bottom center;}
+.tipsy-east{background-position:right center;}
+.tipsy-west{background-position:left center;}
+.editable-text{cursor:pointer;}
+.editable-text:hover{cursor:text;border:dotted #999999 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:auto;}
+.workflow-invocation-complete{border:solid 1px #6A6;border-left-width:5px;margin:10px 0;padding-left:5px;}
+body.historyPage{background:#dfe5f9;color:#303030;margin:5px;border:0;padding:0;}
+div.historyLinks{margin:5px 5px;}
+div.historyItem{margin:0px -5px;padding:8px 10px;border-top:solid #999999 1px;border-right:none;word-wrap:break-word;background:#eeeeee;}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 #999999 1px;}
+div.historyItem div.historyItem{margin-right:-11px;}
+div.historyItem-ok,div.historyItem-failed_metadata{background:#ccffcc;}div.historyItem-ok .state-icon,div.historyItem-failed_metadata .state-icon{display:none;}
+div.historyItem-error{background:#ffcccc;}
+div.historyItem-empty{background:#ffcccc;}
+div.historyItem-running{background:#ffffcc;}div.historyItem-running .state-icon{background-image:url(data_running.gif);}
+div.historyItem-setting_metadata{background:#ffffcc;}div.historyItem-setting_metadata .state-icon{background-image:url(data_running.gif);}
+div.historyItem-upload{background:#ccccff;}div.historyItem-upload .state-icon{background-image:url(data_upload.gif);}
+div.historyItem-queued{background:#eeeeee;}
+div.historyItem-noPermission{filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;}
+div.historyItemTitleBar.spinner .state-icon{background:url(data_running.gif) 0 1px no-repeat !important;}
+div.historyItemButtons{float:right;}
+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:#023858;}
+pre.peek table,pre.peek th,pre.peek tr,pre.peek td{font-family:Menlo,Monaco,"Courier New",monospace;font-size:10px;}
+.toolMenuContainer{color:#303030;background:#dfe5f9;margin-top:5px;}
+div.toolSectionPad{margin:0;padding:0;height:5px;font-size:0px;}
+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 td.stringalign{text-align:left;}
+.toolMenuAndView .toolForm{float:left;background-color:white;margin:10px;}
+.icon-button.display{background:url(history-buttons.png) no-repeat 0px 0px;}
+.icon-button.display:hover{background:url(history-buttons.png) no-repeat 0px -26px;}
+.icon-button.display_disabled{background:url(history-buttons.png) no-repeat 0px -52px;}
+.icon-button.delete{background:url(history-buttons.png) no-repeat 0px -78px;}
+.icon-button.delete:hover{background:url(history-buttons.png) no-repeat 0px -104px;}
+.icon-button.delete_disabled{background:url(history-buttons.png) no-repeat 0px -130px;}
+.icon-button.edit{background:url(history-buttons.png) no-repeat 0px -156px;}
+.icon-button.edit:hover{background:url(history-buttons.png) no-repeat 0px -182px;}
+.icon-button.edit_disabled{background:url(history-buttons.png) no-repeat 0px -208px;}
+.icon-button.tag{background:url(fugue.png) no-repeat 0px 0px;}
+.icon-button.tags{background:url(fugue.png) no-repeat 0px -26px;}
+.icon-button.tag--plus{background:url(fugue.png) no-repeat 0px -52px;}
+.icon-button.toggle-expand{background:url(fugue.png) no-repeat 0px -78px;}
+.icon-button.toggle{background:url(fugue.png) no-repeat 0px -104px;}
+.icon-button.toggle:hover{background:url(fugue.png) no-repeat 0px -130px;}
+.icon-button.arrow-circle{background:url(fugue.png) no-repeat 0px -156px;}
+.icon-button.chevron{background:url(fugue.png) no-repeat 0px -182px;}
+.icon-button.bug{background:url(fugue.png) no-repeat 0px -208px;}
+.icon-button.disk{background:url(fugue.png) no-repeat 0px -234px;}
+.icon-button.information{background:url(fugue.png) no-repeat 0px -260px;}
+.icon-button.annotate{background:url(fugue.png) no-repeat 0px -286px;}
+.icon-button.go-to-full-screen{background:url(fugue.png) no-repeat 0px -312px;}
+.icon-button.import{background:url(fugue.png) no-repeat 0px -338px;}
+.icon-button.plus-button{background:url(fugue.png) no-repeat 0px -364px;}
+.icon-button.plus-button:hover{background:url(fugue.png) no-repeat 0px -390px;}
+.icon-button.gear{background:url(fugue.png) no-repeat 0px -416px;}
+.icon-button.chart_curve{background:url(fugue.png) no-repeat 0px -442px;}
+.icon-button.disk--arrow{background:url(fugue.png) no-repeat 0px -468px;}
+.icon-button.disk--arrow:hover{background:url(fugue.png) no-repeat 0px -494px;}
+.icon-button.cross-circle{background:url(fugue.png) no-repeat 0px -520px;}
+.icon-button.cross-circle:hover{background:url(fugue.png) no-repeat 0px -546px;}
+.icon-button.arrow-split{background:url(fugue.png) no-repeat 0px -572px;}
+.icon-button.arrow-split:hover{background:url(fugue.png) no-repeat 0px -598px;}
+.icon-button.chevron-expand:hover{background:url(fugue.png) no-repeat 0px -624px;}
+.icon-button.chevron-expand{background:url(fugue.png) no-repeat 0px -650px;}
+.text-and-autocomplete-select{background:url(fugue.png) no-repeat right -676px;}
+div.historyItem-error .state-icon{background:url(history-states.png) no-repeat 0px 0px;}
+div.historyItem-empty .state-icon{background:url(history-states.png) no-repeat 0px -25px;}
+div.historyItem-queued .state-icon{background:url(history-states.png) no-repeat 0px -50px;}
+.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;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
+.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;}
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

09 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/110a69b0d387/
changeset: 110a69b0d387
user: rmarenco
date: 2012-09-09 23:13:00
summary: Added links to BioStar in the Help Menu and in tool forms + When asking to create a new post from galaxy tool form, tag is automatically fulfilled with the name of the tool + Added the url as global variable in universe
affected #: 8 files
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c static/june_2007_style/base.less
--- a/static/june_2007_style/base.less
+++ b/static/june_2007_style/base.less
@@ -1783,3 +1783,17 @@
.opacity(80);
}
}
+
+.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;
+}
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c static/june_2007_style/blue/base.css
--- a/static/june_2007_style/blue/base.css
+++ /dev/null
@@ -1,912 +0,0 @@
-article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
-audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
-audio:not([controls]){display:none;}
-html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
-a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-a:hover,a:active{outline:0;}
-sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
-sup{top:-0.5em;}
-sub{bottom:-0.25em;}
-img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
-#map_canvas img{max-width:none;}
-button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
-button,input{*overflow:visible;line-height:normal;}
-button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
-button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
-input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
-input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
-textarea{overflow:auto;vertical-align:top;}
-.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
-.clearfix:after{clear:both;}
-.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
-.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
-article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
-audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
-audio:not([controls]){display:none;}
-html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
-a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-a:hover,a:active{outline:0;}
-sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
-sup{top:-0.5em;}
-sub{bottom:-0.25em;}
-img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
-#map_canvas img{max-width:none;}
-button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
-button,input{*overflow:visible;line-height:normal;}
-button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
-button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
-input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
-input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
-textarea{overflow:auto;vertical-align:top;}
-.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
-.clearfix:after{clear:both;}
-.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
-.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
-body{margin:0;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:12px;line-height:16px;color:#111111;background-color:#ffffff;}
-a{color:#303030;text-decoration:none;}
-a:hover{color:#0a0a0a;text-decoration:underline;}
-p{margin:0 0 8px;}p small{font-size:10px;color:#999999;}
-.lead{margin-bottom:16px;font-size:20px;font-weight:200;line-height:24px;}
-h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
-h1{font-size:30px;line-height:32px;}h1 small{font-size:18px;}
-h2{font-size:24px;line-height:32px;}h2 small{font-size:18px;}
-h3{font-size:18px;line-height:24px;}h3 small{font-size:14px;}
-h4,h5,h6{line-height:16px;}
-h4{font-size:14px;}h4 small{font-size:12px;}
-h5{font-size:12px;}
-h6{font-size:11px;color:#999999;text-transform:uppercase;}
-.page-header{padding-bottom:15px;margin:16px 0;border-bottom:1px solid #eeeeee;}
-.page-header h1{line-height:1;}
-ul,ol{padding:0;margin:0 0 8px 25px;}
-ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
-ul{list-style:disc;}
-ol{list-style:decimal;}
-li{line-height:16px;}
-ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
-dl{margin-bottom:16px;}
-dt,dd{line-height:16px;}
-dt{font-weight:bold;line-height:15px;}
-dd{margin-left:8px;}
-.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
-.dl-horizontal dd{margin-left:130px;}
-hr{margin:16px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
-strong{font-weight:bold;}
-em{font-style:italic;}
-.muted{color:#999999;}
-abbr[title]{cursor:help;border-bottom:1px dotted #999999;}
-abbr.initialism{font-size:90%;text-transform:uppercase;}
-blockquote{padding:0 0 0 15px;margin:0 0 16px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:20px;font-size:16px;font-weight:300;line-height:20px;}
-blockquote small{display:block;line-height:16px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
-blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
-q:before,q:after,blockquote:before,blockquote:after{content:"";}
-address{display:block;margin-bottom:16px;font-style:normal;line-height:16px;}
-small{font-size:100%;}
-cite{font-style:normal;}
-table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;}
-.table{width:100%;margin-bottom:16px;}.table th,.table td{padding:8px;line-height:16px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
-.table th{font-weight:bold;}
-.table thead th{vertical-align:bottom;}
-.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;}
-.table tbody+tbody{border-top:2px solid #dddddd;}
-.table-condensed th,.table-condensed td{padding:4px 5px;}
-.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
-.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
-.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px;}
-.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px;}
-.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;}
-.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;}
-.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
-.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;}
-table .span1{float:none;width:44px;margin-left:0;float:none;width:44px;margin-left:0;}
-table .span2{float:none;width:124px;margin-left:0;float:none;width:124px;margin-left:0;}
-table .span3{float:none;width:204px;margin-left:0;float:none;width:204px;margin-left:0;}
-table .span4{float:none;width:284px;margin-left:0;float:none;width:284px;margin-left:0;}
-table .span5{float:none;width:364px;margin-left:0;float:none;width:364px;margin-left:0;}
-table .span6{float:none;width:444px;margin-left:0;float:none;width:444px;margin-left:0;}
-table .span7{float:none;width:524px;margin-left:0;float:none;width:524px;margin-left:0;}
-table .span8{float:none;width:604px;margin-left:0;float:none;width:604px;margin-left:0;}
-table .span9{float:none;width:684px;margin-left:0;float:none;width:684px;margin-left:0;}
-table .span10{float:none;width:764px;margin-left:0;float:none;width:764px;margin-left:0;}
-table .span11{float:none;width:844px;margin-left:0;float:none;width:844px;margin-left:0;}
-table .span12{float:none;width:924px;margin-left:0;float:none;width:924px;margin-left:0;}
-table .span13{float:none;width:1004px;margin-left:0;float:none;width:1004px;margin-left:0;}
-table .span14{float:none;width:1084px;margin-left:0;float:none;width:1084px;margin-left:0;}
-table .span15{float:none;width:1164px;margin-left:0;float:none;width:1164px;margin-left:0;}
-table .span16{float:none;width:1244px;margin-left:0;float:none;width:1244px;margin-left:0;}
-table .span17{float:none;width:1324px;margin-left:0;float:none;width:1324px;margin-left:0;}
-table .span18{float:none;width:1404px;margin-left:0;float:none;width:1404px;margin-left:0;}
-table .span19{float:none;width:1484px;margin-left:0;float:none;width:1484px;margin-left:0;}
-table .span20{float:none;width:1564px;margin-left:0;float:none;width:1564px;margin-left:0;}
-table .span21{float:none;width:1644px;margin-left:0;float:none;width:1644px;margin-left:0;}
-table .span22{float:none;width:1724px;margin-left:0;float:none;width:1724px;margin-left:0;}
-table .span23{float:none;width:1804px;margin-left:0;float:none;width:1804px;margin-left:0;}
-table .span24{float:none;width:1884px;margin-left:0;float:none;width:1884px;margin-left:0;}
-.dropup,.dropdown{position:relative;}
-.dropdown-toggle{*margin-bottom:-3px;}
-.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
-.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);}
-.dropdown .caret{margin-top:8px;margin-left:2px;}
-.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
-.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;}
-.dropdown-menu .divider{*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
-.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:16px;color:#333333;white-space:nowrap;}
-.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#303030;}
-.open{*z-index:1000;}.open >.dropdown-menu{display:block;}
-.pull-right>.dropdown-menu{right:0;left:auto;}
-.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";}
-.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
-.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
-.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;}
-.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;}
-.close{float:right;font-size:20px;font-weight:bold;line-height:16px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);opacity:0.4;filter:alpha(opacity=40);}
-button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}
-.btn{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.btn:active,.btn.active{background-color:#cccccc \9;}
-.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.btn:active,.btn.active{background-color:#cccccc \9;}
-.btn:first-child{*margin-left:0;}
-.btn:first-child{*margin-left:0;}
-.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
-.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
-.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:0.65;filter:alpha(opacity=65);opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
-.btn-large{padding:9px 14px;font-size:14px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
-.btn-large [class^="icon-"]{margin-top:1px;}
-.btn-small{padding:5px 9px;font-size:10px;line-height:14px;}
-.btn-small [class^="icon-"]{margin-top:-1px;}
-.btn-mini{padding:2px 6px;font-size:10px;line-height:12px;}
-.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
-.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);}
-.btn{border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
-.btn-primary{background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0031cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);background-color:#0050cd;background-image:-moz-linear-gradient(top, #0064cd, #0031cd);background-image:-ms-linear-gradient(top, #0064cd, #0031cd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0064cd), to(#0031cd));background-image:-webkit-linear-gradient(top, #0064cd, #0031cd);background-image:-o-linear-gradient(top, #0064cd, #0031cd);background-image:linear-gradient(top, #0064cd, #0031cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0064cd', endColorstr='#0031cd', GradientType=0);border-color:#0031cd #0031cd #001f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0031cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0031cd;*background-color:#002bb4;}
-.btn-primary:active,.btn-primary.active{background-color:#00259a \9;}
-.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0031cd;*background-color:#002bb4;}
-.btn-primary:active,.btn-primary.active{background-color:#00259a \9;}
-.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505;}
-.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
-.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505;}
-.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
-.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;}
-.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
-.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;}
-.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
-.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249;}
-.btn-success:active,.btn-success.active{background-color:#408140 \9;}
-.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249;}
-.btn-success:active,.btn-success.active{background-color:#408140 \9;}
-.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0;}
-.btn-info:active,.btn-info.active{background-color:#24748c \9;}
-.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0;}
-.btn-info:active,.btn-info.active{background-color:#24748c \9;}
-.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;*background-color:#151515;}
-.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
-.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;*background-color:#151515;}
-.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
-button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
-button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;}
-button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;}
-button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;}
-.btn-group{position:relative;*zoom:1;*zoom:1;*margin-left:.3em;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";}
-.btn-group:after{clear:both;}
-.btn-group:before,.btn-group:after{display:table;content:"";}
-.btn-group:after{clear:both;}
-.btn-group:first-child{*margin-left:0;}
-.btn-group:first-child{*margin-left:0;}
-.btn-group+.btn-group{margin-left:5px;}
-.btn-toolbar{margin-top:8px;margin-bottom:8px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;}
-.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
-.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
-.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
-.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
-.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;}
-.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
-.btn-group>.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:4px;*padding-bottom:4px;}
-.btn-group>.btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;}
-.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;}
-.btn-group>.btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;}
-.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
-.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;}
-.btn-group.open .btn-primary.dropdown-toggle{background-color:#0031cd;}
-.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;}
-.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;}
-.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;}
-.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;}
-.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;}
-.btn .caret{margin-top:7px;margin-left:0;}
-.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
-.btn-mini .caret{margin-top:5px;}
-.btn-small .caret{margin-top:6px;}
-.btn-large .caret{margin-top:6px;border-left-width:5px;border-right-width:5px;border-top-width:5px;}
-.dropup .btn-large .caret{border-bottom:5px solid #000000;border-top:0;}
-.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);opacity:0.75;filter:alpha(opacity=75);}
-.alert{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;}
-.alert-heading{color:inherit;}
-.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;}
-.alert-success{background-color:#ccffcc;border-color:#1a9900;color:#006600;}
-.alert-danger,.alert-error{background-color:#ffcccc;border-color:#ff3355;color:#660000;}
-.alert-info{background-color:#d9edf7;border-color:#1b7183;color:#134158;}
-.alert-block{padding-top:14px;padding-bottom:14px;}
-.alert-block>p,.alert-block>ul{margin-bottom:0;}
-.alert-block p+p{margin-top:5px;}
-.nav{margin-left:0;margin-bottom:16px;list-style:none;}
-.nav>li>a{display:block;}
-.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;}
-.nav>.pull-right{float:right;}
-.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:16px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;}
-.nav li+.nav-header{margin-top:9px;}
-.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;}
-.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
-.nav-list>li>a{padding:3px 15px;}
-.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#303030;}
-.nav-list [class^="icon-"]{margin-right:2px;}
-.nav-list .divider{*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;height:1px;margin:7px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
-.nav-tabs,.nav-pills{*zoom:1;*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
-.nav-tabs:after,.nav-pills:after{clear:both;}
-.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
-.nav-tabs:after,.nav-pills:after{clear:both;}
-.nav-tabs>li,.nav-pills>li{float:left;}
-.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
-.nav-tabs{border-bottom:1px solid #ddd;}
-.nav-tabs>li{margin-bottom:-1px;}
-.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:16px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #999999;}
-.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #999;border-bottom-color:transparent;cursor:default;}
-.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
-.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#303030;}
-.nav-stacked>li{float:none;}
-.nav-stacked>li>a{margin-right:0;}
-.nav-tabs.nav-stacked{border-bottom:0;}
-.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
-.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
-.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;}
-.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
-.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
-.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;}
-.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#303030;border-bottom-color:#303030;margin-top:6px;}
-.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#0a0a0a;border-bottom-color:#0a0a0a;}
-.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;}
-.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;}
-.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;}
-.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
-.tabs-stacked .open>a:hover{border-color:#999999;}
-.tabbable{*zoom:1;*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";}
-.tabbable:after{clear:both;}
-.tabbable:before,.tabbable:after{display:table;content:"";}
-.tabbable:after{clear:both;}
-.tab-content{overflow:auto;}
-.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;}
-.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
-.tab-content>.active,.pill-content>.active{display:block;}
-.tabs-below>.nav-tabs{border-top:1px solid #ddd;}
-.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;}
-.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;}
-.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;}
-.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;}
-.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
-.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
-.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
-.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
-.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
-.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
-.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
-.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
-.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:16px;}
-.navbar-inner{min-height:32px;padding-left:20px;padding-right:20px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);}
-.navbar .container{width:auto;}
-.nav-collapse.collapse{height:auto;}
-.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;}
-.navbar .brand{float:left;display:block;padding:4px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999999;}
-.navbar .navbar-text{margin-bottom:0;line-height:32px;}
-.navbar .navbar-link{color:#999999;}.navbar .navbar-link:hover{color:#ffffff;}
-.navbar .btn,.navbar .btn-group{margin-top:1px;margin-top:1px;}
-.navbar .btn-group .btn{margin:0;}
-.navbar-form{margin-bottom:0;*zoom:1;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";}
-.navbar-form:after{clear:both;}
-.navbar-form:before,.navbar-form:after{display:table;content:"";}
-.navbar-form:after{clear:both;}
-.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:1px;margin-top:1px;}
-.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;}
-.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
-.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;}
-.navbar-search{position:relative;float:left;margin-top:2px;margin-top:2px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:13px;font-weight:normal;line-height:1;font-size:13px;font-weight:normal;line-height:1;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;font-size:13px;font-weight:normal;line-height:1;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#5f6990;border:1px solid #222634;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;}
-.navbar-search .search-query:-ms-input-placeholder{color:#cccccc;}
-.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
-.navbar-search .search-query:-moz-placeholder{color:#cccccc;}
-.navbar-search .search-query:-ms-input-placeholder{color:#cccccc;}
-.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
-.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
-.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;}
-.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;width:940px;}
-.navbar-fixed-top{top:0;}
-.navbar-fixed-bottom{bottom:0;}
-.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
-.navbar .nav.pull-right{float:right;}
-.navbar .nav>li{display:block;float:left;}
-.navbar .nav>li>a{float:none;padding:5px 10px 7px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
-.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:1px 5px 2px;line-height:16px;}
-.navbar .btn-group{margin:0;padding:1px 5px 2px;}
-.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;}
-.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:rgba(0, 0, 0, 0.5);}
-.navbar .divider-vertical{height:32px;width:1px;margin:0 9px;overflow:hidden;background-color:#2c3143;border-right:1px solid #333333;}
-.navbar .nav.pull-right{margin-left:10px;margin-right:0;}
-.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2c3143;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);border-color:#2c3143 #2c3143 #0e0f15;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2c3143;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#2c3143;*background-color:#222634;}
-.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#181a24 \9;}
-.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#2c3143;*background-color:#222634;}
-.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#181a24 \9;}
-.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
-.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
-.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
-.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
-.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;}
-.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;}
-.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
-.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100);opacity:1;filter:alpha(opacity=100);}
-.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent;}
-.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#ffffff;}
-.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{left:auto;right:12px;}
-.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{left:auto;right:13px;}
-.breadcrumb{padding:7px 14px;margin:0 0 16px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}
-.breadcrumb .divider{padding:0 5px;color:#999999;}
-.breadcrumb .active a{color:#333333;}
-.pagination{height:32px;margin:16px 0;}
-.pagination ul{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
-.pagination li{display:inline;}
-.pagination a{float:left;padding:0 14px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:0;}
-.pagination a:hover,.pagination .active a{background-color:#f5f5f5;}
-.pagination .active a{color:#999999;cursor:default;}
-.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;}
-.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
-.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
-.pagination-centered{text-align:center;}
-.pagination-right{text-align:right;}
-.pager{margin-left:0;margin-bottom:16px;list-style:none;text-align:center;*zoom:1;*zoom:1;}.pager:before,.pager:after{display:table;content:"";}
-.pager:after{clear:both;}
-.pager:before,.pager:after{display:table;content:"";}
-.pager:after{clear:both;}
-.pager li{display:inline;}
-.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
-.pager a:hover{text-decoration:none;background-color:#f5f5f5;}
-.pager .next a{float:right;}
-.pager .previous a{float:left;}
-.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;}
-.modal-open .dropdown-menu{z-index:2050;}
-.modal-open .dropdown.open{*z-index:2050;}
-.modal-open .popover{z-index:2060;}
-.modal-open .tooltip{z-index:2070;}
-.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
-.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
-.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
-.modal.fade.in{top:50%;}
-.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
-.modal-body{overflow-y:auto;max-height:400px;padding:15px;}
-.modal-form{margin-bottom:0;}
-.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";}
-.modal-footer:after{clear:both;}
-.modal-footer:before,.modal-footer:after{display:table;content:"";}
-.modal-footer:after{clear:both;}
-.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;}
-.modal-footer .btn-group .btn+.btn{margin-left:-1px;}
-.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;}
-.popover.right{margin-left:5px;}
-.popover.bottom{margin-top:5px;}
-.popover.left{margin-left:-5px;}
-.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
-.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
-.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
-.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
-.popover .arrow{position:absolute;width:0;height:0;}
-.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
-.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;}
-.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;}
-@-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;}}@-ms-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:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
-.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
-.progress.active .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-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);}
-.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);}
-.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);}
-.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);}
-.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.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:-ms-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:-o-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);}
-.accordion{margin-bottom:16px;}
-.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.accordion-heading{border-bottom:0;}
-.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
-.accordion-toggle{cursor:pointer;}
-.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
-.carousel{position:relative;margin-bottom:16px;line-height:1;}
-.carousel-inner{overflow:hidden;width:100%;position:relative;}
-.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}
-.carousel .item>img{display:block;line-height:1;}
-.carousel .active,.carousel .next,.carousel .prev{display:block;}
-.carousel .active{left:0;}
-.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;}
-.carousel .next{left:100%;}
-.carousel .prev{left:-100%;}
-.carousel .next.left,.carousel .prev.right{left:0;}
-.carousel .active.left{left:-100%;}
-.carousel .active.right{left:100%;}
-.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
-.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);opacity:0.9;filter:alpha(opacity=90);}
-.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);}
-.carousel-caption h4,.carousel-caption p{color:#ffffff;}
-.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;}
-.hero-unit p{font-size:18px;font-weight:200;line-height:24px;color:inherit;}
-.pull-right{float:right;}
-.pull-left{float:left;}
-.hide{display:none;}
-.show{display:block;}
-.invisible{visibility:hidden;}
-.btn{padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);}
-.btn.active,.btn:active{color:inherit;}
-.dropdown-menu{max-width:auto;}
-input[type="checkbox"],input[type="radio"]{margin-left:0.5ex;margin-right:0.5ex;}
-.nav-tabs{border-bottom:1px solid #999999;}
-.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #999999;}
-.nav-tabs>.active>a,.nav-tabs>.active>a:hover{border:1px solid #999999;border-bottom-color:transparent;}
-.bs-tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);opacity:0;filter:alpha(opacity=0);}.bs-tooltip.in{opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
-.bs-tooltip.top{margin-top:-2px;}
-.bs-tooltip.right{margin-left:2px;}
-.bs-tooltip.bottom{margin-top:2px;}
-.bs-tooltip.left{margin-left:-2px;}
-.bs-tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
-.bs-tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
-.bs-tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
-.bs-tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
-.bs-tooltip .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;}
-.bs-tooltip .tooltip-arrow{position:absolute;width:0;height:0;}
-@font-face{font-family:'FontAwesome';src:url('../images/fonts/fontawesome-webfont.eot');src:url('../images/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../images/fonts/fontawesome-webfont.woff') format('woff'),url('../images/fonts/fontawesome-webfont.ttf') format('truetype'),url('../images/fonts/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),url('../images/fonts/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');font-weight:normal;font-style:normal;}.ficon,[class^="ficon"]:before,[class*=" ficon"]:before{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;}
-.ficon.large:before{font-size:1.3333333333333333em;}
-.btn [class^="ficon"],.btn [class*=" ficon"]{line-height:.9em;}
-li [class^="ficon"],li [class*=" ficon"]{display:inline-block;width:1.25em;text-align:center;}
-li .ficon.large[class^="ficon"],li .ficon.large[class*=" ficon"]{width:1.875em;}
-li[class^="ficon"],li[class*=" ficon"]{margin-left:0;list-style-type:none;}li[class^="ficon"]:before,li[class*=" ficon"]:before{text-indent:-2em;text-align:center;}
-li[class^="ficon"].ficon.large:before,li[class*=" ficon"].ficon.large:before{text-indent:-1.3333333333333333em;}
-.ficon.glass:before{content:"\f000";}
-.ficon.music:before{content:"\f001";}
-.ficon.search:before{content:"\f002";}
-.ficon.envelope:before{content:"\f003";}
-.ficon.heart:before{content:"\f004";}
-.ficon.star:before{content:"\f005";}
-.ficon.star-empty:before{content:"\f006";}
-.ficon.user:before{content:"\f007";}
-.ficon.film:before{content:"\f008";}
-.ficon.th-large:before{content:"\f009";}
-.ficon.th:before{content:"\f00a";}
-.ficon.th-list:before{content:"\f00b";}
-.ficon.ok:before{content:"\f00c";}
-.ficon.remove:before{content:"\f00d";}
-.ficon.zoom-in:before{content:"\f00e";}
-.ficon.zoom-out:before{content:"\f010";}
-.ficon.off:before{content:"\f011";}
-.ficon.signal:before{content:"\f012";}
-.ficon.cog:before{content:"\f013";}
-.ficon.trash:before{content:"\f014";}
-.ficon.home:before{content:"\f015";}
-.ficon.file:before{content:"\f016";}
-.ficon.time:before{content:"\f017";}
-.ficon.road:before{content:"\f018";}
-.ficon.download-alt:before{content:"\f019";}
-.ficon.download:before{content:"\f01a";}
-.ficon.upload:before{content:"\f01b";}
-.ficon.inbox:before{content:"\f01c";}
-.ficon.play-circle:before{content:"\f01d";}
-.ficon.repeat:before{content:"\f01e";}
-.ficon.refresh:before{content:"\f021";}
-.ficon.list-alt:before{content:"\f022";}
-.ficon.lock:before{content:"\f023";}
-.ficon.flag:before{content:"\f024";}
-.ficon.headphones:before{content:"\f025";}
-.ficon.volume-off:before{content:"\f026";}
-.ficon.volume-down:before{content:"\f027";}
-.ficon.volume-up:before{content:"\f028";}
-.ficon.qrcode:before{content:"\f029";}
-.ficon.barcode:before{content:"\f02a";}
-.ficon.tag:before{content:"\f02b";}
-.ficon.tags:before{content:"\f02c";}
-.ficon.book:before{content:"\f02d";}
-.ficon.bookmark:before{content:"\f02e";}
-.ficon.print:before{content:"\f02f";}
-.ficon.camera:before{content:"\f030";}
-.ficon.font:before{content:"\f031";}
-.ficon.bold:before{content:"\f032";}
-.ficon.italic:before{content:"\f033";}
-.ficon.text-height:before{content:"\f034";}
-.ficon.text-width:before{content:"\f035";}
-.ficon.align-left:before{content:"\f036";}
-.ficon.align-center:before{content:"\f037";}
-.ficon.align-right:before{content:"\f038";}
-.ficon.align-justify:before{content:"\f039";}
-.ficon.list:before{content:"\f03a";}
-.ficon.indent-left:before{content:"\f03b";}
-.ficon.indent-right:before{content:"\f03c";}
-.ficon.facetime-video:before{content:"\f03d";}
-.ficon.picture:before{content:"\f03e";}
-.ficon.pencil:before{content:"\f040";}
-.ficon.map-marker:before{content:"\f041";}
-.ficon.adjust:before{content:"\f042";}
-.ficon.tint:before{content:"\f043";}
-.ficon.edit:before{content:"\f044";}
-.ficon.share:before{content:"\f045";}
-.ficon.check:before{content:"\f046";}
-.ficon.move:before{content:"\f047";}
-.ficon.step-backward:before{content:"\f048";}
-.ficon.fast-backward:before{content:"\f049";}
-.ficon.backward:before{content:"\f04a";}
-.ficon.play:before{content:"\f04b";}
-.ficon.pause:before{content:"\f04c";}
-.ficon.stop:before{content:"\f04d";}
-.ficon.forward:before{content:"\f04e";}
-.ficon.fast-forward:before{content:"\f050";}
-.ficon.step-forward:before{content:"\f051";}
-.ficon.eject:before{content:"\f052";}
-.ficon.chevron-left:before{content:"\f053";}
-.ficon.chevron-right:before{content:"\f054";}
-.ficon.plus-sign:before{content:"\f055";}
-.ficon.minus-sign:before{content:"\f056";}
-.ficon.remove-sign:before{content:"\f057";}
-.ficon.ok-sign:before{content:"\f058";}
-.ficon.question-sign:before{content:"\f059";}
-.ficon.info-sign:before{content:"\f05a";}
-.ficon.screenshot:before{content:"\f05b";}
-.ficon.remove-circle:before{content:"\f05c";}
-.ficon.ok-circle:before{content:"\f05d";}
-.ficon.ban-circle:before{content:"\f05e";}
-.ficon.arrow-left:before{content:"\f060";}
-.ficon.arrow-right:before{content:"\f061";}
-.ficon.arrow-up:before{content:"\f062";}
-.ficon.arrow-down:before{content:"\f063";}
-.ficon.share-alt:before{content:"\f064";}
-.ficon.resize-full:before{content:"\f065";}
-.ficon.resize-small:before{content:"\f066";}
-.ficon.plus:before{content:"\f067";}
-.ficon.minus:before{content:"\f068";}
-.ficon.asterisk:before{content:"\f069";}
-.ficon.exclamation-sign:before{content:"\f06a";}
-.ficon.gift:before{content:"\f06b";}
-.ficon.leaf:before{content:"\f06c";}
-.ficon.fire:before{content:"\f06d";}
-.ficon.eye-open:before{content:"\f06e";}
-.ficon.eye-close:before{content:"\f070";}
-.ficon.warning-sign:before{content:"\f071";}
-.ficon.plane:before{content:"\f072";}
-.ficon.calendar:before{content:"\f073";}
-.ficon.random:before{content:"\f074";}
-.ficon.comment:before{content:"\f075";}
-.ficon.magnet:before{content:"\f076";}
-.ficon.chevron-up:before{content:"\f077";}
-.ficon.chevron-down:before{content:"\f078";}
-.ficon.retweet:before{content:"\f079";}
-.ficon.shopping-cart:before{content:"\f07a";}
-.ficon.folder-close:before{content:"\f07b";}
-.ficon.folder-open:before{content:"\f07c";}
-.ficon.resize-vertical:before{content:"\f07d";}
-.ficon.resize-horizontal:before{content:"\f07e";}
-.ficon.bar-chart:before{content:"\f080";}
-.ficon.twitter-sign:before{content:"\f081";}
-.ficon.facebook-sign:before{content:"\f082";}
-.ficon.camera-retro:before{content:"\f083";}
-.ficon.key:before{content:"\f084";}
-.ficon.cogs:before{content:"\f085";}
-.ficon.comments:before{content:"\f086";}
-.ficon.thumbs-up:before{content:"\f087";}
-.ficon.thumbs-down:before{content:"\f088";}
-.ficon.star-half:before{content:"\f089";}
-.ficon.heart-empty:before{content:"\f08a";}
-.ficon.signout:before{content:"\f08b";}
-.ficon.linkedin-sign:before{content:"\f08c";}
-.ficon.pushpin:before{content:"\f08d";}
-.ficon.external-link:before{content:"\f08e";}
-.ficon.signin:before{content:"\f090";}
-.ficon.trophy:before{content:"\f091";}
-.ficon.github-sign:before{content:"\f092";}
-.ficon.upload-alt:before{content:"\f093";}
-.ficon.lemon:before{content:"\f094";}
-.unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-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;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;width:100%;*width:90%;}
-.clear{*zoom:1;*zoom:1;}.clear:before,.clear:after{display:table;content:"";}
-.clear:after{clear:both;}
-.clear:before,.clear:after{display:table;content:"";}
-.clear:after{clear:both;}
-body{background:#ffffff;color:#303030;background-image:url(base_bg.png);background-repeat:repeat-x;background-position:top;margin:10px;}
-img{border:0;}
-a,a:link,a:visited,a:active{text-decoration:underline;color:#303030;}
-.nav-tabs a{text-decoration:none;}
-h1,h2,h3,h4{color:#023858;margin:0.5em 0;}
-h1{font-size:24px;}
-h2{font-size:18px;line-height:24px;}h2 small{font-size:14px;}
-h3{font-size:14px;line-height:16px;}h3 small{font-size:12px;}
-h1:first-child,h2:first-child,h3:first-child,h4:first-child{margin-top:0px;}
-hr{border:none;height:0px;border-bottom:dotted #303030 1px;}
-table{border-collapse:collapse;}
-th{text-align:left;}
-#background{position:absolute;background:#eeeeee;z-index:-1;top:0;left:0;margin:0;padding:0;width:100%;height:100%;}
-#messagebox{position:absolute;top:33px;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:33px;bottom:0px;overflow:hidden;background:#fff;}
-#left{left:0px;width:250px;z-index:200;border-right:solid #999999 1px;}
-#left-border{left:250px;}
-#center{left:250px;right:250px;overflow:hidden;z-index:1;}
-#right-border{right:250px;}
-#right{width:250px;right:0px;z-index:200;border-left:solid #999999 1px;}
-.subnavbar{background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-bottom:solid #999999 1px;border-top:solid #999999 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;-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-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-bottom:solid #999999 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-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;-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 #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);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;-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 #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);color:#555;z-index:10000;position:fixed;left:0;top:inherit;bottom:0;padding:0 5px;text-align:center;width:20px;background:none;border-right:solid #999999 1px;border-top:solid #999999 1px;background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);background-color:#f0f0f0;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), color-stop(25%, #f2f2f2), to(#e6e6e6));background-image:-webkit-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-ms-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:-o-linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-image:linear-gradient(#f2f2f2, #f2f2f2 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e6e6e6', GradientType=0);font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;font-size:1.3333333333333333em;}.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 #999999 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%;margin-top:1px;}
-#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:0.5em;padding-left:0.5em;}.panel-header-button:hover{color:maroon;-webkit-transition:color 0.25s linear;-moz-transition:color 0.25s linear;-ms-transition:color 0.25s linear;-o-transition:color 0.25s linear;transition:color 0.25s linear;-webkit-transition:color 0.25s linear;-moz-transition:color 0.25s linear;-ms-transition:color 0.25s linear;-o-transition:color 0.25s linear;transition:color 0.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;}
-#overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:20000;}
-#overlay.is_modal #overlay-background,.overlay-background{background:rgba(0, 0, 0, 0.5);}
-.panel-error-message,.panel-warning-message,.panel-done-message,.panel-info-message{height:24px;line-height:24px;color:#303030;padding:0px;padding-left:26px;background-color:#ffcccc;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:#ffffcc;}
-.panel-done-message{background-image:url(ok_small.png);background-color:#ccffcc;}
-.panel-info-message{background-image:url(info_small.png);background-color:#d9edf7;}
-#masthead{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;*position:relative;*z-index:2;overflow:visible;margin-bottom:16px;color:#999999;position:absolute;top:0;left:0;width:100%;min-width:900px;height:32px;border-bottom:solid #444444 1px;z-index:15000;padding:0;}#masthead .brand:hover{text-decoration:none;}
-#masthead .brand{float:left;display:block;padding:4px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999999;}
-#masthead .navbar-text{margin-bottom:0;line-height:32px;}
-#masthead .navbar-link{color:#999999;}#masthead .navbar-link:hover{color:#ffffff;}
-#masthead .btn,#masthead .btn-group{margin-top:1px;margin-top:1px;}
-#masthead .btn-group .btn{margin:0;}
-#masthead .nav{z-index:10000;background-color:#2c3143;}
-#masthead .nav>li>a{padding:6px 10px 8px;cursor:pointer;}#masthead .nav>li>a:hover{color:gold;}
-#masthead .dropdown-menu a,#masthead .dropdown-menu a:hover{text-decoration:none;}
-#masthead .title{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 .title img{display:inline;width:26px;vertical-align:top;}
-#masthead .title a{color:white;text-decoration:none;}
-#masthead .masthead-inner{min-height:32px;padding-left:20px;padding-right:20px;background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);background-color:#303239;background-image:-moz-linear-gradient(top, #333333, #2c3143);background-image:-ms-linear-gradient(top, #333333, #2c3143);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#2c3143));background-image:-webkit-linear-gradient(top, #333333, #2c3143);background-image:-o-linear-gradient(top, #333333, #2c3143);background-image:linear-gradient(top, #333333, #2c3143);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#2c3143', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;height:32px;}
-#masthead a:hover{text-decoration:underline;}
-.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:#c1c9e5;}
-.quota-meter-bar{position:absolute;top:0;left:0;height:16px;background-color:#969db3;}
-.quota-meter-bar-warn{background-color:#ffb400;}
-.quota-meter-bar-error{background-color:#ff4343;}
-.quota-meter-text{position:absolute;top:50%;left:0;width:100px;height:16px;margin-top:-6px;text-align:center;z-index:9001;color:#000000;white-space:nowrap;}
-div.metadataForm{border:solid #aaaaaa 1px;}
-div.metadataFormTitle{font-weight:bold;padding:5px;padding-left:10px;padding-right:10px;background:#cccccc;background-repeat:repeat-x;background-position:top;border-bottom:solid #aaaaaa 1px;}
-div.metadataFormBody{background:#FFFFFF;background-image:url(form_body_bg.png);background-repeat:repeat-x;background-position:top;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:0.5em;padding-bottom:0.25em;}
-div.toolFormBody{background:#ffffff;background-image:url(form_body_bg.png);background-repeat:repeat-x;background-position:top;padding:5px 0;}
-div.toolFormBody div.toolFormTitle{background:transparent;border:none;font-weight:bold;border-bottom:solid #d8b365 1px;margin-bottom:5px;}
-div.toolFormDisabled div.toolFormTitle{background:#eeeeee;border-color:#999999;}
-div.toolFormDisabled{border-color:#999999;}
-div.toolHelp{margin-top:15px;padding:5px;}
-div.toolHelpBody{width:100%;}
-.toolForm.toolFormInCanvas{border:solid #d8b365 1px;}.toolForm.toolFormInCanvas .toolFormTitle{font-size:12px;line-height:16px;}
-div.form-title,div.toolFormTitle{font-size:15px;line-height:24px;padding:5px 10px;background:#ebd9b2;border-bottom:solid #d8b365 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 #d8b365 5px;margin-left:10px;margin-bottom:10px;}
-div.form-row-error{background:#ffcccc;}
-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{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:16px;}
-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:16px;border:1px solid #999999;padding:3px;}
-.search-query{display:inline-block;padding:4px;font-size:12px;line-height:16px;color:#555555;border:1px solid #999999;padding-left:14px !important;padding-right:14px !important;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;-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);-moz-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);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-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:5px;top:9px;}
-#search-clear-btn{position:absolute;right:4px;top:8px;}
-.errormessagelarge,.warningmessagelarge,.donemessagelarge,.infomessagelarge{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;min-height:36px;padding-left:52px;background-image:url(error_large.png);background-repeat:no-repeat;background-position:10px 10px;}
-.errormessagelarge{background-color:#ffcccc;border-color:#ff3355;color:#660000;padding-left:52px;}
-.warningmessagelarge{background-image:url(warn_large.png);border-color:#aaaa66;background-color:#ffffcc;}
-.donemessagelarge{background-color:#ccffcc;border-color:#1a9900;color:#006600;padding-left:52px;background-image:url(ok_large.png);}
-.infomessagelarge{background-color:#d9edf7;border-color:#1b7183;color:#134158;background-image:url(info_large.png);border-color:#6666aa;background-color:#d9edf7;}
-.screencastBox{padding-left:10px;border-color:#AAAA66;background-color:#FFFFCC;background-image:none;}
-.errormessage,.warningmessage,.donemessage,.infomessage,.errormessagesmall,.warningmessagesmall,.donemessagesmall,.infomessagesmall{padding:8px 35px 8px 14px;margin-bottom:16px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#ffffcc;border:1px solid #ffdd33;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#666600;padding:5px;padding-left:25px;min-height:15px;background-image:url(error_small.png);background-repeat:no-repeat;background-position:5px 5px;}
-.errormessage{background-color:#ffcccc;border-color:#ff3355;color:#660000;}
-.warningmessage,.warningmessagesmall{background-image:url(warn_small.png);}
-.donemessage,.donemessagesmall{background-color:#ccffcc;border-color:#1a9900;color:#006600;background-image:url(ok_small.png);}
-.infomessage,.infomessagesmall{background-color:#d9edf7;border-color:#1b7183;color:#134158;background-image:url(info_small.png);}
-.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 0px 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 #d8b365 1px;border-bottom:solid #d8b365 1px;}
-table.colored td,table.colored th{text-align:left;padding:5px;line-height:16px;}
-table.colored tr.header{background:#ebd9b2;background-image:url(form_title_bg.png);background-repeat:repeat-x;background-position:top;border-bottom:solid #d8b365 1px;font-weight:bold;}
-table.colored tr{background:#ffffff;}
-table.colored tr.odd_row{background:#dadfef;}
-div.debug{margin:10px;padding:5px;background:#FFFF99;border:solid #FFFF33 1px;color:black;}
-.grid-header{padding-bottom:1em;}
-.grid-header h2{margin:0;margin-bottom:0.5em;}
-.grid-header .title{font-weight:bold;}
-.grid{padding-top:1em;border-collapse:collapse;width:100%;}
-.grid tbody td{line-height:16px;border-top:solid #DDDDDD 1px;border-bottom:solid #DDDDDD 1px;padding:5px;}
-.grid tbody td:empty{padding:0;}
-.grid thead tr{height:2em;}
-.grid thead th{line-height:16px;background:#ebd9b2;background-repeat:repeat-x;background-position:top;border-top:solid #d8b365 1px;border-bottom:solid #d8b365 1px;padding:5px;text-align:left;white-space:nowrap;}
-.grid tfoot td{background-color:#F8F8F8;border-top:solid #DDDDDD 1px;border-bottom:solid #DDDDDD 1px;padding:5px;}
-.grid .current{background-color:#EEEEFF;}
-.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 #AAAAAA;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:0px 7px 0px 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:24px;height:24px;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;}
-.gray-background{background-color:#DDDDDD;}
-.loading-elt-overlay{background-color:white;opacity:0.5;width:100%;height:100%;z-index:14000;position:fixed;display:none;}
-div.odd_row{background:#dadfef;}
-#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:0.5em;}
-.state-color-new{border-color:#a86030;background:#ffb030;}
-.state-color-upload{border-color:#6666aa;background:#ccccff;}
-.state-color-waiting{border-color:#a86030;background:#e8c060;}
-.state-color-queued{border-color:#888888;background:#eeeeee;}
-.state-color-running{border-color:#aaaa66;background:#ffffcc;}
-.state-color-ok{border-color:#66aa66;background:#ccffcc;}
-.state-color-error{border-color:#aa6666;background:#ffcccc;}
-.state-color-deleted{border-color:#330066;background:#3399ff;}
-.state-fg-new{color:#FFB030;}
-.state-fg-upload{color:#D090D0;}
-.state-fg-waiting{color:#E8C060;}
-.state-fg-queued{color:#888888;}
-.state-fg-running{color:#AAAA66;}
-.state-fg-ok{color:#66AA66;}
-.state-fg-error{color:#AA6666;}
-.state-fg-deleted{color:#3399FF;}
-.action-button{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);}.action-button:hover,.action-button:active,.action-button.active,.action-button.disabled,.action-button[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.action-button:active,.action-button.active{background-color:#cccccc \9;}
-.action-button:hover,.action-button:active,.action-button.active,.action-button.disabled,.action-button[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.action-button:active,.action-button.active{background-color:#cccccc \9;}
-.action-button:first-child{*margin-left:0;}
-.action-button:first-child{*margin-left:0;}
-.action-button [class^="ficon"],.action-button [class*=" ficon"]{line-height:.9em;}
-a.action-button{text-decoration:none;}
-.action-button>img{vertical-align:middle;}
-.action-button:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);color:inherit;}
-.menubutton{display:inline-block;*display:inline;*zoom:1;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:12px;line-height:16px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #999999;*border:0;border-bottom-color:#808080;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);padding:2px 10px 2px;border-color:#999999;border-color:rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.menubutton:hover,.menubutton:active,.menubutton.active,.menubutton.disabled,.menubutton[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.menubutton:active,.menubutton.active{background-color:#cccccc \9;}
-.menubutton:hover,.menubutton:active,.menubutton.active,.menubutton.disabled,.menubutton[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;}
-.menubutton:active,.menubutton.active{background-color:#cccccc \9;}
-.menubutton:first-child{*margin-left:0;}
-.menubutton:first-child{*margin-left:0;}
-.menubutton [class^="ficon"],.menubutton [class*=" ficon"]{line-height:.9em;}
-.menubutton:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);color:inherit;}
-.menubutton:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;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:32px;line-height:16px;overflow:hidden;text-overflow:ellipsis;}
-.menubutton.popup .label{border-right:solid #999999 1px;padding-right:6px;}
-.menubutton.popup,.menubutton.popup.split{padding-right:18px;}.menubutton.popup:after,.menubutton.popup.split:after{margin-top:6px;position:absolute;top:2px;right:6px;display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);}
-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:16px;color:#999999;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:0px 0px;padding:0;}
-.tipsy{padding:5px;font-size:10px;filter:alpha(opacity=80);background-repeat:no-repeat;background-image:url(../images/tipsy.gif);}
-.tipsy-inner{padding:5px 8px 4px 8px;background-color:black;color:white;max-width:200px;text-align:center;}
-.tipsy-north{background-position:top center;}
-.tipsy-south{background-position:bottom center;}
-.tipsy-east{background-position:right center;}
-.tipsy-west{background-position:left center;}
-.editable-text{cursor:pointer;}
-.editable-text:hover{cursor:text;border:dotted #999999 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:auto;}
-.workflow-invocation-complete{border:solid 1px #6A6;border-left-width:5px;margin:10px 0;padding-left:5px;}
-body.historyPage{background:#dfe5f9;color:#303030;margin:5px;border:0;padding:0;}
-div.historyLinks{margin:5px 5px;}
-div.historyItem{margin:0px -5px;padding:8px 10px;border-top:solid #999999 1px;border-right:none;word-wrap:break-word;background:#eeeeee;}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 #999999 1px;}
-div.historyItem div.historyItem{margin-right:-11px;}
-div.historyItem-ok,div.historyItem-failed_metadata{background:#ccffcc;}div.historyItem-ok .state-icon,div.historyItem-failed_metadata .state-icon{display:none;}
-div.historyItem-error{background:#ffcccc;}
-div.historyItem-empty{background:#ffcccc;}
-div.historyItem-running{background:#ffffcc;}div.historyItem-running .state-icon{background-image:url(data_running.gif);}
-div.historyItem-setting_metadata{background:#ffffcc;}div.historyItem-setting_metadata .state-icon{background-image:url(data_running.gif);}
-div.historyItem-upload{background:#ccccff;}div.historyItem-upload .state-icon{background-image:url(data_upload.gif);}
-div.historyItem-queued{background:#eeeeee;}
-div.historyItem-noPermission{filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;}
-div.historyItemTitleBar.spinner .state-icon{background:url(data_running.gif) 0 1px no-repeat !important;}
-div.historyItemButtons{float:right;}
-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:#023858;}
-pre.peek table,pre.peek th,pre.peek tr,pre.peek td{font-family:Menlo,Monaco,"Courier New",monospace;font-size:10px;}
-.toolMenuContainer{color:#303030;background:#dfe5f9;margin-top:5px;}
-div.toolSectionPad{margin:0;padding:0;height:5px;font-size:0px;}
-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 td.stringalign{text-align:left;}
-.toolMenuAndView .toolForm{float:left;background-color:white;margin:10px;}
-.icon-button.display{background:url(history-buttons.png) no-repeat 0px 0px;}
-.icon-button.display:hover{background:url(history-buttons.png) no-repeat 0px -26px;}
-.icon-button.display_disabled{background:url(history-buttons.png) no-repeat 0px -52px;}
-.icon-button.delete{background:url(history-buttons.png) no-repeat 0px -78px;}
-.icon-button.delete:hover{background:url(history-buttons.png) no-repeat 0px -104px;}
-.icon-button.delete_disabled{background:url(history-buttons.png) no-repeat 0px -130px;}
-.icon-button.edit{background:url(history-buttons.png) no-repeat 0px -156px;}
-.icon-button.edit:hover{background:url(history-buttons.png) no-repeat 0px -182px;}
-.icon-button.edit_disabled{background:url(history-buttons.png) no-repeat 0px -208px;}
-.icon-button.tag{background:url(fugue.png) no-repeat 0px 0px;}
-.icon-button.tags{background:url(fugue.png) no-repeat 0px -26px;}
-.icon-button.tag--plus{background:url(fugue.png) no-repeat 0px -52px;}
-.icon-button.toggle-expand{background:url(fugue.png) no-repeat 0px -78px;}
-.icon-button.toggle{background:url(fugue.png) no-repeat 0px -104px;}
-.icon-button.toggle:hover{background:url(fugue.png) no-repeat 0px -130px;}
-.icon-button.arrow-circle{background:url(fugue.png) no-repeat 0px -156px;}
-.icon-button.chevron{background:url(fugue.png) no-repeat 0px -182px;}
-.icon-button.bug{background:url(fugue.png) no-repeat 0px -208px;}
-.icon-button.disk{background:url(fugue.png) no-repeat 0px -234px;}
-.icon-button.information{background:url(fugue.png) no-repeat 0px -260px;}
-.icon-button.annotate{background:url(fugue.png) no-repeat 0px -286px;}
-.icon-button.go-to-full-screen{background:url(fugue.png) no-repeat 0px -312px;}
-.icon-button.import{background:url(fugue.png) no-repeat 0px -338px;}
-.icon-button.plus-button{background:url(fugue.png) no-repeat 0px -364px;}
-.icon-button.plus-button:hover{background:url(fugue.png) no-repeat 0px -390px;}
-.icon-button.gear{background:url(fugue.png) no-repeat 0px -416px;}
-.icon-button.chart_curve{background:url(fugue.png) no-repeat 0px -442px;}
-.icon-button.disk--arrow{background:url(fugue.png) no-repeat 0px -468px;}
-.icon-button.disk--arrow:hover{background:url(fugue.png) no-repeat 0px -494px;}
-.icon-button.cross-circle{background:url(fugue.png) no-repeat 0px -520px;}
-.icon-button.cross-circle:hover{background:url(fugue.png) no-repeat 0px -546px;}
-.icon-button.arrow-split{background:url(fugue.png) no-repeat 0px -572px;}
-.icon-button.arrow-split:hover{background:url(fugue.png) no-repeat 0px -598px;}
-.icon-button.chevron-expand:hover{background:url(fugue.png) no-repeat 0px -624px;}
-.icon-button.chevron-expand{background:url(fugue.png) no-repeat 0px -650px;}
-.text-and-autocomplete-select{background:url(fugue.png) no-repeat right -676px;}
-div.historyItem-error .state-icon{background:url(history-states.png) no-repeat 0px 0px;}
-div.historyItem-empty .state-icon{background:url(history-states.png) no-repeat 0px -25px;}
-div.historyItem-queued .state-icon{background:url(history-states.png) no-repeat 0px -50px;}
-.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;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c static/june_2007_style/blue/question-balloon.png
Binary file static/june_2007_style/blue/question-balloon.png has changed
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c static/june_2007_style/blue/question-octagon-frame.png
Binary file static/june_2007_style/blue/question-octagon-frame.png has changed
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c templates/tool_form.mako
--- a/templates/tool_form.mako
+++ b/templates/tool_form.mako
@@ -12,7 +12,7 @@
</%def><%def name="javascripts()">
- ${h.js( "libs/jquery/jquery", "galaxy.panels", "galaxy.base", "libs/jquery/jquery.autocomplete", "libs/jquery/jstorage" )}
+ ${h.js( "libs/jquery/jquery", "galaxy.panels", "galaxy.base", "libs/jquery/jquery.autocomplete", "libs/jquery/jstorage", "libs/bootstrap" )}
<script type="text/javascript">
$(function() {
$(window).bind("refresh_on_change", function() {
@@ -282,6 +282,11 @@
tool_url = tool.action[0] + h.url_for(tool.action[1])
%>
+<%
+ # Name of the tool in lower case
+ low_tool_name = tool.name.lower()
+%>
+
%if tool_id_version_message:
${render_msg( tool_id_version_message, 'warning' )}
%endif
@@ -289,12 +294,17 @@
<div class="toolForm" id="${tool.id}"><form id="tool_form" name="tool_form" action="${tool_url}" enctype="${tool.enctype}" target="${tool.target}" method="${tool.method}">
%if tool.has_multiple_pages:
- <div class="toolFormTitle">${tool.name} (step ${tool_state.page+1} of ${tool.npages})</div>
+ <div class="toolFormTitle">${tool.name} (step ${tool_state.page+1} of ${tool.npages})
%elif not tool_version_select_field:
- <div class="toolFormTitle">${tool.name} (version ${tool.version})</div>
+ <div class="toolFormTitle">${tool.name} (version ${tool.version})
%else:
- <div class="toolFormTitle">${tool.name} ${tool_version_select_field.get_html()}</div>
+ <div class="toolFormTitle">${tool.name} ${tool_version_select_field.get_html()}
%endif
+ <!-- BioStar links -->
+ <a href="http://slyfox.bx.psu.edu:8080/new/post/tagged/${low_tool_name}" target="galaxy_main" class="icon-button general-question tooltip close-side-panels" data-original-title="Ask a tool related question"></a>
+ <a href="http://slyfox.bx.psu.edu:8080/show/tag/${low_tool_name}/" target="galaxy_main" class="icon-button tag-question tooltip close-side-panels" data-original-title="See tool related posts" ></a>
+ <!-- End of BioStar links -->
+ </div><div class="toolFormBody"><input type="hidden" name="refresh" value="refresh"><input type="hidden" name="tool_id" value="${tool.id}">
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c templates/webapps/community/base_panels.mako
--- a/templates/webapps/community/base_panels.mako
+++ b/templates/webapps/community/base_panels.mako
@@ -71,7 +71,8 @@
## Help tab.
<%
- menu_options = [
+ menu_options = [
+ [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8080/" ), "_blank" ]
[_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
[_('Tool shed wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/Tool%20Shed" ), "_blank" ],
[_('Galaxy wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c templates/webapps/galaxy/base_panels.mako
--- a/templates/webapps/galaxy/base_panels.mako
+++ b/templates/webapps/galaxy/base_panels.mako
@@ -120,6 +120,7 @@
## Help tab.
<%
menu_options = [
+ [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8080/" ), "galaxy_main" ],
[_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
[_('Galaxy Wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
[_('Video tutorials (screencasts)'), app.config.get( "screencasts_url", "http://galaxycast.org" ), "_blank" ],
diff -r 51b24be13e9085b6fda294354e709d844e5da964 -r 110a69b0d387228ec7bed84814192b9c99082d7c universe_wsgi.ini.sample
--- a/universe_wsgi.ini.sample
+++ b/universe_wsgi.ini.sample
@@ -263,6 +263,9 @@
# as on the user registration and login forms.
#terms_url = None
+# The URL linked by the "Galaxy Q&A" link in the "Help" menu
+qa_url = http://slyfox.bx.psu.edu:8080/
+
# Serve static content, which must be enabled if you're not serving it via a
# proxy server. These options should be self explanatory and so are not
# documented individually. You can use these paths (or ones in the proxy
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Circster enhancements: (a) dragging and zooming; and (b) fill complete palette.
by Bitbucket 08 Sep '12
by Bitbucket 08 Sep '12
08 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/51b24be13e90/
changeset: 51b24be13e90
user: jgoecks
date: 2012-09-08 19:08:33
summary: Circster enhancements: (a) dragging and zooming; and (b) fill complete palette.
affected #: 2 files
diff -r 108cda8986460298279279fca9ae40661a8e6174 -r 51b24be13e9085b6fda294354e709d844e5da964 static/scripts/viz/visualization.js
--- a/static/scripts/viz/visualization.js
+++ b/static/scripts/viz/visualization.js
@@ -827,9 +827,11 @@
this.height = options.height;
this.total_gap = options.total_gap;
this.genome = options.genome;
- this.radius_start = options.radius_start;
this.dataset_arc_height = options.dataset_arc_height;
this.track_gap = 5;
+
+ // Compute radius start based on model.
+ this.radius_start = this.width/2 - this.model.get('tracks').length * (this.dataset_arc_height + this.track_gap);
},
render: function() {
@@ -841,8 +843,17 @@
.append("svg")
.attr("width", self.width)
.attr("height", self.height)
- .append("g")
- .attr("transform", "translate(" + self.width / 2 + "," + self.height / 2 + ")");
+ .attr("pointer-events", "all")
+ // Set up zooming, dragging.
+ .append('svg:g')
+ .call(d3.behavior.zoom().on('zoom', function() {
+ svg.attr("transform",
+ "translate(" + d3.event.translate + ")"
+ + " scale(" + d3.event.scale + ")");
+ }))
+ .attr("transform", "translate(" + self.width / 2 + "," + self.height / 2 + ")")
+ .append('svg:g')
+
// -- Render each dataset in the visualization. --
this.model.get('tracks').each(function(track, index) {
@@ -889,8 +900,8 @@
.style("stroke", block_color)
.style("fill", block_color);
});
- });
- }
+ });
+ }
});
/**
diff -r 108cda8986460298279279fca9ae40661a8e6174 -r 51b24be13e9085b6fda294354e709d844e5da964 templates/visualization/circster.mako
--- a/templates/visualization/circster.mako
+++ b/templates/visualization/circster.mako
@@ -69,14 +69,13 @@
var genome = new Genome(JSON.parse('${ h.to_json_string( genome ) }'))
visualization = new GenomeVisualization(JSON.parse('${ h.to_json_string( viz_config ) }')),
viz_view = new CircsterView({
- width: 600,
- height: 600,
+ width: 700,
+ height: 700,
// Gap is difficult to set because it very dependent on chromosome size and organization.
- total_gap: 2 * Math.PI * 0.2,
+ total_gap: 2 * Math.PI * 0.1,
genome: genome,
model: visualization,
- radius_start: 100,
- dataset_arc_height: 15
+ dataset_arc_height: 25
});
// -- Render viz. --
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: greg: Enhancements to tool dependency installation when installing with a tool shed repository: multiple environment variables can now be set and a new "make_directory" tag is supported.
by Bitbucket 07 Sep '12
by Bitbucket 07 Sep '12
07 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/108cda898646/
changeset: 108cda898646
user: greg
date: 2012-09-07 20:49:46
summary: Enhancements to tool dependency installation when installing with a tool shed repository: multiple environment variables can now be set and a new "make_directory" tag is supported.
affected #: 3 files
diff -r 1475240809a7e9b996aa7b9026b33e20ea9209bd -r 108cda8986460298279279fca9ae40661a8e6174 lib/galaxy/tool_shed/tool_dependencies/common_util.py
--- a/lib/galaxy/tool_shed/tool_dependencies/common_util.py
+++ b/lib/galaxy/tool_shed/tool_dependencies/common_util.py
@@ -17,6 +17,9 @@
return tarfile.is_tarfile( file_path )
def iszip( file_path ):
return check_zip( file_path )
+def make_directory( full_path ):
+ if not os.path.exists( full_path ):
+ os.makedirs( full_path )
def move_directory_files( current_dir, source_dir, destination_dir ):
source_directory = os.path.abspath( os.path.join( current_dir, source_dir ) )
destination_directory = os.path.join( destination_dir )
diff -r 1475240809a7e9b996aa7b9026b33e20ea9209bd -r 108cda8986460298279279fca9ae40661a8e6174 lib/galaxy/tool_shed/tool_dependencies/fabric_util.py
--- a/lib/galaxy/tool_shed/tool_dependencies/fabric_util.py
+++ b/lib/galaxy/tool_shed/tool_dependencies/fabric_util.py
@@ -88,7 +88,9 @@
for action_tup in actions[ 1: ]:
action_type, action_dict = action_tup
current_dir = os.path.abspath( os.path.join( work_dir, dir ) )
- if action_type == 'move_directory_files':
+ if action_type == 'make_directory':
+ common_util.make_directory( full_path=action_dict[ 'full_path' ] )
+ elif action_type == 'move_directory_files':
common_util.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' ] ) )
@@ -98,29 +100,36 @@
destination_dir=os.path.join( action_dict[ 'destination' ] ) )
elif action_type == 'set_environment':
# Currently the only action supported in this category is "environment_variable".
- env_var_dict = action_dict[ 'environment_variable' ]
- env_var_name = env_var_dict[ 'name' ]
- env_var_action = env_var_dict[ 'action' ]
- env_var_value = env_var_dict[ 'value' ]
- if env_var_action == 'prepend_to':
- changed_value = '%s:$%s' % ( env_var_value, env_var_name )
- elif env_var_action == 'set_to':
- changed_value = '%s' % env_var_value
- elif env_var_action == 'append_to':
- changed_value = '$%s:%s' % ( env_var_name, env_var_value )
- cmd = "echo '%s=%s; export %s' > %s/env.sh;chmod +x %s/env.sh" % ( env_var_name,
- changed_value,
- env_var_name,
- install_dir,
- install_dir )
- output = local( cmd, capture=True )
- log_results( cmd, output, os.path.join( install_dir, INSTALLATION_LOG ) )
- if output.return_code:
- tool_dependency.status = app.model.ToolDependency.installation_status.ERROR
- tool_dependency.error_message = str( output.stderr )
- sa_session.add( tool_dependency )
- sa_session.flush()
- return
+ env_var_dicts = action_dict[ 'environment_variable' ]
+ for env_var_dict in env_var_dicts:
+ env_var_name = env_var_dict[ 'name' ]
+ env_var_action = env_var_dict[ 'action' ]
+ env_var_value = env_var_dict[ 'value' ]
+ if env_var_action == 'prepend_to':
+ changed_value = '%s:$%s' % ( env_var_value, env_var_name )
+ elif env_var_action == 'set_to':
+ changed_value = '%s' % env_var_value
+ elif env_var_action == 'append_to':
+ changed_value = '$%s:%s' % ( env_var_name, env_var_value )
+ env_shell_file_path = '%s/env.sh' % install_dir
+ if os.path.exists( env_shell_file_path ):
+ write_action = '>>'
+ else:
+ write_action = '>'
+ cmd = "echo '%s=%s; export %s' %s %s;chmod +x %s" % ( env_var_name,
+ changed_value,
+ env_var_name,
+ write_action,
+ env_shell_file_path,
+ env_shell_file_path )
+ output = local( cmd, capture=True )
+ log_results( cmd, output, os.path.join( install_dir, INSTALLATION_LOG ) )
+ if output.return_code:
+ tool_dependency.status = app.model.ToolDependency.installation_status.ERROR
+ tool_dependency.error_message = str( output.stderr )
+ sa_session.add( tool_dependency )
+ sa_session.flush()
+ return
elif action_type == 'shell_command':
action = action_dict[ 'command' ]
with settings( warn_only=True ):
diff -r 1475240809a7e9b996aa7b9026b33e20ea9209bd -r 108cda8986460298279279fca9ae40661a8e6174 lib/galaxy/tool_shed/tool_dependencies/install_util.py
--- a/lib/galaxy/tool_shed/tool_dependencies/install_util.py
+++ b/lib/galaxy/tool_shed/tool_dependencies/install_util.py
@@ -113,6 +113,12 @@
action_dict[ 'url' ] = action_elem.text
else:
continue
+ elif action_type == 'make_directory':
+ # <action type="make_directory">$INSTALL_DIR/lib/python</action>
+ if action_elem.text:
+ action_dict[ 'full_path' ] = action_elem.text.replace( '$INSTALL_DIR', install_dir )
+ else:
+ continue
elif action_type in [ 'move_directory_files', 'move_file' ]:
# <action type="move_file">
# <source>misc/some_file</source>
@@ -128,15 +134,21 @@
action_dict[ move_elem.tag ] = move_elem_text
elif action_type == 'set_environment':
# <action type="set_environment">
+ # <environment_variable name="PYTHONPATH" action="append_to">$INSTALL_DIR/lib/python</environment_variable>
# <environment_variable name="PATH" action="prepend_to">$INSTALL_DIR/bin</environment_variable>
# </action>
+ env_var_dicts = []
for env_elem in action_elem:
if env_elem.tag == 'environment_variable':
env_var_name = env_elem.get( 'name', 'PATH' )
env_var_action = env_elem.get( 'action', 'prepend_to' )
env_var_text = env_elem.text.replace( '$INSTALL_DIR', install_dir )
if env_var_text:
- action_dict[ env_elem.tag ] = dict( name=env_var_name, action=env_var_action, value=env_var_text )
+ env_var_dicts.append( dict( name=env_var_name, action=env_var_action, value=env_var_text ) )
+ if env_var_dicts:
+ action_dict[ env_elem.tag ] = env_var_dicts
+ else:
+ continue
else:
continue
actions.append( ( action_type, action_dict ) )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: inithello: Added an error message to the repository clone error handling.
by Bitbucket 07 Sep '12
by Bitbucket 07 Sep '12
07 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/1475240809a7/
changeset: 1475240809a7
user: inithello
date: 2012-09-07 17:54:02
summary: Added an error message to the repository clone error handling.
affected #: 2 files
diff -r 0491c108154248cab0006533d30e462df3ade6f9 -r 1475240809a7e9b996aa7b9026b33e20ea9209bd lib/galaxy/util/shed_util.py
--- a/lib/galaxy/util/shed_util.py
+++ b/lib/galaxy/util/shed_util.py
@@ -363,7 +363,8 @@
noupdate=False,
rev=util.listify( str( ctx_rev ) ) )
return True
- except:
+ except Exception, e:
+ log.debug( 'Encountered an exception while cloning the repository: %s' % e )
return False
def copy_sample_file( app, filename, dest_path=None ):
"""Copy xxx.sample to dest_path/xxx.sample and dest_path/xxx. The default value for dest_path is ~/tool-data."""
diff -r 0491c108154248cab0006533d30e462df3ade6f9 -r 1475240809a7e9b996aa7b9026b33e20ea9209bd lib/galaxy/web/controllers/admin_toolshed.py
--- a/lib/galaxy/web/controllers/admin_toolshed.py
+++ b/lib/galaxy/web/controllers/admin_toolshed.py
@@ -772,15 +772,8 @@
repository_id = kwd[ 'id' ]
repository = get_repository( trans, repository_id )
if repository.status in [ trans.model.ToolShedRepository.installation_status.NEW,
- trans.model.ToolShedRepository.installation_status.CLONING ]:
- message = "The repository '%s' is not yet cloned, please try again..."
- status = 'warning'
- return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
- action='monitor_repository_installation',
- **kwd ) )
- if repository.status in [ trans.model.ToolShedRepository.installation_status.ERROR ]:
- message = "There was an error installing the repository '%s', please try again..."
- status = 'warning'
+ trans.model.ToolShedRepository.installation_status.CLONING,
+ trans.model.ToolShedRepository.installation_status.ERROR ]:
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='monitor_repository_installation',
**kwd ) )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: inithello: Handle errors when cloning a tool shed repository.
by Bitbucket 07 Sep '12
by Bitbucket 07 Sep '12
07 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/0491c1081542/
changeset: 0491c1081542
user: inithello
date: 2012-09-07 17:22:09
summary: Handle errors when cloning a tool shed repository.
affected #: 2 files
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 0491c108154248cab0006533d30e462df3ade6f9 lib/galaxy/util/shed_util.py
--- a/lib/galaxy/util/shed_util.py
+++ b/lib/galaxy/util/shed_util.py
@@ -355,12 +355,16 @@
return tool_shed_url.rstrip( '/' )
def clone_repository( repository_clone_url, repository_file_dir, ctx_rev ):
"""Clone the repository up to the specified changeset_revision. No subsequent revisions will be present in the cloned repository."""
- commands.clone( get_configured_ui(),
- str( repository_clone_url ),
- dest=str( repository_file_dir ),
- pull=True,
- noupdate=False,
- rev=util.listify( str( ctx_rev ) ) )
+ try:
+ commands.clone( get_configured_ui(),
+ str( repository_clone_url ),
+ dest=str( repository_file_dir ),
+ pull=True,
+ noupdate=False,
+ rev=util.listify( str( ctx_rev ) ) )
+ return True
+ except:
+ return False
def copy_sample_file( app, filename, dest_path=None ):
"""Copy xxx.sample to dest_path/xxx.sample and dest_path/xxx. The default value for dest_path is ~/tool-data."""
if dest_path is None:
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 0491c108154248cab0006533d30e462df3ade6f9 lib/galaxy/web/controllers/admin_toolshed.py
--- a/lib/galaxy/web/controllers/admin_toolshed.py
+++ b/lib/galaxy/web/controllers/admin_toolshed.py
@@ -64,7 +64,8 @@
columns = [
NameColumn( "Name",
key="name",
- link=( lambda item: dict( operation="manage_repository", id=item.id, webapp="galaxy" ) ),
+ link=( lambda item: iff( item.status == model.ToolShedRepository.installation_status.ERROR, \
+ None, dict( operation="manage_repository", id=item.id, webapp="galaxy" ) ) ),
attach_popup=True ),
DescriptionColumn( "Description" ),
OwnerColumn( "Owner" ),
@@ -86,17 +87,29 @@
global_actions = []
operations = [ grids.GridOperation( "Get updates",
allow_multiple=False,
- condition=( lambda item: not item.deleted ),
+ condition=( lambda item: not item.deleted and item.status not in \
+ [ model.ToolShedRepository.installation_status.ERROR, model.ToolShedRepository.installation_status.NEW ] ),
async_compatible=False,
url_args=dict( controller='admin_toolshed', action='browse_repositories', operation='get updates' ) ),
grids.GridOperation( "Deactivate or uninstall",
allow_multiple=False,
- condition=( lambda item: not item.deleted ),
+ condition=( lambda item: not item.deleted and item.status not in \
+ [ model.ToolShedRepository.installation_status.ERROR, model.ToolShedRepository.installation_status.NEW ] ),
async_compatible=False,
url_args=dict( controller='admin_toolshed', action='browse_repositories', operation='deactivate or uninstall' ) ),
+ grids.GridOperation( "Uninstall",
+ allow_multiple=False,
+ condition=( lambda item: ( item.status == model.ToolShedRepository.installation_status.ERROR ) ),
+ async_compatible=False,
+ url_args=dict( controller='admin_toolshed', action='browse_repositories', operation='uninstall' ) ),
+ grids.GridOperation( "Reset to install",
+ allow_multiple=False,
+ condition=( lambda item: ( item.status == model.ToolShedRepository.installation_status.ERROR ) ),
+ async_compatible=False,
+ url_args=dict( controller='admin_toolshed', action='browse_repositories', operation='reset status to new' ) ),
grids.GridOperation( "Activate or reinstall",
allow_multiple=False,
- condition=( lambda item: item.deleted ),
+ condition=( lambda item: ( item.deleted or item.uninstalled ) ),
async_compatible=False,
url_args=dict( controller='admin_toolshed', action='browse_repositories', operation='activate or reinstall' ) ) ]
standard_filters = []
@@ -342,6 +355,16 @@
return self.manage_repository( trans, **kwd )
if operation == "get updates":
return self.check_for_updates( trans, **kwd )
+ if operation == "uninstall":
+ kwd[ 'deactivate_or_uninstall_repository_button' ] = 'Deactivate or Uninstall'
+ kwd[ 'remove_from_disk' ] = [u'true', u'true']
+ return self.deactivate_or_uninstall_repository( trans, **kwd )
+ if operation == "reset status to new":
+ repository = get_repository( trans, kwd[ 'id' ] )
+ repository.status = model.ToolShedRepository.installation_status.NEW
+ repository.deleted = False
+ repository.uninstalled = True
+ trans.app.model.context.current.flush()
if operation == "activate or reinstall":
repository = get_repository( trans, kwd[ 'id' ] )
if repository.uninstalled:
@@ -406,7 +429,7 @@
remove_from_disk_checked = CheckboxField.is_checked( remove_from_disk )
tool_shed_repository = get_repository( trans, kwd[ 'id' ] )
shed_tool_conf, tool_path, relative_install_dir = get_tool_panel_config_tool_path_install_dir( trans.app, tool_shed_repository )
- repository_install_dir = os.path.abspath ( relative_install_dir )
+ repository_install_dir = os.path.abspath ( relative_install_dir ) if relative_install_dir is not None else None
errors = ''
if params.get( 'deactivate_or_uninstall_repository_button', False ):
if tool_shed_repository.includes_tools:
@@ -426,8 +449,12 @@
log.debug( "Removed repository installation directory: %s" % str( repository_install_dir ) )
removed = True
except Exception, e:
- log.debug( "Error removing repository installation directory %s: %s" % ( str( repository_install_dir ), str( e ) ) )
- removed = False
+ if repository_install_dir is not None:
+ removed = False
+ log.debug( "Error removing repository installation directory %s: %s" % ( str( repository_install_dir ), str( e ) ) )
+ else:
+ log.debug( "Repository installation directory does not exist." )
+ removed = True
if removed:
tool_shed_repository.uninstalled = True
# Remove all installed tool dependencies.
@@ -610,7 +637,12 @@
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, tool_dependencies = repo_info_tuple
clone_dir = os.path.join( tool_path, self.generate_tool_path( repository_clone_url, tool_shed_repository.installed_changeset_revision ) )
relative_install_dir = os.path.join( clone_dir, tool_shed_repository.name )
- clone_repository( repository_clone_url, os.path.abspath( relative_install_dir ), ctx_rev )
+ result = clone_repository( repository_clone_url, os.path.abspath( relative_install_dir ), ctx_rev )
+ if not result:
+ update_tool_shed_repository_status( trans.app, tool_shed_repository, trans.model.ToolShedRepository.installation_status.ERROR )
+ return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
+ action='monitor_repository_installation',
+ tool_shed_repository_ids=[ trans.security.encode_id( tool_shed_repository.id ) ] ) )
if reinstalling:
# Since we're reinstalling the repository we need to find the latest changeset revision to which is can be updated.
current_changeset_revision, current_ctx_rev = get_update_to_changeset_revision_and_ctx_rev( trans, tool_shed_repository )
@@ -746,6 +778,12 @@
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='monitor_repository_installation',
**kwd ) )
+ if repository.status in [ trans.model.ToolShedRepository.installation_status.ERROR ]:
+ message = "There was an error installing the repository '%s', please try again..."
+ status = 'warning'
+ return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
+ action='monitor_repository_installation',
+ **kwd ) )
description = util.restore_text( params.get( 'description', repository.description ) )
shed_tool_conf, tool_path, relative_install_dir = get_tool_panel_config_tool_path_install_dir( trans.app, repository )
repo_files_dir = os.path.abspath( os.path.join( relative_install_dir, repository.name ) )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: rmarenco: Modified the good files instead of the auto-generated ones
by Bitbucket 07 Sep '12
by Bitbucket 07 Sep '12
07 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/1a56c4b28c6b/
changeset: 1a56c4b28c6b
user: rmarenco
date: 2012-09-07 15:54:31
summary: Modified the good files instead of the auto-generated ones
affected #: 5 files
diff -r 95d98a26518349216a335a5860eb370ab74375fd -r 1a56c4b28c6bbaf1b2f1b0efec5fecce7bd454bb database/compiled_templates/webapps/galaxy/base_panels.mako.py
--- a/database/compiled_templates/webapps/galaxy/base_panels.mako.py
+++ /dev/null
@@ -1,415 +0,0 @@
-# -*- encoding:ascii -*-
-from mako import runtime, filters, cache
-UNDEFINED = runtime.UNDEFINED
-__M_dict_builtin = dict
-__M_locals_builtin = locals
-_magic_number = 6
-_modified_time = 1346972736.51736
-_template_filename=u'templates/webapps/galaxy/base_panels.mako'
-_template_uri=u'/webapps/galaxy/base_panels.mako'
-_template_cache=cache.Cache(__name__, _modified_time)
-_source_encoding='ascii'
-_exports = ['masthead', 'javascripts', 'title']
-
-
-def _mako_get_namespace(context, name):
- try:
- return context.namespaces[(__name__, name)]
- except KeyError:
- _mako_generate_namespaces(context)
- return context.namespaces[(__name__, name)]
-def _mako_generate_namespaces(context):
- pass
-def _mako_inherit(template, context):
- _mako_generate_namespaces(context)
- return runtime._inherit_from(context, u'/base_panels.mako', _template_uri)
-def render_body(context,**pageargs):
- context.caller_stack._push_frame()
- try:
- __M_locals = __M_dict_builtin(pageargs=pageargs)
- __M_writer = context.writer()
- # SOURCE LINE 1
- __M_writer(u'\n\n')
- # SOURCE LINE 4
- __M_writer(u'\n\n')
- # SOURCE LINE 8
- __M_writer(u'\n\n')
- # SOURCE LINE 232
- __M_writer(u'\n')
- return ''
- finally:
- context.caller_stack._pop_frame()
-
-
-def render_masthead(context):
- context.caller_stack._push_frame()
- try:
- AssertionError = context.get('AssertionError', UNDEFINED)
- h = context.get('h', UNDEFINED)
- app = context.get('app', UNDEFINED)
- util = context.get('util', UNDEFINED)
- def tab(id,display,href,target='_parent',visible=True,extra_class='',menu_options=None):
- context.caller_stack._push_frame()
- try:
- self = context.get('self', UNDEFINED)
- len = context.get('len', UNDEFINED)
- __M_writer = context.writer()
- # SOURCE LINE 19
- __M_writer(u'\n')
- # SOURCE LINE 22
- __M_writer(u' \n ')
- # SOURCE LINE 23
-
- cls = ""
- a_cls = ""
- extra = ""
- if extra_class:
- cls += " " + extra_class
- if self.active_view == id:
- cls += " active"
- if menu_options:
- cls += " dropdown"
- a_cls += " dropdown-toggle"
- extra = "<b class='caret'></b>"
- style = ""
- if not visible:
- style = "display: none;"
-
-
- # SOURCE LINE 38
- __M_writer(u'\n <li class="')
- # SOURCE LINE 39
- __M_writer(unicode(cls))
- __M_writer(u'" style="')
- __M_writer(unicode(style))
- __M_writer(u'">\n')
- # SOURCE LINE 40
- if href:
- # SOURCE LINE 41
- __M_writer(u' <a class="')
- __M_writer(unicode(a_cls))
- __M_writer(u'" data-toggle="dropdown" target="')
- __M_writer(unicode(target))
- __M_writer(u'" href="')
- __M_writer(unicode(href))
- __M_writer(u'">')
- __M_writer(unicode(display))
- __M_writer(unicode(extra))
- __M_writer(u'</a>\n')
- # SOURCE LINE 42
- else:
- # SOURCE LINE 43
- __M_writer(u' <a class="')
- __M_writer(unicode(a_cls))
- __M_writer(u'" data-toggle="dropdown">')
- __M_writer(unicode(display))
- __M_writer(unicode(extra))
- __M_writer(u'</a>\n')
- pass
- # SOURCE LINE 45
- if menu_options:
- # SOURCE LINE 46
- __M_writer(u' <ul class="dropdown-menu">\n')
- # SOURCE LINE 47
- for menu_item in menu_options:
- # SOURCE LINE 48
- if not menu_item:
- # SOURCE LINE 49
- __M_writer(u' <li class="divider"></li>\n')
- # SOURCE LINE 50
- else:
- # SOURCE LINE 51
- __M_writer(u' <li>\n')
- # SOURCE LINE 52
- if len ( menu_item ) == 1:
- # SOURCE LINE 53
- __M_writer(u' ')
- __M_writer(unicode(menu_item[0]))
- __M_writer(u'\n')
- # SOURCE LINE 54
- elif len ( menu_item ) == 2:
- # SOURCE LINE 55
- __M_writer(u' ')
- name, link = menu_item
-
- __M_writer(u'\n <a href="')
- # SOURCE LINE 56
- __M_writer(unicode(link))
- __M_writer(u'">')
- __M_writer(unicode(name))
- __M_writer(u'</a>\n')
- # SOURCE LINE 57
- else:
- # SOURCE LINE 58
- __M_writer(u' ')
- name, link, target = menu_item
-
- __M_writer(u'\n <a target="')
- # SOURCE LINE 59
- __M_writer(unicode(target))
- __M_writer(u'" href="')
- __M_writer(unicode(link))
- __M_writer(u'">')
- __M_writer(unicode(name))
- __M_writer(u'</a>\n')
- pass
- # SOURCE LINE 61
- __M_writer(u' </li>\n')
- pass
- pass
- # SOURCE LINE 64
- __M_writer(u' </ul>\n')
- pass
- # SOURCE LINE 66
- __M_writer(u' </li>\n ')
- return ''
- finally:
- context.caller_stack._pop_frame()
- trans = context.get('trans', UNDEFINED)
- _ = context.get('_', UNDEFINED)
- __M_writer = context.writer()
- # SOURCE LINE 11
- __M_writer(u'\n\n')
- # SOURCE LINE 14
- __M_writer(u' <div style="position: relative; right: -50%; float: left;">\n <div style="display: block; position: relative; right: 50%;">\n\n <ul class="nav" border="0" cellspacing="0">\n \n ')
- # SOURCE LINE 67
- __M_writer(u'\n\n')
- # SOURCE LINE 70
- __M_writer(u' ')
- __M_writer(unicode(tab( "analysis", _("Analyze Data"), h.url_for( controller='/root', action='index' ) )))
- __M_writer(u'\n \n')
- # SOURCE LINE 73
- __M_writer(u' ')
- __M_writer(unicode(tab( "workflow", _("Workflow"), h.url_for( controller='/workflow', action='index' ) )))
- __M_writer(u'\n \n')
- # SOURCE LINE 76
- __M_writer(u' ')
-
- menu_options = [
- [ _('Data Libraries'), h.url_for( controller='/library', action='index') ],
- None,
- [ _('Published Histories'), h.url_for( controller='/history', action='list_published' ) ],
- [ _('Published Workflows'), h.url_for( controller='/workflow', action='list_published' ) ],
- [ _('Published Visualizations'), h.url_for( controller='/visualization', action='list_published' ) ],
- [ _('Published Pages'), h.url_for( controller='/page', action='list_published' ) ]
- ]
- tab( "shared", _("Shared Data"), h.url_for( controller='/library', action='index'), menu_options=menu_options )
-
-
- # SOURCE LINE 86
- __M_writer(u'\n \n')
- # SOURCE LINE 89
- __M_writer(u' ')
-
- menu_options = [
- [ _('Sequencing Requests'), h.url_for( controller='/requests', action='index' ) ],
- [ _('Find Samples'), h.url_for( controller='/requests', action='find_samples_index' ) ],
- [ _('Help'), app.config.get( "lims_doc_url", "http://main.g2.bx.psu.edu/u/rkchak/p/sts" ), "galaxy_main" ]
- ]
- tab( "lab", "Lab", None, menu_options=menu_options, visible=( trans.user and ( trans.user.requests or trans.app.security_agent.get_accessible_request_types( trans, trans.user ) ) ) )
-
-
- # SOURCE LINE 96
- __M_writer(u'\n\n')
- # SOURCE LINE 99
- __M_writer(u' ')
-
- menu_options = [
- [_('New Visualization'), h.url_for( controller='/tracks', action='index' ) ],
- [_('Saved Visualizations'), h.url_for( controller='/visualization', action='list' ) ]
- ]
- tab( "visualization", _("Visualization"), h.url_for( controller='/visualization', action='list'), menu_options=menu_options )
-
-
- # SOURCE LINE 105
- __M_writer(u'\n\n')
- # SOURCE LINE 108
- if app.config.get_bool( 'enable_cloud_launch', False ):
- # SOURCE LINE 109
- __M_writer(u' ')
-
- menu_options = [
- [_('New Cloud Cluster'), h.url_for( controller='/cloudlaunch', action='index' ) ],
- ]
- tab( "cloud", _("Cloud"), h.url_for( controller='/cloudlaunch', action='index'), menu_options=menu_options )
-
-
- # SOURCE LINE 114
- __M_writer(u'\n')
- pass
- # SOURCE LINE 116
- __M_writer(u'\n')
- # SOURCE LINE 118
- __M_writer(u' ')
- __M_writer(unicode(tab( "admin", "Admin", h.url_for( controller='/admin', action='index' ), extra_class="admin-only", visible=( trans.user and app.config.is_admin_user( trans.user ) ) )))
- __M_writer(u'\n \n')
- # SOURCE LINE 121
- __M_writer(u' ')
-
- menu_options = [
- [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8080/" ), "galaxy_main" ],
- [_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
- [_('Galaxy Wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
- [_('Video tutorials (screencasts)'), app.config.get( "screencasts_url", "http://galaxycast.org" ), "_blank" ],
- [_('How to Cite Galaxy'), app.config.get( "citation_url", "http://wiki.g2.bx.psu.edu/Citing%20Galaxy" ), "_blank" ]
- ]
- if app.config.get( 'terms_url', None ) is not None:
- menu_options.append( [_('Terms and Conditions'), app.config.get( 'terms_url', None ), '_blank'] )
- tab( "help", _("Help"), None, menu_options=menu_options)
-
-
- # SOURCE LINE 132
- __M_writer(u'\n \n')
- # SOURCE LINE 135
- __M_writer(u' ')
-
- # Menu for user who is not logged in.
- menu_options = [ [ _("Login"), h.url_for( controller='/user', action='login' ), "galaxy_main" ] ]
- if app.config.allow_user_creation:
- menu_options.append( [ _("Register"), h.url_for( controller='/user', action='create', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
- extra_class = "loggedout-only"
- visible = ( trans.user == None )
- tab( "user", _("User"), None, visible=visible, menu_options=menu_options )
-
- # Menu for user who is logged in.
- if trans.user:
- email = trans.user.email
- else:
- email = ""
- menu_options = [ [ '<a>Logged in as <span id="user-email">%s</span></a>' % email ] ]
- if app.config.use_remote_user:
- if app.config.remote_user_logout_href:
- menu_options.append( [ _('Logout'), app.config.remote_user_logout_href, "_top" ] )
- else:
- menu_options.append( [ _('Preferences'), h.url_for( controller='/user', action='index', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
- menu_options.append( [ 'Custom Builds', h.url_for( controller='/user', action='dbkeys' ), "galaxy_main" ] )
- if app.config.require_login:
- logout_url = h.url_for( controller='/root', action='index', m_c='user', m_a='logout', webapp='galaxy' )
- else:
- logout_url = h.url_for( controller='/user', action='logout', webapp='galaxy' )
- menu_options.append( [ 'Logout', logout_url, "_top" ] )
- menu_options.append( None )
- menu_options.append( [ _('Saved Histories'), h.url_for( controller='/history', action='list' ), "galaxy_main" ] )
- menu_options.append( [ _('Saved Datasets'), h.url_for( controller='/dataset', action='list' ), "galaxy_main" ] )
- menu_options.append( [ _('Saved Pages'), h.url_for( controller='/page', action='list' ), "_top" ] )
- menu_options.append( [ _('API Keys'), h.url_for( controller='/user', action='api_keys', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
- if app.config.use_remote_user:
- menu_options.append( [ _('Public Name'), h.url_for( controller='/user', action='edit_username', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
-
- extra_class = "loggedin-only"
- visible = ( trans.user != None )
- tab( "user", "User", None, visible=visible, menu_options=menu_options )
-
-
- # SOURCE LINE 172
- __M_writer(u'\n \n')
- # SOURCE LINE 176
- __M_writer(u' </ul>\n\n </div>\n </div>\n \n')
- # SOURCE LINE 182
- __M_writer(u' <div class="title">\n <a href="')
- # SOURCE LINE 183
- __M_writer(unicode(h.url_for( app.config.get( 'logo_url', '/' ) )))
- __M_writer(u'">\n <img border="0" src="')
- # SOURCE LINE 184
- __M_writer(unicode(h.url_for('/static/images/galaxyIcon_noText.png')))
- __M_writer(u'">\n Galaxy\n')
- # SOURCE LINE 186
- if app.config.brand:
- # SOURCE LINE 187
- __M_writer(u' <span>/ ')
- __M_writer(unicode(app.config.brand))
- __M_writer(u'</span>\n')
- pass
- # SOURCE LINE 189
- __M_writer(u' </a>\n </div>\n\n')
- # SOURCE LINE 193
- __M_writer(u' ')
-
- bar_style = "quota-meter-bar"
- usage = 0
- percent = 0
- quota = None
- try:
- usage = trans.app.quota_agent.get_usage( trans=trans )
- quota = trans.app.quota_agent.get_quota( trans.user )
- percent = trans.app.quota_agent.get_percent( usage=usage, quota=quota )
- if percent is not None:
- if percent >= 100:
- bar_style += " quota-meter-bar-error"
- elif percent >= 85:
- bar_style += " quota-meter-bar-warn"
- else:
- percent = 0
- except AssertionError:
- pass # Probably no history yet
- tooltip = None
- if not trans.user and quota and trans.app.config.allow_user_creation:
- if trans.app.quota_agent.default_registered_quota is None or trans.app.quota_agent.default_unregistered_quota < trans.app.quota_agent.default_registered_quota:
- tooltip = "Your disk quota is %s. You can increase your quota by registering a Galaxy account." % util.nice_size( quota )
-
-
- # SOURCE LINE 215
- __M_writer(u'\n\n <div class="quota-meter-container">\n')
- # SOURCE LINE 218
- if tooltip:
- # SOURCE LINE 219
- __M_writer(u' <div id="quota-meter" class="quota-meter tooltip" title="')
- __M_writer(unicode(tooltip))
- __M_writer(u'">\n')
- # SOURCE LINE 220
- else:
- # SOURCE LINE 221
- __M_writer(u' <div id="quota-meter" class="quota-meter">\n')
- pass
- # SOURCE LINE 223
- __M_writer(u' <div id="quota-meter-bar" class="')
- __M_writer(unicode(bar_style))
- __M_writer(u'" style="width: ')
- __M_writer(unicode(percent))
- __M_writer(u'px;"></div>\n')
- # SOURCE LINE 224
- if quota is not None:
- # SOURCE LINE 225
- __M_writer(u' <div id="quota-meter-text" class="quota-meter-text">Using ')
- __M_writer(unicode(percent))
- __M_writer(u'%</div>\n')
- # SOURCE LINE 226
- else:
- # SOURCE LINE 227
- __M_writer(u' <div id="quota-meter-text" class="quota-meter-text">Using ')
- __M_writer(unicode(util.nice_size( usage )))
- __M_writer(u'</div>\n')
- pass
- # SOURCE LINE 229
- __M_writer(u' </div>\n </div>\n \n')
- return ''
- finally:
- context.caller_stack._pop_frame()
-
-
-def render_javascripts(context):
- context.caller_stack._push_frame()
- try:
- parent = context.get('parent', UNDEFINED)
- __M_writer = context.writer()
- # SOURCE LINE 6
- __M_writer(u'\n ')
- # SOURCE LINE 7
- __M_writer(unicode(parent.javascripts()))
- __M_writer(u'\n')
- return ''
- finally:
- context.caller_stack._pop_frame()
-
-
-def render_title(context):
- context.caller_stack._push_frame()
- try:
- __M_writer = context.writer()
- # SOURCE LINE 4
- __M_writer(u'Galaxy')
- return ''
- finally:
- context.caller_stack._pop_frame()
-
-
diff -r 95d98a26518349216a335a5860eb370ab74375fd -r 1a56c4b28c6bbaf1b2f1b0efec5fecce7bd454bb templates/webapps/community/base_panels.mako
--- a/templates/webapps/community/base_panels.mako
+++ b/templates/webapps/community/base_panels.mako
@@ -71,7 +71,8 @@
## Help tab.
<%
- menu_options = [
+ menu_options = [
+ [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8081/" ), "_blank" ],
[_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
[_('Tool shed wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/Tool%20Shed" ), "_blank" ],
[_('Galaxy wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
diff -r 95d98a26518349216a335a5860eb370ab74375fd -r 1a56c4b28c6bbaf1b2f1b0efec5fecce7bd454bb templates/webapps/galaxy/base_panels.mako
--- a/templates/webapps/galaxy/base_panels.mako
+++ b/templates/webapps/galaxy/base_panels.mako
@@ -120,7 +120,7 @@
## Help tab.
<%
menu_options = [
- [_('Galaxy Q&A'), app.config.get( "q&a", "http://slyfox.bx.psu.edu:8081/" ), "galaxy_main" ],
+ [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8081/" ), "galaxy_main" ],
[_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
[_('Galaxy Wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
[_('Video tutorials (screencasts)'), app.config.get( "screencasts_url", "http://galaxycast.org" ), "_blank" ],
diff -r 95d98a26518349216a335a5860eb370ab74375fd -r 1a56c4b28c6bbaf1b2f1b0efec5fecce7bd454bb universe_wsgi.ini
--- a/universe_wsgi.ini
+++ /dev/null
@@ -1,753 +0,0 @@
-#
-# Galaxy is configured by default to be useable in a single-user development
-# environment. To tune the application for a multi-user production
-# environment, see the documentation at:
-#
-# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Production%20Server
-#
-
-# Throughout this sample configuration file, except where stated otherwise,
-# uncommented values override the default if left unset, whereas commented
-# values are set to the default value.
-# Examples of many of these options are explained in more detail in the wiki:
-#
-# http://wiki.g2.bx.psu.edu/Admin/Config
-#
-# Config hackers are encouraged to check there before asking for help.
-
-# ---- HTTP Server ----------------------------------------------------------
-
-# Configuration of the internal HTTP server.
-
-[server:main]
-
-# The internal HTTP server to use. Currently only Paste is provided. This
-# option is required.
-use = egg:Paste#http
-
-# The port on which to listen.
-#port = 8080
-
-# The address on which to listen. By default, only listen to localhost (Galaxy
-# will not be accessible over the network). Use '0.0.0.0' to listen on all
-# available network interfaces.
-#host = 127.0.0.1
-
-# Use a threadpool for the web server instead of creating a thread for each
-# request.
-use_threadpool = True
-
-# Number of threads in the web server thread pool.
-#threadpool_workers = 10
-
-# ---- Filters --------------------------------------------------------------
-
-# Filters sit between Galaxy and the HTTP server.
-
-# These filters are disabled by default. They can be enabled with
-# 'filter-with' in the [app:main] section below.
-
-# Define the gzip filter.
-[filter:gzip]
-use = egg:Paste#gzip
-
-# Define the proxy-prefix filter.
-[filter:proxy-prefix]
-use = egg:PasteDeploy#prefix
-prefix = /galaxy
-
-# ---- Galaxy ---------------------------------------------------------------
-
-# Configuration of the Galaxy application.
-
-[app:main]
-
-# -- Application and filtering
-
-# The factory for the WSGI application. This should not be changed.
-paste.app_factory = galaxy.web.buildapp:app_factory
-
-# If not running behind a proxy server, you may want to enable gzip compression
-# to decrease the size of data transferred over the network. If using a proxy
-# server, please enable gzip compression there instead.
-#filter-with = gzip
-
-# If running behind a proxy server and Galaxy is served from a subdirectory,
-# enable the proxy-prefix filter and set the prefix in the
-# [filter:proxy-prefix] section above.
-#filter-with = proxy-prefix
-
-# If proxy-prefix is enabled and you're running more than one Galaxy instance
-# behind one hostname, you will want to set this to the same path as the prefix
-# in the filter above. This value becomes the "path" attribute set in the
-# cookie so the cookies from each instance will not clobber each other.
-#cookie_path = None
-
-# -- Database
-
-# By default, Galaxy uses a SQLite database at 'database/universe.sqlite'. You
-# may use a SQLAlchemy connection string to specify an external database
-# instead. This string takes many options which are explained in detail in the
-# config file documentation.
-#database_connection = sqlite:///./database/universe.sqlite?isolation_level=IMMEDIATE
-
-# If the server logs errors about not having enough database pool connections,
-# you will want to increase these values, or consider running more Galaxy
-# processes.
-#database_engine_option_pool_size = 5
-#database_engine_option_max_overflow = 10
-
-# If using MySQL and the server logs the error "MySQL server has gone away",
-# you will want to set this to some positive value (7200 should work).
-#database_engine_option_pool_recycle = -1
-
-# If large database query results are causing memory or response time issues in
-# the Galaxy process, leave the result on the server instead. This option is
-# only available for PostgreSQL and is highly recommended.
-#database_engine_option_server_side_cursors = False
-
-# Create only one connection to the database per thread, to reduce the
-# connection overhead. Recommended when not using SQLite:
-#database_engine_option_strategy = threadlocal
-
-# Log all database transactions, can be useful for debugging and performance
-# profiling. Logging is done via Python's 'logging' module under the qualname
-# 'galaxy.model.orm.logging_connection_proxy'
-#database_query_profiling_proxy = False
-
-# -- Files and directories
-
-# Path where genome builds are stored. This defaults to tool-data/genome
-#genome_data_path = tool-data/genome
-
-# URL for rsync server to download pre-built indexes.
-#rsync_url = rsync://scofield.bx.psu.edu/indexes
-
-# Dataset files are stored in this directory.
-#file_path = database/files
-
-# Temporary files are stored in this directory.
-#new_file_path = database/tmp
-
-# Tool config files, defines what tools are available in Galaxy.
-# Tools can be locally developed or installed from Galaxy tool sheds.
-#tool_config_file = tool_conf.xml,shed_tool_conf.xml
-
-# Default path to the directory containing the tools defined in tool_conf.xml.
-# Other tool config files must include the tool_path as an attribute in the <toolbox> tag.
-#tool_path = tools
-
-# Path to the directory in which managed tool dependencies are placed. To use
-# the dependency system, see the documentation at:
-# http://wiki.g2.bx.psu.edu/Admin/Config/Tool%20Dependencies
-#tool_dependency_dir = None
-
-# Enable automatic polling of relative tool sheds to see if any updates
-# are available for installed repositories. Ideally only one Galaxy
-# server process should be able to check for repository updates. The
-# setting for hours_between_check should be an integer between 1 and 24.
-#enable_tool_shed_check = False
-#hours_between_check = 12
-
-# Directory where data used by tools is located, see the samples in that
-# directory and the wiki for help:
-# http://wiki.g2.bx.psu.edu/Admin/Data%20Integration
-#tool_data_path = tool-data
-
-# Directory where chrom len files are kept, currently mainly used by trackster
-#len_file_path = tool-data/shared/ucsc/chrom
-
-# Datatypes config file, defines what data (file) types are available in
-# Galaxy.
-#datatypes_config_file = datatypes_conf.xml
-
-# Each job is given a unique empty directory as its current working directory.
-# This option defines in what parent directory those directories will be
-# created.
-#job_working_directory = database/job_working_directory
-
-# If using a cluster, Galaxy will write job scripts and stdout/stderr to this
-# directory.
-#cluster_files_directory = database/pbs
-
-# External service types config file, defines what types of external_services configurations
-# are available in Galaxy.
-#external_service_type_config_file = external_service_types_conf.xml
-
-# Path to the directory containing the external_service_types defined in the config.
-#external_service_type_path = external_service_types
-
-# Tools with a number of outputs not known until runtime can write these
-# outputs to a directory for collection by Galaxy when the job is done.
-# Previously, this directory was new_file_path, but using one global directory
-# can cause performance problems, so using job_working_directory ('.' or cwd
-# when a job is run) is encouraged. By default, both are checked to avoid
-# breaking existing tools.
-#collect_outputs_from = new_file_path,job_working_directory
-
-# -- Mail and notification
-
-# Galaxy sends mail for various things: Subscribing users to the mailing list
-# if they request it, emailing password resets, notification from the Galaxy
-# Sample Tracking system, and reporting dataset errors. To do this, it needs
-# to send mail through an SMTP server, which you may define here (host:port).
-# Galaxy will automatically try STARTTLS but will continue upon failure.
-#smtp_server = None
-
-# If your SMTP server requires a username and password, you can provide them
-# here (password in cleartext here, but if your server supports STARTTLS it
-# will be sent over the network encrypted).
-#smtp_username = None
-#smtp_password = None
-
-# On the user registration form, users may choose to join the mailing list.
-# This is the address of the list they'll be subscribed to.
-#mailing_join_addr = galaxy-announce-join(a)bx.psu.edu
-
-# Datasets in an error state include a link to report the error. Those reports
-# will be sent to this address. Error reports are disabled if no address is set.
-#error_email_to = None
-
-# -- Display sites
-
-# Galaxy can display data at various external browsers. These options specify
-# which browsers should be available. URLs and builds available at these
-# browsers are defined in the specifield files.
-
-# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt
-#ucsc_display_sites = main,test,archaea,ucla
-
-# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt
-#gbrowse_display_sites = modencode,sgd_yeast,tair,wormbase,wormbase_ws120,wormbase_ws140,wormbase_ws170,wormbase_ws180,wormbase_ws190,wormbase_ws200,wormbase_ws204,wormbase_ws210,wormbase_ws220,wormbase_ws225
-
-# GeneTrack servers: tool-data/shared/genetrack/genetrack_sites.txt
-#genetrack_display_sites = main,test
-
-# If use_remote_user = True, display application servers will be denied access
-# to Galaxy and so displaying datasets in these sites will fail.
-# display_servers contains a list of hostnames which should be allowed to
-# bypass security to display datasets. Please be aware that there are security
-# implications if this is allowed. More details (including required changes to
-# the proxy server config) are available in the Apache proxy documentation on
-# the wiki.
-#
-# The list of servers in this sample config are for the UCSC Main, Test and
-# Archaea browsers, but the default if left commented is to not allow any
-# display sites to bypass security (you must uncomment the line below to allow
-# them).
-#display_servers = hgw1.cse.ucsc.edu,hgw2.cse.ucsc.edu,hgw3.cse.ucsc.edu,hgw4.cse.ucsc.edu,hgw…
-
-# -- Next gen LIMS interface on top of existing Galaxy Sample/Request management code.
-
-use_nglims = False
-nglims_config_file = tool-data/nglims.yaml
-
-# -- UI Localization
-
-# Append "/{brand}" to the "Galaxy" text in the masthead.
-#brand = None
-
-# The URL linked by the "Galaxy/brand" text.
-#logo_url = /
-
-# The URL linked by the "Galaxy Wiki" link in the "Help" menu.
-#wiki_url = http://wiki.g2.bx.psu.edu/
-
-# The URL linked by the "Support" link in the "Help" menu.
-#support_url = http://wiki.g2.bx.psu.edu/Support
-
-# The URL linked by the "How to Cite..." link in the "Help" menu.
-#citation_url = http://wiki.g2.bx.psu.edu/Citing%20Galaxy
-
-# The URL linked by the "Terms and Conditions" link in the "Help" menu, as well
-# as on the user registration and login forms.
-#terms_url = None
-
-# The URL linked by the "Galaxy Q&A" link in the "Help" menu
-qa_url = http://slyfox.bx.psu.edu:8080/
-
-# Serve static content, which must be enabled if you're not serving it via a
-# proxy server. These options should be self explanatory and so are not
-# documented individually. You can use these paths (or ones in the proxy
-# server) to point to your own styles.
-static_enabled = True
-static_cache_time = 360
-static_dir = %(here)s/static/
-static_images_dir = %(here)s/static/images
-static_favicon_dir = %(here)s/static/favicon.ico
-static_scripts_dir = %(here)s/static/scripts/
-static_style_dir = %(here)s/static/june_2007_style/blue
-static_robots_txt = %(here)s/static/robots.txt
-
-# Pack javascript at launch (/static/scripts/*.js)
-# This only happens if the modified timestamp of the source .js is newer
-# than the version (if it exists) in /static/scripts/packed/
-# Note that this requires java > 1.4 for executing yuicompressor.jar
-#pack_scripts = False
-
-# Enable Cloud Launch
-
-#enable_cloud_launch = False
-
-# -- Advanced proxy features
-
-# For help on configuring the Advanced proxy features, see:
-# http://usegalaxy.org/production
-
-# Apache can handle file downloads (Galaxy-to-user) via mod_xsendfile. Set
-# this to True to inform Galaxy that mod_xsendfile is enabled upstream.
-#apache_xsendfile = False
-
-# The same download handling can be done by nginx using X-Accel-Redirect. This
-# should be set to the path defined in the nginx config as an internal redirect
-# with access to Galaxy's data files (see documentation linked above).
-#nginx_x_accel_redirect_base = False
-
-# nginx can make use of mod_zip to create zip files containing multiple library
-# files. If using X-Accel-Redirect, this can be the same value as that option.
-#nginx_x_archive_files_base = False
-
-# If using compression in the upstream proxy server, use this option to disable
-# gzipping of library .tar.gz and .zip archives, since the proxy server will do
-# it faster on the fly.
-#upstream_gzip = False
-
-# nginx can also handle file uploads (user-to-Galaxy) via nginx_upload_module.
-# Configuration for this is complex and explained in detail in the
-# documentation linked above. The upload store is a temporary directory in
-# which files uploaded by the upload module will be placed.
-#nginx_upload_store = False
-
-# This value overrides the action set on the file upload form, e.g. the web
-# path where the nginx_upload_module has been configured to intercept upload
-# requests.
-#nginx_upload_path = False
-
-# -- Logging and Debugging
-
-# Verbosity of console log messages. Acceptable values can be found here:
-# http://docs.python.org/library/logging.html#logging-levels
-#log_level = DEBUG
-
-# Print database operations to the server log (warning, quite verbose!).
-#database_engine_option_echo = False
-
-# Print database pool operations to the server log (warning, quite verbose!).
-#database_engine_option_echo_pool = False
-
-# Turn on logging of application events and some user events to the database.
-#log_events = True
-
-# Turn on logging of user actions to the database. Actions currently logged are
-# grid views, tool searches, and use of "recently" used tools menu. The
-# log_events and log_actions functionality will eventually be merged.
-#log_actions = True
-
-# Sanitize All HTML Tool Output
-# By default, all tool output served as 'text/html' will be sanitized
-# thoroughly. This can be disabled if you have special tools that require
-# unaltered output.
-#sanitize_all_html = True
-
-# Debug enables access to various config options useful for development and
-# debugging: use_lint, use_profile, use_printdebug and use_interactive. It
-# also causes the files used by PBS/SGE (submission script, output, and error)
-# to remain on disk after the job is complete. Debug mode is disabled if
-# commented, but is uncommented by default in the sample config.
-debug = True
-
-# Check for WSGI compliance.
-#use_lint = False
-
-# Run the Python profiler on each request.
-#use_profile = False
-
-# Intercept print statements and show them on the returned page.
-#use_printdebug = True
-
-# Enable live debugging in your browser. This should NEVER be enabled on a
-# public site. Enabled in the sample config for development.
-use_interactive = True
-
-# Write thread status periodically to 'heartbeat.log', (careful, uses disk
-# space rapidly!). Useful to determine why your processes may be consuming a
-# lot of CPU.
-#use_heartbeat = False
-
-# Enable the memory debugging interface (careful, negatively impacts server
-# performance).
-#use_memdump = False
-
-# -- Data Libraries
-
-# These library upload options are described in much more detail in the wiki:
-# http://wiki.g2.bx.psu.edu/Admin/Data%20Libraries/Uploading%20Library%20Files
-
-# Add an option to the library upload form which allows administrators to
-# upload a directory of files.
-#library_import_dir = None
-
-# Add an option to the library upload form which allows authorized
-# non-administrators to upload a directory of files. The configured directory
-# must contain sub-directories named the same as the non-admin user's Galaxy
-# login ( email ). The non-admin user is restricted to uploading files or
-# sub-directories of files contained in their directory.
-#user_library_import_dir = None
-
-# Add an option to the admin library upload tool allowing admins to paste
-# filesystem paths to files and directories in a box, and these paths will be
-# added to a library. Set to True to enable. Please note the security
-# implication that this will give Galaxy Admins access to anything your Galaxy
-# user has access to.
-#allow_library_path_paste = False
-
-# Users may choose to download multiple files from a library in an archive. By
-# default, Galaxy allows users to select from a few different archive formats
-# if testing shows that Galaxy is able to create files using these formats.
-# Specific formats can be disabled with this option, separate more than one
-# format with commas. Available formats are currently 'zip', 'gz', and 'bz2'.
-#disable_library_comptypes =
-
-# Some sequencer integration features in beta allow you to automatically
-# transfer datasets. This is done using a lightweight transfer manager which
-# runs outside of Galaxy (but is spawned by it automatically). Galaxy will
-# communicate with this manager over the port specified here.
-#transfer_manager_port = 8163
-
-# Search data libraries with whoosh
-#enable_whoosh_library_search = True
-# Whoosh indexes are stored in this directory.
-#whoosh_index_dir = database/whoosh_indexes
-
-# Search data libraries with lucene
-#enable_lucene_library_search = False
-# maxiumum file size to index for searching, in MB
-#fulltext_max_size = 500
-#fulltext_noindex_filetypes=bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger
-# base URL of server providing search functionality using lucene
-#fulltext_url = http://localhost:8081
-
-# -- Users and Security
-
-# Galaxy encodes various internal values when these values will be output in
-# some format (for example, in a URL or cookie). You should set a key to be
-# used by the algorithm that encodes and decodes these values. It can be any
-# string. If left unchanged, anyone could construct a cookie that would grant
-# them access to others' sessions.
-#id_secret = USING THE DEFAULT IS NOT SECURE!
-
-# User authentication can be delegated to an upstream proxy server (usually
-# Apache). The upstream proxy should set a REMOTE_USER header in the request.
-# Enabling remote user disables regular logins. For more information, see:
-# http://wiki.g2.bx.psu.edu/Admin/Config/Apache%20Proxy
-#use_remote_user = False
-
-# If use_remote_user is enabled and your external authentication
-# method just returns bare usernames, set a default mail domain to be appended
-# to usernames, to become your Galaxy usernames (email addresses).
-#remote_user_maildomain = None
-
-# If use_remote_user is enabled, you can set this to a URL that will log your
-# users out.
-#remote_user_logout_href = None
-
-# Administrative users - set this to a comma-separated list of valid Galaxy
-# users (email addresses). These users will have access to the Admin section
-# of the server, and will have access to create users, groups, roles,
-# libraries, and more. For more information, see:
-# http://wiki.g2.bx.psu.edu/Admin/Interface
-#admin_users = None
-
-# Force everyone to log in (disable anonymous access).
-#require_login = False
-
-# Allow unregistered users to create new accounts (otherwise, they will have to
-# be created by an admin).
-#allow_user_creation = True
-
-# Allow administrators to delete accounts.
-#allow_user_deletion = False
-
-# Allow administrators to log in as other users (useful for debugging)
-#allow_user_impersonation = False
-
-# Allow users to remove their datasets from disk immediately (otherwise,
-# datasets will be removed after a time period specified by an administrator in
-# the cleanup scripts run via cron)
-#allow_user_dataset_purge = False
-
-# By default, users' data will be public, but setting this to True will cause
-# it to be private. Does not affect existing users and data, only ones created
-# after this option is set. Users may still change their default back to
-# public.
-#new_user_dataset_access_role_default_private = False
-
-# -- Beta features
-
-# Object store mode (valid options are: disk, s3, swift, distributed, hierarchical)
-#object_store = disk
-#os_access_key = <your cloud object store access key>
-#os_secret_key = <your cloud object store secret key>
-#os_bucket_name = <name of an existing object store bucket or container>
-# If using 'swift' object store, you must specify the following connection properties
-#os_host = swift.rc.nectar.org.au
-#os_port = 8888
-#os_is_secure = False
-#os_conn_path = /
-# Reduced redundancy can be used only with the 's3' object store
-#os_use_reduced_redundancy = False
-# Size (in GB) that the cache used by object store should be limited to.
-# If the value is not specified, the cache size will be limited only by the
-# file system size. The file system location of the cache is considered the
-# configuration of the ``file_path`` directive defined above.
-#object_store_cache_size = 100
-
-# Configuration file for the distributed object store, if object_store =
-# distributed. See the sample at distributed_object_store_conf.xml.sample
-#distributed_object_store_config_file = None
-
-# Enable Galaxy to communicate directly with a sequencer
-#enable_sequencer_communication = False
-
-# Enable authentication via OpenID. Allows users to log in to their Galaxy
-# account by authenticating with an OpenID provider.
-#enable_openid = False
-#openid_config_file = openid_conf.xml
-
-# Optional list of email addresses of API users who can make calls on behalf of
-# other users
-#api_allow_run_as = None
-
-# Enable tool tags (associating tools with tags). This has its own option
-# since its implementation has a few performance implications on startup for
-# large servers.
-#enable_tool_tags = False
-
-# Enable a feature when running workflows. When enabled, default datasets
-# are selected for "Set at Runtime" inputs from the history such that the
-# same input will not be selected twice, unless there are more inputs than
-# compatible datasets in the history.
-# When False, the most recently added compatible item in the history will
-# be used for each "Set at Runtime" input, independent of others in the Workflow
-#enable_unique_workflow_defaults = False
-
-# The URL to the myExperiment instance being used (omit scheme but include port)
-#myexperiment_url = www.myexperiment.org:80
-
-# Enable Galaxy's "Upload via FTP" interface. You'll need to install and
-# configure an FTP server (we've used ProFTPd since it can use Galaxy's
-# database for authentication) and set the following two options.
-
-# This should point to a directory containing subdirectories matching users'
-# email addresses, where Galaxy will look for files.
-#ftp_upload_dir = None
-
-# This should be the hostname of your FTP server, which will be provided to
-# users in the help text.
-#ftp_upload_site = None
-
-# Enable enforcement of quotas. Quotas can be set from the Admin interface.
-#enable_quotas = False
-
-# Enable a feature when running workflows. When enabled, default datasets
-# are selected for "Set at Runtime" inputs from the history such that the
-# same input will not be selected twice, unless there are more inputs than
-# compatible datasets in the history.
-# When False, the most recently added compatible item in the history will
-# be used for each "Set at Runtime" input, independent of others in the Workflow
-#enable_unique_workflow_defaults = False
-
-# -- Job Execution
-
-# To increase performance of job execution and the web interface, you can
-# separate Galaxy into multiple processes. There are more than one way to do
-# this, and they are explained in detail in the documentation:
-#
-# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Web%20Application%20Scal…
-#
-# By default, Galaxy manages and executes jobs from within a single process and
-# notifies itself of new jobs via in-memory queues. If you change job_manager
-# and job_handlers from their default values, notification will instead be done
-# using the `state` and `handler` columns of the job table in the database.
-
-# Identify the server_name (the string following server: at the top of this
-# file) which should be designated as the job manager (only one):
-#job_manager = main
-
-# Identify the server_name(s) which should be designated as job handlers
-# (responsible for starting, tracking, finishing, and cleaning up jobs) as a
-# comma-separated list.
-#job_handlers = main
-
-# By default, a handler from job_handlers will be selected at random if the
-# tool to run does specify a handler below in [galaxy:tool_handlers]. If you
-# want certain handlers to only handle jobs for tools/params explicitly
-# assigned below, use default_job_handlers to specify which handlers should be
-# used for jobs without explicit handlers.
-#default_job_handlers = main
-
-# This enables splitting of jobs into tasks, if specified by the particular tool config.
-# This is a new feature and not recommended for production servers yet.
-#use_tasked_jobs = False
-#local_task_queue_workers = 2
-
-# Enable job recovery (if Galaxy is restarted while cluster jobs are running,
-# it can "recover" them when it starts). This is not safe to use if you are
-# running more than one Galaxy server using the same database.
-#enable_job_recovery = True
-
-# Setting metadata on job outputs to in a separate process (or if using a
-# cluster, on the cluster). Thanks to Python's Global Interpreter Lock and the
-# hefty expense that setting metadata incurs, your Galaxy process may become
-# unresponsive when this operation occurs internally.
-#set_metadata_externally = False
-
-# Although it is fairly reliable, setting metadata can occasionally fail. In
-# these instances, you can choose to retry setting it internally or leave it in
-# a failed state (since retrying internally may cause the Galaxy process to be
-# unresponsive). If this option is set to False, the user will be given the
-# option to retry externally, or set metadata manually (when possible).
-#retry_metadata_internally = True
-
-# If (for example) you run on a cluster and your datasets (by default,
-# database/files/) are mounted read-only, this option will override tool output
-# paths to write outputs to the working directory instead, and the job manager
-# will move the outputs to their proper place in the dataset directory on the
-# Galaxy server after the job completes.
-#outputs_to_working_directory = False
-
-# If your network filesystem's caching prevents the Galaxy server from seeing
-# the job's stdout and stderr files when it completes, you can retry reading
-# these files. The job runner will retry the number of times specified below,
-# waiting 1 second between tries. For NFS, you may want to try the -noac mount
-# option (Linux) or -actimeo=0 (Solaris).
-#retry_job_output_collection = 0
-
-# Clean up various bits of jobs left on the filesystem after completion. These
-# bits include the job working directory, external metadata temporary files,
-# and DRM stdout and stderr files (if using a DRM). Possible values are:
-# always, onsuccess, never
-#cleanup_job = always
-
-# Number of concurrent jobs to run (local job runner)
-#local_job_queue_workers = 5
-
-# Jobs can be killed after a certain amount of execution time. Format is in
-# hh:mm:ss. Currently only implemented for PBS.
-#job_walltime = None
-
-# Jobs can be killed if any of their outputs grow over a certain size (in
-# bytes). 0 for no limit.
-#output_size_limit = 0
-
-# Jobs can be held back from submission to a runner if a user already has more
-# jobs queued or running than the number specified below. This prevents a
-# single user from stuffing the queue and preventing other users from being
-# able to run jobs.
-#user_job_limit = None
-
-# Clustering Galaxy is not a straightforward process and requires some
-# pre-configuration. See the the wiki before attempting to set any of these
-# options:
-# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Cluster
-
-# Comma-separated list of job runners to start. local is always started. If
-# left commented, no jobs will be run on the cluster, even if a cluster URL is
-# explicitly defined in the [galaxy:tool_runners] section below. The runners
-# currently available are 'pbs' and 'drmaa'.
-#start_job_runners = None
-
-# For sites where all users in Galaxy match users on the system on which Galaxy
-# runs, the DRMAA job runner can be configured to submit jobs to the DRM as the
-# actual user instead of as the user running the Galaxy server process. For
-# details on these options, see the documentation at:
-#
-# http://galaxyproject.org/wiki/Admin/Config/Performance/Cluster
-#
-#drmaa_external_runjob_script = scripts/drmaa_external_runner.py
-#drmaa_external_killjob_script = scripts/drmaa_external_killer.py
-#external_chown_script = scripts/external_chown_script.py
-
-# File to source to set up the environment when running jobs. By default, the
-# environment in which the Galaxy server starts is used when running jobs
-# locally, and the environment set up per the DRM's submission method and
-# policy is used when running jobs on a cluster (try testing with `qsub` on the
-# command line). environment_setup_file can be set to the path of a file on
-# the cluster that should be sourced by the user to set up the environment
-# prior to running tools. This can be especially useful for running jobs as
-# the actual user, to remove the need to configure each user's environment
-# individually. This only affects cluster jobs, not local jobs.
-#environment_setup_file = None
-
-# The URL for the default runner to use when a tool doesn't explicitly define a
-# runner below.
-#default_cluster_job_runner = local:///
-
-# The cluster runners have their own thread pools used to prepare and finish
-# jobs (so that these sometimes lengthy operations do not block normal queue
-# operation). The value here is the number of worker threads available to each
-# started runner.
-#cluster_job_queue_workers = 3
-
-# These options are only used when using file staging with PBS.
-#pbs_application_server =
-#pbs_stage_path =
-#pbs_dataset_server =
-
-# This option allows users to see the full path of datasets via the "View
-# Details" option in the history. Administrators can always see this.
-#expose_dataset_path = False
-
-# ---- Per-Tool Job Management ----------------------------------------------
-
-# Per-tool job handler and runner overrides. Parameters can be included to define multiple
-# runners per tool. E.g. to run Cufflinks jobs initiated from Trackster
-# differently than standard Cufflinks jobs:
-#
-# cufflinks = local:///
-# cufflinks[source@trackster] = local:///
-
-[galaxy:tool_handlers]
-
-# By default, Galaxy will select a handler at random from the list of
-# job_handlers set above. You can override as in the following examples:
-#
-#upload1 = upload_handler
-#cufflinks[source@trackster] = realtime_handler
-
-[galaxy:tool_runners]
-
-# If not listed here, a tool will run with the runner defined with
-# default_cluster_job_runner. These overrides for local:/// are done because
-# these tools can fetch data from remote sites, which may not be suitable to
-# run on a cluster (if it does not have access to the Internet, for example).
-
-biomart = local:///
-encode_db1 = local:///
-hbvar = local:///
-microbial_import1 = local:///
-ucsc_table_direct1 = local:///
-ucsc_table_direct_archaea1 = local:///
-ucsc_table_direct_test1 = local:///
-upload1 = local:///
-
-# ---- Galaxy Message Queue -------------------------------------------------
-
-# Galaxy uses AMQ protocol to receive messages from external sources like
-# bar code scanners. Galaxy has been tested against RabbitMQ AMQP implementation.
-# For Galaxy to receive messages from a message queue the RabbitMQ server has
-# to be set up with a user account and other parameters listed below. The 'host'
-# and 'port' fields should point to where the RabbitMQ server is running.
-
-[galaxy_amqp]
-
-#host = 127.0.0.1
-#port = 5672
-#userid = galaxy
-#password = galaxy
-#virtual_host = galaxy_messaging_engine
-#queue = galaxy_queue
-#exchange = galaxy_exchange
-#routing_key = bar_code_scanner
-#rabbitmqctl_path = /path/to/rabbitmqctl
-
diff -r 95d98a26518349216a335a5860eb370ab74375fd -r 1a56c4b28c6bbaf1b2f1b0efec5fecce7bd454bb universe_wsgi.ini.sample
--- a/universe_wsgi.ini.sample
+++ b/universe_wsgi.ini.sample
@@ -263,6 +263,9 @@
# as on the user registration and login forms.
#terms_url = None
+# The URL linked by the "Galaxy Q&A" link in the "Help" menu
+qa_url = http://slyfox.bx.psu.edu:8080/
+
# Serve static content, which must be enabled if you're not serving it via a
# proxy server. These options should be self explanatory and so are not
# documented individually. You can use these paths (or ones in the proxy
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: rmarenco: When asking to create a new post from galaxy tool form, tag is automatically fulfilled with the name of the tool + Added the url as global variable in unverse
by Bitbucket 06 Sep '12
by Bitbucket 06 Sep '12
06 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/95d98a265183/
changeset: 95d98a265183
user: rmarenco
date: 2012-09-07 02:55:35
summary: When asking to create a new post from galaxy tool form, tag is automatically fulfilled with the name of the tool + Added the url as global variable in unverse
affected #: 3 files
diff -r 2f684dfa8d474560f241388bbb1fec5c612eca75 -r 95d98a26518349216a335a5860eb370ab74375fd database/compiled_templates/webapps/galaxy/base_panels.mako.py
--- /dev/null
+++ b/database/compiled_templates/webapps/galaxy/base_panels.mako.py
@@ -0,0 +1,415 @@
+# -*- encoding:ascii -*-
+from mako import runtime, filters, cache
+UNDEFINED = runtime.UNDEFINED
+__M_dict_builtin = dict
+__M_locals_builtin = locals
+_magic_number = 6
+_modified_time = 1346972736.51736
+_template_filename=u'templates/webapps/galaxy/base_panels.mako'
+_template_uri=u'/webapps/galaxy/base_panels.mako'
+_template_cache=cache.Cache(__name__, _modified_time)
+_source_encoding='ascii'
+_exports = ['masthead', 'javascripts', 'title']
+
+
+def _mako_get_namespace(context, name):
+ try:
+ return context.namespaces[(__name__, name)]
+ except KeyError:
+ _mako_generate_namespaces(context)
+ return context.namespaces[(__name__, name)]
+def _mako_generate_namespaces(context):
+ pass
+def _mako_inherit(template, context):
+ _mako_generate_namespaces(context)
+ return runtime._inherit_from(context, u'/base_panels.mako', _template_uri)
+def render_body(context,**pageargs):
+ context.caller_stack._push_frame()
+ try:
+ __M_locals = __M_dict_builtin(pageargs=pageargs)
+ __M_writer = context.writer()
+ # SOURCE LINE 1
+ __M_writer(u'\n\n')
+ # SOURCE LINE 4
+ __M_writer(u'\n\n')
+ # SOURCE LINE 8
+ __M_writer(u'\n\n')
+ # SOURCE LINE 232
+ __M_writer(u'\n')
+ return ''
+ finally:
+ context.caller_stack._pop_frame()
+
+
+def render_masthead(context):
+ context.caller_stack._push_frame()
+ try:
+ AssertionError = context.get('AssertionError', UNDEFINED)
+ h = context.get('h', UNDEFINED)
+ app = context.get('app', UNDEFINED)
+ util = context.get('util', UNDEFINED)
+ def tab(id,display,href,target='_parent',visible=True,extra_class='',menu_options=None):
+ context.caller_stack._push_frame()
+ try:
+ self = context.get('self', UNDEFINED)
+ len = context.get('len', UNDEFINED)
+ __M_writer = context.writer()
+ # SOURCE LINE 19
+ __M_writer(u'\n')
+ # SOURCE LINE 22
+ __M_writer(u' \n ')
+ # SOURCE LINE 23
+
+ cls = ""
+ a_cls = ""
+ extra = ""
+ if extra_class:
+ cls += " " + extra_class
+ if self.active_view == id:
+ cls += " active"
+ if menu_options:
+ cls += " dropdown"
+ a_cls += " dropdown-toggle"
+ extra = "<b class='caret'></b>"
+ style = ""
+ if not visible:
+ style = "display: none;"
+
+
+ # SOURCE LINE 38
+ __M_writer(u'\n <li class="')
+ # SOURCE LINE 39
+ __M_writer(unicode(cls))
+ __M_writer(u'" style="')
+ __M_writer(unicode(style))
+ __M_writer(u'">\n')
+ # SOURCE LINE 40
+ if href:
+ # SOURCE LINE 41
+ __M_writer(u' <a class="')
+ __M_writer(unicode(a_cls))
+ __M_writer(u'" data-toggle="dropdown" target="')
+ __M_writer(unicode(target))
+ __M_writer(u'" href="')
+ __M_writer(unicode(href))
+ __M_writer(u'">')
+ __M_writer(unicode(display))
+ __M_writer(unicode(extra))
+ __M_writer(u'</a>\n')
+ # SOURCE LINE 42
+ else:
+ # SOURCE LINE 43
+ __M_writer(u' <a class="')
+ __M_writer(unicode(a_cls))
+ __M_writer(u'" data-toggle="dropdown">')
+ __M_writer(unicode(display))
+ __M_writer(unicode(extra))
+ __M_writer(u'</a>\n')
+ pass
+ # SOURCE LINE 45
+ if menu_options:
+ # SOURCE LINE 46
+ __M_writer(u' <ul class="dropdown-menu">\n')
+ # SOURCE LINE 47
+ for menu_item in menu_options:
+ # SOURCE LINE 48
+ if not menu_item:
+ # SOURCE LINE 49
+ __M_writer(u' <li class="divider"></li>\n')
+ # SOURCE LINE 50
+ else:
+ # SOURCE LINE 51
+ __M_writer(u' <li>\n')
+ # SOURCE LINE 52
+ if len ( menu_item ) == 1:
+ # SOURCE LINE 53
+ __M_writer(u' ')
+ __M_writer(unicode(menu_item[0]))
+ __M_writer(u'\n')
+ # SOURCE LINE 54
+ elif len ( menu_item ) == 2:
+ # SOURCE LINE 55
+ __M_writer(u' ')
+ name, link = menu_item
+
+ __M_writer(u'\n <a href="')
+ # SOURCE LINE 56
+ __M_writer(unicode(link))
+ __M_writer(u'">')
+ __M_writer(unicode(name))
+ __M_writer(u'</a>\n')
+ # SOURCE LINE 57
+ else:
+ # SOURCE LINE 58
+ __M_writer(u' ')
+ name, link, target = menu_item
+
+ __M_writer(u'\n <a target="')
+ # SOURCE LINE 59
+ __M_writer(unicode(target))
+ __M_writer(u'" href="')
+ __M_writer(unicode(link))
+ __M_writer(u'">')
+ __M_writer(unicode(name))
+ __M_writer(u'</a>\n')
+ pass
+ # SOURCE LINE 61
+ __M_writer(u' </li>\n')
+ pass
+ pass
+ # SOURCE LINE 64
+ __M_writer(u' </ul>\n')
+ pass
+ # SOURCE LINE 66
+ __M_writer(u' </li>\n ')
+ return ''
+ finally:
+ context.caller_stack._pop_frame()
+ trans = context.get('trans', UNDEFINED)
+ _ = context.get('_', UNDEFINED)
+ __M_writer = context.writer()
+ # SOURCE LINE 11
+ __M_writer(u'\n\n')
+ # SOURCE LINE 14
+ __M_writer(u' <div style="position: relative; right: -50%; float: left;">\n <div style="display: block; position: relative; right: 50%;">\n\n <ul class="nav" border="0" cellspacing="0">\n \n ')
+ # SOURCE LINE 67
+ __M_writer(u'\n\n')
+ # SOURCE LINE 70
+ __M_writer(u' ')
+ __M_writer(unicode(tab( "analysis", _("Analyze Data"), h.url_for( controller='/root', action='index' ) )))
+ __M_writer(u'\n \n')
+ # SOURCE LINE 73
+ __M_writer(u' ')
+ __M_writer(unicode(tab( "workflow", _("Workflow"), h.url_for( controller='/workflow', action='index' ) )))
+ __M_writer(u'\n \n')
+ # SOURCE LINE 76
+ __M_writer(u' ')
+
+ menu_options = [
+ [ _('Data Libraries'), h.url_for( controller='/library', action='index') ],
+ None,
+ [ _('Published Histories'), h.url_for( controller='/history', action='list_published' ) ],
+ [ _('Published Workflows'), h.url_for( controller='/workflow', action='list_published' ) ],
+ [ _('Published Visualizations'), h.url_for( controller='/visualization', action='list_published' ) ],
+ [ _('Published Pages'), h.url_for( controller='/page', action='list_published' ) ]
+ ]
+ tab( "shared", _("Shared Data"), h.url_for( controller='/library', action='index'), menu_options=menu_options )
+
+
+ # SOURCE LINE 86
+ __M_writer(u'\n \n')
+ # SOURCE LINE 89
+ __M_writer(u' ')
+
+ menu_options = [
+ [ _('Sequencing Requests'), h.url_for( controller='/requests', action='index' ) ],
+ [ _('Find Samples'), h.url_for( controller='/requests', action='find_samples_index' ) ],
+ [ _('Help'), app.config.get( "lims_doc_url", "http://main.g2.bx.psu.edu/u/rkchak/p/sts" ), "galaxy_main" ]
+ ]
+ tab( "lab", "Lab", None, menu_options=menu_options, visible=( trans.user and ( trans.user.requests or trans.app.security_agent.get_accessible_request_types( trans, trans.user ) ) ) )
+
+
+ # SOURCE LINE 96
+ __M_writer(u'\n\n')
+ # SOURCE LINE 99
+ __M_writer(u' ')
+
+ menu_options = [
+ [_('New Visualization'), h.url_for( controller='/tracks', action='index' ) ],
+ [_('Saved Visualizations'), h.url_for( controller='/visualization', action='list' ) ]
+ ]
+ tab( "visualization", _("Visualization"), h.url_for( controller='/visualization', action='list'), menu_options=menu_options )
+
+
+ # SOURCE LINE 105
+ __M_writer(u'\n\n')
+ # SOURCE LINE 108
+ if app.config.get_bool( 'enable_cloud_launch', False ):
+ # SOURCE LINE 109
+ __M_writer(u' ')
+
+ menu_options = [
+ [_('New Cloud Cluster'), h.url_for( controller='/cloudlaunch', action='index' ) ],
+ ]
+ tab( "cloud", _("Cloud"), h.url_for( controller='/cloudlaunch', action='index'), menu_options=menu_options )
+
+
+ # SOURCE LINE 114
+ __M_writer(u'\n')
+ pass
+ # SOURCE LINE 116
+ __M_writer(u'\n')
+ # SOURCE LINE 118
+ __M_writer(u' ')
+ __M_writer(unicode(tab( "admin", "Admin", h.url_for( controller='/admin', action='index' ), extra_class="admin-only", visible=( trans.user and app.config.is_admin_user( trans.user ) ) )))
+ __M_writer(u'\n \n')
+ # SOURCE LINE 121
+ __M_writer(u' ')
+
+ menu_options = [
+ [_('Galaxy Q&A'), app.config.get( "qa_url", "http://slyfox.bx.psu.edu:8080/" ), "galaxy_main" ],
+ [_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
+ [_('Galaxy Wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
+ [_('Video tutorials (screencasts)'), app.config.get( "screencasts_url", "http://galaxycast.org" ), "_blank" ],
+ [_('How to Cite Galaxy'), app.config.get( "citation_url", "http://wiki.g2.bx.psu.edu/Citing%20Galaxy" ), "_blank" ]
+ ]
+ if app.config.get( 'terms_url', None ) is not None:
+ menu_options.append( [_('Terms and Conditions'), app.config.get( 'terms_url', None ), '_blank'] )
+ tab( "help", _("Help"), None, menu_options=menu_options)
+
+
+ # SOURCE LINE 132
+ __M_writer(u'\n \n')
+ # SOURCE LINE 135
+ __M_writer(u' ')
+
+ # Menu for user who is not logged in.
+ menu_options = [ [ _("Login"), h.url_for( controller='/user', action='login' ), "galaxy_main" ] ]
+ if app.config.allow_user_creation:
+ menu_options.append( [ _("Register"), h.url_for( controller='/user', action='create', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
+ extra_class = "loggedout-only"
+ visible = ( trans.user == None )
+ tab( "user", _("User"), None, visible=visible, menu_options=menu_options )
+
+ # Menu for user who is logged in.
+ if trans.user:
+ email = trans.user.email
+ else:
+ email = ""
+ menu_options = [ [ '<a>Logged in as <span id="user-email">%s</span></a>' % email ] ]
+ if app.config.use_remote_user:
+ if app.config.remote_user_logout_href:
+ menu_options.append( [ _('Logout'), app.config.remote_user_logout_href, "_top" ] )
+ else:
+ menu_options.append( [ _('Preferences'), h.url_for( controller='/user', action='index', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
+ menu_options.append( [ 'Custom Builds', h.url_for( controller='/user', action='dbkeys' ), "galaxy_main" ] )
+ if app.config.require_login:
+ logout_url = h.url_for( controller='/root', action='index', m_c='user', m_a='logout', webapp='galaxy' )
+ else:
+ logout_url = h.url_for( controller='/user', action='logout', webapp='galaxy' )
+ menu_options.append( [ 'Logout', logout_url, "_top" ] )
+ menu_options.append( None )
+ menu_options.append( [ _('Saved Histories'), h.url_for( controller='/history', action='list' ), "galaxy_main" ] )
+ menu_options.append( [ _('Saved Datasets'), h.url_for( controller='/dataset', action='list' ), "galaxy_main" ] )
+ menu_options.append( [ _('Saved Pages'), h.url_for( controller='/page', action='list' ), "_top" ] )
+ menu_options.append( [ _('API Keys'), h.url_for( controller='/user', action='api_keys', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
+ if app.config.use_remote_user:
+ menu_options.append( [ _('Public Name'), h.url_for( controller='/user', action='edit_username', cntrller='user', webapp='galaxy' ), "galaxy_main" ] )
+
+ extra_class = "loggedin-only"
+ visible = ( trans.user != None )
+ tab( "user", "User", None, visible=visible, menu_options=menu_options )
+
+
+ # SOURCE LINE 172
+ __M_writer(u'\n \n')
+ # SOURCE LINE 176
+ __M_writer(u' </ul>\n\n </div>\n </div>\n \n')
+ # SOURCE LINE 182
+ __M_writer(u' <div class="title">\n <a href="')
+ # SOURCE LINE 183
+ __M_writer(unicode(h.url_for( app.config.get( 'logo_url', '/' ) )))
+ __M_writer(u'">\n <img border="0" src="')
+ # SOURCE LINE 184
+ __M_writer(unicode(h.url_for('/static/images/galaxyIcon_noText.png')))
+ __M_writer(u'">\n Galaxy\n')
+ # SOURCE LINE 186
+ if app.config.brand:
+ # SOURCE LINE 187
+ __M_writer(u' <span>/ ')
+ __M_writer(unicode(app.config.brand))
+ __M_writer(u'</span>\n')
+ pass
+ # SOURCE LINE 189
+ __M_writer(u' </a>\n </div>\n\n')
+ # SOURCE LINE 193
+ __M_writer(u' ')
+
+ bar_style = "quota-meter-bar"
+ usage = 0
+ percent = 0
+ quota = None
+ try:
+ usage = trans.app.quota_agent.get_usage( trans=trans )
+ quota = trans.app.quota_agent.get_quota( trans.user )
+ percent = trans.app.quota_agent.get_percent( usage=usage, quota=quota )
+ if percent is not None:
+ if percent >= 100:
+ bar_style += " quota-meter-bar-error"
+ elif percent >= 85:
+ bar_style += " quota-meter-bar-warn"
+ else:
+ percent = 0
+ except AssertionError:
+ pass # Probably no history yet
+ tooltip = None
+ if not trans.user and quota and trans.app.config.allow_user_creation:
+ if trans.app.quota_agent.default_registered_quota is None or trans.app.quota_agent.default_unregistered_quota < trans.app.quota_agent.default_registered_quota:
+ tooltip = "Your disk quota is %s. You can increase your quota by registering a Galaxy account." % util.nice_size( quota )
+
+
+ # SOURCE LINE 215
+ __M_writer(u'\n\n <div class="quota-meter-container">\n')
+ # SOURCE LINE 218
+ if tooltip:
+ # SOURCE LINE 219
+ __M_writer(u' <div id="quota-meter" class="quota-meter tooltip" title="')
+ __M_writer(unicode(tooltip))
+ __M_writer(u'">\n')
+ # SOURCE LINE 220
+ else:
+ # SOURCE LINE 221
+ __M_writer(u' <div id="quota-meter" class="quota-meter">\n')
+ pass
+ # SOURCE LINE 223
+ __M_writer(u' <div id="quota-meter-bar" class="')
+ __M_writer(unicode(bar_style))
+ __M_writer(u'" style="width: ')
+ __M_writer(unicode(percent))
+ __M_writer(u'px;"></div>\n')
+ # SOURCE LINE 224
+ if quota is not None:
+ # SOURCE LINE 225
+ __M_writer(u' <div id="quota-meter-text" class="quota-meter-text">Using ')
+ __M_writer(unicode(percent))
+ __M_writer(u'%</div>\n')
+ # SOURCE LINE 226
+ else:
+ # SOURCE LINE 227
+ __M_writer(u' <div id="quota-meter-text" class="quota-meter-text">Using ')
+ __M_writer(unicode(util.nice_size( usage )))
+ __M_writer(u'</div>\n')
+ pass
+ # SOURCE LINE 229
+ __M_writer(u' </div>\n </div>\n \n')
+ return ''
+ finally:
+ context.caller_stack._pop_frame()
+
+
+def render_javascripts(context):
+ context.caller_stack._push_frame()
+ try:
+ parent = context.get('parent', UNDEFINED)
+ __M_writer = context.writer()
+ # SOURCE LINE 6
+ __M_writer(u'\n ')
+ # SOURCE LINE 7
+ __M_writer(unicode(parent.javascripts()))
+ __M_writer(u'\n')
+ return ''
+ finally:
+ context.caller_stack._pop_frame()
+
+
+def render_title(context):
+ context.caller_stack._push_frame()
+ try:
+ __M_writer = context.writer()
+ # SOURCE LINE 4
+ __M_writer(u'Galaxy')
+ return ''
+ finally:
+ context.caller_stack._pop_frame()
+
+
diff -r 2f684dfa8d474560f241388bbb1fec5c612eca75 -r 95d98a26518349216a335a5860eb370ab74375fd templates/tool_form.mako
--- a/templates/tool_form.mako
+++ b/templates/tool_form.mako
@@ -302,8 +302,8 @@
${tool.name} ${tool_version_select_field.get_html()}
%endif
<!-- BioStar links -->
- <a href="http://slyfox.bx.psu.edu:8081/new/post/" target="galaxy_main" class="icon-button general-question tooltip close-side-panels" data-original-title="Ask a tool related question"></a>
- <a href="http://slyfox.bx.psu.edu:8081/show/tag/${low_tool_name}/" target="galaxy_main" class="icon-button tag-question tooltip close-side-panels" data-original-title="See tool related posts" ></a>
+ <a href="http://slyfox.bx.psu.edu:8080/new/post/tagged/${low_tool_name}" target="galaxy_main" class="icon-button general-question tooltip close-side-panels" data-original-title="Ask a tool related question"></a>
+ <a href="http://slyfox.bx.psu.edu:8080/show/tag/${low_tool_name}/" target="galaxy_main" class="icon-button tag-question tooltip close-side-panels" data-original-title="See tool related posts" ></a><!-- End of BioStar links --></div><div class="toolFormBody">
diff -r 2f684dfa8d474560f241388bbb1fec5c612eca75 -r 95d98a26518349216a335a5860eb370ab74375fd universe_wsgi.ini
--- /dev/null
+++ b/universe_wsgi.ini
@@ -0,0 +1,753 @@
+#
+# Galaxy is configured by default to be useable in a single-user development
+# environment. To tune the application for a multi-user production
+# environment, see the documentation at:
+#
+# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Production%20Server
+#
+
+# Throughout this sample configuration file, except where stated otherwise,
+# uncommented values override the default if left unset, whereas commented
+# values are set to the default value.
+# Examples of many of these options are explained in more detail in the wiki:
+#
+# http://wiki.g2.bx.psu.edu/Admin/Config
+#
+# Config hackers are encouraged to check there before asking for help.
+
+# ---- HTTP Server ----------------------------------------------------------
+
+# Configuration of the internal HTTP server.
+
+[server:main]
+
+# The internal HTTP server to use. Currently only Paste is provided. This
+# option is required.
+use = egg:Paste#http
+
+# The port on which to listen.
+#port = 8080
+
+# The address on which to listen. By default, only listen to localhost (Galaxy
+# will not be accessible over the network). Use '0.0.0.0' to listen on all
+# available network interfaces.
+#host = 127.0.0.1
+
+# Use a threadpool for the web server instead of creating a thread for each
+# request.
+use_threadpool = True
+
+# Number of threads in the web server thread pool.
+#threadpool_workers = 10
+
+# ---- Filters --------------------------------------------------------------
+
+# Filters sit between Galaxy and the HTTP server.
+
+# These filters are disabled by default. They can be enabled with
+# 'filter-with' in the [app:main] section below.
+
+# Define the gzip filter.
+[filter:gzip]
+use = egg:Paste#gzip
+
+# Define the proxy-prefix filter.
+[filter:proxy-prefix]
+use = egg:PasteDeploy#prefix
+prefix = /galaxy
+
+# ---- Galaxy ---------------------------------------------------------------
+
+# Configuration of the Galaxy application.
+
+[app:main]
+
+# -- Application and filtering
+
+# The factory for the WSGI application. This should not be changed.
+paste.app_factory = galaxy.web.buildapp:app_factory
+
+# If not running behind a proxy server, you may want to enable gzip compression
+# to decrease the size of data transferred over the network. If using a proxy
+# server, please enable gzip compression there instead.
+#filter-with = gzip
+
+# If running behind a proxy server and Galaxy is served from a subdirectory,
+# enable the proxy-prefix filter and set the prefix in the
+# [filter:proxy-prefix] section above.
+#filter-with = proxy-prefix
+
+# If proxy-prefix is enabled and you're running more than one Galaxy instance
+# behind one hostname, you will want to set this to the same path as the prefix
+# in the filter above. This value becomes the "path" attribute set in the
+# cookie so the cookies from each instance will not clobber each other.
+#cookie_path = None
+
+# -- Database
+
+# By default, Galaxy uses a SQLite database at 'database/universe.sqlite'. You
+# may use a SQLAlchemy connection string to specify an external database
+# instead. This string takes many options which are explained in detail in the
+# config file documentation.
+#database_connection = sqlite:///./database/universe.sqlite?isolation_level=IMMEDIATE
+
+# If the server logs errors about not having enough database pool connections,
+# you will want to increase these values, or consider running more Galaxy
+# processes.
+#database_engine_option_pool_size = 5
+#database_engine_option_max_overflow = 10
+
+# If using MySQL and the server logs the error "MySQL server has gone away",
+# you will want to set this to some positive value (7200 should work).
+#database_engine_option_pool_recycle = -1
+
+# If large database query results are causing memory or response time issues in
+# the Galaxy process, leave the result on the server instead. This option is
+# only available for PostgreSQL and is highly recommended.
+#database_engine_option_server_side_cursors = False
+
+# Create only one connection to the database per thread, to reduce the
+# connection overhead. Recommended when not using SQLite:
+#database_engine_option_strategy = threadlocal
+
+# Log all database transactions, can be useful for debugging and performance
+# profiling. Logging is done via Python's 'logging' module under the qualname
+# 'galaxy.model.orm.logging_connection_proxy'
+#database_query_profiling_proxy = False
+
+# -- Files and directories
+
+# Path where genome builds are stored. This defaults to tool-data/genome
+#genome_data_path = tool-data/genome
+
+# URL for rsync server to download pre-built indexes.
+#rsync_url = rsync://scofield.bx.psu.edu/indexes
+
+# Dataset files are stored in this directory.
+#file_path = database/files
+
+# Temporary files are stored in this directory.
+#new_file_path = database/tmp
+
+# Tool config files, defines what tools are available in Galaxy.
+# Tools can be locally developed or installed from Galaxy tool sheds.
+#tool_config_file = tool_conf.xml,shed_tool_conf.xml
+
+# Default path to the directory containing the tools defined in tool_conf.xml.
+# Other tool config files must include the tool_path as an attribute in the <toolbox> tag.
+#tool_path = tools
+
+# Path to the directory in which managed tool dependencies are placed. To use
+# the dependency system, see the documentation at:
+# http://wiki.g2.bx.psu.edu/Admin/Config/Tool%20Dependencies
+#tool_dependency_dir = None
+
+# Enable automatic polling of relative tool sheds to see if any updates
+# are available for installed repositories. Ideally only one Galaxy
+# server process should be able to check for repository updates. The
+# setting for hours_between_check should be an integer between 1 and 24.
+#enable_tool_shed_check = False
+#hours_between_check = 12
+
+# Directory where data used by tools is located, see the samples in that
+# directory and the wiki for help:
+# http://wiki.g2.bx.psu.edu/Admin/Data%20Integration
+#tool_data_path = tool-data
+
+# Directory where chrom len files are kept, currently mainly used by trackster
+#len_file_path = tool-data/shared/ucsc/chrom
+
+# Datatypes config file, defines what data (file) types are available in
+# Galaxy.
+#datatypes_config_file = datatypes_conf.xml
+
+# Each job is given a unique empty directory as its current working directory.
+# This option defines in what parent directory those directories will be
+# created.
+#job_working_directory = database/job_working_directory
+
+# If using a cluster, Galaxy will write job scripts and stdout/stderr to this
+# directory.
+#cluster_files_directory = database/pbs
+
+# External service types config file, defines what types of external_services configurations
+# are available in Galaxy.
+#external_service_type_config_file = external_service_types_conf.xml
+
+# Path to the directory containing the external_service_types defined in the config.
+#external_service_type_path = external_service_types
+
+# Tools with a number of outputs not known until runtime can write these
+# outputs to a directory for collection by Galaxy when the job is done.
+# Previously, this directory was new_file_path, but using one global directory
+# can cause performance problems, so using job_working_directory ('.' or cwd
+# when a job is run) is encouraged. By default, both are checked to avoid
+# breaking existing tools.
+#collect_outputs_from = new_file_path,job_working_directory
+
+# -- Mail and notification
+
+# Galaxy sends mail for various things: Subscribing users to the mailing list
+# if they request it, emailing password resets, notification from the Galaxy
+# Sample Tracking system, and reporting dataset errors. To do this, it needs
+# to send mail through an SMTP server, which you may define here (host:port).
+# Galaxy will automatically try STARTTLS but will continue upon failure.
+#smtp_server = None
+
+# If your SMTP server requires a username and password, you can provide them
+# here (password in cleartext here, but if your server supports STARTTLS it
+# will be sent over the network encrypted).
+#smtp_username = None
+#smtp_password = None
+
+# On the user registration form, users may choose to join the mailing list.
+# This is the address of the list they'll be subscribed to.
+#mailing_join_addr = galaxy-announce-join(a)bx.psu.edu
+
+# Datasets in an error state include a link to report the error. Those reports
+# will be sent to this address. Error reports are disabled if no address is set.
+#error_email_to = None
+
+# -- Display sites
+
+# Galaxy can display data at various external browsers. These options specify
+# which browsers should be available. URLs and builds available at these
+# browsers are defined in the specifield files.
+
+# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt
+#ucsc_display_sites = main,test,archaea,ucla
+
+# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt
+#gbrowse_display_sites = modencode,sgd_yeast,tair,wormbase,wormbase_ws120,wormbase_ws140,wormbase_ws170,wormbase_ws180,wormbase_ws190,wormbase_ws200,wormbase_ws204,wormbase_ws210,wormbase_ws220,wormbase_ws225
+
+# GeneTrack servers: tool-data/shared/genetrack/genetrack_sites.txt
+#genetrack_display_sites = main,test
+
+# If use_remote_user = True, display application servers will be denied access
+# to Galaxy and so displaying datasets in these sites will fail.
+# display_servers contains a list of hostnames which should be allowed to
+# bypass security to display datasets. Please be aware that there are security
+# implications if this is allowed. More details (including required changes to
+# the proxy server config) are available in the Apache proxy documentation on
+# the wiki.
+#
+# The list of servers in this sample config are for the UCSC Main, Test and
+# Archaea browsers, but the default if left commented is to not allow any
+# display sites to bypass security (you must uncomment the line below to allow
+# them).
+#display_servers = hgw1.cse.ucsc.edu,hgw2.cse.ucsc.edu,hgw3.cse.ucsc.edu,hgw4.cse.ucsc.edu,hgw…
+
+# -- Next gen LIMS interface on top of existing Galaxy Sample/Request management code.
+
+use_nglims = False
+nglims_config_file = tool-data/nglims.yaml
+
+# -- UI Localization
+
+# Append "/{brand}" to the "Galaxy" text in the masthead.
+#brand = None
+
+# The URL linked by the "Galaxy/brand" text.
+#logo_url = /
+
+# The URL linked by the "Galaxy Wiki" link in the "Help" menu.
+#wiki_url = http://wiki.g2.bx.psu.edu/
+
+# The URL linked by the "Support" link in the "Help" menu.
+#support_url = http://wiki.g2.bx.psu.edu/Support
+
+# The URL linked by the "How to Cite..." link in the "Help" menu.
+#citation_url = http://wiki.g2.bx.psu.edu/Citing%20Galaxy
+
+# The URL linked by the "Terms and Conditions" link in the "Help" menu, as well
+# as on the user registration and login forms.
+#terms_url = None
+
+# The URL linked by the "Galaxy Q&A" link in the "Help" menu
+qa_url = http://slyfox.bx.psu.edu:8080/
+
+# Serve static content, which must be enabled if you're not serving it via a
+# proxy server. These options should be self explanatory and so are not
+# documented individually. You can use these paths (or ones in the proxy
+# server) to point to your own styles.
+static_enabled = True
+static_cache_time = 360
+static_dir = %(here)s/static/
+static_images_dir = %(here)s/static/images
+static_favicon_dir = %(here)s/static/favicon.ico
+static_scripts_dir = %(here)s/static/scripts/
+static_style_dir = %(here)s/static/june_2007_style/blue
+static_robots_txt = %(here)s/static/robots.txt
+
+# Pack javascript at launch (/static/scripts/*.js)
+# This only happens if the modified timestamp of the source .js is newer
+# than the version (if it exists) in /static/scripts/packed/
+# Note that this requires java > 1.4 for executing yuicompressor.jar
+#pack_scripts = False
+
+# Enable Cloud Launch
+
+#enable_cloud_launch = False
+
+# -- Advanced proxy features
+
+# For help on configuring the Advanced proxy features, see:
+# http://usegalaxy.org/production
+
+# Apache can handle file downloads (Galaxy-to-user) via mod_xsendfile. Set
+# this to True to inform Galaxy that mod_xsendfile is enabled upstream.
+#apache_xsendfile = False
+
+# The same download handling can be done by nginx using X-Accel-Redirect. This
+# should be set to the path defined in the nginx config as an internal redirect
+# with access to Galaxy's data files (see documentation linked above).
+#nginx_x_accel_redirect_base = False
+
+# nginx can make use of mod_zip to create zip files containing multiple library
+# files. If using X-Accel-Redirect, this can be the same value as that option.
+#nginx_x_archive_files_base = False
+
+# If using compression in the upstream proxy server, use this option to disable
+# gzipping of library .tar.gz and .zip archives, since the proxy server will do
+# it faster on the fly.
+#upstream_gzip = False
+
+# nginx can also handle file uploads (user-to-Galaxy) via nginx_upload_module.
+# Configuration for this is complex and explained in detail in the
+# documentation linked above. The upload store is a temporary directory in
+# which files uploaded by the upload module will be placed.
+#nginx_upload_store = False
+
+# This value overrides the action set on the file upload form, e.g. the web
+# path where the nginx_upload_module has been configured to intercept upload
+# requests.
+#nginx_upload_path = False
+
+# -- Logging and Debugging
+
+# Verbosity of console log messages. Acceptable values can be found here:
+# http://docs.python.org/library/logging.html#logging-levels
+#log_level = DEBUG
+
+# Print database operations to the server log (warning, quite verbose!).
+#database_engine_option_echo = False
+
+# Print database pool operations to the server log (warning, quite verbose!).
+#database_engine_option_echo_pool = False
+
+# Turn on logging of application events and some user events to the database.
+#log_events = True
+
+# Turn on logging of user actions to the database. Actions currently logged are
+# grid views, tool searches, and use of "recently" used tools menu. The
+# log_events and log_actions functionality will eventually be merged.
+#log_actions = True
+
+# Sanitize All HTML Tool Output
+# By default, all tool output served as 'text/html' will be sanitized
+# thoroughly. This can be disabled if you have special tools that require
+# unaltered output.
+#sanitize_all_html = True
+
+# Debug enables access to various config options useful for development and
+# debugging: use_lint, use_profile, use_printdebug and use_interactive. It
+# also causes the files used by PBS/SGE (submission script, output, and error)
+# to remain on disk after the job is complete. Debug mode is disabled if
+# commented, but is uncommented by default in the sample config.
+debug = True
+
+# Check for WSGI compliance.
+#use_lint = False
+
+# Run the Python profiler on each request.
+#use_profile = False
+
+# Intercept print statements and show them on the returned page.
+#use_printdebug = True
+
+# Enable live debugging in your browser. This should NEVER be enabled on a
+# public site. Enabled in the sample config for development.
+use_interactive = True
+
+# Write thread status periodically to 'heartbeat.log', (careful, uses disk
+# space rapidly!). Useful to determine why your processes may be consuming a
+# lot of CPU.
+#use_heartbeat = False
+
+# Enable the memory debugging interface (careful, negatively impacts server
+# performance).
+#use_memdump = False
+
+# -- Data Libraries
+
+# These library upload options are described in much more detail in the wiki:
+# http://wiki.g2.bx.psu.edu/Admin/Data%20Libraries/Uploading%20Library%20Files
+
+# Add an option to the library upload form which allows administrators to
+# upload a directory of files.
+#library_import_dir = None
+
+# Add an option to the library upload form which allows authorized
+# non-administrators to upload a directory of files. The configured directory
+# must contain sub-directories named the same as the non-admin user's Galaxy
+# login ( email ). The non-admin user is restricted to uploading files or
+# sub-directories of files contained in their directory.
+#user_library_import_dir = None
+
+# Add an option to the admin library upload tool allowing admins to paste
+# filesystem paths to files and directories in a box, and these paths will be
+# added to a library. Set to True to enable. Please note the security
+# implication that this will give Galaxy Admins access to anything your Galaxy
+# user has access to.
+#allow_library_path_paste = False
+
+# Users may choose to download multiple files from a library in an archive. By
+# default, Galaxy allows users to select from a few different archive formats
+# if testing shows that Galaxy is able to create files using these formats.
+# Specific formats can be disabled with this option, separate more than one
+# format with commas. Available formats are currently 'zip', 'gz', and 'bz2'.
+#disable_library_comptypes =
+
+# Some sequencer integration features in beta allow you to automatically
+# transfer datasets. This is done using a lightweight transfer manager which
+# runs outside of Galaxy (but is spawned by it automatically). Galaxy will
+# communicate with this manager over the port specified here.
+#transfer_manager_port = 8163
+
+# Search data libraries with whoosh
+#enable_whoosh_library_search = True
+# Whoosh indexes are stored in this directory.
+#whoosh_index_dir = database/whoosh_indexes
+
+# Search data libraries with lucene
+#enable_lucene_library_search = False
+# maxiumum file size to index for searching, in MB
+#fulltext_max_size = 500
+#fulltext_noindex_filetypes=bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger
+# base URL of server providing search functionality using lucene
+#fulltext_url = http://localhost:8081
+
+# -- Users and Security
+
+# Galaxy encodes various internal values when these values will be output in
+# some format (for example, in a URL or cookie). You should set a key to be
+# used by the algorithm that encodes and decodes these values. It can be any
+# string. If left unchanged, anyone could construct a cookie that would grant
+# them access to others' sessions.
+#id_secret = USING THE DEFAULT IS NOT SECURE!
+
+# User authentication can be delegated to an upstream proxy server (usually
+# Apache). The upstream proxy should set a REMOTE_USER header in the request.
+# Enabling remote user disables regular logins. For more information, see:
+# http://wiki.g2.bx.psu.edu/Admin/Config/Apache%20Proxy
+#use_remote_user = False
+
+# If use_remote_user is enabled and your external authentication
+# method just returns bare usernames, set a default mail domain to be appended
+# to usernames, to become your Galaxy usernames (email addresses).
+#remote_user_maildomain = None
+
+# If use_remote_user is enabled, you can set this to a URL that will log your
+# users out.
+#remote_user_logout_href = None
+
+# Administrative users - set this to a comma-separated list of valid Galaxy
+# users (email addresses). These users will have access to the Admin section
+# of the server, and will have access to create users, groups, roles,
+# libraries, and more. For more information, see:
+# http://wiki.g2.bx.psu.edu/Admin/Interface
+#admin_users = None
+
+# Force everyone to log in (disable anonymous access).
+#require_login = False
+
+# Allow unregistered users to create new accounts (otherwise, they will have to
+# be created by an admin).
+#allow_user_creation = True
+
+# Allow administrators to delete accounts.
+#allow_user_deletion = False
+
+# Allow administrators to log in as other users (useful for debugging)
+#allow_user_impersonation = False
+
+# Allow users to remove their datasets from disk immediately (otherwise,
+# datasets will be removed after a time period specified by an administrator in
+# the cleanup scripts run via cron)
+#allow_user_dataset_purge = False
+
+# By default, users' data will be public, but setting this to True will cause
+# it to be private. Does not affect existing users and data, only ones created
+# after this option is set. Users may still change their default back to
+# public.
+#new_user_dataset_access_role_default_private = False
+
+# -- Beta features
+
+# Object store mode (valid options are: disk, s3, swift, distributed, hierarchical)
+#object_store = disk
+#os_access_key = <your cloud object store access key>
+#os_secret_key = <your cloud object store secret key>
+#os_bucket_name = <name of an existing object store bucket or container>
+# If using 'swift' object store, you must specify the following connection properties
+#os_host = swift.rc.nectar.org.au
+#os_port = 8888
+#os_is_secure = False
+#os_conn_path = /
+# Reduced redundancy can be used only with the 's3' object store
+#os_use_reduced_redundancy = False
+# Size (in GB) that the cache used by object store should be limited to.
+# If the value is not specified, the cache size will be limited only by the
+# file system size. The file system location of the cache is considered the
+# configuration of the ``file_path`` directive defined above.
+#object_store_cache_size = 100
+
+# Configuration file for the distributed object store, if object_store =
+# distributed. See the sample at distributed_object_store_conf.xml.sample
+#distributed_object_store_config_file = None
+
+# Enable Galaxy to communicate directly with a sequencer
+#enable_sequencer_communication = False
+
+# Enable authentication via OpenID. Allows users to log in to their Galaxy
+# account by authenticating with an OpenID provider.
+#enable_openid = False
+#openid_config_file = openid_conf.xml
+
+# Optional list of email addresses of API users who can make calls on behalf of
+# other users
+#api_allow_run_as = None
+
+# Enable tool tags (associating tools with tags). This has its own option
+# since its implementation has a few performance implications on startup for
+# large servers.
+#enable_tool_tags = False
+
+# Enable a feature when running workflows. When enabled, default datasets
+# are selected for "Set at Runtime" inputs from the history such that the
+# same input will not be selected twice, unless there are more inputs than
+# compatible datasets in the history.
+# When False, the most recently added compatible item in the history will
+# be used for each "Set at Runtime" input, independent of others in the Workflow
+#enable_unique_workflow_defaults = False
+
+# The URL to the myExperiment instance being used (omit scheme but include port)
+#myexperiment_url = www.myexperiment.org:80
+
+# Enable Galaxy's "Upload via FTP" interface. You'll need to install and
+# configure an FTP server (we've used ProFTPd since it can use Galaxy's
+# database for authentication) and set the following two options.
+
+# This should point to a directory containing subdirectories matching users'
+# email addresses, where Galaxy will look for files.
+#ftp_upload_dir = None
+
+# This should be the hostname of your FTP server, which will be provided to
+# users in the help text.
+#ftp_upload_site = None
+
+# Enable enforcement of quotas. Quotas can be set from the Admin interface.
+#enable_quotas = False
+
+# Enable a feature when running workflows. When enabled, default datasets
+# are selected for "Set at Runtime" inputs from the history such that the
+# same input will not be selected twice, unless there are more inputs than
+# compatible datasets in the history.
+# When False, the most recently added compatible item in the history will
+# be used for each "Set at Runtime" input, independent of others in the Workflow
+#enable_unique_workflow_defaults = False
+
+# -- Job Execution
+
+# To increase performance of job execution and the web interface, you can
+# separate Galaxy into multiple processes. There are more than one way to do
+# this, and they are explained in detail in the documentation:
+#
+# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Web%20Application%20Scal…
+#
+# By default, Galaxy manages and executes jobs from within a single process and
+# notifies itself of new jobs via in-memory queues. If you change job_manager
+# and job_handlers from their default values, notification will instead be done
+# using the `state` and `handler` columns of the job table in the database.
+
+# Identify the server_name (the string following server: at the top of this
+# file) which should be designated as the job manager (only one):
+#job_manager = main
+
+# Identify the server_name(s) which should be designated as job handlers
+# (responsible for starting, tracking, finishing, and cleaning up jobs) as a
+# comma-separated list.
+#job_handlers = main
+
+# By default, a handler from job_handlers will be selected at random if the
+# tool to run does specify a handler below in [galaxy:tool_handlers]. If you
+# want certain handlers to only handle jobs for tools/params explicitly
+# assigned below, use default_job_handlers to specify which handlers should be
+# used for jobs without explicit handlers.
+#default_job_handlers = main
+
+# This enables splitting of jobs into tasks, if specified by the particular tool config.
+# This is a new feature and not recommended for production servers yet.
+#use_tasked_jobs = False
+#local_task_queue_workers = 2
+
+# Enable job recovery (if Galaxy is restarted while cluster jobs are running,
+# it can "recover" them when it starts). This is not safe to use if you are
+# running more than one Galaxy server using the same database.
+#enable_job_recovery = True
+
+# Setting metadata on job outputs to in a separate process (or if using a
+# cluster, on the cluster). Thanks to Python's Global Interpreter Lock and the
+# hefty expense that setting metadata incurs, your Galaxy process may become
+# unresponsive when this operation occurs internally.
+#set_metadata_externally = False
+
+# Although it is fairly reliable, setting metadata can occasionally fail. In
+# these instances, you can choose to retry setting it internally or leave it in
+# a failed state (since retrying internally may cause the Galaxy process to be
+# unresponsive). If this option is set to False, the user will be given the
+# option to retry externally, or set metadata manually (when possible).
+#retry_metadata_internally = True
+
+# If (for example) you run on a cluster and your datasets (by default,
+# database/files/) are mounted read-only, this option will override tool output
+# paths to write outputs to the working directory instead, and the job manager
+# will move the outputs to their proper place in the dataset directory on the
+# Galaxy server after the job completes.
+#outputs_to_working_directory = False
+
+# If your network filesystem's caching prevents the Galaxy server from seeing
+# the job's stdout and stderr files when it completes, you can retry reading
+# these files. The job runner will retry the number of times specified below,
+# waiting 1 second between tries. For NFS, you may want to try the -noac mount
+# option (Linux) or -actimeo=0 (Solaris).
+#retry_job_output_collection = 0
+
+# Clean up various bits of jobs left on the filesystem after completion. These
+# bits include the job working directory, external metadata temporary files,
+# and DRM stdout and stderr files (if using a DRM). Possible values are:
+# always, onsuccess, never
+#cleanup_job = always
+
+# Number of concurrent jobs to run (local job runner)
+#local_job_queue_workers = 5
+
+# Jobs can be killed after a certain amount of execution time. Format is in
+# hh:mm:ss. Currently only implemented for PBS.
+#job_walltime = None
+
+# Jobs can be killed if any of their outputs grow over a certain size (in
+# bytes). 0 for no limit.
+#output_size_limit = 0
+
+# Jobs can be held back from submission to a runner if a user already has more
+# jobs queued or running than the number specified below. This prevents a
+# single user from stuffing the queue and preventing other users from being
+# able to run jobs.
+#user_job_limit = None
+
+# Clustering Galaxy is not a straightforward process and requires some
+# pre-configuration. See the the wiki before attempting to set any of these
+# options:
+# http://wiki.g2.bx.psu.edu/Admin/Config/Performance/Cluster
+
+# Comma-separated list of job runners to start. local is always started. If
+# left commented, no jobs will be run on the cluster, even if a cluster URL is
+# explicitly defined in the [galaxy:tool_runners] section below. The runners
+# currently available are 'pbs' and 'drmaa'.
+#start_job_runners = None
+
+# For sites where all users in Galaxy match users on the system on which Galaxy
+# runs, the DRMAA job runner can be configured to submit jobs to the DRM as the
+# actual user instead of as the user running the Galaxy server process. For
+# details on these options, see the documentation at:
+#
+# http://galaxyproject.org/wiki/Admin/Config/Performance/Cluster
+#
+#drmaa_external_runjob_script = scripts/drmaa_external_runner.py
+#drmaa_external_killjob_script = scripts/drmaa_external_killer.py
+#external_chown_script = scripts/external_chown_script.py
+
+# File to source to set up the environment when running jobs. By default, the
+# environment in which the Galaxy server starts is used when running jobs
+# locally, and the environment set up per the DRM's submission method and
+# policy is used when running jobs on a cluster (try testing with `qsub` on the
+# command line). environment_setup_file can be set to the path of a file on
+# the cluster that should be sourced by the user to set up the environment
+# prior to running tools. This can be especially useful for running jobs as
+# the actual user, to remove the need to configure each user's environment
+# individually. This only affects cluster jobs, not local jobs.
+#environment_setup_file = None
+
+# The URL for the default runner to use when a tool doesn't explicitly define a
+# runner below.
+#default_cluster_job_runner = local:///
+
+# The cluster runners have their own thread pools used to prepare and finish
+# jobs (so that these sometimes lengthy operations do not block normal queue
+# operation). The value here is the number of worker threads available to each
+# started runner.
+#cluster_job_queue_workers = 3
+
+# These options are only used when using file staging with PBS.
+#pbs_application_server =
+#pbs_stage_path =
+#pbs_dataset_server =
+
+# This option allows users to see the full path of datasets via the "View
+# Details" option in the history. Administrators can always see this.
+#expose_dataset_path = False
+
+# ---- Per-Tool Job Management ----------------------------------------------
+
+# Per-tool job handler and runner overrides. Parameters can be included to define multiple
+# runners per tool. E.g. to run Cufflinks jobs initiated from Trackster
+# differently than standard Cufflinks jobs:
+#
+# cufflinks = local:///
+# cufflinks[source@trackster] = local:///
+
+[galaxy:tool_handlers]
+
+# By default, Galaxy will select a handler at random from the list of
+# job_handlers set above. You can override as in the following examples:
+#
+#upload1 = upload_handler
+#cufflinks[source@trackster] = realtime_handler
+
+[galaxy:tool_runners]
+
+# If not listed here, a tool will run with the runner defined with
+# default_cluster_job_runner. These overrides for local:/// are done because
+# these tools can fetch data from remote sites, which may not be suitable to
+# run on a cluster (if it does not have access to the Internet, for example).
+
+biomart = local:///
+encode_db1 = local:///
+hbvar = local:///
+microbial_import1 = local:///
+ucsc_table_direct1 = local:///
+ucsc_table_direct_archaea1 = local:///
+ucsc_table_direct_test1 = local:///
+upload1 = local:///
+
+# ---- Galaxy Message Queue -------------------------------------------------
+
+# Galaxy uses AMQ protocol to receive messages from external sources like
+# bar code scanners. Galaxy has been tested against RabbitMQ AMQP implementation.
+# For Galaxy to receive messages from a message queue the RabbitMQ server has
+# to be set up with a user account and other parameters listed below. The 'host'
+# and 'port' fields should point to where the RabbitMQ server is running.
+
+[galaxy_amqp]
+
+#host = 127.0.0.1
+#port = 5672
+#userid = galaxy
+#password = galaxy
+#virtual_host = galaxy_messaging_engine
+#queue = galaxy_queue
+#exchange = galaxy_exchange
+#routing_key = bar_code_scanner
+#rabbitmqctl_path = /path/to/rabbitmqctl
+
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: rmarenco: Added links to BioStar in the Help Menu and in tool forms
by Bitbucket 06 Sep '12
by Bitbucket 06 Sep '12
06 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/2f684dfa8d47/
changeset: 2f684dfa8d47
user: rmarenco
date: 2012-09-07 01:08:27
summary: Added links to BioStar in the Help Menu and in tool forms
affected #: 6 files
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 static/june_2007_style/base.less
--- a/static/june_2007_style/base.less
+++ b/static/june_2007_style/base.less
@@ -1783,3 +1783,17 @@
.opacity(80);
}
}
+
+.icon-button.general-question{
+ background: url(question-octagon-frame.png) no-repeat 0px 0px;
+ margin-top: 3px;
+ margin-right: 4px;
+ float: right;
+}
+
+.icon-button.tag-question{
+ background: url(question-balloon.png) no-repeat 0px 0px;
+ margin-top: 3px;
+ margin-right: 4px;
+ float: right;
+}
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 static/june_2007_style/blue/base.css
--- a/static/june_2007_style/blue/base.css
+++ b/static/june_2007_style/blue/base.css
@@ -910,3 +910,5 @@
div.historyItem-empty .state-icon{background:url(history-states.png) no-repeat 0px -25px;}
div.historyItem-queued .state-icon{background:url(history-states.png) no-repeat 0px -50px;}
.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;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);opacity:0.3;filter:alpha(opacity=30);opacity:0.8;filter:alpha(opacity=80);opacity:0.8;filter:alpha(opacity=80);}
+.icon-button.general-question{background:url(question-octagon-frame.png) no-repeat 0px 0px;margin-top:3px;margin-right:4px;float:right;}
+.icon-button.tag-question{background:url(question-balloon.png) no-repeat 0px 0px;margin-top:3px;margin-right:4px;float:right;}
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 static/june_2007_style/blue/question-balloon.png
Binary file static/june_2007_style/blue/question-balloon.png has changed
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 static/june_2007_style/blue/question-octagon-frame.png
Binary file static/june_2007_style/blue/question-octagon-frame.png has changed
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 templates/tool_form.mako
--- a/templates/tool_form.mako
+++ b/templates/tool_form.mako
@@ -12,7 +12,7 @@
</%def><%def name="javascripts()">
- ${h.js( "libs/jquery/jquery", "galaxy.panels", "galaxy.base", "libs/jquery/jquery.autocomplete", "libs/jquery/jstorage" )}
+ ${h.js( "libs/jquery/jquery", "galaxy.panels", "galaxy.base", "libs/jquery/jquery.autocomplete", "libs/jquery/jstorage", "libs/bootstrap" )}
<script type="text/javascript">
$(function() {
$(window).bind("refresh_on_change", function() {
@@ -282,19 +282,30 @@
tool_url = tool.action[0] + h.url_for(tool.action[1])
%>
+<%
+ # Set the tool name in lower case
+ low_tool_name = tool.name.lower()
+%>
+
%if tool_id_version_message:
${render_msg( tool_id_version_message, 'warning' )}
%endif
<div class="toolForm" id="${tool.id}"><form id="tool_form" name="tool_form" action="${tool_url}" enctype="${tool.enctype}" target="${tool.target}" method="${tool.method}">
- %if tool.has_multiple_pages:
- <div class="toolFormTitle">${tool.name} (step ${tool_state.page+1} of ${tool.npages})</div>
- %elif not tool_version_select_field:
- <div class="toolFormTitle">${tool.name} (version ${tool.version})</div>
- %else:
- <div class="toolFormTitle">${tool.name} ${tool_version_select_field.get_html()}</div>
- %endif
+ <div class="toolFormTitle">
+ %if tool.has_multiple_pages:
+ ${tool.name} (step ${tool_state.page+1} of ${tool.npages})
+ %elif not tool_version_select_field:
+ ${tool.name} (version ${tool.version})
+ %else:
+ ${tool.name} ${tool_version_select_field.get_html()}
+ %endif
+ <!-- BioStar links -->
+ <a href="http://slyfox.bx.psu.edu:8081/new/post/" target="galaxy_main" class="icon-button general-question tooltip close-side-panels" data-original-title="Ask a tool related question"></a>
+ <a href="http://slyfox.bx.psu.edu:8081/show/tag/${low_tool_name}/" target="galaxy_main" class="icon-button tag-question tooltip close-side-panels" data-original-title="See tool related posts" ></a>
+ <!-- End of BioStar links -->
+ </div><div class="toolFormBody"><input type="hidden" name="refresh" value="refresh"><input type="hidden" name="tool_id" value="${tool.id}">
diff -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf -r 2f684dfa8d474560f241388bbb1fec5c612eca75 templates/webapps/galaxy/base_panels.mako
--- a/templates/webapps/galaxy/base_panels.mako
+++ b/templates/webapps/galaxy/base_panels.mako
@@ -120,6 +120,7 @@
## Help tab.
<%
menu_options = [
+ [_('Galaxy Q&A'), app.config.get( "q&a", "http://slyfox.bx.psu.edu:8081/" ), "galaxy_main" ],
[_('Support'), app.config.get( "support_url", "http://wiki.g2.bx.psu.edu/Support" ), "_blank" ],
[_('Galaxy Wiki'), app.config.get( "wiki_url", "http://wiki.g2.bx.psu.edu/" ), "_blank" ],
[_('Video tutorials (screencasts)'), app.config.get( "screencasts_url", "http://galaxycast.org" ), "_blank" ],
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/5c09dfcc62c2/
changeset: 5c09dfcc62c2
user: greg
date: 2012-09-06 22:27:35
summary: Fix bug introduced 2 commits ago.
affected #: 1 file
diff -r f0fe84f46793708dc5eac02442e2e9a72e1d9c70 -r 5c09dfcc62c27857e0653c3a95df24c6fb316baf lib/galaxy/webapps/community/controllers/repository.py
--- a/lib/galaxy/webapps/community/controllers/repository.py
+++ b/lib/galaxy/webapps/community/controllers/repository.py
@@ -1427,10 +1427,7 @@
tool_state = self.__new_state( trans )
is_malicious = changeset_is_malicious( trans, repository_id, repository.tip )
invalid_file_tups = []
- if tool is None:
- if not valid:
- invalid_file_tups = [ ( name, error_message ) ]
- else:
+ if tool:
invalid_file_tups = check_tool_input_params( trans.app,
repository.repo_path,
tool_config,
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/f0fe84f46793/
changeset: f0fe84f46793
user: greg
date: 2012-09-06 22:22:57
summary: Fix a mis-named variable.
affected #: 1 file
diff -r 42e544d00e75be44887b17f6985bcb251573e1de -r f0fe84f46793708dc5eac02442e2e9a72e1d9c70 lib/galaxy/webapps/community/controllers/common.py
--- a/lib/galaxy/webapps/community/controllers/common.py
+++ b/lib/galaxy/webapps/community/controllers/common.py
@@ -266,7 +266,7 @@
if name.endswith( '.sample' ):
relative_path = os.path.join( root, name )
copy_sample_file( trans.app, relative_path, dest_path=dest_path )
- sample_files_copied.append( name )
+ sample_files.append( name )
return sample_files
def copy_file_from_disk( filename, repo_dir, dir ):
file_path = None
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: greg: Fixes for displaying error messages when displaying invalid tools in tool shed repository changeset revisions.
by Bitbucket 06 Sep '12
by Bitbucket 06 Sep '12
06 Sep '12
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/changeset/42e544d00e75/
changeset: 42e544d00e75
user: greg
date: 2012-09-06 22:17:15
summary: Fixes for displaying error messages when displaying invalid tools in tool shed repository changeset revisions.
affected #: 2 files
diff -r b43eadc8cdb486b7bfa971ff89552ba04126ef0d -r 42e544d00e75be44887b17f6985bcb251573e1de lib/galaxy/util/shed_util.py
--- a/lib/galaxy/util/shed_util.py
+++ b/lib/galaxy/util/shed_util.py
@@ -248,6 +248,34 @@
except:
pass
return converter_path, display_path
+def can_generate_tool_dependency_metadata( root, metadata_dict ):
+ """
+ Make sure the combination of name, version and type (the type will be the value of elem.tag) of each root element tag in the tool_dependencies.xml
+ file is defined in the <requirement> tag for at least one tool in the repository.
+ """
+ can_generate_dependency_metadata = False
+ for elem in root:
+ can_generate_dependency_metadata = False
+ tool_dependency_name = elem.get( 'name', None )
+ tool_dependency_version = elem.get( 'version', None )
+ tool_dependency_type = elem.tag
+ if tool_dependency_name and tool_dependency_version and tool_dependency_type:
+ for tool_dict in metadata_dict[ 'tools' ]:
+ requirements = tool_dict.get( 'requirements', [] )
+ for requirement_dict in requirements:
+ req_name = requirement_dict.get( 'name', None )
+ req_version = requirement_dict.get( 'version', None )
+ req_type = requirement_dict.get( 'type', None )
+ if req_name==tool_dependency_name and req_version==tool_dependency_version and req_type==tool_dependency_type:
+ can_generate_dependency_metadata = True
+ break
+ if requirements and not can_generate_dependency_metadata:
+ # We've discovered at least 1 combination of name, version and type that is not defined in the <requirement>
+ # tag for any tool in the repository.
+ break
+ if not can_generate_dependency_metadata:
+ break
+ return can_generate_dependency_metadata
def check_tool_input_params( app, repo_dir, tool_config_name, tool, sample_files, webapp='galaxy' ):
"""
Check all of the tool's input parameters, looking for any that are dynamically generated using external data files to make
@@ -512,34 +540,6 @@
if tool_dependencies_dict:
metadata_dict[ 'tool_dependencies' ] = tool_dependencies_dict
return metadata_dict
-def can_generate_tool_dependency_metadata( root, metadata_dict ):
- """
- Make sure the combination of name, version and type (the type will be the value of elem.tag) of each root element tag in the tool_dependencies.xml
- file is defined in the <requirement> tag for at least one tool in the repository.
- """
- can_generate_dependency_metadata = False
- for elem in root:
- can_generate_dependency_metadata = False
- tool_dependency_name = elem.get( 'name', None )
- tool_dependency_version = elem.get( 'version', None )
- tool_dependency_type = elem.tag
- if tool_dependency_name and tool_dependency_version and tool_dependency_type:
- for tool_dict in metadata_dict[ 'tools' ]:
- requirements = tool_dict.get( 'requirements', [] )
- for requirement_dict in requirements:
- req_name = requirement_dict.get( 'name', None )
- req_version = requirement_dict.get( 'version', None )
- req_type = requirement_dict.get( 'type', None )
- if req_name==tool_dependency_name and req_version==tool_dependency_version and req_type==tool_dependency_type:
- can_generate_dependency_metadata = True
- break
- if requirements and not can_generate_dependency_metadata:
- # We've discovered at least 1 combination of name, version and type that is not defined in the <requirement>
- # tag for any tool in the repository.
- break
- if not can_generate_dependency_metadata:
- break
- return can_generate_dependency_metadata
def generate_metadata_for_changeset_revision( app, repository_clone_url, relative_install_dir=None, repository_files_dir=None,
resetting_all_metadata_on_repository=False, webapp='galaxy' ):
"""
@@ -597,50 +597,53 @@
# Find all tool configs.
if name not in NOT_TOOL_CONFIGS and name.endswith( '.xml' ):
full_path = os.path.abspath( os.path.join( root, name ) )
- if not ( check_binary( full_path ) or check_image( full_path ) or check_gzip( full_path )[ 0 ]
- or check_bz2( full_path )[ 0 ] or check_zip( full_path ) ):
- try:
- # Make sure we're looking at a tool config and not a display application config or something else.
- element_tree = util.parse_xml( full_path )
- element_tree_root = element_tree.getroot()
- is_tool = element_tree_root.tag == 'tool'
- except Exception, e:
- print "Error parsing %s", full_path, ", exception: ", str( e )
- is_tool = False
- if is_tool:
- tool, valid, error_message = load_tool_from_config( app, full_path )
- if tool is None:
- if not valid:
- invalid_file_tups.append( ( name, error_message ) )
- else:
- invalid_files_and_errors_tups = check_tool_input_params( app, files_dir, name, tool, sample_file_metadata_paths, webapp=webapp )
- can_set_metadata = True
- for tup in invalid_files_and_errors_tups:
- if name in tup:
- can_set_metadata = False
- invalid_tool_configs.append( name )
- break
- if can_set_metadata:
- if resetting_all_metadata_on_repository:
- full_path_to_tool_config = os.path.join( root, name )
- stripped_path_to_tool_config = full_path_to_tool_config.replace( work_dir, '' )
- if stripped_path_to_tool_config.startswith( '/' ):
- stripped_path_to_tool_config = stripped_path_to_tool_config[ 1: ]
- relative_path_to_tool_config = os.path.join( relative_install_dir, stripped_path_to_tool_config )
+ if os.path.getsize( full_path ) > 0:
+ if not ( check_binary( full_path ) or check_image( full_path ) or check_gzip( full_path )[ 0 ]
+ or check_bz2( full_path )[ 0 ] or check_zip( full_path ) ):
+ try:
+ # Make sure we're looking at a tool config and not a display application config or something else.
+ element_tree = util.parse_xml( full_path )
+ element_tree_root = element_tree.getroot()
+ is_tool = element_tree_root.tag == 'tool'
+ except Exception, e:
+ print "Error parsing %s", full_path, ", exception: ", str( e )
+ is_tool = False
+ if is_tool:
+ tool, valid, error_message = load_tool_from_config( app, full_path )
+ if tool is None:
+ if not valid:
+ invalid_file_tups.append( ( name, error_message ) )
+ else:
+ invalid_files_and_errors_tups = check_tool_input_params( app, files_dir, name, tool, sample_file_metadata_paths, webapp=webapp )
+ can_set_metadata = True
+ for tup in invalid_files_and_errors_tups:
+ if name in tup:
+ can_set_metadata = False
+ invalid_tool_configs.append( name )
+ break
+ if can_set_metadata:
+ if resetting_all_metadata_on_repository:
+ full_path_to_tool_config = os.path.join( root, name )
+ stripped_path_to_tool_config = full_path_to_tool_config.replace( work_dir, '' )
+ if stripped_path_to_tool_config.startswith( '/' ):
+ stripped_path_to_tool_config = stripped_path_to_tool_config[ 1: ]
+ relative_path_to_tool_config = os.path.join( relative_install_dir, stripped_path_to_tool_config )
+ else:
+ relative_path_to_tool_config = os.path.join( root, name )
+ metadata_dict = generate_tool_metadata( relative_path_to_tool_config, tool, repository_clone_url, metadata_dict )
else:
- relative_path_to_tool_config = os.path.join( root, name )
- metadata_dict = generate_tool_metadata( relative_path_to_tool_config, tool, repository_clone_url, metadata_dict )
- else:
- invalid_file_tups.extend( invalid_files_and_errors_tups )
+ for tup in invalid_files_and_errors_tups:
+ invalid_file_tups.append( tup )
# Find all exported workflows
elif name.endswith( '.ga' ):
relative_path = os.path.join( root, name )
- fp = open( relative_path, 'rb' )
- workflow_text = fp.read()
- fp.close()
- exported_workflow_dict = from_json_string( workflow_text )
- if 'a_galaxy_workflow' in exported_workflow_dict and exported_workflow_dict[ 'a_galaxy_workflow' ] == 'true':
- metadata_dict = generate_workflow_metadata( relative_path, exported_workflow_dict, metadata_dict )
+ if os.path.getsize( os.path.abspath( relative_path ) ) > 0:
+ fp = open( relative_path, 'rb' )
+ workflow_text = fp.read()
+ fp.close()
+ exported_workflow_dict = from_json_string( workflow_text )
+ if 'a_galaxy_workflow' in exported_workflow_dict and exported_workflow_dict[ 'a_galaxy_workflow' ] == 'true':
+ metadata_dict = generate_workflow_metadata( relative_path, exported_workflow_dict, metadata_dict )
if 'tools' in metadata_dict:
# This step must be done after metadata for tools has been defined.
tool_dependencies_config = get_config_from_disk( 'tool_dependencies.xml', files_dir )
diff -r b43eadc8cdb486b7bfa971ff89552ba04126ef0d -r 42e544d00e75be44887b17f6985bcb251573e1de lib/galaxy/webapps/community/controllers/repository.py
--- a/lib/galaxy/webapps/community/controllers/repository.py
+++ b/lib/galaxy/webapps/community/controllers/repository.py
@@ -1426,9 +1426,22 @@
repository, tool, error_message = load_tool_from_changeset_revision( trans, repository_id, changeset_revision, tool_config )
tool_state = self.__new_state( trans )
is_malicious = changeset_is_malicious( trans, repository_id, repository.tip )
+ invalid_file_tups = []
+ if tool is None:
+ if not valid:
+ invalid_file_tups = [ ( name, error_message ) ]
+ else:
+ invalid_file_tups = check_tool_input_params( trans.app,
+ repository.repo_path,
+ tool_config,
+ tool,
+ [],
+ webapp=webapp )
+ if invalid_file_tups:
+ message = generate_message_for_invalid_tools( invalid_file_tups, repository, {}, as_html=True, displaying_invalid_tool=True )
+ elif error_message:
+ message = error_message
try:
- if error_message:
- message = error_message
return trans.fill_template( "/webapps/community/repository/tool_form.mako",
repository=repository,
changeset_revision=changeset_revision,
@@ -1439,7 +1452,7 @@
message=message,
status='error' )
except Exception, e:
- message = "This tool is invalid because: %s." % str( e )
+ message = "Exception thrown attempting to display tool: %s." % str( e )
if webapp == 'galaxy':
return trans.response.send_redirect( web.url_for( controller='repository',
action='preview_tools_in_changeset',
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0