From 1af3694d596e3f9dd351c748d2f4791ae6f6616c Mon Sep 17 00:00:00 2001 From: saramonzon Date: Wed, 3 Apr 2019 12:28:33 +0200 Subject: [PATCH 01/12] Added samples table in admin --- admin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/admin.py b/admin.py index d1a1907..75931c5 100644 --- a/admin.py +++ b/admin.py @@ -35,6 +35,9 @@ class RunErrorsAdmin (admin.ModelAdmin): class RunStatesAdmin (admin.ModelAdmin): list_display = ('runStateName',) +class SamplesInProjectAdmin (admin.ModelAdmin): + list_display = ('project_id','sampleName','barcodeName','pfClusters','percentInProject','yieldMb','qualityQ30') + admin.site.register(RunningParameters , RunningParametersAdmin) admin.site.register(RunProcess , RunProcessAdmin) @@ -42,3 +45,4 @@ class RunStatesAdmin (admin.ModelAdmin): admin.site.register(Projects, ProjectsAdmin) admin.site.register(RunErrors, RunErrorsAdmin) admin.site.register(RunStates, RunStatesAdmin) +admin.site.register(SamplesInProject, SamplesInProjectAdmin) From 629ac6715cb203febba09cfd7467df1c1267a89c Mon Sep 17 00:00:00 2001 From: luissian Date: Sun, 19 May 2019 22:17:53 +0200 Subject: [PATCH 02/12] Implemented test for MiSeq runs --- cron.py | 3 +- .../iSkyLIMS_wetlab/css/styles/a11y-dark.css | 99 +++ .../iSkyLIMS_wetlab/css/styles/a11y-light.css | 99 +++ static/iSkyLIMS_wetlab/css/styles/agate.css | 108 +++ .../css/styles/an-old-hope.css | 89 +++ .../css/styles/androidstudio.css | 66 ++ .../css/styles/arduino-light.css | 88 +++ static/iSkyLIMS_wetlab/css/styles/arta.css | 73 ++ static/iSkyLIMS_wetlab/css/styles/ascetic.css | 45 ++ .../css/styles/atelier-cave-dark.css | 83 +++ .../css/styles/atelier-cave-light.css | 85 +++ .../css/styles/atelier-dune-dark.css | 69 ++ .../css/styles/atelier-dune-light.css | 69 ++ .../css/styles/atelier-estuary-dark.css | 84 +++ .../css/styles/atelier-estuary-light.css | 84 +++ .../css/styles/atelier-forest-dark.css | 69 ++ .../css/styles/atelier-forest-light.css | 69 ++ .../css/styles/atelier-heath-dark.css | 69 ++ .../css/styles/atelier-heath-light.css | 69 ++ .../css/styles/atelier-lakeside-dark.css | 69 ++ .../css/styles/atelier-lakeside-light.css | 69 ++ .../css/styles/atelier-plateau-dark.css | 84 +++ .../css/styles/atelier-plateau-light.css | 84 +++ .../css/styles/atelier-savanna-dark.css | 84 +++ .../css/styles/atelier-savanna-light.css | 84 +++ .../css/styles/atelier-seaside-dark.css | 69 ++ .../css/styles/atelier-seaside-light.css | 69 ++ .../css/styles/atelier-sulphurpool-dark.css | 69 ++ .../css/styles/atelier-sulphurpool-light.css | 69 ++ .../css/styles/atom-one-dark-reasonable.css | 77 ++ .../css/styles/atom-one-dark.css | 96 +++ .../css/styles/atom-one-light.css | 96 +++ .../css/styles/brown-paper.css | 64 ++ .../css/styles/brown-papersq.png | Bin 0 -> 18198 bytes .../css/styles/codepen-embed.css | 60 ++ .../css/styles/color-brewer.css | 71 ++ static/iSkyLIMS_wetlab/css/styles/darcula.css | 77 ++ static/iSkyLIMS_wetlab/css/styles/dark.css | 63 ++ static/iSkyLIMS_wetlab/css/styles/darkula.css | 6 + static/iSkyLIMS_wetlab/css/styles/default.css | 99 +++ static/iSkyLIMS_wetlab/css/styles/docco.css | 97 +++ static/iSkyLIMS_wetlab/css/styles/dracula.css | 76 ++ static/iSkyLIMS_wetlab/css/styles/far.css | 71 ++ .../iSkyLIMS_wetlab/css/styles/foundation.css | 88 +++ .../css/styles/github-gist.css | 71 ++ static/iSkyLIMS_wetlab/css/styles/github.css | 99 +++ static/iSkyLIMS_wetlab/css/styles/gml.css | 78 ++ .../iSkyLIMS_wetlab/css/styles/googlecode.css | 89 +++ .../iSkyLIMS_wetlab/css/styles/grayscale.css | 101 +++ .../css/styles/gruvbox-dark.css | 108 +++ .../css/styles/gruvbox-light.css | 108 +++ .../iSkyLIMS_wetlab/css/styles/hopscotch.css | 83 +++ static/iSkyLIMS_wetlab/css/styles/hybrid.css | 102 +++ static/iSkyLIMS_wetlab/css/styles/idea.css | 97 +++ .../iSkyLIMS_wetlab/css/styles/ir-black.css | 73 ++ .../css/styles/isbl-editor-dark.css | 112 +++ .../css/styles/isbl-editor-light.css | 112 +++ .../css/styles/kimbie.dark.css | 74 ++ .../css/styles/kimbie.light.css | 74 ++ .../iSkyLIMS_wetlab/css/styles/lightfair.css | 87 +++ static/iSkyLIMS_wetlab/css/styles/magula.css | 70 ++ .../iSkyLIMS_wetlab/css/styles/mono-blue.css | 59 ++ .../css/styles/monokai-sublime.css | 83 +++ static/iSkyLIMS_wetlab/css/styles/monokai.css | 70 ++ static/iSkyLIMS_wetlab/css/styles/nord.css | 309 ++++++++ .../iSkyLIMS_wetlab/css/styles/obsidian.css | 88 +++ static/iSkyLIMS_wetlab/css/styles/ocean.css | 74 ++ .../css/styles/paraiso-dark.css | 72 ++ .../css/styles/paraiso-light.css | 72 ++ .../iSkyLIMS_wetlab/css/styles/pojoaque.css | 83 +++ .../iSkyLIMS_wetlab/css/styles/pojoaque.jpg | Bin 0 -> 1186 bytes .../iSkyLIMS_wetlab/css/styles/purebasic.css | 96 +++ .../css/styles/qtcreator_dark.css | 83 +++ .../css/styles/qtcreator_light.css | 83 +++ .../iSkyLIMS_wetlab/css/styles/railscasts.css | 106 +++ static/iSkyLIMS_wetlab/css/styles/rainbow.css | 85 +++ .../iSkyLIMS_wetlab/css/styles/routeros.css | 108 +++ .../css/styles/school-book.css | 72 ++ .../css/styles/school-book.png | Bin 0 -> 486 bytes .../css/styles/shades-of-purple.css | 97 +++ .../css/styles/solarized-dark.css | 84 +++ .../css/styles/solarized-light.css | 84 +++ .../iSkyLIMS_wetlab/css/styles/sunburst.css | 102 +++ .../css/styles/tomorrow-night-blue.css | 75 ++ .../css/styles/tomorrow-night-bright.css | 74 ++ .../css/styles/tomorrow-night-eighties.css | 74 ++ .../css/styles/tomorrow-night.css | 75 ++ .../iSkyLIMS_wetlab/css/styles/tomorrow.css | 72 ++ static/iSkyLIMS_wetlab/css/styles/vs.css | 68 ++ static/iSkyLIMS_wetlab/css/styles/vs2015.css | 115 +++ static/iSkyLIMS_wetlab/css/styles/xcode.css | 104 +++ static/iSkyLIMS_wetlab/css/styles/xt256.css | 92 +++ static/iSkyLIMS_wetlab/css/styles/zenburn.css | 80 ++ static/iSkyLIMS_wetlab/js/highlight.pack.js | 2 + .../iSkyLIMS_wetlab/ConfigurationTest.html | 705 ++++++++++++++++++ tests/__init__.py | 0 tests/logging_test_config.ini | 20 + urls.py | 37 +- utils/common_run_functions.py | 2 +- utils/generic_functions.py | 29 +- utils/miseq_run_functions.py | 8 +- utils/testing_wetlab_configuration.py | 561 ++++++++++++++ views.py | 256 +++++++ 103 files changed, 9080 insertions(+), 28 deletions(-) create mode 100644 static/iSkyLIMS_wetlab/css/styles/a11y-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/a11y-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/agate.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/an-old-hope.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/androidstudio.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/arduino-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/arta.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/ascetic.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-cave-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-cave-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-dune-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-dune-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-estuary-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-estuary-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-forest-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-forest-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-heath-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-heath-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-plateau-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-plateau-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-savanna-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-savanna-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-seaside-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-seaside-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atom-one-dark-reasonable.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atom-one-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/atom-one-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/brown-paper.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/brown-papersq.png create mode 100644 static/iSkyLIMS_wetlab/css/styles/codepen-embed.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/color-brewer.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/darcula.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/darkula.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/default.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/docco.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/dracula.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/far.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/foundation.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/github-gist.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/github.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/gml.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/googlecode.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/grayscale.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/gruvbox-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/gruvbox-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/hopscotch.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/hybrid.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/idea.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/ir-black.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/isbl-editor-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/isbl-editor-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/kimbie.dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/kimbie.light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/lightfair.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/magula.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/mono-blue.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/monokai-sublime.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/monokai.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/nord.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/obsidian.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/ocean.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/paraiso-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/paraiso-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/pojoaque.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/pojoaque.jpg create mode 100644 static/iSkyLIMS_wetlab/css/styles/purebasic.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/qtcreator_dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/qtcreator_light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/railscasts.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/rainbow.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/routeros.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/school-book.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/school-book.png create mode 100644 static/iSkyLIMS_wetlab/css/styles/shades-of-purple.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/solarized-dark.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/solarized-light.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/sunburst.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/tomorrow-night-blue.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/tomorrow-night-bright.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/tomorrow-night-eighties.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/tomorrow-night.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/tomorrow.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/vs.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/vs2015.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/xcode.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/xt256.css create mode 100644 static/iSkyLIMS_wetlab/css/styles/zenburn.css create mode 100644 static/iSkyLIMS_wetlab/js/highlight.pack.js create mode 100644 templates/iSkyLIMS_wetlab/ConfigurationTest.html create mode 100644 tests/__init__.py create mode 100644 tests/logging_test_config.ini create mode 100644 utils/testing_wetlab_configuration.py diff --git a/cron.py b/cron.py index adc4eeb..119f8ff 100644 --- a/cron.py +++ b/cron.py @@ -47,7 +47,8 @@ def looking_for_new_runs (): ''' working_path = settings.MEDIA_ROOT os.chdir(working_path) - logger=open_log() + config_file = os.path.join(settings.BASE_DIR,'iSkyLIMS_wetlab', wetlab_config.LOGGING_CONFIG_FILE ) + logger=open_log(config_file) logger.info('###########---Start Crontab-----############') logger.info('Start searching for new/updating runs') diff --git a/static/iSkyLIMS_wetlab/css/styles/a11y-dark.css b/static/iSkyLIMS_wetlab/css/styles/a11y-dark.css new file mode 100644 index 0000000..b93b742 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/a11y-dark.css @@ -0,0 +1,99 @@ +/* a11y-dark theme */ +/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ +/* @author: ericwbailey */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #d4d0ab; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #ffa07a; +} + +/* Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f5ab35; +} + +/* Yellow */ +.hljs-attribute { + color: #ffd700; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #abe338; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #00e0e0; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #dcc6e0; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2b2b2b; + color: #f8f8f2; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +@media screen and (-ms-high-contrast: active) { + .hljs-addition, + .hljs-attribute, + .hljs-built_in, + .hljs-builtin-name, + .hljs-bullet, + .hljs-comment, + .hljs-link, + .hljs-literal, + .hljs-meta, + .hljs-number, + .hljs-params, + .hljs-string, + .hljs-symbol, + .hljs-type, + .hljs-quote { + color: highlight; + } + + .hljs-keyword, + .hljs-selector-tag { + font-weight: bold; + } +} diff --git a/static/iSkyLIMS_wetlab/css/styles/a11y-light.css b/static/iSkyLIMS_wetlab/css/styles/a11y-light.css new file mode 100644 index 0000000..f1bf8f3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/a11y-light.css @@ -0,0 +1,99 @@ +/* a11y-light theme */ +/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ +/* @author: ericwbailey */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #696969; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #d91e18; +} + +/* Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #aa5d00; +} + +/* Yellow */ +.hljs-attribute { + color: #aa5d00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #008000; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #007faa; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #7928a1; +} + +.hljs { + display: block; + overflow-x: auto; + background: #fefefe; + color: #545454; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +@media screen and (-ms-high-contrast: active) { + .hljs-addition, + .hljs-attribute, + .hljs-built_in, + .hljs-builtin-name, + .hljs-bullet, + .hljs-comment, + .hljs-link, + .hljs-literal, + .hljs-meta, + .hljs-number, + .hljs-params, + .hljs-string, + .hljs-symbol, + .hljs-type, + .hljs-quote { + color: highlight; + } + + .hljs-keyword, + .hljs-selector-tag { + font-weight: bold; + } +} diff --git a/static/iSkyLIMS_wetlab/css/styles/agate.css b/static/iSkyLIMS_wetlab/css/styles/agate.css new file mode 100644 index 0000000..8d64547 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/agate.css @@ -0,0 +1,108 @@ +/*! + * Agate by Taufik Nurrohman + * ---------------------------------------------------- + * + * #ade5fc + * #a2fca2 + * #c6b4f0 + * #d36363 + * #fcc28c + * #fc9b9b + * #ffa + * #fff + * #333 + * #62c8f3 + * #888 + * + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #333; + color: white; +} + +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-code, +.hljs-emphasis { + font-style: italic; +} + +.hljs-tag { + color: #62c8f3; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-selector-id, +.hljs-selector-class { + color: #ade5fc; +} + +.hljs-string, +.hljs-bullet { + color: #a2fca2; +} + +.hljs-type, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-quote, +.hljs-built_in, +.hljs-builtin-name { + color: #ffa; +} + +.hljs-number, +.hljs-symbol, +.hljs-bullet { + color: #d36363; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color: #fcc28c; +} + +.hljs-comment, +.hljs-deletion, +.hljs-code { + color: #888; +} + +.hljs-regexp, +.hljs-link { + color: #c6b4f0; +} + +.hljs-meta { + color: #fc9b9b; +} + +.hljs-deletion { + background-color: #fc9b9b; + color: #333; +} + +.hljs-addition { + background-color: #a2fca2; + color: #333; +} + +.hljs a { + color: inherit; +} + +.hljs a:focus, +.hljs a:hover { + color: inherit; + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/an-old-hope.css b/static/iSkyLIMS_wetlab/css/styles/an-old-hope.css new file mode 100644 index 0000000..a6d56f4 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/an-old-hope.css @@ -0,0 +1,89 @@ +/* + +An Old Hope – Star Wars Syntax (c) Gustavo Costa +Original theme - Ocean Dark Theme – by https://github.com/gavsiu +Based on Jesse Leite's Atom syntax theme 'An Old Hope' – https://github.com/JesseLeite/an-old-hope-syntax-atom + +*/ + +/* Death Star Comment */ +.hljs-comment, +.hljs-quote +{ + color: #B6B18B; +} + +/* Darth Vader */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion +{ + color: #EB3C54; +} + +/* Threepio */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link +{ + color: #E7CE56; +} + +/* Luke Skywalker */ +.hljs-attribute +{ + color: #EE7C2B; +} + +/* Obi Wan Kenobi */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition +{ + color: #4FB4D7; +} + +/* Yoda */ +.hljs-title, +.hljs-section +{ + color: #78BB65; +} + +/* Mace Windu */ +.hljs-keyword, +.hljs-selector-tag +{ + color: #B45EA4; +} + +/* Millenium Falcon */ +.hljs +{ + display: block; + overflow-x: auto; + background: #1C1D21; + color: #c0c5ce; + padding: 0.5em; +} + +.hljs-emphasis +{ + font-style: italic; +} + +.hljs-strong +{ + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/androidstudio.css b/static/iSkyLIMS_wetlab/css/styles/androidstudio.css new file mode 100644 index 0000000..bc8e473 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/androidstudio.css @@ -0,0 +1,66 @@ +/* +Date: 24 Fev 2015 +Author: Pedro Oliveira +*/ + +.hljs { + color: #a9b7c6; + background: #282b2e; + display: block; + overflow-x: auto; + padding: 0.5em; +} + +.hljs-number, +.hljs-literal, +.hljs-symbol, +.hljs-bullet { + color: #6897BB; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-deletion { + color: #cc7832; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-link { + color: #629755; +} + +.hljs-comment, +.hljs-quote { + color: #808080; +} + +.hljs-meta { + color: #bbb529; +} + +.hljs-string, +.hljs-attribute, +.hljs-addition { + color: #6A8759; +} + +.hljs-section, +.hljs-title, +.hljs-type { + color: #ffc66d; +} + +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e8bf6a; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/arduino-light.css b/static/iSkyLIMS_wetlab/css/styles/arduino-light.css new file mode 100644 index 0000000..4b8b7fd --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/arduino-light.css @@ -0,0 +1,88 @@ +/* + +Arduino® Light Theme - Stefania Mellai + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #FFFFFF; +} + +.hljs, +.hljs-subst { + color: #434f54; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-doctag, +.hljs-name { + color: #00979D; +} + +.hljs-built_in, +.hljs-literal, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #D35400; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #00979D; +} + +.hljs-type, +.hljs-string, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #005C5F; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-comment { + color: rgba(149,165,166,.8); +} + +.hljs-meta-keyword { + color: #728E00; +} + +.hljs-meta { + color: #728E00; + color: #434f54; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-function { + color: #728E00; +} + +.hljs-number { + color: #8A7B52; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/arta.css b/static/iSkyLIMS_wetlab/css/styles/arta.css new file mode 100644 index 0000000..75ef3a9 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/arta.css @@ -0,0 +1,73 @@ +/* +Date: 17.V.2011 +Author: pumbur +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #222; +} + +.hljs, +.hljs-subst { + color: #aaa; +} + +.hljs-section { + color: #fff; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #444; +} + +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-regexp { + color: #ffcc33; +} + +.hljs-number, +.hljs-addition { + color: #00cc66; +} + +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-template-variable, +.hljs-attribute, +.hljs-link { + color: #32aaee; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #6644aa; +} + +.hljs-title, +.hljs-variable, +.hljs-deletion, +.hljs-template-tag { + color: #bb1166; +} + +.hljs-section, +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/ascetic.css b/static/iSkyLIMS_wetlab/css/styles/ascetic.css new file mode 100644 index 0000000..48397e8 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/ascetic.css @@ -0,0 +1,45 @@ +/* + +Original style from softwaremaniacs.org (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-symbol, +.hljs-bullet, +.hljs-section, +.hljs-addition, +.hljs-attribute, +.hljs-link { + color: #888; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta, +.hljs-deletion { + color: #ccc; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-name, +.hljs-type, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-cave-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-cave-dark.css new file mode 100644 index 0000000..65428f3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-cave-dark.css @@ -0,0 +1,83 @@ +/* Base16 Atelier Cave Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Cave Comment */ +.hljs-comment, +.hljs-quote { + color: #7e7887; +} + +/* Atelier-Cave Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-regexp, +.hljs-link, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #be4678; +} + +/* Atelier-Cave Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #aa573c; +} + +/* Atelier-Cave Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #2a9292; +} + +/* Atelier-Cave Blue */ +.hljs-title, +.hljs-section { + color: #576ddb; +} + +/* Atelier-Cave Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #955ae7; +} + +.hljs-deletion, +.hljs-addition { + color: #19171c; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #be4678; +} + +.hljs-addition { + background-color: #2a9292; +} + +.hljs { + display: block; + overflow-x: auto; + background: #19171c; + color: #8b8792; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-cave-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-cave-light.css new file mode 100644 index 0000000..b419f9f --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-cave-light.css @@ -0,0 +1,85 @@ +/* Base16 Atelier Cave Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Cave Comment */ +.hljs-comment, +.hljs-quote { + color: #655f6d; +} + +/* Atelier-Cave Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #be4678; +} + +/* Atelier-Cave Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #aa573c; +} + +/* Atelier-Cave Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #2a9292; +} + +/* Atelier-Cave Blue */ +.hljs-title, +.hljs-section { + color: #576ddb; +} + +/* Atelier-Cave Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #955ae7; +} + +.hljs-deletion, +.hljs-addition { + color: #19171c; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #be4678; +} + +.hljs-addition { + background-color: #2a9292; +} + +.hljs { + display: block; + overflow-x: auto; + background: #efecf4; + color: #585260; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-dune-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-dune-dark.css new file mode 100644 index 0000000..1684f52 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-dune-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Dune Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Dune Comment */ +.hljs-comment, +.hljs-quote { + color: #999580; +} + +/* Atelier-Dune Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d73737; +} + +/* Atelier-Dune Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b65611; +} + +/* Atelier-Dune Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #60ac39; +} + +/* Atelier-Dune Blue */ +.hljs-title, +.hljs-section { + color: #6684e1; +} + +/* Atelier-Dune Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b854d4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #20201d; + color: #a6a28c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-dune-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-dune-light.css new file mode 100644 index 0000000..547719d --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-dune-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Dune Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Dune Comment */ +.hljs-comment, +.hljs-quote { + color: #7d7a68; +} + +/* Atelier-Dune Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d73737; +} + +/* Atelier-Dune Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b65611; +} + +/* Atelier-Dune Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #60ac39; +} + +/* Atelier-Dune Blue */ +.hljs-title, +.hljs-section { + color: #6684e1; +} + +/* Atelier-Dune Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b854d4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #fefbec; + color: #6e6b5e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-dark.css new file mode 100644 index 0000000..a5e5071 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Estuary Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Estuary Comment */ +.hljs-comment, +.hljs-quote { + color: #878573; +} + +/* Atelier-Estuary Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ba6236; +} + +/* Atelier-Estuary Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ae7313; +} + +/* Atelier-Estuary Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7d9726; +} + +/* Atelier-Estuary Blue */ +.hljs-title, +.hljs-section { + color: #36a166; +} + +/* Atelier-Estuary Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #5f9182; +} + +.hljs-deletion, +.hljs-addition { + color: #22221b; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ba6236; +} + +.hljs-addition { + background-color: #7d9726; +} + +.hljs { + display: block; + overflow-x: auto; + background: #22221b; + color: #929181; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-light.css new file mode 100644 index 0000000..1daee5d --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-estuary-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Estuary Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Estuary Comment */ +.hljs-comment, +.hljs-quote { + color: #6c6b5a; +} + +/* Atelier-Estuary Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ba6236; +} + +/* Atelier-Estuary Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ae7313; +} + +/* Atelier-Estuary Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7d9726; +} + +/* Atelier-Estuary Blue */ +.hljs-title, +.hljs-section { + color: #36a166; +} + +/* Atelier-Estuary Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #5f9182; +} + +.hljs-deletion, +.hljs-addition { + color: #22221b; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ba6236; +} + +.hljs-addition { + background-color: #7d9726; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4f3ec; + color: #5f5e4e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-forest-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-forest-dark.css new file mode 100644 index 0000000..0ef4fae --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-forest-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Forest Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Forest Comment */ +.hljs-comment, +.hljs-quote { + color: #9c9491; +} + +/* Atelier-Forest Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #f22c40; +} + +/* Atelier-Forest Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #df5320; +} + +/* Atelier-Forest Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7b9726; +} + +/* Atelier-Forest Blue */ +.hljs-title, +.hljs-section { + color: #407ee7; +} + +/* Atelier-Forest Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6666ea; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b1918; + color: #a8a19f; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-forest-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-forest-light.css new file mode 100644 index 0000000..bbedde1 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-forest-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Forest Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Forest Comment */ +.hljs-comment, +.hljs-quote { + color: #766e6b; +} + +/* Atelier-Forest Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #f22c40; +} + +/* Atelier-Forest Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #df5320; +} + +/* Atelier-Forest Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7b9726; +} + +/* Atelier-Forest Blue */ +.hljs-title, +.hljs-section { + color: #407ee7; +} + +/* Atelier-Forest Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6666ea; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f1efee; + color: #68615e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-heath-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-heath-dark.css new file mode 100644 index 0000000..fe01ff7 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-heath-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Heath Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Heath Comment */ +.hljs-comment, +.hljs-quote { + color: #9e8f9e; +} + +/* Atelier-Heath Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca402b; +} + +/* Atelier-Heath Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #a65926; +} + +/* Atelier-Heath Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #918b3b; +} + +/* Atelier-Heath Blue */ +.hljs-title, +.hljs-section { + color: #516aec; +} + +/* Atelier-Heath Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #7b59c0; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b181b; + color: #ab9bab; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-heath-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-heath-light.css new file mode 100644 index 0000000..ee43786 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-heath-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Heath Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Heath Comment */ +.hljs-comment, +.hljs-quote { + color: #776977; +} + +/* Atelier-Heath Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca402b; +} + +/* Atelier-Heath Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #a65926; +} + +/* Atelier-Heath Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #918b3b; +} + +/* Atelier-Heath Blue */ +.hljs-title, +.hljs-section { + color: #516aec; +} + +/* Atelier-Heath Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #7b59c0; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f7f3f7; + color: #695d69; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-dark.css new file mode 100644 index 0000000..a937d3b --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Lakeside Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Lakeside Comment */ +.hljs-comment, +.hljs-quote { + color: #7195a8; +} + +/* Atelier-Lakeside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d22d72; +} + +/* Atelier-Lakeside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #935c25; +} + +/* Atelier-Lakeside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #568c3b; +} + +/* Atelier-Lakeside Blue */ +.hljs-title, +.hljs-section { + color: #257fad; +} + +/* Atelier-Lakeside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6b6bb8; +} + +.hljs { + display: block; + overflow-x: auto; + background: #161b1d; + color: #7ea2b4; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-light.css new file mode 100644 index 0000000..6c7e8f9 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-lakeside-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Lakeside Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Lakeside Comment */ +.hljs-comment, +.hljs-quote { + color: #5a7b8c; +} + +/* Atelier-Lakeside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d22d72; +} + +/* Atelier-Lakeside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #935c25; +} + +/* Atelier-Lakeside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #568c3b; +} + +/* Atelier-Lakeside Blue */ +.hljs-title, +.hljs-section { + color: #257fad; +} + +/* Atelier-Lakeside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6b6bb8; +} + +.hljs { + display: block; + overflow-x: auto; + background: #ebf8ff; + color: #516d7b; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-dark.css new file mode 100644 index 0000000..3bb0526 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Plateau Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Plateau Comment */ +.hljs-comment, +.hljs-quote { + color: #7e7777; +} + +/* Atelier-Plateau Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca4949; +} + +/* Atelier-Plateau Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b45a3c; +} + +/* Atelier-Plateau Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #4b8b8b; +} + +/* Atelier-Plateau Blue */ +.hljs-title, +.hljs-section { + color: #7272ca; +} + +/* Atelier-Plateau Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8464c4; +} + +.hljs-deletion, +.hljs-addition { + color: #1b1818; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ca4949; +} + +.hljs-addition { + background-color: #4b8b8b; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b1818; + color: #8a8585; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-light.css new file mode 100644 index 0000000..5f0222b --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-plateau-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Plateau Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Plateau Comment */ +.hljs-comment, +.hljs-quote { + color: #655d5d; +} + +/* Atelier-Plateau Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca4949; +} + +/* Atelier-Plateau Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b45a3c; +} + +/* Atelier-Plateau Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #4b8b8b; +} + +/* Atelier-Plateau Blue */ +.hljs-title, +.hljs-section { + color: #7272ca; +} + +/* Atelier-Plateau Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8464c4; +} + +.hljs-deletion, +.hljs-addition { + color: #1b1818; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ca4949; +} + +.hljs-addition { + background-color: #4b8b8b; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4ecec; + color: #585050; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-dark.css new file mode 100644 index 0000000..38f8314 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Savanna Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Savanna Comment */ +.hljs-comment, +.hljs-quote { + color: #78877d; +} + +/* Atelier-Savanna Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #b16139; +} + +/* Atelier-Savanna Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #9f713c; +} + +/* Atelier-Savanna Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #489963; +} + +/* Atelier-Savanna Blue */ +.hljs-title, +.hljs-section { + color: #478c90; +} + +/* Atelier-Savanna Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #55859b; +} + +.hljs-deletion, +.hljs-addition { + color: #171c19; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #b16139; +} + +.hljs-addition { + background-color: #489963; +} + +.hljs { + display: block; + overflow-x: auto; + background: #171c19; + color: #87928a; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-light.css new file mode 100644 index 0000000..1ccd7c6 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-savanna-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Savanna Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Savanna Comment */ +.hljs-comment, +.hljs-quote { + color: #5f6d64; +} + +/* Atelier-Savanna Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #b16139; +} + +/* Atelier-Savanna Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #9f713c; +} + +/* Atelier-Savanna Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #489963; +} + +/* Atelier-Savanna Blue */ +.hljs-title, +.hljs-section { + color: #478c90; +} + +/* Atelier-Savanna Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #55859b; +} + +.hljs-deletion, +.hljs-addition { + color: #171c19; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #b16139; +} + +.hljs-addition { + background-color: #489963; +} + +.hljs { + display: block; + overflow-x: auto; + background: #ecf4ee; + color: #526057; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-dark.css new file mode 100644 index 0000000..df29949 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Seaside Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Seaside Comment */ +.hljs-comment, +.hljs-quote { + color: #809980; +} + +/* Atelier-Seaside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e6193c; +} + +/* Atelier-Seaside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #87711d; +} + +/* Atelier-Seaside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #29a329; +} + +/* Atelier-Seaside Blue */ +.hljs-title, +.hljs-section { + color: #3d62f5; +} + +/* Atelier-Seaside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ad2bee; +} + +.hljs { + display: block; + overflow-x: auto; + background: #131513; + color: #8ca68c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-light.css new file mode 100644 index 0000000..9d960f2 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-seaside-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Seaside Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Seaside Comment */ +.hljs-comment, +.hljs-quote { + color: #687d68; +} + +/* Atelier-Seaside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e6193c; +} + +/* Atelier-Seaside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #87711d; +} + +/* Atelier-Seaside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #29a329; +} + +/* Atelier-Seaside Blue */ +.hljs-title, +.hljs-section { + color: #3d62f5; +} + +/* Atelier-Seaside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ad2bee; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4fbf4; + color: #5e6e5e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-dark.css b/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-dark.css new file mode 100644 index 0000000..c2ab793 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Sulphurpool Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Sulphurpool Comment */ +.hljs-comment, +.hljs-quote { + color: #898ea4; +} + +/* Atelier-Sulphurpool Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #c94922; +} + +/* Atelier-Sulphurpool Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #c76b29; +} + +/* Atelier-Sulphurpool Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #ac9739; +} + +/* Atelier-Sulphurpool Blue */ +.hljs-title, +.hljs-section { + color: #3d8fd1; +} + +/* Atelier-Sulphurpool Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6679cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #202746; + color: #979db4; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-light.css b/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-light.css new file mode 100644 index 0000000..96c47d0 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atelier-sulphurpool-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Sulphurpool Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Sulphurpool Comment */ +.hljs-comment, +.hljs-quote { + color: #6b7394; +} + +/* Atelier-Sulphurpool Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #c94922; +} + +/* Atelier-Sulphurpool Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #c76b29; +} + +/* Atelier-Sulphurpool Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #ac9739; +} + +/* Atelier-Sulphurpool Blue */ +.hljs-title, +.hljs-section { + color: #3d8fd1; +} + +/* Atelier-Sulphurpool Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6679cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f5f7ff; + color: #5e6687; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atom-one-dark-reasonable.css b/static/iSkyLIMS_wetlab/css/styles/atom-one-dark-reasonable.css new file mode 100644 index 0000000..fd41c99 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atom-one-dark-reasonable.css @@ -0,0 +1,77 @@ +/* + +Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage + +Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + line-height: 1.3em; + color: #abb2bf; + background: #282c34; + border-radius: 5px; +} +.hljs-keyword, .hljs-operator { + color: #F92672; +} +.hljs-pattern-match { + color: #F92672; +} +.hljs-pattern-match .hljs-constructor { + color: #61aeee; +} +.hljs-function { + color: #61aeee; +} +.hljs-function .hljs-params { + color: #A6E22E; +} +.hljs-function .hljs-params .hljs-typing { + color: #FD971F; +} +.hljs-module-access .hljs-module { + color: #7e57c2; +} +.hljs-constructor { + color: #e2b93d; +} +.hljs-constructor .hljs-string { + color: #9CCC65; +} +.hljs-comment, .hljs-quote { + color: #b18eb1; + font-style: italic; +} +.hljs-doctag, .hljs-formula { + color: #c678dd; +} +.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { + color: #e06c75; +} +.hljs-literal { + color: #56b6c2; +} +.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { + color: #98c379; +} +.hljs-built_in, .hljs-class .hljs-title { + color: #e6c07b; +} +.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { + color: #d19a66; +} +.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { + color: #61aeee; +} +.hljs-emphasis { + font-style: italic; +} +.hljs-strong { + font-weight: bold; +} +.hljs-link { + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atom-one-dark.css b/static/iSkyLIMS_wetlab/css/styles/atom-one-dark.css new file mode 100644 index 0000000..1616aaf --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atom-one-dark.css @@ -0,0 +1,96 @@ +/* + +Atom One Dark by Daniel Gamage +Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax + +base: #282c34 +mono-1: #abb2bf +mono-2: #818896 +mono-3: #5c6370 +hue-1: #56b6c2 +hue-2: #61aeee +hue-3: #c678dd +hue-4: #98c379 +hue-5: #e06c75 +hue-5-2: #be5046 +hue-6: #d19a66 +hue-6-2: #e6c07b + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #abb2bf; + background: #282c34; +} + +.hljs-comment, +.hljs-quote { + color: #5c6370; + font-style: italic; +} + +.hljs-doctag, +.hljs-keyword, +.hljs-formula { + color: #c678dd; +} + +.hljs-section, +.hljs-name, +.hljs-selector-tag, +.hljs-deletion, +.hljs-subst { + color: #e06c75; +} + +.hljs-literal { + color: #56b6c2; +} + +.hljs-string, +.hljs-regexp, +.hljs-addition, +.hljs-attribute, +.hljs-meta-string { + color: #98c379; +} + +.hljs-built_in, +.hljs-class .hljs-title { + color: #e6c07b; +} + +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-type, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-number { + color: #d19a66; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-meta, +.hljs-selector-id, +.hljs-title { + color: #61aeee; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/atom-one-light.css b/static/iSkyLIMS_wetlab/css/styles/atom-one-light.css new file mode 100644 index 0000000..d5bd1d2 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/atom-one-light.css @@ -0,0 +1,96 @@ +/* + +Atom One Light by Daniel Gamage +Original One Light Syntax theme from https://github.com/atom/one-light-syntax + +base: #fafafa +mono-1: #383a42 +mono-2: #686b77 +mono-3: #a0a1a7 +hue-1: #0184bb +hue-2: #4078f2 +hue-3: #a626a4 +hue-4: #50a14f +hue-5: #e45649 +hue-5-2: #c91243 +hue-6: #986801 +hue-6-2: #c18401 + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #383a42; + background: #fafafa; +} + +.hljs-comment, +.hljs-quote { + color: #a0a1a7; + font-style: italic; +} + +.hljs-doctag, +.hljs-keyword, +.hljs-formula { + color: #a626a4; +} + +.hljs-section, +.hljs-name, +.hljs-selector-tag, +.hljs-deletion, +.hljs-subst { + color: #e45649; +} + +.hljs-literal { + color: #0184bb; +} + +.hljs-string, +.hljs-regexp, +.hljs-addition, +.hljs-attribute, +.hljs-meta-string { + color: #50a14f; +} + +.hljs-built_in, +.hljs-class .hljs-title { + color: #c18401; +} + +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-type, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-number { + color: #986801; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-meta, +.hljs-selector-id, +.hljs-title { + color: #4078f2; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/brown-paper.css b/static/iSkyLIMS_wetlab/css/styles/brown-paper.css new file mode 100644 index 0000000..f0197b9 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/brown-paper.css @@ -0,0 +1,64 @@ +/* + +Brown Paper style from goldblog.com.ua (c) Zaripov Yura + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background:#b7a68e url(./brown-papersq.png); +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color:#005599; + font-weight:bold; +} + +.hljs, +.hljs-subst { + color: #363c69; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable, +.hljs-link, +.hljs-name { + color: #2c009f; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta, +.hljs-deletion { + color: #802022; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/brown-papersq.png b/static/iSkyLIMS_wetlab/css/styles/brown-papersq.png new file mode 100644 index 0000000000000000000000000000000000000000..3813903dbf9fa7b1fb5bd11d9534c06667d9056f GIT binary patch literal 18198 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
G3S-EN>9CM!{YB*|;6wg-K3V?)eR((z#1 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 literal 0 HcmV?d00001 diff --git a/static/iSkyLIMS_wetlab/css/styles/codepen-embed.css b/static/iSkyLIMS_wetlab/css/styles/codepen-embed.css new file mode 100644 index 0000000..195c4a0 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/codepen-embed.css @@ -0,0 +1,60 @@ +/* + codepen.io Embed Theme + Author: Justin Perry + Original theme - https://github.com/chriskempson/tomorrow-theme +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #222; + color: #fff; +} + +.hljs-comment, +.hljs-quote { + color: #777; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-regexp, +.hljs-meta, +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-params, +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-deletion { + color: #ab875d; +} + +.hljs-section, +.hljs-title, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-type, +.hljs-attribute { + color: #9b869b; +} + +.hljs-string, +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #8f9c6c; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/color-brewer.css b/static/iSkyLIMS_wetlab/css/styles/color-brewer.css new file mode 100644 index 0000000..7934d98 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/color-brewer.css @@ -0,0 +1,71 @@ +/* + +Colorbrewer theme +Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock +Ported by Fabrício Tavares de Oliveira + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fff; +} + +.hljs, +.hljs-subst { + color: #000; +} + +.hljs-string, +.hljs-meta, +.hljs-symbol, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #756bb1; +} + +.hljs-comment, +.hljs-quote { + color: #636363; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-bullet, +.hljs-link { + color: #31a354; +} + +.hljs-deletion, +.hljs-variable { + color: #88f; +} + + + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-doctag, +.hljs-type, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-strong { + color: #3182bd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-attribute { + color: #e6550d; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/darcula.css b/static/iSkyLIMS_wetlab/css/styles/darcula.css new file mode 100644 index 0000000..be182d0 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/darcula.css @@ -0,0 +1,77 @@ +/* + +Darcula color scheme from the JetBrains family of IDEs + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #2b2b2b; +} + +.hljs { + color: #bababa; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-link, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #6896ba; +} + +.hljs-code, +.hljs-selector-class { + color: #a6e22e; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-attribute, +.hljs-name, +.hljs-variable { + color: #cb7832; +} + +.hljs-params { + color: #b9b9b9; +} + +.hljs-string { + color: #6a8759; +} + +.hljs-subst, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-symbol, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #e0c46c; +} + +.hljs-comment, +.hljs-deletion, +.hljs-meta { + color: #7f7f7f; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/dark.css b/static/iSkyLIMS_wetlab/css/styles/dark.css new file mode 100644 index 0000000..b4724f5 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/dark.css @@ -0,0 +1,63 @@ +/* + +Dark style from softwaremaniacs.org (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #444; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-section, +.hljs-link { + color: white; +} + +.hljs, +.hljs-subst { + color: #ddd; +} + +.hljs-string, +.hljs-title, +.hljs-name, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #d88; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #777; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/darkula.css b/static/iSkyLIMS_wetlab/css/styles/darkula.css new file mode 100644 index 0000000..f4646c3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/darkula.css @@ -0,0 +1,6 @@ +/* + Deprecated due to a typo in the name and left here for compatibility purpose only. + Please use darcula.css instead. +*/ + +@import url('darcula.css'); diff --git a/static/iSkyLIMS_wetlab/css/styles/default.css b/static/iSkyLIMS_wetlab/css/styles/default.css new file mode 100644 index 0000000..f1bfade --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/default.css @@ -0,0 +1,99 @@ +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; +} + + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #444; +} + +.hljs-comment { + color: #888888; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; +} + + +/* User color: hue: 0 */ + +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; +} + + +/* Language color: hue: 90; */ + +.hljs-literal { + color: #78A960; +} + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; +} + + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/docco.css b/static/iSkyLIMS_wetlab/css/styles/docco.css new file mode 100644 index 0000000..db366be --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/docco.css @@ -0,0 +1,97 @@ +/* +Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #000; + background: #f8f8ff; +} + +.hljs-comment, +.hljs-quote { + color: #408080; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-subst { + color: #954121; +} + +.hljs-number { + color: #40a070; +} + +.hljs-string, +.hljs-doctag { + color: #219161; +} + +.hljs-selector-id, +.hljs-selector-class, +.hljs-section, +.hljs-type { + color: #19469d; +} + +.hljs-params { + color: #00f; +} + +.hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-variable, +.hljs-template-variable { + color: #008080; +} + +.hljs-regexp, +.hljs-link { + color: #b68; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/dracula.css b/static/iSkyLIMS_wetlab/css/styles/dracula.css new file mode 100644 index 0000000..d591db6 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/dracula.css @@ -0,0 +1,76 @@ +/* + +Dracula Theme v1.2.0 + +https://github.com/zenorocha/dracula-theme + +Copyright 2015, All rights reserved + +Code licensed under the MIT license +http://zenorocha.mit-license.org + +@author Éverton Ribeiro +@author Zeno Rocha + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282a36; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-section, +.hljs-link { + color: #8be9fd; +} + +.hljs-function .hljs-keyword { + color: #ff79c6; +} + +.hljs, +.hljs-subst { + color: #f8f8f2; +} + +.hljs-string, +.hljs-title, +.hljs-name, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #f1fa8c; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #6272a4; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/far.css b/static/iSkyLIMS_wetlab/css/styles/far.css new file mode 100644 index 0000000..2b3f87b --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/far.css @@ -0,0 +1,71 @@ +/* + +FAR Style (c) MajestiC + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000080; +} + +.hljs, +.hljs-subst { + color: #0ff; +} + +.hljs-string, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #ff0; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-variable { + color: #fff; +} + +.hljs-comment, +.hljs-quote, +.hljs-doctag, +.hljs-deletion { + color: #888; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-link { + color: #0f0; +} + +.hljs-meta { + color: #008080; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/foundation.css b/static/iSkyLIMS_wetlab/css/styles/foundation.css new file mode 100644 index 0000000..f1fe64b --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/foundation.css @@ -0,0 +1,88 @@ +/* +Description: Foundation 4 docs style for highlight.js +Author: Dan Allen +Website: http://foundation.zurb.com/docs/ +Version: 1.0 +Date: 2013-04-02 +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #eee; color: black; +} + +.hljs-link, +.hljs-emphasis, +.hljs-attribute, +.hljs-addition { + color: #070; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong, +.hljs-string, +.hljs-deletion { + color: #d14; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-quote, +.hljs-comment { + color: #998; + font-style: italic; +} + +.hljs-section, +.hljs-title { + color: #900; +} + +.hljs-class .hljs-title, +.hljs-type { + color: #458; +} + +.hljs-variable, +.hljs-template-variable { + color: #336699; +} + +.hljs-bullet { + color: #997700; +} + +.hljs-meta { + color: #3344bb; +} + +.hljs-code, +.hljs-number, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag { + color: #099; +} + +.hljs-regexp { + background-color: #fff0ff; + color: #880088; +} + +.hljs-symbol { + color: #990073; +} + +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #007700; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/github-gist.css b/static/iSkyLIMS_wetlab/css/styles/github-gist.css new file mode 100644 index 0000000..155f0b9 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/github-gist.css @@ -0,0 +1,71 @@ +/** + * GitHub Gist Theme + * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro + */ + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/github.css b/static/iSkyLIMS_wetlab/css/styles/github.css new file mode 100644 index 0000000..791932b --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/github.css @@ -0,0 +1,99 @@ +/* + +github.com style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: #008080; +} + +.hljs-string, +.hljs-doctag { + color: #d14; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #900; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: #009926; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/gml.css b/static/iSkyLIMS_wetlab/css/styles/gml.css new file mode 100644 index 0000000..ffb5e47 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/gml.css @@ -0,0 +1,78 @@ +/* + +GML Theme - Meseta + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #222222; + color: #C0C0C0; +} + +.hljs-keywords { + color: #FFB871; + font-weight: bold; +} + +.hljs-built_in { + color: #FFB871; +} + +.hljs-literal { + color: #FF8080; +} + +.hljs-symbol { + color: #58E55A; +} + +.hljs-comment { + color: #5B995B; +} + +.hljs-string { + color: #FFFF00; +} + +.hljs-number { + color: #FF8080; +} + +.hljs-attribute, +.hljs-selector-tag, +.hljs-doctag, +.hljs-name, +.hljs-bullet, +.hljs-code, +.hljs-addition, +.hljs-regexp, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-type, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion, +.hljs-title, +.hljs-section, +.hljs-function, +.hljs-meta-keyword, +.hljs-meta, +.hljs-subst { + color: #C0C0C0; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/googlecode.css b/static/iSkyLIMS_wetlab/css/styles/googlecode.css new file mode 100644 index 0000000..884ad63 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/googlecode.css @@ -0,0 +1,89 @@ +/* + +Google Code style (c) Aahan Krish + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote { + color: #800; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-title, +.hljs-name { + color: #008; +} + +.hljs-variable, +.hljs-template-variable { + color: #660; +} + +.hljs-string, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-regexp { + color: #080; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-meta, +.hljs-number, +.hljs-link { + color: #066; +} + +.hljs-title, +.hljs-doctag, +.hljs-type, +.hljs-attr, +.hljs-built_in, +.hljs-builtin-name, +.hljs-params { + color: #606; +} + +.hljs-attribute, +.hljs-subst { + color: #000; +} + +.hljs-formula { + background-color: #eee; + font-style: italic; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #9B703F +} + +.hljs-addition { + background-color: #baeeba; +} + +.hljs-deletion { + background-color: #ffc8bd; +} + +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/grayscale.css b/static/iSkyLIMS_wetlab/css/styles/grayscale.css new file mode 100644 index 0000000..5376f34 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/grayscale.css @@ -0,0 +1,101 @@ +/* + +grayscale style (c) MY Sun + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #fff; +} + +.hljs-comment, +.hljs-quote { + color: #777; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal { + color: #777; +} + +.hljs-string, +.hljs-doctag, +.hljs-formula { + color: #333; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #000; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-class .hljs-title, +.hljs-type, +.hljs-name { + color: #333; + font-weight: bold; +} + +.hljs-tag { + color: #333; +} + +.hljs-regexp { + color: #333; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #000; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #000; + text-decoration: underline; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + color: #fff; + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat; +} + +.hljs-addition { + color: #000; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/gruvbox-dark.css b/static/iSkyLIMS_wetlab/css/styles/gruvbox-dark.css new file mode 100644 index 0000000..f563811 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/gruvbox-dark.css @@ -0,0 +1,108 @@ +/* + +Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282828; +} + +.hljs, +.hljs-subst { + color: #ebdbb2; +} + +/* Gruvbox Red */ +.hljs-deletion, +.hljs-formula, +.hljs-keyword, +.hljs-link, +.hljs-selector-tag { + color: #fb4934; +} + +/* Gruvbox Blue */ +.hljs-built_in, +.hljs-emphasis, +.hljs-name, +.hljs-quote, +.hljs-strong, +.hljs-title, +.hljs-variable { + color: #83a598; +} + +/* Gruvbox Yellow */ +.hljs-attr, +.hljs-params, +.hljs-template-tag, +.hljs-type { + color: #fabd2f; +} + +/* Gruvbox Purple */ +.hljs-builtin-name, +.hljs-doctag, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +/* Gruvbox Orange */ +.hljs-code, +.hljs-meta, +.hljs-regexp, +.hljs-selector-id, +.hljs-template-variable { + color: #fe8019; +} + +/* Gruvbox Green */ +.hljs-addition, +.hljs-meta-string, +.hljs-section, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-string, +.hljs-symbol { + color: #b8bb26; +} + +/* Gruvbox Aqua */ +.hljs-attribute, +.hljs-bullet, +.hljs-class, +.hljs-function, +.hljs-function .hljs-keyword, +.hljs-meta-keyword, +.hljs-selector-pseudo, +.hljs-tag { + color: #8ec07c; +} + +/* Gruvbox Gray */ +.hljs-comment { + color: #928374; +} + +/* Gruvbox Purple */ +.hljs-link_label, +.hljs-literal, +.hljs-number { + color: #d3869b; +} + +.hljs-comment, +.hljs-emphasis { + font-style: italic; +} + +.hljs-section, +.hljs-strong, +.hljs-tag { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/gruvbox-light.css b/static/iSkyLIMS_wetlab/css/styles/gruvbox-light.css new file mode 100644 index 0000000..ff45468 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/gruvbox-light.css @@ -0,0 +1,108 @@ +/* + +Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fbf1c7; +} + +.hljs, +.hljs-subst { + color: #3c3836; +} + +/* Gruvbox Red */ +.hljs-deletion, +.hljs-formula, +.hljs-keyword, +.hljs-link, +.hljs-selector-tag { + color: #9d0006; +} + +/* Gruvbox Blue */ +.hljs-built_in, +.hljs-emphasis, +.hljs-name, +.hljs-quote, +.hljs-strong, +.hljs-title, +.hljs-variable { + color: #076678; +} + +/* Gruvbox Yellow */ +.hljs-attr, +.hljs-params, +.hljs-template-tag, +.hljs-type { + color: #b57614; +} + +/* Gruvbox Purple */ +.hljs-builtin-name, +.hljs-doctag, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +/* Gruvbox Orange */ +.hljs-code, +.hljs-meta, +.hljs-regexp, +.hljs-selector-id, +.hljs-template-variable { + color: #af3a03; +} + +/* Gruvbox Green */ +.hljs-addition, +.hljs-meta-string, +.hljs-section, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-string, +.hljs-symbol { + color: #79740e; +} + +/* Gruvbox Aqua */ +.hljs-attribute, +.hljs-bullet, +.hljs-class, +.hljs-function, +.hljs-function .hljs-keyword, +.hljs-meta-keyword, +.hljs-selector-pseudo, +.hljs-tag { + color: #427b58; +} + +/* Gruvbox Gray */ +.hljs-comment { + color: #928374; +} + +/* Gruvbox Purple */ +.hljs-link_label, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +.hljs-comment, +.hljs-emphasis { + font-style: italic; +} + +.hljs-section, +.hljs-strong, +.hljs-tag { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/hopscotch.css b/static/iSkyLIMS_wetlab/css/styles/hopscotch.css new file mode 100644 index 0000000..32e60d2 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/hopscotch.css @@ -0,0 +1,83 @@ +/* + * Hopscotch + * by Jan T. Sott + * https://github.com/idleberg/Hopscotch + * + * This work is licensed under the Creative Commons CC0 1.0 Universal License + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #989498; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-deletion { + color: #dd464c; +} + +/* Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #fd8b19; +} + +/* Yellow */ +.hljs-class .hljs-title { + color: #fdcc59; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #8fc13e; +} + +/* Aqua */ +.hljs-meta { + color: #149b93; +} + +/* Blue */ +.hljs-function, +.hljs-section, +.hljs-title { + color: #1290bf; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #c85e7c; +} + +.hljs { + display: block; + background: #322931; + color: #b9b5b8; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/hybrid.css b/static/iSkyLIMS_wetlab/css/styles/hybrid.css new file mode 100644 index 0000000..29735a1 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/hybrid.css @@ -0,0 +1,102 @@ +/* + +vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) + +*/ + +/*background color*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #1d1f21; +} + +/*selection color*/ +.hljs::selection, +.hljs span::selection { + background: #373b41; +} + +.hljs::-moz-selection, +.hljs span::-moz-selection { + background: #373b41; +} + +/*foreground color*/ +.hljs { + color: #c5c8c6; +} + +/*color: fg_yellow*/ +.hljs-title, +.hljs-name { + color: #f0c674; +} + +/*color: fg_comment*/ +.hljs-comment, +.hljs-meta, +.hljs-meta .hljs-keyword { + color: #707880; +} + +/*color: fg_red*/ +.hljs-number, +.hljs-symbol, +.hljs-literal, +.hljs-deletion, +.hljs-link { + color: #cc6666 +} + +/*color: fg_green*/ +.hljs-string, +.hljs-doctag, +.hljs-addition, +.hljs-regexp, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #b5bd68; +} + +/*color: fg_purple*/ +.hljs-attribute, +.hljs-code, +.hljs-selector-id { + color: #b294bb; +} + +/*color: fg_blue*/ +.hljs-keyword, +.hljs-selector-tag, +.hljs-bullet, +.hljs-tag { + color: #81a2be; +} + +/*color: fg_aqua*/ +.hljs-subst, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #8abeb7; +} + +/*color: fg_orange*/ +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-quote, +.hljs-section, +.hljs-selector-class { + color: #de935f; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/idea.css b/static/iSkyLIMS_wetlab/css/styles/idea.css new file mode 100644 index 0000000..3bf1892 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/idea.css @@ -0,0 +1,97 @@ +/* + +Intellij Idea-like styling (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #000; + background: #fff; +} + +.hljs-subst, +.hljs-title { + font-weight: normal; + color: #000; +} + +.hljs-comment, +.hljs-quote { + color: #808080; + font-style: italic; +} + +.hljs-meta { + color: #808000; +} + +.hljs-tag { + background: #efefef; +} + +.hljs-section, +.hljs-name, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag, +.hljs-type, +.hljs-selector-id, +.hljs-selector-class { + font-weight: bold; + color: #000080; +} + +.hljs-attribute, +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: bold; + color: #0000ff; +} + +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: normal; +} + +.hljs-string { + color: #008000; + font-weight: bold; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-formula { + color: #000; + background: #d0eded; + font-style: italic; +} + +.hljs-doctag { + text-decoration: underline; +} + +.hljs-variable, +.hljs-template-variable { + color: #660e7a; +} + +.hljs-addition { + background: #baeeba; +} + +.hljs-deletion { + background: #ffc8bd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/ir-black.css b/static/iSkyLIMS_wetlab/css/styles/ir-black.css new file mode 100644 index 0000000..bd4c755 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/ir-black.css @@ -0,0 +1,73 @@ +/* + IR_Black style (c) Vasily Mikhailitchenko +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000; + color: #f8f8f8; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #7c7c7c; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-tag, +.hljs-name { + color: #96cbfe; +} + +.hljs-attribute, +.hljs-selector-id { + color: #ffffb6; +} + +.hljs-string, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition { + color: #a8ff60; +} + +.hljs-subst { + color: #daefa3; +} + +.hljs-regexp, +.hljs-link { + color: #e9c062; +} + +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-doctag { + color: #ffffb6; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-variable, +.hljs-template-variable, +.hljs-literal { + color: #c6c5fe; +} + +.hljs-number, +.hljs-deletion { + color:#ff73fd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/isbl-editor-dark.css b/static/iSkyLIMS_wetlab/css/styles/isbl-editor-dark.css new file mode 100644 index 0000000..2f1d95d --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/isbl-editor-dark.css @@ -0,0 +1,112 @@ +/* + +ISBL Editor style dark color scheme (c) Dmitriy Tarasov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #404040; + color: #f0f0f0; +} + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #f0f0f0; +} + +.hljs-comment { + color: #b5b5b5; + font-style: italic; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + color: #f0f0f0; + font-weight: bold; +} + + +/* User color: hue: 0 */ + +.hljs-string { + color: #97bf0d; +} + +.hljs-type, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #f0f0f0; +} + +.hljs-title, +.hljs-section { + color: #df471e; +} + +.hljs-title>.hljs-built_in { + color: #81bce9; + font-weight: normal; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #e2c696; +} + +/* Language color: hue: 90; */ + +.hljs-built_in, +.hljs-literal { + color: #97bf0d; + font-weight: bold; +} + +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; +} + +.hljs-class { + color: #ce9d4d; + font-weight: bold; +} + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/isbl-editor-light.css b/static/iSkyLIMS_wetlab/css/styles/isbl-editor-light.css new file mode 100644 index 0000000..633070d --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/isbl-editor-light.css @@ -0,0 +1,112 @@ +/* + +ISBL Editor style light color schemec (c) Dmitriy Tarasov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #000000; +} + +.hljs-comment { + color: #555555; + font-style: italic; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + color: #000000; + font-weight: bold; +} + + +/* User color: hue: 0 */ + +.hljs-string { + color: #000080; +} + +.hljs-type, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #000000; +} + +.hljs-title, +.hljs-section { + color: #fb2c00; +} + +.hljs-title>.hljs-built_in { + color: #008080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #5e1700; +} + +/* Language color: hue: 90; */ + +.hljs-built_in, +.hljs-literal { + color: #000080; + font-weight: bold; +} + +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; +} + +.hljs-class { + color: #6f1C00; + font-weight: bold; +} + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/kimbie.dark.css b/static/iSkyLIMS_wetlab/css/styles/kimbie.dark.css new file mode 100644 index 0000000..d139cb5 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/kimbie.dark.css @@ -0,0 +1,74 @@ +/* + Name: Kimbie (dark) + Author: Jan T. Sott + License: Creative Commons Attribution-ShareAlike 4.0 Unported License + URL: https://github.com/idleberg/Kimbie-highlight.js +*/ + +/* Kimbie Comment */ +.hljs-comment, +.hljs-quote { + color: #d6baad; +} + +/* Kimbie Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-meta { + color: #dc3958; +} + +/* Kimbie Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion, +.hljs-link { + color: #f79a32; +} + +/* Kimbie Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #f06431; +} + +/* Kimbie Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #889b4a; +} + +/* Kimbie Purple */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-function { + color: #98676a; +} + +.hljs { + display: block; + overflow-x: auto; + background: #221a0f; + color: #d3af86; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/kimbie.light.css b/static/iSkyLIMS_wetlab/css/styles/kimbie.light.css new file mode 100644 index 0000000..04ff6ed --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/kimbie.light.css @@ -0,0 +1,74 @@ +/* + Name: Kimbie (light) + Author: Jan T. Sott + License: Creative Commons Attribution-ShareAlike 4.0 Unported License + URL: https://github.com/idleberg/Kimbie-highlight.js +*/ + +/* Kimbie Comment */ +.hljs-comment, +.hljs-quote { + color: #a57a4c; +} + +/* Kimbie Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-meta { + color: #dc3958; +} + +/* Kimbie Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion, +.hljs-link { + color: #f79a32; +} + +/* Kimbie Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #f06431; +} + +/* Kimbie Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #889b4a; +} + +/* Kimbie Purple */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-function { + color: #98676a; +} + +.hljs { + display: block; + overflow-x: auto; + background: #fbebd4; + color: #84613d; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/lightfair.css b/static/iSkyLIMS_wetlab/css/styles/lightfair.css new file mode 100644 index 0000000..a247c8e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/lightfair.css @@ -0,0 +1,87 @@ +/* + +Lightfair style (c) Tristian Kelly + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; +} + +.hljs-name { + color:#01a3a3; +} + +.hljs-tag,.hljs-meta { + color:#778899; +} + +.hljs, +.hljs-subst { + color: #444 +} + +.hljs-comment { + color: #888888 +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold +} + +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #4286f4 +} + +.hljs-title, +.hljs-section { + color: #4286f4; + font-weight: bold +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060 +} + +.hljs-literal { + color: #62bcbc +} + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #25c6c6 +} + +.hljs-meta-string { + color: #4d99bf +} + +.hljs-emphasis { + font-style: italic +} + +.hljs-strong { + font-weight: bold +} diff --git a/static/iSkyLIMS_wetlab/css/styles/magula.css b/static/iSkyLIMS_wetlab/css/styles/magula.css new file mode 100644 index 0000000..44dee5e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/magula.css @@ -0,0 +1,70 @@ +/* +Description: Magula style for highligh.js +Author: Ruslan Keba +Website: http://rukeba.com/ +Version: 1.0 +Date: 2009-01-03 +Music: Aphex Twin / Xtal +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background-color: #f4f4f4; +} + +.hljs, +.hljs-subst { + color: black; +} + +.hljs-string, +.hljs-title, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #050; +} + +.hljs-comment, +.hljs-quote { + color: #777; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-type, +.hljs-link { + color: #800; +} + +.hljs-deletion, +.hljs-meta { + color: #00e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-tag, +.hljs-name { + font-weight: bold; + color: navy; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/mono-blue.css b/static/iSkyLIMS_wetlab/css/styles/mono-blue.css new file mode 100644 index 0000000..884c97c --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/mono-blue.css @@ -0,0 +1,59 @@ +/* + Five-color theme from a single blue hue. +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #eaeef3; +} + +.hljs { + color: #00193a; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-comment { + color: #738191; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-literal, +.hljs-type, +.hljs-addition, +.hljs-tag, +.hljs-quote, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #0048ab; +} + +.hljs-meta, +.hljs-subst, +.hljs-symbol, +.hljs-regexp, +.hljs-attribute, +.hljs-deletion, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-bullet { + color: #4c81c9; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/monokai-sublime.css b/static/iSkyLIMS_wetlab/css/styles/monokai-sublime.css new file mode 100644 index 0000000..2864170 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/monokai-sublime.css @@ -0,0 +1,83 @@ +/* + +Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #23241f; +} + +.hljs, +.hljs-tag, +.hljs-subst { + color: #f8f8f2; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-link { + color: #ae81ff; +} + +.hljs-code, +.hljs-title, +.hljs-section, +.hljs-selector-class { + color: #a6e22e; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-name, +.hljs-attr { + color: #f92672; +} + +.hljs-symbol, +.hljs-attribute { + color: #66d9ef; +} + +.hljs-params, +.hljs-class .hljs-title { + color: #f8f8f2; +} + +.hljs-string, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-variable { + color: #e6db74; +} + +.hljs-comment, +.hljs-deletion, +.hljs-meta { + color: #75715e; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/monokai.css b/static/iSkyLIMS_wetlab/css/styles/monokai.css new file mode 100644 index 0000000..775d53f --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/monokai.css @@ -0,0 +1,70 @@ +/* +Monokai style - ported by Luigi Maselli - http://grigio.org +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #272822; color: #ddd; +} + +.hljs-tag, +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-strong, +.hljs-name { + color: #f92672; +} + +.hljs-code { + color: #66d9ef; +} + +.hljs-class .hljs-title { + color: white; +} + +.hljs-attribute, +.hljs-symbol, +.hljs-regexp, +.hljs-link { + color: #bf79db; +} + +.hljs-string, +.hljs-bullet, +.hljs-subst, +.hljs-title, +.hljs-section, +.hljs-emphasis, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #a6e22e; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #75715e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-selector-id { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/nord.css b/static/iSkyLIMS_wetlab/css/styles/nord.css new file mode 100644 index 0000000..4240384 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/nord.css @@ -0,0 +1,309 @@ +/* + * Copyright (c) 2017-present Arctic Ice Studio + * Copyright (c) 2017-present Sven Greb + * + * Project: Nord highlight.js + * Version: 0.1.0 + * Repository: https://github.com/arcticicestudio/nord-highlightjs + * License: MIT + * References: + * https://github.com/arcticicestudio/nord + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #2E3440; +} + +.hljs, +.hljs-subst { + color: #D8DEE9; +} + +.hljs-selector-tag { + color: #81A1C1; +} + +.hljs-selector-id { + color: #8FBCBB; + font-weight: bold; +} + +.hljs-selector-class { + color: #8FBCBB; +} + +.hljs-selector-attr { + color: #8FBCBB; +} + +.hljs-selector-pseudo { + color: #88C0D0; +} + +.hljs-addition { + background-color: rgba(163, 190, 140, 0.5); +} + +.hljs-deletion { + background-color: rgba(191, 97, 106, 0.5); +} + +.hljs-built_in, +.hljs-type { + color: #8FBCBB; +} + +.hljs-class { + color: #8FBCBB; +} + +.hljs-function { + color: #88C0D0; +} + +.hljs-function > .hljs-title { + color: #88C0D0; +} + +.hljs-keyword, +.hljs-literal, +.hljs-symbol { + color: #81A1C1; +} + +.hljs-number { + color: #B48EAD; +} + +.hljs-regexp { + color: #EBCB8B; +} + +.hljs-string { + color: #A3BE8C; +} + +.hljs-title { + color: #8FBCBB; +} + +.hljs-params { + color: #D8DEE9; +} + +.hljs-bullet { + color: #81A1C1; +} + +.hljs-code { + color: #8FBCBB; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-formula { + color: #8FBCBB; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link:hover { + text-decoration: underline; +} + +.hljs-quote { + color: #4C566A; +} + +.hljs-comment { + color: #4C566A; +} + +.hljs-doctag { + color: #8FBCBB; +} + +.hljs-meta, +.hljs-meta-keyword { + color: #5E81AC; +} + +.hljs-meta-string { + color: #A3BE8C; +} + +.hljs-attr { + color: #8FBCBB; +} + +.hljs-attribute { + color: #D8DEE9; +} + +.hljs-builtin-name { + color: #81A1C1; +} + +.hljs-name { + color: #81A1C1; +} + +.hljs-section { + color: #88C0D0; +} + +.hljs-tag { + color: #81A1C1; +} + +.hljs-variable { + color: #D8DEE9; +} + +.hljs-template-variable { + color: #D8DEE9; +} + +.hljs-template-tag { + color: #5E81AC; +} + +.abnf .hljs-attribute { + color: #88C0D0; +} + +.abnf .hljs-symbol { + color: #EBCB8B; +} + +.apache .hljs-attribute { + color: #88C0D0; +} + +.apache .hljs-section { + color: #81A1C1; +} + +.arduino .hljs-built_in { + color: #88C0D0; +} + +.aspectj .hljs-meta { + color: #D08770; +} + +.aspectj > .hljs-title { + color: #88C0D0; +} + +.bnf .hljs-attribute { + color: #8FBCBB; +} + +.clojure .hljs-name { + color: #88C0D0; +} + +.clojure .hljs-symbol { + color: #EBCB8B; +} + +.coq .hljs-built_in { + color: #88C0D0; +} + +.cpp .hljs-meta-string { + color: #8FBCBB; +} + +.css .hljs-built_in { + color: #88C0D0; +} + +.css .hljs-keyword { + color: #D08770; +} + +.diff .hljs-meta { + color: #8FBCBB; +} + +.ebnf .hljs-attribute { + color: #8FBCBB; +} + +.glsl .hljs-built_in { + color: #88C0D0; +} + +.groovy .hljs-meta:not(:first-child) { + color: #D08770; +} + +.haxe .hljs-meta { + color: #D08770; +} + +.java .hljs-meta { + color: #D08770; +} + +.ldif .hljs-attribute { + color: #8FBCBB; +} + +.lisp .hljs-name { + color: #88C0D0; +} + +.lua .hljs-built_in { + color: #88C0D0; +} + +.moonscript .hljs-built_in { + color: #88C0D0; +} + +.nginx .hljs-attribute { + color: #88C0D0; +} + +.nginx .hljs-section { + color: #5E81AC; +} + +.pf .hljs-built_in { + color: #88C0D0; +} + +.processing .hljs-built_in { + color: #88C0D0; +} + +.scss .hljs-keyword { + color: #81A1C1; +} + +.stylus .hljs-keyword { + color: #81A1C1; +} + +.swift .hljs-meta { + color: #D08770; +} + +.vim .hljs-built_in { + color: #88C0D0; + font-style: italic; +} + +.yaml .hljs-meta { + color: #D08770; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/obsidian.css b/static/iSkyLIMS_wetlab/css/styles/obsidian.css new file mode 100644 index 0000000..356630f --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/obsidian.css @@ -0,0 +1,88 @@ +/** + * Obsidian style + * ported by Alexander Marenin (http://github.com/ioncreature) + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282b2e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-selector-id { + color: #93c763; +} + +.hljs-number { + color: #ffcd22; +} + +.hljs { + color: #e0e2e4; +} + +.hljs-attribute { + color: #668bb0; +} + +.hljs-code, +.hljs-class .hljs-title, +.hljs-section { + color: white; +} + +.hljs-regexp, +.hljs-link { + color: #d39745; +} + +.hljs-meta { + color: #557182; +} + +.hljs-tag, +.hljs-name, +.hljs-bullet, +.hljs-subst, +.hljs-emphasis, +.hljs-type, +.hljs-built_in, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #8cbbad; +} + +.hljs-string, +.hljs-symbol { + color: #ec7600; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion { + color: #818e96; +} + +.hljs-selector-class { + color: #A082BD +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/ocean.css b/static/iSkyLIMS_wetlab/css/styles/ocean.css new file mode 100644 index 0000000..5901581 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/ocean.css @@ -0,0 +1,74 @@ +/* Ocean Dark Theme */ +/* https://github.com/gavsiu */ +/* Original theme - https://github.com/chriskempson/base16 */ + +/* Ocean Comment */ +.hljs-comment, +.hljs-quote { + color: #65737e; +} + +/* Ocean Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #bf616a; +} + +/* Ocean Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #d08770; +} + +/* Ocean Yellow */ +.hljs-attribute { + color: #ebcb8b; +} + +/* Ocean Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #a3be8c; +} + +/* Ocean Blue */ +.hljs-title, +.hljs-section { + color: #8fa1b3; +} + +/* Ocean Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b48ead; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2b303b; + color: #c0c5ce; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/paraiso-dark.css b/static/iSkyLIMS_wetlab/css/styles/paraiso-dark.css new file mode 100644 index 0000000..e729240 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/paraiso-dark.css @@ -0,0 +1,72 @@ +/* + Paraíso (dark) + Created by Jan T. Sott (http://github.com/idleberg) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) +*/ + +/* Paraíso Comment */ +.hljs-comment, +.hljs-quote { + color: #8d8687; +} + +/* Paraíso Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-meta { + color: #ef6155; +} + +/* Paraíso Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion { + color: #f99b15; +} + +/* Paraíso Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #fec418; +} + +/* Paraíso Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #48b685; +} + +/* Paraíso Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #815ba4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2f1e2e; + color: #a39e9b; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/paraiso-light.css b/static/iSkyLIMS_wetlab/css/styles/paraiso-light.css new file mode 100644 index 0000000..944857c --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/paraiso-light.css @@ -0,0 +1,72 @@ +/* + Paraíso (light) + Created by Jan T. Sott (http://github.com/idleberg) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) +*/ + +/* Paraíso Comment */ +.hljs-comment, +.hljs-quote { + color: #776e71; +} + +/* Paraíso Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-meta { + color: #ef6155; +} + +/* Paraíso Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion { + color: #f99b15; +} + +/* Paraíso Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #fec418; +} + +/* Paraíso Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #48b685; +} + +/* Paraíso Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #815ba4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #e7e9db; + color: #4f424c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/pojoaque.css b/static/iSkyLIMS_wetlab/css/styles/pojoaque.css new file mode 100644 index 0000000..2e07847 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/pojoaque.css @@ -0,0 +1,83 @@ +/* + +Pojoaque Style by Jason Tate +http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html +Based on Solarized Style from http://ethanschoonover.com/solarized + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #dccf8f; + background: url(./pojoaque.jpg) repeat scroll left top #181914; +} + +.hljs-comment, +.hljs-quote { + color: #586e75; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-addition { + color: #b64926; +} + +.hljs-number, +.hljs-string, +.hljs-doctag, +.hljs-regexp { + color: #468966; +} + +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-name { + color: #ffb03b; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type, +.hljs-tag { + color: #b58900; +} + +.hljs-attribute { + color: #b89859; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-subst, +.hljs-meta { + color: #cb4b16; +} + +.hljs-deletion { + color: #dc322f; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #d3a60c; +} + +.hljs-formula { + background: #073642; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/pojoaque.jpg b/static/iSkyLIMS_wetlab/css/styles/pojoaque.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c07d4ab40b6d77e90ff69f0012bcd33b21d31c3 GIT binary patch literal 1186 zcmZXSe^8Tk9LK-kXFs3)f@f?)Cddzw3v4wdZyXQ;4x3=;Ja*N#%n9ik!UGmt9H3k0 zJST|5jOc(ID$FQt3C?jQZBws#kXolO1lg9Pba9BB=Q+UEBX!nY@6Uhl&+ofe$Q$y5 z@ci`~)&qzDP(lOiQ5p?p z(`j^e7!yUAVHk%K#^GQXn?s0=VLYCI$HRoe=xCuZ>A6A3@sxEP#XqNFpIb=0)KQ#Nss_tD17;m4@$JKL;LR|K|QF3f%!L5+s(9Ft8SQ zG|~pGpEGFW5Z|OA)-O@mNHy-g@7m8JTf?kl@vUKBGmw)Y*9sDRNr3PN!IKefWaydTe1D zjzpyzPnD3}hBNaS4aFX7=0&~I*Hu7#4au@qVBglH#-m;QFOx_`=j z{EqRY#Eh*yoWP^pa4H>8GH{rO?!_+xwL0(k4yL^D%^nBkJ*UI;Lx;ped8d|f*S_s@ z3~ilcRC(&NT#9Gn#UD;o^EYSMXDMf%XcUi3>;WXXD-QX3P9wMyP7eA&RS{)h5{??W3^Rq=goFJ>?lA~J- zdYe>!xvYLW*fPT0RK7wsJRg^?x#W1*GP9_f`6t>QD_X>0d!owyN>nO2?U5}|3?hX_UZYT@^>S!9eB~bZ9U`q;`U)@L670o1g z`Hd}h<_WRvUc|n*%v4Hbb-4tJD40iyF^q%g*&!6>hkYDvi-{Uc4yTM zzcthN4Z{ka!+F_KzYV#yWi;c^X^q6g`pD8cp?$Kl?hCz0s^a|mH%P!CF%*<6k^~i` zT5Mi-t5-frUcHkk^Qh}+N)Kz1&Bi95`oNc|quI>tUi~BY>xcF9(%tv2i{G6kE9*q~ qCoAGl20`)w0rdgp9H%Q=M5|p`hOhFz6$I%Y&ncY8>c?7PXyh+SL&XXJ literal 0 HcmV?d00001 diff --git a/static/iSkyLIMS_wetlab/css/styles/purebasic.css b/static/iSkyLIMS_wetlab/css/styles/purebasic.css new file mode 100644 index 0000000..5ce9b9e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/purebasic.css @@ -0,0 +1,96 @@ +/* + +PureBASIC native IDE style ( version 1.0 - April 2016 ) + +by Tristano Ajmone + +Public Domain + +NOTE_1: PureBASIC code syntax highlighting only applies the following classes: + .hljs-comment + .hljs-function + .hljs-keywords + .hljs-string + .hljs-symbol + + Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style. + If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by + a "--- used for PureBASIC ... ---" comment on same line. + +NOTE_2: Color names provided in comments were derived using "Name that Color" online tool: + http://chir.ag/projects/name-that-color +*/ + +.hljs { /* Common set of rules required by highlight.js (don'r remove!) */ + display: block; + overflow-x: auto; + padding: 0.5em; + background: #FFFFDF; /* Half and Half (approx.) */ +/* --- Uncomment to add PureBASIC native IDE styled font! + font-family: Consolas; +*/ +} + +.hljs, /* --- used for PureBASIC base color --- */ +.hljs-type, /* --- used for PureBASIC Procedures return type --- */ +.hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */ +.hljs-name, +.hljs-number, +.hljs-attr, +.hljs-params, +.hljs-subst { + color: #000000; /* Black */ +} + +.hljs-comment, /* --- used for PureBASIC Comments --- */ +.hljs-regexp, +.hljs-section, +.hljs-selector-pseudo, +.hljs-addition { + color: #00AAAA; /* Persian Green (approx.) */ +} + +.hljs-title, /* --- used for PureBASIC Procedures Names --- */ +.hljs-tag, +.hljs-variable, +.hljs-code { + color: #006666; /* Blue Stone (approx.) */ +} + +.hljs-keyword, /* --- used for PureBASIC Keywords --- */ +.hljs-class, +.hljs-meta-keyword, +.hljs-selector-class, +.hljs-built_in, +.hljs-builtin-name { + color: #006666; /* Blue Stone (approx.) */ + font-weight: bold; +} + +.hljs-string, /* --- used for PureBASIC Strings --- */ +.hljs-selector-attr { + color: #0080FF; /* Azure Radiance (approx.) */ +} + +.hljs-symbol, /* --- used for PureBASIC Constants --- */ +.hljs-link, +.hljs-deletion, +.hljs-attribute { + color: #924B72; /* Cannon Pink (approx.) */ +} + +.hljs-meta, +.hljs-literal, +.hljs-selector-id { + color: #924B72; /* Cannon Pink (approx.) */ + font-weight: bold; +} + +.hljs-strong, +.hljs-name { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/qtcreator_dark.css b/static/iSkyLIMS_wetlab/css/styles/qtcreator_dark.css new file mode 100644 index 0000000..7aa56a3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/qtcreator_dark.css @@ -0,0 +1,83 @@ +/* + +Qt Creator dark color scheme + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000000; +} + +.hljs, +.hljs-subst, +.hljs-tag, +.hljs-title { + color: #aaaaaa; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #ff55ff; +} + +.hljs-code +.hljs-selector-class { + color: #aaaaff; +} + +.hljs-emphasis, +.hljs-stronge, +.hljs-type { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-function, +.hljs-section, +.hljs-symbol, +.hljs-name { + color: #ffff55; +} + +.hljs-attribute { + color: #ff5555; +} + +.hljs-variable, +.hljs-params, +.hljs-class .hljs-title { + color: #8888ff; +} + +.hljs-string, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition, +.hljs-link { + color: #ff55ff; +} + +.hljs-comment, +.hljs-meta, +.hljs-deletion { + color: #55ffff; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/qtcreator_light.css b/static/iSkyLIMS_wetlab/css/styles/qtcreator_light.css new file mode 100644 index 0000000..1efa2c6 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/qtcreator_light.css @@ -0,0 +1,83 @@ +/* + +Qt Creator light color scheme + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #ffffff; +} + +.hljs, +.hljs-subst, +.hljs-tag, +.hljs-title { + color: #000000; +} + +.hljs-strong, +.hljs-emphasis { + color: #000000; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #000080; +} + +.hljs-code +.hljs-selector-class { + color: #800080; +} + +.hljs-emphasis, +.hljs-stronge, +.hljs-type { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-function, +.hljs-section, +.hljs-symbol, +.hljs-name { + color: #808000; +} + +.hljs-attribute { + color: #800000; +} + +.hljs-variable, +.hljs-params, +.hljs-class .hljs-title { + color: #0055AF; +} + +.hljs-string, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition, +.hljs-link { + color: #008000; +} + +.hljs-comment, +.hljs-meta, +.hljs-deletion { + color: #008000; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/railscasts.css b/static/iSkyLIMS_wetlab/css/styles/railscasts.css new file mode 100644 index 0000000..008cdc5 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/railscasts.css @@ -0,0 +1,106 @@ +/* + +Railscasts-like style (c) Visoft, Inc. (Damien White) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #232323; + color: #e6e1dc; +} + +.hljs-comment, +.hljs-quote { + color: #bc9458; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag { + color: #c26230; +} + +.hljs-string, +.hljs-number, +.hljs-regexp, +.hljs-variable, +.hljs-template-variable { + color: #a5c261; +} + +.hljs-subst { + color: #519f50; +} + +.hljs-tag, +.hljs-name { + color: #e8bf6a; +} + +.hljs-type { + color: #da4939; +} + + +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-builtin-name, +.hljs-attr, +.hljs-link { + color: #6d9cbe; +} + +.hljs-params { + color: #d0d0ff; +} + +.hljs-attribute { + color: #cda869; +} + +.hljs-meta { + color: #9b859d; +} + +.hljs-title, +.hljs-section { + color: #ffc66d; +} + +.hljs-addition { + background-color: #144212; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #600; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-selector-class { + color: #9b703f; +} + +.hljs-selector-id { + color: #8b98ab; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/rainbow.css b/static/iSkyLIMS_wetlab/css/styles/rainbow.css new file mode 100644 index 0000000..905eb8e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/rainbow.css @@ -0,0 +1,85 @@ +/* + +Style with support for rainbow parens + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #474949; + color: #d1d9e1; +} + + +.hljs-comment, +.hljs-quote { + color: #969896; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-type, +.hljs-addition { + color: #cc99cc; +} + +.hljs-number, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #f99157; +} + +.hljs-string, +.hljs-doctag, +.hljs-regexp { + color: #8abeb7; +} + +.hljs-title, +.hljs-name, +.hljs-section, +.hljs-built_in { + color: #b5bd68; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-selector-id, +.hljs-class .hljs-title { + color: #ffcc66; +} + +.hljs-section, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-link { + color: #f99157; +} + +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #eee8d5; +} + +.hljs-attr, +.hljs-attribute { + color: #81a2be; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/routeros.css b/static/iSkyLIMS_wetlab/css/styles/routeros.css new file mode 100644 index 0000000..ebe2399 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/routeros.css @@ -0,0 +1,108 @@ +/* + + highlight.js style for Microtik RouterOS script + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; +} + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #444; +} + +.hljs-comment { + color: #888888; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; +} + +.hljs-attribute { + color: #0E9A00; +} + +.hljs-function { + color: #99069A; +} + +.hljs-builtin-name { + color: #99069A; +} + +/* User color: hue: 0 */ + +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; +} + + +/* Language color: hue: 90; */ + +.hljs-literal { + color: #78A960; +} + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #0C9A9A; +} + + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/school-book.css b/static/iSkyLIMS_wetlab/css/styles/school-book.css new file mode 100644 index 0000000..964b51d --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/school-book.css @@ -0,0 +1,72 @@ +/* + +School Book style from goldblog.com.ua (c) Zaripov Yura + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 15px 0.5em 0.5em 30px; + font-size: 11px; + line-height:16px; +} + +pre{ + background:#f6f6ae url(./school-book.png); + border-top: solid 2px #d2e8b9; + border-bottom: solid 1px #d2e8b9; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color:#005599; + font-weight:bold; +} + +.hljs, +.hljs-subst { + color: #3e5915; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute, +.hljs-built_in, +.hljs-builtin-name, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable, +.hljs-link { + color: #2c009f; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #e60415; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-selector-id, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/school-book.png b/static/iSkyLIMS_wetlab/css/styles/school-book.png new file mode 100644 index 0000000000000000000000000000000000000000..956e9790a0e2c079b3d568348ff3accd1d9cac30 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yV7?7x3vjRjNjAS6Ga$v1?&#~tz_9*=IcwKTAYZb? zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|R4)r;B4q#jQ7Ycl#YS5MfK$ z?b^fh#qmaEhFDxvyThwfhdfkOPApt1lr{NA;Vr%uzxJuVIyzm(ed_8_-0$LLU})H&o5Re&aDemE>EG#(|F^t9_pa-H z_Mf?rMVrs}-M?S|?ZdY@c6s41zy8~}@a{v&#Ea7V)wJ$+#K|u$5UvWCdFLwGac}6w{_s*=8A6L7Rfc|9gboFyt I=akR{0OLZ+qyPW_ literal 0 HcmV?d00001 diff --git a/static/iSkyLIMS_wetlab/css/styles/shades-of-purple.css b/static/iSkyLIMS_wetlab/css/styles/shades-of-purple.css new file mode 100644 index 0000000..c0e899e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/shades-of-purple.css @@ -0,0 +1,97 @@ +/** + * Shades of Purple Theme — for Highlightjs. + * + * @author (c) Ahmad Awais + * @link GitHub Repo → https://github.com/ahmadawais/Shades-of-Purple-HighlightJS + * @version 1.5.0 + */ + +.hljs { + display: block; + overflow-x: auto; + /* Custom font is optional */ + /* font-family: 'Operator Mono', 'Fira Code', 'Menlo', 'Monaco', 'Courier New', 'monospace'; */ + line-height: 1.45; + padding: 2rem; + background: #2d2b57; + font-weight: normal; +} + +.hljs-title { + color: #fad000; + font-weight: normal; +} + +.hljs-name { + color: #a1feff; +} + +.hljs-tag { + color: #ffffff; +} + +.hljs-attr { + color: #f8d000; + font-style: italic; +} + +.hljs-built_in, +.hljs-selector-tag, +.hljs-section { + color: #fb9e00; +} + +.hljs-keyword { + color: #fb9e00; +} + +.hljs, +.hljs-subst { + color: #e3dfff; +} + +.hljs-string, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-addition, +.hljs-code, +.hljs-regexp, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-template-tag, +.hljs-quote, +.hljs-deletion { + color: #4cd213; +} + +.hljs-meta, +.hljs-meta-string { + color: #fb9e00; +} + +.hljs-comment { + color: #ac65ff; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-name, +.hljs-strong { + font-weight: normal; +} + +.hljs-literal, +.hljs-number { + color: #fa658d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/solarized-dark.css b/static/iSkyLIMS_wetlab/css/styles/solarized-dark.css new file mode 100644 index 0000000..b4c0da1 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/solarized-dark.css @@ -0,0 +1,84 @@ +/* + +Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #002b36; + color: #839496; +} + +.hljs-comment, +.hljs-quote { + color: #586e75; +} + +/* Solarized Green */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #859900; +} + +/* Solarized Cyan */ +.hljs-number, +.hljs-string, +.hljs-meta .hljs-meta-string, +.hljs-literal, +.hljs-doctag, +.hljs-regexp { + color: #2aa198; +} + +/* Solarized Blue */ +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #268bd2; +} + +/* Solarized Yellow */ +.hljs-attribute, +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type { + color: #b58900; +} + +/* Solarized Orange */ +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-meta .hljs-keyword, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-link { + color: #cb4b16; +} + +/* Solarized Red */ +.hljs-built_in, +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #073642; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/solarized-light.css b/static/iSkyLIMS_wetlab/css/styles/solarized-light.css new file mode 100644 index 0000000..fdcfcc7 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/solarized-light.css @@ -0,0 +1,84 @@ +/* + +Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fdf6e3; + color: #657b83; +} + +.hljs-comment, +.hljs-quote { + color: #93a1a1; +} + +/* Solarized Green */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #859900; +} + +/* Solarized Cyan */ +.hljs-number, +.hljs-string, +.hljs-meta .hljs-meta-string, +.hljs-literal, +.hljs-doctag, +.hljs-regexp { + color: #2aa198; +} + +/* Solarized Blue */ +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #268bd2; +} + +/* Solarized Yellow */ +.hljs-attribute, +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type { + color: #b58900; +} + +/* Solarized Orange */ +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-meta .hljs-keyword, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-link { + color: #cb4b16; +} + +/* Solarized Red */ +.hljs-built_in, +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #eee8d5; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/sunburst.css b/static/iSkyLIMS_wetlab/css/styles/sunburst.css new file mode 100644 index 0000000..f56dd5e --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/sunburst.css @@ -0,0 +1,102 @@ +/* + +Sunburst-like style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000; + color: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #aeaeae; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #e28964; +} + +.hljs-string { + color: #65b042; +} + +.hljs-subst { + color: #daefa3; +} + +.hljs-regexp, +.hljs-link { + color: #e9c062; +} + +.hljs-title, +.hljs-section, +.hljs-tag, +.hljs-name { + color: #89bdff; +} + +.hljs-class .hljs-title, +.hljs-doctag { + text-decoration: underline; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-number { + color: #3387cc; +} + +.hljs-params, +.hljs-variable, +.hljs-template-variable { + color: #3e87e3; +} + +.hljs-attribute { + color: #cda869; +} + +.hljs-meta { + color: #8996a8; +} + +.hljs-formula { + background-color: #0e2231; + color: #f8f8f8; + font-style: italic; +} + +.hljs-addition { + background-color: #253b22; + color: #f8f8f8; +} + +.hljs-deletion { + background-color: #420e09; + color: #f8f8f8; +} + +.hljs-selector-class { + color: #9b703f; +} + +.hljs-selector-id { + color: #8b98ab; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-blue.css b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-blue.css new file mode 100644 index 0000000..78e59cc --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-blue.css @@ -0,0 +1,75 @@ +/* Tomorrow Night Blue Theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #7285b7; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #ff9da4; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #ffc58f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #ffeead; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #d1f1a9; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #bbdaff; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ebbbff; +} + +.hljs { + display: block; + overflow-x: auto; + background: #002451; + color: white; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-bright.css b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-bright.css new file mode 100644 index 0000000..e05af8a --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-bright.css @@ -0,0 +1,74 @@ +/* Tomorrow Night Bright Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #d54e53; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #e78c45; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #e7c547; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #b9ca4a; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #7aa6da; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #c397d8; +} + +.hljs { + display: block; + overflow-x: auto; + background: black; + color: #eaeaea; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-eighties.css b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-eighties.css new file mode 100644 index 0000000..08fd51c --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night-eighties.css @@ -0,0 +1,74 @@ +/* Tomorrow Night Eighties Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #999999; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #f2777a; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f99157; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #ffcc66; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #99cc99; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #6699cc; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #cc99cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2d2d2d; + color: #cccccc; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/tomorrow-night.css b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night.css new file mode 100644 index 0000000..ddd270a --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/tomorrow-night.css @@ -0,0 +1,75 @@ +/* Tomorrow Night Theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #de935f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #b5bd68; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/tomorrow.css b/static/iSkyLIMS_wetlab/css/styles/tomorrow.css new file mode 100644 index 0000000..026a62f --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/tomorrow.css @@ -0,0 +1,72 @@ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #8e908c; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #c82829; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f5871f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #eab700; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #718c00; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #4271ae; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8959a8; +} + +.hljs { + display: block; + overflow-x: auto; + background: white; + color: #4d4d4c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/vs.css b/static/iSkyLIMS_wetlab/css/styles/vs.css new file mode 100644 index 0000000..c5d07d3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/vs.css @@ -0,0 +1,68 @@ +/* + +Visual Studio-like style based on original C# coloring by Jason Diamond + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote, +.hljs-variable { + color: #008000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: #00f; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: #a31515; +} + +.hljs-deletion, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-meta { + color: #2b91af; +} + +.hljs-doctag { + color: #808080; +} + +.hljs-attr { + color: #f00; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #00b0e8; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/vs2015.css b/static/iSkyLIMS_wetlab/css/styles/vs2015.css new file mode 100644 index 0000000..d1d9be3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/vs2015.css @@ -0,0 +1,115 @@ +/* + * Visual Studio 2015 dark style + * Author: Nicolas LLOBERA + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #1E1E1E; + color: #DCDCDC; +} + +.hljs-keyword, +.hljs-literal, +.hljs-symbol, +.hljs-name { + color: #569CD6; +} +.hljs-link { + color: #569CD6; + text-decoration: underline; +} + +.hljs-built_in, +.hljs-type { + color: #4EC9B0; +} + +.hljs-number, +.hljs-class { + color: #B8D7A3; +} + +.hljs-string, +.hljs-meta-string { + color: #D69D85; +} + +.hljs-regexp, +.hljs-template-tag { + color: #9A5334; +} + +.hljs-subst, +.hljs-function, +.hljs-title, +.hljs-params, +.hljs-formula { + color: #DCDCDC; +} + +.hljs-comment, +.hljs-quote { + color: #57A64A; + font-style: italic; +} + +.hljs-doctag { + color: #608B4E; +} + +.hljs-meta, +.hljs-meta-keyword, +.hljs-tag { + color: #9B9B9B; +} + +.hljs-variable, +.hljs-template-variable { + color: #BD63C5; +} + +.hljs-attr, +.hljs-attribute, +.hljs-builtin-name { + color: #9CDCFE; +} + +.hljs-section { + color: gold; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +/*.hljs-code { + font-family:'Monospace'; +}*/ + +.hljs-bullet, +.hljs-selector-tag, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #D7BA7D; +} + +.hljs-addition { + background-color: #144212; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #600; + display: inline-block; + width: 100%; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/xcode.css b/static/iSkyLIMS_wetlab/css/styles/xcode.css new file mode 100644 index 0000000..b305665 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/xcode.css @@ -0,0 +1,104 @@ +/* + +XCode style (c) Angel Garcia + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fff; + color: black; +} + +/* Gray DOCTYPE selectors like WebKit */ +.xml .hljs-meta { + color: #c0c0c0; +} + +.hljs-comment, +.hljs-quote { + color: #007400; +} + +.hljs-tag, +.hljs-attribute, +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-name { + color: #aa0d91; +} + +.hljs-variable, +.hljs-template-variable { + color: #3F6E74; +} + +.hljs-code, +.hljs-string, +.hljs-meta-string { + color: #c41a16; +} + +.hljs-regexp, +.hljs-link { + color: #0E0EFF; +} + +.hljs-title, +.hljs-symbol, +.hljs-bullet, +.hljs-number { + color: #1c00cf; +} + +.hljs-section, +.hljs-meta { + color: #643820; +} + + +.hljs-class .hljs-title, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-params { + color: #5c2699; +} + +.hljs-attr { + color: #836C28; +} + +.hljs-subst { + color: #000; +} + +.hljs-formula { + background-color: #eee; + font-style: italic; +} + +.hljs-addition { + background-color: #baeeba; +} + +.hljs-deletion { + background-color: #ffc8bd; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #9b703f; +} + +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/xt256.css b/static/iSkyLIMS_wetlab/css/styles/xt256.css new file mode 100644 index 0000000..3e35ad2 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/xt256.css @@ -0,0 +1,92 @@ + +/* + xt256.css + + Contact: initbar [at] protonmail [dot] ch + : github.com/initbar +*/ + +.hljs { + display: block; + overflow-x: auto; + color: #eaeaea; + background: #000; + padding: 0.5em; +} + +.hljs-subst { + color: #eaeaea; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-builtin-name, +.hljs-type { + color: #eaeaea; +} + +.hljs-params { + color: #da0000; +} + +.hljs-literal, +.hljs-number, +.hljs-name { + color: #ff0000; + font-weight: bolder; +} + +.hljs-comment { + color: #969896; +} + +.hljs-selector-id, +.hljs-quote { + color: #00ffff; +} + +.hljs-template-variable, +.hljs-variable, +.hljs-title { + color: #00ffff; + font-weight: bold; +} + +.hljs-selector-class, +.hljs-keyword, +.hljs-symbol { + color: #fff000; +} + +.hljs-string, +.hljs-bullet { + color: #00ff00; +} + +.hljs-tag, +.hljs-section { + color: #000fff; +} + +.hljs-selector-tag { + color: #000fff; + font-weight: bold; +} + +.hljs-attribute, +.hljs-built_in, +.hljs-regexp, +.hljs-link { + color: #ff00ff; +} + +.hljs-meta { + color: #fff; + font-weight: bolder; +} diff --git a/static/iSkyLIMS_wetlab/css/styles/zenburn.css b/static/iSkyLIMS_wetlab/css/styles/zenburn.css new file mode 100644 index 0000000..07be502 --- /dev/null +++ b/static/iSkyLIMS_wetlab/css/styles/zenburn.css @@ -0,0 +1,80 @@ +/* + +Zenburn style from voldmar.ru (c) Vladimir Epifanov +based on dark.css by Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #3f3f3f; + color: #dcdcdc; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-tag { + color: #e3ceab; +} + +.hljs-template-tag { + color: #dcdcdc; +} + +.hljs-number { + color: #8cd0d3; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute { + color: #efdcbc; +} + +.hljs-literal { + color: #efefaf; +} + +.hljs-subst { + color: #8f8f8f; +} + +.hljs-title, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-section, +.hljs-type { + color: #efef8f; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #dca3a3; +} + +.hljs-deletion, +.hljs-string, +.hljs-built_in, +.hljs-builtin-name { + color: #cc9393; +} + +.hljs-addition, +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #7f9f7f; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/static/iSkyLIMS_wetlab/js/highlight.pack.js b/static/iSkyLIMS_wetlab/js/highlight.pack.js new file mode 100644 index 0000000..5c967d3 --- /dev/null +++ b/static/iSkyLIMS_wetlab/js/highlight.pack.js @@ -0,0 +1,2 @@ +/*! highlight.js v9.15.6 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(a){var E=[],u=Object.keys,N={},g={},n=/^(no-?highlight|plain|text)$/i,R=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",relevance:"r",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},b="",h={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function _(e){return e.replace(/&/g,"&").replace(//g,">")}function d(e){return e.nodeName.toLowerCase()}function v(e,n){var t=e&&e.exec(n);return t&&0===t.index}function p(e){return n.test(e)}function l(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function M(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),d(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function i(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(i)}}function m(c){function s(e){return e&&e.source||e}function o(e,n){return new RegExp(s(e),"m"+(c.cI?"i":"")+(n?"g":""))}!function n(t,e){if(!t.compiled){if(t.compiled=!0,t.k=t.k||t.bK,t.k){var r={},a=function(t,e){c.cI&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n=e.split("|");r[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof t.k?a("keyword",t.k):u(t.k).forEach(function(e){a(e,t.k[e])}),t.k=r}t.lR=o(t.l||/\w+/,!0),e&&(t.bK&&(t.b="\\b("+t.bK.split(" ").join("|")+")\\b"),t.b||(t.b=/\B|\b/),t.bR=o(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\B|\b/),t.e&&(t.eR=o(t.e)),t.tE=s(t.e)||"",t.eW&&e.tE&&(t.tE+=(t.e?"|":"")+e.tE)),t.i&&(t.iR=o(t.i)),null==t.r&&(t.r=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return(n="self"===e?t:e).v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return l(n,{v:null},e)})),n.cached_variants||n.eW&&[l(n)]||[n];var n})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e);var i=t.c.map(function(e){return e.bK?"\\.?(?:"+e.b+")\\.?":e.b}).concat([t.tE,t.i]).map(s).filter(Boolean);t.t=i.length?o(function(e,n){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i')+n+(t?"":b)}function s(){g+=null!=E.sL?function(){var e="string"==typeof E.sL;if(e&&!N[E.sL])return _(R);var n=e?C(E.sL,R,!0,i[E.sL]):O(R,E.sL.length?E.sL:void 0);return 0")+'"');return R+=n,n.length||1}var f=S(e);if(!f)throw new Error('Unknown language: "'+e+'"');m(f);var a,E=t||f,i={},g="";for(a=E;a!==f;a=a.parent)a.cN&&(g=u(a.cN,"",!0)+g);var R="",d=0;try{for(var c,p,M=0;E.t.lastIndex=M,c=E.t.exec(n);)p=r(n.substring(M,c.index),c[0]),M=c.index+p;for(r(n.substr(M)),a=E;a.parent;a=a.parent)a.cN&&(g+=b);return{r:d,value:g,language:e,top:E}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:_(n)};throw e}}function O(t,e){e=e||h.languages||u(N);var r={r:0,value:_(t)},a=r;return e.filter(S).filter(s).forEach(function(e){var n=C(e,t,!1);n.language=e,n.r>a.r&&(a=n),n.r>r.r&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function B(e){return h.tabReplace||h.useBR?e.replace(t,function(e,n){return h.useBR&&"\n"===e?"
":h.tabReplace?n.replace(/\t/g,h.tabReplace):""}):e}function c(e){var n,t,r,a,i,c,o,u,s,l,f=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=R.exec(i))return S(t[1])?t[1]:"no-highlight";for(n=0,r=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,i=n.textContent,r=f?C(f,i,!0):O(i),(t=M(n)).length&&((a=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=r.value,r.value=function(e,n,t){var r=0,a="",i=[];function c(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){a+=""}function s(e){("start"===e.event?o:u)(e.node)}for(;e.length||n.length;){var l=c();if(a+=_(t.substring(r,l[0].offset)),r=l[0].offset,l===e){for(i.reverse().forEach(u);s(l.splice(0,1)[0]),(l=c())===e&&l.length&&l[0].offset===r;);i.reverse().forEach(o)}else"start"===l[0].event?i.push(l[0].node):i.pop(),s(l.splice(0,1)[0])}return a+_(t.substr(r))}(t,M(a),i)),r.value=B(r.value),e.innerHTML=r.value,e.className=(c=e.className,o=f,u=r.language,s=o?g[o]:u,l=[c.trim()],c.match(/\bhljs\b/)||l.push("hljs"),-1===c.indexOf(s)&&l.push(s),l.join(" ").trim()),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function o(){if(!o.called){o.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,c)}}function S(e){return e=(e||"").toLowerCase(),N[e]||N[g[e]]}function s(e){var n=S(e);return n&&!n.disableAutodetect}return a.highlight=C,a.highlightAuto=O,a.fixMarkup=B,a.highlightBlock=c,a.configure=function(e){h=l(h,e)},a.initHighlighting=o,a.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",o,!1),addEventListener("load",o,!1)},a.registerLanguage=function(n,e){var t=N[n]=e(a);i(t),t.aliases&&t.aliases.forEach(function(e){g[e]=n})},a.listLanguages=function(){return u(N)},a.getLanguage=S,a.autoDetection=s,a.inherit=l,a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",r:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,r:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,r:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,r:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,r:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,r:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,r:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,r:0},a});hljs.registerLanguage("properties",function(r){var t="[ \\t\\f]*",e="("+t+"[:=]"+t+"|[ \\t\\f]+)",s="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",n="([^\\\\:= \\t\\f\\n]|\\\\.)+",a={e:e,r:0,starts:{cN:"string",e:/$/,r:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[r.C("^\\s*[!#]","$"),{b:s+e,rB:!0,c:[{cN:"attr",b:s,endsParent:!0,r:0}],starts:a},{b:n+e,rB:!0,r:0,c:[{cN:"meta",b:n,endsParent:!0,r:0}],starts:a},{cN:"attr",r:0,b:n+t+"$"}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,c]},e.ASM,e.QSM]},i={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",b,i,a]};return c.c=[a,i,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,i,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("xml",function(s){var e={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},s.inherit(s.ASM,{i:null,cN:null,c:null,skip:!0}),s.inherit(s.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[e],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[e],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},e]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("css",function(e){var c={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,c]}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}}); \ No newline at end of file diff --git a/templates/iSkyLIMS_wetlab/ConfigurationTest.html b/templates/iSkyLIMS_wetlab/ConfigurationTest.html new file mode 100644 index 0000000..da695a7 --- /dev/null +++ b/templates/iSkyLIMS_wetlab/ConfigurationTest.html @@ -0,0 +1,705 @@ +{% extends 'iSkyLIMS_wetlab/base.html' %} +{% load static %} +{% block content %} + {% csrf_token %} + + + + + + + + + + +{% if test_results %} +
+
+
+

Wetlab configuration testing results

+
+
+
+ +
+
+
+

Wetlab configuration settings + {% if test_results.config_file %} + + {% else %} + + {% endif %} +

+
+
+
+ {% if test_results.config_file %} + +

+{% for line in test_results.config_file %}
+    {{ line }}
+{% endfor %}
+                            
+ {% else %} +

Unable to fetch the configuration file

+ {% endif %} +
+
+
+
+
+
+ + +
+
+
+

Wetlab folders/files permisions + {% if test_results.attr_files %} + + {% else %} + + {% endif %} +

+
+
+
+ {% if test_results.attr_files %} + {% for line in test_results.attr_files %} +

{{ line }}

+ {% endfor %} + {% else %} +

Unable to fetch the permision files

+ {% endif %} +
+
+
+ +
+
+
+ +
+
+
+

Database access + {% if test_results.database_access %} + + {% else %} + + {% endif %} +

+
+
+
+ {% if test_results.database_access %} +

Success to connect to database

+ {% else %} +

Unable to connect to database

+ {% endif %} +
+
+
+ +
+
+
+ +
+
+
+

Samba connection + {% if test_results.samba_connection %} + + {% else %} + + {% endif %} +

+
+
+
+ {% if test_results.samba_connection %} +

Success to connect via Samba

+ {% else %} +

Unable to connect via Samba

+ {% endif %} +
+
+
+ +
+
+
+ + + {% if test_results.basic_checks_ok or runNextSeq_results.basic_checks_ok or runMiSeq_results.basic_checks_ok %} +
+
+
+

Execute the test Run

+
+
+

Once the basic check test has been pass, you can execute the testing for NexSeq run

+
+ {% csrf_token %} + +
+ +
+
+
+
+
+

Once the basic check test has been pass, you can execute the testing for MiSeq run

+
+ {% csrf_token %} + +
+ +
+
+
+
+
+
+ {% endif %} + +{% elif runNextSeq_results %} +
+
+
+

Results execution for NextSeq test Run + {% if runNextSeq_results.completed_ok %} + + {% else %} + + {% endif %} +

+
+

Check below for the test performed for every state of the Run

+
+
+
+
+ +
+
+
+

Specific Test Cases for NextSeq Run

+
+
+
+

2. - Test Executed to create NextSeq Run + {% if runNextSeq_results.create_run_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.CreateRun %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ + {%if runNextSeq_results.Recorded %} +
+

1. - Test Executed on Recorded state + {% if runNextSeq_results.recorded_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Recorded %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ {% endif %} +
+ +
+ {%if runNextSeq_results.Sample_Sent %} +
+

2. - Test Executed on Sample Sent state + {% if runNextSeq_results.sample_sent_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Sample_Sent %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ {%endif %} + {% if unNextSeq_results.Processing_Run %} +
+

3. - Test Executed on Processing Run + {% if runNextSeq_results.processing_run_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Processing_Run %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ {% endif %} +
+
+
+
+
+ + +
+
+

Common Test Cases for Runs

+
+
+
+

4. - Test Executed on Processed Run state + {% if runNextSeq_results.processed_run_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Processed_Run %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ +
+

5. - Test Executed on Processing Bcl2fastq state + {% if runNextSeq_results.processing_bcl2fastq_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Processing_Bcl2fastq %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+ +
+
+

6. - Test Executed on Processed Bcl2fastq + {% if runNextSeq_results.processed_bcl2fast2_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runNextSeq_results.Processed_Bcl2fastq %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+
+
+
+ + + + + {% if log_trace %} +
+
+
+

Log file for MiSeq test

+
+ +
+ {% if log_trace %} + {% for line in log_trace %} +

{{ line }}

+ {% endfor %} + {% else %} +

Unable to fetch the log file

+ {% endif %} +
+
+
+
+
+ + {% endif %} + +
+
+
+

Test Options

+
+

Click on the "Re-Run NextSeq test" button . if you want to repeat the test

+
+ {% csrf_token %} + +
+ + + +
+
+
+
+
+ + + + + + + + + + + + + +{% elif runMiSeq_results %} +
+
+
+

Results execution for MiSeq test Run + {% if runMiSeq_results.completed_ok %} + + {% else %} + + {% endif %} +

+
+

Check below for the test performed for every state of the Run

+
+
+
+
+ +
+
+
+

Specific Test Cases for MiSeq Runs

+
+
+
+

1. - Test Executed on Recorded state + {% if runMiSeq_results.recorded_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Recorded %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+ +
+
+

2. - Test Executed on Sample Sent state + {% if runMiSeq_results.sample_sent_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Sample_Sent %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ +
+

3. - Test Executed on Processing Run + {% if runMiSeq_results.processing_run_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Processing_Run %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+
+
+
+
+ + +
+
+

Common Test Cases for Runs

+
+
+
+

4. - Test Executed on Processed Run state + {% if runMiSeq_results.processed_run_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Processed_Run %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+ +
+

5. - Test Executed on Processing Bcl2fastq state + {% if runMiSeq_results.processing_bcl2fastq_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Processing_Bcl2fastq %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+ +
+
+

6. - Test Executed on Processed Bcl2fastq + {% if runMiSeq_results.processed_bcl2fast2_ok %} + + {% else %} + + {% endif %} +

+
+ {% for test_case, result in runMiSeq_results.Processed_Bcl2fastq %} +

{{ test_case }} + {% if result == 'OK' %} + + {% else %} + + {% endif %} +

+ {% endfor %} +
+
+
+
+
+
+ + + + + {% if log_trace %} +
+
+
+

Log file for MiSeq test

+
+ +
+ {% if log_trace %} + {% for line in log_trace %} +

{{ line }}

+ {% endfor %} + {% else %} +

Unable to fetch the log file

+ {% endif %} +
+
+
+
+
+ + {% endif %} + +
+
+
+

Test Options

+
+

Click on the "Re-Run MiSeq test" button . if you want to repeat the test

+
+ {% csrf_token %} + +
+ + + +
+
+
+
+
+ + + +{% else %} + + +
+
+
+

Page for starting wetlab configuration testing

+
+
+ {% csrf_token %} + +
+

This is the test page to check the configuration settings defined in your installation.

+

The tests are divided into several parts to cover the run life, from recorded until the run is completed.

+
    +
  • Basic test cases. Where testing:
  • +
      +
    • Configuration files accesibility.
    • +
    • Samba connection to remote server
    • +
    • Database access
    • +
      +
    +
  • NextSeq run. Using a predefined NestSeq test run:
  • +
      +
    • Creation of the run in recorded state
    • +
    • Updating the run from recorded until completed
    • +
      + +
    +
  • NMiSeq run. Using a predefined MiSeq test run:
  • +
      +
    • Fetch the sample sheet to create the run in recorded state
    • +
    • Updating the run from recorded until completed
    • +
    +
+

Click on the "SUBMIT" button to start the testing

+
+ + +
+
+
+
+
+{% endif %} +{% endblock %} diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/logging_test_config.ini b/tests/logging_test_config.ini new file mode 100644 index 0000000..dd73e30 --- /dev/null +++ b/tests/logging_test_config.ini @@ -0,0 +1,20 @@ +[loggers] +keys=root + +[handlers] +keys=logfile + +[formatters] +keys=logfileformatter + +[logger_root] +level=DEBUG +handlers=logfile + +[formatter_logfileformatter] +format=%(asctime)s %(funcName)-12s %(levelname)-8s %(lineno)s %(message)s + +[handler_logfile] +class=handlers.RotatingFileHandler +args=('/srv/iSkyLIMS/logs/test_wetlab.log','a',500000,5) +formatter=logfileformatter diff --git a/urls.py b/urls.py index 651a4ee..d1ea66a 100644 --- a/urls.py +++ b/urls.py @@ -10,35 +10,34 @@ urlpatterns = [ path('',views.index, name = 'index'), + path('AddLibraryKit/',views.add_library_kit, name='add_library_kit'), + path('AddIndexLibrary', views.add_index_library, name = 'add_index_library'), + path('AnnualReport/',views.annual_report, name='annual_report'), + path('change_project_libKit=',views.change_project_libKit, name ='change_project_libKit'), + path('change_run_libKit=',views.change_run_libKit, name ='change_run_libKit'), + path('ChangeRunName=',views.change_run_name, name='change_run_name'), path('createNextSeqRun/', views.create_nextseq_run, name='create_nextseq_run'), + path('configurationTest/', views.configuration_test, name='configuration_test'), + path('DisplayIndexLibrary=/', views.display_index_library, name= 'display_index_library'), + path('displayProject=/', views.display_project, name='display_project'), + path('displayRun=/', views.display_run, name='display_run'), + path('displaySample=/', views.display_sample, name= 'display_sample'), path('latest_run/',views.latest_run, name='latest_run'), path('incompletedRuns', views.incompleted_runs, name = 'incompleted_runs'), - path('searchRun/', views.search_run, name='search_run'), - path('displayRun=/', views.display_run, name='display_run'), + path('MonthlyReport/', views.monthly_report, name='montly_report'), + path('QuarterReport/', views.quarter_report, name='quarter_report'), + path('register_wetlab/',views.register_wetlab, name='register_wetlab'), + path('searchIndexLibrary', views.search_index_library, name='search_index_library'), path('searchProject/', views.search_project, name ='search_project'), + path('searchRun/', views.search_run, name='search_run'), path('searchSample/', views.search_sample, name = 'search_sample'), - path('displayProject=/', views.display_project, name='display_project'), - path('displaySample=/', views.display_sample, name= 'display_sample'), path('StatsExperiment/', views.stats_experiment, name ='stats_experiment'), + path('StatsLibrary/', views.stats_per_library , name ='stats_per_library'), path('StatsPerResearcher/',views.stats_per_researcher, name='stats_per_researcher'), path('StatsPerTime/', views.stats_per_time, name ='stats_per_time'), - path('StatsLibrary/', views.stats_per_library , name ='stats_per_library'), - path('AnnualReport/',views.annual_report, name='annual_report'), - path('MonthlyReport/', views.monthly_report, name='montly_report'), - path('QuarterReport/', views.quarter_report, name='quarter_report'), path('updateTables/',views.update_tables, name='update_tables'), path('updateTablesDate/',views.update_tables_date, name='update_tables_date'), - path('register_wetlab/',views.register_wetlab, name='register_wetlab'), - path('change_project_libKit=',views.change_project_libKit, name ='change_project_libKit'), - path('change_run_libKit=',views.change_run_libKit, name ='change_run_libKit'), - path('ChangeRunName=',views.change_run_name, name='change_run_name'), - path('AddLibraryKit/',views.add_library_kit, name='add_library_kit'), - path('AddIndexLibrary', views.add_index_library, name = 'add_index_library'), - path('DisplayIndexLibrary=/', views.display_index_library, name= 'display_index_library'), - path('searchIndexLibrary', views.search_index_library, name='search_index_library'), - - - + ] #+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/utils/common_run_functions.py b/utils/common_run_functions.py index 2453952..bfd2bad 100644 --- a/utils/common_run_functions.py +++ b/utils/common_run_functions.py @@ -969,7 +969,7 @@ def manage_run_in_processed_run (conn, run_object_name): def manage_run_in_processing_bcl2fastq (conn, run_object_name): ''' Description: - The function will check if report floder exists. Then the bcl2fastq + The function will check if report folder exists. Then the bcl2fastq conversion is completed If exists the run state will move to Processed Bcl2fastq Input: diff --git a/utils/generic_functions.py b/utils/generic_functions.py index 398034a..bf3da4b 100644 --- a/utils/generic_functions.py +++ b/utils/generic_functions.py @@ -252,6 +252,26 @@ def get_experiment_name_from_file (l_run_parameter) : return experiment_name +def get_log_file_name(config_log_file) : + ''' + Description: + The function will get the log file name from the configuration + file and it will return the fullpath log file name + Input: + config_log_file # configuration log file + Variables: + log_file_name # name of found log file name + Return: + log_file_name + ''' + log_file_name = '' + with open(config_log_file) as fh : + for line in fh : + if '.log' in line : + log_file_name = line.split('\'')[1] + return log_file_name + + def get_run_platform_from_file (l_run_parameter) : ''' Description: @@ -416,7 +436,7 @@ def need_to_wait_more (experiment_name, waiting_time): logger.debug ('End function need_to_wait_sample_sheet') return True -def open_log(): +def open_log(config_file): ''' Description: The function will create the log object to write all logging information @@ -428,7 +448,6 @@ def open_log(): Return: logger object ''' - config_file = os.path.join(settings.BASE_DIR,'iSkyLIMS_wetlab', wetlab_config.LOGGING_CONFIG_FILE ) fileConfig(config_file) logger = logging.getLogger(__name__) return logger @@ -449,8 +468,10 @@ def open_samba_connection(): use_ntlm_v2=wetlab_config.SAMBA_NTLM_USED,domain=wetlab_config.SAMBA_DOMAIN, is_direct_tcp=wetlab_config.IS_DIRECT_TCP ) try: - conn.connect(socket.gethostbyname(wetlab_config.SAMBA_HOST_NAME), int(wetlab_config.SAMBA_PORT_SERVER)) - #conn.connect(wetlab_config.SAMBA_IP_SERVER, int(wetlab_config.SAMBA_PORT_SERVER)) + if wetlab_config.SAMBA_HOST_NAME : + conn.connect(socket.gethostbyname(wetlab_config.SAMBA_HOST_NAME), int(wetlab_config.SAMBA_PORT_SERVER)) + else: + conn.connect(wetlab_config.SAMBA_IP_SERVER, int(wetlab_config.SAMBA_PORT_SERVER)) except: string_message = 'Unable to connect to remote server' logging_errors (string_message, True, True) diff --git a/utils/miseq_run_functions.py b/utils/miseq_run_functions.py index 6b1f7a6..83eaf35 100644 --- a/utils/miseq_run_functions.py +++ b/utils/miseq_run_functions.py @@ -87,7 +87,7 @@ def get_latest_miseq_log(conn, log_folder) : file_content ''' logger = logging.getLogger(__name__) - logger.debug ('Starting function for fetching remote file') + logger.debug ('Starting function get_latest_miseq_log') remote_file_list = conn.listPath( wetlab_config.SAMBA_SHARED_FOLDER_NAME, log_folder) max_cycle = -1 for sfh in remote_file_list: @@ -104,12 +104,14 @@ def get_latest_miseq_log(conn, log_folder) : temporary_log = os.path.join(wetlab_config.RUN_TEMP_DIRECTORY,'miseq_cycle.log') s_latest_log = os.path.join(log_folder,latest_log) + #with open(temporary_log ,'wb') as log_fp : temporary_log = fetch_remote_file (conn, log_folder, s_latest_log, temporary_log) with open (temporary_log, 'r') as fh : log_file_content = fh.read() os.remove(temporary_log) + logger.debug ('End function get_latest_miseq_log') return max_cycle, log_file_content @@ -443,7 +445,7 @@ def validate_sample_sheet (sample_sheet): logger.debug('End the function validate sample_sheet with error') return False if Projects.objects.filter(projectName__exact = project).exists(): - string_message = 'project name %s , already been used ' + project + string_message = 'project name "' + project + '" already been used ' logging_errors(string_message, False, False) logger.debug('Exiting the function validate sample_sheet with error') return False @@ -572,7 +574,7 @@ def handle_miseq_run (conn, new_run, l_run_parameter, experiment_name) : Input: conn # samba connection object new_run # folder remote directory for miseq run - l_run-parameter # local path for the run parameter file + l_run_parameter # local path for the run parameter file experiment_name # name used on miseq run Functions: get_projects_in_run # located at utils.sample_sheet_utils diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py new file mode 100644 index 0000000..ca6871d --- /dev/null +++ b/utils/testing_wetlab_configuration.py @@ -0,0 +1,561 @@ +from django.contrib.auth.models import User +from django.conf import settings +import pwd, stat, os, grp, shutil +import logging + +#from pathlib import Path +from iSkyLIMS_wetlab.models import * +from iSkyLIMS_wetlab.wetlab_config import * +from iSkyLIMS_wetlab.utils.generic_functions import * +from iSkyLIMS_wetlab.utils.update_run_state import handle_miseq_run +from iSkyLIMS_wetlab.utils.miseq_run_functions import * +from iSkyLIMS_wetlab.utils.common_run_functions import manage_run_in_processed_run, manage_run_in_processing_bcl2fastq, manage_run_in_processed_bcl2fastq +from iSkyLIMS_wetlab.utils.sample_sheet_utils import * + +def get_config_file (config_file): + c_file = [] + try: + with open (config_file ,'r') as fh: + for line in fh: + if 'PASSWORD' in line: + hide_passwd = line.split('=') + hide_passwd[1] = 'XXXXXXXXXXXXXXXXX' + line = ' = '.join(hide_passwd) + line = line.replace('\n', '') + c_file.append(line) + except: + return + return c_file + +def get_files_attribute (directory): + attr_files = [] + ''' + #try: + for entry in os.scandir(directory): + attr_files.append([oct(os.stat(entry).st_mode)[-3:], + pwd.getpwuid(entry.stat().st_uid).pw_name, + grp.getgrgid(entry.stat().st_gid).gr_name, + entry.name]) + import pdb; pdb.set_trace() + ''' + try: + for (dirpath, dirnames, filenames) in os.walk(directory, topdown=True): + for d in dirnames: + for entry in os.scandir(directory): + attr_files.append([oct(os.stat(entry).st_mode)[-3:], + pwd.getpwuid(entry.stat().st_uid).pw_name, + grp.getgrgid(entry.stat().st_gid).gr_name, + os.path.join(dirpath, entry.name)]) + except: + return + return attr_files + +def check_access_database (): + try: + runs = RunProcess.objects.all() + return True + except: + return + +def check_samba_connection() : + try: + open_samba_connection() + return True + except : + return + + + +def run_exists_in_db (run_name): + + if RunProcess.objects.filter(runName__exact = run_name).exists() : + return True + else: + return False + +def delete_graphic_folder_if_exists(run_name): + run_object = RunProcess.objects.get(runName__exact = run_name) + if RunningParameters.objects.filter(runName_id = RunProcess.objects.get(runName__exact = run_name)).exists() : + #import pdb; pdb.set_trace() + folder_graphic = RunningParameters.objects.get(runName_id = RunProcess.objects.get(runName__exact = run_name)).get_run_folder() + if os.path.isdir(os.path.join(settings.MEDIA_ROOT,'wetlab', 'images_plot', folder_graphic)) : + shutil.rmtree(os.path.join(settings.MEDIA_ROOT,'wetlab', 'images_plot', folder_graphic)) + return True + +def delete_run_in_db (run_name): + + if RunProcess.objects.filter(runName__exact = run_name).exists() : + delete_run = RunProcess.objects.get(runName = run_name) + sample_sheet_file = delete_run.get_sample_file() + if sample_sheet_file != '' : + full_path_sample_sheet_file = os.path.join(settings.MEDIA_ROOT, sample_sheet_file) + os.remove(full_path_sample_sheet_file) + delete_run.delete() + return True + +def delete_test_run (run_name) : + if run_exists_in_db(run_name): + delete_graphic_folder_if_exists(run_name) + delete_run_in_db(run_name) + return True + +def folder_run_exists (conn, folder_run_name): + + try: + run_folder_list = conn.listPath( wetlab_config.SAMBA_SHARED_FOLDER_NAME, run_data_root_folder) + except : + raise + + return conn + +def create_project (p_name, run_name, bs_file): + #import pdb; pdb.set_trace() + n_project = Projects( runprocess_id = RunProcess.objects.get(runName__exact = run_name), + LibraryKit_id = LibraryKit.objects.get(libraryName__exact = 'Nextera XT Index Kit v2 Set B'), + projectName = p_name , libraryKit='Nextera XT V2 ', baseSpaceFile = bs_file, + user_id = User.objects.get(username__exact = 'Test_user1')) + n_project.save() + + + return True + +def create_run_test_nextseq_in_recorded (run_folder, experiment_name ) : + recorded_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function create_run_test_nextseq') + # if run exist, then delete if before created it again + if RunProcess.objects.filter(runName__exact = experiment_name).exists() : + run_name = RunProcess.objects.get(runName__exact = experiment_name) + sample_sheet = run_name.get_sample_file() + temp_folder_sample_sheet = run_name.get_run_id() + try: + os.remove(os.path.join(wetlab_config.RUN_SAMPLE_SHEET_DIRECTORY, sample_sheet)) + except: + logger.info('unable to delete sample sheet') + try: + shutil.rmtree(os.path.join(settings.MEDIA_ROOT, wetlab_config.RUN_TEMP_DIRECTORY_RECORDED, temp_folder_sample_sheet)) + except: + logger.info('unable to delete tmp forlder with the smample sheet') + + delete_test_run(experiment_name) + + conn = open_samba_connection() + + l_sample = os.path.join(wetlab_config.RUN_TEMP_DIRECTORY,wetlab_config.SAMPLE_SHEET) + s_sample= os.path.join(run_folder, wetlab_config.SAMPLE_SHEET) + + try: + l_sample = fetch_remote_file (conn, run_folder, s_sample, l_sample) + logger.info('Sucessfully fetch of Sample Sheet file') + except Exception as ex: + string_message = 'Unable to fetch the Sample Sheet file' + logging_errors(string_message, False, True) + recorded_results.append((str(ex) , 'NOK')) + return recorded_results, 'NOK' + projects = get_projects_in_run(l_sample) + recorded_results.append(('Successful creation Run in database', 'OK')) + + center_requested_by = Center.objects.get(pk = 2) + run_process = RunProcess(runName=experiment_name,sampleSheet= '', + state = RunStates.objects.get(runStateName__exact = 'Recorded'), + index_library = 'Nextera XT', centerRequestedBy = center_requested_by) + run_process.save() + + run_process_id = run_process.get_run_id() + dir_to_store_sample_sheet = os.path.join(settings.MEDIA_ROOT, wetlab_config.RUN_TEMP_DIRECTORY_RECORDED, run_process_id) + os.makedirs(dir_to_store_sample_sheet) + shutil.copyfile(l_sample, os.path.join(dir_to_store_sample_sheet, 'samplesheet.csv')) + + recorded_results.append(('Successful copy of Sample Sheet to temporary folder', 'OK')) + + new_sample_sheet_name = store_sample_sheet_in_run (l_sample, experiment_name ) + recorded_results.append(('Successful update of Sample Sheet in database', 'OK')) + + new_sample_sheet_file = os.path.join (settings.MEDIA_ROOT, wetlab_config.RUN_SAMPLE_SHEET_DIRECTORY, new_sample_sheet_name) + bs_file = run_process.get_sample_file() + # create projects in DDBB + for project in projects : + create_project(project, experiment_name, bs_file) + recorded_results.append(('Successful projects creation in database', 'OK')) + + return recorded_results, 'OK' + + +def run_nextseq_test_rec_to_sample_sent (run_folder, experiment_name) : + + # check if test folder exists + run_data_root_folder = os.path.join('/', wetlab_config.SAMBA_APPLICATION_FOLDER_NAME , run_folder) + try: + run_folder_list = conn.listPath( wetlab_config.SAMBA_SHARED_FOLDER_NAME, run_data_root_folder) + recorded_results.append(('Check if test Run folder exists ', 'OK')) + logger.info('Test Run folder exists on remote server') + except Exception as ex : + string_message = 'Test run folder does not exists ' + logging_errors(string_message, False, True) + recorded_results.append((str(ex) , 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + + # Fetch RunParameter.xml file from remote server + l_run_parameter = os.path.join(wetlab_config.RUN_TEMP_DIRECTORY, wetlab_config.RUN_PARAMETER_NEXTSEQ) + s_run_parameter = os.path.join(wetlab_config.SAMBA_APPLICATION_FOLDER_NAME, run_folder, wetlab_config.RUN_PARAMETER_NEXTSEQ) + try: + l_run_parameter = fetch_remote_file (conn, run_folder, s_run_parameter, l_run_parameter) + logger.info('Sucessfully fetch of RunParameter file') + + recorded_results.append(('Successful RunParameter.xml file ', 'OK')) + except: + string_message = 'Unable to fetch the RunParameter.xml file ' + logging_errors(string_message, False, True) + recorded_results.append(('Successful RunParameter.xml file ', 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + # Test MiSeq run on recorded state + try: + update_nextseq_in_recorded_state = handle_nextseq_recorded_run (conn, run_folder, l_run_parameter, experiment_name) + + except ValueError as e : + recorded_results.append((str(e) , 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + except Exception as ex : + recorded_results.append((str(ex) , 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + + if update_nextseq_in_recorded_state == run_folder : + if 'Sample Sent' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + recorded_results.append(('NextSeq Run is in Sample Sent state', 'OK')) + logger.debug ('End function create_run_test_nextseq_in_recorded') + return recorded_results, 'OK' + else : + recorded_results.append(('NextSeq Run is wrong state', 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + else: + recorded_results.append(('NextSeq function returns an invalid run ', 'NOK')) + logger.debug ('End function create_run_test_nextseq_in_recorded with error') + return recorded_results, 'NOK' + + return recorded_results, 'OK' + + + +def run_nextseq_test_sample_sent_to_Processing_Run (experiment_name) : + sample_sent_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_nextseq_test_sample_sent_to_Processing_Run') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_sample_sent = manage_nextseq_in_samplesent (conn, run_name) + + except Exception as ex : + sample_sent_results.append(('MiSeq Run is in Processing Run state', 'NOK')) + logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + + if update_in_sample_sent == experiment_name: + if 'Processing Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + sample_sent_results.append(('Check log files from the sequencer', 'OK')) + sample_sent_results.append(('MiSeq Run is in Processing Run state', 'OK')) + logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run') + return sample_sent_results, 'OK' + else : + sample_sent_results.append(('MiSeq Run is wrong state', 'NOK')) + logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + else: + sample_sent_results.append(('MiSeq function returns an invalid run', 'NOK')) + logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + + +def run_nextseq_test_Processing_Run_to_Processed_Run (experiment_name): + processing_run_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_nextseq_test_Processing_Run_to_Processed_Run') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_procesing_run = manage_nextseq_in_processing_run (conn, run_name) + + except Exception as ex : + processing_run_results.append(('NextSeq Run is in Processing Run state', 'NOK')) + logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + + if update_in_procesing_run == experiment_name: + if 'Processed Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + processing_run_results.append(('Successful completion on Sequencer for MiSeq Run', 'OK')) + processing_run_results.append(('NextSeq Run is in Processed Run state', 'OK')) + logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run') + return processing_run_results, 'OK' + else : + processing_run_results.append(('NextSeq Run is wrong state', 'NOK')) + logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + else: + processing_run_results.append(('NextSeq function returns an invalid run', 'NOK')) + logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + + + + + + + + + + + + + + + + + + + + +def run_miseq_test_rec_to_sample_sent (new_run, experiment_name) : + recorded_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_miseq_test_rec_to_sample_sent') + working_path = settings.MEDIA_ROOT + os.chdir(working_path) + #import pdb; pdb.set_trace() + + try: + conn = open_samba_connection() + recorded_results.append(('Connection to remote server ', 'OK')) + logger.info('Success connection to remote server') + except Exception as ex : + string_message = 'Unable to connect to remote server ' + logging_errors(string_message, False, True) + recorded_results.append((str(ex) , 'NOK')) + return recorded_results, 'NOK' + + # check if test folder exists + run_data_root_folder = os.path.join('/', wetlab_config.SAMBA_APPLICATION_FOLDER_NAME , new_run) + try: + run_folder_list = conn.listPath( wetlab_config.SAMBA_SHARED_FOLDER_NAME, run_data_root_folder) + recorded_results.append(('Check if test Run folder exists ', 'OK')) + logger.info('Test Run folder exists on remote server') + except Exception as ex : + string_message = 'Test run folder does not exists ' + logging_errors(string_message, False, True) + recorded_results.append((str(ex) , 'NOK')) + return recorded_results, 'NOK' + + # Check user is defined in database + if not User.objects.filter(username__exact = 'test_user1').exists(): + user = User.objects.create_user(username='test_user1', + email='test_user1@iSkyLIMS.com', + password='test_user1') + + # Fetch RunParameter.xml file from remote server + l_run_parameter = os.path.join(wetlab_config.RUN_TEMP_DIRECTORY, wetlab_config.RUN_PARAMETER_NEXTSEQ) + s_run_parameter = os.path.join(wetlab_config.SAMBA_APPLICATION_FOLDER_NAME, new_run,wetlab_config.RUN_PARAMETER_NEXTSEQ) + try: + l_run_parameter = fetch_remote_file (conn, new_run, s_run_parameter, l_run_parameter) + logger.info('Sucessfully fetch of RunParameter file') + + recorded_results.append(('Successful RunParameter.xml file ', 'OK')) + except: + string_message = 'Unable to fetch the RunParameter.xml file ' + logging_errors(string_message, False, True) + recorded_results.append(('Successful RunParameter.xml file ', 'NOK')) + return recorded_results, 'NOK' + # Test MiSeq run on recorded state + try: + update_miseq_in_recorded_state = handle_miseq_run (conn, new_run, l_run_parameter, experiment_name) + + recorded_results.append(('Valid Sample Sheet ', 'OK')) + recorded_results.append(('Stored Sample Sheet ', 'OK')) + recorded_results.append(('Updated library name ', 'OK')) + recorded_results.append(('Stored Projects ', 'OK')) + except ValueError as e : + recorded_results.append((str(e) , 'NOK')) + logger.debug ('End function run_miseq_test_rec_to_sample_sent with error') + return recorded_results, 'NOK' + except Exception as ex : + recorded_results.append((str(ex) , 'NOK')) + logger.debug ('End function run_miseq_test_rec_to_sample_sent with error') + return recorded_results, 'NOK' + + if update_miseq_in_recorded_state == new_run : + if 'Sample Sent' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + recorded_results.append(('MiSeq Run is in Sample Sent state', 'OK')) + logger.debug ('End function run_miseq_test_rec_to_sample_sent') + return recorded_results, 'OK' + else : + recorded_results.append(('MiSeq Run is wrong state', 'NOK')) + logger.debug ('End function run_miseq_test_rec_to_sample_sent with error') + return recorded_results, 'NOK' + else: + recorded_results.append(('MiSeq function returns an invalid run ', 'NOK')) + logger.debug ('End function run_miseq_test_rec_to_sample_sent with error') + return recorded_results, 'NOK' + + +def run_miseq_test_sample_sent_to_Processing_Run (experiment_name): + sample_sent_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_miseq_test_sample_sent_to_Processing_Run') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_sample_sent = manage_miseq_in_samplesent (conn, run_name) + + except Exception as ex : + sample_sent_results.append(('MiSeq Run is in Processing Run state', 'NOK')) + logger.debug ('End function run_miseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + + if update_in_sample_sent == experiment_name: + if 'Processing Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + sample_sent_results.append(('Check log files from the sequencer', 'OK')) + sample_sent_results.append(('MiSeq Run is in Processing Run state', 'OK')) + logger.debug ('End function run_miseq_test_sample_sent_to_Processing_Run') + return sample_sent_results, 'OK' + else : + sample_sent_results.append(('MiSeq Run is wrong state', 'NOK')) + logger.debug ('End function run_miseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + else: + sample_sent_results.append(('MiSeq function returns an invalid run', 'NOK')) + logger.debug ('End function run_miseq_test_sample_sent_to_Processing_Run with error') + return sample_sent_results, 'NOK' + +def run_miseq_test_Processing_Run_to_Processed_Run (experiment_name): + processing_run_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_miseq_test_Processing_Run_to_Processed_Run') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_procesing_run = manage_miseq_in_processing_run (conn, run_name) + + except Exception as ex : + processing_run_results.append(('MiSeq Run is in Processing Run state', 'NOK')) + logger.debug ('End function run_miseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + + if update_in_procesing_run == experiment_name: + if 'Processed Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + processing_run_results.append(('Successful completion on Sequencer for MiSeq Run', 'OK')) + processing_run_results.append(('MiSeq Run is in Processed Run state', 'OK')) + logger.debug ('End function run_miseq_test_Processing_Run_to_Processed_Run') + return processing_run_results, 'OK' + else : + processing_run_results.append(('MiSeq Run is wrong state', 'NOK')) + logger.debug ('End function run_miseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + else: + processing_run_results.append(('MiSeq function returns an invalid run', 'NOK')) + logger.debug ('End function run_miseq_test_Processing_Run_to_Processed_Run with error') + return processing_run_results, 'NOK' + +def run_test_Processed_Run_to_Processing_Bcl2fastq (experiment_name): + processed_run_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_test_Processed_Run_to_Processing_Bcl2fastq') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_processing_run = manage_run_in_processed_run (conn, run_name) + + except Exception as ex : + processed_run_results.append(('Run in Processed Run state', 'NOK')) + logger.debug ('End function run_test_Processed_Run_to_Processing_Bcl2fastq with error') + return processed_run_results, 'NOK' + + if update_in_processing_run == experiment_name: + if 'Processing Bcl2fastq' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + processed_run_results.append(('Successful completion on Sequencer for MiSeq Run', 'OK')) + processed_run_results.append(('Run is in Processing Bcl2fastq state', 'OK')) + logger.debug ('End function run_test_Processed_Run_to_Processing_Bcl2fastq') + return processed_run_results, 'OK' + else : + processed_run_results.append(('Run is wrong state', 'NOK')) + logger.debug ('End function run_test_Processed_Run_to_Processing_Bcl2fastq with error') + return processed_run_results, 'NOK' + else: + processed_run_results.append(('Function returns an invalid run', 'NOK')) + logger.debug ('End function run_test_Processed_Run_to_Processing_Bcl2fastq with error') + return processed_run_results, 'NOK' + +def run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq (experiment_name): + processing_bcl2fastq_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_procesing_bclfastq = manage_run_in_processing_bcl2fastq (conn, run_name) + + except Exception as ex : + processing_bcl2fastq_results.append(('Run is in Processing Run state', 'NOK')) + logger.debug ('End function run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq with error') + return processing_bcl2fastq_results, 'NOK' + + if update_in_procesing_bclfastq == experiment_name: + if 'Processed Bcl2fastq' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + processing_bcl2fastq_results.append(('Successful completion of Bcl2fastq conversion', 'OK')) + processing_bcl2fastq_results.append(('Bcl2fastq conversion date updated', 'OK')) + processing_bcl2fastq_results.append(('Run is in Processed Bcl2fastq state', 'OK')) + logger.debug ('End function run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq') + return processing_bcl2fastq_results, 'OK' + else : + processing_bcl2fastq_results.append(('Run is wrong state', 'NOK')) + logger.debug ('End function run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq with error') + return processing_bcl2fastq_results, 'NOK' + else: + processing_bcl2fastq_results.append(('Function returns an invalid run', 'NOK')) + logger.debug ('End function run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq with error') + return processing_bcl2fastq_results, 'NOK' + + +def run_test_Processed_Bcl2fastq_to_Completed (experiment_name): + processed_bcl2fastq_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_test_Processed_Bcl2fastq_to_Completed') + run_name = RunProcess.objects.get(runName__exact = experiment_name) + conn = open_samba_connection() + + try: + update_in_processed_bclfastq = manage_run_in_processed_bcl2fastq (conn, run_name) + + except Exception as ex : + processed_bcl2fastq_results.append(('Run in Processed Bcl2fastq state', 'NOK')) + logger.debug ('End function run_test_Processed_Bcl2fastq_to_Completed with error') + return processed_bcl2fastq_results, 'NOK' + + if update_in_processed_bclfastq == experiment_name: + if 'Completed' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): + processed_bcl2fastq_results.append(('Successful demultiplexing files', 'OK')) + processed_bcl2fastq_results.append(('Updated database with demultiplexion data', 'OK')) + processed_bcl2fastq_results.append(('Projects in the run successfuly updated', 'OK')) + processed_bcl2fastq_results.append(('Stored graphics ', 'OK')) + processed_bcl2fastq_results.append(('Run is in Processing Completed state', 'OK')) + logger.debug ('End function run_test_Processed_Bcl2fastq_to_Completed') + return processed_bcl2fastq_results, 'OK' + else : + processed_bcl2fastq_results.append(('Run is wrong state', 'NOK')) + logger.debug ('End function run_test_Processed_Bcl2fastq_to_Completed with error') + return processed_bcl2fastq_results, 'NOK' + else: + processed_bcl2fastq_results.append(('Function returns an invalid run', 'NOK')) + logger.debug ('End function run_test_Processed_Bcl2fastq_to_Completed with error') + return processed_bcl2fastq_results, 'NOK' + + + diff --git a/views.py b/views.py index f069800..1817d60 100644 --- a/views.py +++ b/views.py @@ -26,6 +26,7 @@ from .utils.generic_functions import * from .utils.library_kits import * from .utils.fetching_information import * +from .utils.testing_wetlab_configuration import * #from .utils.samplesheet_checks import * #from .utils.parsing_run_info import get_machine_lanes #from .utils.wetlab_misc_utilities import normalized_data @@ -2908,3 +2909,258 @@ def update_tables_date (request): return render(request, 'iSkyLIMS_wetlab/info_page.html', {'content':['The dates for the Runs have been updated']}) else: return render(request, 'iSkyLIMS_wetlab/error_page.html', {'content':['There is no tables which requiered to update with date information']}) + + +@login_required +def configuration_test (request): + # check user privileges + if request.user.is_authenticated: + #import pdb; pdb.set_trace() + if not request.user.is_staff or not request.user.is_superuser: + return render (request,'iSkyLIMS_wetlab/error_page.html', {'content':['You do have the enough privileges to see this page ','Contact with your administrator .']}) + else: + #redirect to login webpage + return redirect ('/accounts/login') + if request.method=='POST' and request.POST['action'] == 'basicTest': + test_results = {} + wetlab_config = os.path.join(settings.BASE_DIR, 'iSkyLIMS_wetlab', 'wetlab_config.py') + test_results['config_file'] = get_config_file(wetlab_config) + test_results['attr_files'] = get_files_attribute(os.path.join(settings.MEDIA_ROOT, 'wetlab')) + test_results['database_access'] = check_access_database() + test_results['samba_connection'] = check_samba_connection() + + #if test_results['config_file'] and test_results['attr_files'] and test_results['database_access'] and test_results['samba_connection']: + if test_results['config_file'] and test_results['attr_files'] and test_results['database_access']: + test_results['basic_checks_ok'] = 'OK' + #import pdb; pdb.set_trace() + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'test_results': test_results}) + ############################## + ###### NextSeq Test ########## + ############################## + elif request.method=='POST' and request.POST['action'] == 'runNextSeq': + if 'Delete' in request.POST : + delete_test_run ('NextSeq_Test_0001') + return render(request,'iSkyLIMS_wetlab/ConfigurationTest.html') + + + + runNextSeq_results = {} + log_trace = [] + working_path = settings.MEDIA_ROOT + os.chdir(working_path) + config_file = os.path.join(settings.BASE_DIR,'iSkyLIMS_wetlab', 'tests', 'logging_test_config.ini' ) + log_file = get_log_file_name(config_file) + if os.path.isfile (log_file): + os.remove(log_file) + logger=open_log(config_file) + + logger.info('###########---Start Testing NextSeq Run -----############') + # create run in Recorded state for testing + test_run_remote_folder = 'NextSeq_Test' + experiment_name = 'NextSeq_Test_0001' + runNextSeq_results['CreateRun'] , result_ok = create_run_test_nextseq_in_recorded(test_run_remote_folder, experiment_name ) + + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + + # Start testing on recorded state + runNextSeq_results['Recorded'] , result_ok = run_nextseq_test_rec_to_sample_sent(test_run_remote_folder, experiment_name) + + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + #import pdb; pdb.set_trace() + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['recorded_ok'] = 'OK' + + # Processing Run + runNextSeq_results['Sample_Sent'] , result_ok = run_nextseq_test_sample_sent_to_Processing_Run (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runNextSeq_results['sample_sent_ok'] = 'OK' + + # Processing Run + runNextSeq_results['Processing_Run'] , result_ok = run_nextseq_test_Processing_Run_to_Processed_Run (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runNextSeq_results['processing_run_ok'] = 'OK' + + # Processed Run + runNextSeq_results['Processed_Run'] , result_ok = run_test_Processed_Run_to_Processing_Bcl2fastq (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runNextSeq_results['processed_run_ok'] = 'OK' + + # Processing Bcl2fastq + runNextSeq_results['Processing_Bcl2fastq'] , result_ok = run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runNextSeq_results['processing_bcl2fastq_ok'] = 'OK' + + # Processed Bcl2fastq + runNextSeq_results['Processed_Bcl2fastq'] , result_ok = run_test_Processed_Bcl2fastq_to_Completed (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runNextSeq_results['processed_bcl2fast2_ok'] = 'OK' + runNextSeq_results['completed_ok'] = 'ok' + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + + + + + + + elif request.method=='POST' and request.POST['action'] == 'runMiSeq': + if 'Delete' in request.POST : + delete_test_run ('MiSeq_Test_0001') + return render(request,'iSkyLIMS_wetlab/ConfigurationTest.html') + + runMiSeq_results = {} + log_trace = [] + config_file = os.path.join(settings.BASE_DIR,'iSkyLIMS_wetlab', 'tests', 'logging_test_config.ini' ) + log_file = get_log_file_name(config_file) + if os.path.isfile (log_file): + os.remove(log_file) + logger=open_log(config_file) + + logger.info('###########---Start Testing MiSeq Run -----############') + if run_exists_in_db('MiSeq_Test_0001'): + delete_graphic_folder_if_exists ('MiSeq_Test_0001') + delete_run_in_db('MiSeq_Test_0001') + logger.info('Deleting miSEq test run from previous test') + + test_run_remote_folder = 'MiSeq_Test' + experiment_name = 'MiSeq_Test_0001' + # Start testing on recorded state + runMiSeq_results['Recorded'] , result_ok = run_miseq_test_rec_to_sample_sent(test_run_remote_folder, experiment_name) + + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + #import pdb; pdb.set_trace() + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['recorded_ok'] = 'OK' + + # Processing Run + runMiSeq_results['Sample_Sent'] , result_ok = run_miseq_test_sample_sent_to_Processing_Run (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['sample_sent_ok'] = 'OK' + + # Processing Run + runMiSeq_results['Processing_Run'] , result_ok = run_miseq_test_Processing_Run_to_Processed_Run (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['processing_run_ok'] = 'OK' + + # Processed Run + runMiSeq_results['Processed_Run'] , result_ok = run_test_Processed_Run_to_Processing_Bcl2fastq (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['processed_run_ok'] = 'OK' + + # Processing Bcl2fastq + runMiSeq_results['Processing_Bcl2fastq'] , result_ok = run_test_Processing_Bcl2fastq_to_Processed_Bcl2fastq (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['processing_bcl2fastq_ok'] = 'OK' + + # Processed Bcl2fastq + runMiSeq_results['Processed_Bcl2fastq'] , result_ok = run_test_Processed_Bcl2fastq_to_Completed (experiment_name) + if result_ok == 'NOK' : + with open (log_file, 'r') as fh : + for line in fh : + line = line.replace('\n', '') + log_trace.append(line) + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + else: + runMiSeq_results['processed_bcl2fast2_ok'] = 'OK' + runMiSeq_results['completed_ok'] = 'ok' + + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runMiSeq_results, + 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) + + + else: + return render(request,'iSkyLIMS_wetlab/ConfigurationTest.html') From 38014d78659d5802873d024275e1d3231c5d1093 Mon Sep 17 00:00:00 2001 From: luissian Date: Sun, 19 May 2019 23:41:50 +0200 Subject: [PATCH 03/12] Fixed bug to call set_state_in_all_projects. This function notlonger exists. --- .../iSkyLIMS_wetlab/ConfigurationTest.html | 27 +++++++++++-------- utils/nextseq_run_functions.py | 7 ++--- utils/testing_wetlab_configuration.py | 15 ++++++++--- views.py | 19 ++++++------- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/templates/iSkyLIMS_wetlab/ConfigurationTest.html b/templates/iSkyLIMS_wetlab/ConfigurationTest.html index da695a7..d4fce7a 100644 --- a/templates/iSkyLIMS_wetlab/ConfigurationTest.html +++ b/templates/iSkyLIMS_wetlab/ConfigurationTest.html @@ -157,7 +157,7 @@

