From: Diane Trout Date: Thu, 28 Oct 2010 00:25:02 +0000 (-0700) Subject: Remove dependency on ExtJS for library & lanes_for pages. X-Git-Tag: 0.5.0~19 X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=htsworkflow.git;a=commitdiff_plain;h=d73efe77754fd0c2c62582329d36f2f2cf09c99a Remove dependency on ExtJS for library & lanes_for pages. The inventory page still needs extjs. In the process I cleaned up some of the CSS as well. The downside is you'll need to link htsworkflow/static/js/jquery.min.js to a valid jquery sourcefile. --- diff --git a/htsworkflow/frontend/static/css/changelists.css b/htsworkflow/frontend/static/css/changelists.css index a156c54..cf0f243 100644 --- a/htsworkflow/frontend/static/css/changelists.css +++ b/htsworkflow/frontend/static/css/changelists.css @@ -1,12 +1,13 @@ @import url('base.css'); /* CHANGELISTS */ -#changelist { position:relative; width:100%; } -#changelist table { width:100%; } +#changelist { margin-bottom: 0pm; } +#changelist table { display: block; } +#changelist table.filtered { margin-right: 21em; overflow-y: scroll; } .change-list .filtered table { border-right:1px solid #ddd; } .change-list .filtered { min-height:400px; } .change-list .filtered { background:white url(../img/changelist-bg.gif) top right repeat-y !important; } -.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { margin-right:160px !important; width:auto !important; } +.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { width:auto !important; } .change-list .filtered table tbody th { padding-right:1em; } #changelist .toplinks { border-bottom:1px solid #ccc !important; } #changelist .paginator { color:#666; border-top:1px solid #eee; border-bottom:1px solid #eee; background:white url(../img/nav-bg.gif) 0 180% repeat-x; overflow:hidden; } @@ -14,8 +15,9 @@ /* CHANGELIST TABLES */ #changelist table thead th { white-space:nowrap; } -#changelist table tbody td { border-left: 1px solid #ddd; } +#changelist table tbody td { border-left: 1px solid #ddd; } #changelist table tfoot { color: #666; } +#changelist tbody { } /* TOOLBAR */ #changelist #toolbar { padding:3px; border-bottom:1px solid #ddd; background:#e1e1e1 url(../img/nav-bg.gif) top left repeat-x; color:#666; } @@ -24,7 +26,12 @@ #changelist #changelist-search img { vertical-align:middle; } /* FILTER COLUMN */ -#changelist-filter { position:absolute; top:0; right:0; z-index:1000; width:160px; border-left:1px solid #ddd; background:#efefef; margin:0; } +/*position:absolute; top:0; right:0; z-index:1000; */ +#changelist-filter { float: right; + width: 20em; + border-left:1px solid #ddd; margin:0; + background:#efefef; + overflow-y: scroll; } #changelist-filter h2 { font-size:11px; padding:2px 5px; border-bottom:1px solid #ddd; } #changelist-filter h3 { font-size:12px; margin-bottom:0; } #changelist-filter ul { padding-left:0;margin-left:10px; } diff --git a/htsworkflow/frontend/static/css/click-table.css b/htsworkflow/frontend/static/css/click-table.css index 9ccc469..1d48412 100644 --- a/htsworkflow/frontend/static/css/click-table.css +++ b/htsworkflow/frontend/static/css/click-table.css @@ -1,19 +1,19 @@ -table.djangocss, td.djangocss { +table, td { border-style: solid; } -table.djangocss { +table { border-width: 0 0 1px 1px; border-spacing: 0; border-collapse: collapse; } -thead.djangocss { +thead { text-align: center; } -td.djangocss { +td { margin: 0; padding: 4px; border-width: 1px 1px 0 0; } -td.djangocss a { +td a { display: block; } diff --git a/htsworkflow/frontend/static/css/forms.css b/htsworkflow/frontend/static/css/forms.css index 7be902b..a4b145f 100644 --- a/htsworkflow/frontend/static/css/forms.css +++ b/htsworkflow/frontend/static/css/forms.css @@ -4,34 +4,34 @@ /* FORM ROWS */ .form-row { overflow:hidden; padding:8px 12px; font-size:11px; border-bottom:1px solid #eee; } .form-row img, .form-row input { vertical-align:middle; } -form.djangocss .form-row p { padding-left:0; font-size:11px; } +form .form-row p { padding-left:0; font-size:11px; } /* FORM LABELS */ -form.djangocss h4 { margin:0 !important; padding:0 !important; border:none !important; } -label.djangocss { font-weight:normal !important; color:#666; font-size:12px; } +form h4 { margin:0 !important; padding:0 !important; border:none !important; } +label { font-weight:normal !important; color:#666; font-size:12px; } .required label, label.required { font-weight:bold !important; color:#333 !important; } /* RADIO BUTTONS */ -form.djangocss ul.radiolist li { list-style-type:none; } -form.djangocss ul.radiolist label { float:none; display:inline; } -form.djangocss ul.inline { margin-left:0; padding:0; } -form.djangocss ul.inline li { float:left; padding-right:7px; } +form ul.radiolist li { list-style-type:none; } +form ul.radiolist label { float:none; display:inline; } +form ul.inline { margin-left:0; padding:0; } +form ul.inline li { float:left; padding-right:7px; } /* ALIGNED FIELDSETS */ .aligned label { display:block; padding:3px 10px 0 0; float:left; width:8em; } .colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { width:350px; } -form.djangocss .aligned p, form .aligned ul { margin-left:7em; padding-left:30px; } -form.djangocss .aligned table p { margin-left:0; padding-left:0; } -form.djangocss .aligned p.help { padding-left:38px; } +form .aligned p, form .aligned ul { margin-left:7em; padding-left:30px; } +form .aligned table p { margin-left:0; padding-left:0; } +form .aligned p.help { padding-left:38px; } .aligned .vCheckboxLabel { float:none !important; display:inline; padding-left:4px; } .colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { width:610px; } .checkbox-row p.help { margin-left:0; padding-left:0 !important; } -fieldset.djangocss .field-box { float:left; margin-right: 20px; } +fieldset .field-box { float:left; margin-right: 20px; } /* WIDE FIELDSETS */ .wide label { width:15em !important; } -form.djangocss .wide p { margin-left:15em; } -form.djangocss .wide p.help { padding-left:38px; } +form .wide p { margin-left:15em; } +form .wide p.help { padding-left:38px; } .colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { width:450px; } /* COLLAPSED FIELDSETS */ diff --git a/htsworkflow/frontend/static/css/global.css b/htsworkflow/frontend/static/css/global.css index 0381afe..fd84060 100644 --- a/htsworkflow/frontend/static/css/global.css +++ b/htsworkflow/frontend/static/css/global.css @@ -1,39 +1,39 @@ -body.djangocss { margin:0; padding:0; font-size:12px; font-family:"Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; background:#fff; } +body { margin:0; padding:0; font-size:12px; font-family:"Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; background:#fff; } /* LINKS */ -a.djangocss:link, a.djangocss:visited { color: #5b80b2; text-decoration:none; } -a.djangocss:hover { color: #036; } -a.djangocss img { border:none; } +a:link, a:visited { color: #5b80b2; text-decoration:none; } +a:hover { color: #036; } +a img { border:none; } a.section:link, a.section:visited { color: white; text-decoration:none; } /* GLOBAL DEFAULTS */ -p.djangocss, ol.djangocss, ul.djangocss, dl.djangocss { margin:.2em 0 .8em 0; } -p.djangocss { padding:0; line-height:140%; } +p, ol, ul, dl { margin:.2em 0 .8em 0; } +p { padding:0; line-height:140%; } -h1.djangocss,h2.djangocss,h3.djangocss,h4.djangocss,h5.djangocss { font-weight:bold; } -h1.djangocss { font-size:18px; color:#666; padding:0 6px 0 0; margin:0 0 .2em 0; } -h2.djangocss { font-size:16px; margin:1em 0 .5em 0; } +h1,h2,h3,h4,h5 { font-weight:bold; } +h1 { font-size:18px; color:#666; padding:0 6px 0 0; margin:0 0 .2em 0; } +h2 { font-size:16px; margin:1em 0 .5em 0; } h2.subhead { font-weight:normal;margin-top:0; } -h3.djangocss { font-size:14px; margin:.8em 0 .3em 0; color:#666; font-weight:bold; } -h4.djangocss { font-size:12px; margin:1em 0 .8em 0; padding-bottom:3px; } -h5.djangocss { font-size:10px; margin:1.5em 0 .5em 0; color:#666; text-transform:uppercase; letter-spacing:1px; } +h3 { font-size:14px; margin:.8em 0 .3em 0; color:#666; font-weight:bold; } +h4 { font-size:12px; margin:1em 0 .8em 0; padding-bottom:3px; } +h5 { font-size:10px; margin:1.5em 0 .5em 0; color:#666; text-transform:uppercase; letter-spacing:1px; } -ul.djangocss li.djangocss { list-style-type:square; padding:1px 0; } +ul li { list-style-type:square; padding:1px 0; } ul.plainlist { margin-left:0 !important; } ul.plainlist li { list-style-type:none; } -li.djangocss ul { margin-bottom:0; } -li.djangocss, dt.djangocss, dd.djangocss { font-size:11px; line-height:14px; } -dt.djangocss { font-weight:bold; margin-top:4px; } -dd.djangocss { margin-left:0; } +li ul { margin-bottom:0; } +li, dt, dd { font-size:11px; line-height:14px; } +dt { font-weight:bold; margin-top:4px; } +dd { margin-left:0; } -form.djangocss { margin:0; padding:0; } -fieldset.djangocss { margin:0; padding:0; } +form { margin:0; padding:0; } +fieldset { margin:0; padding:0; } -blockquote.djangocss { font-size:11px; color:#777; margin-left:2px; padding-left:10px; border-left:5px solid #ddd; } -code.djangocss, pre.djangocss { font-family:"Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; background:inherit; color:#666; font-size:11px; } +blockquote { font-size:11px; color:#777; margin-left:2px; padding-left:10px; border-left:5px solid #ddd; } +code, pre { font-family:"Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; background:inherit; color:#666; font-size:11px; } pre.literal-block { margin:10px; background:#eee; padding:6px 8px; } -code.djangocss strong { color:#930; } -hr.djangocss { clear:both; color:#eee; background-color:#eee; height:1px; border:none; margin:0; padding:0; font-size:1px; line-height:1px; } +code strong { color:#930; } +hr { clear:both; color:#eee; background-color:#eee; height:1px; border:none; margin:0; padding:0; font-size:1px; line-height:1px; } /* TEXT STYLES & MODIFIERS */ .small { font-size:11px; } @@ -54,27 +54,27 @@ p img, h1 img, h2 img, h3 img, h4 img, td img { vertical-align:middle; } .nowrap { white-space:nowrap; } /* TABLES */ -table.djangocss { border-collapse:collapse; border-color:#ccc; } -td.djangocss, th.djangocss { font-size:11px; line-height:13px; border-bottom:1px solid #eee; vertical-align:top; padding:5px; font-family:"Lucida Grande", Verdana, Arial, sans-serif; } -th.djangocss { text-align:left; font-size:12px; font-weight:bold; } -thead.djangocss th, -tfoot.djangocss td { color:#666; padding:2px 5px; font-size:11px; background:#e1e1e1 url(../img/nav-bg.gif) top left repeat-x; border-left:1px solid #ddd; border-bottom:1px solid #ddd; } -tfoot.djangocss td { border-bottom:none; border-top:1px solid #ddd; } -thead.djangocss th:first-child, -tfoot.djangocss td:first-child { border-left:none !important; } -thead.djangocss th.optional { font-weight:normal !important; } -fieldset.djangocss table { border-right:1px solid #eee; } +table { border-collapse:collapse; border-color:#ccc; } +td, th { font-size:11px; line-height:13px; border-bottom:1px solid #eee; vertical-align:top; padding:5px; font-family:"Lucida Grande", Verdana, Arial, sans-serif; } +th { text-align:left; font-size:12px; font-weight:bold; } +thead th, +tfoot td { color:#666; padding:2px 5px; font-size:11px; background:#e1e1e1 url(../img/nav-bg.gif) top left repeat-x; border-left:1px solid #ddd; border-bottom:1px solid #ddd; } +tfoot td { border-bottom:none; border-top:1px solid #ddd; } +thead th:first-child, +tfoot td:first-child { border-left:none !important; } +thead th.optional { font-weight:normal !important; } +fieldset table { border-right:1px solid #eee; } tr.row-label td { font-size:9px; padding-top:2px; padding-bottom:0; border-bottom:none; color:#666; margin-top:-1px; } tr.alt { background:#f6f6f6; } .row1 { background:#EDF3FE; } .row2 { background:white; } /* SORTABLE TABLES */ -thead.djangocss th a:link, thead th a:visited { color:#666; display:block; } -table.djangocss thead th.sorted { background-position:bottom left !important; } -table.djangocss thead th.sorted a { padding-right:13px; } -table.djangocss thead th.ascending a { background:url(../img/arrow-down.gif) right .4em no-repeat; } -table.djangocss thead th.descending a { background:url(../img/arrow-up.gif) right .4em no-repeat; } +thead th a:link, thead th a:visited { color:#666; display:block; } +table thead th.sorted { background-position:bottom left !important; } +table thead th.sorted a { padding-right:13px; } +table thead th.ascending a { background:url(../img/arrow-down.gif) right .4em no-repeat; } +table thead th.descending a { background:url(../img/arrow-up.gif) right .4em no-repeat; } /* ORDERABLE TABLES */ table.orderable tbody tr td:hover { cursor:move; } @@ -82,9 +82,9 @@ table.orderable tbody tr td:first-child { padding-left:14px; background-image:ur table.orderable-initalized .order-cell, body>tr>td.order-cell { display:none; } /* FORM DEFAULTS */ -input.djangocss, textarea.djangocss, select.djangocss { margin:2px 0; padding:2px 3px; vertical-align:middle; font-family:"Lucida Grande", Verdana, Arial, sans-serif; font-weight:normal; font-size:11px; } -textarea.djangocss { vertical-align:top !important; } -input.djangocss[type=text], input.djangocss[type=password], textarea.djangocss, select.djangocss, .vTextField { border:1px solid #ccc; } +input, textarea, select { margin:2px 0; padding:2px 3px; vertical-align:middle; font-family:"Lucida Grande", Verdana, Arial, sans-serif; font-weight:normal; font-size:11px; } +textarea { vertical-align:top !important; } +input[type=text], input[type=password], textarea, select, .vTextField { border:1px solid #ccc; } /* FORM BUTTONS */ .button, input[type=submit], input[type=button], .submit-row input { background:white url(../img/nav-bg.gif) bottom repeat-x; padding:3px; color:black; border:1px solid #bbb; border-color:#ddd #aaa #aaa #ddd; } diff --git a/htsworkflow/frontend/static/js/htsw.js b/htsworkflow/frontend/static/js/htsw.js index 7129ac5..e69de29 100644 --- a/htsworkflow/frontend/static/js/htsw.js +++ b/htsworkflow/frontend/static/js/htsw.js @@ -1,323 +0,0 @@ -Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); - -Ext.override(Ext.Panel,{ - getState: function() { - return { collapsed: this.collapsed }; - } -}); - -var quick_msg = function(msg) -{ - Ext.MessageBox.show({ - title: 'Info', - msg: msg, - buttons: Ext.MessageBox.OK, - icon: Ext.MessageBox.INFO - }); -} - -var goto_url = function(www_url) -{ - window.location = www_url; -} - -var RESIZEME_ARRAY = new Array(); - -var resize_registered_panel = function(pnl){ - Ext.each(RESIZEME_ARRAY, function(fnc){ - fnc(); - }); -} - -var resize_registered = function(cmp, adj_w, adj_h, raw_w, raw_h){ - Ext.each(RESIZEME_ARRAY, function(fnc){ - fnc(); - }); -} - -$(document).ready(function(){ - //---------------------------------------- - // Django Library Page CSS Fix - var fix_library_css = function() { - var tofix = Ext.fly('library-index-div'); - if (tofix != null) - { - tofix.select('*').addClass('djangocss'); - } - } - fix_library_css(); - - - //---------------------------------------- - // Dynamically Generate Panels from HTML! - var create_dynamic_panels = function(){ - var wp_items = Ext.fly('west_panel_items'); - var ul_items = wp_items.query('ul'); - - var dynamic_panels = new Array(); - Ext.each(ul_items, function(ul) { - var panel_obj = new Ext.Panel({ - frame: true, - title: ul.id, - //collapsible: true, - //titleCollapse: true, - //collapsed: true, - //stateful: true, - //stateId: 'freezer_panel_state', - margins: '0 0 0 0', - //width: 200, - contentEl: ul - //stateEvents: ['collapse', 'expand'] - }); - dynamic_panels.push(panel_obj); - }); - return dynamic_panels; - } - - var panel_bcmagic = new Ext.Panel({ - //title: 'BC Magic', - unstyled: true, - contentEl: 'bcmagic_div', - height: 180 - }); - - var menuPanel = new Ext.Panel({ - id: 'menu_panel', - region: 'west', - hidden: true, - collapsible: true, - split: true, - collapseMode: 'mini', - margins: '4 0 0 0', - //cmargins: '2 2 0 2', - width: 200, - minWidth: 150, - border: false, - //baseCls: 'x-plain', - unstyled: true, - layout: 'vbox', - layoutConfig: { - align: 'stretch', - pack: 'start' - }, - // Add dynamically generated panels from html and include barcode magic - items: create_dynamic_panels().concat([panel_bcmagic]) - }); - - - - //------------------------------- - // East Region Setup - //------------------------------- - var get_east_panel_content = function(){ - // East panel contentEl id is supplied in html div id of east_region_config. - var east_id = Ext.fly('east_region_config').dom.textContent; - - // Length of zero is a valid response... also happens to return null in next - // if statement if not handled before hand. - if (east_id.length == 0){ - return east_id; - } - - // If no element exists with the supplied content id, report and error. - if (Ext.fly(east_id) == null){ - return 'east_region_config_error'; - } - - return east_id; - } - - var east_panel_content_id = get_east_panel_content(); - if (east_panel_content_id.length > 0){ - var eastPanel = new Ext.Panel({ - region: 'east', - layout: 'auto', - //margins: '0 2 0 2', - width: 180, - collapsible: true, - split: true, - collapseMode: 'mini', - autoScroll: true, - contentEl: east_panel_content_id - }); - } else { - var eastPanel = new Ext.Panel({ - region: 'east', - layout: 'auto', - //margins: '0 2 0 2', - width: 180, - collapsible: true, - split: true, - hidden: true, - collapseMode: 'mini', - autoScroll: true - //contentEl: '' - }); - } - - - //------------------------------- - // Main Viewport Setup - //------------------------------- - var mainBorderPanel = new Ext.Viewport({ - //id: 'main_viewport', - layout: 'border', - items: [{ - id: 'north_border_panel', - region: 'north', - layout: 'vBox', - layoutConfig: { - align: 'stretch', - pack: 'start' - }, - items: [{ - xtype: 'box', - applyTo: 'header', - id: 'header-panel', - height: 30 - },{ - id: 'main_toolbar', - xtype: 'toolbar', - height: 30, - //height: 100, - /*items: [{ - text: "Demo Button", - handler: function() { quick_msg('Messages can be fun!'); } - }],*/ - margins: '2 0 0 0' - },{ - id: 'app_toolbar', - xtype: 'toolbar', - height: 30 - //margins: '2 0 0 0' - }], - height: 90, - collapsible: true, - collapseMode: 'mini', - split: true - },menuPanel,{ - //title: 'Body', - id: 'body_content_panel', - region: 'center', - xtype: 'panel', - //autoScroll: true, - layout: 'fit', - margins: '2 0 2 0', - monitorResize: true, - items: [{ - //title: 'Inner Panel', - contentEl: 'body_content', - border: true, - autoScroll: true - }] - },eastPanel] - }); - - // Using a little trick to resize registered components: - // i.e. just use RESIZEME_ARRAY.push(function() { }); to register a function - // to be called during these events. - mainBorderPanel.on('resize', resize_registered); - var northBorderPanel = Ext.getCmp('north_border_panel'); - northBorderPanel.on('collapse', resize_registered_panel); - northBorderPanel.on('expand', resize_registered_panel); - - - //------------------------------- - // Menu Bar Setup - //------------------------------- - var main_tb = Ext.getCmp('main_toolbar'); - - var add_buttons_from_html = function(tb, bar_id){ - var tbar_data = Ext.fly(bar_id); - var div_array = tbar_data.query('div'); - var div_id = null; - // Loop through each div since it defines a button and link or a spacer and add it to the right side of the toolbar - Ext.each(div_array, function(divobj) { - div_id = divobj.id; - if (div_id == 'spacer'){ - tb.add('-'); - } else { - tb.add({ - text: div_id, - handler: function() { goto_url(divobj.getAttribute('href')); }, - disabled: (divobj.textContent == 'disabled') ? true : false - }); - } - }); - } - - // Fill in left side of main toolbar - add_buttons_from_html(main_tb, 'left_tbar_data'); - - // Shifts the remaining toolbar options to the right side. - main_tb.add({ xtype: 'tbfill' }); - - //---------------------------------------- - // ExtJS Barcode Magic Implementation - var bcmagic_ext_keyhandler = function(sObj, e){ - //Process upon enter key as input. - if (e.getKey() == e.ENTER) - bcmagic_process(); - } - - var bcmagic_input = new Ext.form.TextField({ - id: 'bcmagic_input_field', - emptyText: 'barcode magic' - }); - bcmagic_input.on('specialkey', bcmagic_ext_keyhandler); - - main_tb.add(bcmagic_input); - main_tb.add('-') - //-------------------------------------- - - var user_info = Ext.fly('login_info'); - var logout_url = user_info.getAttribute('logouturl'); - var login_url = user_info.getAttribute('loginurl'); - - if (user_info.getAttribute('authenticated') == 'true') { - main_tb.add({ - xtype: 'tbtext', - text: 'User: ' + user_info.getAttribute('user') - }); - main_tb.add('-'); - add_buttons_from_html(main_tb, 'right_tbar_data'); - main_tb.add('-'); - main_tb.add({ - text: 'Logout', - handler: function() { goto_url(logout_url); } - }); - - } else { - main_tb.add({ - text: 'Login', - handler: function() { goto_url(login_url) } - }); - } - - main_tb.doLayout(); - - //------------------------------- - // App Toolbar Setup - //------------------------------- - var app_tb = Ext.getCmp('app_toolbar'); - add_buttons_from_html(app_tb, 'app_toolbar_west'); - app_tb.add({ xtype: 'tbfill' }); - add_buttons_from_html(app_tb, 'app_toolbar_east'); - app_tb.doLayout(); - - // Focus on barcode magic, because it's awesome and needs attention! ;-) - bcmagic_input.focus(); - - // FIXME: grid target temp code. - var grid_target = Ext.fly('grid_target'); - if (grid_target != null){ - var grid = getInventoryDataGrid(); - grid.render(grid_target); - RESIZEME_ARRAY.push(function() { - Ext.getCmp('inventory_item_panel').setHeight(Ext.getCmp('body_content_panel').getHeight()-4); - }); - grid.setHeight(Ext.get('body_content_panel').getHeight()-4); - } - - -}); \ No newline at end of file diff --git a/htsworkflow/frontend/static/js/jquery-1.3.2.js b/htsworkflow/frontend/static/js/jquery-1.3.2.js deleted file mode 100644 index 9263574..0000000 --- a/htsworkflow/frontend/static/js/jquery-1.3.2.js +++ /dev/null @@ -1,4376 +0,0 @@ -/*! - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){ - -var - // Will speed up references to window, and allows munging its name. - window = this, - // Will speed up references to undefined, and allows munging its name. - undefined, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, - - jQuery = window.jQuery = window.$ = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - this.context = selector; - return this; - } - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - var match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) - selector = jQuery.clean( [ match[1] ], context ); - - // HANDLE: $("#id") - else { - var elem = document.getElementById( match[3] ); - - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem && elem.id != match[3] ) - return jQuery().find( selector ); - - // Otherwise, we inject the element directly into the jQuery object - var ret = jQuery( elem || [] ); - ret.context = document; - ret.selector = selector; - return ret; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery( context ).find( selector ); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document ).ready( selector ); - - // Make sure that old selector state is passed along - if ( selector.selector && selector.context ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return this.setArray(jQuery.isArray( selector ) ? - selector : - jQuery.makeArray(selector)); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.3.2", - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num === undefined ? - - // Return a 'clean' array - Array.prototype.slice.call( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery( elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) - ret.selector = this.selector + (this.selector ? " " : "") + selector; - else if ( name ) - ret.selector = this.selector + "." + name + "(" + selector + ")"; - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - var options = name; - - // Look for the case where we're accessing a style value - if ( typeof name === "string" ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - if ( typeof text !== "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); - - if ( this[0].parentNode ) - wrap.insertBefore( this[0] ); - - wrap.map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }).append(this); - } - - return this; - }, - - wrapInner: function( html ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - return this.prevObject || jQuery( [] ); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: [].push, - sort: [].sort, - splice: [].splice, - - find: function( selector ) { - if ( this.length === 1 ) { - var ret = this.pushStack( [], "find", selector ); - ret.length = 0; - jQuery.find( selector, this[0], ret ); - return ret; - } else { - return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - })), "find", selector ); - } - }, - - clone: function( events ) { - // Do the clone - var ret = this.map(function(){ - if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - } else - return this.cloneNode(true); - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = this.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) - return; - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ - return elem.nodeType === 1; - }) ), "filter", selector ); - }, - - closest: function( selector ) { - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; - - return this.map(function(){ - var cur = this; - while ( cur && cur.ownerDocument ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); - return cur; - } - cur = cur.parentNode; - closer++; - } - }); - }, - - not: function( selector ) { - if ( typeof selector === "string" ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return !!selector && this.is( "." + selector ); - }, - - val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if( jQuery.nodeName( elem, 'option' ) ) - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type == "select-one"; - - // Nothing was selected - if ( index < 0 ) - return null; - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) - return value; - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if ( typeof value === "number" ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, +i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; - - if ( first ) - for ( var i = 0, l = this.length; i < l; i++ ) - callback.call( root(this[i], first), this.length > 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); - - if ( scripts ) - jQuery.each( scripts, evalScript ); - } - - return this; - - function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) - target = {}; - - // extend jQuery itself if only one argument is passed - if ( length == i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, - toString = Object.prototype.toString; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && /\S/.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.support.scriptEval ) - script.appendChild( document.createTextNode( data ) ); - else - script.text = data; - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - if ( args ) { - if ( length === undefined ) { - for ( name in object ) - if ( callback.apply( object[ name ], args ) === false ) - break; - } else - for ( ; i < length; ) - if ( callback.apply( object[ i++ ], args ) === false ) - break; - - // A special, fast, case for the most common use of each - } else { - if ( length === undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - if (elem.nodeType == 1) - elem.className = classNames !== undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force, extra ) { - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) - return; - - jQuery.each( which, function() { - if ( !extra ) - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - if ( extra === "margin" ) - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - else - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - } - - if ( elem.offsetWidth !== 0 ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, Math.round(val)); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - var ret, style = elem.style; - - // We need to handle opacity special in IE - if ( name == "opacity" && !jQuery.support.opacity ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) - ret = computedStyle.getPropertyValue( name ); - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context, fragment ) { - context = context || document; - - // !context.createElement fails in IE with an error but returns typeof 'object' - if ( typeof context.createElement === "undefined" ) - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { - var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); - if ( match ) - return [ context.createElement( match[1] ) ]; - } - - var ret = [], scripts = [], div = context.createElement("div"); - - jQuery.each(elems, function(i, elem){ - if ( typeof elem === "number" ) - elem += ''; - - if ( !elem ) - return; - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
" ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and - - - + {% block additional_javascript %} {% endblock %} - - - {{ bcmagic.media }} - - - -
- {% block dynamic_panels %} - - {% endblock %} -
- - - - - {% block east_region %} -
{% if east_region_config_div %}{{ east_region_config_div }}{% endif %}
- {% endblock %} -
Check contents of div w/ id east_region_config, as the id supplied in text block does not exist.
- - -
- {% block left_tbar_menu %} -
-
{% if user.is_authenticated %}{% else %}disabled{% endif %}
- {% endblock %} -
- - -
- {% block right_tbar_menu %} - -
-
-
- {% endblock %} -
- - -
- - -
- {% block app_toolbar_west %} - {% endblock %} -
-
- {% block app_toolbar_east %} - {% endblock %} -
- -
- {% block msg %} -
{{ msg }}
- {% endblock %} - {% block content %} - {{ body }} - {% endblock %} -
+ {% block msg %} +
{{ msg }}
+ {% endblock %} + {% block content %} + {{ body }} + {% endblock %} diff --git a/htsworkflow/frontend/templates/base.html b/htsworkflow/frontend/templates/base.html index b201c88..b5e1c39 100644 --- a/htsworkflow/frontend/templates/base.html +++ b/htsworkflow/frontend/templates/base.html @@ -32,13 +32,13 @@ {% block breadcrumbs %}{% endblock %} {% endif %} {% if messages %} -
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
+
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} -
+
{% block pretitle %}{% endblock %} - {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} + {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} {% block content %} {% block object-tools %}{% endblock %} {{ content }} @@ -48,7 +48,7 @@
- {% block footer %}{% endblock %} + {% block footer %}{% endblock %} - \ No newline at end of file + diff --git a/htsworkflow/frontend/templates/base_site.html b/htsworkflow/frontend/templates/base_site.html index dae6d9a..7381f62 100644 --- a/htsworkflow/frontend/templates/base_site.html +++ b/htsworkflow/frontend/templates/base_site.html @@ -6,7 +6,7 @@ {% block title %}{{ sitename }}{% endblock %} {% block branding %} -

