Next changeset 1:1e9797878349 (2015-06-29) |
Commit message:
First commit |
added:
data/css/asc.gif data/css/bg.gif data/css/custom.css data/css/desc.gif data/css/normalize.css data/css/skeleton.css data/js/custom.js data/js/jquery-1.11.3.min.js data/js/jquery-1.11.3.min.map data/js/jquery.tablesorter.min.js data/ribocount.html data/ribocount_index.html data/riboplot.html ribocount.xml riboplot.xml riboplot/__init__.py riboplot/config.py riboplot/core.py riboplot/ribocount.py riboplot/riboplot.py runtests.sh tests/__init__.py tests/test_plot.py tool_dependencies.xml |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/asc.gif |
b |
Binary file data/css/asc.gif has changed |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/bg.gif |
b |
Binary file data/css/bg.gif has changed |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/custom.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/css/custom.css Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,61 @@ +.info { + font-weight: normal; +} + +.text-muted { + font-size: 0.6em; + text-align: center; + color: #555555; +} + +#main { + text-align: center; +} + +#page-title { + margin-top: 5%; +} + +/* tables */ +table.tablesorter { + border: 1px solid #eeeeee; +} + +table.tablesorter thead tr .header { + background-image: url(bg.gif); + background-repeat: no-repeat; + background-position: center right; + cursor: pointer; +} + +table.tablesorter thead tr .headerSortUp { + background-image: url(asc.gif); +} + +table.tablesorter thead tr .headerSortDown { + background-image: url(desc.gif); +} + +table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { + background-color: #eeeeee; +} + +table.tablesorter tbody { + font-family: monospace; +} + +#overlay { + top: 20px; + left: 50%; + position: absolute; + margin-left: -170px; + width: 250px; + text-align: center; + display: none; + margin-top: -10px; + background: #F6FF00; + color: #515151; + padding: 3px; + border-radius: 5px; + box-shadow: 3px 3px 3px #eeeeee; +} \ No newline at end of file |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/desc.gif |
b |
Binary file data/css/desc.gif has changed |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/normalize.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/css/normalize.css Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,427 @@\n+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n+\n+/**\n+ * 1. Set default font family to sans-serif.\n+ * 2. Prevent iOS text size adjust after orientation change, without disabling\n+ * user zoom.\n+ */\n+\n+html {\n+ font-family: sans-serif; /* 1 */\n+ -ms-text-size-adjust: 100%; /* 2 */\n+ -webkit-text-size-adjust: 100%; /* 2 */\n+}\n+\n+/**\n+ * Remove default margin.\n+ */\n+\n+body {\n+ margin: 0;\n+}\n+\n+/* HTML5 display definitions\n+ ========================================================================== */\n+\n+/**\n+ * Correct `block` display not defined for any HTML5 element in IE 8/9.\n+ * Correct `block` display not defined for `details` or `summary` in IE 10/11\n+ * and Firefox.\n+ * Correct `block` display not defined for `main` in IE 11.\n+ */\n+\n+article,\n+aside,\n+details,\n+figcaption,\n+figure,\n+footer,\n+header,\n+hgroup,\n+main,\n+menu,\n+nav,\n+section,\n+summary {\n+ display: block;\n+}\n+\n+/**\n+ * 1. Correct `inline-block` display not defined in IE 8/9.\n+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n+ */\n+\n+audio,\n+canvas,\n+progress,\n+video {\n+ display: inline-block; /* 1 */\n+ vertical-align: baseline; /* 2 */\n+}\n+\n+/**\n+ * Prevent modern browsers from displaying `audio` without controls.\n+ * Remove excess height in iOS 5 devices.\n+ */\n+\n+audio:not([controls]) {\n+ display: none;\n+ height: 0;\n+}\n+\n+/**\n+ * Address `[hidden]` styling not present in IE 8/9/10.\n+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n+ */\n+\n+[hidden],\n+template {\n+ display: none;\n+}\n+\n+/* Links\n+ ========================================================================== */\n+\n+/**\n+ * Remove the gray background color from active links in IE 10.\n+ */\n+\n+a {\n+ background-color: transparent;\n+}\n+\n+/**\n+ * Improve readability when focused and also mouse hovered in all browsers.\n+ */\n+\n+a:active,\n+a:hover {\n+ outline: 0;\n+}\n+\n+/* Text-level semantics\n+ ========================================================================== */\n+\n+/**\n+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n+ */\n+\n+abbr[title] {\n+ border-bottom: 1px dotted;\n+}\n+\n+/**\n+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n+ */\n+\n+b,\n+strong {\n+ font-weight: bold;\n+}\n+\n+/**\n+ * Address styling not present in Safari and Chrome.\n+ */\n+\n+dfn {\n+ font-style: italic;\n+}\n+\n+/**\n+ * Address variable `h1` font-size and margin within `section` and `article`\n+ * contexts in Firefox 4+, Safari, and Chrome.\n+ */\n+\n+h1 {\n+ font-size: 2em;\n+ margin: 0.67em 0;\n+}\n+\n+/**\n+ * Address styling not present in IE 8/9.\n+ */\n+\n+mark {\n+ background: #ff0;\n+ color: #000;\n+}\n+\n+/**\n+ * Address inconsistent and variable font size in all browsers.\n+ */\n+\n+small {\n+ font-size: 80%;\n+}\n+\n+/**\n+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n+ */\n+\n+sub,\n+sup {\n+ font-size: 75%;\n+ line-height: 0;\n+ position: relative;\n+ vertical-align: baseline;\n+}\n+\n+sup {\n+ top: -0.5em;\n+}\n+\n+sub {\n+ bottom: -0.25em;\n+}\n+\n+/* Embedded content\n+ ========================================================================== */\n+\n+/**\n+ * Remove border when inside `a` element in IE 8/9/10.\n+ */\n+\n+img {\n+ border: 0;\n+}\n+\n+/**\n+ * Correct overflow not hidden in IE 9/10/11.\n+ */\n+\n+svg:not(:root) {\n+ overflow: hidden;\n+}\n+\n+/* Grouping content\n+ ========================================================================== */\n+\n+/**\n+ * Address margin not present in IE 8/9 and Safari.\n+ */\n+\n+figure {\n+ margin: 1em 40px;\n+}\n+\n+/**\n+ * Address differences between Firefox and other browsers.\n+ */\n+\n+hr {\n+ -moz-box-sizing: content-box;\n+ box-sizing: content-box;\n+ height: 0;\n+}\n+\n+/**\n+ * Contain overflow in all browsers.\n+ */\n+\n+pre {\n+ overflow: auto;\n+}\n+\n+/**\n+ * Address odd `em`-unit font size rendering in all browsers.\n+ */\n+\n+code,\n+kbd,\n+pre,\n+samp {\n+ font-family: monospace, monospace;\n+ font-size: 1em;\n+}\n+\n+/* Forms\n+ ======================================'..b' of disabled elements.\n+ * 2. Correct font properties not being inherited.\n+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n+ */\n+\n+button,\n+input,\n+optgroup,\n+select,\n+textarea {\n+ color: inherit; /* 1 */\n+ font: inherit; /* 2 */\n+ margin: 0; /* 3 */\n+}\n+\n+/**\n+ * Address `overflow` set to `hidden` in IE 8/9/10/11.\n+ */\n+\n+button {\n+ overflow: visible;\n+}\n+\n+/**\n+ * Address inconsistent `text-transform` inheritance for `button` and `select`.\n+ * All other form control elements do not inherit `text-transform` values.\n+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n+ * Correct `select` style inheritance in Firefox.\n+ */\n+\n+button,\n+select {\n+ text-transform: none;\n+}\n+\n+/**\n+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n+ * and `video` controls.\n+ * 2. Correct inability to style clickable `input` types in iOS.\n+ * 3. Improve usability and consistency of cursor style between image-type\n+ * `input` and others.\n+ */\n+\n+button,\n+html input[type="button"], /* 1 */\n+input[type="reset"],\n+input[type="submit"] {\n+ -webkit-appearance: button; /* 2 */\n+ cursor: pointer; /* 3 */\n+}\n+\n+/**\n+ * Re-set default cursor for disabled elements.\n+ */\n+\n+button[disabled],\n+html input[disabled] {\n+ cursor: default;\n+}\n+\n+/**\n+ * Remove inner padding and border in Firefox 4+.\n+ */\n+\n+button::-moz-focus-inner,\n+input::-moz-focus-inner {\n+ border: 0;\n+ padding: 0;\n+}\n+\n+/**\n+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n+ * the UA stylesheet.\n+ */\n+\n+input {\n+ line-height: normal;\n+}\n+\n+/**\n+ * It\'s recommended that you don\'t attempt to style these elements.\n+ * Firefox\'s implementation doesn\'t respect box-sizing, padding, or width.\n+ *\n+ * 1. Address box sizing set to `content-box` in IE 8/9/10.\n+ * 2. Remove excess padding in IE 8/9/10.\n+ */\n+\n+input[type="checkbox"],\n+input[type="radio"] {\n+ box-sizing: border-box; /* 1 */\n+ padding: 0; /* 2 */\n+}\n+\n+/**\n+ * Fix the cursor style for Chrome\'s increment/decrement buttons. For certain\n+ * `font-size` values of the `input`, it causes the cursor style of the\n+ * decrement button to change from `default` to `text`.\n+ */\n+\n+input[type="number"]::-webkit-inner-spin-button,\n+input[type="number"]::-webkit-outer-spin-button {\n+ height: auto;\n+}\n+\n+/**\n+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n+ * (include `-moz` to future-proof).\n+ */\n+\n+input[type="search"] {\n+ -webkit-appearance: textfield; /* 1 */\n+ -moz-box-sizing: content-box;\n+ -webkit-box-sizing: content-box; /* 2 */\n+ box-sizing: content-box;\n+}\n+\n+/**\n+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n+ * Safari (but not Chrome) clips the cancel button when the search input has\n+ * padding (and `textfield` appearance).\n+ */\n+\n+input[type="search"]::-webkit-search-cancel-button,\n+input[type="search"]::-webkit-search-decoration {\n+ -webkit-appearance: none;\n+}\n+\n+/**\n+ * Define consistent border, margin, and padding.\n+ */\n+\n+fieldset {\n+ border: 1px solid #c0c0c0;\n+ margin: 0 2px;\n+ padding: 0.35em 0.625em 0.75em;\n+}\n+\n+/**\n+ * 1. Correct `color` not being inherited in IE 8/9/10/11.\n+ * 2. Remove padding so people aren\'t caught out if they zero out fieldsets.\n+ */\n+\n+legend {\n+ border: 0; /* 1 */\n+ padding: 0; /* 2 */\n+}\n+\n+/**\n+ * Remove default vertical scrollbar in IE 8/9/10/11.\n+ */\n+\n+textarea {\n+ overflow: auto;\n+}\n+\n+/**\n+ * Don\'t inherit the `font-weight` (applied by a rule above).\n+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n+ */\n+\n+optgroup {\n+ font-weight: bold;\n+}\n+\n+/* Tables\n+ ========================================================================== */\n+\n+/**\n+ * Remove most spacing between table cells.\n+ */\n+\n+table {\n+ border-collapse: collapse;\n+ border-spacing: 0;\n+}\n+\n+td,\n+th {\n+ padding: 0;\n+}\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r ca58e9466cbf data/css/skeleton.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/css/skeleton.css Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,419 @@\n+/*\n+* Skeleton V2.0.4\n+* Copyright 2014, Dave Gamache\n+* www.getskeleton.com\n+* Free to use under the MIT license.\n+* http://www.opensource.org/licenses/mit-license.php\n+* 12/29/2014\n+*/\n+\n+\n+/* Table of contents\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\n+- Grid\n+- Base Styles\n+- Typography\n+- Links\n+- Buttons\n+- Forms\n+- Lists\n+- Code\n+- Tables\n+- Spacing\n+- Utilities\n+- Clearing\n+- Media Queries\n+*/\n+\n+\n+/* Grid\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+.container {\n+ position: relative;\n+ width: 100%;\n+ max-width: 960px;\n+ margin: 0 auto;\n+ padding: 0 20px;\n+ box-sizing: border-box; }\n+.column,\n+.columns {\n+ width: 100%;\n+ float: left;\n+ box-sizing: border-box; }\n+\n+/* For devices larger than 400px */\n+@media (min-width: 400px) {\n+ .container {\n+ width: 85%;\n+ padding: 0; }\n+}\n+\n+/* For devices larger than 550px */\n+@media (min-width: 550px) {\n+ .container {\n+ width: 80%; }\n+ .column,\n+ .columns {\n+ margin-left: 4%; }\n+ .column:first-child,\n+ .columns:first-child {\n+ margin-left: 0; }\n+\n+ .one.column,\n+ .one.columns { width: 4.66666666667%; }\n+ .two.columns { width: 13.3333333333%; }\n+ .three.columns { width: 22%; }\n+ .four.columns { width: 30.6666666667%; }\n+ .five.columns { width: 39.3333333333%; }\n+ .six.columns { width: 48%; }\n+ .seven.columns { width: 56.6666666667%; }\n+ .eight.columns { width: 65.3333333333%; }\n+ .nine.columns { width: 74.0%; }\n+ .ten.columns { width: 82.6666666667%; }\n+ .eleven.columns { width: 91.3333333333%; }\n+ .twelve.columns { width: 100%; margin-left: 0; }\n+\n+ .one-third.column { width: 30.6666666667%; }\n+ .two-thirds.column { width: 65.3333333333%; }\n+\n+ .one-half.column { width: 48%; }\n+\n+ /* Offsets */\n+ .offset-by-one.column,\n+ .offset-by-one.columns { margin-left: 8.66666666667%; }\n+ .offset-by-two.column,\n+ .offset-by-two.columns { margin-left: 17.3333333333%; }\n+ .offset-by-three.column,\n+ .offset-by-three.columns { margin-left: 26%; }\n+ .offset-by-four.column,\n+ .offset-by-four.columns { margin-left: 34.6666666667%; }\n+ .offset-by-five.column,\n+ .offset-by-five.columns { margin-left: 43.3333333333%; }\n+ .offset-by-six.column,\n+ .offset-by-six.columns { margin-left: 52%; }\n+ .offset-by-seven.column,\n+ .offset-by-seven.columns { margin-left: 60.6666666667%; }\n+ .offset-by-eight.column,\n+ .offset-by-eight.columns { margin-left: 69.3333333333%; }\n+ .offset-by-nine.column,\n+ .offset-by-nine.columns { margin-left: 78.0%; }\n+ .offset-by-ten.column,\n+ .offset-by-ten.columns { margin-left: 86.6666666667%; }\n+ .offset-by-eleven.column,\n+ .offset-by-eleven.columns { margin-left: 95.3333333333%; }\n+\n+ .offset-by-one-third.column,\n+ .offset-by-one-third.columns { margin-left: 34.6666666667%; }\n+ .offset-by-two-thirds.column,\n+ .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }\n+\n+ .offset-by-one-half.column,\n+ .offset-by-one-half.columns { margin-left: 52%; }\n+\n+}\n+\n+\n+/* Base Styles\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+/* NOTE\n+html is set to 62.5% so that all the REM measurements throughout Skeleton\n+are based on 10px sizing. So basically 1.5rem = 15px :) */\n+html {\n+ font-size: 62.5%; }\n+body {\n+ font-size: 1.5em; /* currently ems cause chrome bug '..b'none; }\n+textarea {\n+ min-height: 65px;\n+ padding-top: 6px;\n+ padding-bottom: 6px; }\n+input[type="email"]:focus,\n+input[type="number"]:focus,\n+input[type="search"]:focus,\n+input[type="text"]:focus,\n+input[type="tel"]:focus,\n+input[type="url"]:focus,\n+input[type="password"]:focus,\n+textarea:focus,\n+select:focus {\n+ border: 1px solid #33C3F0;\n+ outline: 0; }\n+label,\n+legend {\n+ display: block;\n+ margin-bottom: .5rem;\n+ font-weight: 600; }\n+fieldset {\n+ padding: 0;\n+ border-width: 0; }\n+input[type="checkbox"],\n+input[type="radio"] {\n+ display: inline; }\n+label > .label-body {\n+ display: inline-block;\n+ margin-left: .5rem;\n+ font-weight: normal; }\n+\n+\n+/* Lists\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+ul {\n+ list-style: circle inside; }\n+ol {\n+ list-style: decimal inside; }\n+ol, ul {\n+ padding-left: 0;\n+ margin-top: 0; }\n+ul ul,\n+ul ol,\n+ol ol,\n+ol ul {\n+ margin: 1.5rem 0 1.5rem 3rem;\n+ font-size: 90%; }\n+li {\n+ margin-bottom: 1rem; }\n+\n+\n+/* Code\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+code {\n+ padding: .2rem .5rem;\n+ margin: 0 .2rem;\n+ font-size: 90%;\n+ white-space: nowrap;\n+ background: #F1F1F1;\n+ border: 1px solid #E1E1E1;\n+ border-radius: 4px; }\n+pre > code {\n+ display: block;\n+ padding: 1rem 1.5rem;\n+ white-space: pre; }\n+\n+\n+/* Tables\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+th,\n+td {\n+ padding: 12px 15px;\n+ text-align: left;\n+ border-bottom: 1px solid #E1E1E1; }\n+\n+/*th:first-child,\n+td:first-child {\n+ padding-left: 0; }\n+th:last-child,\n+td:last-child {\n+ padding-right: 0; }\n+*/\n+\n+/* Spacing\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+button,\n+.button {\n+ margin-bottom: 1rem; }\n+input,\n+textarea,\n+select,\n+fieldset {\n+ margin-bottom: 1.5rem; }\n+pre,\n+blockquote,\n+dl,\n+figure,\n+table,\n+p,\n+ul,\n+ol,\n+form {\n+ margin-bottom: 2.5rem; }\n+\n+\n+/* Utilities\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+.u-full-width {\n+ width: 100%;\n+ box-sizing: border-box; }\n+.u-max-full-width {\n+ max-width: 100%;\n+ box-sizing: border-box; }\n+.u-pull-right {\n+ float: right; }\n+.u-pull-left {\n+ float: left; }\n+\n+\n+/* Misc\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+hr {\n+ margin-top: 3rem;\n+ margin-bottom: 3.5rem;\n+ border-width: 0;\n+ border-top: 1px solid #E1E1E1; }\n+\n+\n+/* Clearing\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+\n+/* Self Clearing Goodness */\n+.container:after,\n+.row:after,\n+.u-cf {\n+ content: "";\n+ display: table;\n+ clear: both; }\n+\n+\n+/* Media Queries\n+\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93 */\n+/*\n+Note: The best way to structure the use of media queries is to create the queries\n+near the relevant code. For example, if you wanted to change the styles for buttons\n+on small devices, paste the mobile query code up in the buttons section and style it\n+there.\n+*/\n+\n+\n+/* Larger than mobile */\n+@media (min-width: 400px) {}\n+\n+/* Larger than phablet (also point when grid becomes active) */\n+@media (min-width: 550px) {}\n+\n+/* Larger than tablet */\n+@media (min-width: 750px) {}\n+\n+/* Larger than desktop */\n+@media (min-width: 1000px) {}\n+\n+/* Larger than Desktop HD */\n+@media (min-width: 1200px) {}\n' |
b |
diff -r 000000000000 -r ca58e9466cbf data/js/custom.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/js/custom.js Mon Jun 29 16:38:36 2015 +0100 |
[ |
@@ -0,0 +1,11 @@ +$(document).ready(function() +{ + $("#counts-table").tablesorter({sortList: [[2,1]]}); + //assign the sortStart event + $("#counts-table").bind("sortStart", function() { + $("#overlay").show(); + }).bind("sortEnd",function() { + $("#overlay").hide(); + }); +} +); |
b |
diff -r 000000000000 -r ca58e9466cbf data/js/jquery-1.11.3.min.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/js/jquery-1.11.3.min.js Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,5 @@\n+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */\n+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,o=/^-ms-/,p=/-([\\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),'..b'0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});\n' |
b |
diff -r 000000000000 -r ca58e9466cbf data/js/jquery-1.11.3.min.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/js/jquery-1.11.3.min.map Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,1 @@\n+{"version":3,"file":"jquery-1.11.3.min.js","sources":["jquery-1.11.3.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","isEmptyObject","key","nodeType","e","ownLast","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","value","isArraylike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","parentNode","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","cont'..b'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"}\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r ca58e9466cbf data/js/jquery.tablesorter.min.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/js/jquery.tablesorter.min.js Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,4 @@\n+\n+(function($){$.extend({tablesorter:new\n+function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:\'/\\.|\\,/g\',onRenderHeader:null,selectorHeaders:\'thead th\',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}if(table.tBodies.length==0)return;var rows=table.tBodies[0].rows;if(rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,rows,-1,i);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,rows,rowIndex,cellIndex){var l=parsers.length,node=false,nodeValue=false,keepLooking=true;while(nodeValue==\'\'&&keepLooking){rowIndex++;if(rows[rowIndex]){node=getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex);nodeValue=trimAndGetNodeText(table.config,node);if(table.config.debug){log(\'Checking if value was empty on row:\'+rowIndex);}}else{keepLooking=false;}}for(var i=1;i<l;i++){if(parsers[i].is(nodeValue,table,node)){return parsers[i];}}return parsers[0];}function getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex){return rows[rowIndex].cells[cellIndex];}function trimAndGetNodeText(config,node){return $.trim(getElementText(config,node));}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=$(table.tBodies[0].rows[i]),cols=[];if(c.hasClass(table.config.cssChildRow)){cache.row[cache.row.length-1]=cache.row[cache.row.length-1].add(c);continue;}cache.row.push(c);for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c[0].cells[j]),table,c[0].cells[j]));}cols.push(cache.normalized.length);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){var text="";if(!node)return"";if(!config.supportsTextContent)config.supportsTextContent=node.textContent||false;if(config.textExtraction=="simple"){if(config.supportsTextContent){text=node.textContent;}else{if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){text=node.childNodes[0].innerHTML;}else{text=node.innerHTML;}}}else{if(typeof(config.textExtraction)=="function"){text=config.textExtraction(node);}else{text=$(node).text();}}return text;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){var pos=n[i][checkCell];rows.push(r[pos]);if(!table.config.appender){var l=r[pos].length;for(var j=0;j<l;j++){tableBody[0].appendChild(r[pos][j]);}}}if(table.config.appender){table.config.appende'..b'rtList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){return/^[-+]?\\d*$/.test($.trim(s.replace(/[,.\']/g,\'\')));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLocaleLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[\xc2\xa3$\xe2\x82\xac?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[\xc2\xa3$\xe2\x82\xac]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\\d{2,3}[\\.]\\d{2,3}[\\.]\\d{2,3}[\\.]\\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\\/\\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\\/\\//),\'\'));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\\.? [0-9]{1,2}, ([0-9]{4}|\'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\\d{1,2}[\\/\\-]\\d{1,2}[\\/\\-]\\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{4})/,"$3/$1/$2");}else if (c.dateFormat == "pt") {s = s.replace(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{4})/, "$3/$2/$1");} else if(c.dateFormat=="uk"){s=s.replace(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?\'sortValue\':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}var $tr,row=-1,odd;$("tr:visible",table.tBodies[0]).each(function(i){$tr=$(this);if(!$tr.hasClass(table.config.cssChildRow))row++;odd=(row%2==0);$tr.removeClass(table.config.widgetZebra.css[odd?0:1]).addClass(table.config.widgetZebra.css[odd?1:0])});if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery);\n' |
b |
diff -r 000000000000 -r ca58e9466cbf data/ribocount.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/ribocount.html Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + + <!-- Basic Page Needs + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta charset="utf-8"> + <title>Ribo-Seq profile counts</title> + <meta name="description" content=""> + <meta name="author" content=""> + + <!-- Mobile Specific Metas + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <!-- FONT + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <!--<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600"--> + <!--rel="stylesheet" type="text/css">--> + + <!-- CSS + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <link rel="stylesheet" href="css/normalize.css"> + <link rel="stylesheet" href="css/skeleton.css"> + <link rel="stylesheet" href="css/custom.css"> + + <!-- Favicon + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <link rel="icon" type="image/png" href="images/favicon.png"> + +</head> +<body> + +<!-- Primary Page Layout +–––––––––––––––––––––––––––––––––––––––––––––––––– --> +<div class="container"> + <div class="row"> + <div class="twelve columns"> + <h3 id="page-title">Ribo-Seq profile counts for all transcripts</h3> + <h5>Total transcript(s) <span class="info">{count}</span>, Footprint + length <span class="info">{length}</span></h5> + <div id="overlay">Sorting this large table...</div> + <table id="counts-table" class="tablesorter u-full-width"> + <thead> + <tr> + <th>Number</th> + <th>Transcript name</th> + <th>Total reads</th> + <th>Counts (csv file)</th> + </tr> + </thead> + <tbody> + {table_content} + </tbody> + </table> + <p class="text-muted">Time taken for generating counts (H:MM:SS): {duration}</p> + </div> + </div> +</div> +<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> +<script type="text/javascript" src="js/jquery.tablesorter.min.js"></script> +<script type="text/javascript" src="js/custom.js"></script> +</body> +</html> \ No newline at end of file |
b |
diff -r 000000000000 -r ca58e9466cbf data/ribocount_index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/ribocount_index.html Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + + <!-- Basic Page Needs + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta charset="utf-8"> + <title>Ribo-Seq profile counts</title> + + <!-- Mobile Specific Metas + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta name="viewport" content="width=device-width, initial-scale=1"> +</head> +<body> + +<h3>Ribocount output</h3> +<h5>The following zip file contains read counts as CSV files for <em>{count}</em> +transcripts with read length <em>{read_length}</em>.</h5> + +<p>Download: <a href="ribocount_output.zip">ribocount_output.zip</a></p> + +<p>Note: To view the list of transcripts and their read counts (in CSV), +extract the zip file and open "index.html" in a web browser. </p> +</body> +</html> \ No newline at end of file |
b |
diff -r 000000000000 -r ca58e9466cbf data/riboplot.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/riboplot.html Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + + <!-- Basic Page Needs + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta charset="utf-8"> + <title>Ribo-Seq profile plot</title> + <meta name="description" content=""> + <meta name="author" content=""> + + <!-- Mobile Specific Metas + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <!-- FONT + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <!--<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600"--> + <!--rel="stylesheet" type="text/css">--> + + <!-- CSS + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <link rel="stylesheet" href="css/normalize.css"> + <link rel="stylesheet" href="css/skeleton.css"> + <link rel="stylesheet" href="css/custom.css"> + + <!-- Favicon + –––––––––––––––––––––––––––––––––––––––––––––––––– --> + <link rel="icon" type="image/png" href="images/favicon.png"> + +</head> +<body> + +<!-- Primary Page Layout +–––––––––––––––––––––––––––––––––––––––––––––––––– --> +<div class="container"> + <div class="row"> + <div id="main" class="twelve columns"> + <center> + <h3>Ribo-Seq profile plot</h3> + <p> + <img width="100%" class="u-max-full-width" src="ribograph.png"/><br> + <p> + <h4>Download plots<br> + <a href="ribograph.png">PNG</a>, <a href="ribograph.svg">SVG</a> + </h4> + + <h4>Download counts<br> + <a href="RiboCounts.csv">RiboCounts.csv</a> + </h4> + <p> + <small> + (Right click --> Save link/target as...) + </small> + </p> + </center> + </div> + </div> +</div> +</body> +</html> \ No newline at end of file |
b |
diff -r 000000000000 -r ca58e9466cbf ribocount.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ribocount.xml Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,31 @@ +<tool id="ribocount" name="ribocount" version="0.1.0"> + <description>Get read counts for all transcripts in an alignment (BAM) + </description> + <requirements> + <requirement type="package" version="0.7.7">pysam</requirement> + <requirement type="package" version="0.1.18">samtools</requirement> + </requirements> + <stdio> + <exit_code range="1:" level="fatal" description="Error" /> + </stdio> + <command interpreter="python">./riboplot/ribocount.py + --ribo_file "${ribo_file}" + --transcriptome_fasta "${transcriptome_fasta}" + --read_length "${read_length}" + --read_offset "${read_offset}" + --html_file "${html_file}" + --output_path "${html_file.files_path}" + ## --debug + </command> + <inputs> + <param name="ribo_file" type="data" format="bam" label="Ribo-Seq alignment file in BAM format"/> + <param name="transcriptome_fasta" type="data" format="fasta" label="FASTA format file of the transcriptome"/> + <param name="read_length" type="integer" label="Read length to consider" value="28"/> + <param name="read_offset" type="integer" label="Offset" value="0"/> + </inputs> + <outputs> + <data format="html" name="html_file" label="ribocount (HTML report)"/> + </outputs> + <help> + </help> +</tool> |
b |
diff -r 000000000000 -r ca58e9466cbf riboplot.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/riboplot.xml Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,54 @@ +<tool id="riboplot" name="riboplot" version="0.1.0"> + <description>Plot and output read counts for a single transcript in an alignment (BAM) + </description> + <requirements> + <requirement type="package" version="1.2.1">matplotlib</requirement> + <requirement type="package" version="0.7.7">pysam</requirement> + <requirement type="package" version="0.1.18">samtools</requirement> + </requirements> + <stdio> + <exit_code range="1:" level="fatal" description="Error" /> + </stdio> + <command interpreter="python">./riboplot/riboplot.py + --ribo_file "${ribo_file}" + --transcriptome_fasta "${transcriptome_fasta}" + --transcript_name "${transcript_name}" + #if $rnacov.rnacov_select=="yes" + --rna_file "${rna_file}" + #end if + --read_length "${read_length}" + --read_offset "${read_offset}" + --html_file "${html_file}" + --output_path "${html_file.files_path}" + ## --debug + </command> + <inputs> + <param name="ribo_file" type="data" format="bam" label="Ribo-Seq alignment file in BAM format"/> + <param name="transcriptome_fasta" type="data" format="fasta" label="FASTA format file of the transcriptome"/> + <param name="transcript_name" type="text" label="Name of the transcript to plot (as in FASTA)" size="40"> + <validator type="expression" message="Please input a single transcript name">len(value.split(',')) == 1</validator> + <validator type="empty_field" message="Field requires a value"/> + <sanitizer> + <valid> + <add value="|"/> + </valid> + </sanitizer> + </param> + <conditional name="rnacov"> + <param name="rnacov_select" type="select" label="Include RNA Coverage"> + <option value="no">No</option> + <option value="yes">Yes</option> + </param> + <when value="yes"> + <param name="rna_file" type="data" format="bam" label="RNA-Seq alignment file in BAM format"/> + </when> + </conditional> + <param name="read_length" type="integer" label="Read length to consider" value="28"/> + <param name="read_offset" type="integer" label="Offset" value="0"/> + </inputs> + <outputs> + <data format="html" name="html_file" label="riboplot (HTML report)"/> + </outputs> + <help> + </help> +</tool> |
b |
diff -r 000000000000 -r ca58e9466cbf riboplot/config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/riboplot/config.py Mon Jun 29 16:38:36 2015 +0100 |
[ |
@@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +import os + + +class Config(object): + # get the running directory of this file, move one level up to get the + # application directory + APP_DIR = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] + + +class TestingConfig(Config): + """Testing configuration""" + DATA_DIR = os.path.join(Config.APP_DIR, 'tests/data') + + +class ProductionConfig(Config): + """Production configuration""" + # not used now + DATA_DIR = os.path.join(Config.APP_DIR, 'data') |
b |
diff -r 000000000000 -r ca58e9466cbf riboplot/core.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/riboplot/core.py Mon Jun 29 16:38:36 2015 +0100 |
[ |
@@ -0,0 +1,66 @@ +"""Common functions. """ +import logging +import pysam + + +class BAMProfilesError(Exception): + pass + + +class BAMFileError(Exception): + pass + + +class TranscriptError(Exception): + pass + + +class RNACountsError(Exception): + """For errors related to RNA Coverage generation using bedtools. """ + pass + + +def check_bam_file(bam_file): + """Check if bam file is indexed. If not, index. """ + with pysam.AlignmentFile(bam_file, 'rb') as bam_fileobj: + try: + bam_fileobj.fetch(bam_fileobj.references[0]) + except ValueError as err: + if err.message == 'fetch called on bamfile without index': + bam_fileobj.close() + logging.debug('Indexing bam file {}'.format(bam_file)) + pysam.index(bam_file) + + +def get_ribo_counts(ribo_fileobj, transcript_name, read_length=None, read_offset=0): + """Get total reads and read counts in all 3 frames for the give transcript + from input BAM file (indexed). + + """ + read_counts = {} + total_reads = 0 + + if transcript_name not in ribo_fileobj.references: + raise BAMFileError('Transcript "{}" does not exist in BAM ' + 'file. '.format(transcript_name)) + + for record in ribo_fileobj.fetch(transcript_name): + if read_length: + if record.query_length != read_length: + continue + total_reads += 1 + position = record.pos + 1 + + try: + read_counts[position] + except KeyError: + read_counts[position] = {1: 0, 2: 0, 3: 0} + + rem = position % 3 + if rem == 0: + read_counts[position][3] += 1 + else: + read_counts[position][rem] += 1 + + return read_counts, total_reads + |
b |
diff -r 000000000000 -r ca58e9466cbf riboplot/ribocount.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/riboplot/ribocount.py Mon Jun 29 16:38:36 2015 +0100 |
[ |
@@ -0,0 +1,150 @@ +# check dependencies +missing_deps = [] +try: + import pysam +except ImportError: + missing_deps.append('pysam') + +if len(missing_deps): + sys.exit('''\nCould not import the following modules. Please check if they + (or their dependencies are installed correctly. + \n\n{}\n'''.format('\n'.join(missing_deps))) + +import os +import sys +import timeit +import shutil +import zipfile +import logging +import argparse +from datetime import datetime + +import core +import config + +# Default is production +CONFIG = config.ProductionConfig() + + +def create_parser(): + """Argument parser. """ + parser = argparse.ArgumentParser( + prog='ribograph.counts', description='Output read counts for all transcripts') + + # required arguments + required = parser.add_argument_group('required arguments') + required.add_argument('--ribo_file', help='Ribo-Seq alignment file in BAM format', required=True) + required.add_argument('--transcriptome_fasta', help='FASTA format file of the transcriptome', required=True) + + # optional arguments + parser.add_argument('--read_length', help='Read length to consider (default: %(default)s)', + metavar='INTEGER', type=int) + parser.add_argument('--read_offset', help='Read offset (default: %(default)s)', + metavar='INTEGER', type=int, default=0) + parser.add_argument('--html_file', help='Output file for results (HTML)', default='ribocount.html') + parser.add_argument('--output_path', help='Files are saved in this directory', default='output') + parser.add_argument('--debug', help='Flag. Produce debug output', action='store_true') + + return parser + + +def main(): + parsed = create_parser() + args = parsed.parse_args() + + if args.debug: + level = logging.DEBUG + else: + level = logging.INFO + + logging.basicConfig(format='%(asctime)s: %(levelname)s %(message)s', + level=level, stream=sys.stdout, datefmt='%d/%m/%Y %I:%M:%S %p') + + start = datetime.now() + logging.debug('Start') + logging.debug('Supplied Arguments') + logging.debug('\n{}'.format('\n'.join(['{:<20}: {}'.format(k, v) for k, v in vars(args).items()]))) + + (ribo_file, transcriptome_fasta, read_length, read_offset) = ( + args.ribo_file, args.transcriptome_fasta, args.read_length, args.read_offset) + + logging.debug('Checking if BAM file is indexed') + core.check_bam_file(ribo_file) + + logging.debug('Get transcript information') + fasta_file = pysam.FastaFile(transcriptome_fasta) + + count = 0 + table_content = '' + + if not os.path.exists(args.output_path): + os.mkdir(args.output_path) + + output_path = os.path.join(args.output_path, 'ribocount_output') + if not os.path.exists(output_path): + os.mkdir(output_path) + + csv_dir = os.path.join(output_path, 'csv') + if not os.path.exists(csv_dir): + os.mkdir(csv_dir) + + bam_fileobj = pysam.AlignmentFile(ribo_file, 'rb') + for transcript in fasta_file.references: + rp_counts, rp_reads = core.get_ribo_counts(bam_fileobj, transcript, read_length, read_offset) + + if not rp_reads: + continue + + logging.debug('Writing counts for {}'.format(transcript)) + count += 1 + csv_file = 'RiboCounts{}.csv'.format(count) + with open(os.path.join(csv_dir, csv_file), 'w') as f: + f.write('"Position","Frame 1","Frame 2","Frame 3"\n') + + for pos in range(1, len(fasta_file[transcript]) + 1): + if pos in rp_counts: + f.write('{0},{1},{2},{3}\n'.format( + pos, rp_counts[pos][1], rp_counts[pos][2], rp_counts[pos][3])) + else: + f.write('{0},{1},{2},{3}\n'.format(pos, 0, 0, 0)) + if count % 2 == 0: + table_content += '<tr>' + else: + table_content += '<tr class="odd">' + table_content += '<td>{0}</td><td>{1}</td><td>{2}</td><td><a href="csv/{3}">{3}</a></td></tr>'.format( + count, transcript, rp_reads, csv_file) + bam_fileobj.close() + + if not read_length: + read_length = 'All' + + duration = str(datetime.now() - start).split('.')[0] + logging.debug('Time taken for generating counts {}'.format(duration)) + + with open(os.path.join(CONFIG.DATA_DIR, 'ribocount.html')) as g,\ + open(os.path.join(output_path, 'index.html'), 'w') as h: + h.write(g.read().format(count=count, length=read_length, table_content=table_content, duration=duration)) + + for asset in ('css', 'js'): + asset_dir = os.path.join(output_path, asset) + if not os.path.exists(asset_dir): + os.mkdir(asset_dir) + asset_data_dir = os.path.join(CONFIG.DATA_DIR, asset) + for fname in os.listdir(asset_data_dir): + shutil.copy(os.path.join(asset_data_dir, fname), + os.path.join(output_path, asset, fname)) + + logging.debug('Creating zip file') + os.chdir(args.output_path) + with zipfile.ZipFile('ribocount_output.zip', 'w') as zip: + for root, d, f in os.walk('ribocount_output'): + for name in f: + zip.write(os.path.join(root, name)) + + logging.debug('Writing HTML report') + + with open(os.path.join(CONFIG.DATA_DIR, 'ribocount_index.html')) as j, open(args.html_file, 'w') as k: + k.write(j.read().format(count=count, read_length=read_length)) + +if __name__ == '__main__': + print timeit.timeit('main()', number=1, setup='from __main__ import main') |
b |
diff -r 000000000000 -r ca58e9466cbf riboplot/riboplot.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/riboplot/riboplot.py Mon Jun 29 16:38:36 2015 +0100 |
[ |
b'@@ -0,0 +1,319 @@\n+# check dependencies\n+missing_deps = []\n+try:\n+ import pysam\n+except ImportError:\n+ missing_deps.append(\'pysam\')\n+\n+try:\n+ from matplotlib import pyplot as plt\n+except ImportError:\n+ missing_deps.append(\'matplotlib\')\n+else:\n+ from matplotlib import gridspec\n+ from matplotlib.font_manager import FontProperties\n+\n+if len(missing_deps):\n+ sys.exit(\'\'\'\\nCould not import the following modules. Please check if they\n+ (or their dependencies are installed correctly.\n+ \\n\\n{}\\n\'\'\'.format(\'\\n\'.join(missing_deps)))\n+\n+\n+import os\n+import re\n+import sys\n+import config\n+import pysam\n+import timeit\n+import shutil\n+import logging\n+import tempfile\n+import argparse\n+import subprocess\n+\n+import core\n+# Default is production\n+CONFIG = config.ProductionConfig()\n+\n+\n+def get_start_stops(transcript_sequence, start_codons=None, stop_codons=None):\n+ """Return start and stop positions for all frames in the given\n+ transcript.\n+\n+ """\n+ if not start_codons:\n+ start_codons = [\'ATG\']\n+ if not stop_codons:\n+ stop_codons = [\'TAA\', \'TAG\', \'TGA\']\n+\n+ seq_frames = {1: {\'starts\': [], \'stops\': []},\n+ 2: {\'starts\': [], \'stops\': []},\n+ 3: {\'starts\': [], \'stops\': []}}\n+\n+ for codons, positions in ((start_codons, \'starts\'),\n+ (stop_codons, \'stops\')):\n+ if len(codons) > 1:\n+ pat = re.compile(\'|\'.join(codons))\n+ else:\n+ pat = re.compile(codons[0])\n+\n+ for m in re.finditer(pat, transcript_sequence):\n+ # Increment position by 1, Frame 1 starts at position 1 not 0\n+ start = m.start() + 1\n+ rem = start % 3\n+ if rem == 1: # frame 1\n+ seq_frames[1][positions].append(start)\n+ elif rem == 2: # frame 2\n+ seq_frames[2][positions].append(start)\n+ elif rem == 0: # frame 3\n+ seq_frames[3][positions].append(start)\n+ return seq_frames\n+\n+\n+def get_rna_counts(rna_file, transcript_name):\n+ """Get coverage for a given RNA BAM file, return read counts. """\n+ try:\n+ subprocess.check_output([\'bedtools\', \'--version\'])\n+ except OSError:\n+ logging.error(\'Could not find bedtools in PATH. bedtools is \'\n+ \'required for generating RNA coverage plot. \')\n+ raise\n+ logging.debug(\'Get RNA coverage for transcript using bedtools\')\n+ # check if the RNA file exists\n+ if not os.path.exists(rna_file):\n+ msg = \'RNA-Seq BAM file "{}" does not exist\'.format(rna_file)\n+ logging.error(msg)\n+ raise OSError(msg)\n+ rna_counts = {}\n+\n+ cov_file = tempfile.NamedTemporaryFile(delete=False)\n+ try:\n+ subprocess.check_call(\n+ [\'bedtools\', \'genomecov\', \'-ibam\', rna_file,\n+ \'-bg\'], stdout=cov_file)\n+ except subprocess.CalledProcessError as e:\n+ # needs testing\n+ raise core.RNACountsError(\'Could not generate coverage for RNA BAM file. \\n{}\\n\'.format(e))\n+ logging.debug(\'Finished generating RNA coverage\')\n+ logging.debug(\'Processing coverage file\')\n+ for line in open(cov_file.name):\n+ line = line.split()\n+ if line[0] == transcript_name:\n+ position, count = int(line[1]) + 1, int(line[3])\n+ rna_counts[position] = count\n+ cov_file.close()\n+ os.unlink(cov_file.name)\n+ logging.debug(\'Finished processing coverage file\')\n+ return rna_counts\n+\n+\n+def plot_profile(ribo_counts, transcript_name, transcript_length,\n+ start_stops, read_length=None, read_offset=None, rna_counts=None,\n+ html_file=\'index.html\', output_path=\'output\'):\n+ """Plot read counts (in all 3 frames) and RNA coverage if provided for a\n+ single transcript.\n+\n+ """\n+ gs = gridspec.GridSpec(4, 1, height_ratios=[7, 1, 1, 1])\n+ '..b't file in BAM format\', required=True)\n+ required.add_argument(\'--transcriptome_fasta\', help=\'FASTA format file of the transcriptome\', required=True)\n+ required.add_argument(\'--transcript_name\', help=\'Transcript name\', metavar=\'TEXT\', required=True)\n+\n+ # plot function - optional arguments\n+ parser.add_argument(\'--rna_file\', help=\'RNA-Seq alignment file (BAM)\')\n+ parser.add_argument(\'--read_length\', help=\'Read length to consider (default: %(default)s)\',\n+ metavar=\'INTEGER\', type=int)\n+ parser.add_argument(\'--read_offset\', help=\'Read offset (default: %(default)s)\',\n+ metavar=\'INTEGER\', type=int, default=0)\n+ parser.add_argument(\'--html_file\', help=\'Output file for results (HTML)\', default=\'index.html\')\n+ parser.add_argument(\'--output_path\', help=\'Files are saved in this directory\', default=\'output\')\n+ parser.add_argument(\'--debug\', help=\'Flag. Produce debug output\', action=\'store_true\')\n+\n+ return parser\n+\n+\n+def main():\n+ """Start program. """\n+ parsed = create_parser()\n+ args = parsed.parse_args()\n+\n+ if args.debug:\n+ level = logging.DEBUG\n+ else:\n+ level = logging.INFO\n+\n+ logging.basicConfig(format=\'%(asctime)s: %(levelname)s %(message)s\',\n+ level=level, stream=sys.stdout, datefmt=\'%d/%m/%Y %I:%M:%S %p\')\n+\n+ logging.debug(\'Start\')\n+ logging.debug(\'Supplied Arguments\')\n+ logging.debug(\'\\n{}\'.format(\'\\n\'.join([\'{:<20}: {}\'.format(k, v) for k, v in vars(args).items()])))\n+\n+ (ribo_file, rna_file, transcript_name, transcriptome_fasta, read_length,\n+ read_offset, output_path) = (args.ribo_file, args.rna_file, args.transcript_name,\n+ args.transcriptome_fasta, args.read_length, args.read_offset, args.output_path)\n+\n+ logging.debug(\'Checking if BAM file is indexed...\')\n+ core.check_bam_file(ribo_file)\n+\n+ logging.debug(\'Get transcript information...\')\n+ transcripts = pysam.FastaFile(transcriptome_fasta)\n+ sequence = transcripts.fetch(transcript_name)\n+ length = len(sequence)\n+\n+ if not length:\n+ logging.error(\'Transcript "{}" does not exist in transcriptome \'\n+ \'FASTA file "{}"\'.format(transcript_name, os.path.basename(transcriptome_fasta)))\n+ sys.exit(1)\n+\n+ logging.debug(\'Get start/stop positions in transcript (3 frames)...\')\n+ codon_positions = get_start_stops(sequence)\n+\n+ mrna_counts = {}\n+ if rna_file:\n+ try:\n+ mrna_counts = get_rna_counts(rna_file, transcript_name)\n+ except OSError as e:\n+ sys.exit(e)\n+ else:\n+ logging.debug(\'No RNA-Seq data provided. Not generating coverage\')\n+\n+ logging.debug(\'Get ribo-seq read counts and total reads in Ribo-Seq...\')\n+ bam_fileobj = pysam.AlignmentFile(ribo_file, \'rb\')\n+ ribo_counts, total_reads = core.get_ribo_counts(bam_fileobj, transcript_name, read_length, read_offset)\n+ bam_fileobj.close()\n+\n+ if not os.path.exists(output_path):\n+ os.mkdir(output_path)\n+\n+ logging.debug(\'Writing counts for {}\'.format(transcript_name))\n+ with open(os.path.join(output_path, \'RiboCounts.csv\'), \'w\') as f:\n+ f.write(\'"Position","Frame 1","Frame 2","Frame 3"\\n\')\n+\n+ for pos in range(1, length + 1):\n+ if pos in ribo_counts:\n+ f.write(\'{0},{1},{2},{3}\\n\'.format(\n+ pos, ribo_counts[pos][1], ribo_counts[pos][2], ribo_counts[pos][3]))\n+ else:\n+ f.write(\'{0},{1},{2},{3}\\n\'.format(pos, 0, 0, 0))\n+\n+ logging.debug(\'Generating plot...\')\n+ plot_profile(ribo_counts, transcript_name, length,\n+ codon_positions, read_length, read_offset, mrna_counts,\n+ html_file=os.path.join(args.output_path, args.html_file),\n+ output_path=args.output_path)\n+ logging.debug(\'Finished\')\n+\n+\n+if __name__ == \'__main__\':\n+ print timeit.timeit(\'main()\', number=1, setup=\'from __main__ import main\')\n' |
b |
diff -r 000000000000 -r ca58e9466cbf runtests.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtests.sh Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,2 @@ +#!/bin/bash +python -m unittest discover --verbose |
b |
diff -r 000000000000 -r ca58e9466cbf tests/test_plot.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_plot.py Mon Jun 29 16:38:36 2015 +0100 |
[ |
@@ -0,0 +1,52 @@ +import os +import logging +import unittest + +from riboplot import core, config, plot + +# use testing configuration +CONFIG = plot.CONFIG = config.TestingConfig() +logging.disable(logging.CRITICAL) + +RIBO_FILE = os.path.join(CONFIG.DATA_DIR, '5hRPFsorted.bam') +RNA_FILE = os.path.join(CONFIG.DATA_DIR, '5hmRNAsorted.bam') +TRANSCRIPT_NAME = 'gi|148357119|ref|NM_001098396.1|' +TRANSCRIPTOME_FASTA = os.path.join(CONFIG.DATA_DIR, 'zebrafish.fna') +TRANSCRIPTOME_FASTA_MINUS1 = os.path.join(CONFIG.DATA_DIR, 'zebrafish_minus1.fna') + +class RNACountsTestCase(unittest.TestCase): + + def test_get_rna_counts(self): + """Test get RNA counts for transcript from RNA-Seq BAM file""" + counts = plot.get_rna_counts(rna_file=RNA_FILE, transcript_name=TRANSCRIPT_NAME) + self.assertIsInstance(counts, dict) + self.assertTrue(len(counts) > 0) + + def test_missing_rna_file(self): + """Exit with error if RNA BAM file does not exist. """ + self.assertRaises(OSError, plot.get_rna_counts, rna_file='{}.absent'.format(RNA_FILE), + transcript_name=TRANSCRIPT_NAME) + + def test_missing_bedtools(self): + """Exit with error if bedtools is missing.""" + # reset env temporarily + paths = os.environ['PATH'] + os.environ['PATH'] = '' + self.assertRaises(OSError, plot.get_rna_counts, rna_file=RNA_FILE, + transcript_name=TRANSCRIPT_NAME) + os.environ['PATH'] = paths + + +class PlotTestCase(unittest.TestCase): + + def test_get_codon_positions(self): + """Test get codon positions. """ + # input is the sequence obtained from get_transcript so no new lines. + fasta = ('AACCGGAGCACCCAGAGAAAACCCACGCAAACGCAGGGAGAATTTGCAAACTCCACACA' + 'GAAATGCCAGCTGATCCAGCCGAGCCTCGAGTCAGCATCCTTGCTTGTTGGATGCCTGA' + 'TTGCAGTTCAACTCCAAACTCAGTTGGACCAGCTGATCAGTG') + codon_positions = plot.get_start_stops(fasta) + expected = {1: {'starts': [], 'stops': []}, + 2: {'starts': [], 'stops': [71, 116, 152]}, + 3: {'starts': [63, 111], 'stops': []}} + self.assertEqual(codon_positions, expected) \ No newline at end of file |
b |
diff -r 000000000000 -r ca58e9466cbf tool_dependencies.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Mon Jun 29 16:38:36 2015 +0100 |
b |
@@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<tool_dependency> + <package name="matplotlib" version="1.2.1"> + <repository changeset_revision="d22042e5e279" name="package_matplotlib_1_2" + owner="ribogalaxy" prior_installation_required="True" + toolshed="http://toolshed.ribogalaxy.ucc.ie" /> + </package> + <package name="pysam" version="0.7.7"> + <repository changeset_revision="0e8f87bbc1e8" name="package_pysam_0_7_7" + owner="ribogalaxy" prior_installation_required="True" + toolshed="http://toolshed.ribogalaxy.ucc.ie" /> + </package> + <package name="samtools" version="0.1.18"> + <repository changeset_revision="4407d444b269" name="package_samtools_0_1_18" + owner="ribogalaxy" prior_installation_required="True" + toolshed="http://toolshed.ribogalaxy.ucc.ie" /> + </package> +</tool_dependency> |