Unable to connect via Samba

- {% if test_results.basic_checks_ok or runNextSeq_results.basic_checks_ok or runMiSeq_results.basic_checks_ok %} + {% if test_results.basic_checks_ok %}
@@ -214,7 +214,7 @@

Unable to connect via Samba

-

2. - Test Executed to create NextSeq Run +

1. - Test Executed to create NextSeq Run {% if runNextSeq_results.create_run_ok %} {% else %} @@ -236,7 +236,7 @@

Unable to connect via Samba

{%if runNextSeq_results.Recorded %}
-

1. - Test Executed on Recorded state +

2. - Test Executed on Recorded state {% if runNextSeq_results.recorded_ok %} {% else %} @@ -261,7 +261,7 @@

Unable to connect via Samba

{%if runNextSeq_results.Sample_Sent %}
-

2. - Test Executed on Sample Sent state +

3. - Test Executed on Sample Sent state {% if runNextSeq_results.sample_sent_ok %} {% else %} @@ -281,9 +281,9 @@

Unable to connect via Samba

{%endif %} - {% if unNextSeq_results.Processing_Run %} + {% if runNextSeq_results.Processing_Run %}
-

3. - Test Executed on Processing Run +

4. - Test Executed on Processing Run {% if runNextSeq_results.processing_run_ok %} {% else %} @@ -312,11 +312,13 @@