HTSWorkflow

+

HTSWorkflow

{% endblock %} {% block nav-global %}{% endblock %} diff --git a/htsworkflow/frontend/templates/samples/lanes_for.html b/htsworkflow/frontend/templates/samples/lanes_for.html index 2c3e44b..90bce6a 100644 --- a/htsworkflow/frontend/templates/samples/lanes_for.html +++ b/htsworkflow/frontend/templates/samples/lanes_for.html @@ -6,14 +6,14 @@ {% block coltype %}flex{% endblock %} {% block content %} -
+
{% block search %}{% search_form lanes %}{% endblock %} {% block filters %} {% if lanes.has_filters %}
-

{% trans 'Filter' %}

+

{% trans 'Filter' %}

{% for spec in lanes.filter_specs %} {% admin_list_filter lanes spec %} {% endfor %} @@ -25,40 +25,40 @@ {% block pagination %}{% pagination lanes %}{% endblock %} {% block body %} - - - - - - - - - - +
Run DateFlowcell TypeCyclesFlowcell IDLaneLibrary IDLibrary Name
+ + + + + + + + + - + {% for lane in lanes.query_set %} - - + - - - - - - diff --git a/htsworkflow/frontend/templates/samples/library_index.html b/htsworkflow/frontend/templates/samples/library_index.html index 0c7b721..af2f9ed 100644 --- a/htsworkflow/frontend/templates/samples/library_index.html +++ b/htsworkflow/frontend/templates/samples/library_index.html @@ -1,41 +1,52 @@ {% extends "base_site.html" %} {% load adminmedia admin_list i18n %} - +{% block extrahead %} + +{% endblock %} {% block bodyclass %}change-list{% endblock %} {% block coltype %}flex{% endblock %} {% block content %} -
+
{% block search %}{% search_form cl %}{% endblock %} + + {% block pagination %}{% pagination cl %}{% endblock %} {% block filters %} {% if cl.has_filters %}
-