Unable to connect via Samba

+

Common Test Cases for Runs

+ {% if runNextSeq_results.Processed_Run %}
-

4. - Test Executed on Processed Run state +

5. - Test Executed on Processed Run state {% if runNextSeq_results.processed_run_ok %} {% else %} @@ -335,9 +337,10 @@

Unable to connect via Samba

{% endfor %}

- + {% endif %} + {% if runNextSeq_results.Processing_Bcl2Fastq %}
-

5. - Test Executed on Processing Bcl2fastq state +

6. - Test Executed on Processing Bcl2fastq state {% if runNextSeq_results.processing_bcl2fastq_ok %} {% else %} @@ -357,10 +360,11 @@

Unable to connect via Samba

- + {% endif %}
+ {% if runNextSeq_results.Processed_Bcl2fastq %}
-

6. - Test Executed on Processed Bcl2fastq +

7. - Test Executed on Processed Bcl2fastq {% if runNextSeq_results.processed_bcl2fast2_ok %} {% else %} @@ -379,6 +383,7 @@

Unable to connect via Samba

{% endfor %}

+ {% endif %}
diff --git a/utils/nextseq_run_functions.py b/utils/nextseq_run_functions.py index 9e6af66..a97d759 100644 --- a/utils/nextseq_run_functions.py +++ b/utils/nextseq_run_functions.py @@ -170,18 +170,17 @@ def manage_nextseq_in_samplesent(conn, run_object_name) : logger.info ('Deleting local copy of completion status') # cleaning up the completion in local temporary file os.remove(l_run_completion) - if not completion_status : string_message = 'Run status was ' + status_run logging_errors (string_message, False, False) # Set run to cancelled state run_object_name.set_run_state('Cancelled') - set_state_in_all_projects(experiment_name, 'Cancelled') logger.debug ('End function for handling NextSeq run Cancelled') raise ValueError ('Run was CANCELLED') else: + import pdb; pdb.set_trace() run_updated = run_object_name.set_run_state('Processing Run') - set_state_in_all_projects(experiment_name, 'Processing Run') + import pdb; pdb.set_trace() logger.info('Run %s is now on Processing Run state', experiment_name) return experiment_name @@ -201,7 +200,6 @@ def manage_nextseq_in_processing_run(conn, run_object_name) : Functions: check_completion_success # located in this file get_attributes_remote_file # Located at utils.generic_functions - set_state_in_all_projects # Located at utils.generic_functions Variable: l_run_completion # completion file name in the local temporary folder run_object_name # RunProcess object @@ -247,7 +245,6 @@ def manage_nextseq_in_processing_run(conn, run_object_name) : raise ValueError ('Run was CANCELLED') else: run_updated = run_object_name.set_run_state('Processed Run') - set_state_in_all_projects(experiment_name, 'Processed Run') logger.info('Run %s is now on Processed Run state', experiment_name) return experiment_name diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index ca6871d..0850693 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -9,6 +9,7 @@ from iSkyLIMS_wetlab.utils.generic_functions import * from iSkyLIMS_wetlab.utils.update_run_state import handle_miseq_run from iSkyLIMS_wetlab.utils.miseq_run_functions import * +from iSkyLIMS_wetlab.utils.nextseq_run_functions import * from iSkyLIMS_wetlab.utils.common_run_functions import manage_run_in_processed_run, manage_run_in_processing_bcl2fastq, manage_run_in_processed_bcl2fastq from iSkyLIMS_wetlab.utils.sample_sheet_utils import * @@ -182,8 +183,13 @@ def create_run_test_nextseq_in_recorded (run_folder, experiment_name ) : def run_nextseq_test_rec_to_sample_sent (run_folder, experiment_name) : + recorded_results = [] + logger = logging.getLogger(__name__) + logger.debug ('Starting function run_nextseq_test_rec_to_sample_sent') + conn = open_samba_connection() # check if test folder exists + run_data_root_folder = os.path.join('/', wetlab_config.SAMBA_APPLICATION_FOLDER_NAME , run_folder) try: run_folder_list = conn.listPath( wetlab_config.SAMBA_SHARED_FOLDER_NAME, run_data_root_folder) @@ -193,7 +199,7 @@ def run_nextseq_test_rec_to_sample_sent (run_folder, experiment_name) : string_message = 'Test run folder does not exists ' logging_errors(string_message, False, True) recorded_results.append((str(ex) , 'NOK')) - logger.debug ('End function create_run_test_nextseq_in_recorded with error') + logger.debug ('End function run_nextseq_test_rec_to_sample_sent with error') return recorded_results, 'NOK' # Fetch RunParameter.xml file from remote server @@ -223,7 +229,7 @@ def run_nextseq_test_rec_to_sample_sent (run_folder, experiment_name) : logger.debug ('End function create_run_test_nextseq_in_recorded with error') return recorded_results, 'NOK' - if update_nextseq_in_recorded_state == run_folder : + if experiment_name == update_nextseq_in_recorded_state.get_run_name(): if 'Sample Sent' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): recorded_results.append(('NextSeq Run is in Sample Sent state', 'OK')) logger.debug ('End function create_run_test_nextseq_in_recorded') @@ -255,7 +261,8 @@ def run_nextseq_test_sample_sent_to_Processing_Run (experiment_name) : sample_sent_results.append(('MiSeq Run is in Processing Run state', 'NOK')) logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run with error') return sample_sent_results, 'NOK' - + + import pdb; pdb.set_trace() if update_in_sample_sent == experiment_name: if 'Processing Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): sample_sent_results.append(('Check log files from the sequencer', 'OK')) @@ -286,7 +293,7 @@ def run_nextseq_test_Processing_Run_to_Processed_Run (experiment_name): processing_run_results.append(('NextSeq Run is in Processing Run state', 'NOK')) logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run with error') return processing_run_results, 'NOK' - + import pdb; pdb.set_trace() if update_in_procesing_run == experiment_name: if 'Processed Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): processing_run_results.append(('Successful completion on Sequencer for MiSeq Run', 'OK')) diff --git a/views.py b/views.py index 1817d60..e0c13d6 100644 --- a/views.py +++ b/views.py @@ -2968,7 +2968,8 @@ def configuration_test (request): return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) - + else: + runNextSeq_results['create_run_ok'] = 'OK' # Start testing on recorded state runNextSeq_results['Recorded'] , result_ok = run_nextseq_test_rec_to_sample_sent(test_run_remote_folder, experiment_name) @@ -2978,10 +2979,10 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) #import pdb; pdb.set_trace() - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: - runMiSeq_results['recorded_ok'] = 'OK' + runNextSeq_results['recorded_ok'] = 'OK' # Processing Run runNextSeq_results['Sample_Sent'] , result_ok = run_nextseq_test_sample_sent_to_Processing_Run (experiment_name) @@ -2991,7 +2992,7 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: runNextSeq_results['sample_sent_ok'] = 'OK' @@ -3004,7 +3005,7 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: runNextSeq_results['processing_run_ok'] = 'OK' @@ -3017,7 +3018,7 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: runNextSeq_results['processed_run_ok'] = 'OK' @@ -3030,7 +3031,7 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: runNextSeq_results['processing_bcl2fastq_ok'] = 'OK' @@ -3043,13 +3044,13 @@ def configuration_test (request): line = line.replace('\n', '') log_trace.append(line) - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) else: runNextSeq_results['processed_bcl2fast2_ok'] = 'OK' runNextSeq_results['completed_ok'] = 'ok' - return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runMiSeq_results': runNextSeq_results, + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'runNextSeq_results': runNextSeq_results, 'log_trace': log_trace, 'basic_checks_ok' : 'OK'}) From aa001a128d05d2a814df316d48cdc60c760bb415 Mon Sep 17 00:00:00 2001 From: luissian Date: Mon, 20 May 2019 00:05:23 +0200 Subject: [PATCH 04/12] Implemented Test for NextSeq --- templates/iSkyLIMS_wetlab/ConfigurationTest.html | 5 +++-- utils/nextseq_run_functions.py | 2 -- utils/testing_wetlab_configuration.py | 5 +++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/iSkyLIMS_wetlab/ConfigurationTest.html b/templates/iSkyLIMS_wetlab/ConfigurationTest.html index d4fce7a..5ca34a0 100644 --- a/templates/iSkyLIMS_wetlab/ConfigurationTest.html +++ b/templates/iSkyLIMS_wetlab/ConfigurationTest.html @@ -338,7 +338,7 @@

Unable to connect via Samba

{% endif %} - {% if runNextSeq_results.Processing_Bcl2Fastq %} + {% if runNextSeq_results.Processing_Bcl2fastq %}

6. - Test Executed on Processing Bcl2fastq state {% if runNextSeq_results.processing_bcl2fastq_ok %} @@ -359,8 +359,9 @@

Unable to connect via Samba

{% endfor %}
-
{% endif %} +
+
{% if runNextSeq_results.Processed_Bcl2fastq %}
diff --git a/utils/nextseq_run_functions.py b/utils/nextseq_run_functions.py index a97d759..df4566f 100644 --- a/utils/nextseq_run_functions.py +++ b/utils/nextseq_run_functions.py @@ -178,9 +178,7 @@ def manage_nextseq_in_samplesent(conn, run_object_name) : logger.debug ('End function for handling NextSeq run Cancelled') raise ValueError ('Run was CANCELLED') else: - import pdb; pdb.set_trace() run_updated = run_object_name.set_run_state('Processing Run') - import pdb; pdb.set_trace() logger.info('Run %s is now on Processing Run state', experiment_name) return experiment_name diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index 0850693..d7b80cc 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -172,8 +172,9 @@ def create_run_test_nextseq_in_recorded (run_folder, experiment_name ) : new_sample_sheet_name = store_sample_sheet_in_run (l_sample, experiment_name ) recorded_results.append(('Successful update of Sample Sheet in database', 'OK')) - new_sample_sheet_file = os.path.join (settings.MEDIA_ROOT, wetlab_config.RUN_SAMPLE_SHEET_DIRECTORY, new_sample_sheet_name) - bs_file = run_process.get_sample_file() + #new_sample_sheet_file = os.path.join (settings.MEDIA_ROOT, wetlab_config.RUN_SAMPLE_SHEET_DIRECTORY, new_sample_sheet_name) + #import pdb; pdb.set_trace() + bs_file = new_sample_sheet_name # create projects in DDBB for project in projects : create_project(project, experiment_name, bs_file) From 17472c82f0f5015e5d41c7fe546e176930573cb2 Mon Sep 17 00:00:00 2001 From: luissian Date: Mon, 20 May 2019 18:45:04 +0200 Subject: [PATCH 05/12] Removed trace stops --- utils/testing_wetlab_configuration.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index d7b80cc..dc389b6 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -30,15 +30,7 @@ def get_config_file (config_file): def get_files_attribute (directory): attr_files = [] - ''' - #try: - for entry in os.scandir(directory): - attr_files.append([oct(os.stat(entry).st_mode)[-3:], - pwd.getpwuid(entry.stat().st_uid).pw_name, - grp.getgrgid(entry.stat().st_gid).gr_name, - entry.name]) - import pdb; pdb.set_trace() - ''' + try: for (dirpath, dirnames, filenames) in os.walk(directory, topdown=True): for d in dirnames: @@ -77,7 +69,6 @@ def run_exists_in_db (run_name): def delete_graphic_folder_if_exists(run_name): run_object = RunProcess.objects.get(runName__exact = run_name) if RunningParameters.objects.filter(runName_id = RunProcess.objects.get(runName__exact = run_name)).exists() : - #import pdb; pdb.set_trace() folder_graphic = RunningParameters.objects.get(runName_id = RunProcess.objects.get(runName__exact = run_name)).get_run_folder() if os.path.isdir(os.path.join(settings.MEDIA_ROOT,'wetlab', 'images_plot', folder_graphic)) : shutil.rmtree(os.path.join(settings.MEDIA_ROOT,'wetlab', 'images_plot', folder_graphic)) @@ -110,7 +101,6 @@ def folder_run_exists (conn, folder_run_name): return conn def create_project (p_name, run_name, bs_file): - #import pdb; pdb.set_trace() n_project = Projects( runprocess_id = RunProcess.objects.get(runName__exact = run_name), LibraryKit_id = LibraryKit.objects.get(libraryName__exact = 'Nextera XT Index Kit v2 Set B'), projectName = p_name , libraryKit='Nextera XT V2 ', baseSpaceFile = bs_file, @@ -173,7 +163,6 @@ def create_run_test_nextseq_in_recorded (run_folder, experiment_name ) : recorded_results.append(('Successful update of Sample Sheet in database', 'OK')) #new_sample_sheet_file = os.path.join (settings.MEDIA_ROOT, wetlab_config.RUN_SAMPLE_SHEET_DIRECTORY, new_sample_sheet_name) - #import pdb; pdb.set_trace() bs_file = new_sample_sheet_name # create projects in DDBB for project in projects : @@ -263,7 +252,6 @@ def run_nextseq_test_sample_sent_to_Processing_Run (experiment_name) : logger.debug ('End function run_nextseq_test_sample_sent_to_Processing_Run with error') return sample_sent_results, 'NOK' - import pdb; pdb.set_trace() if update_in_sample_sent == experiment_name: if 'Processing Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): sample_sent_results.append(('Check log files from the sequencer', 'OK')) @@ -294,7 +282,6 @@ def run_nextseq_test_Processing_Run_to_Processed_Run (experiment_name): processing_run_results.append(('NextSeq Run is in Processing Run state', 'NOK')) logger.debug ('End function run_nextseq_test_Processing_Run_to_Processed_Run with error') return processing_run_results, 'NOK' - import pdb; pdb.set_trace() if update_in_procesing_run == experiment_name: if 'Processed Run' == RunProcess.objects.get(runName__exact = experiment_name).get_state(): processing_run_results.append(('Successful completion on Sequencer for MiSeq Run', 'OK')) @@ -335,7 +322,7 @@ def run_miseq_test_rec_to_sample_sent (new_run, experiment_name) : logger.debug ('Starting function run_miseq_test_rec_to_sample_sent') working_path = settings.MEDIA_ROOT os.chdir(working_path) - #import pdb; pdb.set_trace() + try: conn = open_samba_connection() From 5604545a9056c4734e1d30c6259651a51baf421c Mon Sep 17 00:00:00 2001 From: luissian Date: Mon, 20 May 2019 19:39:33 +0200 Subject: [PATCH 06/12] Improve the information when Samba Connection is not available --- .../iSkyLIMS_wetlab/ConfigurationTest.html | 23 +++++++++++++--- utils/testing_wetlab_configuration.py | 27 ++++++++++++++----- views.py | 9 ++++--- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/templates/iSkyLIMS_wetlab/ConfigurationTest.html b/templates/iSkyLIMS_wetlab/ConfigurationTest.html index 5ca34a0..7d523fe 100644 --- a/templates/iSkyLIMS_wetlab/ConfigurationTest.html +++ b/templates/iSkyLIMS_wetlab/ConfigurationTest.html @@ -108,7 +108,7 @@