{% trans 'Filter' %}

+

{% trans 'Filter' %}

{% for spec in cl.filter_specs %} {% admin_list_filter cl spec %} {% endfor %}
- {% endif %} - {% endblock %} - - - {% block pagination %}{% pagination cl %}{% endblock %} - + {% endif %} + {% endblock %} {% block summary_stats %} -
Run DateFlowcell TypeCyclesFlowcell IDLaneLibrary IDLibrary Name
+
{{ lane.flowcell.run_date|date:"Y-M-d" }} + {{ lane.flowcell.flowcell_type }} + {{ lane.flowcell.read_length }} + {{ lane.flowcell.flowcell_id }} + {{ lane.lane_number }} + {{ lane.library_id }} + {{ lane.library.library_name }}
- - - - - - - - - +
ParentLibrary IDSpeciesLibrary NameSinglePairedHD
+ + + + + + + + + - + @@ -46,28 +57,29 @@ - + {% for lib in library_list %} - - - - - - - - - - - + + + + + + + + + + + {% if lib.is_archived %} - + {% else %} - + {% endif %} {% endfor %}
ParentLibrary IDSpeciesLibrary NameSinglePairedHD
<40 <100
{{ lib.amplified_from }}{{ lib.library_id }}{{ lib.species_name }}{{ lib.library_name }}{{ lib.lanes_run.0.0 }}{{ lib.lanes_run.0.1 }}{{ lib.lanes_run.0.2 }}{{ lib.lanes_run.1.0 }}{{ lib.lanes_run.1.1 }}{{ lib.lanes_run.1.2 }}
{{ lib.amplified_from }}{{ lib.library_id }}{{ lib.species_name }}{{ lib.library_name }}{{ lib.lanes_run.0.0 }}{{ lib.lanes_run.0.1 }}{{ lib.lanes_run.0.2 }}{{ lib.lanes_run.1.0 }}{{ lib.lanes_run.1.1 }}{{ lib.lanes_run.1.2 }}ArchivedArchived
+ {% endblock %} {% endblock %}