Unable to fetch the permision files

Database access - {% if test_results.database_access %} + {% if test_results.database_access == 'OK' %} {% else %} @@ -134,7 +134,7 @@

Unable to connect to database

Samba connection - {% if test_results.samba_connection %} + {% if test_results.samba_connection == 'OK' %} {% else %} @@ -157,7 +157,7 @@

Unable to connect via Samba

- {% if test_results.basic_checks_ok %} + {% if test_results.basic_checks_ok == 'OK' %}
@@ -187,6 +187,23 @@

Unable to connect via Samba

+ + {% else %} +
+
+
+

Basic test not passed

+
+

Some of the test cases were not passed. Check the configuration files to find out the error and re-run the test again.

+

You can not go further in the testing while the Basic test are not passed OK.

+
+ {% csrf_token %} + +
+ +
+
+ {% endif %} {% elif runNextSeq_results %} diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index dc389b6..9b3e9c7 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -46,17 +46,32 @@ def get_files_attribute (directory): def check_access_database (): try: runs = RunProcess.objects.all() - return True + return 'OK' except: - return + return 'NOK' def check_samba_connection() : + ''' + conn=SMBConnection(wetlab_config.SAMBA_USER_ID, wetlab_config.SAMBA_USER_PASSWORD, + wetlab_config.SAMBA_SHARED_FOLDER_NAME,wetlab_config.SAMBA_REMOTE_SERVER_NAME, + use_ntlm_v2=wetlab_config.SAMBA_NTLM_USED,domain=wetlab_config.SAMBA_DOMAIN, + is_direct_tcp=wetlab_config.IS_DIRECT_TCP ) + try: + if wetlab_config.SAMBA_HOST_NAME : + conn.connect(socket.gethostbyname(wetlab_config.SAMBA_HOST_NAME), int(wetlab_config.SAMBA_PORT_SERVER)) + else: + conn.connect(wetlab_config.SAMBA_IP_SERVER, int(wetlab_config.SAMBA_PORT_SERVER)) + except: + import pdb; pdb.set_trace() + return 'NOK' + ''' try: open_samba_connection() - return True - except : - return - + return 'OK' + except : + return 'NOK' + + def run_exists_in_db (run_name): diff --git a/views.py b/views.py index e0c13d6..af28561 100644 --- a/views.py +++ b/views.py @@ -2929,10 +2929,13 @@ def configuration_test (request): test_results['database_access'] = check_access_database() test_results['samba_connection'] = check_samba_connection() + test_results['basic_checks_ok'] = 'OK' #if test_results['config_file'] and test_results['attr_files'] and test_results['database_access'] and test_results['samba_connection']: - if test_results['config_file'] and test_results['attr_files'] and test_results['database_access']: - test_results['basic_checks_ok'] = 'OK' - #import pdb; pdb.set_trace() + for result in test_results : + if test_results[result] == 'NOK': + test_results['basic_checks_ok'] = 'NOK' + break + return render (request,'iSkyLIMS_wetlab/ConfigurationTest.html', {'test_results': test_results}) ############################## ###### NextSeq Test ########## From 9d6595eecce849702ae4e0d367edebbb9bda04bf Mon Sep 17 00:00:00 2001 From: luissian Date: Mon, 20 May 2019 21:17:05 +0200 Subject: [PATCH 07/12] Added iSkyLIMS settings in the test --- .../iSkyLIMS_wetlab/ConfigurationTest.html | 32 ++++++++++++++++++- utils/testing_wetlab_configuration.py | 24 ++++++++++++++ views.py | 1 + 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/templates/iSkyLIMS_wetlab/ConfigurationTest.html b/templates/iSkyLIMS_wetlab/ConfigurationTest.html index 7d523fe..19e86b5 100644 --- a/templates/iSkyLIMS_wetlab/ConfigurationTest.html +++ b/templates/iSkyLIMS_wetlab/ConfigurationTest.html @@ -45,6 +45,36 @@
+
+
+
+

iSkyLIMS configuration settings + {% if test_results.iSkyLIMS_settings %} + + {% else %} + + {% endif %} +

+
+
+
+ {% if test_results.iSkyLIMS_settings %} + +

+{% for line in test_results.iSkyLIMS_settings %}
+    {{ line }}
+{% endfor %}
+                            
+ {% else %} +

Unable to fetch iSkyLIMS configuration file

+ {% endif %} +
+
+
+
+
+
+
@@ -66,7 +96,7 @@ {% endfor %} {% else %} -

Unable to fetch the configuration file

+

Unable to fetch the iSkyLIMS wetlab configuration file

{% endif %}
diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index 9b3e9c7..c5a489c 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -43,6 +43,30 @@ def get_files_attribute (directory): return return attr_files +def get_iSkyLIMS_settings(): + s_file = [] + settings_file = os.path.join(settings.BASE_DIR, 'iSkyLIMS' , 'settings.py') + try: + with open (settings_file ,'r') as fh: + for line in fh: + if 'PASSWORD' in line or 'SECRET_KEY' in line : + if not 'AUTH_PASSWORD_VALIDATORS' in line : + if '=' in line : + split_separator = '=' + else : + split_separator = ':' + hide_passwd = line.split(split_separator) + hide_passwd[1] = 'XXXXXXXXXXXXXXXXX' + line = ' = '.join(hide_passwd) + + line = line.replace('\n', '') + s_file.append(line) + except: + return + + return s_file + + def check_access_database (): try: runs = RunProcess.objects.all() diff --git a/views.py b/views.py index af28561..ee43310 100644 --- a/views.py +++ b/views.py @@ -2924,6 +2924,7 @@ def configuration_test (request): if request.method=='POST' and request.POST['action'] == 'basicTest': test_results = {} wetlab_config = os.path.join(settings.BASE_DIR, 'iSkyLIMS_wetlab', 'wetlab_config.py') + test_results['iSkyLIMS_settings'] = get_iSkyLIMS_settings() test_results['config_file'] = get_config_file(wetlab_config) test_results['attr_files'] = get_files_attribute(os.path.join(settings.MEDIA_ROOT, 'wetlab')) test_results['database_access'] = check_access_database() From 1c6219a6d874ecd2a306f00ac7ba82dc1a7d58ff Mon Sep 17 00:00:00 2001 From: luissian Date: Tue, 21 May 2019 10:47:03 +0200 Subject: [PATCH 08/12] Create test user for nextseq if user does not exists --- utils/testing_wetlab_configuration.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index c5a489c..1afae76 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -153,6 +153,13 @@ def create_run_test_nextseq_in_recorded (run_folder, experiment_name ) : recorded_results = [] logger = logging.getLogger(__name__) logger.debug ('Starting function create_run_test_nextseq') + + # Check user is defined in database + if not User.objects.filter(username__exact = 'test_user1').exists(): + user = User.objects.create_user(username='test_user1', + email='test_user1@iSkyLIMS.com', + password='test_user1') + # if run exist, then delete if before created it again if RunProcess.objects.filter(runName__exact = experiment_name).exists() : run_name = RunProcess.objects.get(runName__exact = experiment_name) From b554e9951cef850614295b08e5af0de5a981e2e1 Mon Sep 17 00:00:00 2001 From: lchapado Date: Wed, 22 May 2019 13:41:07 +0200 Subject: [PATCH 09/12] Fix error if library doesnot exists --- utils/testing_wetlab_configuration.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/testing_wetlab_configuration.py b/utils/testing_wetlab_configuration.py index 1afae76..4297a6f 100644 --- a/utils/testing_wetlab_configuration.py +++ b/utils/testing_wetlab_configuration.py @@ -140,6 +140,11 @@ def folder_run_exists (conn, folder_run_name): return conn def create_project (p_name, run_name, bs_file): + + if not LibraryKit.objects.filter(libraryName__exact = 'Nextera XT Index Kit v2 Set B').exists() : + new_lib_kit = LibraryKit(libraryName = 'Nextera XT Index Kit v2 Set B') + new_lib_kit.save() + n_project = Projects( runprocess_id = RunProcess.objects.get(runName__exact = run_name), LibraryKit_id = LibraryKit.objects.get(libraryName__exact = 'Nextera XT Index Kit v2 Set B'), projectName = p_name , libraryKit='Nextera XT V2 ', baseSpaceFile = bs_file, From 27a057dddf2ed83986f73add1e06fee7135002d7 Mon Sep 17 00:00:00 2001 From: luissian Date: Tue, 28 May 2019 23:29:40 +0200 Subject: [PATCH 10/12] Fixing bug when run does not have a valid machine name --- utils/miseq_run_functions.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/utils/miseq_run_functions.py b/utils/miseq_run_functions.py index 83eaf35..db542ed 100644 --- a/utils/miseq_run_functions.py +++ b/utils/miseq_run_functions.py @@ -261,6 +261,7 @@ def save_new_miseq_run ( experiment_name, run_date, instrument) : ''' logger = logging.getLogger(__name__) logger.debug('Executing the function save_new_miseq_run' ) + logger.info('Saving new Run %s into database', experiment_name) ## create a new entry on runProcess database if Center.objects.filter(centerAbbr__exact = wetlab_config.DEFAULT_CENTER).exists(): center_requested_by = Center.objects.get(centerAbbr__exact = wetlab_config.DEFAULT_CENTER) @@ -276,7 +277,9 @@ def save_new_miseq_run ( experiment_name, run_date, instrument) : logger.info('Updated the run date and sequencer used for the runProcess table ') else: string_message = instrument + ' has been not defined on machines ' - logging_errors(string_message, False, False) + logging_errors(string_message, False, True) + logger.debug('Exiting the function save_new_miseq_run with error' ) + raise ValueError ('Unable to find machine ') run_state = RunStates.objects.get(runStateName__exact = 'Recorded') run_process = RunProcess(runName=experiment_name,sampleSheet= '', @@ -490,6 +493,7 @@ def manage_miseq_in_processing_run (conn, run_name): logger = logging.getLogger(__name__) logger.debug ('Starting function manage_miseq_in_processing_run') experiment_name = run_name.get_run_name() + logger.info('Run %s in processing run', experiment_name) run_folder = RunningParameters.objects.get(runName_id = run_name).get_run_folder() log_folder = os.path.join(wetlab_config.SAMBA_APPLICATION_FOLDER_NAME, run_folder, wetlab_config.RUN_LOG_FOLDER) try: # waiting for sequencer run completion @@ -506,6 +510,7 @@ def manage_miseq_in_processing_run (conn, run_name): run_updated = run_name.set_run_state('Processed Run') run_name.run_finish_date = run_completion_date run_name.save() + logger.info('Run %s updated to processed run', experiment_name) logger.debug ('End function manage_miseq_in_processing_run %s' , experiment_name) return experiment_name except ValueError : @@ -614,6 +619,7 @@ def handle_miseq_run (conn, new_run, l_run_parameter, experiment_name) : ''' logger = logging.getLogger(__name__) logger.debug ('Starting function for handling miSeq run') + logger.info('Fetching info from Folder name %s', new_run) # Fetch run info from remote server l_run_info = os.path.join(wetlab_config.RUN_TEMP_DIRECTORY, wetlab_config.RUN_INFO) s_run_info = os.path.join(wetlab_config.SAMBA_APPLICATION_FOLDER_NAME, new_run,wetlab_config.RUN_INFO) @@ -632,8 +638,17 @@ def handle_miseq_run (conn, new_run, l_run_parameter, experiment_name) : running_parameters, run_date, instrument = miseq_parsing_run_information(l_run_info, l_run_parameter) if not RunProcess.objects.filter(runName__exact = experiment_name).exists(): # Save run data and set run to "Recorded" state - new_run_process = save_new_miseq_run (experiment_name, run_date, instrument) - logger.info ('New RunProcess %s was stored on database', experiment_name) + try: + new_run_process = save_new_miseq_run (experiment_name, run_date, instrument) + logger.info ('New RunProcess %s was stored on database', experiment_name) + except Exception as e : + logging_errors(string_message, True, False) + logger.info('Skiping the run %s , due to the error on saving new run ', new_run) + # deleting temporary copy of RunParameter and RunInfo files + os.remove(l_run_parameter) + os.remove(l_run_info) + logger.info('Deleted RunParameter and RunInfo files') + raise ValueError ('Error when saving new Run in DDBB') # returning to handle next run folder else : new_run_process = RunProcess.objects.get(runName__exact = experiment_name) # Update the running parameter table with the information From fb3199afc32da23a565b4a804679e933f51669c8 Mon Sep 17 00:00:00 2001 From: saramonzon Date: Wed, 29 May 2019 12:39:37 +0200 Subject: [PATCH 11/12] Fix bug when completion file not found for nextSeq run --- cron.py | 6 +++--- utils/nextseq_run_functions.py | 3 ++- utils/update_run_state.py | 14 +++++++------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cron.py b/cron.py index 119f8ff..0972608 100644 --- a/cron.py +++ b/cron.py @@ -2,7 +2,7 @@ from django.conf import settings #from django.contrib.auth.models import User -from .wetlab_config import * +from iSkyLIMS_wetlab import wetlab_config from .utils.update_run_state import search_update_new_runs, search_not_completed_run from .utils.generic_functions import open_log @@ -51,7 +51,7 @@ def looking_for_new_runs (): logger=open_log(config_file) logger.info('###########---Start Crontab-----############') logger.info('Start searching for new/updating runs') - + new_runs_updated, run_with_error = search_update_new_runs () logger.info('------- Printing summary for search_update_new_runs -----') if len (new_runs_updated) > 0: @@ -126,7 +126,7 @@ def delete_invalid_run (): print ('deleted run' , run_found) all_runs = RunProcess.objects.all() sample_sheet_valid_files = [] - + for run in all_runs: sample_sheet_valid_files.append(os.path.basename(run.get_sample_file())) sample_sheet_folder = os.path.join(settings.MEDIA_ROOT, os.path.dirname(run.get_sample_file())) diff --git a/utils/nextseq_run_functions.py b/utils/nextseq_run_functions.py index df4566f..34e0d08 100644 --- a/utils/nextseq_run_functions.py +++ b/utils/nextseq_run_functions.py @@ -228,7 +228,8 @@ def manage_nextseq_in_processing_run(conn, run_object_name) : except Exception as e: logger.info ('Completion status file still is not present on the run folder') logger.debug ('End function for handling manage_nextseq_in_processing_run waiting Completion file') - raise ValueError ( 'Completion file not present') + #raise Exception ( 'Completion file not present') + return finally : logger.info ('Deleting local copy of completion status') # cleaning up the completion in local temporary file diff --git a/utils/update_run_state.py b/utils/update_run_state.py index 4b328b3..cc64dd0 100644 --- a/utils/update_run_state.py +++ b/utils/update_run_state.py @@ -370,16 +370,16 @@ def search_not_completed_run (): logger.debug('End runs in Sample Sent state') elif state == 'Processing Run': - updated_run['Processing run'] = [] - runs_with_error['Processing run'] = [] + updated_run[state] = [] + runs_with_error[state] = [] logger.debug('Start handling the runs in Processing Run state') for run_in_processing_run in runs_to_handle[state] : run_platform = run_in_processing_run.get_run_platform() try: if 'Next-Seq' in run_platform : - updated_run['Processing run'].append(manage_nextseq_in_processing_run(conn, run_in_processing_run)) + updated_run[state].append(manage_nextseq_in_processing_run(conn, run_in_processing_run)) elif 'Mi-Seq' in run_platform : - updated_run['Processing run'].append(manage_miseq_in_processing_run(conn, run_in_processing_run)) + updated_run[state].append(manage_miseq_in_processing_run(conn, run_in_processing_run)) else: string_message = 'Platform ' + run_platform +' is not supported ' logging_errors (string_message , False, False) @@ -391,12 +391,12 @@ def search_not_completed_run (): logger.debug('End runs in Processing Run state') elif state == 'Processed Run': - updated_run['Processed run'] = [] - runs_with_error['Processed run'] = [] + updated_run[state] = [] + runs_with_error[state] = [] logger.debug('Start handling the runs in Processed Run state') for run_in_processed_run in runs_to_handle[state]: try: - updated_run['Processed run'].append(manage_run_in_processed_run(conn, run_in_processed_run)) + updated_run[state].append(manage_run_in_processed_run(conn, run_in_processed_run)) except : runs_with_error[state].append(run_in_processed_run.get_run_name()) logger.info('Handling the exception to continue with the next item') From f8b72355e6348837c2930833c9f8984bbf2881d8 Mon Sep 17 00:00:00 2001 From: luissian Date: Wed, 19 Jun 2019 18:40:02 +0200 Subject: [PATCH 12/12] fixing bug --- views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views.py b/views.py index ee43310..dffd3be 100644 --- a/views.py +++ b/views.py @@ -2923,9 +2923,9 @@ def configuration_test (request): return redirect ('/accounts/login') if request.method=='POST' and request.POST['action'] == 'basicTest': test_results = {} - wetlab_config = os.path.join(settings.BASE_DIR, 'iSkyLIMS_wetlab', 'wetlab_config.py') + wetlab_config_file = os.path.join(settings.BASE_DIR, 'iSkyLIMS_wetlab', 'wetlab_config.py') test_results['iSkyLIMS_settings'] = get_iSkyLIMS_settings() - test_results['config_file'] = get_config_file(wetlab_config) + test_results['config_file'] = get_config_file(wetlab_config_file) test_results['attr_files'] = get_files_attribute(os.path.join(settings.MEDIA_ROOT, 'wetlab')) test_results['database_access'] = check_access_database() test_results['samba_connection'] = check_samba_connection()