From 74f4ba3d6ba45f7dd3b7615f64ad4b4045e287d1 Mon Sep 17 00:00:00 2001 From: Bryan Crossman Date: Tue, 23 May 2023 10:23:36 -0500 Subject: [PATCH] Reorganizing into WagonDB and EngineDB web interfaces --- .../add_test_functions.cpython-36.pyc | Bin 0 -> 12541 bytes .../EngineDB/__pycache__/base.cpython-36.pyc | Bin 0 -> 9478 bytes .../__pycache__/connect.cpython-36.pyc | Bin 0 -> 985 bytes .../__pycache__/generic_hist.cpython-36.pyc | Bin 0 -> 1561 bytes .../__pycache__/get_attach.cpython-36.pyc | Bin 0 -> 1620 bytes .../__pycache__/home_page_list.cpython-36.pyc | Bin 0 -> 7397 bytes .../module_functions.cpython-36.pyc | Bin 0 -> 8254 bytes .../__pycache__/settings.cpython-36.pyc | Bin 0 -> 424 bytes .../summary_functions.cpython-36.pyc | Bin 0 -> 2186 bytes cgi-bin/EngineDB/add_board_info.py | 30 + cgi-bin/EngineDB/add_board_info2.py | 32 + cgi-bin/EngineDB/add_init_test.py | 30 + cgi-bin/EngineDB/add_module.py | 25 + cgi-bin/EngineDB/add_module2.py | 71 + cgi-bin/EngineDB/add_new_test_template.py | 17 + cgi-bin/EngineDB/add_new_test_template2.py | 27 + cgi-bin/EngineDB/add_new_user_ID.py | 16 + cgi-bin/EngineDB/add_test.py | 22 + cgi-bin/EngineDB/add_test2.py | 49 + cgi-bin/EngineDB/add_test_functions.py | 517 +++ cgi-bin/EngineDB/add_test_functions.pyc | Bin 0 -> 9857 bytes cgi-bin/EngineDB/add_test_json.py | 165 + cgi-bin/EngineDB/add_tester.py | 16 + cgi-bin/EngineDB/add_tester2.py | 26 + cgi-bin/EngineDB/analytics.py | 177 + cgi-bin/EngineDB/base.py | 256 ++ cgi-bin/EngineDB/base.pyc | Bin 0 -> 9693 bytes cgi-bin/EngineDB/bert_analytics.py | 120 + cgi-bin/EngineDB/board_check_functions.py | 194 + cgi-bin/EngineDB/board_check_functions.pyc | Bin 0 -> 3717 bytes cgi-bin/EngineDB/board_checkin.py | 25 + cgi-bin/EngineDB/board_checkin2.py | 24 + cgi-bin/EngineDB/board_checkout.py | 24 + cgi-bin/EngineDB/board_checkout2.py | 30 + cgi-bin/EngineDB/check_sn.py | 74 + cgi-bin/EngineDB/checkout_summary.py | 83 + cgi-bin/EngineDB/connect.py | 47 + cgi-bin/EngineDB/connect.pyc | Bin 0 -> 1353 bytes cgi-bin/EngineDB/dump.sql | 236 ++ cgi-bin/EngineDB/gen_res_analytics.py | 174 + cgi-bin/EngineDB/get_attach.py | 60 + cgi-bin/EngineDB/get_attach.pyc | Bin 0 -> 1938 bytes cgi-bin/EngineDB/get_previous_test_results.py | 30 + .../EngineDB/get_test_completion_status.py | 23 + cgi-bin/EngineDB/get_test_types.py | 23 + cgi-bin/EngineDB/get_usernames.py | 23 + cgi-bin/EngineDB/home_page.py | 58 + cgi-bin/EngineDB/home_page_list.py | 221 ++ cgi-bin/EngineDB/home_page_list.pyc | Bin 0 -> 7937 bytes cgi-bin/EngineDB/id_res_analytics.py | 158 + cgi-bin/EngineDB/iic_analytics.py | 159 + cgi-bin/EngineDB/is_new_board.py | 36 + cgi-bin/EngineDB/loadDBInfo.py | 97 + cgi-bin/EngineDB/module.py | 37 + cgi-bin/EngineDB/module_functions.py | 250 ++ cgi-bin/EngineDB/module_functions.pyc | Bin 0 -> 9107 bytes cgi-bin/EngineDB/password_entry.py | 40 + cgi-bin/EngineDB/password_entry2.py | 50 + cgi-bin/EngineDB/publish.py | 54 + cgi-bin/EngineDB/revoke_success.py | 23 + cgi-bin/EngineDB/revoke_success2.py | 31 + cgi-bin/EngineDB/settings.py | 7 + cgi-bin/EngineDB/settings.pyc | Bin 0 -> 532 bytes cgi-bin/EngineDB/static/config.json | 408 ++ .../EngineDB/static/css/bootstrap-theme.css | 479 +++ .../static/css/bootstrap-theme.min.css | 10 + cgi-bin/EngineDB/static/css/bootstrap.css | 3489 +++++++++++++++++ cgi-bin/EngineDB/static/css/bootstrap.min.css | 10 + cgi-bin/EngineDB/static/css/style.css | 29 + cgi-bin/EngineDB/static/files/Thumbs.db | Bin 0 -> 45568 bytes cgi-bin/EngineDB/static/files/cmslogo.jpg | Bin 0 -> 16540 bytes cgi-bin/EngineDB/static/files/goldy.pdf | Bin 0 -> 33476 bytes cgi-bin/EngineDB/static/files/goldy2.png | Bin 0 -> 17240 bytes cgi-bin/EngineDB/static/files/us-cms.gif | Bin 0 -> 12642 bytes cgi-bin/EngineDB/static/js/bootstrap.js | 2309 +++++++++++ cgi-bin/EngineDB/static/js/bootstrap.min.js | 12 + cgi-bin/EngineDB/summary.py | 83 + cgi-bin/EngineDB/summary_functions.py | 80 + cgi-bin/EngineDB/summary_functions.pyc | Bin 0 -> 2633 bytes cgi-bin/EngineDB/test.py | 7 + cgi-bin/EngineDB/test2.html | 194 + cgi-bin/EngineDB/testers.py | 75 + cgi-bin/EngineDB/verify_person.py | 28 + cgi-bin/WagonDB/Attachments.csv | 0 cgi-bin/WagonDB/BitErrorRateData.py | 144 + cgi-bin/WagonDB/Bit_Error_Rate_EyeOpening.png | Bin 0 -> 22388 bytes cgi-bin/WagonDB/Bit_Error_Rate_Midpoint.png | Bin 0 -> 21075 bytes cgi-bin/WagonDB/Bit_Error_Rate_Test_Data.csv | 321 ++ cgi-bin/WagonDB/Board.csv | 16 + cgi-bin/WagonDB/I2CData.py | 87 + cgi-bin/WagonDB/I2C_ReadWrite.png | Bin 0 -> 16477 bytes cgi-bin/WagonDB/I2C_ReadWrite_Test_Data.csv | 43 + cgi-bin/WagonDB/IDResistorData.py | 68 + cgi-bin/WagonDB/ID_Resistor.png | Bin 0 -> 19014 bytes cgi-bin/WagonDB/ID_Resistor_Data.png | Bin 0 -> 18872 bytes cgi-bin/WagonDB/ID_Resistor_Test_Data.csv | 61 + cgi-bin/WagonDB/RM_RTD_VMON.png | Bin 0 -> 21471 bytes cgi-bin/WagonDB/ResistanceMeasurementData.py | 149 + cgi-bin/WagonDB/Resistance_Measurement.csv | 78 + cgi-bin/WagonDB/Resistance_Measurement.png | Bin 0 -> 16776 bytes cgi-bin/WagonDB/Test.csv | 220 ++ .../add_test_functions.cpython-36.pyc | Bin 0 -> 11674 bytes .../WagonDB/__pycache__/base.cpython-36.pyc | Bin 0 -> 9836 bytes .../__pycache__/connect.cpython-36.pyc | Bin 0 -> 978 bytes .../__pycache__/generic_hist.cpython-36.pyc | Bin 0 -> 1561 bytes .../__pycache__/get_attach.cpython-36.pyc | Bin 0 -> 1628 bytes .../__pycache__/home_page_list.cpython-36.pyc | Bin 0 -> 7432 bytes .../__pycache__/makePlots.cpython-36.pyc | Bin 0 -> 4699 bytes .../module_functions.cpython-36.pyc | Bin 0 -> 8234 bytes .../__pycache__/settings.cpython-36.pyc | Bin 0 -> 415 bytes .../summary_functions.cpython-36.pyc | Bin 0 -> 2186 bytes cgi-bin/WagonDB/add_board_info.py | 30 + cgi-bin/WagonDB/add_board_info2.py | 32 + cgi-bin/WagonDB/add_init_test.py | 30 + cgi-bin/WagonDB/add_module.py | 25 + cgi-bin/WagonDB/add_module2.py | 71 + cgi-bin/WagonDB/add_new_test_template.py | 17 + cgi-bin/WagonDB/add_new_test_template2.py | 27 + cgi-bin/WagonDB/add_new_user_ID.py | 16 + cgi-bin/WagonDB/add_test.py | 22 + cgi-bin/WagonDB/add_test2.py | 49 + cgi-bin/WagonDB/add_test_functions.py | 480 +++ cgi-bin/WagonDB/add_test_functions.pyc | Bin 0 -> 9857 bytes cgi-bin/WagonDB/add_test_json.py | 165 + cgi-bin/WagonDB/add_tester.py | 16 + cgi-bin/WagonDB/add_tester2.py | 26 + cgi-bin/WagonDB/analytics.py | 177 + cgi-bin/WagonDB/base.py | 256 ++ cgi-bin/WagonDB/base.pyc | Bin 0 -> 9693 bytes cgi-bin/WagonDB/bert_analytics.py | 120 + cgi-bin/WagonDB/board_check_functions.py | 194 + cgi-bin/WagonDB/board_check_functions.pyc | Bin 0 -> 3717 bytes cgi-bin/WagonDB/board_checkin.py | 25 + cgi-bin/WagonDB/board_checkin2.py | 24 + cgi-bin/WagonDB/board_checkout.py | 24 + cgi-bin/WagonDB/board_checkout2.py | 30 + cgi-bin/WagonDB/check_sn.py | 74 + cgi-bin/WagonDB/checkout_summary.py | 83 + cgi-bin/WagonDB/connect.py | 47 + cgi-bin/WagonDB/connect.pyc | Bin 0 -> 1342 bytes cgi-bin/WagonDB/dump.sql | 236 ++ cgi-bin/WagonDB/gen_res_analytics.py | 174 + cgi-bin/WagonDB/get_attach.py | 60 + cgi-bin/WagonDB/get_attach.pyc | Bin 0 -> 1938 bytes cgi-bin/WagonDB/get_previous_test_results.py | 30 + cgi-bin/WagonDB/get_test_completion_status.py | 23 + cgi-bin/WagonDB/get_test_types.py | 23 + cgi-bin/WagonDB/get_usernames.py | 23 + cgi-bin/WagonDB/home_page.py | 58 + cgi-bin/WagonDB/home_page_list.py | 222 ++ cgi-bin/WagonDB/home_page_list.pyc | Bin 0 -> 7937 bytes cgi-bin/WagonDB/id_res_analytics.py | 158 + cgi-bin/WagonDB/iic_analytics.py | 159 + cgi-bin/WagonDB/is_new_board.py | 36 + cgi-bin/WagonDB/makePlots.py | 321 ++ cgi-bin/WagonDB/makeTestingData.py | 195 + cgi-bin/WagonDB/module.py | 37 + cgi-bin/WagonDB/module_functions.py | 250 ++ cgi-bin/WagonDB/module_functions.pyc | Bin 0 -> 9107 bytes cgi-bin/WagonDB/password_entry.py | 40 + cgi-bin/WagonDB/password_entry2.py | 50 + cgi-bin/WagonDB/plottingTest.py | 192 + cgi-bin/WagonDB/publish.py | 54 + cgi-bin/WagonDB/revoke_success.py | 23 + cgi-bin/WagonDB/revoke_success2.py | 31 + cgi-bin/WagonDB/settings.py | 7 + cgi-bin/WagonDB/settings.pyc | Bin 0 -> 532 bytes cgi-bin/WagonDB/static/config.json | 408 ++ .../WagonDB/static/css/bootstrap-theme.css | 479 +++ .../static/css/bootstrap-theme.min.css | 10 + cgi-bin/WagonDB/static/css/bootstrap.css | 3489 +++++++++++++++++ cgi-bin/WagonDB/static/css/bootstrap.min.css | 10 + cgi-bin/WagonDB/static/css/style.css | 29 + .../WagonDB/static/figures/ID_Resistor.png | Bin 0 -> 19014 bytes .../static/figures/Resistance_Measurement.png | Bin 0 -> 22937 bytes .../static/files/Bit_Error_Rate_Test_Data.csv | 321 ++ cgi-bin/WagonDB/static/files/Board.csv | 16 + .../static/files/I2C_ReadWrite_Test_Data.csv | 43 + .../static/files/ID_Resistor_Test_Data.csv | 61 + cgi-bin/WagonDB/static/files/People.csv | 11 + .../static/files/Resistance_Measurement.csv | 78 + .../static/files/Resistance_Measurement.png | Bin 0 -> 22934 bytes cgi-bin/WagonDB/static/files/Test.csv | 220 ++ .../WagonDB/static/files/TestsOverTime.png | Bin 0 -> 21845 bytes cgi-bin/WagonDB/static/files/Thumbs.db | Bin 0 -> 45568 bytes cgi-bin/WagonDB/static/files/cmslogo.jpg | Bin 0 -> 16540 bytes cgi-bin/WagonDB/static/files/goldy.pdf | Bin 0 -> 33476 bytes cgi-bin/WagonDB/static/files/goldy2.png | Bin 0 -> 17240 bytes cgi-bin/WagonDB/static/files/us-cms.gif | Bin 0 -> 12642 bytes cgi-bin/WagonDB/static/js/bootstrap.js | 2309 +++++++++++ cgi-bin/WagonDB/static/js/bootstrap.min.js | 12 + cgi-bin/WagonDB/summary.py | 83 + cgi-bin/WagonDB/summary_functions.py | 80 + cgi-bin/WagonDB/summary_functions.pyc | Bin 0 -> 2633 bytes cgi-bin/WagonDB/summary_plots.py | 39 + cgi-bin/WagonDB/test.html | 141 + cgi-bin/WagonDB/test.png | Bin 0 -> 7424 bytes cgi-bin/WagonDB/test.py | 7 + cgi-bin/WagonDB/test2.html | 194 + cgi-bin/WagonDB/testdata.py | 68 + cgi-bin/WagonDB/testers.py | 75 + cgi-bin/WagonDB/tests_over_time.png | Bin 0 -> 22182 bytes cgi-bin/WagonDB/tests_over_time_SN.png | Bin 0 -> 19778 bytes .../tests_over_time_SN320WW20A1000005.png | Bin 0 -> 23313 bytes cgi-bin/WagonDB/tests_over_time_SubType.png | Bin 0 -> 24801 bytes .../WagonDB/tests_over_time_SubTypeWW20A1.png | Bin 0 -> 24801 bytes cgi-bin/WagonDB/tests_over_time_Tester1.png | Bin 0 -> 22871 bytes cgi-bin/WagonDB/tests_over_time_Tester2.png | Bin 0 -> 18573 bytes .../WagonDB/tests_over_time_TesterBryan.png | Bin 0 -> 24377 bytes cgi-bin/WagonDB/verify_person.py | 28 + 210 files changed, 24960 insertions(+) create mode 100644 cgi-bin/EngineDB/__pycache__/add_test_functions.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/base.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/connect.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/generic_hist.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/get_attach.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/home_page_list.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/module_functions.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/settings.cpython-36.pyc create mode 100644 cgi-bin/EngineDB/__pycache__/summary_functions.cpython-36.pyc create mode 100755 cgi-bin/EngineDB/add_board_info.py create mode 100755 cgi-bin/EngineDB/add_board_info2.py create mode 100755 cgi-bin/EngineDB/add_init_test.py create mode 100755 cgi-bin/EngineDB/add_module.py create mode 100755 cgi-bin/EngineDB/add_module2.py create mode 100755 cgi-bin/EngineDB/add_new_test_template.py create mode 100755 cgi-bin/EngineDB/add_new_test_template2.py create mode 100644 cgi-bin/EngineDB/add_new_user_ID.py create mode 100755 cgi-bin/EngineDB/add_test.py create mode 100755 cgi-bin/EngineDB/add_test2.py create mode 100755 cgi-bin/EngineDB/add_test_functions.py create mode 100644 cgi-bin/EngineDB/add_test_functions.pyc create mode 100755 cgi-bin/EngineDB/add_test_json.py create mode 100755 cgi-bin/EngineDB/add_tester.py create mode 100755 cgi-bin/EngineDB/add_tester2.py create mode 100755 cgi-bin/EngineDB/analytics.py create mode 100755 cgi-bin/EngineDB/base.py create mode 100644 cgi-bin/EngineDB/base.pyc create mode 100755 cgi-bin/EngineDB/bert_analytics.py create mode 100755 cgi-bin/EngineDB/board_check_functions.py create mode 100644 cgi-bin/EngineDB/board_check_functions.pyc create mode 100755 cgi-bin/EngineDB/board_checkin.py create mode 100755 cgi-bin/EngineDB/board_checkin2.py create mode 100755 cgi-bin/EngineDB/board_checkout.py create mode 100755 cgi-bin/EngineDB/board_checkout2.py create mode 100755 cgi-bin/EngineDB/check_sn.py create mode 100755 cgi-bin/EngineDB/checkout_summary.py create mode 100755 cgi-bin/EngineDB/connect.py create mode 100644 cgi-bin/EngineDB/connect.pyc create mode 100644 cgi-bin/EngineDB/dump.sql create mode 100755 cgi-bin/EngineDB/gen_res_analytics.py create mode 100755 cgi-bin/EngineDB/get_attach.py create mode 100644 cgi-bin/EngineDB/get_attach.pyc create mode 100755 cgi-bin/EngineDB/get_previous_test_results.py create mode 100755 cgi-bin/EngineDB/get_test_completion_status.py create mode 100755 cgi-bin/EngineDB/get_test_types.py create mode 100755 cgi-bin/EngineDB/get_usernames.py create mode 100755 cgi-bin/EngineDB/home_page.py create mode 100755 cgi-bin/EngineDB/home_page_list.py create mode 100644 cgi-bin/EngineDB/home_page_list.pyc create mode 100755 cgi-bin/EngineDB/id_res_analytics.py create mode 100755 cgi-bin/EngineDB/iic_analytics.py create mode 100755 cgi-bin/EngineDB/is_new_board.py create mode 100755 cgi-bin/EngineDB/loadDBInfo.py create mode 100755 cgi-bin/EngineDB/module.py create mode 100755 cgi-bin/EngineDB/module_functions.py create mode 100644 cgi-bin/EngineDB/module_functions.pyc create mode 100755 cgi-bin/EngineDB/password_entry.py create mode 100755 cgi-bin/EngineDB/password_entry2.py create mode 100755 cgi-bin/EngineDB/publish.py create mode 100755 cgi-bin/EngineDB/revoke_success.py create mode 100755 cgi-bin/EngineDB/revoke_success2.py create mode 100755 cgi-bin/EngineDB/settings.py create mode 100644 cgi-bin/EngineDB/settings.pyc create mode 100644 cgi-bin/EngineDB/static/config.json create mode 100644 cgi-bin/EngineDB/static/css/bootstrap-theme.css create mode 100644 cgi-bin/EngineDB/static/css/bootstrap-theme.min.css create mode 100644 cgi-bin/EngineDB/static/css/bootstrap.css create mode 100644 cgi-bin/EngineDB/static/css/bootstrap.min.css create mode 100644 cgi-bin/EngineDB/static/css/style.css create mode 100644 cgi-bin/EngineDB/static/files/Thumbs.db create mode 100644 cgi-bin/EngineDB/static/files/cmslogo.jpg create mode 100644 cgi-bin/EngineDB/static/files/goldy.pdf create mode 100644 cgi-bin/EngineDB/static/files/goldy2.png create mode 100644 cgi-bin/EngineDB/static/files/us-cms.gif create mode 100644 cgi-bin/EngineDB/static/js/bootstrap.js create mode 100644 cgi-bin/EngineDB/static/js/bootstrap.min.js create mode 100755 cgi-bin/EngineDB/summary.py create mode 100755 cgi-bin/EngineDB/summary_functions.py create mode 100644 cgi-bin/EngineDB/summary_functions.pyc create mode 100755 cgi-bin/EngineDB/test.py create mode 100644 cgi-bin/EngineDB/test2.html create mode 100755 cgi-bin/EngineDB/testers.py create mode 100755 cgi-bin/EngineDB/verify_person.py create mode 100644 cgi-bin/WagonDB/Attachments.csv create mode 100755 cgi-bin/WagonDB/BitErrorRateData.py create mode 100644 cgi-bin/WagonDB/Bit_Error_Rate_EyeOpening.png create mode 100644 cgi-bin/WagonDB/Bit_Error_Rate_Midpoint.png create mode 100644 cgi-bin/WagonDB/Bit_Error_Rate_Test_Data.csv create mode 100644 cgi-bin/WagonDB/Board.csv create mode 100755 cgi-bin/WagonDB/I2CData.py create mode 100644 cgi-bin/WagonDB/I2C_ReadWrite.png create mode 100644 cgi-bin/WagonDB/I2C_ReadWrite_Test_Data.csv create mode 100755 cgi-bin/WagonDB/IDResistorData.py create mode 100644 cgi-bin/WagonDB/ID_Resistor.png create mode 100644 cgi-bin/WagonDB/ID_Resistor_Data.png create mode 100644 cgi-bin/WagonDB/ID_Resistor_Test_Data.csv create mode 100644 cgi-bin/WagonDB/RM_RTD_VMON.png create mode 100755 cgi-bin/WagonDB/ResistanceMeasurementData.py create mode 100644 cgi-bin/WagonDB/Resistance_Measurement.csv create mode 100644 cgi-bin/WagonDB/Resistance_Measurement.png create mode 100644 cgi-bin/WagonDB/Test.csv create mode 100644 cgi-bin/WagonDB/__pycache__/add_test_functions.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/base.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/connect.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/generic_hist.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/get_attach.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/home_page_list.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/makePlots.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/module_functions.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/settings.cpython-36.pyc create mode 100644 cgi-bin/WagonDB/__pycache__/summary_functions.cpython-36.pyc create mode 100755 cgi-bin/WagonDB/add_board_info.py create mode 100755 cgi-bin/WagonDB/add_board_info2.py create mode 100755 cgi-bin/WagonDB/add_init_test.py create mode 100755 cgi-bin/WagonDB/add_module.py create mode 100755 cgi-bin/WagonDB/add_module2.py create mode 100755 cgi-bin/WagonDB/add_new_test_template.py create mode 100755 cgi-bin/WagonDB/add_new_test_template2.py create mode 100644 cgi-bin/WagonDB/add_new_user_ID.py create mode 100755 cgi-bin/WagonDB/add_test.py create mode 100755 cgi-bin/WagonDB/add_test2.py create mode 100755 cgi-bin/WagonDB/add_test_functions.py create mode 100644 cgi-bin/WagonDB/add_test_functions.pyc create mode 100755 cgi-bin/WagonDB/add_test_json.py create mode 100755 cgi-bin/WagonDB/add_tester.py create mode 100755 cgi-bin/WagonDB/add_tester2.py create mode 100755 cgi-bin/WagonDB/analytics.py create mode 100755 cgi-bin/WagonDB/base.py create mode 100644 cgi-bin/WagonDB/base.pyc create mode 100755 cgi-bin/WagonDB/bert_analytics.py create mode 100755 cgi-bin/WagonDB/board_check_functions.py create mode 100644 cgi-bin/WagonDB/board_check_functions.pyc create mode 100755 cgi-bin/WagonDB/board_checkin.py create mode 100755 cgi-bin/WagonDB/board_checkin2.py create mode 100755 cgi-bin/WagonDB/board_checkout.py create mode 100755 cgi-bin/WagonDB/board_checkout2.py create mode 100755 cgi-bin/WagonDB/check_sn.py create mode 100755 cgi-bin/WagonDB/checkout_summary.py create mode 100755 cgi-bin/WagonDB/connect.py create mode 100644 cgi-bin/WagonDB/connect.pyc create mode 100644 cgi-bin/WagonDB/dump.sql create mode 100755 cgi-bin/WagonDB/gen_res_analytics.py create mode 100755 cgi-bin/WagonDB/get_attach.py create mode 100644 cgi-bin/WagonDB/get_attach.pyc create mode 100755 cgi-bin/WagonDB/get_previous_test_results.py create mode 100755 cgi-bin/WagonDB/get_test_completion_status.py create mode 100755 cgi-bin/WagonDB/get_test_types.py create mode 100755 cgi-bin/WagonDB/get_usernames.py create mode 100755 cgi-bin/WagonDB/home_page.py create mode 100755 cgi-bin/WagonDB/home_page_list.py create mode 100644 cgi-bin/WagonDB/home_page_list.pyc create mode 100755 cgi-bin/WagonDB/id_res_analytics.py create mode 100755 cgi-bin/WagonDB/iic_analytics.py create mode 100755 cgi-bin/WagonDB/is_new_board.py create mode 100755 cgi-bin/WagonDB/makePlots.py create mode 100644 cgi-bin/WagonDB/makeTestingData.py create mode 100755 cgi-bin/WagonDB/module.py create mode 100755 cgi-bin/WagonDB/module_functions.py create mode 100644 cgi-bin/WagonDB/module_functions.pyc create mode 100755 cgi-bin/WagonDB/password_entry.py create mode 100755 cgi-bin/WagonDB/password_entry2.py create mode 100644 cgi-bin/WagonDB/plottingTest.py create mode 100755 cgi-bin/WagonDB/publish.py create mode 100755 cgi-bin/WagonDB/revoke_success.py create mode 100755 cgi-bin/WagonDB/revoke_success2.py create mode 100755 cgi-bin/WagonDB/settings.py create mode 100644 cgi-bin/WagonDB/settings.pyc create mode 100644 cgi-bin/WagonDB/static/config.json create mode 100644 cgi-bin/WagonDB/static/css/bootstrap-theme.css create mode 100644 cgi-bin/WagonDB/static/css/bootstrap-theme.min.css create mode 100644 cgi-bin/WagonDB/static/css/bootstrap.css create mode 100644 cgi-bin/WagonDB/static/css/bootstrap.min.css create mode 100644 cgi-bin/WagonDB/static/css/style.css create mode 100755 cgi-bin/WagonDB/static/figures/ID_Resistor.png create mode 100755 cgi-bin/WagonDB/static/figures/Resistance_Measurement.png create mode 100644 cgi-bin/WagonDB/static/files/Bit_Error_Rate_Test_Data.csv create mode 100644 cgi-bin/WagonDB/static/files/Board.csv create mode 100644 cgi-bin/WagonDB/static/files/I2C_ReadWrite_Test_Data.csv create mode 100644 cgi-bin/WagonDB/static/files/ID_Resistor_Test_Data.csv create mode 100644 cgi-bin/WagonDB/static/files/People.csv create mode 100644 cgi-bin/WagonDB/static/files/Resistance_Measurement.csv create mode 100644 cgi-bin/WagonDB/static/files/Resistance_Measurement.png create mode 100644 cgi-bin/WagonDB/static/files/Test.csv create mode 100644 cgi-bin/WagonDB/static/files/TestsOverTime.png create mode 100644 cgi-bin/WagonDB/static/files/Thumbs.db create mode 100644 cgi-bin/WagonDB/static/files/cmslogo.jpg create mode 100644 cgi-bin/WagonDB/static/files/goldy.pdf create mode 100644 cgi-bin/WagonDB/static/files/goldy2.png create mode 100644 cgi-bin/WagonDB/static/files/us-cms.gif create mode 100644 cgi-bin/WagonDB/static/js/bootstrap.js create mode 100644 cgi-bin/WagonDB/static/js/bootstrap.min.js create mode 100755 cgi-bin/WagonDB/summary.py create mode 100755 cgi-bin/WagonDB/summary_functions.py create mode 100644 cgi-bin/WagonDB/summary_functions.pyc create mode 100644 cgi-bin/WagonDB/summary_plots.py create mode 100644 cgi-bin/WagonDB/test.html create mode 100644 cgi-bin/WagonDB/test.png create mode 100755 cgi-bin/WagonDB/test.py create mode 100644 cgi-bin/WagonDB/test2.html create mode 100755 cgi-bin/WagonDB/testdata.py create mode 100755 cgi-bin/WagonDB/testers.py create mode 100644 cgi-bin/WagonDB/tests_over_time.png create mode 100644 cgi-bin/WagonDB/tests_over_time_SN.png create mode 100644 cgi-bin/WagonDB/tests_over_time_SN320WW20A1000005.png create mode 100644 cgi-bin/WagonDB/tests_over_time_SubType.png create mode 100644 cgi-bin/WagonDB/tests_over_time_SubTypeWW20A1.png create mode 100644 cgi-bin/WagonDB/tests_over_time_Tester1.png create mode 100644 cgi-bin/WagonDB/tests_over_time_Tester2.png create mode 100644 cgi-bin/WagonDB/tests_over_time_TesterBryan.png create mode 100755 cgi-bin/WagonDB/verify_person.py diff --git a/cgi-bin/EngineDB/__pycache__/add_test_functions.cpython-36.pyc b/cgi-bin/EngineDB/__pycache__/add_test_functions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cf8ff708a7d54b126664b8fddbdc38ce2d4607d GIT binary patch literal 12541 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/__pycache__/base.cpython-36.pyc b/cgi-bin/EngineDB/__pycache__/base.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb2958b4d0e5714859a5285e3c9d9c4a9e54642d GIT binary patch literal 9478 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/__pycache__/connect.cpython-36.pyc b/cgi-bin/EngineDB/__pycache__/connect.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..131eea86f096e2a2991f1b44b92cb128b7920237 GIT binary patch literal 985 zcma)5&2AGh5Vm)njk8Ul;(~+_XCgtiQVU3^LM;UW63PL@WiQdjUM1V^+QHrxDr&jF zl?UOKe1%J2feXwyn=}*-IP%P7#`E{h?CxL?Klt@SJYs}=CmSaK`2eoH2SgG{OOjF< z$nXnE1Ic6ucqk*;1VTl-;!Z`0Ul&5C^9%0DS~?h*B$^lgJ>s#xl@y4dK_R( z$?EVkk)5yXoPsq1>;Br>{lkhG`1k^YyI!e9R?fAp)9vSKR;c{h(^tyorp`?ozkG3Y z_}XZ3Vu#EzeC1dJM#mSKwI8&Rj?1jhrWq(P-er(Cc_!b1792a(seNC%p3q9=qSnTB zThVRJ@_Hht6O~o@Fi1nyR4#6fg;w8)89>yZ50kmB@NJZgN=?Yj4--0;z15Q$Ot1Fn-E^4 zgH`rJSrux?4D13inA+gnOcw}fIm$gGSee;EZQvpgrZj!jVZTdq4J0>cyP0Gd_%^64 zJ|i2Qm~HqkP>BbpfY+}I=9Bas)&*(}#vk|Qb-j3;B%-oqHr*XHm0F6)r!}^J;pwXx zQpfz1uhiGa0it2jnDQ>9v)DPIjG7z3|EsK&uh3hk!hN^`g+~j&q{|E*zbL)#_iNN5 nrOgs%k1#^x3-R6?5q%pTVZL8!*_8Pc9Hd3Wc))M+K4-rH9kkH0 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/__pycache__/generic_hist.cpython-36.pyc b/cgi-bin/EngineDB/__pycache__/generic_hist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..547183016272b0d0e645088a165d0c86a8788f4c GIT binary patch literal 1561 zcmZ{k&yU+g6vt;g{uSrPX17b0-IlTx3Q8rCEpSAD1nRLIs6dKTMUH3I@z$~3@uW(& zlhgK^6DRl&_&2!m7a+|Q327z%0#3YVhcv6gNb{ZNH*aR%Jb&y@+wI`jgWo4Vx`g~e zcA5qDSJ2A=2q&DTWK@sz!Wyy4V~-qearTOgTyAp*Mvv3)NZ-ANHRN%GdthrohyBUd z(91tTG+kLSS+T`kO}-&ddn;SB3!-gKkBPR9$rYvKdFKbht(BwTJjFD-qT0C)Guk;M zD_6k^w2#Qjg9t~v+S3kaYqs*0d*NxOeawlwYnu}A_}t@uLV05id&6@>TRb?bPJ*X^ zH}Oocnm7C{-rD%vH&5Yh-dS7KiVokq*wfY(-9&b;2!%>P9lDP%{aMcEsW^QY|NIlS z-@fcqW0y)4j|`iHvd@e?NwU&-Tx4aUmd2kZrBcg6Kv;4qu3JzqTvN!rxb#lH57W6Q zP4I0L&1INHqI_~aszZF4t579*cG(*Yh9%n3@H|OHIefVq6j|KgH*Q!IBICx&3geuo zc`gl`B^gM#fJxXf7KRn6GB)O6+*HIE?=I4CB2wcn>(Nn(N+HEqCO8QvJ%c-x;R|t| z#Kt|(OJjHA{z4oO}!mhLFFI=!E+W zilw;~Nf9bB-t{}MS$PkHFx#?eKzq!lJ=&sOc0jwd10L)rtV`ub5EU_ug%&{fpjT-B z1qPta0Bw75uR{A|l8+f}LylsHlt?+gMZx8UUJb<@ff#+#oyA|FIfYj5r zZq#^lZ|!UV_jv;V54M0a-rNEFUyz%6*Wcpp8-Q=m;ehoP@GbxjpW7RN@BcU8)vJ3X zu||eT!TU^NfhGO}fQdZKrNp91AEZwu{vWnzODyRV*{r9K{{P2WwqaU!Q1(!|DElY} zD7R1!QQku7p&X$gfbtmS1m!l$9h7%K`hmQQHU^D?6sQ>|85axrE_zQ<-a|n?B{C!5 zNBIB+p{(UYu*}g0wQ@eWfg7%`akFaNPPVum?&4+vZVw=~@0$R=ry|W&noP|8Ya4(@ suW{?Ky0USy`K(yhbwOIIJ$7=dvaAyHKd=8!Ur@{lUxyEv`<8#_AEan@{{R30 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/__pycache__/get_attach.cpython-36.pyc b/cgi-bin/EngineDB/__pycache__/get_attach.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef60b23b519b02c8db3cfb6a55e08edae98768c4 GIT binary patch literal 1620 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 V!q7tmFNvkqA-Ze0o9-Q#{tGWGOaTA@ literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/add_board_info.py b/cgi-bin/EngineDB/add_board_info.py new file mode 100755 index 0000000..2bba12c --- /dev/null +++ b/cgi-bin/EngineDB/add_board_info.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list + +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +#card_id = form.getvalue('card_id') +serial_num = base.cleanCGInumber(form.getvalue('serial_num')) +board_id = base.cleanCGInumber(form.getvalue('board_id')) + +base.header(title='Add extra information about board') +base.top() + +home_page_list.add_board_info_form(serial_num, board_id) + +print('
') +print('
') +print('

List of All Boards

' ) +print('(Sorted by Serial Number)Successful Tests') +print('
') +print('
') + +home_page_list.render_list_module() + +base.bottom() + diff --git a/cgi-bin/EngineDB/add_board_info2.py b/cgi-bin/EngineDB/add_board_info2.py new file mode 100755 index 0000000..d796dd0 --- /dev/null +++ b/cgi-bin/EngineDB/add_board_info2.py @@ -0,0 +1,32 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import base +import module_functions +import os +import connect + +cgitb.enable() + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n"%(base_url)) +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +sn = base.cleanCGInumber(form.getvalue("serial_num")) +board_id = base.cleanCGInumber(form.getvalue("board_id")) +location = form.getvalue("location") +daqid = form.getvalue("daq_chip_id") +trig1id = form.getvalue("trigger_chip_1_id") +trig2id = form.getvalue("trigger_chip_2_id") +comments = cgi.escape(form.getvalue("comments")) + +base.header(title='Add Board Info') +base.top() + +module_functions.add_board_info(board_id, str(sn), location, daqid, trig1id, trig2id, comments) + +base.bottom() diff --git a/cgi-bin/EngineDB/add_init_test.py b/cgi-bin/EngineDB/add_init_test.py new file mode 100755 index 0000000..cbcca9a --- /dev/null +++ b/cgi-bin/EngineDB/add_init_test.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os + +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +label_applied = base.cleanCGInumber(form.getvalue("label_applied")) +database_entry = base.cleanCGInumber(form.getvalue("database_entry")) +label_legibility = base.cleanCGInumber(form.getvalue("label_legibility")) +power_cycle = base.cleanCGInumber(form.getvalue("power_cycle")) +tester = cgi.escape(form.getvalue("tester")) +serial_num = base.cleanCGInumber(form.getvalue("serial_num")) +comments = form.getvalue("comments") + +test_results = {"Label Applied": label_applied, "Database Entry": database_entry, "Label Legibility": label_legibility, "Power Cycle": power_cycle} + +if comments: + comments = cgi.escape(comments) + +base.header(title='Add Test') +base.top() + +test_id=add_test_functions.add_init_tests(serial_num, tester, test_results, comments) + +base.bottom() diff --git a/cgi-bin/EngineDB/add_module.py b/cgi-bin/EngineDB/add_module.py new file mode 100755 index 0000000..e8781fe --- /dev/null +++ b/cgi-bin/EngineDB/add_module.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Add a new module to HGCAL Wagon Test') +base.top() + +home_page_list.add_module_form() + +print('
') +print('
') +print('

List of All Boards

' ) +print('(Sorted by Serial Number)Successful Tests') +print('
') +print('
') + +home_page_list.render_list_module() + +base.bottom() + diff --git a/cgi-bin/EngineDB/add_module2.py b/cgi-bin/EngineDB/add_module2.py new file mode 100755 index 0000000..6fb7e22 --- /dev/null +++ b/cgi-bin/EngineDB/add_module2.py @@ -0,0 +1,71 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import connect +import os + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n" % base_url) + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Adding a new module...') +base.top() + +form = cgi.FieldStorage() + +if form.getvalue('serial_number'): + sn = (form.getvalue('serial_number')) + + home_page_list.add_module(sn) + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('') + print('
') + + print('

') + + + home_page_list.render_list_module() + + base.bottom() + + +else: + print('
') + print('
') + print('

FAILED. Enter SERIAL NUMBER

') + print('
') + print('
') + + home_page_list.add_module_form() + + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('
') + + print('

') + + home_page_list.render_list_module() + + base.bottom() + + + + diff --git a/cgi-bin/EngineDB/add_new_test_template.py b/cgi-bin/EngineDB/add_new_test_template.py new file mode 100755 index 0000000..f57dc2e --- /dev/null +++ b/cgi-bin/EngineDB/add_new_test_template.py @@ -0,0 +1,17 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import add_test_functions + + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Add New Test Template') +base.top() + +add_test_functions.add_new_test_template() + +base.bottom() diff --git a/cgi-bin/EngineDB/add_new_test_template2.py b/cgi-bin/EngineDB/add_new_test_template2.py new file mode 100755 index 0000000..da08347 --- /dev/null +++ b/cgi-bin/EngineDB/add_new_test_template2.py @@ -0,0 +1,27 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os +import connect + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n" % base_url) +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +test_name = cgi.escape(form.getvalue("test_name")) +required = base.cleanCGInumber(form.getvalue("required")) +test_desc_short = cgi.escape(form.getvalue("test_desc_short")) +test_desc_long = cgi.escape(form.getvalue("test_desc_long")) +password = cgi.escape(form.getvalue("password")) + +base.header(title='Add New Test Template') +base.top() + +test_id=add_test_functions.add_new_test(test_name, required, test_desc_short, test_desc_long, password) + +base.bottom() diff --git a/cgi-bin/EngineDB/add_new_user_ID.py b/cgi-bin/EngineDB/add_new_user_ID.py new file mode 100644 index 0000000..13968cf --- /dev/null +++ b/cgi-bin/EngineDB/add_new_user_ID.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +import cgi +import base +import module_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Add New User') +base.top() + +tests = module_functions.add_new_user_ID() + +base.bottom() diff --git a/cgi-bin/EngineDB/add_test.py b/cgi-bin/EngineDB/add_test.py new file mode 100755 index 0000000..d234a47 --- /dev/null +++ b/cgi-bin/EngineDB/add_test.py @@ -0,0 +1,22 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import add_test_functions + + +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +#card_id = form.getvalue('card_id') +serial_num = base.cleanCGInumber(form.getvalue('serial_num')) +suggested_test = base.cleanCGInumber(form.getvalue('suggested')) + +base.header(title='Add Test') +base.top() + +add_test_functions.add_test_template(serial_num, suggested_test) + +base.bottom() diff --git a/cgi-bin/EngineDB/add_test2.py b/cgi-bin/EngineDB/add_test2.py new file mode 100755 index 0000000..d2776ae --- /dev/null +++ b/cgi-bin/EngineDB/add_test2.py @@ -0,0 +1,49 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os +import connect + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n" % base_url) +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +person_id = base.cleanCGInumber(form.getvalue("person_id")) +test_type = base.cleanCGInumber(form.getvalue("test_type")) +serial_num = base.cleanCGInumber(form.getvalue("serial_number")) +success = base.cleanCGInumber(form.getvalue("success")) +comments = form.getvalue("comments") + +if comments: + comments = cgi.escape(comments) + +base.header(title='Add Test') +base.top() + +test_id=add_test_functions.add_test(person_id, test_type, serial_num, success, comments) + +for itest in [1]: + afile = form['attach%d'%(itest)] + if (afile.name): + adesc= form.getvalue("attachdesc%d"%(itest)) + if adesc: + adesc = cgi.escape(adesc) + acomment= form.getvalue("attachcomment%d"%(itest)) + if acomment: + acomment = cgi.escape(acomment) + add_test_functions.add_test_attachment(test_id,afile,adesc,acomment) + elif (afile.filename): + adesc= form.getvalue("attachdesc%d"%(itest)) + if adesc: + adesc = cgi.escape(adesc) + acomment= form.getvalue("attachcomment%d"%(itest)) + if acomment: + acomment = cgi.escape(acomment) + add_test_functions.add_test_attachment_gui(test_id,afile,adesc,acomment) + +base.bottom() diff --git a/cgi-bin/EngineDB/add_test_functions.py b/cgi-bin/EngineDB/add_test_functions.py new file mode 100755 index 0000000..e19e04c --- /dev/null +++ b/cgi-bin/EngineDB/add_test_functions.py @@ -0,0 +1,517 @@ +#!/usr/bin/python3 +from connect import connect, connect_admin +#import mysql.connector +import base +import cgi, os +import cgitb; cgitb.enable() +import settings +import json + + +# Adds a new user to the DB +def add_new_user_ID(): + pass + + + +# Returns the JSONs for a specified test ID +def get_test_attachments(test_ID): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT attach FROM Attachments,Test WHERE Attachments.test_id=Test.test_id AND Test.test_type_id={};".format(test_ID)) + + all_attachments = cur.fetchall() + + decoded_attachments = [] + for attachment in all_attachments: + decoded_attachments.append(json.loads(attachment[0].decode('UTF-8'))) + + return decoded_attachments + + +# Returns the datetime objects for all of the completed tests + # If issues, check if returning a tuple +def get_test_completion_times(): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT day FROM Test;") + + all_test_times = cur.fetchall() + + if not all_test_times: + print("Uh oh... there were no test times to be received") + + return all_test_times + + +# Returns the datetime objects for all of the successful tests + # If issues, check if returning a tuple +def get_successful_times(): + + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT day FROM Test WHERE successful = 1;") + successful_tests = cur.fetchall() + + if not successful_tests: + print("Uh oh... there were no successful test times to be received") + + return successful_tests + + +def verify_person(name): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT person_id FROM People WHERE person_name = '%s'"%name) + people = cur.fetchone() + + if not people: + print("Could not find tester") + return "INVALID_TESTER" + + else: + print(people) + return people + + +def is_new_board(serial_number): + db = connect(0) + cur = db.cursor() + + is_new_board_bool = False + + + cur.execute("SELECT board_id FROM Board WHERE full_id = {}".format(serial_number)) + board_matching_sn = cur.fetchone() + + if not board_matching_sn: + is_new_board_bool = True + + return is_new_board_bool + + + + + +def get_usernames(): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT person_name FROM People") + people = cur.fetchall() + + if not people: + print("Could not find any testers") + + else: + return people + + +def get_test_completion_status(serial_num): + db = connect(0) + cur = db.cursor() + + # TODO + cur.execute("SELECT board_id FROM Board WHERE full_id = %" %{"n":serial_num}) + board_ID = cur.fetchone() + + if not board_ID: + return False + else: + return True + + +def get_previous_test_results(serial_num): + + db = connect(0) + cur = db.cursor() + # TODO + cur.execute("SELECT board_id FROM Board WHERE full_id = {}".format(serial_num)) + board_id = cur.fetchone()[0] + cur.execute("SELECT test_type_id, successful FROM Test WHERE board_id = {}".format( board_id)) + test_results_list = cur.fetchall() + + + if not test_results_list: + print("Uh oh... it looks like there is no previous test results") + + # 2D results list is returned + # Test Type in COL 1 and Pass/Fail in COL 2 + + return test_results_list + + + + +def add_test(person_id, test_type, serial_num, success, comments): + if success: + success = 1 + else: + success = 0 + + db = connect(1) + cur = db.cursor() + + if type(person_id) == type(""): + person_id = verify_person(person_id) + + if serial_num: + cur.execute("SELECT board_id FROM Board WHERE full_id = {}".format(serial_num)) + row = cur.fetchone() + print("The Card_ID=", row[0]) + card_id = row[0] + + sql="INSERT INTO Test (person_id, test_type_id, board_id, successful, comments, day) VALUES (%s,%s,%s,%s,%s,NOW())" + # This is safer because Python takes care of escaping any illegal/invalid text + items=(person_id,test_type,card_id,success,comments) + cur.execute(sql,items) + test_id = cur.lastrowid + + print(test_id) + + db.commit() + + return test_id + + else: + print('
') + print('
') + print('

Attempt Failed. Please Specify Testers Name

') + print('
') + print('
') + + # add_test_template(serial_num) + + +# Adds a tester person +def add_tester(person_name, passwd): + try: + db = connect_admin(passwd) + except Exception as e: + print(e) + print("Administrative access denied") + return + cur = db.cursor() + + if person_name: + sql="INSERT INTO People (person_name) VALUES ('%s')"%person_name + print(sql) + # This is safer because Python takes care of escaping any illegal/invalid text + items=(person_name) + cur.execute(sql) + + print("%s"%(person_name)) + + db.commit() + + else: + print('
') + print('
') + print('

Attempt Failed. Please Specify Serial Number

') + print('
') + print('
') + +def add_board_type(name, type_sn, required_tests, passwd): + + try: + db = connect_admin(passwd) + except Exception as e: + print(e) + print("Administrative access denied") + return + cur = db.cursor() + + if name: + sql="INSERT INTO Board_type (name, type_sn) VALUES ('%s', '%s')"%(name, type_sn) + print(sql) + # This is safer because Python takes care of escaping any illegal/invalid text + cur.execute(sql) + + db.commit() + + # Query for test type and board type ID's to place in the stitch table + cur.execute("SELECT type_id FROM Board_type WHERE name = '%s'"%(name)) + board_id = cur.fetchone()[0] + + for req in required_tests: + + sql = "INSERT INTO Type_test_stitch (type_id, test_type_id) VALUES ({}, {})".format(board_id, req) + cur.execute(sql) + + db.commit() + + else: + print('
') + print('
') + print('

Attempt Failed. Please Specify Serial Number

') + print('
') + print('
') + + +def add_new_test(test_name, required, test_desc_short, test_desc_long, relative_order, passwd): + try: + db = connect_admin(passwd) + except Exception: + print("Administrative access denied") + cur = db.cursor() + + if test_name and required and test_desc_short and test_desc_long: + sql="INSERT INTO Test_Type (name, required, desc_short, desc_long, relative_order) VALUES ('%s', '%s', '%s', '%s', '%s')"%(test_name, required, test_desc_short, test_desc_long, relative_order) + print(sql) + # This is safer because Python takes care of escaping any illegal/invalid text + cur.execute(sql) + + db.commit() + + else: + print('
') + print('
') + print('

Attempt Failed. Please Specify Serial Number

') + print('
') + print('
') + +def add_init_tests(serial_num, tester, test_results, comments): + db = connect(1) + cur = db.cursor() + + if serial_num and tester: + cur.execute("SELECT board_id FROM Board WHERE full_id = %(n)d" %{"n":serial_num}) + row = cur.fetchone() + card_id = row[0] + + cur.execute("SELECT person_id FROM People WHERE person_name = '%s'" % (tester)) + + row = cur.fetchone() + person_id = row[0] + + test_ids = [] + + for x in test_results.items(): + cur.execute("SELECT test_type FROM Test_Type WHERE name = '%s'" % (x[0])) + row = cur.fetchone() + test_type_id = row[0] + + sql="INSERT INTO Test (person_id, test_type_id, board_id, successful, comments, day) VALUES (%s,%s,%s,%s,%s,NOW())" + items=(person_id,test_type_id,card_id,x[1],comments) + cur.execute(sql,items) + test_ids.append(cur.lastrowid) + + db.commit() + + return test_ids + else: + print('
') + print('
') + print('

Attempt Failed. Please Specify Serial Number and Tester

') + print('
') + print('
') + + #add_test_template(serial_num) + +def add_test_attachment(test_id, afile, desc, comments): + print("Adding attachment...") + if afile.filename: + db = connect(1) + cur = db.cursor() + originalname = os.path.basename(afile.name) + + f = afile.file.read().decode('utf-8') + + cur.execute("INSERT INTO Attachments (test_id,attach,attachmime,attachdesc,comments,originalname) VALUES (%s,%s,%s,%s,%s,%s)", + (test_id,f,afile.type,desc,comments,originalname)); + att_id=cur.lastrowid + db.commit() + #ofn=settings.getAttachmentPathFor(int(test_id),int(att_id)); + #sub_path = os.path.dirname(ofn) + #if not os.path.exists(sub_path): + # os.mkdir(sub_path) + #open(ofn,'wb').write(afile.file.read()) + print('
The file %s was uploaded successfully.
' % (originalname)) + +def add_test_template(serial_number, suggested_test): + db = connect(0) + cur = db.cursor() + + print('
') + print('' % (serial_number)) + print('
') + print('
') + print('

Add Test for Card %d

' %serial_number) + print('
') + print('
') + + #print('

') + + cur.execute("Select person_id, person_name from People;") + + print('
') + print('
') + print('') + print('
') + cur.execute("select test_type, name from Test_Type order by relative_order ASC;") + print('
') + print('') + print('
') + print('
') + #print '

' + + #print '
' + #print '
' + #print '' + #print '
' + #print '
' + + #print('

') + + print('
') + print('
') + print('') + print('
') + print('
') + print('

') + print('') + print('

') + print('
') + + #print('

') + print('
') + print('
') + print('') + print('
') + print('
') + for iattach in (1,2,3): + print('


' ) + print('
') + print('
') + print("Attachment %d:" % (iattach)) + print('
') + print(""% (iattach) ) + print('
') + print(" "% (iattach) ) + print('
') + print('
') + print('
') + print('
') + print('') + print('' % (iattach) ) + print('
') + print('
') + + #print('



') + + print('
') + print('
') + print('') + print('
') + print('
') + + #print('



') + + print('
') + +def add_new_test_template(): + print('
') + print('
') + print('
') + print('

Add New Test Template

') + print('
') + print('
') + + print('
') + print('
') + print('

') + print('') + print('

') + + print('
') + print('') + print('') + print('
') + print('
') + + print('
') + print('
') + print('

') + print('') + print('

') + print('
') + + print('
') + print('
') + print('

') + print('') + print('

') + print('
') + + print("
") + print('
') + print("") + print("") + print("
") + print("
") + + print('
') + print('
') + print('') + print('
') + print('
') + + print('
') + +def add_tester_template(): + print('
') + print('
') + print('
') + print('

Add New Tester

') + print('
') + print('
') + + print('
') + print('
') + print('

') + print('') + print('

') + + print("
") + print('
') + print("") + print("") + print("
") + print("
") + + print("
") + print('
') + print('') + print('
') + print('
') + + print('') diff --git a/cgi-bin/EngineDB/add_test_functions.pyc b/cgi-bin/EngineDB/add_test_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60705c62ce71cf4763c02f27763a9c443a4585dc GIT binary patch literal 9857 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 12: + temp_month = 1 + temp_year += 1 + temp_day = 1 + else: + temp_month += 1 + temp_day = 1 + bin_time_str = "{Month}-{Day}-{Year}".format(Year = temp_year, Month = temp_month, Day = temp_day) + bin_list.append(bin_time_str) + temp_day += 1 +print(bin_list) + +########## Creating Bins ########## +hist_list = [] +hist_list.append(diff_in_days_vals) +hist_list.append(diff_in_days_vals_success) + +#TODO more elegant +num_bins = day_range +bin_edge_list = [] +for i in range(num_bins+1): + bin_edge_list.append(i) + +# Consider finding a different way to establish bins so dates are on the x-axis. +print("HIST", hist_list, "NUM", num_bins, "LEN", len(bin_list)) +plt.hist(hist_list, bin_edge_list, density=False, histtype='bar', label=['Tests Completed', 'Tests Successful']) +plt.legend(prop={'size': 12}) +plt.title("Completed Tests vs. Successful Tests per Day") +plt.xlabel('Date') +plt.xticks(np.arange(0.5,len(bin_list)+0.5, 1), labels = bin_list) +plt.xlim(0,len(bin_list)) +plt.ylabel("Number of Tests") +plt.grid(True) +#plt.show() +plt.savefig('../static/files/completed_vs_successful.png') + +####################################################### +plt.close() +####################################################### + + +# Fetches a list of datetime objects +test_times_datetime = add_test_functions.get_test_completion_times() + +# Find the range of days (newest_day - oldest_day) +num_days = (test_times_datetime[-1][0] - oldest_day).days + 1 + +# List of the difference in days from first test until current test for each test +day_vals = [] +for item in test_times_datetime: + day_vals.append((item[0]-oldest_day).days) + +# Creates a list of the number of tests completed by a certain date +total_completed_by_time = [] +for i in range(0,num_days): + temp = 0 + for val in day_vals: + # Increases the number of completed tests if the difference in days is less than the day (number) associated with the respective bin + if val <= i: + temp = temp + 1 + # Appends the value of the number of tests completed to the list + total_completed_by_time.append(temp) + +print("TOTAL_Completed", total_completed_by_time) +plt.plot(total_completed_by_time) +plt.title("Total Number of Completed Tests vs. Time") +plt.xlabel('Date') +locs, labels = plt.xticks() +plt.xticks(np.arange(0,len(bin_list), 1), labels = bin_list) +plt.grid(True) +plt.ylabel('Total Tests Completed') + +plt.savefig('../static/files/completed_over_time.png') + + + +######################################################## + + +print('') + +print('') + + + + +base.bottom() + + + + + + + + diff --git a/cgi-bin/EngineDB/base.py b/cgi-bin/EngineDB/base.py new file mode 100755 index 0000000..dfae7c9 --- /dev/null +++ b/cgi-bin/EngineDB/base.py @@ -0,0 +1,256 @@ +#!/usr/bin/python3 + +import re +import sys +import connect + +def header(title=''): + print('') + print('') + print('') + if len(sys.argv) == 1: + print('') + print('') + #print('') + #print('') + else: + print('') + print('') + #print('') + #print('') + print(' %s ' %title) + print('') + +def top(): + print('') + print('''
+
+
+ ''') + if len(sys.argv) == 1: + print(''' +

HGCAL Board Test

+
+ ''') + print('''
+
Maintained by the University of Minnesota CMS Group
+
+
+
+ +
+
+
+ ''') + else: + print(''' +

HGCAL Board Test

+
+ ''') + + print('''
+
Maintained by the University of Minnesota CMS Group
+
+
+
+ +
+ + + ''') + if len(sys.argv) == 1: + print(''' +'''%connect.get_db_name()) + + else: + print(''' +'''%connect.get_db_name()) + +def bottom(): + + if len(sys.argv) == 1: + print(''' +
+ +
+ +
+ +
+
HGCAL Board Test
+ +

+ Maintained by the UMN CMS Group. For inquiries or to report a bug, contact Bryan Crossman at cros0400@umn.edu +

+
+ +
+
+ +
+
Links
+ + +
+
+
+
''') + else: + print(''' +
+ +
+ +
+ +
+
HGCAL Board Test
+ +

+ Maintained by the UMN CMS Group. For inquiries or to report a bug, contact Bryan Crossman at cros0400@umn.edu +

+
+ +
+
+ +
+
Links
+ + +
+
+
+
''') + + print('') + print('') + print('') + print('') + +def cleanCGInumber(cgitext): + if cgitext is None: + return 0 + return int(re.sub('[^0-9]','',cgitext)) + diff --git a/cgi-bin/EngineDB/base.pyc b/cgi-bin/EngineDB/base.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96f2f8d95e0791005fbf7182ad20330976d5e76d GIT binary patch literal 9693 zcmeHNTW{RP73S(eU2?UGCDmIyg;(0yx$&Gc=bX8HJd^+U+1y_{ zKTyxeKNIkK1HR%*NPPIO8KGf3@8@gA^IB0qVLYEOeE6RMvnS=y-%9^n^VY~#sQ^x*; zkuD;AXubdmpDPvoi^jKx@ewr5V7mbn8U>#;jNO`AW zGHy1-1y#wY-waSN@e!6ICMof{G!;xX%uMcD*P!e7*c1kQpLA2U+c3LQCgQqndp@u4 z37>_*L0acb+B}JDH;$!{DNSyy)EDYkZ9fpw_JkNT)T4mcp~fUB3mc}8y^x76W6~r6 zm#mWpvIo^&x^!*Xy8U?j;e+;)OqzG*6PaRxZ6##Z2ikNzt0z5)wm^O?Mc(39kQlXT^>-Q4nJLIm&ekfftGp)V^Gi7bWjjqgO6Y>ew=PvC@TX03AiQW z!c(4D)!swM{m_APLB~ zIuJ>bhG}^)R8_H0Xo20FSNB>RC3g^Yh)BJLS+Cndf_6Q7H-I^AcjD0RU9Bg)V-||o z4Pz=Tn4MiYL~4k8saVR2Kb>ItfcxyIjb2_;qR87ep6{{;}9m zLSfE?oua}ACnIjhQojPUx8FlYQR*pAlKw0Lf6f9wS0DI(?&mpuHwE(Ms0q>hL^y@B zI&LOq%!i(paiE z8oOxkcWgbTyi}b7YD|Sy24fspv^=b0HaS^1#2tj}O9zWU7?j$rKn~6Qiv29L>rzj` z3@;Ryr77%14HK8O(Pq61t6tx*db)=}A>Vl|mwA#k7eFALP%*hxmmT48#F} z$}X#iT=dIbtPtP|91;5Ssqm;4Ui0D3F$Sylg&oX-Q(Bk${*GQwm4VlMpS0Pb zI!?0m+;&E)oE<94kVHvHr8@gI%M5^vZW+brWFHu`^bcTp#<5{}YtD&(!bRpSJoJ># zg71zzu!sF$9C^w{9s7Yt-6O_x!Kk1Bb&pZF>SnO9?@2_k3dnL8O3a3`_ z$|>p`=b1Nd+P8Y!)7B{OORs(7JI-QUTi-mQfLn+MZXv|Gg^-~{Fb{5=oOx2d2YI*= z@A&Qxr%?$jJQrZ7$j8aAfoOpi0!DawYI<&Fdip)c)qnA+2aW2}$DFT2v4Z>66h`

ucw*SG z0BM6vke@y_4aFRNaBj_D(^nfmOD~cT4w?lZXU}aok&pwHS zb+u$FpnmKE{G*U?$w4*FTZM(e!o!dXu&8VgKgO~In^ZhV&xp|sN5Lzn;aNt%2BR{Y zr9HIo5o(jGslMa&=M@a}-AyCUA;O7^V!WLd&|#%jgp;D51# z+j`M%iod^G)~$ETda-exV_$$-@P?N4(sl6E6aKX<>gtSnYL-9QW&Lc!9RI>TR(Z+` z=cujd*e2B93g6nLU4?t7_qpP4aE^C`mj;Q{uW8R7&#_ky=WyYbf5=o+#~uWA9FO5> zrQVa(=dC->!WZ7=+O>B0SzA7Od}l$d{k|ohimw(Q_3p>5Wck_V?X11MyY|&*_r0gw zmQUn8di3~d3--qoVmRPco*G9p58A+Zgd&d~q60XF?q%x6HAv1Atl`G+vNZZLC{p|! z5@X`BJ+m-9p+h$M!9I8=T*p4Yg#^NN;1;z%W27Ib5FrTlkrT!qgc7N+B4~a&iIG3s z^B7*z4j?g9kj~eCSg^kMW(&)zNrj)ZAy`4hqky)7jA5j@C^A<^rKr1S2i_bV$@32t z$L58M^7V~-Jd0eG{tIf9R7UMmZK|f?oVG4OrM~u}mu;!5FkTk7FeGUUBa#LpsN7jq dj>McO_A?08!K<%8j+a1!OB0tqoc(sT`yb?8nacnG literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/bert_analytics.py b/cgi-bin/EngineDB/bert_analytics.py new file mode 100755 index 0000000..ad1a711 --- /dev/null +++ b/cgi-bin/EngineDB/bert_analytics.py @@ -0,0 +1,120 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, number_val, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + if not attachment[str(number_val)] == None: + if not attachment[str(number_val)][graph_title] == None: + values.append(attachment[str(number_val)][graph_title]) + + + # if no values, can't make graph, so return + if len(values) == 0: + return + + + step = 10 + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + full_title = graph_title + " " + str(number_val) + " Values" + plt.title(full_title) + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/bert/{0}_{1}.png'.format(graph_title, number_val)) + plt.close() + + + print(''.format(graph_title, number_val)) + + + add_to_stats(stats, full_title, values) + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments4 = add_test_functions.get_test_attachments(4) +stats = {'analytic_type': "Bit Error Rate Test"} + +######################################################## + +for index in range(1, 11): + create_generic_hist(attachments4, 'Midpoint', index, stats) + create_generic_hist(attachments4, 'Eye Opening', index, stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/bert/bert_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + diff --git a/cgi-bin/EngineDB/board_check_functions.py b/cgi-bin/EngineDB/board_check_functions.py new file mode 100755 index 0000000..1790718 --- /dev/null +++ b/cgi-bin/EngineDB/board_check_functions.py @@ -0,0 +1,194 @@ +#!/usr/bin/python3 + +from connect import connect +import cgi +import cgitb; cgitb.enable() +import base +import home_page_list +import add_test_functions + +def board_checkout_form_sn(sn): + db = connect(0) + cur = db.cursor() + + print('

') + print("
") + print('
') + print('

Board Checkout

') + print("
") + print("
") + + print("
") + print('
') + print('') + print(''%sn) + print("
") + + cur.execute("Select person_id, person_name from People;") + + print('
') + print('') + print('
') + + print("
") + print('
') + print("") + cur.execute("select test_type, name from Test_Type order by relative_order ASC;") + print('') + print("
") + print("
") + + print("
") + print('
') + print('

') + print('') + print('

') + print('
') + + print("
") + print('
') + print('') + print("
") + print("
") + print("
") + print("
") + print("") + +def board_checkout(serial_num, person_id, test_type, comments): + db = connect(1) + cur = db.cursor() + + try: + cur.execute("SELECT sn FROM Board WHERE '%s' = full_id" % serial_num) + board_id = cur.fetchone()[0] + + sql = "SELECT checkout_id, person_id FROM Check_Out WHERE board_id = %s" % board_id + cur.execute(sql) + checkouts = cur.fetchall() + if checkouts: + checkout_id = checkouts[-1][0] + checkout_person = checkouts[-1][1] + sql = "SELECT Check_In.checkout_id FROM Check_In, Check_Out WHERE Check_In.checkout_id = %s AND Check_Out.checkout_id = %s" % (checkout_id, checkout_id) + cur.execute(sql) + results = cur.fetchall() + if results: + sql = "INSERT INTO Check_Out (board_id, test_type, person_id, comment, checkout_date) VALUES (%s, %s, %s, '%s', NOW())" % (board_id, test_type, person_id, comments) + cur.execute(sql) + + db.commit() + else: + cur.execute("SELECT People.person_name FROM People WHERE People.person_id = %s" % person_id) + tester = cur.fetchone()[0] + + print('
') + print('
') + print('

This board is currently checked out by %s

' % tester) + print('
') + print('
') + + print('
') + print('') + print('
') + else: + sql = "INSERT INTO Check_Out (board_id, test_type, person_id, comment, checkout_date) VALUES (%s, %s, %s, '%s', NOW())" % (board_id, test_type, person_id, comments) + cur.execute(sql) + + db.commit() + + + except Exception as e: + print(e) + + print('
') + print('
') + print('

Attempt Failed. Please ensure all fields are filled.

') + print('
') + print('
') + + +def board_checkin_form_sn(sn): + db = connect(0) + cur = db.cursor() + + print('
') + print("
") + print('
') + print('

Board Checkin

') + print("
") + print("
") + + print("
") + print('
') + print('') + print('') + print("
") + print("
") + + print("
") + print('
') + print('') + print("
") + print("
") + print("
") + print("
") + print("
") + +def board_checkin(board_id): + db = connect(1) + cur = db.cursor() + + try: + cur.execute("SELECT checkout_id FROM Check_Out WHERE board_id = %s" % board_id) + checkout_id = cur.fetchall()[0] + + sql = "INSERT INTO Check_In (checkout_id, checkin_date) VALUES (%s, NOW())" % (checkout_id) + cur.execute(sql) + + db.commit() + + except Exception as e: + print(e) + print(cur.fetchall()) + + print('
') + print('
') + print('

Attempt Failed. Please ensure all fields are filled.

') + print('
') + print('
') diff --git a/cgi-bin/EngineDB/board_check_functions.pyc b/cgi-bin/EngineDB/board_check_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f1c40ecec097d1f9247fccea7ac7d4a1c921f01 GIT binary patch literal 3717 zcmc&$ZEq7t5Z*i62@aSfP|^lUwK^${Q^hz9FKvZ=BBX{;frHLzQ$?yy=espNxHoRs zX(BnF=r7?*|4n~OrT&0+X7A0RF%*@maXg;ey_ubz-DjRD{ZX46Hh#BklK!didk?9egM&E&UKQs&&R;-L197xMVEWsiu9Fkk*hMl1 zsgPy-nJ3Ew6`j01B>T<+S}dZFi^}yb;p1fx=?WhuD_nt*3BQn}B{Bwye&MI^`&;I> zaQQL1`~<}^iZ?bW7rc6U;#&UrDQX0gejSq8bwLo`1<@LWu}>{qxM9%N`k@s&raff# zi*O`1Z$!r$^_dukPFssYE;PylTO3EMt@$HQxRDi$CVFT%masIPFQQAwJ*2j0ao%2y z!=G1mzJ6+ywy9=^Uc+}9cW5LUw`jyc_(zRR>K`{Y!OapH3^(=r7!Tb}NAf*&~1$en%-lvYk9Og^7|}qHRY_%Z{nM75RC*)wky~X z>^`u3*gBUcW*|*8dT4ng7+v8I_!nT;V;)>#8nKv%f$2KynTpnQ5Qjc}%EHKFcjfC7 z>B`bFE&f^_zrM$~fCX;g2u~JFQm)D4033-p^sd6%hV^y z!>yZWLBrT#G3_7In0c0P51E;aZ1uM9{?pXtOPrY+d8!ksnRa5|Ou2Da^Ns7*wj!N>jnjCwte9C8z{1z17U#*7@gXJb6d?sPDUQOVbOP z!6w7gX;@0+0XDJfwj_r2dI@v`zC<9(>=9hxSe9jW#O#q^b*#t&If4iB$LR~Sfj0$S zm;9Q^r#!QG`a}wT7qsRu^jXu6L%wlqW1|_3`krf>L*aW(`ttWMu zv&-Ne*TFPMQu-B?f|SZw$x~9QkmG$au1IoGCE*~!;6MpU3&?8u1o#k4W{_ln&45-0 zWwLZKo0^ShC1aq=GMb?A!=3%$OHvjU@?ws}uZePU4#p*`6`WTv9Zm!a`B4^r47{5_ zdkxfH=W%CykMe*%Fm|8Nq|)y1bc_zgdH_XwF!DSoUoN~%cnIQAx7RWD=%eo5Zc>xY zU8s-s~?yqE(~5Ql*PGZ1^y zM+R^MZBN|5oFp1_sa2ZYnbe39&I?!gGBAc%@EDk+P~LTO2?3mpSR$WK)&)Z_vujO*V1KWYN48 zoe{QiNuzWTHEe+9A^-|( Serial Number = %(s)s , )s
' %{'s': sn} + home_page_list.add_module(sn) + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('') + print('
') + + print('

') + + + home_page_list.render_list_module() + + base.bottom() + + +else: + print('
') + print('
') + print('

FAILED. Enter SERIAL NUMBER

') + print('
') + print('
') + + home_page_list.add_module_form() + + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('
') + + print('

') + + home_page_list.render_list_module() + + base.bottom() + + + + diff --git a/cgi-bin/EngineDB/checkout_summary.py b/cgi-bin/EngineDB/checkout_summary.py new file mode 100755 index 0000000..3487289 --- /dev/null +++ b/cgi-bin/EngineDB/checkout_summary.py @@ -0,0 +1,83 @@ +#!/usr/bin/python3 + +import cgi +import base +from connect import connect +#import mysql.connector +from summary_functions import get +import module_functions +import sys + +if len(sys.argv) != 1: + sys.stdout = open('%(loc)s/summary.html' %{'loc':sys.argv[1]}, 'w') + +else: + #cgi header + print("Content-type: text/html\n") + +base.header(title='Summary') +base.top() + +List_of_rows = get() + +print('
') +print('

Test Summary

') +print('
') +print('
') +print('
') +print('
') +print('') +print('') +print('') +print('') +print('') +#print '' +print('') +print('') +print('') + +for row in List_of_rows: + print('') + if len(sys.argv) == 1: + print('' %{'serial':row[2], 'id':row[1]}) + #print '' %row[1] + else: + print('' %{'serial':row[2]}) + print('') + + print('') + + print('') + + print('') + + print('') + +print('
S/N Tests Passed Tests Remaining Final Status
%(serial)s %s %(serial)s
    ') + for tests in row[3][0:][::2]: + print('
  • %s' %tests) + print('
    ') + for tests in row[3][1:][::2]: + print('
  • %s' %tests) + print('
    ') + if len(sys.argv) == 1: + for tests in row[4][0:][::2]: + print('
  • %s' %(row[0],tests[1],tests[0])) + + else: + for tests in row[4][0:][::2]: + print('
  • %s' %tests[0] ) + print('
    ') + if len(sys.argv) == 1: + for tests in row[4][1:][::2]: + print('
  • %s' %(row[0],tests[1],tests[0])) + else: + for tests in row[4][1:][::2]: + print('
  • %s' %tests[0]) + print('
') + + +base.bottom() + + + diff --git a/cgi-bin/EngineDB/connect.py b/cgi-bin/EngineDB/connect.py new file mode 100755 index 0000000..7a0fb78 --- /dev/null +++ b/cgi-bin/EngineDB/connect.py @@ -0,0 +1,47 @@ +#!/usr/bin/python3 + +import mysql.connector + +def connect( num ): + if(num==1): + + connection = mysql.connector.connect( + host = 'localhost', + user='EngineDBInserter', + password='HGCALrocks', + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + if(num==0): + + connection = mysql.connector.connect( + host = 'localhost', + user='EngineDBReadUser', + password='HGCALrocks', + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + return connection + +def connect_admin(passwd): + + connection = mysql.connector.connect( + host = 'localhost', + user='EngineDBAdmin', + password=passwd, + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + return connection + +def get_base_url(): + base = "http://cmslab3.umncmslab/~cros0400/cgi-bin/EngineDB/" + return base + +def get_db_name(): + name = "EngineDB" + return name + diff --git a/cgi-bin/EngineDB/connect.pyc b/cgi-bin/EngineDB/connect.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a41e64462e5461ef7e0c9537f18cb7c760e549d2 GIT binary patch literal 1353 zcmb_c!EVz)5FI;CngmxxT#yhSkORb#C`eQYQ3?Vil*3kBxI~WEO5ED(;9Y|%wOrs+ z`2#+n%o{s_Qjm~{;jN?(pH|wi0|OSBhxG#5EfQ{S~&dsLZo$rx1MIm$OUYcrF9N@CVlbzjX{L(J_lE^wV%pLyCFZkesy&CwknfTEAMpd;(2V-j9<|e2$jbA9ixn} zf$Op<&g_R=c27!U(!`aO+u?ZoF(GvX+Tv5(k` zmSvGfNmbg({$vuZ>Uo|ev!yHYC|P9p=b4Gtl|?Pccy*>w4-&I?*pL_cq1Th&Uhu1b zozO8)|4E{#g!R$z2%>veNIVA-D0Hf@j{+M?irZyxo!Fr+GNaHe1uaS26xy%Am*lF@ zp{6aEBD`n?kgfE?0jX`zEJiwaIbcIJv}sKk$e}?E7@}|Vkq^Ozi1kG+{PIagQ@&e+lu5zGS^qZLTe=ABPzb5RrL`AYd zllcG05-i{2u}MxoE^d!Qa)ib$M`hLM1MOEhz3LW>h=iRjiK5R)Pl{64dHNKG(IOD~ KgWH2}5c~kGvlZq5 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/dump.sql b/cgi-bin/EngineDB/dump.sql new file mode 100644 index 0000000..735d9f7 --- /dev/null +++ b/cgi-bin/EngineDB/dump.sql @@ -0,0 +1,236 @@ +-- MySQL dump 10.14 Distrib 5.5.68-MariaDB, for Linux (x86_64) +-- +-- Host: localhost Database: WagonDB +-- ------------------------------------------------------ +-- Server version 5.5.68-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `Attachments` +-- + +DROP TABLE IF EXISTS `Attachments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Attachments` ( + `attach_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `test_id` int(11) DEFAULT NULL, + `attachmime` varchar(30) DEFAULT NULL, + `attachdesc` varchar(120) DEFAULT NULL, + `comments` varchar(200) DEFAULT NULL, + `originalname` varchar(200) DEFAULT NULL, + PRIMARY KEY (`attach_id`), + KEY `test_id` (`test_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Attachments` +-- + +LOCK TABLES `Attachments` WRITE; +/*!40000 ALTER TABLE `Attachments` DISABLE KEYS */; +/*!40000 ALTER TABLE `Attachments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `People` +-- + +DROP TABLE IF EXISTS `People`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `People` ( + `person_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `person_name` varchar(100) DEFAULT NULL, + PRIMARY KEY (`person_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `People` +-- + +LOCK TABLES `People` WRITE; +/*!40000 ALTER TABLE `People` DISABLE KEYS */; +INSERT INTO `People` VALUES (1,'Bryan'); +/*!40000 ALTER TABLE `People` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Test` +-- + +DROP TABLE IF EXISTS `Test`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Test` ( + `test_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `test_type_id` int(11) NOT NULL, + `wagon_id` int(11) NOT NULL, + `person_id` int(11) NOT NULL, + `day` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `successful` tinyint(1) NOT NULL, + `comments` varchar(320) DEFAULT NULL, + PRIMARY KEY (`test_id`), + KEY `wagon_id` (`wagon_id`), + KEY `person_id` (`person_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Test` +-- + +LOCK TABLES `Test` WRITE; +/*!40000 ALTER TABLE `Test` DISABLE KEYS */; +/*!40000 ALTER TABLE `Test` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `TestRevoke` +-- + +DROP TABLE IF EXISTS `TestRevoke`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `TestRevoke` ( + `test_id` int(10) unsigned NOT NULL, + `comment` varchar(120) DEFAULT NULL, + PRIMARY KEY (`test_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `TestRevoke` +-- + +LOCK TABLES `TestRevoke` WRITE; +/*!40000 ALTER TABLE `TestRevoke` DISABLE KEYS */; +/*!40000 ALTER TABLE `TestRevoke` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Test_Type` +-- + +DROP TABLE IF EXISTS `Test_Type`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Test_Type` ( + `test_type` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + `required` tinyint(1) NOT NULL, + `desc_short` varchar(50) DEFAULT NULL, + `desc_long` varchar(250) DEFAULT NULL, + `relative_order` int(11) NOT NULL, + PRIMARY KEY (`test_type`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Test_Type` +-- + +LOCK TABLES `Test_Type` WRITE; +/*!40000 ALTER TABLE `Test_Type` DISABLE KEYS */; +INSERT INTO `Test_Type` VALUES (1,'test',1,'test','test',1); +/*!40000 ALTER TABLE `Test_Type` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon` +-- + +DROP TABLE IF EXISTS `Wagon`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon` ( + `sn` int(11) NOT NULL, + `wagon_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`wagon_id`), + UNIQUE KEY `sn` (`sn`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon` +-- + +LOCK TABLES `Wagon` WRITE; +/*!40000 ALTER TABLE `Wagon` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon_Info` +-- + +DROP TABLE IF EXISTS `Wagon_Info`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon_Info` ( + `info_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `wagon_id` int(11) NOT NULL, + `info_type` int(11) NOT NULL, + `info` varchar(300) DEFAULT NULL, + PRIMARY KEY (`info_id`), + KEY `wagon_id` (`wagon_id`), + KEY `info_type` (`info_type`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon_Info` +-- + +LOCK TABLES `Wagon_Info` WRITE; +/*!40000 ALTER TABLE `Wagon_Info` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon_Info` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon_Info_Types` +-- + +DROP TABLE IF EXISTS `Wagon_Info_Types`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon_Info_Types` ( + `info_type_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Info_Name` varchar(30) DEFAULT NULL, + `Info_Desc_Short` varchar(100) DEFAULT NULL, + `Info_Desc_Long` varchar(300) DEFAULT NULL, + PRIMARY KEY (`info_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon_Info_Types` +-- + +LOCK TABLES `Wagon_Info_Types` WRITE; +/*!40000 ALTER TABLE `Wagon_Info_Types` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon_Info_Types` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2021-07-13 16:05:26 diff --git a/cgi-bin/EngineDB/gen_res_analytics.py b/cgi-bin/EngineDB/gen_res_analytics.py new file mode 100755 index 0000000..999abc0 --- /dev/null +++ b/cgi-bin/EngineDB/gen_res_analytics.py @@ -0,0 +1,174 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['module 1'][graph_title]) + + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/gen_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['module 1'][graph_title][list_index]) + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/gen_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments1 = add_test_functions.get_test_attachments(1) + +stats = {'analytic_type': 'General Resistance Test'} + +####################################################### + +create_generic_hist(attachments1, 'RTD -> VMON_LVS', stats) + +####################################################### + +create_sub_generic_hist(attachments1, 'ECON_RE_Sb -> HGCROC_RE_Sb', 0, stats) + +####################################################### + +create_sub_generic_hist(attachments1, 'PWR_EN -> PG_LDO', 0, stats) + +######################################################## + +create_generic_hist(attachments1, 'RTD -> HGCROC_RE_Sb', stats) + +######################################################## + +create_sub_generic_hist(attachments1, 'HGCROC_RE_Hb -> HGCROC_RE_Sb', 0, stats) + +######################################################## + +create_sub_generic_hist(attachments1, 'PG_DCDC -> ECON_RE_Hb', 0, stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/gen_res/gen_res_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + + diff --git a/cgi-bin/EngineDB/get_attach.py b/cgi-bin/EngineDB/get_attach.py new file mode 100755 index 0000000..e1cfe3c --- /dev/null +++ b/cgi-bin/EngineDB/get_attach.py @@ -0,0 +1,60 @@ +#!/usr/bin/python3 + +import cgi +import base +from connect import connect +import settings +import os.path +import sys + +if __name__ == "__main__": + form = cgi.FieldStorage() + attach_id = base.cleanCGInumber(form.getvalue('attach_id')) + + db=connect(0) + cur=db.cursor() + + if(attach_id != 0): + cur.execute("SELECT test_id, attachmime, originalname, attach FROM Attachments WHERE attach_id=%d" % (attach_id)); + + if not cur.with_rows: + print("Content-type: text/html\n") + base.header("Attachment Request Error") + base.top() + print('
') + print("

Attachment not available

") + print('
') + base.bottom() + else: + thevals=cur.fetchall() + f = thevals[0][3] + attpath=settings.getAttachmentPathFor(thevals[0][0],attach_id) + if not f: + print("Content-type: text/html\n") + base.header("Attachment Request Error") + base.top() + print("

Attachment not found

") + base.bottom() + else: + print('Content-type: %s \n\n' % (thevals[0][1])) + print(f.decode("utf-8")) + + cur.close() + +def save(attach_id): + db=connect(0) + cur=db.cursor() + + cur.execute("SELECT test_id, attachmime, originalname FROM Attachments WHERE attach_id=%d" % (attach_id)); + + if not cur.with_rows: + print("

Attachment not available

") + else: + thevals=cur.fetchall(); + attpath=settings.getAttachmentPathFor(thevals[0][0],attach_id) + if not os.path.isfile(attpath): + print("

Attachment not found

") + else: + statinfo = os.stat(attpath) + sys.stdout.write(file(attpath,"rb").read() ) + cur.close() diff --git a/cgi-bin/EngineDB/get_attach.pyc b/cgi-bin/EngineDB/get_attach.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4251bb300d16f114d9c40e9c7659b15752ba999 GIT binary patch literal 1938 zcmbtUduthC zN{Ko*xS)=3e2-F(GLJeQiK$+RI;A%@Gt?=+!Dp#6OKOf}iC%kD{45kvGEdj=TOlPV zsgkNtvOsc%t_A-)HBuhQvcv17>XbB`{vxRw^Iw;!_?6TmB}*jXyhdv<6FE8FGMPU} z&e72^dtV`mV30C#kKG7aflO8zEKIdlogn|oIk@kFt&v*eV4Jc=o1Jx1B}z7Kc;F-K zH7c-4YMsot;$I`y-;VQ;WaGxwB5kfA*L6xBkX+(iLE&!iOmaf;m+41T>s@ZgNpl7L ziT}j&vWX^7<9~B}5FAXUaPj=HG#hZduX77|%U+Ds zGx$HZ?V-)msuSMY`+@pyjNtx3QRu>a0Lxt&pZZZ68uR>7q|;U=TOau&(|YQUEI@YN zdg5mnttXH6%=@f9{BZAY{&H>o@HC9mu$QXcHiTxDwc7By7xPG)_x{*!EkWL`<^t8Jv9_^BaJ5i-Nvg3A)6TVTg&YJi7EK!5jmj$$&DW zMCKXq!qIV_I}J=dv`b{ml+4m4c1U36aA1Y`x|-n@V_}jCUAhf1-}9=#e%nc^Q}$Jv z>;fef=tr5;=KjOeV0kpWxYs23`fP8OxwC|Bu# zBe*cK=RDyS?h1COPQ%nV96?-k-eV3K=Y8D-P7atIVC|vKR68oP*?GFN(;kg`X&iNV z(b~}7InM)#lSbG2I4SQsXVc|2$6^@i!L%uBpR2hFyBA= zA|GcxRX9ti;PzwX$`f#V0yYWmGvMk5+;La(A&Lqs?t;}L$LeWobr$d^Fj!+g?`J>Y zFJG|EG#g75X{iF<@L&_*wxIu`s(kC+Ov`bq_S{^24hHHfmbkj8FT)LnIIF02S=2=p VkbiaX8mRp24Y%$si-uSC{sM+@rV9W7 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/get_previous_test_results.py b/cgi-bin/EngineDB/get_previous_test_results.py new file mode 100755 index 0000000..c81eec5 --- /dev/null +++ b/cgi-bin/EngineDB/get_previous_test_results.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Previous Test Results') +base.top() + +form = cgi.FieldStorage() + +if form.getvalue('serial_number'): + serial_number = cgi.escape(form.getvalue('serial_number')) + + tests = add_test_functions.get_previous_test_results(serial_number) + + print('Begin') + + for t in tests: + print(t) + + print('End') + +else: + print('No serial number sent.') +base.bottom() diff --git a/cgi-bin/EngineDB/get_test_completion_status.py b/cgi-bin/EngineDB/get_test_completion_status.py new file mode 100755 index 0000000..bb01075 --- /dev/null +++ b/cgi-bin/EngineDB/get_test_completion_status.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import module_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Test Completion Status') +base.top() + +tests = module_functions.get_test_completion_status() + +print('Begin') + +for t in tests: + print(t) + +print('End') + +base.bottom() diff --git a/cgi-bin/EngineDB/get_test_types.py b/cgi-bin/EngineDB/get_test_types.py new file mode 100755 index 0000000..d28191b --- /dev/null +++ b/cgi-bin/EngineDB/get_test_types.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import module_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Test Types') +base.top() + +tests = module_functions.get_test_types() + +print('Begin') + +for t in tests: + print(t) + +print('End') + +base.bottom() diff --git a/cgi-bin/EngineDB/get_usernames.py b/cgi-bin/EngineDB/get_usernames.py new file mode 100755 index 0000000..ae987f7 --- /dev/null +++ b/cgi-bin/EngineDB/get_usernames.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Usernames') +base.top() + +usernames = add_test_functions.get_usernames() + +print('Begin') + +for t in usernames: + print(t[0]) + +print('End') + +base.bottom() diff --git a/cgi-bin/EngineDB/home_page.py b/cgi-bin/EngineDB/home_page.py new file mode 100755 index 0000000..3618671 --- /dev/null +++ b/cgi-bin/EngineDB/home_page.py @@ -0,0 +1,58 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import sys + +if(len(sys.argv) != 1): + stdout = sys.stdout + sys.stdout = open('%(loc)s/index.html' %{ 'loc':sys.argv[1]}, 'w') +else: + #cgi header + print("content-type: text/html\n\n") + +base.header(title='Wagon Test Home Page') +base.top() + +print() +print('
') +print('
') +print('

Count by Test

' ) +print('
') +print('
') + +home_page_list.render_list_tests() +print('
') + +print('
') +print('
') +print('

List of All Boards

' ) +print('(Sorted by Serial Number)Successful Tests') +print('
') +print('
') +if len(sys.argv) == 1: + print('
') + print('
') + print('') + print('') + print('') + print('
') +else: + print('
') + print('
') + print('') + print('') + print('') + print('
') +print('
') +print('

') + + +home_page_list.render_list_module() + +base.bottom() + +if len(sys.argv) != 1: + sys.stdout.close() + sys.stdout = stdout diff --git a/cgi-bin/EngineDB/home_page_list.py b/cgi-bin/EngineDB/home_page_list.py new file mode 100755 index 0000000..f65f190 --- /dev/null +++ b/cgi-bin/EngineDB/home_page_list.py @@ -0,0 +1,221 @@ +#!/usr/bin/python3 + +from connect import connect +import sys +import cgitb + +cgitb.enable() + +def fetch_list_tests(): + db = connect(0) + cur=db.cursor() + cur.execute("select Test_Type.name,COUNT(DISTINCT Test.test_id),COUNT(DISTINCT Test.board_id) from Test,Test_Type WHERE Test.successful=1 and Test.test_type_id=Test_Type.test_type GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order"); + rows = cur.fetchall() + cur.execute("select Test_Type.name,COUNT(*) from Test,Test_Type WHERE Test.test_type_id=Test_Type.test_type GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order"); + rows2 = cur.fetchall() + cur.execute("select Test_Type.name,Count(*) from TestRevoke,Test_Type,Test WHERE Test.test_type_id=Test_Type.test_type and Test.successful=1 and Test.test_id=TestRevoke.test_id GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order") + rows3 = cur.fetchall() + + for i,r in enumerate(rows): + if rows3: + for row in rows3: + if row[0] == r[0]: + rows[i] = (r[0], r[1]-row[1], r[2]) + else: + rows[i] = (r[0], r[1], r[2]) + finalrows = () + for i in range (0,len(rows)): + arow=(rows[i][0], rows[i][1],rows[i][2],rows2[i][1]) + finalrows=finalrows+(arow,) + return finalrows + +def render_list_tests(): + rows = fetch_list_tests() + + print('
') + print('
') + print('') +# print '
Total Tests
' +# print '
Total Successful Tests
' +# print '
Total Cards with Successful Tests
' + for test in rows: +# print '
' + print('
' ) + print('
TestTotal TestsTotal Successful TestsTotal Wagons with Successful Tests
%s' % (test[0])) + print('%s' % (test[3])) + print('%s' % (test[1])) + print('%s' % (test[2])) + print('
') + +def fetch_list_module(): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT full_id, Board_id FROM Board ORDER by Board.sn ASC") + rows = cur.fetchall() + return rows + + +def render_list_module(): + + db = connect(0) + cur=db.cursor() + row = fetch_list_module() + n = 0 + + col1='' + col2='' + col3='' + cur.execute('SELECT COUNT(*) FROM Test_Type') + total = cur.fetchall()[0][0] + if len(sys.argv) == 1: + for boards in row: + query = 'SELECT COUNT(DISTINCT Test.test_id),COUNT(DISTINCT TestRevoke.test_id, case when TestRevoke.test_id = Test.test_id then TestRevoke.test_id end),Test.test_type_id FROM Test,TestRevoke WHERE Test.board_id=%s and Test.successful=1 GROUP BY Test.test_type_id' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + if not successful: + query = 'SELECT COUNT(DISTINCT Test.test_id),0,Test.test_type_id FROM Test WHERE Test.board_id=%s and Test.successful=1 GROUP BY Test.test_type_id' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + num = 0 + for s in successful: + total_success = s[0] + total_revoke = s[1] + if total_success > total_revoke: + num += 1 + else: + num += 0 + if not num: + num = 0 + if num < total: + temp_col = ' %(serial)s %(success)s/%(total)s' %{'serial':boards[0], 'id':boards[1], 'success': num, 'total': total} + else: + temp_col = ' %(serial)s Done' %{'serial':boards[0], 'id':boards[1]} + if n%3 == 0: + col1 += temp_col + if n%3 == 1: + col2 += temp_col + if n%3 == 2: + col3 += temp_col + n += 1 + else: + for boards in row: + query = 'SELECT SUM(successful) AS "sum_successful" FROM Test WHERE Test.board_id = %s' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + num = successful[0][0] + if not num: + num = 0 + temp_col = ' %(serial)s %(success)s' %{'serial':boards[0], 'id':boards[1], 'success': num} + if n%3 == 0: + col1 += temp_col + if n%3 == 1: + col2 += temp_col + if n%3 == 2: + col3 += temp_col + n += 1 + print('
') + print('
') + print('
    ') + print(col1) + print('
') + print('
') + print(col2) + print('
') + print('
') + print(col3) + print('
') + print('
') + +def add_module_form(): + + print('
') + print('
') + print('
') + print('

Adding a new Test Board

') + print('
') + print('
') + + print('
') + print('
') + print('') + print('
') + print('
') + print('') + print('
') + print('
') + + print('
') + + print('
') + +def add_board_info_form(sn, board_id): + + print('
') + print('
') + print('
') + print('

Adding Extra Board Information

') + print('
') + print('
') + + print('' % sn) + print('' % board_id) + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + + print('
') + print('
') + + print('') + + print('
') + +def add_module(serial_number): + try: + db = connect(1) + cur = db.cursor() + + sn = serial_number[10:15] + type_id = serial_number[4:10] + + cur.execute("SELECT board_id FROM Board WHERE full_id = %s" % (serial_number)) + + rows = cur.fetchall() + + if not rows: + cur.execute("INSERT INTO Board (sn, full_id, type_id) VALUES (%s, %s, %s); " % (sn, serial_number, type_id)) + #print '
INSERT INTO Card set sn = %s;
' %(serial_number) + db.commit() + db.close() + else: + print("

Serial number already exists!

") + except mysql.connector.Error as err: + print("

Serial number already exists!

") + print(err) + diff --git a/cgi-bin/EngineDB/home_page_list.pyc b/cgi-bin/EngineDB/home_page_list.pyc new file mode 100644 index 0000000000000000000000000000000000000000..474bd5df1cde214b637c55a2c0c8cdb44e2e5c56 GIT binary patch literal 7937 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/id_res_analytics.py b/cgi-bin/EngineDB/id_res_analytics.py new file mode 100755 index 0000000..5f4503f --- /dev/null +++ b/cgi-bin/EngineDB/id_res_analytics.py @@ -0,0 +1,158 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments: + values.append(attachment['wagon type chip'][graph_title]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/id_res/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['wagon type chip'][graph_title][list_index]) + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/id_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments2 = add_test_functions.get_test_attachments(2) +stats = {'analytic_type': 'ID Resistor Test'} + +####################################################### + +create_generic_hist(attachments2, 'WAGON_TYPE -> GND', stats) + +######################################################## + +create_sub_generic_hist(attachments2, 'VMON_REF0 -> PROBE_DC', 0, stats) + + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/id_res/id_res_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + + diff --git a/cgi-bin/EngineDB/iic_analytics.py b/cgi-bin/EngineDB/iic_analytics.py new file mode 100755 index 0000000..2a0231e --- /dev/null +++ b/cgi-bin/EngineDB/iic_analytics.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment[graph_title]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/iic/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment[graph_title][list_index]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/iic/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments3 = add_test_functions.get_test_attachments(3) +stats = {'analytic_type': "IIC Test"} + +####################################################### + +create_generic_hist(attachments3, 'num_iic_correct', stats) + +######################################################## + +create_generic_hist(attachments3, 'num_iic_checks', stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/iic/iic_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + diff --git a/cgi-bin/EngineDB/is_new_board.py b/cgi-bin/EngineDB/is_new_board.py new file mode 100755 index 0000000..4617c7d --- /dev/null +++ b/cgi-bin/EngineDB/is_new_board.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 + + +import cgi +import base +import add_test_functions +import os + + +print("Content-type: text/html\n") + +base.header(title='is_new_board') +base.top() + + +form = cgi.FieldStorage() + +if form.getvalue('serial_number'): + serial_number = cgi.escape(form.getvalue('serial_number')) + + + is_new_board_bool = add_test_functions.is_new_board(serial_number) + + print('Begin') + + print(is_new_board_bool) + + print('End') + + +else: + print ("NO SERIAL SENT") + + +base.bottom() + diff --git a/cgi-bin/EngineDB/loadDBInfo.py b/cgi-bin/EngineDB/loadDBInfo.py new file mode 100755 index 0000000..5c48897 --- /dev/null +++ b/cgi-bin/EngineDB/loadDBInfo.py @@ -0,0 +1,97 @@ +#!/usr/bin/python3 + +import argparse +import add_test_functions +import connect +import getpass +import importlib.util +import json + +def load_config(path): + + base = path.split("/")[-1][:-3] + + spec = importlib.util.spec_from_file_location(base, path) + cfg = importlib.util.module_from_spec(spec) + + spec.loader.exec_module(cfg) + + config = cfg.masterCfg + return config + +def add_tests(test_list, passwd): + + order = 1 + for test in test_list: + print("Adding new test type: {}".format(test["name"])) + try: + add_test_functions.add_new_test(test["name"], test["required"], test["desc_short"], test["desc_long"], order, passwd) + order += 1 + except Exception as e: + print("Test malformated or already in DB: {}. Check config file before proceeding.".format(test["name"])) + quit() + +def add_people(people_list, passwd): + + for person in people_list: + print("Adding new tester: {}".format(person)) + try: + add_test_functions.add_tester(person, passwd) + except Exception as e: + print("Tester could not be added to the database: {}. Check config file before proceeding.".format(person)) + quit() + +def add_boards(board_type_list, passwd): + + for board in board_type_list: + print("Adding new board type: {}".format(board["name"])) + try: + add_test_functions.add_board_type(board["name"], board["type_sn"], board["requiredTests"], passwd) + except Exception as e: + print(e) + print("Board type could not be added: {}. Check config file before proceeding".format(board["name"])) + quit() + + +def main(): + + parser = argparse.ArgumentParser() + + parser.add_argument("--config", action="store", type=str, help="Input path for config (should be a static directory)") + + args = parser.parse_args() + + # Get configuration file with test types, people, board types, and DB info + try: + + config = load_config(args.config) + + except Exception as e: + + print("No file found") + quit() + + passwd = getpass.getpass(prompt="{} Admin Password: ".format(config["DBInfo"]["name"])) + + # Password verification + try: + + conn = connect.connect_admin(passwd) + + except Exception as e: + + print("Invalid Password. Try Again.") + quit() + + print("\n-----------------------------") + print(" DB Connection Established ") + print("-----------------------------\n") + + add_tests(config["Test"], passwd) + add_boards(config["Board_type"], passwd) + add_people(config["People"], passwd) + + print("Database updated with information from {}!".format(args.config)) + +if __name__ == "__main__": + main() diff --git a/cgi-bin/EngineDB/module.py b/cgi-bin/EngineDB/module.py new file mode 100755 index 0000000..74fa259 --- /dev/null +++ b/cgi-bin/EngineDB/module.py @@ -0,0 +1,37 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import module_functions +from connect import connect + +#cgi header +print("Content-type: text/html\n") + + +form = cgi.FieldStorage() +board_id = base.cleanCGInumber(form.getvalue('board_id')) +serial_num = base.cleanCGInumber(form.getvalue('serial_num')) +base.header(title='Wagon DB') +base.top() +#print('card_id = ', card_id) +#print 'serial_num = ', serial_num + +module_functions.add_test_tab(serial_num, board_id) + +db = connect(0) +cur = db.cursor() + +revokes=module_functions.Portage_fetch_revokes(board_id) + +cur.execute("SELECT location, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, info FROM Board_Info WHERE board_id = %s" % board_id) +info = cur.fetchall() + +module_functions.board_info(info) + +cur.execute("select test_type, name from Test_Type where required = 1 order by relative_order ASC") +for test_type in cur: + module_functions.ePortageTest(test_type[0], serial_num, test_type[1], revokes) + +base.bottom() diff --git a/cgi-bin/EngineDB/module_functions.py b/cgi-bin/EngineDB/module_functions.py new file mode 100755 index 0000000..f8fd321 --- /dev/null +++ b/cgi-bin/EngineDB/module_functions.py @@ -0,0 +1,250 @@ +#!/usr/bin/python3 +from connect import connect +import sys +#import mysql.connector +from get_attach import save +import home_page_list + +def Portage_fetch(test_type_id, board_sn): + db = connect(0) + cur = db.cursor() + cur.execute("SELECT People.person_name, Test.day, Test.successful, Test.comments, Test_Type.name, Test.test_id FROM Test, Test_Type, People, Board WHERE Test_Type.test_type = %(test_id)s AND Board.full_id = %(sn)s AND People.person_id = Test.person_id AND Test_Type.test_type=Test.test_type_id AND Test.board_id = Board.board_id ORDER BY Test.day ASC" %{'test_id':test_type_id, 'sn':board_sn}) + return cur.fetchall() + +def Portage_fetch_revokes(board_sn): + db=connect(0) + cur = db.cursor() + cur.execute("SELECT TestRevoke.test_id, TestRevoke.comment FROM TestRevoke,Test,Board WHERE Board.sn = %(sn)s AND Board.board_id = Test.board_id AND Test.test_id = TestRevoke.test_id" %{'sn':board_sn}) + # build a dictionary + revoked={} + for fromdb in cur.fetchall(): + revoked[fromdb[0]]=fromdb[1] + return revoked + +def Portage_fetch_attach(test_id): + db = connect(0) + cur = db.cursor() + cur.execute('SELECT attach_id, attachmime, attachdesc, originalname FROM Attachments WHERE test_id=%(tid)s ORDER BY attach_id' % {'tid':test_id}) + return cur.fetchall() + +def add_test_tab(sn, board_id): + + print('
') + print('
') + print('

Wagon Test Info for %d

' %sn) + print('
') + print('
') + + print('') + + + +def ePortageTest(test_type_id, board_sn, test_name, revokes): + attempts = Portage_fetch(test_type_id, board_sn) + print('
') + print('
') + print('
') + print('

%(name)s

' %{ "name":test_name}) + print('
') + + n = 0 + for attempt in attempts: + n += 1 + + print('

Attempt: %d

'%n) + print('') + print('') + print('') + print('') + print('') + print('') +# print '' + print('') + print('') + print('' %{ "pname":attempt[0]}) + print('' %{ "when":attempt[1]}) + if attempt[2] == 1: + if attempt[5] in revokes: + print('' %{ "comment":revokes[attempt[5]] }) + else: + print('') + if len(sys.argv) == 1: + print("" %{ "id":attempt[5]}) + + else: + print('') + print('') + print('') + print('' ) + print('' %{ "comm":attempt[3]}) + print('') + attachments=Portage_fetch_attach(attempt[5]) + for afile in attachments: + if len(sys.argv) == 1: + print('' % (afile[0],afile[3],afile[2])) + else: + print('' % (afile[0], afile[3], afile[2])) + stdout = sys.stdout + sys.stdout = open("%(loc)s/%(f)s.html" %{'loc':sys.argv[1], 'f':afile[0]},'w') + save(afile[0]) + sys.stdout.close() + sys.stdout = stdout + + print('') + print('
NameDateSuccessful?Comments
%(pname)s %(when)s Revoked: %(comment)s Yes RevokeNo
Comments: %(comm)s
Attachment: %s%s
Attachment: %s%s
') + + print('
') + print('
') + +def board_info(info): + if info and len(info[0]) == 5: + location = info[0][0] + daq_chip_id = info[0][1] + trigger_chip_1_id = info[0][2] + trigger_chip_2_id = info[0][3] + info_com = info[0][4] + + else: + location, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, info_com = "None", "None", "None", "None", "None" + + print('
') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('' % location) + if daq_chip_id != "0" and trigger_chip_1_id != "0" and trigger_chip_2_id != "0": + print('' % daq_chip_id) + print('' % trigger_chip_1_id) + print('' % trigger_chip_2_id) + else: + print('') + print('') + print('') + + print('') + print('') + print('') + print('') + print('' % info_com) + print('') + print('') + print('
LocationDAQ Chip IDTrigger Chip 1 IDTrigger Chip 2 ID
%s%s%s%sNoneNoneNone
Comments
%s
') + print('
') + +def add_board_info(board_id, sn, location, daqid, trig1id, trig2id, info): + db = connect(1) + cur = db.cursor() + + if not board_id: + try: + cur.execute('SELECT board_id FROM Board WHERE full_id = %s;' % sn) + rows = cur.fetchall() + + if not rows: + home_page_list.add_module(sn) + cur.execute('SELECT board_id FROM Board WHERE full_id = %s;' % sn) + board_id = cur.fetchall()[0][0] + else: + board_id = rows[0][0] + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + + try: + cur.execute('INSERT INTO Board_Info (board_id, info_type, info, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, location) VALUES (%i, %i, "%s", "%s", "%s", "%s", "%s");' % (board_id, 0, info, daqid, trig1id, trig2id, location)) + + db.commit() + db.close() + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + +def add_revoke(test_id): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT test_type_id, board_id FROM Test WHERE test_id = %s" % test_id) + test_type_id, board_id = cur.fetchall()[0] + + cur.execute("SELECT name FROM Test_Type WHERE test_type = %s" % test_type_id) + name = cur.fetchall()[0][0] + + cur.execute("Select full_id FROM Board WHERE board_id = %s" % board_id) + full_id = cur.fetchall()[0][0] + + print('
') + print('
') + print('

Revoke %s for Board %s

' % (name, full_id)) + print('
') + print('
') + + print('
') + print('' % test_id) + print('
') + print('') + print('') + print('
') + print('
') + print('
') + print('') + print('') + +def revoke_success(test_id, comments): + db = connect(1) + cur = db.cursor() + + try: + cur.execute('INSERT INTO TestRevoke (test_id, comment) VALUES (%s, "%s")' % (test_id, comments)) + + db.commit() + db.close() + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + +def get_test_types(): + db = connect(0) + cur = db.cursor() + + try: + cur.execute('SELECT name, test_type FROM Test_Type') + + rows = cur.fetchall() + tests = [[r[0],r[1]] for r in rows] + + return tests + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + diff --git a/cgi-bin/EngineDB/module_functions.pyc b/cgi-bin/EngineDB/module_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfd74e5bfdf4681722d7a0561812d9c1986d44b7 GIT binary patch literal 9107 zcmcIqNpl=Y70&9`Zp*f2QFSB|Z%NWL3u2e3sGGAuC_r0Z5 z{`>UQKaZS7Q`vtd{Qdxs{uPP<{~Z-8)mG}BQV!cC6+7ylBV(wS)V;FQ%PJmG?NN1a zv`aUp?v1HnMEwMBkE>u*DibOglggwD#-%c)f(fadP{E{BPO4x^D$^=BA(c}qI4PCW zDwvka8M3lfJq0$Sf8k%%K`kFg(M*#hZ04J$X9PXke-t*kGd4!?th4h5id=U1siTfc z>ae69IO_t=tR9rOLWF+Ml+}BO*z<^b?;MC74wp%~RpoS>5elU}u&}l9@y7Zc z_meQ~#Nl!$%ygP;Cw@Czbnk>ZUk>~OThsf^W~lYfer!9MX}cXJxi-!1I|rR`x$n&! zuWv_z`wj2*w`8t9x<$L-qWfX$XMyY9{bxz+Nl<_dt>vad1V=V z#GIbvIoBMf~PoR4z%$qGgj)giuNoq1``4JMs zicVzSpplo&Y*qYHQt0dIsjjh;+83PNXP(#WTg zN%R|;6k&w$L1Lf0BLXZ^dGm)C)X|7K9HGR{L0DOH)LdF!2X17{_E`b#NucRphR69;HDv(&I6ElPsoCh-_rCvp_^nm^ECg}?7J@pc+ROCw+;6s^XN#_>wj-jDsRyBM zF1l$J?M8_o6J^Y;-jJ6BhU{J1+gJl?L;+x-tE1idMQbp4{Ecw49#yw@BQNIYXEEpC z(HpKVpubPkE;xezg#}pW=pRr(C%*X+Kpq8jM5%MAjIbqz434rnR+xctV+JN*2GBjp zv8gV-ke+xt>B*;%PE(Mn$e5MWoq7t*X`zATIb&#M25E#(TA`P)n@v4~vKB;-+-B@+ zy;jN6$CbMN@=$LxjhEWN(z|XaU%KjcG-~Z9ORH}CU}+WPZ<4&VTEFY>rirMadn?&V z-JLXZ=Y!e`hBWo8wt|(8oqg3zj3qE}-|RKM>AS5g+*zymL9k8v0$RRb-~t2^ehE9R>3vE8j1_!{Ar1Xb^u49$s?k* zu+^hRYsaXy;$@P=W?QK;YyA=>;;TSrcG5&Dxpn zz>F*b_j+8-1uvOpUM~73&^If6hoCr%)`WUkQrQKE?Q`N1JRDQmpH*;P-U0fVfw|y< zytntd6UdAX57;t)VLJZ8_IAoVyS@8PP zUm{SOy!P|g#Gj}i#9)ovyw;10ZrT1Wm==+;l9!${vcMdU`&|vYq!9{Mjiem2r zbvIaGO9~=1QFzk;PAjV)1Jz#vQ9poNsJ;v|ePRH65KXBzwbqq7e0JJ!m}lVgl{!vV zDR!9k8d)7aqV=0JZDy@?wGLAswmbPX1L{}ndW{3nm^dt8)HI}AYNS~ZW?|r(W-EOZ zX14Cb=Y15ybWlfXc_R%DEVSm>Dc#^&-l}hcpV|s4-JY9%ZhNStpmDKZ-SLyP)%sR9 zI(px{L}v*#Oeh=318%z0-8I@dNu)>1xfqhit&q_SUIhiug&nwh90%$3Jc=5|YK^*a zHDTf!b(~7oy1U(%O>Ajmv^n#Z>&MY zHy`e1>3$L{VY_K|%{>U?IDLHGJ-X=D3)^_n_>kK+N+crpJTW?A7cILqU$QxmK7gh( zitY5BiS8nj5@vk#tAo2bcWOf0}<@FEavruE}^Z^VK+QF6fo{>du0B zRs2?T0%{N}O8HovMsQ$cn6?fLszkrfQl1P09%2-ba3vN-Ru zg1-~Rq32@c#hKR7y4!c)w!M#;^?ek|Ic*Im%qF6oX=kb=hPE)LVsK}jS?3IXUPbGy z^Gdlezq6n^gLlq4ZVSX$ ze=;KEx!*usseha{eWqHVpD-!LCba4|Z+zQbZ$%yV)=e|;ig~eq2PnJ?izS1XpFOAVeenRHH?(JoDaR87J# z?~x!ZNHd4Kg{u!FF&--1Q=5&OAX@0p)WHL~h9*@^C8vYP4#~{G(}aJh4|uY0JQ*(7 zVM*hCj-D7LI0fhJ6kqM@xV!h68i7H102bhfPpRxT$~l@suAMo6Lxv5Y_+FyaLA_uJ zOM-dv?M)64F$Tb8XWa6MsV3E@^kPw)lG@$mOGC@dIz!7Oj{06e9HGo?3VP^eRBhU+ zhz(6X=|f3Jn{0GnhFM=1hg8!_uHW9=M9Tcu?M-*X^KN_k7wEjTxwYZlac^zjxotwn zZOK7Yi`f@l5i90$O?A=jlhH-@a{@ZlMd@603mIQHUg$#&pBORp0Qwg)|#b_h9%f0n9 z@|Wn5jFaR%;R}?V8E71Rf*I$0>7~+HSo@Quvhz-9$~h&iCJ~g|p!pHK`wJ>Py*nl! z3fVU5RwP1c@b4oY7fTH}r&dDvVMImk`pLvM5M>~dWXg{rLZoO@fUus31M$+B+A$Vd zJb`|9fGmM*$R!X8nPe!CrxFoOZSIy?V5>yp0@@E1i*6zGy~O)qZkB0wtyg-l(|PO> z%cq(CH#o6*heEOy#`s$17TPJFm-^MVySl7Ge)}U-lVUv1OSnWY0g1-ra*QV80{4<# zG^^6)4doa&xhV3FZI_{Dnjo_&x%?tJT1ALaap5qx(qOI9Np)UvLwt$BKG!Pk{Wy<0 zewMFr2BZXYAE7Ews}?1l{oFNVttbe>q~h}I)+#pEs<@B*cpq&>EqZZi?=l}lxlY#^ z8cd~1dMx%EVa)v%T(8^c3yDd)|Dp#`s!-SU7MIGyC%K=6ei4q#dO(akOXGr3a}dP@ z6_+}`R=H9UFJi6o?xhL?Dm&4!+1e|11HX6 za`^S*KM_a>B>BKDW|^=^fREmnAf1)c7lU2}GMh8}J=PFIW{_*fIaiu-X62y=ArTII zhQeDYybAfUK=9@x=*8&2hhFBpUGZJ{V17F_A>ZHQ+#lN!B1epsg(BO~g(G2;`MV4W9x~7J` zw6ERE`WYI%%aXv-x_FK{_(;CLinAtHgpaYtu`8)vkd~0Fe8v8?04)k`78f(OTT(wN zslDs=6YQ4psl)}uMe-JZid*ELNr>x4%h0_=@@37zJgU|l5R>4*;2P!Y^$@h1OMjXx zRTZtmJi~s<@O|+}`fi6ooWwQ8E#boY1z#D{L){JOzhOa%;fgDpE}e8PmL|kM5F2Sk zk9orUGz#&cmb>1Q>_jp5y3LG|^%fubjx uQj_lo|Knc)P;Y9+_p4JQ^lK>2IQ#hB$tgT') +print(''%url) +print("
") +print('
') +print('

Admin Access

') +print("

") +print("
") + +print("
") +print('
') +print("") +print("") +print("
") + +print('
') +print('') +print("
") +print("
") +print("") + +print("
") + +base.bottom() diff --git a/cgi-bin/EngineDB/password_entry2.py b/cgi-bin/EngineDB/password_entry2.py new file mode 100755 index 0000000..b7daa4f --- /dev/null +++ b/cgi-bin/EngineDB/password_entry2.py @@ -0,0 +1,50 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import add_test_functions +import hashlib +import connect + +try: + base_url = connect.get_base_url() + + form = cgi.FieldStorage() + url = form.getvalue("url") + password = form.getvalue("password") + + correct_password = "8ae3ce28c2aecce334e4c2395b86066b" + + if hashlib.md5(password.encode('utf-8')).hexdigest() == correct_password: + print("Location: %s/%s\n\n" % (base_url,url)) + + print("Content-type: text/html\n") + + base.header(title='Access Granted') + base.top() + + print("
") + print('
') + print('

Access Granted

') + print("
") + print("
") + + base.bottom() + + else: + print("Content-type: text/html\n") + + base.header(title='Access Denied') + base.top() + + print("
") + print('
') + print('

Access Denied

') + print("
") + print("
") + + base.bottom() +except Exception as e: + print("content-type: text/html\n") + print(e) diff --git a/cgi-bin/EngineDB/publish.py b/cgi-bin/EngineDB/publish.py new file mode 100755 index 0000000..63946aa --- /dev/null +++ b/cgi-bin/EngineDB/publish.py @@ -0,0 +1,54 @@ +#!/usr/bin/python3 +import sys +import os + +if len(sys.argv) == 1: + print("Please input a destination directory after the script call.") + sys.exit() +else: + if not os.path.isdir(sys.argv[1]): + os.makedirs(sys.argv[1]) +import base +from home_page_list import fetch_list_module +from connect import connect +import home_page +import module_functions +import summary +from summary_functions import get +import shutil + +def copytree(src, dst, symlinks=False, ignore=None): + for item in os.listdir(src): + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isdir(s): + shutil.copytree(s, d, symlinks, ignore) + else: + shutil.copy2(s, d) + +row = fetch_list_module() + +for cards in row: + stdout = sys.stdout + sys.stdout = open('%(loc)s/card_%(sn)s.html' %{ 'loc':sys.argv[1],'sn':cards[0]}, 'w') + serial_num = cards[0] + card_id = cards[1] + base.header(title='uHTR ePortage') + base.top() + revokes=module_functions.Portage_fetch_revokes(serial_num) + + db= connect(0) + cur = db.cursor() + + cur.execute("select test_type, name from Test_Type where required = 1 order by relative_order ASC") + for test_type in cur: + module_functions.ePortageTest(test_type[0], serial_num, test_type[1], revokes) + sys.stdout.close() + sys.stdout = stdout + + base.bottom() + +copytree('../static/css', '%s' %(sys.argv[1])) + +copytree('../static/files' , '%s' %sys.argv[1]) + diff --git a/cgi-bin/EngineDB/revoke_success.py b/cgi-bin/EngineDB/revoke_success.py new file mode 100755 index 0000000..ef5a0b1 --- /dev/null +++ b/cgi-bin/EngineDB/revoke_success.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import base +import home_page_list +import module_functions +from connect import connect + +cgitb.enable() + +#cgi header +print("Content-type: text/html\n") + + +form = cgi.FieldStorage() +test_id = base.cleanCGInumber(form.getvalue('test_id')) +base.header(title='Revoke Test') +base.top() + +module_functions.add_revoke(test_id) + +base.bottom() diff --git a/cgi-bin/EngineDB/revoke_success2.py b/cgi-bin/EngineDB/revoke_success2.py new file mode 100755 index 0000000..3c8d99a --- /dev/null +++ b/cgi-bin/EngineDB/revoke_success2.py @@ -0,0 +1,31 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import base +import module_functions +import connect + +cgitb.enable() + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n"%(base_url)) +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +test_id = base.cleanCGInumber(form.getvalue("test_id")) +comments = form.getvalue("revokeComments") + +if comments: + comments = cgi.escape(comments) + +base.header(title='Revoke Success') +base.top() + +module_functions.revoke_success(test_id, comments) + +base.bottom() + + diff --git a/cgi-bin/EngineDB/settings.py b/cgi-bin/EngineDB/settings.py new file mode 100755 index 0000000..29efbc4 --- /dev/null +++ b/cgi-bin/EngineDB/settings.py @@ -0,0 +1,7 @@ +#!/usr/bin/python3 +def getAttachmentBasePath(): + return "/home/jmmans/tmp/ePortage" +# return "/home/daq/ePortageArchive/uHTR" + +def getAttachmentPathFor(test_id,attach_id): + return "%s/%d/%d" % (getAttachmentBasePath(),test_id,attach_id) diff --git a/cgi-bin/EngineDB/settings.pyc b/cgi-bin/EngineDB/settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ac922cc45b72ead489c8e4cad7f38645f6320ae GIT binary patch literal 532 zcmbVIJx{|h5Ir{)v`B1FiGi_Fmev^<5#mE)tg5ngsa)G6L2(l0t^*Pq{2hKBe}Fry zv?^n*yYsV8Pxsy>Kj&xP*8^i=dlcXIoH*j*0KNd03{(UPTn}E-gj)xMCn5BOpt#** zFvBaZx@dyeZy}f(HHB9DdDD@}eacPvS8%#x*sj6sCd+iYSy!c96%;CM^K!B-YmJ_$ ztaF^U?{vwO+|vV*u|@DTJsR|LLxpHSDWI%ek|HoFy#_S literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/static/config.json b/cgi-bin/EngineDB/static/config.json new file mode 100644 index 0000000..6ba5807 --- /dev/null +++ b/cgi-bin/EngineDB/static/config.json @@ -0,0 +1,408 @@ +{ + "vars": { + "@gray-base": "#000", + "@gray-darker": "lighten(@gray-base, 13.5%)", + "@gray-dark": "lighten(@gray-base, 20%)", + "@gray": "lighten(@gray-base, 33.5%)", + "@gray-light": "lighten(@gray-base, 46.7%)", + "@gray-lighter": "lighten(@gray-base, 93.5%)", + "@brand-primary": "darken(#428bca, 6.5%)", + "@brand-success": "#5cb85c", + "@brand-info": "#5bc0de", + "@brand-warning": "#f0ad4e", + "@brand-danger": "#d9534f", + "@body-bg": "#fff", + "@text-color": "@gray-dark", + "@link-color": "@brand-primary", + "@link-hover-color": "darken(@link-color, 15%)", + "@link-hover-decoration": "underline", + "@font-family-sans-serif": "\"Helvetica Neue\", Helvetica, Arial, sans-serif", + "@font-family-serif": "Georgia, \"Times New Roman\", Times, serif", + "@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace", + "@font-family-base": "@font-family-sans-serif", + "@font-size-base": "14px", + "@font-size-large": "ceil((@font-size-base * 1.25))", + "@font-size-small": "ceil((@font-size-base * 0.85))", + "@font-size-h1": "floor((@font-size-base * 2.6))", + "@font-size-h2": "floor((@font-size-base * 2.15))", + "@font-size-h3": "ceil((@font-size-base * 1.7))", + "@font-size-h4": "ceil((@font-size-base * 1.25))", + "@font-size-h5": "@font-size-base", + "@font-size-h6": "ceil((@font-size-base * 0.85))", + "@line-height-base": "1.428571429", + "@line-height-computed": "floor((@font-size-base * @line-height-base))", + "@headings-font-family": "inherit", + "@headings-font-weight": "500", + "@headings-line-height": "1.1", + "@headings-color": "inherit", + "@icon-font-path": "\"../fonts/\"", + "@icon-font-name": "\"glyphicons-halflings-regular\"", + "@icon-font-svg-id": "\"glyphicons_halflingsregular\"", + "@padding-base-vertical": "6px", + "@padding-base-horizontal": "12px", + "@padding-large-vertical": "10px", + "@padding-large-horizontal": "16px", + "@padding-small-vertical": "5px", + "@padding-small-horizontal": "10px", + "@padding-xs-vertical": "1px", + "@padding-xs-horizontal": "5px", + "@line-height-large": "1.3333333", + "@line-height-small": "1.5", + "@border-radius-base": "4px", + "@border-radius-large": "6px", + "@border-radius-small": "3px", + "@component-active-color": "#fff", + "@component-active-bg": "@brand-primary", + "@caret-width-base": "4px", + "@caret-width-large": "5px", + "@table-cell-padding": "8px", + "@table-condensed-cell-padding": "5px", + "@table-bg": "transparent", + "@table-bg-accent": "#f9f9f9", + "@table-bg-hover": "#f5f5f5", + "@table-bg-active": "@table-bg-hover", + "@table-border-color": "#ddd", + "@btn-font-weight": "normal", + "@btn-default-color": "#333", + "@btn-default-bg": "#fff", + "@btn-default-border": "#ccc", + "@btn-primary-color": "#fff", + "@btn-primary-bg": "@brand-primary", + "@btn-primary-border": "darken(@btn-primary-bg, 5%)", + "@btn-success-color": "#fff", + "@btn-success-bg": "@brand-success", + "@btn-success-border": "darken(@btn-success-bg, 5%)", + "@btn-info-color": "#fff", + "@btn-info-bg": "@brand-info", + "@btn-info-border": "darken(@btn-info-bg, 5%)", + "@btn-warning-color": "#fff", + "@btn-warning-bg": "@brand-warning", + "@btn-warning-border": "darken(@btn-warning-bg, 5%)", + "@btn-danger-color": "#fff", + "@btn-danger-bg": "@brand-danger", + "@btn-danger-border": "darken(@btn-danger-bg, 5%)", + "@btn-link-disabled-color": "@gray-light", + "@input-bg": "#fff", + "@input-bg-disabled": "@gray-lighter", + "@input-color": "@gray", + "@input-border": "#ccc", + "@input-border-radius": "@border-radius-base", + "@input-border-radius-large": "@border-radius-large", + "@input-border-radius-small": "@border-radius-small", + "@input-border-focus": "#66afe9", + "@input-color-placeholder": "#999", + "@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)", + "@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)", + "@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)", + "@legend-color": "@gray-dark", + "@legend-border-color": "#e5e5e5", + "@input-group-addon-bg": "@gray-lighter", + "@input-group-addon-border-color": "@input-border", + "@cursor-disabled": "not-allowed", + "@dropdown-bg": "#fff", + "@dropdown-border": "rgba(0,0,0,.15)", + "@dropdown-fallback-border": "#ccc", + "@dropdown-divider-bg": "#e5e5e5", + "@dropdown-link-color": "@gray-dark", + "@dropdown-link-hover-color": "darken(@gray-dark, 5%)", + "@dropdown-link-hover-bg": "#f5f5f5", + "@dropdown-link-active-color": "@component-active-color", + "@dropdown-link-active-bg": "@component-active-bg", + "@dropdown-link-disabled-color": "@gray-light", + "@dropdown-header-color": "@gray-light", + "@dropdown-caret-color": "#000", + "@screen-xs": "480px", + "@screen-xs-min": "@screen-xs", + "@screen-phone": "@screen-xs-min", + "@screen-sm": "768px", + "@screen-sm-min": "@screen-sm", + "@screen-tablet": "@screen-sm-min", + "@screen-md": "992px", + "@screen-md-min": "@screen-md", + "@screen-desktop": "@screen-md-min", + "@screen-lg": "1200px", + "@screen-lg-min": "@screen-lg", + "@screen-lg-desktop": "@screen-lg-min", + "@screen-xs-max": "(@screen-sm-min - 1)", + "@screen-sm-max": "(@screen-md-min - 1)", + "@screen-md-max": "(@screen-lg-min - 1)", + "@grid-columns": "12", + "@grid-gutter-width": "30px", + "@grid-float-breakpoint": "@screen-sm-min", + "@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)", + "@container-tablet": "(720px + @grid-gutter-width)", + "@container-sm": "@container-tablet", + "@container-desktop": "(940px + @grid-gutter-width)", + "@container-md": "@container-desktop", + "@container-large-desktop": "(1140px + @grid-gutter-width)", + "@container-lg": "@container-large-desktop", + "@navbar-height": "50px", + "@navbar-margin-bottom": "@line-height-computed", + "@navbar-border-radius": "@border-radius-base", + "@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))", + "@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)", + "@navbar-collapse-max-height": "340px", + "@navbar-default-color": "#777", + "@navbar-default-bg": "#f8f8f8", + "@navbar-default-border": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-color": "#777", + "@navbar-default-link-hover-color": "#333", + "@navbar-default-link-hover-bg": "transparent", + "@navbar-default-link-active-color": "#555", + "@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-disabled-color": "#ccc", + "@navbar-default-link-disabled-bg": "transparent", + "@navbar-default-brand-color": "@navbar-default-link-color", + "@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)", + "@navbar-default-brand-hover-bg": "transparent", + "@navbar-default-toggle-hover-bg": "#ddd", + "@navbar-default-toggle-icon-bar-bg": "#888", + "@navbar-default-toggle-border-color": "#ddd", + "@navbar-inverse-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-bg": "#222", + "@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-link-hover-color": "#fff", + "@navbar-inverse-link-hover-bg": "transparent", + "@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color", + "@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-disabled-color": "#444", + "@navbar-inverse-link-disabled-bg": "transparent", + "@navbar-inverse-brand-color": "@navbar-inverse-link-color", + "@navbar-inverse-brand-hover-color": "#fff", + "@navbar-inverse-brand-hover-bg": "transparent", + "@navbar-inverse-toggle-hover-bg": "#333", + "@navbar-inverse-toggle-icon-bar-bg": "#fff", + "@navbar-inverse-toggle-border-color": "#333", + "@nav-link-padding": "10px 15px", + "@nav-link-hover-bg": "@gray-lighter", + "@nav-disabled-link-color": "@gray-light", + "@nav-disabled-link-hover-color": "@gray-light", + "@nav-tabs-border-color": "#ddd", + "@nav-tabs-link-hover-border-color": "@gray-lighter", + "@nav-tabs-active-link-hover-bg": "@body-bg", + "@nav-tabs-active-link-hover-color": "@gray", + "@nav-tabs-active-link-hover-border-color": "#ddd", + "@nav-tabs-justified-link-border-color": "#ddd", + "@nav-tabs-justified-active-link-border-color": "@body-bg", + "@nav-pills-border-radius": "@border-radius-base", + "@nav-pills-active-link-hover-bg": "@component-active-bg", + "@nav-pills-active-link-hover-color": "@component-active-color", + "@pagination-color": "@link-color", + "@pagination-bg": "#fff", + "@pagination-border": "#ddd", + "@pagination-hover-color": "@link-hover-color", + "@pagination-hover-bg": "@gray-lighter", + "@pagination-hover-border": "#ddd", + "@pagination-active-color": "#fff", + "@pagination-active-bg": "@brand-primary", + "@pagination-active-border": "@brand-primary", + "@pagination-disabled-color": "@gray-light", + "@pagination-disabled-bg": "#fff", + "@pagination-disabled-border": "#ddd", + "@pager-bg": "@pagination-bg", + "@pager-border": "@pagination-border", + "@pager-border-radius": "15px", + "@pager-hover-bg": "@pagination-hover-bg", + "@pager-active-bg": "@pagination-active-bg", + "@pager-active-color": "@pagination-active-color", + "@pager-disabled-color": "@pagination-disabled-color", + "@jumbotron-padding": "30px", + "@jumbotron-color": "inherit", + "@jumbotron-bg": "@gray-lighter", + "@jumbotron-heading-color": "inherit", + "@jumbotron-font-size": "ceil((@font-size-base * 1.5))", + "@state-success-text": "#3c763d", + "@state-success-bg": "#dff0d8", + "@state-success-border": "darken(spin(@state-success-bg, -10), 5%)", + "@state-info-text": "#31708f", + "@state-info-bg": "#d9edf7", + "@state-info-border": "darken(spin(@state-info-bg, -10), 7%)", + "@state-warning-text": "#8a6d3b", + "@state-warning-bg": "#fcf8e3", + "@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)", + "@state-danger-text": "#a94442", + "@state-danger-bg": "#f2dede", + "@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)", + "@tooltip-max-width": "200px", + "@tooltip-color": "#fff", + "@tooltip-bg": "#000", + "@tooltip-opacity": ".9", + "@tooltip-arrow-width": "5px", + "@tooltip-arrow-color": "@tooltip-bg", + "@popover-bg": "#fff", + "@popover-max-width": "276px", + "@popover-border-color": "rgba(0,0,0,.2)", + "@popover-fallback-border-color": "#ccc", + "@popover-title-bg": "darken(@popover-bg, 3%)", + "@popover-arrow-width": "10px", + "@popover-arrow-color": "@popover-bg", + "@popover-arrow-outer-width": "(@popover-arrow-width + 1)", + "@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)", + "@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)", + "@label-default-bg": "@gray-light", + "@label-primary-bg": "@brand-primary", + "@label-success-bg": "@brand-success", + "@label-info-bg": "@brand-info", + "@label-warning-bg": "@brand-warning", + "@label-danger-bg": "@brand-danger", + "@label-color": "#fff", + "@label-link-hover-color": "#fff", + "@modal-inner-padding": "15px", + "@modal-title-padding": "15px", + "@modal-title-line-height": "@line-height-base", + "@modal-content-bg": "#fff", + "@modal-content-border-color": "rgba(0,0,0,.2)", + "@modal-content-fallback-border-color": "#999", + "@modal-backdrop-bg": "#000", + "@modal-backdrop-opacity": ".5", + "@modal-header-border-color": "#e5e5e5", + "@modal-footer-border-color": "@modal-header-border-color", + "@modal-lg": "900px", + "@modal-md": "600px", + "@modal-sm": "300px", + "@alert-padding": "15px", + "@alert-border-radius": "@border-radius-base", + "@alert-link-font-weight": "bold", + "@alert-success-bg": "@state-success-bg", + "@alert-success-text": "@state-success-text", + "@alert-success-border": "@state-success-border", + "@alert-info-bg": "@state-info-bg", + "@alert-info-text": "@state-info-text", + "@alert-info-border": "@state-info-border", + "@alert-warning-bg": "@state-warning-bg", + "@alert-warning-text": "@state-warning-text", + "@alert-warning-border": "@state-warning-border", + "@alert-danger-bg": "@state-danger-bg", + "@alert-danger-text": "@state-danger-text", + "@alert-danger-border": "@state-danger-border", + "@progress-bg": "#f5f5f5", + "@progress-bar-color": "#fff", + "@progress-border-radius": "@border-radius-base", + "@progress-bar-bg": "@brand-primary", + "@progress-bar-success-bg": "@brand-success", + "@progress-bar-warning-bg": "@brand-warning", + "@progress-bar-danger-bg": "@brand-danger", + "@progress-bar-info-bg": "@brand-info", + "@list-group-bg": "#fff", + "@list-group-border": "#ddd", + "@list-group-border-radius": "@border-radius-base", + "@list-group-hover-bg": "#f5f5f5", + "@list-group-active-color": "@component-active-color", + "@list-group-active-bg": "@component-active-bg", + "@list-group-active-border": "@list-group-active-bg", + "@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)", + "@list-group-disabled-color": "@gray-light", + "@list-group-disabled-bg": "@gray-lighter", + "@list-group-disabled-text-color": "@list-group-disabled-color", + "@list-group-link-color": "#555", + "@list-group-link-hover-color": "@list-group-link-color", + "@list-group-link-heading-color": "#333", + "@panel-bg": "#fff", + "@panel-body-padding": "15px", + "@panel-heading-padding": "10px 15px", + "@panel-footer-padding": "@panel-heading-padding", + "@panel-border-radius": "@border-radius-base", + "@panel-inner-border": "#ddd", + "@panel-footer-bg": "#f5f5f5", + "@panel-default-text": "@gray-dark", + "@panel-default-border": "#ddd", + "@panel-default-heading-bg": "#f5f5f5", + "@panel-primary-text": "#fff", + "@panel-primary-border": "@brand-primary", + "@panel-primary-heading-bg": "@brand-primary", + "@panel-success-text": "@state-success-text", + "@panel-success-border": "@state-success-border", + "@panel-success-heading-bg": "@state-success-bg", + "@panel-info-text": "@state-info-text", + "@panel-info-border": "@state-info-border", + "@panel-info-heading-bg": "@state-info-bg", + "@panel-warning-text": "@state-warning-text", + "@panel-warning-border": "@state-warning-border", + "@panel-warning-heading-bg": "@state-warning-bg", + "@panel-danger-text": "@state-danger-text", + "@panel-danger-border": "@state-danger-border", + "@panel-danger-heading-bg": "@state-danger-bg", + "@thumbnail-padding": "4px", + "@thumbnail-bg": "@body-bg", + "@thumbnail-border": "#ddd", + "@thumbnail-border-radius": "@border-radius-base", + "@thumbnail-caption-color": "@text-color", + "@thumbnail-caption-padding": "9px", + "@well-bg": "#f5f5f5", + "@well-border": "darken(@well-bg, 7%)", + "@badge-color": "#fff", + "@badge-link-hover-color": "#fff", + "@badge-bg": "@gray-light", + "@badge-active-color": "@link-color", + "@badge-active-bg": "#fff", + "@badge-font-weight": "bold", + "@badge-line-height": "1", + "@badge-border-radius": "10px", + "@breadcrumb-padding-vertical": "8px", + "@breadcrumb-padding-horizontal": "15px", + "@breadcrumb-bg": "#f5f5f5", + "@breadcrumb-color": "#ccc", + "@breadcrumb-active-color": "@gray-light", + "@breadcrumb-separator": "\"/\"", + "@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)", + "@carousel-control-color": "#fff", + "@carousel-control-width": "15%", + "@carousel-control-opacity": ".5", + "@carousel-control-font-size": "20px", + "@carousel-indicator-active-bg": "#fff", + "@carousel-indicator-border-color": "#fff", + "@carousel-caption-color": "#fff", + "@close-font-weight": "bold", + "@close-color": "#000", + "@close-text-shadow": "0 1px 0 #fff", + "@code-color": "#c7254e", + "@code-bg": "#f9f2f4", + "@kbd-color": "#fff", + "@kbd-bg": "#333", + "@pre-bg": "#f5f5f5", + "@pre-color": "@gray-dark", + "@pre-border-color": "#ccc", + "@pre-scrollable-max-height": "340px", + "@component-offset-horizontal": "180px", + "@text-muted": "@gray-light", + "@abbr-border-color": "@gray-light", + "@headings-small-color": "@gray-light", + "@blockquote-small-color": "@gray-light", + "@blockquote-font-size": "(@font-size-base * 1.25)", + "@blockquote-border-color": "@gray-lighter", + "@page-header-border-color": "@gray-lighter", + "@dl-horizontal-offset": "@component-offset-horizontal", + "@hr-border": "@gray-lighter" + }, + "css": [ + "print.less", + "type.less", + "code.less", + "grid.less", + "tables.less", + "forms.less", + "buttons.less", + "responsive-utilities.less", + "button-groups.less", + "input-groups.less", + "labels.less", + "dropdowns.less", + "modals.less" + ], + "js": [ + "alert.js", + "button.js", + "carousel.js", + "dropdown.js", + "modal.js", + "tooltip.js", + "popover.js", + "tab.js", + "affix.js", + "collapse.js", + "scrollspy.js", + "transition.js" + ], + "customizerUrl": "http://getbootstrap.com/customize/?id=c359f3d5455d568ef741" +} \ No newline at end of file diff --git a/cgi-bin/EngineDB/static/css/bootstrap-theme.css b/cgi-bin/EngineDB/static/css/bootstrap-theme.css new file mode 100644 index 0000000..f3f644f --- /dev/null +++ b/cgi-bin/EngineDB/static/css/bootstrap-theme.css @@ -0,0 +1,479 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + text-shadow: 0 1px 0 #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-color: #e8e8e8; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-color: #2e6da4; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} diff --git a/cgi-bin/EngineDB/static/css/bootstrap-theme.min.css b/cgi-bin/EngineDB/static/css/bootstrap-theme.min.css new file mode 100644 index 0000000..a5de857 --- /dev/null +++ b/cgi-bin/EngineDB/static/css/bootstrap-theme.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/cgi-bin/EngineDB/static/css/bootstrap.css b/cgi-bin/EngineDB/static/css/bootstrap.css new file mode 100644 index 0000000..e2d6448 --- /dev/null +++ b/cgi-bin/EngineDB/static/css/bootstrap.css @@ -0,0 +1,3489 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; +} +.form-control::-webkit-input-placeholder { + color: #999999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.form-group-sm .form-control, +select[multiple].form-group-sm .form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.form-group-lg .form-control, +select[multiple].form-group-lg .form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #337ab7; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/cgi-bin/EngineDB/static/css/bootstrap.min.css b/cgi-bin/EngineDB/static/css/bootstrap.min.css new file mode 100644 index 0000000..6d14b1b --- /dev/null +++ b/cgi-bin/EngineDB/static/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/cgi-bin/EngineDB/static/css/style.css b/cgi-bin/EngineDB/static/css/style.css new file mode 100644 index 0000000..5ad9224 --- /dev/null +++ b/cgi-bin/EngineDB/static/css/style.css @@ -0,0 +1,29 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.uHTR_body{ + background-color: #CCAA44 +} + + +.sub-card-form{ + background-color: rgb(199, 215, 190); +} +.sub-card{ + color: red; +} +.sub-card-submit{ + color: red; +} + +.Portage_table{ + border-spacing: 2px; + border-color: gray; + background-color: rgb(215, 255, 202); + margin-left: 25px; +} + diff --git a/cgi-bin/EngineDB/static/files/Thumbs.db b/cgi-bin/EngineDB/static/files/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..74f140121d9558e43cae0c1daa13b2ec8768efe4 GIT binary patch literal 45568 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/static/files/cmslogo.jpg b/cgi-bin/EngineDB/static/files/cmslogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a9ab9d997a889a6b60006df6b172bbc6031f577 GIT binary patch literal 16540 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

9|KhSF4KF6 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/static/files/goldy.pdf b/cgi-bin/EngineDB/static/files/goldy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6a9462047f6b21d3466540351bfc409555179096 GIT binary patch literal 33476 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/static/files/goldy2.png b/cgi-bin/EngineDB/static/files/goldy2.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1d206064b8b6906020c8ce822769891379fde7 GIT binary patch literal 17240 zcmV*DKy1H>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/EngineDB/static/files/us-cms.gif b/cgi-bin/EngineDB/static/files/us-cms.gif new file mode 100644 index 0000000000000000000000000000000000000000..47c369f0829eccce68ddaf512d9949e238be3371 GIT binary patch literal 12642 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 VL#wg}e!o8c)Uh-uQ (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.2 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.2' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('

+
+ +
+ +
+ +
+
HGCAL Board Test
+ +

+ Maintained by the UMN CMS Group. For inquiries or to report a bug, contact Bryan Crossman at cros0400@umn.edu +

+
+ +
+
+ +
+
Links
+ + +
+
+
+
''') + else: + print('''
+
+ +
+ +
+ +
+
HGCAL Board Test
+ +

+ Maintained by the UMN CMS Group. For inquiries or to report a bug, contact Bryan Crossman at cros0400@umn.edu +

+
+ +
+
+ +
+
Links
+ + +
+
+
+
''') + + print('
') + print('') + print('') + print('') + +def cleanCGInumber(cgitext): + if cgitext is None: + return 0 + return int(re.sub('[^0-9]','',cgitext)) + diff --git a/cgi-bin/WagonDB/base.pyc b/cgi-bin/WagonDB/base.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96f2f8d95e0791005fbf7182ad20330976d5e76d GIT binary patch literal 9693 zcmeHNTW{RP73S(eU2?UGCDmIyg;(0yx$&Gc=bX8HJd^+U+1y_{ zKTyxeKNIkK1HR%*NPPIO8KGf3@8@gA^IB0qVLYEOeE6RMvnS=y-%9^n^VY~#sQ^x*; zkuD;AXubdmpDPvoi^jKx@ewr5V7mbn8U>#;jNO`AW zGHy1-1y#wY-waSN@e!6ICMof{G!;xX%uMcD*P!e7*c1kQpLA2U+c3LQCgQqndp@u4 z37>_*L0acb+B}JDH;$!{DNSyy)EDYkZ9fpw_JkNT)T4mcp~fUB3mc}8y^x76W6~r6 zm#mWpvIo^&x^!*Xy8U?j;e+;)OqzG*6PaRxZ6##Z2ikNzt0z5)wm^O?Mc(39kQlXT^>-Q4nJLIm&ekfftGp)V^Gi7bWjjqgO6Y>ew=PvC@TX03AiQW z!c(4D)!swM{m_APLB~ zIuJ>bhG}^)R8_H0Xo20FSNB>RC3g^Yh)BJLS+Cndf_6Q7H-I^AcjD0RU9Bg)V-||o z4Pz=Tn4MiYL~4k8saVR2Kb>ItfcxyIjb2_;qR87ep6{{;}9m zLSfE?oua}ACnIjhQojPUx8FlYQR*pAlKw0Lf6f9wS0DI(?&mpuHwE(Ms0q>hL^y@B zI&LOq%!i(paiE z8oOxkcWgbTyi}b7YD|Sy24fspv^=b0HaS^1#2tj}O9zWU7?j$rKn~6Qiv29L>rzj` z3@;Ryr77%14HK8O(Pq61t6tx*db)=}A>Vl|mwA#k7eFALP%*hxmmT48#F} z$}X#iT=dIbtPtP|91;5Ssqm;4Ui0D3F$Sylg&oX-Q(Bk${*GQwm4VlMpS0Pb zI!?0m+;&E)oE<94kVHvHr8@gI%M5^vZW+brWFHu`^bcTp#<5{}YtD&(!bRpSJoJ># zg71zzu!sF$9C^w{9s7Yt-6O_x!Kk1Bb&pZF>SnO9?@2_k3dnL8O3a3`_ z$|>p`=b1Nd+P8Y!)7B{OORs(7JI-QUTi-mQfLn+MZXv|Gg^-~{Fb{5=oOx2d2YI*= z@A&Qxr%?$jJQrZ7$j8aAfoOpi0!DawYI<&Fdip)c)qnA+2aW2}$DFT2v4Z>66h`

ucw*SG z0BM6vke@y_4aFRNaBj_D(^nfmOD~cT4w?lZXU}aok&pwHS zb+u$FpnmKE{G*U?$w4*FTZM(e!o!dXu&8VgKgO~In^ZhV&xp|sN5Lzn;aNt%2BR{Y zr9HIo5o(jGslMa&=M@a}-AyCUA;O7^V!WLd&|#%jgp;D51# z+j`M%iod^G)~$ETda-exV_$$-@P?N4(sl6E6aKX<>gtSnYL-9QW&Lc!9RI>TR(Z+` z=cujd*e2B93g6nLU4?t7_qpP4aE^C`mj;Q{uW8R7&#_ky=WyYbf5=o+#~uWA9FO5> zrQVa(=dC->!WZ7=+O>B0SzA7Od}l$d{k|ohimw(Q_3p>5Wck_V?X11MyY|&*_r0gw zmQUn8di3~d3--qoVmRPco*G9p58A+Zgd&d~q60XF?q%x6HAv1Atl`G+vNZZLC{p|! z5@X`BJ+m-9p+h$M!9I8=T*p4Yg#^NN;1;z%W27Ib5FrTlkrT!qgc7N+B4~a&iIG3s z^B7*z4j?g9kj~eCSg^kMW(&)zNrj)ZAy`4hqky)7jA5j@C^A<^rKr1S2i_bV$@32t z$L58M^7V~-Jd0eG{tIf9R7UMmZK|f?oVG4OrM~u}mu;!5FkTk7FeGUUBa#LpsN7jq dj>McO_A?08!K<%8j+a1!OB0tqoc(sT`yb?8nacnG literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/bert_analytics.py b/cgi-bin/WagonDB/bert_analytics.py new file mode 100755 index 0000000..ad1a711 --- /dev/null +++ b/cgi-bin/WagonDB/bert_analytics.py @@ -0,0 +1,120 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, number_val, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + if not attachment[str(number_val)] == None: + if not attachment[str(number_val)][graph_title] == None: + values.append(attachment[str(number_val)][graph_title]) + + + # if no values, can't make graph, so return + if len(values) == 0: + return + + + step = 10 + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + full_title = graph_title + " " + str(number_val) + " Values" + plt.title(full_title) + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/bert/{0}_{1}.png'.format(graph_title, number_val)) + plt.close() + + + print(''.format(graph_title, number_val)) + + + add_to_stats(stats, full_title, values) + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments4 = add_test_functions.get_test_attachments(4) +stats = {'analytic_type': "Bit Error Rate Test"} + +######################################################## + +for index in range(1, 11): + create_generic_hist(attachments4, 'Midpoint', index, stats) + create_generic_hist(attachments4, 'Eye Opening', index, stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/bert/bert_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + diff --git a/cgi-bin/WagonDB/board_check_functions.py b/cgi-bin/WagonDB/board_check_functions.py new file mode 100755 index 0000000..1790718 --- /dev/null +++ b/cgi-bin/WagonDB/board_check_functions.py @@ -0,0 +1,194 @@ +#!/usr/bin/python3 + +from connect import connect +import cgi +import cgitb; cgitb.enable() +import base +import home_page_list +import add_test_functions + +def board_checkout_form_sn(sn): + db = connect(0) + cur = db.cursor() + + print('

') + print("
") + print('
') + print('

Board Checkout

') + print("
") + print("
") + + print("
") + print('
') + print('') + print(''%sn) + print("
") + + cur.execute("Select person_id, person_name from People;") + + print('
') + print('') + print('
') + + print("
") + print('
') + print("") + cur.execute("select test_type, name from Test_Type order by relative_order ASC;") + print('') + print("
") + print("
") + + print("
") + print('
') + print('

') + print('') + print('

') + print('
') + + print("
") + print('
') + print('') + print("
") + print("
") + print("
") + print("
") + print("") + +def board_checkout(serial_num, person_id, test_type, comments): + db = connect(1) + cur = db.cursor() + + try: + cur.execute("SELECT sn FROM Board WHERE '%s' = full_id" % serial_num) + board_id = cur.fetchone()[0] + + sql = "SELECT checkout_id, person_id FROM Check_Out WHERE board_id = %s" % board_id + cur.execute(sql) + checkouts = cur.fetchall() + if checkouts: + checkout_id = checkouts[-1][0] + checkout_person = checkouts[-1][1] + sql = "SELECT Check_In.checkout_id FROM Check_In, Check_Out WHERE Check_In.checkout_id = %s AND Check_Out.checkout_id = %s" % (checkout_id, checkout_id) + cur.execute(sql) + results = cur.fetchall() + if results: + sql = "INSERT INTO Check_Out (board_id, test_type, person_id, comment, checkout_date) VALUES (%s, %s, %s, '%s', NOW())" % (board_id, test_type, person_id, comments) + cur.execute(sql) + + db.commit() + else: + cur.execute("SELECT People.person_name FROM People WHERE People.person_id = %s" % person_id) + tester = cur.fetchone()[0] + + print('
') + print('
') + print('

This board is currently checked out by %s

' % tester) + print('
') + print('
') + + print('
') + print('') + print('
') + else: + sql = "INSERT INTO Check_Out (board_id, test_type, person_id, comment, checkout_date) VALUES (%s, %s, %s, '%s', NOW())" % (board_id, test_type, person_id, comments) + cur.execute(sql) + + db.commit() + + + except Exception as e: + print(e) + + print('
') + print('
') + print('

Attempt Failed. Please ensure all fields are filled.

') + print('
') + print('
') + + +def board_checkin_form_sn(sn): + db = connect(0) + cur = db.cursor() + + print('
') + print("
") + print('
') + print('

Board Checkin

') + print("
") + print("
") + + print("
") + print('
') + print('') + print('') + print("
") + print("
") + + print("
") + print('
') + print('') + print("
") + print("
") + print("
") + print("
") + print("
") + +def board_checkin(board_id): + db = connect(1) + cur = db.cursor() + + try: + cur.execute("SELECT checkout_id FROM Check_Out WHERE board_id = %s" % board_id) + checkout_id = cur.fetchall()[0] + + sql = "INSERT INTO Check_In (checkout_id, checkin_date) VALUES (%s, NOW())" % (checkout_id) + cur.execute(sql) + + db.commit() + + except Exception as e: + print(e) + print(cur.fetchall()) + + print('
') + print('
') + print('

Attempt Failed. Please ensure all fields are filled.

') + print('
') + print('
') diff --git a/cgi-bin/WagonDB/board_check_functions.pyc b/cgi-bin/WagonDB/board_check_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f1c40ecec097d1f9247fccea7ac7d4a1c921f01 GIT binary patch literal 3717 zcmc&$ZEq7t5Z*i62@aSfP|^lUwK^${Q^hz9FKvZ=BBX{;frHLzQ$?yy=espNxHoRs zX(BnF=r7?*|4n~OrT&0+X7A0RF%*@maXg;ey_ubz-DjRD{ZX46Hh#BklK!didk?9egM&E&UKQs&&R;-L197xMVEWsiu9Fkk*hMl1 zsgPy-nJ3Ew6`j01B>T<+S}dZFi^}yb;p1fx=?WhuD_nt*3BQn}B{Bwye&MI^`&;I> zaQQL1`~<}^iZ?bW7rc6U;#&UrDQX0gejSq8bwLo`1<@LWu}>{qxM9%N`k@s&raff# zi*O`1Z$!r$^_dukPFssYE;PylTO3EMt@$HQxRDi$CVFT%masIPFQQAwJ*2j0ao%2y z!=G1mzJ6+ywy9=^Uc+}9cW5LUw`jyc_(zRR>K`{Y!OapH3^(=r7!Tb}NAf*&~1$en%-lvYk9Og^7|}qHRY_%Z{nM75RC*)wky~X z>^`u3*gBUcW*|*8dT4ng7+v8I_!nT;V;)>#8nKv%f$2KynTpnQ5Qjc}%EHKFcjfC7 z>B`bFE&f^_zrM$~fCX;g2u~JFQm)D4033-p^sd6%hV^y z!>yZWLBrT#G3_7In0c0P51E;aZ1uM9{?pXtOPrY+d8!ksnRa5|Ou2Da^Ns7*wj!N>jnjCwte9C8z{1z17U#*7@gXJb6d?sPDUQOVbOP z!6w7gX;@0+0XDJfwj_r2dI@v`zC<9(>=9hxSe9jW#O#q^b*#t&If4iB$LR~Sfj0$S zm;9Q^r#!QG`a}wT7qsRu^jXu6L%wlqW1|_3`krf>L*aW(`ttWMu zv&-Ne*TFPMQu-B?f|SZw$x~9QkmG$au1IoGCE*~!;6MpU3&?8u1o#k4W{_ln&45-0 zWwLZKo0^ShC1aq=GMb?A!=3%$OHvjU@?ws}uZePU4#p*`6`WTv9Zm!a`B4^r47{5_ zdkxfH=W%CykMe*%Fm|8Nq|)y1bc_zgdH_XwF!DSoUoN~%cnIQAx7RWD=%eo5Zc>xY zU8s-s~?yqE(~5Ql*PGZ1^y zM+R^MZBN|5oFp1_sa2ZYnbe39&I?!gGBAc%@EDk+P~LTO2?3mpSR$WK)&)Z_vujO*V1KWYN48 zoe{QiNuzWTHEe+9A^-|( Serial Number = %(s)s , )s
' %{'s': sn} + home_page_list.add_module(sn) + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('') + print('
') + + print('

') + + + home_page_list.render_list_module() + + base.bottom() + + +else: + print('
') + print('
') + print('

FAILED. Enter SERIAL NUMBER

') + print('
') + print('
') + + home_page_list.add_module_form() + + + print('
') + print('
') + print('

List of All Boards

' ) + print('(Sorted by Serial Number)') + print('
') + print('
') + + print('

') + + home_page_list.render_list_module() + + base.bottom() + + + + diff --git a/cgi-bin/WagonDB/checkout_summary.py b/cgi-bin/WagonDB/checkout_summary.py new file mode 100755 index 0000000..3487289 --- /dev/null +++ b/cgi-bin/WagonDB/checkout_summary.py @@ -0,0 +1,83 @@ +#!/usr/bin/python3 + +import cgi +import base +from connect import connect +#import mysql.connector +from summary_functions import get +import module_functions +import sys + +if len(sys.argv) != 1: + sys.stdout = open('%(loc)s/summary.html' %{'loc':sys.argv[1]}, 'w') + +else: + #cgi header + print("Content-type: text/html\n") + +base.header(title='Summary') +base.top() + +List_of_rows = get() + +print('
') +print('

Test Summary

') +print('
') +print('
') +print('
') +print('
') +print('') +print('') +print('') +print('') +print('') +#print '' +print('') +print('') +print('') + +for row in List_of_rows: + print('') + if len(sys.argv) == 1: + print('' %{'serial':row[2], 'id':row[1]}) + #print '' %row[1] + else: + print('' %{'serial':row[2]}) + print('') + + print('') + + print('') + + print('') + + print('') + +print('
S/N Tests Passed Tests Remaining Final Status
%(serial)s %s %(serial)s
    ') + for tests in row[3][0:][::2]: + print('
  • %s' %tests) + print('
    ') + for tests in row[3][1:][::2]: + print('
  • %s' %tests) + print('
    ') + if len(sys.argv) == 1: + for tests in row[4][0:][::2]: + print('
  • %s' %(row[0],tests[1],tests[0])) + + else: + for tests in row[4][0:][::2]: + print('
  • %s' %tests[0] ) + print('
    ') + if len(sys.argv) == 1: + for tests in row[4][1:][::2]: + print('
  • %s' %(row[0],tests[1],tests[0])) + else: + for tests in row[4][1:][::2]: + print('
  • %s' %tests[0]) + print('
') + + +base.bottom() + + + diff --git a/cgi-bin/WagonDB/connect.py b/cgi-bin/WagonDB/connect.py new file mode 100755 index 0000000..a736779 --- /dev/null +++ b/cgi-bin/WagonDB/connect.py @@ -0,0 +1,47 @@ +#!/usr/bin/python3 + +import mysql.connector + +def connect( num ): + if(num==1): + + connection = mysql.connector.connect( + host = 'localhost', + user='WagonDBInserter', + password='HGCALrocks', + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + if(num==0): + + connection = mysql.connector.connect( + host = 'localhost', + user='WagonDBReadUser', + password='HGCALrocks', + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + return connection + +def connect_admin(passwd): + + connection = mysql.connector.connect( + host = 'localhost', + user='WagonDBAdmin', + password=passwd, + database=get_db_name(), + #cursorclass=mysql.connector.cursors.DictCursor + ) + + return connection + +def get_base_url(): + base = "http://cmslab3.umncmslab/~cros0400/cgi-bin/WagonDB" + return base + +def get_db_name(): + name = "WagonDB" + return name + diff --git a/cgi-bin/WagonDB/connect.pyc b/cgi-bin/WagonDB/connect.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b31826bc3a98bd9bf1ba797569aa42a2d273cc1 GIT binary patch literal 1342 zcmb_c!EVz)5FI;C8V6TFT#yhSkORaKlmiGMN|68w<**e(;u1MtD{*UkgLe(8)N%pw z1AHnU0Q1IHC

>*6~ipsY7MT|WOm;f?4alpfVU~?*<$3E2$$q^lSbi|;7%ZQAn z2c&mM56SiDGw~gqc~rFvL&C!PZwp8NUWl}=@z(Pk8M%PX+F0k1S7FkmkSBy2o7Ha2 z&f8>Vs^`yMRS57s*MaNhru z%_&d+#h^%p#nF-omIuEvcnTI!=UibQ1uB%(7O~gmwXe&(QfQTej-+V{y;tB$QdQ_r z+Z0R@QncDdkjG`a;Q-V%XOSSA+Z?b+k+zMA0y!_J07ImWF0%g5M5l+6-`w8g;M%#( zqc~1WTO`Z-)26IiH~zFG>H;}!9b2hFR##FQih!^HxM=DEpccI*ru+XY5}|fnT}V^3 z3NVRZLXY704v%eW@=1|1B}Zr4(PQdX8R)#a4s!!W$YIDpk4vMQB71@}Xc36~ J@Mai=!B6X)5jg+= literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/dump.sql b/cgi-bin/WagonDB/dump.sql new file mode 100644 index 0000000..735d9f7 --- /dev/null +++ b/cgi-bin/WagonDB/dump.sql @@ -0,0 +1,236 @@ +-- MySQL dump 10.14 Distrib 5.5.68-MariaDB, for Linux (x86_64) +-- +-- Host: localhost Database: WagonDB +-- ------------------------------------------------------ +-- Server version 5.5.68-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `Attachments` +-- + +DROP TABLE IF EXISTS `Attachments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Attachments` ( + `attach_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `test_id` int(11) DEFAULT NULL, + `attachmime` varchar(30) DEFAULT NULL, + `attachdesc` varchar(120) DEFAULT NULL, + `comments` varchar(200) DEFAULT NULL, + `originalname` varchar(200) DEFAULT NULL, + PRIMARY KEY (`attach_id`), + KEY `test_id` (`test_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Attachments` +-- + +LOCK TABLES `Attachments` WRITE; +/*!40000 ALTER TABLE `Attachments` DISABLE KEYS */; +/*!40000 ALTER TABLE `Attachments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `People` +-- + +DROP TABLE IF EXISTS `People`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `People` ( + `person_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `person_name` varchar(100) DEFAULT NULL, + PRIMARY KEY (`person_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `People` +-- + +LOCK TABLES `People` WRITE; +/*!40000 ALTER TABLE `People` DISABLE KEYS */; +INSERT INTO `People` VALUES (1,'Bryan'); +/*!40000 ALTER TABLE `People` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Test` +-- + +DROP TABLE IF EXISTS `Test`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Test` ( + `test_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `test_type_id` int(11) NOT NULL, + `wagon_id` int(11) NOT NULL, + `person_id` int(11) NOT NULL, + `day` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `successful` tinyint(1) NOT NULL, + `comments` varchar(320) DEFAULT NULL, + PRIMARY KEY (`test_id`), + KEY `wagon_id` (`wagon_id`), + KEY `person_id` (`person_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Test` +-- + +LOCK TABLES `Test` WRITE; +/*!40000 ALTER TABLE `Test` DISABLE KEYS */; +/*!40000 ALTER TABLE `Test` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `TestRevoke` +-- + +DROP TABLE IF EXISTS `TestRevoke`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `TestRevoke` ( + `test_id` int(10) unsigned NOT NULL, + `comment` varchar(120) DEFAULT NULL, + PRIMARY KEY (`test_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `TestRevoke` +-- + +LOCK TABLES `TestRevoke` WRITE; +/*!40000 ALTER TABLE `TestRevoke` DISABLE KEYS */; +/*!40000 ALTER TABLE `TestRevoke` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Test_Type` +-- + +DROP TABLE IF EXISTS `Test_Type`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Test_Type` ( + `test_type` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + `required` tinyint(1) NOT NULL, + `desc_short` varchar(50) DEFAULT NULL, + `desc_long` varchar(250) DEFAULT NULL, + `relative_order` int(11) NOT NULL, + PRIMARY KEY (`test_type`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Test_Type` +-- + +LOCK TABLES `Test_Type` WRITE; +/*!40000 ALTER TABLE `Test_Type` DISABLE KEYS */; +INSERT INTO `Test_Type` VALUES (1,'test',1,'test','test',1); +/*!40000 ALTER TABLE `Test_Type` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon` +-- + +DROP TABLE IF EXISTS `Wagon`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon` ( + `sn` int(11) NOT NULL, + `wagon_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`wagon_id`), + UNIQUE KEY `sn` (`sn`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon` +-- + +LOCK TABLES `Wagon` WRITE; +/*!40000 ALTER TABLE `Wagon` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon_Info` +-- + +DROP TABLE IF EXISTS `Wagon_Info`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon_Info` ( + `info_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `wagon_id` int(11) NOT NULL, + `info_type` int(11) NOT NULL, + `info` varchar(300) DEFAULT NULL, + PRIMARY KEY (`info_id`), + KEY `wagon_id` (`wagon_id`), + KEY `info_type` (`info_type`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon_Info` +-- + +LOCK TABLES `Wagon_Info` WRITE; +/*!40000 ALTER TABLE `Wagon_Info` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon_Info` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Wagon_Info_Types` +-- + +DROP TABLE IF EXISTS `Wagon_Info_Types`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Wagon_Info_Types` ( + `info_type_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Info_Name` varchar(30) DEFAULT NULL, + `Info_Desc_Short` varchar(100) DEFAULT NULL, + `Info_Desc_Long` varchar(300) DEFAULT NULL, + PRIMARY KEY (`info_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Wagon_Info_Types` +-- + +LOCK TABLES `Wagon_Info_Types` WRITE; +/*!40000 ALTER TABLE `Wagon_Info_Types` DISABLE KEYS */; +/*!40000 ALTER TABLE `Wagon_Info_Types` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2021-07-13 16:05:26 diff --git a/cgi-bin/WagonDB/gen_res_analytics.py b/cgi-bin/WagonDB/gen_res_analytics.py new file mode 100755 index 0000000..999abc0 --- /dev/null +++ b/cgi-bin/WagonDB/gen_res_analytics.py @@ -0,0 +1,174 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['module 1'][graph_title]) + + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/gen_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['module 1'][graph_title][list_index]) + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/gen_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments1 = add_test_functions.get_test_attachments(1) + +stats = {'analytic_type': 'General Resistance Test'} + +####################################################### + +create_generic_hist(attachments1, 'RTD -> VMON_LVS', stats) + +####################################################### + +create_sub_generic_hist(attachments1, 'ECON_RE_Sb -> HGCROC_RE_Sb', 0, stats) + +####################################################### + +create_sub_generic_hist(attachments1, 'PWR_EN -> PG_LDO', 0, stats) + +######################################################## + +create_generic_hist(attachments1, 'RTD -> HGCROC_RE_Sb', stats) + +######################################################## + +create_sub_generic_hist(attachments1, 'HGCROC_RE_Hb -> HGCROC_RE_Sb', 0, stats) + +######################################################## + +create_sub_generic_hist(attachments1, 'PG_DCDC -> ECON_RE_Hb', 0, stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/gen_res/gen_res_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + + diff --git a/cgi-bin/WagonDB/get_attach.py b/cgi-bin/WagonDB/get_attach.py new file mode 100755 index 0000000..e1cfe3c --- /dev/null +++ b/cgi-bin/WagonDB/get_attach.py @@ -0,0 +1,60 @@ +#!/usr/bin/python3 + +import cgi +import base +from connect import connect +import settings +import os.path +import sys + +if __name__ == "__main__": + form = cgi.FieldStorage() + attach_id = base.cleanCGInumber(form.getvalue('attach_id')) + + db=connect(0) + cur=db.cursor() + + if(attach_id != 0): + cur.execute("SELECT test_id, attachmime, originalname, attach FROM Attachments WHERE attach_id=%d" % (attach_id)); + + if not cur.with_rows: + print("Content-type: text/html\n") + base.header("Attachment Request Error") + base.top() + print('

') + print("

Attachment not available

") + print('
') + base.bottom() + else: + thevals=cur.fetchall() + f = thevals[0][3] + attpath=settings.getAttachmentPathFor(thevals[0][0],attach_id) + if not f: + print("Content-type: text/html\n") + base.header("Attachment Request Error") + base.top() + print("

Attachment not found

") + base.bottom() + else: + print('Content-type: %s \n\n' % (thevals[0][1])) + print(f.decode("utf-8")) + + cur.close() + +def save(attach_id): + db=connect(0) + cur=db.cursor() + + cur.execute("SELECT test_id, attachmime, originalname FROM Attachments WHERE attach_id=%d" % (attach_id)); + + if not cur.with_rows: + print("

Attachment not available

") + else: + thevals=cur.fetchall(); + attpath=settings.getAttachmentPathFor(thevals[0][0],attach_id) + if not os.path.isfile(attpath): + print("

Attachment not found

") + else: + statinfo = os.stat(attpath) + sys.stdout.write(file(attpath,"rb").read() ) + cur.close() diff --git a/cgi-bin/WagonDB/get_attach.pyc b/cgi-bin/WagonDB/get_attach.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4251bb300d16f114d9c40e9c7659b15752ba999 GIT binary patch literal 1938 zcmbtUduthC zN{Ko*xS)=3e2-F(GLJeQiK$+RI;A%@Gt?=+!Dp#6OKOf}iC%kD{45kvGEdj=TOlPV zsgkNtvOsc%t_A-)HBuhQvcv17>XbB`{vxRw^Iw;!_?6TmB}*jXyhdv<6FE8FGMPU} z&e72^dtV`mV30C#kKG7aflO8zEKIdlogn|oIk@kFt&v*eV4Jc=o1Jx1B}z7Kc;F-K zH7c-4YMsot;$I`y-;VQ;WaGxwB5kfA*L6xBkX+(iLE&!iOmaf;m+41T>s@ZgNpl7L ziT}j&vWX^7<9~B}5FAXUaPj=HG#hZduX77|%U+Ds zGx$HZ?V-)msuSMY`+@pyjNtx3QRu>a0Lxt&pZZZ68uR>7q|;U=TOau&(|YQUEI@YN zdg5mnttXH6%=@f9{BZAY{&H>o@HC9mu$QXcHiTxDwc7By7xPG)_x{*!EkWL`<^t8Jv9_^BaJ5i-Nvg3A)6TVTg&YJi7EK!5jmj$$&DW zMCKXq!qIV_I}J=dv`b{ml+4m4c1U36aA1Y`x|-n@V_}jCUAhf1-}9=#e%nc^Q}$Jv z>;fef=tr5;=KjOeV0kpWxYs23`fP8OxwC|Bu# zBe*cK=RDyS?h1COPQ%nV96?-k-eV3K=Y8D-P7atIVC|vKR68oP*?GFN(;kg`X&iNV z(b~}7InM)#lSbG2I4SQsXVc|2$6^@i!L%uBpR2hFyBA= zA|GcxRX9ti;PzwX$`f#V0yYWmGvMk5+;La(A&Lqs?t;}L$LeWobr$d^Fj!+g?`J>Y zFJG|EG#g75X{iF<@L&_*wxIu`s(kC+Ov`bq_S{^24hHHfmbkj8FT)LnIIF02S=2=p VkbiaX8mRp24Y%$si-uSC{sM+@rV9W7 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/get_previous_test_results.py b/cgi-bin/WagonDB/get_previous_test_results.py new file mode 100755 index 0000000..c81eec5 --- /dev/null +++ b/cgi-bin/WagonDB/get_previous_test_results.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Previous Test Results') +base.top() + +form = cgi.FieldStorage() + +if form.getvalue('serial_number'): + serial_number = cgi.escape(form.getvalue('serial_number')) + + tests = add_test_functions.get_previous_test_results(serial_number) + + print('Begin') + + for t in tests: + print(t) + + print('End') + +else: + print('No serial number sent.') +base.bottom() diff --git a/cgi-bin/WagonDB/get_test_completion_status.py b/cgi-bin/WagonDB/get_test_completion_status.py new file mode 100755 index 0000000..bb01075 --- /dev/null +++ b/cgi-bin/WagonDB/get_test_completion_status.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import module_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Test Completion Status') +base.top() + +tests = module_functions.get_test_completion_status() + +print('Begin') + +for t in tests: + print(t) + +print('End') + +base.bottom() diff --git a/cgi-bin/WagonDB/get_test_types.py b/cgi-bin/WagonDB/get_test_types.py new file mode 100755 index 0000000..d28191b --- /dev/null +++ b/cgi-bin/WagonDB/get_test_types.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import module_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Test Types') +base.top() + +tests = module_functions.get_test_types() + +print('Begin') + +for t in tests: + print(t) + +print('End') + +base.bottom() diff --git a/cgi-bin/WagonDB/get_usernames.py b/cgi-bin/WagonDB/get_usernames.py new file mode 100755 index 0000000..ae987f7 --- /dev/null +++ b/cgi-bin/WagonDB/get_usernames.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import base +import add_test_functions +import os + +#cgi header +print("Content-type: text/html\n") + +base.header(title='Get Usernames') +base.top() + +usernames = add_test_functions.get_usernames() + +print('Begin') + +for t in usernames: + print(t[0]) + +print('End') + +base.bottom() diff --git a/cgi-bin/WagonDB/home_page.py b/cgi-bin/WagonDB/home_page.py new file mode 100755 index 0000000..3618671 --- /dev/null +++ b/cgi-bin/WagonDB/home_page.py @@ -0,0 +1,58 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import sys + +if(len(sys.argv) != 1): + stdout = sys.stdout + sys.stdout = open('%(loc)s/index.html' %{ 'loc':sys.argv[1]}, 'w') +else: + #cgi header + print("content-type: text/html\n\n") + +base.header(title='Wagon Test Home Page') +base.top() + +print() +print('
') +print('
') +print('

Count by Test

' ) +print('
') +print('
') + +home_page_list.render_list_tests() +print('
') + +print('
') +print('
') +print('

List of All Boards

' ) +print('(Sorted by Serial Number)Successful Tests') +print('
') +print('
') +if len(sys.argv) == 1: + print('
') + print('
') + print('') + print('') + print('') + print('
') +else: + print('
') + print('
') + print('') + print('') + print('') + print('
') +print('
') +print('

') + + +home_page_list.render_list_module() + +base.bottom() + +if len(sys.argv) != 1: + sys.stdout.close() + sys.stdout = stdout diff --git a/cgi-bin/WagonDB/home_page_list.py b/cgi-bin/WagonDB/home_page_list.py new file mode 100755 index 0000000..a28f9be --- /dev/null +++ b/cgi-bin/WagonDB/home_page_list.py @@ -0,0 +1,222 @@ +#!/usr/bin/python3 + +from connect import connect +import sys +import cgitb +import mysql + +cgitb.enable() + +def fetch_list_tests(): + db = connect(0) + cur=db.cursor() + cur.execute("select Test_Type.name,COUNT(DISTINCT Test.test_id),COUNT(DISTINCT Test.board_id) from Test,Test_Type WHERE Test.successful=1 and Test.test_type_id=Test_Type.test_type GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order"); + rows = cur.fetchall() + cur.execute("select Test_Type.name,COUNT(*) from Test,Test_Type WHERE Test.test_type_id=Test_Type.test_type GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order"); + rows2 = cur.fetchall() + cur.execute("select Test_Type.name,Count(*) from TestRevoke,Test_Type,Test WHERE Test.test_type_id=Test_Type.test_type and Test.successful=1 and Test.test_id=TestRevoke.test_id GROUP BY Test.test_type_id ORDER BY Test_Type.relative_order") + rows3 = cur.fetchall() + + for i,r in enumerate(rows): + if rows3: + for row in rows3: + if row[0] == r[0]: + rows[i] = (r[0], r[1]-row[1], r[2]) + else: + rows[i] = (r[0], r[1], r[2]) + finalrows = () + for i in range (0,len(rows)): + arow=(rows[i][0], rows[i][1],rows[i][2],rows2[i][1]) + finalrows=finalrows+(arow,) + return finalrows + +def render_list_tests(): + rows = fetch_list_tests() + + print('
') + print('
') + print('') +# print '
Total Tests
' +# print '
Total Successful Tests
' +# print '
Total Cards with Successful Tests
' + for test in rows: +# print '
' + print('
' ) + print('
TestTotal TestsTotal Successful TestsTotal Wagons with Successful Tests
%s' % (test[0])) + print('%s' % (test[3])) + print('%s' % (test[1])) + print('%s' % (test[2])) + print('
') + +def fetch_list_module(): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT full_id, Board_id FROM Board ORDER by Board.sn ASC") + rows = cur.fetchall() + return rows + + +def render_list_module(): + + db = connect(0) + cur=db.cursor() + row = fetch_list_module() + n = 0 + + col1='' + col2='' + col3='' + cur.execute('SELECT COUNT(*) FROM Test_Type') + total = cur.fetchall()[0][0] + if len(sys.argv) == 1: + for boards in row: + query = 'SELECT COUNT(DISTINCT Test.test_id),COUNT(DISTINCT TestRevoke.test_id, case when TestRevoke.test_id = Test.test_id then TestRevoke.test_id end),Test.test_type_id FROM Test,TestRevoke WHERE Test.board_id=%s and Test.successful=1 GROUP BY Test.test_type_id' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + if not successful: + query = 'SELECT COUNT(DISTINCT Test.test_id),0,Test.test_type_id FROM Test WHERE Test.board_id=%s and Test.successful=1 GROUP BY Test.test_type_id' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + num = 0 + for s in successful: + total_success = s[0] + total_revoke = s[1] + if total_success > total_revoke: + num += 1 + else: + num += 0 + if not num: + num = 0 + if num < total: + temp_col = ' %(serial)s %(success)s/%(total)s' %{'serial':boards[0], 'id':boards[1], 'success': num, 'total': total} + else: + temp_col = ' %(serial)s Done' %{'serial':boards[0], 'id':boards[1]} + if n%3 == 0: + col1 += temp_col + if n%3 == 1: + col2 += temp_col + if n%3 == 2: + col3 += temp_col + n += 1 + else: + for boards in row: + query = 'SELECT SUM(successful) AS "sum_successful" FROM Test WHERE Test.board_id = %s' % (boards[1]) + cur.execute(query) + successful = cur.fetchall() + num = successful[0][0] + if not num: + num = 0 + temp_col = ' %(serial)s %(success)s' %{'serial':boards[0], 'id':boards[1], 'success': num} + if n%3 == 0: + col1 += temp_col + if n%3 == 1: + col2 += temp_col + if n%3 == 2: + col3 += temp_col + n += 1 + print('
') + print('
') + print('
    ') + print(col1) + print('
') + print('
') + print(col2) + print('
') + print('
') + print(col3) + print('
') + print('
') + +def add_module_form(): + + print('
') + print('
') + print('
') + print('

Adding a new Test Board

') + print('
') + print('
') + + print('
') + print('
') + print('') + print('
') + print('
') + print('') + print('
') + print('
') + + print('
') + + print('
') + +def add_board_info_form(sn, board_id): + + print('
') + print('
') + print('
') + print('

Adding Extra Board Information

') + print('
') + print('
') + + print('' % sn) + print('' % board_id) + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + print('
') + print('
') + print('') + print('
') + print('
') + + print('
') + print('
') + + print('') + + print('
') + +def add_module(serial_number): + try: + db = connect(1) + cur = db.cursor() + + sn = serial_number[9:15] + type_id = serial_number[3:9] + + cur.execute("SELECT board_id FROM Board WHERE Board.full_id = '%s'" % (serial_number)) + + rows = cur.fetchall() + + if not rows: + cur.execute("INSERT INTO Board (sn, full_id, type_id) VALUES (%s, '%s', '%s'); " % (sn, serial_number, type_id)) + #print '
INSERT INTO Card set sn = %s;
' %(serial_number) + db.commit() + db.close() + else: + print("

Serial number already exists!

") + except mysql.connector.Error as err: + print("

Serial number already exists!

") + print(err) + diff --git a/cgi-bin/WagonDB/home_page_list.pyc b/cgi-bin/WagonDB/home_page_list.pyc new file mode 100644 index 0000000000000000000000000000000000000000..474bd5df1cde214b637c55a2c0c8cdb44e2e5c56 GIT binary patch literal 7937 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/id_res_analytics.py b/cgi-bin/WagonDB/id_res_analytics.py new file mode 100755 index 0000000..5f4503f --- /dev/null +++ b/cgi-bin/WagonDB/id_res_analytics.py @@ -0,0 +1,158 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments: + values.append(attachment['wagon type chip'][graph_title]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/id_res/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment['wagon type chip'][graph_title][list_index]) + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + plt.savefig('../static/files/id_res/{}.png'.format(graph_title)) + plt.close() + + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments2 = add_test_functions.get_test_attachments(2) +stats = {'analytic_type': 'ID Resistor Test'} + +####################################################### + +create_generic_hist(attachments2, 'WAGON_TYPE -> GND', stats) + +######################################################## + +create_sub_generic_hist(attachments2, 'VMON_REF0 -> PROBE_DC', 0, stats) + + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/id_res/id_res_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + + diff --git a/cgi-bin/WagonDB/iic_analytics.py b/cgi-bin/WagonDB/iic_analytics.py new file mode 100755 index 0000000..2a0231e --- /dev/null +++ b/cgi-bin/WagonDB/iic_analytics.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3 + + +import os, sys +import cgi +import cgitb +import pylab +import json + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np + +import base +import add_test_functions + +def create_generic_hist(attachments1, title, stats): + + # Handles one value under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment[graph_title]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bins=bin_edges, density=False, histtype='bar') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/iic/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + +def create_sub_generic_hist(attachments1, title, list_index, stats): + # Handles a list under graph_title in 'module 1' + graph_title = title + + values = [] + for attachment in attachments1: + values.append(attachment[graph_title][list_index]) + + + # Temporary step value + step = 0.01 + + num_of_bins = 15 + + if not (max(values) - min(values)) == 0: + step = round(max(values) - min(values)) / num_of_bins + + + start = np.floor(min(values) / step) * step + stop = max(values) + step + bin_edges = np.arange(start, stop, step=step) + + + plt.hist(values, bin_edges, density=False, histtype='bar', color='red') + plt.xlabel(graph_title + " Values") + plt.ylabel('Occurances') + plt.title(graph_title + " Values") + plt.grid(True) + plt.xticks(np.arange(start, stop, step = step), rotation = 90) + + plt.tight_layout() + + plt.savefig('../static/files/iic/{}.png'.format(graph_title)) + plt.close() + + + print(''.format(graph_title)) + + + add_to_stats(stats, graph_title, values) + + +# Adds statistics to the "stats" python dictionary +def add_to_stats(stats, full_title, values): + mean = sum(values) / len(values) + stand_deviation = np.std(values) + + stats['{}'.format(full_title)] = { + 'STD': stand_deviation, + 'range': max(values) - min(values), + 'mean': mean, + 'max': max(values), + 'min': min(values), + 'passing_range': ( mean - stand_deviation, mean + stand_deviation ) + } + + +#############End of Functions########################## + + + +cgitb.enable() + +# chose a non-GUI backend +# matplotlib.use( 'Agg' ) +print("Content-type: text/html\n") + +base.header(title='Analytics') +base.top() + + +form = cgi.FieldStorage() + +# Gets the attachment from the DB +attachments3 = add_test_functions.get_test_attachments(3) +stats = {'analytic_type': "IIC Test"} + +####################################################### + +create_generic_hist(attachments3, 'num_iic_correct', stats) + +######################################################## + +create_generic_hist(attachments3, 'num_iic_checks', stats) + +######################################################## + +print(json.dumps(stats, indent = 4)) + +with open('../static/files/iic/iic_stats.json', 'w') as open_file: + json.dump(stats, open_file, indent = 4) + + +# TODO Actually print out all of the graphs after matplotlib is installed +# Done in the generic and sub_generic functions + + + + +base.bottom() + diff --git a/cgi-bin/WagonDB/is_new_board.py b/cgi-bin/WagonDB/is_new_board.py new file mode 100755 index 0000000..4617c7d --- /dev/null +++ b/cgi-bin/WagonDB/is_new_board.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 + + +import cgi +import base +import add_test_functions +import os + + +print("Content-type: text/html\n") + +base.header(title='is_new_board') +base.top() + + +form = cgi.FieldStorage() + +if form.getvalue('serial_number'): + serial_number = cgi.escape(form.getvalue('serial_number')) + + + is_new_board_bool = add_test_functions.is_new_board(serial_number) + + print('Begin') + + print(is_new_board_bool) + + print('End') + + +else: + print ("NO SERIAL SENT") + + +base.bottom() + diff --git a/cgi-bin/WagonDB/makePlots.py b/cgi-bin/WagonDB/makePlots.py new file mode 100755 index 0000000..8d0a8f1 --- /dev/null +++ b/cgi-bin/WagonDB/makePlots.py @@ -0,0 +1,321 @@ +#!/usr/bin/python3 + +import pandas as pd +import matplotlib.pyplot as plt +import csv +import cgitb +import numpy as np +import datetime +import matplotlib.dates as mdates +from matplotlib.axis import Axis + +cgitb.enable() + +def makePlot(Test, Data, Board, SN, BitError, Tester): + TestData = pd.read_csv('./static/files/Test.csv', parse_dates=['Time']) + BoardData = pd.read_csv('./static/files/Board.csv') + PeopleData = pd.read_csv('./static/files/People.csv') + name = None + + if SN is not None: + board_temp = BoardData.query('`Full ID` == @SN')['Board ID'] + Board_ID = board_temp.values.tolist() + if Tester is not None: + person_temp = PeopleData.query('`Person Name` == @Tester')['Person ID'] + person_id = person_temp.values.tolist() + tests_temp = TestData.query('`Board ID` == @Board_ID & `Person ID` == @person_id')['Test ID'] + for i in Tester: + if i is Tester[0]: + name = ' for ' + i + else: + name += i + if i is not Tester[-1]: + name += ', ' + else: + tests_temp = TestData.query('`Board ID` == @Board_ID')['Test ID'] + for i in SN: + if name is not None: + if i is SN[0]: + name += ' for ' + i + else: + name += i + if i is not SN[-1]: + name += ', ' + else: + if i is SN[0]: + name = ' for ' + i + else: + name += i + if i is not SN[-1]: + name += ', ' + elif Board is not None: + board_temp = BoardData.query('`Type ID` == @Board')['Board ID'] + board_ids = board_temp.values.tolist() + if Tester is not None: + person_temp = PeopleData.query('`Person Name` == @Tester')['Person ID'] + person_id = person_temp.values.tolist() + tests_temp = TestData.query('`Board ID` == @board_ids & `Person ID` == @person_id')['Test ID'] + for i in Tester: + if i is Tester[0]: + name = ' for ' + i + else: + name += i + if i is not Tester[-1]: + name += ', ' + else: + tests_temp = TestData.query('`Board ID` == @board_ids')['Test ID'] + + for i in Board: + if name is not None: + if i is Board[0]: + name += ' for ' + i + else: + name += i + if i is not Board[-1]: + name += ', ' + else: + if i is Board[0]: + name = ' for ' + i + else: + name += i + if i is not Board[-1]: + name += ', ' + else: + tests_temp = TestData.iloc[:, 0] + + if Board is None and SN is None and Tester is not None: + person_temp = PeopleData.query('`Person Name` == @Tester')['Person ID'] + person_id = person_temp.values.tolist() + tests_temp = TestData.query('`Person ID` == @person_id')['Test ID'] + for i in Tester: + if i is Tester[0]: + name = ' for ' + i + else: + name += i + if i is not Tester[-1]: + name += ', ' + + tests = tests_temp.values.tolist() + + if name is not None and Test is not None: + title = Test + name + else: + title = Test + + if Test is None: + dates = TestData.query('`Test ID` == @tests')['Time'] + successful_dates = TestData.query('`Test ID` == @tests & Successful == 1')['Time'] + time_series_data = [] + time_series_data_successful = [] + first = datetime.datetime(2023, 3, 1, 0, 0, 0) + + while (first <= datetime.datetime.now()): + i = 0 + j = 0 + for d in dates: + if d > first: + break + else: + i += 1 + for d in successful_dates: + if d > first: + break + else: + j += 1 + time_series_data.append([first,i]) + time_series_data_successful.append([first,j]) + first += datetime.timedelta(days=1) + x1,y1 = zip(*time_series_data) + x2,y2 = zip(*time_series_data_successful) + + if name is not None: + title = 'Total Tests Over Time' + name + else: + title = 'Total Tests Over Time' + + fig, ax = plt.subplots() + plt.plot(x1, y1, label = 'Total') + plt.plot(x2, y2, label = 'Successful') + plt.title(title) + plt.xlabel('Date') + plt.ylabel('Number of Tests') + plt.legend() + Axis.set_major_locator(ax.xaxis,mdates.MonthLocator(interval=1)) + plt.gcf().autofmt_xdate() + plt.savefig('../../static/files/TestsOverTime.png') + plt.clf() + + + if Test == 'Resistance Measurement': + df = pd.read_csv('./static/files/Resistance_Measurement.csv') + w = 0.25 + temp_max = 0 + useData = df.query('`Test ID` == @tests') + + for i in range(len(Data)): + if Data[i] == True: + plot_data = useData.iloc[:, i+1] + plt.hist(plot_data, bins=np.arange(min(plot_data), max(plot_data) + w, w), label = useData.columns[i+1]) + temp_max = max(plot_data) if max(plot_data) > temp_max else temp_max + + plt.title(title) + plt.legend(fontsize='xx-small') + plt.xlabel('Resistance') + plt.xlim([0, temp_max*1.5]) + plt.ylabel('Number of Boards') + plt.savefig('../../static/files/Resistance_Measurement.png') + + if Test == 'ID Resistor': + df = pd.read_csv('./static/files/ID_Resistor_Test_Data.csv') + useData = df.query('`Test ID` == @tests') + + plt.hist(useData.iloc[:,1]) + plt.title(title) + plt.xlabel('Resistance') + plt.ylabel('Number of Boards') + plt.savefig('../../static/files/ID_Resistor.png') + + if Test == 'I2C Read/Write': + df = pd.read_csv('./static/files/I2C_ReadWrite_Test_Data.csv') + w = 1000 + useData = df.query('`Test ID` == @tests') + + for i in range(len(Data)): + if Data[i] == True: + plot_data = useData.iloc[:, i+1] + plt.hist(plot_data, bins=np.arange(-1, 11000, 1000), label = useData.columns[i+1], stacked=True) + + plt.title(title) + plt.legend(fontsize='xx-small') + plt.xlabel('Number of Checks') + plt.ylabel('Number of Boards') + plt.savefig('../../static/files/I2C_ReadWrite.png') + + if Test == 'Bit Error Rate': + notData = pd.read_csv('./static/files/Bit_Error_Rate_Test_Data.csv') + df = notData.query('`Test ID` == @tests') + + if Data[0] == True: + w = 5 + if BitError[0] == True: + CLK0 = df.query('`E Link` == "CLK0"')['Midpoint'] + plt.hist(CLK0, label = 'CLK0', bins=np.arange(0,400+w,w), stacked=True) + if BitError[1] == True: + CLK1 = df.query('`E Link` == "CLK1"')['Midpoint'] + plt.hist(CLK1, label = 'CLK1', bins=np.arange(0,400+w,w), stacked=True) + if BitError[2] == True: + CLK2 = df.query('`E Link` == "CLK2"')['Midpoint'] + plt.hist(CLK2, label = 'CLK2', bins=np.arange(0,400+w,w), stacked=True) + if BitError[3] == True: + TRIG0 = df.query('`E Link` == "TRIG0"')['Midpoint'] + plt.hist(TRIG0, label = 'TRIG0', bins=np.arange(0,400+w,w), stacked=True) + if BitError[4] == True: + TRIG1 = df.query('`E Link` == "TRIG1"')['Midpoint'] + plt.hist(TRIG1, label = 'TRIG1', bins=np.arange(0,400+w,w), stacked=True) + if BitError[5] == True: + TRIG2 = df.query('`E Link` == "TRIG2"')['Midpoint'] + plt.hist(TRIG2, label = 'TRIG2', bins=np.arange(0,400+w,w), stacked=True) + if BitError[6] == True: + TRIG3 = df.query('`E Link` == "TRIG3"')['Midpoint'] + plt.hist(TRIG3, label = 'TRIG3', bins=np.arange(0,400+w,w), stacked=True) + if BitError[7] == True: + TRIG4 = df.query('`E Link` == "TRIG4"')['Midpoint'] + plt.hist(TRIG4, label = 'TRIG4', bins=np.arange(0,400+w,w), stacked=True) + if BitError[8] == True: + TRIG5 = df.query('`E Link` == "TRIG5"')['Midpoint'] + plt.hist(TRIG5, label = 'TRIG5', bins=np.arange(0,400+w,w), stacked=True) + if BitError[9] == True: + TRIG6 = df.query('`E Link` == "TRIG6"')['Midpoint'] + plt.hist(TRIG6, label = 'TRIG6', bins=np.arange(0,400+w,w), stacked=True) + if BitError[10] == True: + TRIG7 = df.query('`E Link` == "TRIG7"')['Midpoint'] + plt.hist(TRIG7, label = 'TRIG7', bins=np.arange(0,400+w,w), stacked=True) + + plt.title(title + ': Midpoint') + plt.xlabel('DAQ Delay') + plt.ylabel('Number of Boards') + plt.legend() + plt.savefig('../../static/files/Bit_Error_Rate_Midpoint') + + if Data[1] == True: + w = 5 + plt.clf() + if BitError[0] == True: + CLK0 = df.query('`E Link` == "CLK0"')['Eye Opening'] + plt.hist(CLK0, label = 'CLK0', bins=np.arange(0,450+w,w), stacked=True) + CLK0 = CLK0.values.tolist() + else: + CLK0 = [] + if BitError[1] == True: + CLK1 = df.query('`E Link` == "CLK1"')['Eye Opening'] + plt.hist(CLK1, label = 'CLK1', bins=np.arange(0,450+w,w), stacked=True) + CLK1 = CLK1.values.tolist() + else: + CLK1 = [] + if BitError[2] == True: + CLK2 = df.query('`E Link` == "CLK2"')['Eye Opening'] + plt.hist(CLK2, label = 'CLK2', bins=np.arange(0,450+w,w), stacked=True) + CLK2 = CLK2.values.tolist() + else: + CLK2 = [] + if BitError[3] == True: + TRIG0 = df.query('`E Link` == "TRIG0"')['Eye Opening'] + plt.hist(TRIG0, label = 'TRIG0', bins=np.arange(0,450+w,w), stacked=True) + TRIG0 = TRIG0.values.tolist() + else: + TRIG0 = [] + if BitError[4] == True: + TRIG1 = df.query('`E Link` == "TRIG1"')['Eye Opening'] + plt.hist(TRIG1, label = 'TRIG1', bins=np.arange(0,450+w,w), stacked=True) + TRIG1 = TRIG1.values.tolist() + else: + TRIG1 = [] + if BitError[5] == True: + TRIG2 = df.query('`E Link` == "TRIG2"')['Eye Opening'] + plt.hist(TRIG2, label = 'TRIG2', bins=np.arange(0,450+w,w), stacked=True) + TRIG2 = TRIG2.values.tolist() + else: + TRIG2 = [] + if BitError[6] == True: + TRIG3 = df.query('`E Link` == "TRIG3"')['Eye Opening'] + plt.hist(TRIG3, label = 'TRIG3', bins=np.arange(0,450+w,w), stacked=True) + TRIG3 = TRIG3.values.tolist() + else: + TRIG3 = [] + if BitError[7] == True: + TRIG4 = df.query('`E Link` == "TRIG4"')['Eye Opening'] + plt.hist(TRIG4, label = 'TRIG4', bins=np.arange(0,450+w,w), stacked=True) + TRIG4 = TRIG4.values.tolist() + else: + TRIG4 = [] + if BitError[8] == True: + TRIG5 = df.query('`E Link` == "TRIG5"')['Eye Opening'] + plt.hist(TRIG5, label = 'TRIG5', bins=np.arange(0,450+w,w), stacked=True) + TRIG5 = TRIG5.values.tolist() + else: + TRIG5 = [] + if BitError[9] == True: + TRIG6 = df.query('`E Link` == "TRIG6"')['Eye Opening'] + plt.hist(TRIG6, label = 'TRIG6', bins=np.arange(0,450+w,w), stacked=True) + TRIG6 = TRIG6.values.tolist() + else: + TRIG6 = [] + if BitError[10] == True: + TRIG7 = df.query('`E Link` == "TRIG7"')['Eye Opening'] + plt.hist(TRIG7, label = 'TRIG7', bins=np.arange(0,450+w,w), stacked=True) + TRIG7 = TRIG7.values.tolist() + else: + TRIG7 = [] + + total_data = CLK0+CLK1+CLK2+TRIG0+TRIG1+TRIG2+TRIG3+TRIG4+TRIG5+TRIG6+TRIG7 + std = np.std(total_data) + plt.title(title + ': Eye Opening') + plt.xlabel('DAQ Delay') + plt.ylabel('Number of Boards') + plt.legend() + ax = plt.gca() + plt.text(0.02, 0.95, r'$\sigma=%.2f$' % (std, ), transform = ax.transAxes) + plt.savefig('../../static/files/Bit_Error_Rate_EyeOpening') + + +makePlot('Bit Error Rate', [True,True,True], None, None, [True,True,False,False,False,True,False,False,False,False,False], ['Bryan']) diff --git a/cgi-bin/WagonDB/makeTestingData.py b/cgi-bin/WagonDB/makeTestingData.py new file mode 100644 index 0000000..c084eb4 --- /dev/null +++ b/cgi-bin/WagonDB/makeTestingData.py @@ -0,0 +1,195 @@ +from connect import connect +import numpy as np +import json +import csv + +db = connect(0) +cur = db.cursor() + +with open('./static/files/Test.csv', mode='w') as csv_file: + columns = ['Test ID', 'Test Type ID', 'Board ID', 'Person ID', 'Time', 'Successful','comments'] + writer = csv.writer(csv_file) + writer.writerow(columns) + + cur.execute('select * from Test') + Test_Data = cur.fetchall() + writer.writerows(Test_Data) + +with open('./static/files/ID_Resistor_Test_Data.csv', mode='w') as csv_file: + header = ['Test ID','Resistance'] + writer = csv.DictWriter(csv_file, fieldnames = header) + + cur.execute('select test_type from Test_Type where name="ID Resistor Measurement"') + test_type_id = cur.fetchall()[0][0] + + cur.execute('select test_id from Test where test_type_id="{}"'.format(test_type_id)) + TestIDs = cur.fetchall() + + query = 'select attach from Attachments where ' + for i in TestIDs: + query += 'test_id={}'.format(i[0]) + if i is not TestIDs[-1]: + query += ' or ' + cur.execute(query) + Attach = cur.fetchall() + Attach_Data = [] + for i in Attach: + Attach_Data.append(json.loads(i[0])) + Resistance = [] + for i in Attach_Data: + Resistance.append(i['wagon type chip']['WAGON_TYPE -> GND']) + + writer.writeheader() + for i in range(len(TestIDs)): + writer.writerow({'Test ID':TestIDs[i][0], 'Resistance':Resistance[i]}) + +with open('./static/files/I2C_ReadWrite_Test_Data.csv', mode='w') as csv_file: + header= ['Test ID', 'Checks', 'Correct at Module 1', 'Correct at Module 2'] + writer = csv.DictWriter(csv_file, fieldnames = header) + + cur.execute('select test_type from Test_Type where name="I2C Read/Write"') + test_type_id = cur.fetchall()[0][0] + + cur.execute('select test_id from Test where test_type_id="{}"'.format(test_type_id)) + TestIDs = cur.fetchall() + + query = 'select attach from Attachments where ' + for i in TestIDs: + query += 'test_id={}'.format(i[0]) + if i is not TestIDs[-1]: + query += ' or ' + cur.execute(query) + Attach = cur.fetchall() + Attach_Data = [] + for i in Attach: + Attach_Data.append(json.loads(i[0])) + mod9999 = [] + mod0 = [] + mod1 = [] + for i in Attach_Data: + mod9999.append(i['num_iic_checks_mod9999']) + mod0.append(i['num_iic_correct_mod0']) + try: + mod1.append(i['num_iic_correct_mod1']) + except KeyError as e: + mod1.append(-1) + + writer.writeheader() + for i in range(len(TestIDs)): + writer.writerow({'Test ID':TestIDs[i][0], 'Checks':mod9999[i], 'Correct at Module 1':mod0[i], 'Correct at Module 2':mod1[i]}) + +with open('./static/files/Resistance_Measurement.csv', mode='w') as csv_file: + header = ['Test ID','RTD -> VMON_LVS Module 1', 'ECON_RE_Sb -> HGCROC_RE_Sb Module 1', 'PWR_EN -> PG_LDO Module 1', 'RTD -> HGCROC_RE_Sb Module 1', 'HGCROC_RE_Hb -> HGCROC_RE_Sb Module 1', 'PG_DCDC -> ECON_RE_Hb Module 1', 'RTD -> VMON_LVS Module 2', 'ECON_RE_Sb -> HGCROC_RE_Sb Module 2', 'PWR_EN -> PG_LDO Module 2', 'RTD -> HGCROC_RE_Sb Module 2', 'HGCROC_RE_Hb -> HGCROC_RE_Sb Module 2', 'PG_DCDC -> ECON_RE_Hb Module 2'] + writer = csv.DictWriter(csv_file, fieldnames = header) + + cur.execute('select test_type from Test_Type where name="Resistance Measurement"') + test_type_id = cur.fetchall()[0][0] + + cur.execute('select test_id from Test where test_type_id="{}"'.format(test_type_id)) + TestIDs = cur.fetchall() + + query = 'select attach from Attachments where ' + + for i in TestIDs: + query += 'test_id={}'.format(i[0]) + if i is not TestIDs[-1]: + query += ' or ' + cur.execute(query) + Attach = cur.fetchall() + Attach_Data = [] + for i in Attach: + Attach_Data.append(json.loads(i[0])) + + RTD_VMON_1 = [] + ECON_HG_1 = [] + PWR_PG_1 = [] + RTD_HG_1 = [] + HG_HG_1 = [] + PG_ECON_1 = [] + RTD_VMON_2 = [] + ECON_HG_2 = [] + PWR_PG_2 = [] + RTD_HG_2 = [] + HG_HG_2 = [] + PG_ECON_2 = [] + + for i in Attach_Data: + RTD_VMON_1.append(i["module 1"]["RTD -> VMON_LVS"]) + ECON_HG_1.append(i["module 1"]["ECON_RE_Sb -> HGCROC_RE_Sb"][0]) + PWR_PG_1.append(i["module 1"]["PWR_EN -> PG_LDO"][0]) + RTD_HG_1.append(i["module 1"]["RTD -> HGCROC_RE_Sb"]) + HG_HG_1.append(i["module 1"]["HGCROC_RE_Hb -> HGCROC_RE_Sb"][0]) + PG_ECON_1.append(i["module 1"]["PG_DCDC -> ECON_RE_Hb"][0]) + try: + RTD_VMON_2.append(i["module 2"]["RTD -> VMON_LVS"]) + except KeyError as e: + RTD_VMON_2.append(-1) + try: + ECON_HG_2.append(i["module 2"]["ECON_RE_Sb -> HGCROC_RE_Sb"][0]) + except KeyError as e: + ECON_HG_2.append(-1) + try: + PWR_PG_2.append(i["module 2"]["PWR_EN -> PG_LDO"][0]) + except KeyError as e: + PWR_PG_2.append(-1) + try: + RTD_HG_2.append(i["module 2"]["RTD -> HGCROC_RE_Sb"]) + except KeyError as e: + RTD_HG_2.append(-1) + try: + HG_HG_2.append(i["module 2"]["HGCROC_RE_Hb -> HGCROC_RE_Sb"][0]) + except KeyError as e: + HG_HG_2.append(-1) + try: + PG_ECON_2.append(i["module 2"]["PG_DCDC -> ECON_RE_Hb"][0]) + except KeyError as e: + PG_ECON_2.append(-1) + + writer.writeheader() + for i in range(len(TestIDs)): + writer.writerow({'Test ID':TestIDs[i][0], 'RTD -> VMON_LVS Module 1':RTD_VMON_1[i], 'ECON_RE_Sb -> HGCROC_RE_Sb Module 1':ECON_HG_1[i], 'PWR_EN -> PG_LDO Module 1':PWR_PG_1[i], 'RTD -> HGCROC_RE_Sb Module 1':RTD_HG_1[i], 'HGCROC_RE_Hb -> HGCROC_RE_Sb Module 1':HG_HG_1[i], 'PG_DCDC -> ECON_RE_Hb Module 1':PG_ECON_1[i], 'RTD -> VMON_LVS Module 2':RTD_VMON_2[i], 'ECON_RE_Sb -> HGCROC_RE_Sb Module 2':ECON_HG_2[i], 'PWR_EN -> PG_LDO Module 2':PWR_PG_2[i], 'RTD -> HGCROC_RE_Sb Module 2':RTD_HG_2[i], 'HGCROC_RE_Hb -> HGCROC_RE_Sb Module 2':HG_HG_2[i], 'PG_DCDC -> ECON_RE_Hb Module 2':PG_ECON_2[i]}) + +with open('./static/files/Bit_Error_Rate_Test_Data.csv', mode='w') as csv_file: + header = ['Test ID', 'E Link', 'Midpoint', 'Eye Opening', 'Passed', 'Midpoint Errors'] + writer = csv.DictWriter(csv_file, fieldnames=header) + writer.writeheader() + + cur.execute('select test_type from Test_Type where name="Bit Error Rate Test"') + test_type_id = cur.fetchall()[0][0] + + cur.execute('select test_id from Test where test_type_id="{}"'.format(test_type_id)) + TestIDs = cur.fetchall() + + query = 'select attach from Attachments where ' + for i in TestIDs: + query += 'test_id={}'.format(i[0]) + if i is not TestIDs[-1]: + query += ' or ' + cur.execute(query) + Attach = cur.fetchall() + Attach_Data = [] + for i in Attach: + Attach_Data.append(json.loads(i[0])) + + for n in range(len(Attach_Data)): + keys = Attach_Data[n].keys() + for j in keys: + writer.writerow({'Test ID':TestIDs[n][0], 'E Link':j, 'Midpoint':Attach_Data[n][j]['Midpoint'], 'Eye Opening':Attach_Data[n][j]['Eye Opening'], 'Passed':Attach_Data[n][j]['passed'], 'Midpoint Errors':Attach_Data[n][j]['Midpoint Errors']}) + +with open('./static/files/Board.csv', mode='w') as csv_file: + header = ['Full ID', 'Board ID', 'Type ID'] + writer = csv.writer(csv_file) + writer.writerow(header) + + cur.execute('select full_id,board_id,type_id from Board') + Board_Data = cur.fetchall() + writer.writerows(Board_Data) + +with open('./static/files/People.csv', mode='w') as csv_file: + header = ['Person ID', 'Person Name'] + writer = csv.writer(csv_file) + writer.writerow(header) + + cur.execute('select * from People') + People_Data = cur.fetchall() + writer.writerows(People_Data) diff --git a/cgi-bin/WagonDB/module.py b/cgi-bin/WagonDB/module.py new file mode 100755 index 0000000..233719d --- /dev/null +++ b/cgi-bin/WagonDB/module.py @@ -0,0 +1,37 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import module_functions +from connect import connect + +#cgi header +print("Content-type: text/html\n") + + +form = cgi.FieldStorage() +board_id = base.cleanCGInumber(form.getvalue('board_id')) +serial_num = form.getvalue('serial_num') +base.header(title='Wagon DB') +base.top() +#print('card_id = ', card_id) +#print 'serial_num = ', serial_num + +module_functions.add_test_tab(serial_num, board_id) + +db = connect(0) +cur = db.cursor() + +revokes=module_functions.Portage_fetch_revokes(board_id) + +cur.execute("SELECT location, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, info FROM Board_Info WHERE board_id = %s" % board_id) +info = cur.fetchall() + +module_functions.board_info(info) + +cur.execute("select test_type, name from Test_Type where required = 1 order by relative_order ASC") +for test_type in cur: + module_functions.ePortageTest(test_type[0], serial_num, test_type[1], revokes) + +base.bottom() diff --git a/cgi-bin/WagonDB/module_functions.py b/cgi-bin/WagonDB/module_functions.py new file mode 100755 index 0000000..80cf558 --- /dev/null +++ b/cgi-bin/WagonDB/module_functions.py @@ -0,0 +1,250 @@ +#!/usr/bin/python3 +from connect import connect +import sys +#import mysql.connector +from get_attach import save +import home_page_list + +def Portage_fetch(test_type_id, board_sn): + db = connect(0) + cur = db.cursor() + cur.execute("SELECT People.person_name, Test.day, Test.successful, Test.comments, Test_Type.name, Test.test_id FROM Test, Test_Type, People, Board WHERE Test_Type.test_type = %(test_id)s AND Board.full_id = '%(sn)s' AND People.person_id = Test.person_id AND Test_Type.test_type=Test.test_type_id AND Test.board_id = Board.board_id ORDER BY Test.day ASC" %{'test_id':test_type_id, 'sn':board_sn}) + return cur.fetchall() + +def Portage_fetch_revokes(board_sn): + db=connect(0) + cur = db.cursor() + cur.execute("SELECT TestRevoke.test_id, TestRevoke.comment FROM TestRevoke,Test,Board WHERE Board.sn = %(sn)s AND Board.board_id = Test.board_id AND Test.test_id = TestRevoke.test_id" %{'sn':board_sn}) + # build a dictionary + revoked={} + for fromdb in cur.fetchall(): + revoked[fromdb[0]]=fromdb[1] + return revoked + +def Portage_fetch_attach(test_id): + db = connect(0) + cur = db.cursor() + cur.execute('SELECT attach_id, attachmime, attachdesc, originalname FROM Attachments WHERE test_id=%(tid)s ORDER BY attach_id' % {'tid':test_id}) + return cur.fetchall() + +def add_test_tab(sn, board_id): + + print('
') + print('
') + print('

Wagon Test Info for %s

' %sn) + print('
') + print('
') + + print('') + + + +def ePortageTest(test_type_id, board_sn, test_name, revokes): + attempts = Portage_fetch(test_type_id, board_sn) + print('
') + print('
') + print('
') + print('

%(name)s

' %{ "name":test_name}) + print('
') + + n = 0 + for attempt in attempts: + n += 1 + + print('

Attempt: %d

'%n) + print('') + print('') + print('') + print('') + print('') + print('') +# print '' + print('') + print('') + print('' %{ "pname":attempt[0]}) + print('' %{ "when":attempt[1]}) + if attempt[2] == 1: + if attempt[5] in revokes: + print('' %{ "comment":revokes[attempt[5]] }) + else: + print('') + if len(sys.argv) == 1: + print("" %{ "id":attempt[5]}) + + else: + print('') + print('') + print('') + print('' ) + print('' %{ "comm":attempt[3]}) + print('') + attachments=Portage_fetch_attach(attempt[5]) + for afile in attachments: + if len(sys.argv) == 1: + print('' % (afile[0],afile[3],afile[2])) + else: + print('' % (afile[0], afile[3], afile[2])) + stdout = sys.stdout + sys.stdout = open("%(loc)s/%(f)s.html" %{'loc':sys.argv[1], 'f':afile[0]},'w') + save(afile[0]) + sys.stdout.close() + sys.stdout = stdout + + print('') + print('
NameDateSuccessful?Comments
%(pname)s %(when)s Revoked: %(comment)s Yes RevokeNo
Comments: %(comm)s
Attachment: %s%s
Attachment: %s%s
') + + print('
') + print('
') + +def board_info(info): + if info and len(info[0]) == 5: + location = info[0][0] + daq_chip_id = info[0][1] + trigger_chip_1_id = info[0][2] + trigger_chip_2_id = info[0][3] + info_com = info[0][4] + + else: + location, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, info_com = "None", "None", "None", "None", "None" + + print('
') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('') + print('' % location) + if daq_chip_id != "0" and trigger_chip_1_id != "0" and trigger_chip_2_id != "0": + print('' % daq_chip_id) + print('' % trigger_chip_1_id) + print('' % trigger_chip_2_id) + else: + print('') + print('') + print('') + + print('') + print('') + print('') + print('') + print('' % info_com) + print('') + print('') + print('
LocationDAQ Chip IDTrigger Chip 1 IDTrigger Chip 2 ID
%s%s%s%sNoneNoneNone
Comments
%s
') + print('
') + +def add_board_info(board_id, sn, location, daqid, trig1id, trig2id, info): + db = connect(1) + cur = db.cursor() + + if not board_id: + try: + cur.execute("SELECT board_id FROM Board WHERE full_id = '%s';" % sn) + rows = cur.fetchall() + + if not rows: + home_page_list.add_module(sn) + cur.execute("SELECT board_id FROM Board WHERE full_id = '%s';" % sn) + board_id = cur.fetchall()[0][0] + else: + board_id = rows[0][0] + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + + try: + cur.execute('INSERT INTO Board_Info (board_id, info_type, info, daq_chip_id, trigger_chip_1_id, trigger_chip_2_id, location) VALUES (%i, %i, "%s", "%s", "%s", "%s", "%s");' % (board_id, 0, info, daqid, trig1id, trig2id, location)) + + db.commit() + db.close() + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + +def add_revoke(test_id): + db = connect(0) + cur = db.cursor() + + cur.execute("SELECT test_type_id, board_id FROM Test WHERE test_id = %s" % test_id) + test_type_id, board_id = cur.fetchall()[0] + + cur.execute("SELECT name FROM Test_Type WHERE test_type = %s" % test_type_id) + name = cur.fetchall()[0][0] + + cur.execute("Select full_id FROM Board WHERE board_id = %s" % board_id) + full_id = cur.fetchall()[0][0] + + print('
') + print('
') + print('

Revoke %s for Board %s

' % (name, full_id)) + print('
') + print('
') + + print('
') + print('' % test_id) + print('
') + print('') + print('') + print('
') + print('
') + print('
') + print('') + print('') + +def revoke_success(test_id, comments): + db = connect(1) + cur = db.cursor() + + try: + cur.execute('INSERT INTO TestRevoke (test_id, comment) VALUES (%s, "%s")' % (test_id, comments)) + + db.commit() + db.close() + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + +def get_test_types(): + db = connect(0) + cur = db.cursor() + + try: + cur.execute('SELECT name, test_type FROM Test_Type') + + rows = cur.fetchall() + tests = [[r[0],r[1]] for r in rows] + + return tests + + except mysql.connector.Error as err: + print("CONNECTION ERROR") + print(err) + diff --git a/cgi-bin/WagonDB/module_functions.pyc b/cgi-bin/WagonDB/module_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfd74e5bfdf4681722d7a0561812d9c1986d44b7 GIT binary patch literal 9107 zcmcIqNpl=Y70&9`Zp*f2QFSB|Z%NWL3u2e3sGGAuC_r0Z5 z{`>UQKaZS7Q`vtd{Qdxs{uPP<{~Z-8)mG}BQV!cC6+7ylBV(wS)V;FQ%PJmG?NN1a zv`aUp?v1HnMEwMBkE>u*DibOglggwD#-%c)f(fadP{E{BPO4x^D$^=BA(c}qI4PCW zDwvka8M3lfJq0$Sf8k%%K`kFg(M*#hZ04J$X9PXke-t*kGd4!?th4h5id=U1siTfc z>ae69IO_t=tR9rOLWF+Ml+}BO*z<^b?;MC74wp%~RpoS>5elU}u&}l9@y7Zc z_meQ~#Nl!$%ygP;Cw@Czbnk>ZUk>~OThsf^W~lYfer!9MX}cXJxi-!1I|rR`x$n&! zuWv_z`wj2*w`8t9x<$L-qWfX$XMyY9{bxz+Nl<_dt>vad1V=V z#GIbvIoBMf~PoR4z%$qGgj)giuNoq1``4JMs zicVzSpplo&Y*qYHQt0dIsjjh;+83PNXP(#WTg zN%R|;6k&w$L1Lf0BLXZ^dGm)C)X|7K9HGR{L0DOH)LdF!2X17{_E`b#NucRphR69;HDv(&I6ElPsoCh-_rCvp_^nm^ECg}?7J@pc+ROCw+;6s^XN#_>wj-jDsRyBM zF1l$J?M8_o6J^Y;-jJ6BhU{J1+gJl?L;+x-tE1idMQbp4{Ecw49#yw@BQNIYXEEpC z(HpKVpubPkE;xezg#}pW=pRr(C%*X+Kpq8jM5%MAjIbqz434rnR+xctV+JN*2GBjp zv8gV-ke+xt>B*;%PE(Mn$e5MWoq7t*X`zATIb&#M25E#(TA`P)n@v4~vKB;-+-B@+ zy;jN6$CbMN@=$LxjhEWN(z|XaU%KjcG-~Z9ORH}CU}+WPZ<4&VTEFY>rirMadn?&V z-JLXZ=Y!e`hBWo8wt|(8oqg3zj3qE}-|RKM>AS5g+*zymL9k8v0$RRb-~t2^ehE9R>3vE8j1_!{Ar1Xb^u49$s?k* zu+^hRYsaXy;$@P=W?QK;YyA=>;;TSrcG5&Dxpn zz>F*b_j+8-1uvOpUM~73&^If6hoCr%)`WUkQrQKE?Q`N1JRDQmpH*;P-U0fVfw|y< zytntd6UdAX57;t)VLJZ8_IAoVyS@8PP zUm{SOy!P|g#Gj}i#9)ovyw;10ZrT1Wm==+;l9!${vcMdU`&|vYq!9{Mjiem2r zbvIaGO9~=1QFzk;PAjV)1Jz#vQ9poNsJ;v|ePRH65KXBzwbqq7e0JJ!m}lVgl{!vV zDR!9k8d)7aqV=0JZDy@?wGLAswmbPX1L{}ndW{3nm^dt8)HI}AYNS~ZW?|r(W-EOZ zX14Cb=Y15ybWlfXc_R%DEVSm>Dc#^&-l}hcpV|s4-JY9%ZhNStpmDKZ-SLyP)%sR9 zI(px{L}v*#Oeh=318%z0-8I@dNu)>1xfqhit&q_SUIhiug&nwh90%$3Jc=5|YK^*a zHDTf!b(~7oy1U(%O>Ajmv^n#Z>&MY zHy`e1>3$L{VY_K|%{>U?IDLHGJ-X=D3)^_n_>kK+N+crpJTW?A7cILqU$QxmK7gh( zitY5BiS8nj5@vk#tAo2bcWOf0}<@FEavruE}^Z^VK+QF6fo{>du0B zRs2?T0%{N}O8HovMsQ$cn6?fLszkrfQl1P09%2-ba3vN-Ru zg1-~Rq32@c#hKR7y4!c)w!M#;^?ek|Ic*Im%qF6oX=kb=hPE)LVsK}jS?3IXUPbGy z^Gdlezq6n^gLlq4ZVSX$ ze=;KEx!*usseha{eWqHVpD-!LCba4|Z+zQbZ$%yV)=e|;ig~eq2PnJ?izS1XpFOAVeenRHH?(JoDaR87J# z?~x!ZNHd4Kg{u!FF&--1Q=5&OAX@0p)WHL~h9*@^C8vYP4#~{G(}aJh4|uY0JQ*(7 zVM*hCj-D7LI0fhJ6kqM@xV!h68i7H102bhfPpRxT$~l@suAMo6Lxv5Y_+FyaLA_uJ zOM-dv?M)64F$Tb8XWa6MsV3E@^kPw)lG@$mOGC@dIz!7Oj{06e9HGo?3VP^eRBhU+ zhz(6X=|f3Jn{0GnhFM=1hg8!_uHW9=M9Tcu?M-*X^KN_k7wEjTxwYZlac^zjxotwn zZOK7Yi`f@l5i90$O?A=jlhH-@a{@ZlMd@603mIQHUg$#&pBORp0Qwg)|#b_h9%f0n9 z@|Wn5jFaR%;R}?V8E71Rf*I$0>7~+HSo@Quvhz-9$~h&iCJ~g|p!pHK`wJ>Py*nl! z3fVU5RwP1c@b4oY7fTH}r&dDvVMImk`pLvM5M>~dWXg{rLZoO@fUus31M$+B+A$Vd zJb`|9fGmM*$R!X8nPe!CrxFoOZSIy?V5>yp0@@E1i*6zGy~O)qZkB0wtyg-l(|PO> z%cq(CH#o6*heEOy#`s$17TPJFm-^MVySl7Ge)}U-lVUv1OSnWY0g1-ra*QV80{4<# zG^^6)4doa&xhV3FZI_{Dnjo_&x%?tJT1ALaap5qx(qOI9Np)UvLwt$BKG!Pk{Wy<0 zewMFr2BZXYAE7Ews}?1l{oFNVttbe>q~h}I)+#pEs<@B*cpq&>EqZZi?=l}lxlY#^ z8cd~1dMx%EVa)v%T(8^c3yDd)|Dp#`s!-SU7MIGyC%K=6ei4q#dO(akOXGr3a}dP@ z6_+}`R=H9UFJi6o?xhL?Dm&4!+1e|11HX6 za`^S*KM_a>B>BKDW|^=^fREmnAf1)c7lU2}GMh8}J=PFIW{_*fIaiu-X62y=ArTII zhQeDYybAfUK=9@x=*8&2hhFBpUGZJ{V17F_A>ZHQ+#lN!B1epsg(BO~g(G2;`MV4W9x~7J` zw6ERE`WYI%%aXv-x_FK{_(;CLinAtHgpaYtu`8)vkd~0Fe8v8?04)k`78f(OTT(wN zslDs=6YQ4psl)}uMe-JZid*ELNr>x4%h0_=@@37zJgU|l5R>4*;2P!Y^$@h1OMjXx zRTZtmJi~s<@O|+}`fi6ooWwQ8E#boY1z#D{L){JOzhOa%;fgDpE}e8PmL|kM5F2Sk zk9orUGz#&cmb>1Q>_jp5y3LG|^%fubjx uQj_lo|Knc)P;Y9+_p4JQ^lK>2IQ#hB$tgT') +print(''%url) +print("
") +print('
') +print('

Admin Access

') +print("

") +print("
") + +print("
") +print('
') +print("") +print("") +print("
") + +print('
') +print('') +print("
") +print("
") +print("") + +print("
") + +base.bottom() diff --git a/cgi-bin/WagonDB/password_entry2.py b/cgi-bin/WagonDB/password_entry2.py new file mode 100755 index 0000000..b7daa4f --- /dev/null +++ b/cgi-bin/WagonDB/password_entry2.py @@ -0,0 +1,50 @@ +#!/usr/bin/python3 + +import cgi +import base +import home_page_list +import add_test_functions +import hashlib +import connect + +try: + base_url = connect.get_base_url() + + form = cgi.FieldStorage() + url = form.getvalue("url") + password = form.getvalue("password") + + correct_password = "8ae3ce28c2aecce334e4c2395b86066b" + + if hashlib.md5(password.encode('utf-8')).hexdigest() == correct_password: + print("Location: %s/%s\n\n" % (base_url,url)) + + print("Content-type: text/html\n") + + base.header(title='Access Granted') + base.top() + + print("
") + print('
') + print('

Access Granted

') + print("
") + print("
") + + base.bottom() + + else: + print("Content-type: text/html\n") + + base.header(title='Access Denied') + base.top() + + print("
") + print('
') + print('

Access Denied

') + print("
") + print("
") + + base.bottom() +except Exception as e: + print("content-type: text/html\n") + print(e) diff --git a/cgi-bin/WagonDB/plottingTest.py b/cgi-bin/WagonDB/plottingTest.py new file mode 100644 index 0000000..919cfcd --- /dev/null +++ b/cgi-bin/WagonDB/plottingTest.py @@ -0,0 +1,192 @@ +from connect import connect +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import datetime +import matplotlib.dates as mdates +from matplotlib.axis import Axis +import json + + +db = connect(0) + +cur = db.cursor() + +cur.execute('SELECT person_id FROM People WHERE person_name="Bryan"') + +IDtemp = cur.fetchone() +myID = IDtemp[0] + +cur.execute("SELECT test_id FROM Test WHERE person_id={} AND successful=1".format(myID)) + +passed_tests = cur.fetchall() + +print(len(passed_tests)) + +def select_test_per_board(SN): + print("Getting tests for board with Serial number {}".format(SN)) + db = connect(0) + cur = db.cursor() + + cur.execute('select board_id from Board where full_id="{}"'.format(SN)) + BoardID = cur.fetchall()[0][0] + print(BoardID) + + cur.execute('select test_id,successful from Test where board_id={}'.format(BoardID)) + tests = cur.fetchall() + print(tests) + return tests + +#tests = select_test_per_board("320WW20A1000005") +#npresults = np.array([t[1] for t in tests]) +#print(npresults) +#plt.hist(npresults, bins=2) +#plt.savefig("./test.png") + +def tests_over_time(SerialNumber=None,SubType=None,Tester=None): + db = connect(0) + cur = db.cursor() + + query = "select day from Test" + title = "Tests over Time" + + if SerialNumber is not None: + cur.execute('select board_id from Board where full_id="{}"'.format(SerialNumber)) + BoardID = cur.fetchall()[0][0] + query += ' where board_id="{}"'.format(BoardID) + title += " for " + SerialNumber + + if SubType is not None: + if SerialNumber is not None: + query += ' and' + title += " and " + else: + query += ' where' + title += " for " + cur.execute('select board_id from Board where type_id="{}"'.format(SubType)) + BoardID = cur.fetchall() + for i in BoardID: + query += ' board_id={}'.format(i[0]) + if i is not BoardID[-1]: + query += ' or' + title += SubType + + if Tester is not None: + cur.execute('select person_id from People where person_name="{}"'.format(Tester)) + person_id = cur.fetchall()[0][0] + if SerialNumber is not None or SubType is not None: + query += ' and' + title += " and " + else: + query += ' where' + title += " for " + query += ' person_id="{}"'.format(person_id) + title += Tester + + cur.execute(query) + dates = cur.fetchall() + #print(dates) + first = datetime.datetime(2023, 1, 1, 12, 0, 0) + + query2 = "select day from Test where successful=1" + + if SerialNumber is not None: + cur.execute('select board_id from Board where full_id="{}"'.format(SerialNumber)) + BoardID = cur.fetchall()[0][0] + query2 += ' and board_id="{}"'.format(BoardID) + + elif SubType is not None: + cur.execute('select board_id from Board where type_id="{}"'.format(SubType)) + BoardID = cur.fetchall() + query2 += " and" + for i in BoardID: + query2 += ' board_id={}'.format(i[0]) + if i is not BoardID[-1]: + query2 += ' or' + + elif Tester is not None: + cur.execute('select person_id from People where person_name="{}"'.format(Tester)) + person_id = cur.fetchall()[0][0] + query2 += ' and person_id="{}"'.format(person_id) + + cur.execute(query2) + successful_dates = cur.fetchall() + #print(successful_dates) + + time_series_data = [] + time_series_data_successful = [] + + while (first <= datetime.datetime.now()): + i = 0 + j = 0 + for d in dates: + if d[0] > first: + break + else: + i += 1 + for d in successful_dates: + if d[0] > first: + break + else: + j += 1 + time_series_data.append([first,i]) + time_series_data_successful.append([first,j]) + first += datetime.timedelta(days=7) + tempx1,tempy1 = zip(*time_series_data) + tempx2,tempy2 = zip(*time_series_data_successful) + + fig, ax = plt.subplots() + plt.plot(tempx1,tempy1,label = "Total") + plt.plot(tempx2,tempy2,label = "Successful") + plt.title(title) + plt.xlabel("Date") + plt.ylabel("Number of Tests") + plt.legend() + Axis.set_major_locator(ax.xaxis,mdates.MonthLocator(interval=1)) + plt.gcf().autofmt_xdate() + + FileName = "./tests_over_time" + + if SerialNumber is not None: + FileName += "_SN"+SerialNumber + + if SubType is not None: + FileName += "_SubType"+SubType + + if Tester is not None: + FileName += "_Tester"+Tester + + plt.savefig(FileName + ".png") + + +def data_from_test_type(TestType): + db = connect(0) + cur = db.cursor() + + cur.execute('select test_type from Test_Type where name="{}"'.format(TestType)) + test_type_id = cur.fetchall()[0][0] + + cur.execute('select test_id from Test where test_type_id="{}"'.format(test_type_id)) + TestIDs = cur.fetchall() + + query = 'select attach from Attachments where ' + for i in TestIDs: + query += 'test_id={}'.format(i[0]) + if i is not TestIDs[-1]: + query += ' or ' + + cur.execute(query) + Attach = cur.fetchall() + Data = [] + for i in Attach: + Data.append(json.loads(i[0])) + Resistance = [] + for i in Data: + Resistance.append(i['wagon type chip']['WAGON_TYPE -> GND']) + plt.hist(Resistance) + plt.xlabel("Resistance (Ohms)") + plt.ylabel("Number of Boards") + plt.title("ID Resistor Measurements") + plt.savefig("./ID_Resistor_Data.png") + +data_from_test_type("ID Resistor Measurement") diff --git a/cgi-bin/WagonDB/publish.py b/cgi-bin/WagonDB/publish.py new file mode 100755 index 0000000..63946aa --- /dev/null +++ b/cgi-bin/WagonDB/publish.py @@ -0,0 +1,54 @@ +#!/usr/bin/python3 +import sys +import os + +if len(sys.argv) == 1: + print("Please input a destination directory after the script call.") + sys.exit() +else: + if not os.path.isdir(sys.argv[1]): + os.makedirs(sys.argv[1]) +import base +from home_page_list import fetch_list_module +from connect import connect +import home_page +import module_functions +import summary +from summary_functions import get +import shutil + +def copytree(src, dst, symlinks=False, ignore=None): + for item in os.listdir(src): + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isdir(s): + shutil.copytree(s, d, symlinks, ignore) + else: + shutil.copy2(s, d) + +row = fetch_list_module() + +for cards in row: + stdout = sys.stdout + sys.stdout = open('%(loc)s/card_%(sn)s.html' %{ 'loc':sys.argv[1],'sn':cards[0]}, 'w') + serial_num = cards[0] + card_id = cards[1] + base.header(title='uHTR ePortage') + base.top() + revokes=module_functions.Portage_fetch_revokes(serial_num) + + db= connect(0) + cur = db.cursor() + + cur.execute("select test_type, name from Test_Type where required = 1 order by relative_order ASC") + for test_type in cur: + module_functions.ePortageTest(test_type[0], serial_num, test_type[1], revokes) + sys.stdout.close() + sys.stdout = stdout + + base.bottom() + +copytree('../static/css', '%s' %(sys.argv[1])) + +copytree('../static/files' , '%s' %sys.argv[1]) + diff --git a/cgi-bin/WagonDB/revoke_success.py b/cgi-bin/WagonDB/revoke_success.py new file mode 100755 index 0000000..ef5a0b1 --- /dev/null +++ b/cgi-bin/WagonDB/revoke_success.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import base +import home_page_list +import module_functions +from connect import connect + +cgitb.enable() + +#cgi header +print("Content-type: text/html\n") + + +form = cgi.FieldStorage() +test_id = base.cleanCGInumber(form.getvalue('test_id')) +base.header(title='Revoke Test') +base.top() + +module_functions.add_revoke(test_id) + +base.bottom() diff --git a/cgi-bin/WagonDB/revoke_success2.py b/cgi-bin/WagonDB/revoke_success2.py new file mode 100755 index 0000000..3c8d99a --- /dev/null +++ b/cgi-bin/WagonDB/revoke_success2.py @@ -0,0 +1,31 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import base +import module_functions +import connect + +cgitb.enable() + +base_url = connect.get_base_url() + +print("Location: %s/summary.py\n\n"%(base_url)) +#cgi header +print("Content-type: text/html\n") + +form = cgi.FieldStorage() +test_id = base.cleanCGInumber(form.getvalue("test_id")) +comments = form.getvalue("revokeComments") + +if comments: + comments = cgi.escape(comments) + +base.header(title='Revoke Success') +base.top() + +module_functions.revoke_success(test_id, comments) + +base.bottom() + + diff --git a/cgi-bin/WagonDB/settings.py b/cgi-bin/WagonDB/settings.py new file mode 100755 index 0000000..29efbc4 --- /dev/null +++ b/cgi-bin/WagonDB/settings.py @@ -0,0 +1,7 @@ +#!/usr/bin/python3 +def getAttachmentBasePath(): + return "/home/jmmans/tmp/ePortage" +# return "/home/daq/ePortageArchive/uHTR" + +def getAttachmentPathFor(test_id,attach_id): + return "%s/%d/%d" % (getAttachmentBasePath(),test_id,attach_id) diff --git a/cgi-bin/WagonDB/settings.pyc b/cgi-bin/WagonDB/settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ac922cc45b72ead489c8e4cad7f38645f6320ae GIT binary patch literal 532 zcmbVIJx{|h5Ir{)v`B1FiGi_Fmev^<5#mE)tg5ngsa)G6L2(l0t^*Pq{2hKBe}Fry zv?^n*yYsV8Pxsy>Kj&xP*8^i=dlcXIoH*j*0KNd03{(UPTn}E-gj)xMCn5BOpt#** zFvBaZx@dyeZy}f(HHB9DdDD@}eacPvS8%#x*sj6sCd+iYSy!c96%;CM^K!B-YmJ_$ ztaF^U?{vwO+|vV*u|@DTJsR|LLxpHSDWI%ek|HoFy#_S literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/config.json b/cgi-bin/WagonDB/static/config.json new file mode 100644 index 0000000..6ba5807 --- /dev/null +++ b/cgi-bin/WagonDB/static/config.json @@ -0,0 +1,408 @@ +{ + "vars": { + "@gray-base": "#000", + "@gray-darker": "lighten(@gray-base, 13.5%)", + "@gray-dark": "lighten(@gray-base, 20%)", + "@gray": "lighten(@gray-base, 33.5%)", + "@gray-light": "lighten(@gray-base, 46.7%)", + "@gray-lighter": "lighten(@gray-base, 93.5%)", + "@brand-primary": "darken(#428bca, 6.5%)", + "@brand-success": "#5cb85c", + "@brand-info": "#5bc0de", + "@brand-warning": "#f0ad4e", + "@brand-danger": "#d9534f", + "@body-bg": "#fff", + "@text-color": "@gray-dark", + "@link-color": "@brand-primary", + "@link-hover-color": "darken(@link-color, 15%)", + "@link-hover-decoration": "underline", + "@font-family-sans-serif": "\"Helvetica Neue\", Helvetica, Arial, sans-serif", + "@font-family-serif": "Georgia, \"Times New Roman\", Times, serif", + "@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace", + "@font-family-base": "@font-family-sans-serif", + "@font-size-base": "14px", + "@font-size-large": "ceil((@font-size-base * 1.25))", + "@font-size-small": "ceil((@font-size-base * 0.85))", + "@font-size-h1": "floor((@font-size-base * 2.6))", + "@font-size-h2": "floor((@font-size-base * 2.15))", + "@font-size-h3": "ceil((@font-size-base * 1.7))", + "@font-size-h4": "ceil((@font-size-base * 1.25))", + "@font-size-h5": "@font-size-base", + "@font-size-h6": "ceil((@font-size-base * 0.85))", + "@line-height-base": "1.428571429", + "@line-height-computed": "floor((@font-size-base * @line-height-base))", + "@headings-font-family": "inherit", + "@headings-font-weight": "500", + "@headings-line-height": "1.1", + "@headings-color": "inherit", + "@icon-font-path": "\"../fonts/\"", + "@icon-font-name": "\"glyphicons-halflings-regular\"", + "@icon-font-svg-id": "\"glyphicons_halflingsregular\"", + "@padding-base-vertical": "6px", + "@padding-base-horizontal": "12px", + "@padding-large-vertical": "10px", + "@padding-large-horizontal": "16px", + "@padding-small-vertical": "5px", + "@padding-small-horizontal": "10px", + "@padding-xs-vertical": "1px", + "@padding-xs-horizontal": "5px", + "@line-height-large": "1.3333333", + "@line-height-small": "1.5", + "@border-radius-base": "4px", + "@border-radius-large": "6px", + "@border-radius-small": "3px", + "@component-active-color": "#fff", + "@component-active-bg": "@brand-primary", + "@caret-width-base": "4px", + "@caret-width-large": "5px", + "@table-cell-padding": "8px", + "@table-condensed-cell-padding": "5px", + "@table-bg": "transparent", + "@table-bg-accent": "#f9f9f9", + "@table-bg-hover": "#f5f5f5", + "@table-bg-active": "@table-bg-hover", + "@table-border-color": "#ddd", + "@btn-font-weight": "normal", + "@btn-default-color": "#333", + "@btn-default-bg": "#fff", + "@btn-default-border": "#ccc", + "@btn-primary-color": "#fff", + "@btn-primary-bg": "@brand-primary", + "@btn-primary-border": "darken(@btn-primary-bg, 5%)", + "@btn-success-color": "#fff", + "@btn-success-bg": "@brand-success", + "@btn-success-border": "darken(@btn-success-bg, 5%)", + "@btn-info-color": "#fff", + "@btn-info-bg": "@brand-info", + "@btn-info-border": "darken(@btn-info-bg, 5%)", + "@btn-warning-color": "#fff", + "@btn-warning-bg": "@brand-warning", + "@btn-warning-border": "darken(@btn-warning-bg, 5%)", + "@btn-danger-color": "#fff", + "@btn-danger-bg": "@brand-danger", + "@btn-danger-border": "darken(@btn-danger-bg, 5%)", + "@btn-link-disabled-color": "@gray-light", + "@input-bg": "#fff", + "@input-bg-disabled": "@gray-lighter", + "@input-color": "@gray", + "@input-border": "#ccc", + "@input-border-radius": "@border-radius-base", + "@input-border-radius-large": "@border-radius-large", + "@input-border-radius-small": "@border-radius-small", + "@input-border-focus": "#66afe9", + "@input-color-placeholder": "#999", + "@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)", + "@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)", + "@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)", + "@legend-color": "@gray-dark", + "@legend-border-color": "#e5e5e5", + "@input-group-addon-bg": "@gray-lighter", + "@input-group-addon-border-color": "@input-border", + "@cursor-disabled": "not-allowed", + "@dropdown-bg": "#fff", + "@dropdown-border": "rgba(0,0,0,.15)", + "@dropdown-fallback-border": "#ccc", + "@dropdown-divider-bg": "#e5e5e5", + "@dropdown-link-color": "@gray-dark", + "@dropdown-link-hover-color": "darken(@gray-dark, 5%)", + "@dropdown-link-hover-bg": "#f5f5f5", + "@dropdown-link-active-color": "@component-active-color", + "@dropdown-link-active-bg": "@component-active-bg", + "@dropdown-link-disabled-color": "@gray-light", + "@dropdown-header-color": "@gray-light", + "@dropdown-caret-color": "#000", + "@screen-xs": "480px", + "@screen-xs-min": "@screen-xs", + "@screen-phone": "@screen-xs-min", + "@screen-sm": "768px", + "@screen-sm-min": "@screen-sm", + "@screen-tablet": "@screen-sm-min", + "@screen-md": "992px", + "@screen-md-min": "@screen-md", + "@screen-desktop": "@screen-md-min", + "@screen-lg": "1200px", + "@screen-lg-min": "@screen-lg", + "@screen-lg-desktop": "@screen-lg-min", + "@screen-xs-max": "(@screen-sm-min - 1)", + "@screen-sm-max": "(@screen-md-min - 1)", + "@screen-md-max": "(@screen-lg-min - 1)", + "@grid-columns": "12", + "@grid-gutter-width": "30px", + "@grid-float-breakpoint": "@screen-sm-min", + "@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)", + "@container-tablet": "(720px + @grid-gutter-width)", + "@container-sm": "@container-tablet", + "@container-desktop": "(940px + @grid-gutter-width)", + "@container-md": "@container-desktop", + "@container-large-desktop": "(1140px + @grid-gutter-width)", + "@container-lg": "@container-large-desktop", + "@navbar-height": "50px", + "@navbar-margin-bottom": "@line-height-computed", + "@navbar-border-radius": "@border-radius-base", + "@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))", + "@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)", + "@navbar-collapse-max-height": "340px", + "@navbar-default-color": "#777", + "@navbar-default-bg": "#f8f8f8", + "@navbar-default-border": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-color": "#777", + "@navbar-default-link-hover-color": "#333", + "@navbar-default-link-hover-bg": "transparent", + "@navbar-default-link-active-color": "#555", + "@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-disabled-color": "#ccc", + "@navbar-default-link-disabled-bg": "transparent", + "@navbar-default-brand-color": "@navbar-default-link-color", + "@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)", + "@navbar-default-brand-hover-bg": "transparent", + "@navbar-default-toggle-hover-bg": "#ddd", + "@navbar-default-toggle-icon-bar-bg": "#888", + "@navbar-default-toggle-border-color": "#ddd", + "@navbar-inverse-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-bg": "#222", + "@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-link-hover-color": "#fff", + "@navbar-inverse-link-hover-bg": "transparent", + "@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color", + "@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-disabled-color": "#444", + "@navbar-inverse-link-disabled-bg": "transparent", + "@navbar-inverse-brand-color": "@navbar-inverse-link-color", + "@navbar-inverse-brand-hover-color": "#fff", + "@navbar-inverse-brand-hover-bg": "transparent", + "@navbar-inverse-toggle-hover-bg": "#333", + "@navbar-inverse-toggle-icon-bar-bg": "#fff", + "@navbar-inverse-toggle-border-color": "#333", + "@nav-link-padding": "10px 15px", + "@nav-link-hover-bg": "@gray-lighter", + "@nav-disabled-link-color": "@gray-light", + "@nav-disabled-link-hover-color": "@gray-light", + "@nav-tabs-border-color": "#ddd", + "@nav-tabs-link-hover-border-color": "@gray-lighter", + "@nav-tabs-active-link-hover-bg": "@body-bg", + "@nav-tabs-active-link-hover-color": "@gray", + "@nav-tabs-active-link-hover-border-color": "#ddd", + "@nav-tabs-justified-link-border-color": "#ddd", + "@nav-tabs-justified-active-link-border-color": "@body-bg", + "@nav-pills-border-radius": "@border-radius-base", + "@nav-pills-active-link-hover-bg": "@component-active-bg", + "@nav-pills-active-link-hover-color": "@component-active-color", + "@pagination-color": "@link-color", + "@pagination-bg": "#fff", + "@pagination-border": "#ddd", + "@pagination-hover-color": "@link-hover-color", + "@pagination-hover-bg": "@gray-lighter", + "@pagination-hover-border": "#ddd", + "@pagination-active-color": "#fff", + "@pagination-active-bg": "@brand-primary", + "@pagination-active-border": "@brand-primary", + "@pagination-disabled-color": "@gray-light", + "@pagination-disabled-bg": "#fff", + "@pagination-disabled-border": "#ddd", + "@pager-bg": "@pagination-bg", + "@pager-border": "@pagination-border", + "@pager-border-radius": "15px", + "@pager-hover-bg": "@pagination-hover-bg", + "@pager-active-bg": "@pagination-active-bg", + "@pager-active-color": "@pagination-active-color", + "@pager-disabled-color": "@pagination-disabled-color", + "@jumbotron-padding": "30px", + "@jumbotron-color": "inherit", + "@jumbotron-bg": "@gray-lighter", + "@jumbotron-heading-color": "inherit", + "@jumbotron-font-size": "ceil((@font-size-base * 1.5))", + "@state-success-text": "#3c763d", + "@state-success-bg": "#dff0d8", + "@state-success-border": "darken(spin(@state-success-bg, -10), 5%)", + "@state-info-text": "#31708f", + "@state-info-bg": "#d9edf7", + "@state-info-border": "darken(spin(@state-info-bg, -10), 7%)", + "@state-warning-text": "#8a6d3b", + "@state-warning-bg": "#fcf8e3", + "@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)", + "@state-danger-text": "#a94442", + "@state-danger-bg": "#f2dede", + "@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)", + "@tooltip-max-width": "200px", + "@tooltip-color": "#fff", + "@tooltip-bg": "#000", + "@tooltip-opacity": ".9", + "@tooltip-arrow-width": "5px", + "@tooltip-arrow-color": "@tooltip-bg", + "@popover-bg": "#fff", + "@popover-max-width": "276px", + "@popover-border-color": "rgba(0,0,0,.2)", + "@popover-fallback-border-color": "#ccc", + "@popover-title-bg": "darken(@popover-bg, 3%)", + "@popover-arrow-width": "10px", + "@popover-arrow-color": "@popover-bg", + "@popover-arrow-outer-width": "(@popover-arrow-width + 1)", + "@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)", + "@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)", + "@label-default-bg": "@gray-light", + "@label-primary-bg": "@brand-primary", + "@label-success-bg": "@brand-success", + "@label-info-bg": "@brand-info", + "@label-warning-bg": "@brand-warning", + "@label-danger-bg": "@brand-danger", + "@label-color": "#fff", + "@label-link-hover-color": "#fff", + "@modal-inner-padding": "15px", + "@modal-title-padding": "15px", + "@modal-title-line-height": "@line-height-base", + "@modal-content-bg": "#fff", + "@modal-content-border-color": "rgba(0,0,0,.2)", + "@modal-content-fallback-border-color": "#999", + "@modal-backdrop-bg": "#000", + "@modal-backdrop-opacity": ".5", + "@modal-header-border-color": "#e5e5e5", + "@modal-footer-border-color": "@modal-header-border-color", + "@modal-lg": "900px", + "@modal-md": "600px", + "@modal-sm": "300px", + "@alert-padding": "15px", + "@alert-border-radius": "@border-radius-base", + "@alert-link-font-weight": "bold", + "@alert-success-bg": "@state-success-bg", + "@alert-success-text": "@state-success-text", + "@alert-success-border": "@state-success-border", + "@alert-info-bg": "@state-info-bg", + "@alert-info-text": "@state-info-text", + "@alert-info-border": "@state-info-border", + "@alert-warning-bg": "@state-warning-bg", + "@alert-warning-text": "@state-warning-text", + "@alert-warning-border": "@state-warning-border", + "@alert-danger-bg": "@state-danger-bg", + "@alert-danger-text": "@state-danger-text", + "@alert-danger-border": "@state-danger-border", + "@progress-bg": "#f5f5f5", + "@progress-bar-color": "#fff", + "@progress-border-radius": "@border-radius-base", + "@progress-bar-bg": "@brand-primary", + "@progress-bar-success-bg": "@brand-success", + "@progress-bar-warning-bg": "@brand-warning", + "@progress-bar-danger-bg": "@brand-danger", + "@progress-bar-info-bg": "@brand-info", + "@list-group-bg": "#fff", + "@list-group-border": "#ddd", + "@list-group-border-radius": "@border-radius-base", + "@list-group-hover-bg": "#f5f5f5", + "@list-group-active-color": "@component-active-color", + "@list-group-active-bg": "@component-active-bg", + "@list-group-active-border": "@list-group-active-bg", + "@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)", + "@list-group-disabled-color": "@gray-light", + "@list-group-disabled-bg": "@gray-lighter", + "@list-group-disabled-text-color": "@list-group-disabled-color", + "@list-group-link-color": "#555", + "@list-group-link-hover-color": "@list-group-link-color", + "@list-group-link-heading-color": "#333", + "@panel-bg": "#fff", + "@panel-body-padding": "15px", + "@panel-heading-padding": "10px 15px", + "@panel-footer-padding": "@panel-heading-padding", + "@panel-border-radius": "@border-radius-base", + "@panel-inner-border": "#ddd", + "@panel-footer-bg": "#f5f5f5", + "@panel-default-text": "@gray-dark", + "@panel-default-border": "#ddd", + "@panel-default-heading-bg": "#f5f5f5", + "@panel-primary-text": "#fff", + "@panel-primary-border": "@brand-primary", + "@panel-primary-heading-bg": "@brand-primary", + "@panel-success-text": "@state-success-text", + "@panel-success-border": "@state-success-border", + "@panel-success-heading-bg": "@state-success-bg", + "@panel-info-text": "@state-info-text", + "@panel-info-border": "@state-info-border", + "@panel-info-heading-bg": "@state-info-bg", + "@panel-warning-text": "@state-warning-text", + "@panel-warning-border": "@state-warning-border", + "@panel-warning-heading-bg": "@state-warning-bg", + "@panel-danger-text": "@state-danger-text", + "@panel-danger-border": "@state-danger-border", + "@panel-danger-heading-bg": "@state-danger-bg", + "@thumbnail-padding": "4px", + "@thumbnail-bg": "@body-bg", + "@thumbnail-border": "#ddd", + "@thumbnail-border-radius": "@border-radius-base", + "@thumbnail-caption-color": "@text-color", + "@thumbnail-caption-padding": "9px", + "@well-bg": "#f5f5f5", + "@well-border": "darken(@well-bg, 7%)", + "@badge-color": "#fff", + "@badge-link-hover-color": "#fff", + "@badge-bg": "@gray-light", + "@badge-active-color": "@link-color", + "@badge-active-bg": "#fff", + "@badge-font-weight": "bold", + "@badge-line-height": "1", + "@badge-border-radius": "10px", + "@breadcrumb-padding-vertical": "8px", + "@breadcrumb-padding-horizontal": "15px", + "@breadcrumb-bg": "#f5f5f5", + "@breadcrumb-color": "#ccc", + "@breadcrumb-active-color": "@gray-light", + "@breadcrumb-separator": "\"/\"", + "@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)", + "@carousel-control-color": "#fff", + "@carousel-control-width": "15%", + "@carousel-control-opacity": ".5", + "@carousel-control-font-size": "20px", + "@carousel-indicator-active-bg": "#fff", + "@carousel-indicator-border-color": "#fff", + "@carousel-caption-color": "#fff", + "@close-font-weight": "bold", + "@close-color": "#000", + "@close-text-shadow": "0 1px 0 #fff", + "@code-color": "#c7254e", + "@code-bg": "#f9f2f4", + "@kbd-color": "#fff", + "@kbd-bg": "#333", + "@pre-bg": "#f5f5f5", + "@pre-color": "@gray-dark", + "@pre-border-color": "#ccc", + "@pre-scrollable-max-height": "340px", + "@component-offset-horizontal": "180px", + "@text-muted": "@gray-light", + "@abbr-border-color": "@gray-light", + "@headings-small-color": "@gray-light", + "@blockquote-small-color": "@gray-light", + "@blockquote-font-size": "(@font-size-base * 1.25)", + "@blockquote-border-color": "@gray-lighter", + "@page-header-border-color": "@gray-lighter", + "@dl-horizontal-offset": "@component-offset-horizontal", + "@hr-border": "@gray-lighter" + }, + "css": [ + "print.less", + "type.less", + "code.less", + "grid.less", + "tables.less", + "forms.less", + "buttons.less", + "responsive-utilities.less", + "button-groups.less", + "input-groups.less", + "labels.less", + "dropdowns.less", + "modals.less" + ], + "js": [ + "alert.js", + "button.js", + "carousel.js", + "dropdown.js", + "modal.js", + "tooltip.js", + "popover.js", + "tab.js", + "affix.js", + "collapse.js", + "scrollspy.js", + "transition.js" + ], + "customizerUrl": "http://getbootstrap.com/customize/?id=c359f3d5455d568ef741" +} \ No newline at end of file diff --git a/cgi-bin/WagonDB/static/css/bootstrap-theme.css b/cgi-bin/WagonDB/static/css/bootstrap-theme.css new file mode 100644 index 0000000..f3f644f --- /dev/null +++ b/cgi-bin/WagonDB/static/css/bootstrap-theme.css @@ -0,0 +1,479 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + text-shadow: 0 1px 0 #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-color: #e8e8e8; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-color: #2e6da4; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} diff --git a/cgi-bin/WagonDB/static/css/bootstrap-theme.min.css b/cgi-bin/WagonDB/static/css/bootstrap-theme.min.css new file mode 100644 index 0000000..a5de857 --- /dev/null +++ b/cgi-bin/WagonDB/static/css/bootstrap-theme.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/cgi-bin/WagonDB/static/css/bootstrap.css b/cgi-bin/WagonDB/static/css/bootstrap.css new file mode 100644 index 0000000..e2d6448 --- /dev/null +++ b/cgi-bin/WagonDB/static/css/bootstrap.css @@ -0,0 +1,3489 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; +} +.form-control::-webkit-input-placeholder { + color: #999999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.form-group-sm .form-control, +select[multiple].form-group-sm .form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.form-group-lg .form-control, +select[multiple].form-group-lg .form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #337ab7; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/cgi-bin/WagonDB/static/css/bootstrap.min.css b/cgi-bin/WagonDB/static/css/bootstrap.min.css new file mode 100644 index 0000000..6d14b1b --- /dev/null +++ b/cgi-bin/WagonDB/static/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c359f3d5455d568ef741) + * Config saved to config.json and https://gist.github.com/c359f3d5455d568ef741 + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/cgi-bin/WagonDB/static/css/style.css b/cgi-bin/WagonDB/static/css/style.css new file mode 100644 index 0000000..5ad9224 --- /dev/null +++ b/cgi-bin/WagonDB/static/css/style.css @@ -0,0 +1,29 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.uHTR_body{ + background-color: #CCAA44 +} + + +.sub-card-form{ + background-color: rgb(199, 215, 190); +} +.sub-card{ + color: red; +} +.sub-card-submit{ + color: red; +} + +.Portage_table{ + border-spacing: 2px; + border-color: gray; + background-color: rgb(215, 255, 202); + margin-left: 25px; +} + diff --git a/cgi-bin/WagonDB/static/figures/ID_Resistor.png b/cgi-bin/WagonDB/static/figures/ID_Resistor.png new file mode 100755 index 0000000000000000000000000000000000000000..5da6f609be968e947fa3120d6298316302297844 GIT binary patch literal 19014 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/Bit_Error_Rate_Test_Data.csv b/cgi-bin/WagonDB/static/files/Bit_Error_Rate_Test_Data.csv new file mode 100644 index 0000000..809305f --- /dev/null +++ b/cgi-bin/WagonDB/static/files/Bit_Error_Rate_Test_Data.csv @@ -0,0 +1,321 @@ +Test ID,E Link,Midpoint,Eye Opening,Passed,Midpoint Errors +235,CLK1,331.0,195.0,True,0 +235,CLK0,274.0,203.0,True,0 +235,TRIG6,270.0,200.0,True,0 +235,TRIG5,248.0,199.0,True,0 +235,TRIG4,244.0,197.0,True,0 +235,TRIG3,300.0,201.0,True,0 +235,TRIG2,178.0,202.0,True,0 +235,TRIG1,182.0,202.0,True,0 +235,TRIG0,344.0,202.0,True,0 +239,CLK1,335.0,196.0,True,0 +239,CLK0,276.0,204.0,True,0 +239,TRIG6,271.0,199.0,True,0 +239,TRIG5,249.0,199.0,True,0 +239,TRIG4,245.0,197.0,True,0 +239,TRIG3,301.0,200.0,True,0 +239,TRIG2,179.0,203.0,True,0 +239,TRIG1,183.0,204.0,True,0 +239,TRIG0,345.0,202.0,True,0 +243,CLK0,300.0,200.0,True,0 +243,TRIG3,229.0,200.0,True,0 +243,TRIG2,197.0,202.0,True,0 +243,TRIG1,200.0,200.0,True,0 +243,TRIG0,254.0,421.0,False,94089219 +247,CLK0,300.0,200.0,True,0 +247,TRIG3,229.0,200.0,True,0 +247,TRIG2,197.0,202.0,True,0 +247,TRIG1,200.0,200.0,True,0 +247,TRIG0,363.0,202.0,True,0 +251,CLK0,296.0,199.0,True,0 +251,TRIG3,227.0,199.0,True,0 +251,TRIG2,194.0,201.0,True,0 +251,TRIG1,197.0,199.0,True,0 +251,TRIG0,360.0,202.0,True,0 +255,CLK0,297.0,198.0,True,0 +255,TRIG3,227.0,199.0,True,0 +255,TRIG2,195.0,200.0,True,0 +255,TRIG1,198.0,198.0,True,0 +255,TRIG0,361.0,202.0,True,0 +259,CLK0,300.0,195.0,True,0 +259,TRIG3,229.0,200.0,True,0 +259,TRIG2,198.0,201.0,True,0 +259,TRIG1,200.0,199.0,True,0 +259,TRIG0,364.0,202.0,True,0 +263,CLK0,240.0,202.0,True,0 +263,CLK1,270.0,192.0,True,0 +263,TRIG4,219.0,0.0,False,238897915 +263,TRIG3,199.0,298.0,True,0 +263,TRIG2,339.0,202.0,True,0 +263,TRIG1,264.0,429.0,False,94975955 +263,TRIG0,323.0,199.0,True,0 +268,CLK1,266.0,193.0,True,0 +268,CLK0,240.0,201.0,True,0 +268,TRIG6,193.0,202.0,True,0 +268,TRIG5,186.0,200.0,True,0 +268,TRIG4,176.0,198.0,True,0 +268,TRIG3,250.0,203.0,True,0 +268,TRIG2,338.0,202.0,True,0 +268,TRIG1,264.0,428.0,False,93729188 +268,TRIG0,324.0,199.0,True,0 +269,CLK1,266.0,189.0,True,0 +269,CLK0,240.0,202.0,True,0 +269,TRIG6,193.0,202.0,True,0 +269,TRIG5,186.0,200.0,True,0 +269,TRIG4,176.0,198.0,True,0 +269,TRIG3,249.0,203.0,True,0 +269,TRIG2,338.0,202.0,True,0 +269,TRIG1,261.0,434.0,False,93709556 +269,TRIG0,324.0,199.0,True,0 +271,CLK1,265.0,186.0,True,0 +271,CLK0,240.0,202.0,True,0 +271,TRIG6,193.0,202.0,True,0 +271,TRIG5,186.0,201.0,True,0 +271,TRIG4,176.0,198.0,True,0 +271,TRIG3,249.0,203.0,True,0 +271,TRIG2,338.0,202.0,True,0 +271,TRIG1,156.0,207.0,True,0 +271,TRIG0,324.0,199.0,True,0 +288,CLK0,281.0,201.0,True,0 +288,TRIG3,188.0,204.0,True,0 +288,TRIG2,173.0,203.0,True,0 +288,TRIG1,199.0,200.0,True,0 +288,TRIG0,151.0,201.0,True,0 +292,CLK0,278.0,201.0,True,0 +292,TRIG3,184.0,204.0,True,0 +292,TRIG2,170.0,203.0,True,0 +292,TRIG1,196.0,201.0,True,0 +292,TRIG0,148.0,200.0,True,0 +296,CLK0,276.0,202.0,True,0 +296,TRIG3,182.0,204.0,True,0 +296,TRIG2,168.0,203.0,True,0 +296,TRIG1,194.0,201.0,True,0 +296,TRIG0,145.0,200.0,True,0 +300,CLK0,281.0,201.0,True,0 +300,TRIG3,187.0,204.0,True,0 +300,TRIG2,172.0,203.0,True,0 +300,TRIG1,198.0,200.0,True,0 +300,TRIG0,150.0,200.0,True,0 +304,CLK1,259.0,198.0,True,0 +304,CLK0,235.0,200.0,True,0 +304,TRIG6,189.0,202.0,True,0 +304,TRIG5,184.0,200.0,True,0 +304,TRIG4,175.0,199.0,True,0 +304,TRIG3,247.0,204.0,True,0 +304,TRIG2,118.0,200.0,True,0 +304,TRIG1,155.0,206.0,True,0 +304,TRIG0,323.0,199.0,True,0 +308,CLK1,261.0,198.0,True,0 +308,CLK0,235.0,200.0,True,0 +308,TRIG6,194.0,202.0,True,0 +308,TRIG5,188.0,201.0,True,0 +308,TRIG4,178.0,199.0,True,0 +308,TRIG3,250.0,204.0,True,0 +308,TRIG2,115.0,200.0,True,0 +308,TRIG1,152.0,205.0,True,0 +308,TRIG0,321.0,200.0,True,0 +317,CLK0,240.0,201.0,True,0 +317,CLK1,273.0,198.0,True,0 +317,TRIG4,141.0,198.0,True,0 +317,TRIG3,213.0,204.0,True,0 +317,TRIG2,118.0,200.0,True,0 +317,TRIG1,238.0,205.0,True,0 +317,TRIG0,187.0,202.0,True,0 +348,CLK1,114.0,197.0,True,0 +348,CLK0,276.0,202.0,True,0 +348,TRIG6,57.0,0.0,False,239885093 +348,TRIG5,245.0,199.0,True,0 +348,TRIG4,241.0,197.0,True,0 +348,TRIG3,298.0,200.0,True,0 +348,TRIG2,183.0,203.0,True,0 +348,TRIG1,187.0,203.0,True,0 +348,TRIG0,131.0,202.0,True,0 +352,CLK1,113.0,197.0,True,0 +352,CLK0,275.0,202.0,True,0 +352,TRIG6,55.0,0.0,False,239854631 +352,TRIG5,245.0,199.0,True,0 +352,TRIG4,241.0,197.0,True,0 +352,TRIG3,298.0,200.0,True,0 +352,TRIG2,183.0,204.0,True,0 +352,TRIG1,186.0,203.0,True,0 +352,TRIG0,131.0,202.0,True,0 +354,CLK1,113.0,197.0,True,0 +354,CLK0,275.0,202.0,True,0 +354,TRIG6,267.0,199.0,True,0 +354,TRIG5,245.0,199.0,True,0 +354,TRIG4,6.0,0.0,False,15009233 +354,TRIG3,278.0,231.0,True,0 +354,TRIG2,183.0,203.0,True,0 +354,TRIG1,186.0,203.0,True,0 +354,TRIG0,131.0,202.0,True,0 +358,CLK1,113.0,198.0,True,0 +358,CLK0,276.0,202.0,True,0 +358,TRIG6,267.0,199.0,True,0 +358,TRIG5,245.0,199.0,True,0 +358,TRIG4,241.0,197.0,True,0 +358,TRIG3,298.0,200.0,True,0 +358,TRIG2,183.0,203.0,True,0 +358,TRIG1,187.0,203.0,True,0 +358,TRIG0,131.0,202.0,True,0 +362,CLK1,113.0,198.0,True,0 +362,CLK0,275.0,202.0,True,0 +362,TRIG6,267.0,199.0,True,0 +362,TRIG5,245.0,199.0,True,0 +362,TRIG4,241.0,197.0,True,0 +362,TRIG3,298.0,200.0,True,0 +362,TRIG2,183.0,203.0,True,0 +362,TRIG1,186.0,203.0,True,0 +362,TRIG0,131.0,202.0,True,0 +370,CLK1,113.0,197.0,True,0 +370,CLK0,275.0,202.0,True,0 +370,TRIG6,267.0,199.0,True,0 +370,TRIG5,245.0,199.0,True,0 +370,TRIG4,241.0,197.0,True,0 +370,TRIG3,298.0,200.0,True,0 +370,TRIG2,183.0,203.0,True,0 +370,TRIG1,186.0,203.0,True,0 +370,TRIG0,131.0,202.0,True,0 +374,CLK1,113.0,198.0,True,0 +374,CLK0,276.0,202.0,True,0 +374,TRIG6,267.0,199.0,True,0 +374,TRIG5,245.0,199.0,True,0 +374,TRIG4,241.0,197.0,True,0 +374,TRIG3,298.0,200.0,True,0 +374,TRIG2,183.0,203.0,True,0 +374,TRIG1,186.0,203.0,True,0 +374,TRIG0,131.0,202.0,True,0 +378,CLK1,113.0,197.0,True,0 +378,CLK0,276.0,202.0,True,0 +378,TRIG6,267.0,199.0,True,0 +378,TRIG5,245.0,199.0,True,0 +378,TRIG4,241.0,197.0,True,0 +378,TRIG3,298.0,200.0,True,0 +378,TRIG2,183.0,203.0,True,0 +378,TRIG1,187.0,203.0,True,0 +378,TRIG0,131.0,202.0,True,0 +382,CLK1,113.0,197.0,True,0 +382,CLK0,276.0,202.0,True,0 +382,TRIG6,267.0,199.0,True,0 +382,TRIG5,245.0,199.0,True,0 +382,TRIG4,241.0,197.0,True,0 +382,TRIG3,298.0,200.0,True,0 +382,TRIG2,183.0,203.0,True,0 +382,TRIG1,187.0,203.0,True,0 +382,TRIG0,131.0,202.0,True,0 +388,CLK1,113.0,197.0,True,0 +388,CLK0,276.0,202.0,True,0 +388,TRIG6,267.0,199.0,True,0 +388,TRIG5,245.0,199.0,True,0 +388,TRIG4,241.0,197.0,True,0 +388,TRIG3,298.0,200.0,True,0 +388,TRIG2,183.0,203.0,True,0 +388,TRIG1,187.0,203.0,True,0 +388,TRIG0,131.0,202.0,True,0 +396,CLK1,113.0,197.0,True,0 +396,CLK0,276.0,202.0,True,0 +396,TRIG6,267.0,199.0,True,0 +396,TRIG5,245.0,199.0,True,0 +396,TRIG4,241.0,197.0,True,0 +396,TRIG3,298.0,200.0,True,0 +396,TRIG2,183.0,203.0,True,0 +396,TRIG1,186.0,203.0,True,0 +396,TRIG0,131.0,202.0,True,0 +400,CLK1,113.0,197.0,True,0 +400,CLK0,275.0,202.0,True,0 +400,TRIG6,267.0,199.0,True,0 +400,TRIG5,245.0,199.0,True,0 +400,TRIG4,241.0,197.0,True,0 +400,TRIG3,298.0,200.0,True,0 +400,TRIG2,183.0,203.0,True,0 +400,TRIG1,186.0,203.0,True,0 +400,TRIG0,131.0,202.0,True,0 +404,CLK1,113.0,198.0,True,0 +404,CLK0,276.0,202.0,True,0 +404,TRIG6,267.0,199.0,True,0 +404,TRIG5,245.0,199.0,True,0 +404,TRIG4,241.0,197.0,True,0 +404,TRIG3,298.0,200.0,True,0 +404,TRIG2,183.0,203.0,True,0 +404,TRIG1,186.0,203.0,True,0 +404,TRIG0,131.0,202.0,True,0 +408,CLK1,113.0,198.0,True,0 +408,CLK0,276.0,202.0,True,0 +408,TRIG6,267.0,199.0,True,0 +408,TRIG5,245.0,199.0,True,0 +408,TRIG4,241.0,197.0,True,0 +408,TRIG3,298.0,200.0,True,0 +408,TRIG2,183.0,203.0,True,0 +408,TRIG1,187.0,203.0,True,0 +408,TRIG0,131.0,202.0,True,0 +413,CLK1,114.0,198.0,True,0 +413,CLK0,276.0,202.0,True,0 +413,TRIG6,267.0,199.0,True,0 +413,TRIG5,245.0,199.0,True,0 +413,TRIG4,241.0,197.0,True,0 +413,TRIG3,298.0,200.0,True,0 +413,TRIG2,183.0,203.0,True,0 +413,TRIG1,187.0,203.0,True,0 +413,TRIG0,131.0,202.0,True,0 +417,CLK1,113.0,197.0,True,0 +417,CLK0,276.0,202.0,True,0 +417,TRIG6,267.0,199.0,True,0 +417,TRIG5,245.0,199.0,True,0 +417,TRIG4,241.0,197.0,True,0 +417,TRIG3,298.0,200.0,True,0 +417,TRIG2,183.0,203.0,True,0 +417,TRIG1,187.0,203.0,True,0 +417,TRIG0,131.0,202.0,True,0 +421,CLK1,113.0,198.0,True,0 +421,CLK0,276.0,202.0,True,0 +421,TRIG6,267.0,199.0,True,0 +421,TRIG5,245.0,199.0,True,0 +421,TRIG4,241.0,197.0,True,0 +421,TRIG3,298.0,200.0,True,0 +421,TRIG2,183.0,203.0,True,0 +421,TRIG1,187.0,203.0,True,0 +421,TRIG0,131.0,202.0,True,0 +425,CLK1,114.0,197.0,True,0 +425,CLK0,276.0,202.0,True,0 +425,TRIG6,267.0,199.0,True,0 +425,TRIG5,245.0,199.0,True,0 +425,TRIG4,241.0,197.0,True,0 +425,TRIG3,298.0,200.0,True,0 +425,TRIG2,183.0,203.0,True,0 +425,TRIG1,187.0,203.0,True,0 +425,TRIG0,131.0,202.0,True,0 +429,CLK1,113.0,197.0,True,0 +429,CLK0,276.0,202.0,True,0 +429,TRIG6,267.0,199.0,True,0 +429,TRIG5,245.0,199.0,True,0 +429,TRIG4,241.0,197.0,True,0 +429,TRIG3,298.0,200.0,True,0 +429,TRIG2,183.0,203.0,True,0 +429,TRIG1,186.0,203.0,True,0 +429,TRIG0,131.0,202.0,True,0 +435,CLK1,114.0,198.0,True,0 +435,CLK0,276.0,202.0,True,0 +435,TRIG6,267.0,199.0,True,0 +435,TRIG5,245.0,199.0,True,0 +435,TRIG4,242.0,197.0,True,0 +435,TRIG3,298.0,200.0,True,0 +435,TRIG2,183.0,203.0,True,0 +435,TRIG1,187.0,203.0,True,0 +435,TRIG0,131.0,202.0,True,0 +439,CLK1,114.0,198.0,True,0 +439,CLK0,276.0,202.0,True,0 +439,TRIG6,267.0,199.0,True,0 +439,TRIG5,245.0,199.0,True,0 +439,TRIG4,241.0,197.0,True,0 +439,TRIG3,298.0,200.0,True,0 +439,TRIG2,183.0,203.0,True,0 +439,TRIG1,187.0,203.0,True,0 +439,TRIG0,131.0,202.0,True,0 +443,CLK1,113.0,197.0,True,0 +443,CLK0,276.0,202.0,True,0 +443,TRIG6,267.0,199.0,True,0 +443,TRIG5,244.0,199.0,True,0 +443,TRIG4,241.0,197.0,True,0 +443,TRIG3,298.0,200.0,True,0 +443,TRIG2,183.0,203.0,True,0 +443,TRIG1,186.0,203.0,True,0 +443,TRIG0,131.0,202.0,True,0 diff --git a/cgi-bin/WagonDB/static/files/Board.csv b/cgi-bin/WagonDB/static/files/Board.csv new file mode 100644 index 0000000..f587275 --- /dev/null +++ b/cgi-bin/WagonDB/static/files/Board.csv @@ -0,0 +1,16 @@ +Full ID,Board ID,Type ID +320WW20A1000005,19,WW20A1 +320WW20A1000004,20,WW20A1 +320WW10A1000005,21,WW10A1 +320WW10A1000007,22,WW10A1 +320WW10A1000008,23,WW10A1 +320WW10A1000004,24,WW10A1 +320WE20B1000004,25,WE20B1 +320WE20A1000004,26,WE20A1 +320WE20B1000006,27,WE20B1 +320WE10A1000004,28,WE10A1 +320WE10A1000008,29,WE10A1 +320WE10A1000007,30,WE10A1 +320WE10A1000005,31,WE10A1 +320WE20A1000005,32,WE20A1 +320WW30A3000005,33,WW30A3 diff --git a/cgi-bin/WagonDB/static/files/I2C_ReadWrite_Test_Data.csv b/cgi-bin/WagonDB/static/files/I2C_ReadWrite_Test_Data.csv new file mode 100644 index 0000000..8bb8cc1 --- /dev/null +++ b/cgi-bin/WagonDB/static/files/I2C_ReadWrite_Test_Data.csv @@ -0,0 +1,43 @@ +Test ID,Checks,Correct at Module 1,Correct at Module 2 +234,10000,10000,10000 +238,10000,10000,10000 +242,10000,10000,-1 +246,10000,10000,-1 +250,10000,10000,-1 +254,10000,10000,-1 +258,10000,10000,-1 +262,10000,10000,10000 +267,10000,10000,10000 +278,10000,10000,10000 +281,10000,10000,-1 +284,10000,10000,-1 +287,10000,10000,-1 +291,10000,10000,-1 +295,10000,10000,-1 +299,10000,10000,-1 +303,10000,10000,10000 +313,10000,10000,10000 +316,10000,10000,10000 +341,10000,10000,10000 +344,10000,10000,10000 +347,10000,10000,10000 +351,10000,10000,10000 +357,10000,10000,10000 +361,10000,10000,10000 +369,10000,10000,10000 +373,10000,10000,10000 +377,10000,10000,10000 +381,10000,10000,10000 +387,10000,10000,10000 +395,10000,10000,10000 +399,10000,10000,10000 +403,10000,10000,10000 +407,10000,10000,10000 +412,10000,10000,10000 +416,10000,10000,10000 +420,10000,10000,10000 +424,10000,10000,10000 +428,10000,10000,10000 +434,10000,10000,10000 +438,10000,10000,10000 +442,10000,10000,10000 diff --git a/cgi-bin/WagonDB/static/files/ID_Resistor_Test_Data.csv b/cgi-bin/WagonDB/static/files/ID_Resistor_Test_Data.csv new file mode 100644 index 0000000..e5dd4ab --- /dev/null +++ b/cgi-bin/WagonDB/static/files/ID_Resistor_Test_Data.csv @@ -0,0 +1,61 @@ +Test ID,Resistance +227,499.49750304222107 +229,499.49944019317627 +231,499.4983971118927 +233,499.50703978538513 +237,497.58464097976685 +241,496.843159198761 +245,496.8443512916565 +249,497.7552592754364 +253,497.22179770469666 +257,498.8810420036316 +261,497.28497862815857 +266,496.75479531288147 +273,496.2867498397827 +275,496.2889850139618 +277,497.27484583854675 +280,496.23623490333557 +283,496.2320625782013 +286,496.2363839149475 +290,496.71679735183716 +294,497.0960319042206 +298,497.836172580719 +302,497.37825989723206 +306,496.281236410141 +312,497.2861707210541 +315,497.2808063030243 +323,497.59015440940857 +325,497.59596586227417 +328,497.5832998752594 +330,497.58225679397583 +334,497.58613109588623 +336,497.5926876068115 +338,497.60326743125916 +340,497.6096749305725 +343,497.6069927215576 +346,497.61220812797546 +350,497.6320266723633 +356,497.6119101047516 +360,497.6138472557068 +364,497.6184666156769 +366,497.6172745227814 +368,497.6236820220947 +372,497.6186156272888 +376,497.6236820220947 +380,497.6172745227814 +384,497.60952591896057 +386,497.60445952415466 +390,497.6186156272888 +392,497.60937690734863 +394,497.6092278957367 +398,497.6154863834381 +402,497.6099729537964 +406,497.6041615009308 +411,497.6123571395874 +415,497.6101219654083 +419,497.61325120925903 +423,497.61369824409485 +427,497.60475754737854 +433,497.6111650466919 +437,497.610867023468 +441,497.60475754737854 diff --git a/cgi-bin/WagonDB/static/files/People.csv b/cgi-bin/WagonDB/static/files/People.csv new file mode 100644 index 0000000..91d9839 --- /dev/null +++ b/cgi-bin/WagonDB/static/files/People.csv @@ -0,0 +1,11 @@ +Person ID,Person Name +1,Bryan +2,Garrett +3,Andrew +4,Josh +5,Garrett Schindler +6,Andrew K. +7,Bryan C. +8,The Garrett +9,Shardul +10,Billy diff --git a/cgi-bin/WagonDB/static/files/Resistance_Measurement.csv b/cgi-bin/WagonDB/static/files/Resistance_Measurement.csv new file mode 100644 index 0000000..e4cb99e --- /dev/null +++ b/cgi-bin/WagonDB/static/files/Resistance_Measurement.csv @@ -0,0 +1,78 @@ +Test ID,RTD -> VMON_LVS Module 1,ECON_RE_Sb -> HGCROC_RE_Sb Module 1,PWR_EN -> PG_LDO Module 1,RTD -> HGCROC_RE_Sb Module 1,HGCROC_RE_Hb -> HGCROC_RE_Sb Module 1,PG_DCDC -> ECON_RE_Hb Module 1,RTD -> VMON_LVS Module 2,ECON_RE_Sb -> HGCROC_RE_Sb Module 2,PWR_EN -> PG_LDO Module 2,RTD -> HGCROC_RE_Sb Module 2,HGCROC_RE_Hb -> HGCROC_RE_Sb Module 2,PG_DCDC -> ECON_RE_Hb Module 2 +225,3.2463669776916504,20.38276195526123,2.557814121246338,28.863966464996338,1.2837350368499756,2.729475498199463,4.310131072998047,21.80272340774536,4.278063774108887,34.92027521133423,2.043694257736206,4.360437393188477 +226,3.247082233428955,20.382285118103027,2.558290958404541,28.867363929748535,1.2849271297454834,2.7306675910949707,4.311919212341309,21.80260419845581,4.279375076293945,34.92242097854614,2.04429030418396,4.361152648925781 +228,3.2449960708618164,20.383179187774658,2.557516098022461,28.868019580841064,1.284182071685791,2.729177474975586,4.311203956604004,21.80349826812744,4.278242588043213,34.919798374176025,2.0444393157958984,4.35870885848999 +230,3.2488107681274414,20.381629467010498,2.55662202835083,28.866946697235107,1.283884048461914,2.730250358581543,4.310667514801025,21.80427312850952,4.279792308807373,34.92087125778198,2.04429030418396,4.3624043464660645 +232,3.247678279876709,20.38395404815674,2.555727958679199,28.867602348327637,1.283884048461914,2.729356288909912,4.31215763092041,21.80635929107666,4.278361797332764,34.926414489746094,2.042800188064575,4.360973834991455 +236,3.3493638038635254,20.50679922103882,2.654552459716797,29.30539846420288,1.3658404350280762,2.846062183380127,5.109727382659912,22.7014422416687,5.056858062744141,38.18535804748535,2.5115907192230225,5.147278308868408 +240,3.3356547355651855,20.517289638519287,2.637922763824463,29.253840446472168,1.3330578804016113,2.80916690826416,-1,-1,-1,-1,-1,-1 +244,3.3437609672546387,20.525991916656494,2.6430487632751465,29.27786111831665,1.334846019744873,2.8180480003356934,-1,-1,-1,-1,-1,-1 +248,3.2032132148742676,20.37888765335083,2.515077590942383,28.72699499130249,1.2411177158355713,2.6797056198120117,-1,-1,-1,-1,-1,-1 +252,3.245115280151367,20.427405834197998,2.561211585998535,28.914809226989746,1.2674927711486816,2.7285218238830566,-1,-1,-1,-1,-1,-1 +256,3.2861828804016113,20.48414945602417,2.60317325592041,29.089033603668213,1.3014674186706543,2.7664899826049805,-1,-1,-1,-1,-1,-1 +260,3.893435001373291,20.96998691558838,3.5018324851989746,31.806468963623047,1.7152726650238037,3.488898277282715,6.00820779800415,23.178815841674805,5.810856819152832,40.94111919403076,2.7771294116973877,5.768895149230957 +264,3.896057605743408,20.973145961761475,3.5043954849243164,31.810283660888672,1.714080572128296,3.488004207611084,6.010234355926514,23.18626642227173,5.814492702484131,40.95005989074707,2.7798116207122803,5.772948265075684 +265,3.9129257202148438,20.98667621612549,3.4886598587036133,31.881272792816162,48.75645041465759,3.5446882247924805,5.908846855163574,23.15700054168701,5.673527717590332,40.564119815826416,2.8896331787109375,5.6594014167785645 +270,3.925204277038574,20.996689796447754,3.4926533699035645,31.923532485961914,50.94945430755615,3.5567879676818848,5.944788455963135,23.19389581680298,5.70911169052124,40.70580005645752,2.915710210800171,5.692780017852783 +272,3.4787654876708984,20.523905754089355,3.1173229217529297,30.156314373016357,1.4546513557434082,3.089606761932373,4.840254783630371,22.052109241485596,4.617154598236084,36.302924156188965,2.133995294570923,4.621982574462891 +274,3.4837722778320312,20.525455474853516,3.1444430351257324,30.20155429840088,1.4588236808776855,3.0944347381591797,4.860103130340576,22.069096565246582,4.6364665031433105,36.37737035751343,2.1404027938842773,4.642724990844727 +276,3.891468048095703,20.962655544281006,3.498077392578125,31.78703784942627,1.7130374908447266,3.48508358001709,5.986571311950684,23.161351680755615,5.794107913970947,40.85826873779297,2.7638673782348633,5.748450756072998 +279,3.8014650344848633,20.77394723892212,3.2609105110168457,31.10647201538086,1.538395881652832,3.3216476440429688,-1,-1,-1,-1,-1,-1 +282,3.8062334060668945,20.78002691268921,3.2683610916137695,31.129658222198486,1.5394389629364014,3.325223922729492,-1,-1,-1,-1,-1,-1 +285,3.809332847595215,20.781338214874268,3.269970417022705,31.13389015197754,1.539289951324463,3.3274292945861816,-1,-1,-1,-1,-1,-1 +289,3.48663330078125,20.47884464263916,2.9778480529785156,29.90776300430298,1.389533281326294,3.0167102813720703,-1,-1,-1,-1,-1,-1 +293,3.4748315811157227,20.395934581756592,2.9163360595703125,29.70808744430542,1.3424456119537354,2.971649169921875,-1,-1,-1,-1,-1,-1 +297,3.856062889099121,20.857155323028564,3.3319592475891113,31.355619430541992,1.5750527381896973,3.3611655235290527,-1,-1,-1,-1,-1,-1 +301,3.5367608070373535,20.62469720840454,3.2066702842712402,30.474543571472168,1.5522539615631104,3.1578540802001953,4.886150360107422,22.049546241760254,4.739940166473389,36.54593229293823,2.2289156913757324,4.697561264038086 +305,3.491044044494629,20.57582139968872,3.0570626258850098,30.163824558258057,1.4510750770568848,3.093242645263672,4.835724830627441,22.007286548614502,4.631221294403076,36.26471757888794,2.1345913410186768,4.6225786209106445 +307,3.5547614097595215,20.682930946350098,3.193795680999756,30.544817447662354,1.5610456466674805,3.162205219268799,4.885554313659668,22.005200386047363,4.760026931762695,36.52828931808472,2.2311508655548096,4.709184169769287 +309,3.55684757232666,20.684897899627686,3.193020820617676,30.543386936187744,1.5604496002197266,3.1598806381225586,4.888057708740234,22.006511688232422,4.758358001708984,36.53573989868164,2.229362726211548,4.71121072769165 +310,3.556191921234131,20.684242248535156,3.1925439834594727,30.546963214874268,1.5625357627868652,3.1626224517822266,4.887819290161133,22.00835943222046,4.76151704788208,36.54181957244873,2.230703830718994,4.709482192993164 +311,3.896176815032959,21.014869213104248,3.483712673187256,31.827330589294434,1.7111003398895264,3.477811813354492,5.956709384918213,23.09316396713257,5.781233310699463,40.73131084442139,2.758800983428955,5.730271339416504 +314,3.8974881172180176,21.01534605026245,3.484666347503662,31.831800937652588,1.7125904560089111,3.478884696960449,5.967140197753906,23.10359477996826,5.793094635009766,40.77845811843872,2.7655065059661865,5.743443965911865 +318,3.325521945953369,20.451903343200684,2.649962902069092,29.21605110168457,1.354813575744629,2.840697765350342,5.125939846038818,22.774577140808105,5.0476789474487305,38.28519582748413,2.5263428688049316,5.1631927490234375 +319,3.3254623413085938,20.452797412872314,2.647221088409424,29.21348810195923,1.3561546802520752,2.840697765350342,5.127370357513428,22.778689861297607,5.048394203186035,38.291990756988525,2.526193857192993,5.166888236999512 +320,3.323078155517578,20.451605319976807,2.6451945304870605,29.21384572982788,1.3568997383117676,2.839028835296631,5.127549171447754,22.77451753616333,5.048990249633789,38.28740119934082,2.528280019760132,5.163013935089111 +321,3.321409225463867,20.450472831726074,2.6465654373168945,29.21539545059204,1.3546645641326904,2.840697765350342,5.129218101501465,22.776782512664795,5.051016807556152,38.29604387283325,2.5294721126556396,5.166769027709961 +322,3.325819969177246,20.45154571533203,2.649247646331787,29.21241521835327,1.3560056686401367,2.842426300048828,5.128264427185059,22.777080535888672,5.048155784606934,38.29324245452881,2.527683973312378,5.166828632354736 +324,3.3246874809265137,20.451903343200684,2.6456117630004883,29.217123985290527,1.3527274131774902,2.8394460678100586,5.1274895668029785,22.779464721679688,5.051255226135254,38.29598426818848,2.527683973312378,5.166411399841309 +326,3.3248066902160645,20.449578762054443,2.64662504196167,29.2130708694458,1.353919506072998,2.8414130210876465,5.128264427185059,22.775113582611084,5.047023296356201,38.28144073486328,2.524852752685547,5.163431167602539 +327,3.3219456672668457,20.449280738830566,2.647280693054199,29.209494590759277,1.353621482849121,2.839207649230957,5.1250457763671875,22.773325443267822,5.046188831329346,38.27309608459473,2.524256706237793,5.15979528427124 +329,3.3229589462280273,20.44832706451416,2.6467442512512207,29.211223125457764,1.3525784015655518,2.8391480445861816,5.125820636749268,22.77296781539917,5.04612922668457,38.27357292175293,2.5275349617004395,5.1613450050354 +331,3.3220648765563965,20.450472831726074,2.6463866233825684,29.208481311798096,1.3534724712371826,2.8397440910339355,5.126059055328369,22.773921489715576,5.044758319854736,38.27911615371704,2.526193857192993,5.161762237548828 +332,3.323495388031006,20.450115203857422,2.645134925842285,29.210448265075684,1.3540685176849365,2.8375983238220215,5.126893520355225,22.77696132659912,5.047798156738281,38.28626871109009,2.5266408920288086,5.162417888641357 +333,3.3249855041503906,20.450711250305176,2.64817476272583,29.211997985839844,1.3540685176849365,2.8403401374816895,5.125105381011963,22.7738618850708,5.047976970672607,38.281261920928955,2.525448799133301,5.160272121429443 +335,3.3240914344787598,20.452439785003662,2.6476383209228516,29.211759567260742,1.3530254364013672,2.8409361839294434,5.12540340423584,22.774457931518555,5.046844482421875,38.27852010726929,2.5263428688049316,5.161702632904053 +337,3.325521945953369,20.4542875289917,2.6453733444213867,29.216885566711426,1.3519823551177979,2.841174602508545,5.128264427185059,22.777199745178223,5.048632621765137,38.29067945480347,2.523064613342285,5.165040493011475 +339,3.327786922454834,20.45351266860962,2.6478171348571777,29.218673706054688,1.353919506072998,2.8429031372070312,5.131065845489502,22.78059720993042,5.051910877227783,38.29985857009888,2.5281310081481934,5.16897439956665 +342,3.3248066902160645,20.45196294784546,2.64585018157959,29.21450138092041,1.3512372970581055,2.8403401374816895,5.126774311065674,22.777140140533447,5.047500133514404,38.28984498977661,2.527683973312378,5.161523818969727 +345,3.3226609230041504,20.449817180633545,2.6445984840393066,29.210269451141357,1.3534724712371826,2.837657928466797,5.122244358062744,22.77398109436035,5.044043064117432,38.271963596343994,2.522766590118408,5.159437656402588 +349,3.326594829559326,20.45387029647827,2.650320529937744,29.223144054412842,1.354217529296875,2.8439760208129883,5.131185054779053,22.78083562850952,5.0553083419799805,38.30915689468384,2.527683973312378,5.171418190002441 +353,3.3266544342041016,20.454585552215576,2.6497244834899902,29.222071170806885,1.3566017150878906,2.841353416442871,5.131363868713379,22.781789302825928,5.053579807281494,38.30397129058838,2.527981996536255,5.16664981842041 +355,3.322601318359375,20.452558994293213,2.6474595069885254,29.218077659606934,1.3551115989685059,2.840697765350342,5.134761333465576,22.78047800064087,5.053520202636719,38.30844163894653,2.527981996536255,5.169570446014404 +359,3.3257007598876953,20.45154571533203,2.647101879119873,29.215872287750244,1.353919506072998,2.8443336486816406,5.132555961608887,22.782623767852783,5.052447319030762,38.30903768539429,2.5284290313720703,5.1711201667785645 +363,3.325521945953369,20.454108715057373,2.6477575302124023,29.219746589660645,1.3558566570281982,2.8427839279174805,5.135595798492432,22.783339023590088,5.056262016296387,38.31923007965088,2.5288760662078857,5.1727294921875 +365,3.325164318084717,20.45261859893799,2.647995948791504,29.221534729003906,1.3568997383117676,2.8420090675354004,5.138397216796875,22.78614044189453,5.054891109466553,38.31988573074341,2.530217170715332,5.1721930503845215 +367,3.3246278762817383,20.45363187789917,2.64894962310791,29.21736240386963,1.3555586338043213,2.841651439666748,5.1313042640686035,22.78083562850952,5.053341388702393,38.30897808074951,2.5284290313720703,5.167245864868164 +371,3.324568271636963,20.453453063964844,2.6462674140930176,29.214799404144287,1.3534724712371826,2.8409361839294434,5.131781101226807,22.77994155883789,5.049645900726318,38.29538822174072,2.5260448455810547,5.164742469787598 +375,3.3240318298339844,20.452499389648438,2.647519111633301,29.216468334197998,1.3552606105804443,2.8439760208129883,5.133092403411865,22.78149127960205,5.053102970123291,38.3070707321167,2.5284290313720703,5.169272422790527 +379,3.322720527648926,20.45232057571411,2.6482343673706055,29.211819171905518,1.353919506072998,2.8405189514160156,5.127072334289551,22.77696132659912,5.047619342803955,38.28698396682739,2.524852752685547,5.1613450050354 +383,3.3268332481384277,20.453155040740967,2.6462674140930176,29.211699962615967,1.354515552520752,2.8403401374816895,5.131244659423828,22.77761697769165,5.051553249359131,38.299500942230225,2.52649188041687,5.16742467880249 +385,3.3216476440429688,20.453214645385742,2.646207809448242,29.21128273010254,1.3540685176849365,2.8394460678100586,5.131542682647705,22.777676582336426,5.050361156463623,38.29085826873779,2.5255978107452393,5.166947841644287 +389,3.323972225189209,20.45118808746338,2.644836902618408,29.212534427642822,1.3530254364013672,2.8395652770996094,5.127131938934326,22.777915000915527,5.050182342529297,38.286805152893066,2.5266408920288086,5.164921283721924 +391,3.3231377601623535,20.454227924346924,2.6466846466064453,29.212236404418945,1.350492238998413,2.8401613235473633,5.130350589752197,22.778332233428955,5.049288272857666,38.292646408081055,2.5263428688049316,5.164742469787598 +393,3.3231377601623535,20.451009273529053,2.647519111633301,29.21271324157715,1.3564527034759521,2.8402209281921387,5.130529403686523,22.777199745178223,5.049645900726318,38.28990459442139,2.5247037410736084,5.164861679077148 +397,3.323495388031006,20.452558994293213,2.646505832672119,29.21760082244873,1.3534724712371826,2.8401613235473633,5.1323771476745605,22.776246070861816,5.051612854003906,38.298964500427246,2.527683973312378,5.1670074462890625 +401,3.326237201690674,20.451903343200684,2.647995948791504,29.215693473815918,1.3519823551177979,2.8421878814697266,5.130350589752197,22.77839183807373,5.0498247146606445,38.29604387283325,2.5260448455810547,5.168139934539795 +405,3.3226609230041504,20.453333854675293,2.64817476272583,29.213905334472656,1.354813575744629,2.840876579284668,5.128741264343262,22.77696132659912,5.050897598266602,38.29216957092285,2.5250017642974854,5.165219306945801 +409,3.322720527648926,20.450294017791748,2.6443004608154297,29.212355613708496,1.3531744480133057,2.8400421142578125,5.126535892486572,22.77517318725586,5.047619342803955,38.28394412994385,2.524852752685547,5.163729190826416 +410,3.3246874809265137,20.453333854675293,2.647280693054199,29.209375381469727,1.3533234596252441,2.840578556060791,5.132436752319336,22.778213024139404,5.050599575042725,38.29753398895264,2.5269389152526855,5.168437957763672 +414,3.3243298530578613,20.45285701751709,2.6471614837646484,29.21473979949951,1.3531744480133057,2.839982509613037,5.133330821990967,22.781431674957275,5.054593086242676,38.30766677856445,2.525895833969116,5.168735980987549 +418,3.3252835273742676,20.451605319976807,2.64662504196167,29.21605110168457,1.356750726699829,2.8417110443115234,5.131006240844727,22.78059720993042,5.053699016571045,38.30474615097046,2.529621124267578,5.17040491104126 +422,3.3217668533325195,20.451247692108154,2.646505832672119,29.213309288024902,1.3530254364013672,2.839207649230957,5.134344100952148,22.782564163208008,5.054235458374023,38.3104681968689,2.531707286834717,5.171418190002441 +426,3.3233165740966797,20.45464515686035,2.647519111633301,29.217064380645752,1.3533234596252441,2.83968448638916,5.134642124176025,22.78059720993042,5.055069923400879,38.31517696380615,2.530217170715332,5.169808864593506 +430,3.3285021781921387,20.452141761779785,2.647221088409424,29.22213077545166,1.3557076454162598,2.842068672180176,5.136549472808838,22.787034511566162,5.058646202087402,38.322627544403076,2.5288760662078857,5.173981189727783 +431,3.3245086669921875,20.45416831970215,2.6463866233825684,29.217064380645752,1.354217529296875,2.8434395790100098,5.134701728820801,22.785067558288574,5.054950714111328,38.31809759140015,2.5291740894317627,5.17427921295166 +432,3.3255815505981445,20.451903343200684,2.6488900184631348,29.219210147857666,1.3557076454162598,2.841949462890625,5.134761333465576,22.7850079536438,5.056321620941162,38.31976652145386,2.5288760662078857,5.174100399017334 +436,3.3216476440429688,20.451486110687256,2.644956111907959,29.212474822998047,1.354515552520752,2.8401613235473633,5.134224891662598,22.78006076812744,5.051851272583008,38.30653429031372,2.529919147491455,5.16963005065918 +440,3.324449062347412,20.454108715057373,2.6482343673706055,29.219985008239746,1.353919506072998,2.842426300048828,5.1378607749938965,22.784411907196045,5.0553083419799805,38.32274675369263,2.5284290313720703,5.174994468688965 diff --git a/cgi-bin/WagonDB/static/files/Resistance_Measurement.png b/cgi-bin/WagonDB/static/files/Resistance_Measurement.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9cc2005539e22e12b33e2ec6572a56d6aa74ac GIT binary patch literal 22934 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

9|KhSF4KF6 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/goldy.pdf b/cgi-bin/WagonDB/static/files/goldy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6a9462047f6b21d3466540351bfc409555179096 GIT binary patch literal 33476 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/goldy2.png b/cgi-bin/WagonDB/static/files/goldy2.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1d206064b8b6906020c8ce822769891379fde7 GIT binary patch literal 17240 zcmV*DKy1H>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/us-cms.gif b/cgi-bin/WagonDB/static/files/us-cms.gif new file mode 100644 index 0000000000000000000000000000000000000000..47c369f0829eccce68ddaf512d9949e238be3371 GIT binary patch literal 12642 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 VL#wg}e!o8c)Uh-uQ (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.2 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.2' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('

Eo~y&S=Hd3XpE$z?%NbEBdw$0weDp3!{>II^f3-? zgdKtkL(Ty`Eieg~OaKl}zc9F9v^v+f7#KCZ<>li$1m*VLU)bhK2RrtSsxk?XXHVLer{Rtu1`ym;LPrtg4RPsAo+11@ zwSYCaz9N-tg_LOqgYre)G*1UW$Pd9IKu1K zF9i)6GIYvrTNH=TIW%67o1u^Z;LBqGYOK#N5>v+ISh&NAbPrv(8O2=@$TFk*Dn3ylxNdPJ@h@@eCN(uE%96zo@Wpx~q< zsEVg$WT5HehY#Q>X2SqGE72W<=b)#EZxLtzL5{#p8nvk5(n9_c4HPoP?MnVQj3~~7|L2+x|7#@2oBz8G j#sB}s|5r`U0*Bh`!uG+9?NYcSncAssp!Go0;l%$2j|W>R literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/Test.csv b/cgi-bin/WagonDB/static/files/Test.csv new file mode 100644 index 0000000..7456048 --- /dev/null +++ b/cgi-bin/WagonDB/static/files/Test.csv @@ -0,0 +1,220 @@ +Test ID,Test Type ID,Board ID,Person ID,Time,Successful,comments +225,1,19,1,2023-03-14 13:48:13,1,_ +226,1,19,1,2023-03-14 13:55:54,1,_ +227,2,19,1,2023-03-14 13:56:03,0,_ +228,1,19,1,2023-03-14 14:00:04,1,_ +229,2,19,1,2023-03-14 14:00:08,0,_ +230,1,19,1,2023-03-14 14:01:03,1,_ +231,2,19,1,2023-03-14 14:01:07,0,_ +232,1,19,1,2023-03-14 14:02:43,1,_ +233,2,19,1,2023-03-14 14:02:47,1,_ +234,3,19,1,2023-03-14 14:03:06,1,_ +235,4,19,1,2023-03-14 14:04:48,1,_ +236,1,20,1,2023-03-14 14:32:06,1,_ +237,2,20,1,2023-03-14 14:32:09,1,_ +238,3,20,1,2023-03-14 14:32:28,1,_ +239,4,20,1,2023-03-14 14:34:10,1,_ +240,1,21,1,2023-03-14 14:34:56,1,_ +241,2,21,1,2023-03-14 14:35:00,1,_ +242,3,21,1,2023-03-14 14:35:15,1,_ +243,4,21,1,2023-03-14 14:36:55,0,_ +244,1,21,1,2023-03-14 14:43:21,1,_ +245,2,21,1,2023-03-14 14:43:25,1,_ +246,3,21,1,2023-03-14 14:43:37,1,_ +247,4,21,1,2023-03-14 14:45:16,1,_ +248,1,22,1,2023-03-14 14:45:57,1,_ +249,2,22,1,2023-03-14 14:46:02,1,_ +250,3,22,1,2023-03-14 14:46:14,1,_ +251,4,22,1,2023-03-14 14:47:56,1,_ +252,1,23,1,2023-03-14 14:48:37,1,_ +253,2,23,1,2023-03-14 14:48:44,1,_ +254,3,23,1,2023-03-14 14:48:56,1,_ +255,4,23,1,2023-03-14 14:50:36,1,_ +256,1,24,1,2023-03-14 14:51:14,1,_ +257,2,24,1,2023-03-14 14:51:19,1,_ +258,3,24,1,2023-03-14 14:51:30,1,_ +259,4,24,1,2023-03-14 14:53:09,1,_ +260,1,25,1,2023-03-14 15:08:38,1,_ +261,2,25,1,2023-03-14 15:08:42,1,_ +262,3,25,1,2023-03-14 15:09:01,1,_ +263,4,25,1,2023-03-14 15:10:42,0,_ +264,1,25,1,2023-03-14 15:22:14,1,_ +265,1,26,1,2023-03-14 15:25:21,1,_ +266,2,26,1,2023-03-14 15:25:24,1,_ +267,3,26,1,2023-03-14 15:25:43,1,_ +268,4,26,1,2023-03-14 15:27:24,0,_ +269,4,26,1,2023-03-14 15:35:30,0,_ +270,1,26,1,2023-03-14 16:17:47,1,_ +271,4,26,1,2023-03-14 16:19:30,1,_ +272,1,27,1,2023-03-14 16:22:39,1,_ +273,2,27,1,2023-03-14 16:22:48,1,_ +274,1,27,1,2023-03-14 16:24:33,1,_ +275,2,27,1,2023-03-14 16:24:37,1,_ +276,1,25,1,2023-03-14 16:26:26,1,_ +277,2,25,1,2023-03-14 16:26:31,1,_ +278,3,25,1,2023-03-14 16:26:51,1,_ +279,1,28,1,2023-03-14 16:30:23,1,_ +280,2,28,1,2023-03-14 16:30:27,1,_ +281,3,28,1,2023-03-14 16:30:37,1,_ +282,1,28,1,2023-03-14 16:33:54,1,_ +283,2,28,1,2023-03-14 16:33:58,1,_ +284,3,28,1,2023-03-14 16:34:09,1,_ +285,1,28,1,2023-03-14 16:47:32,1,_ +286,2,28,1,2023-03-14 16:47:36,1,_ +287,3,28,1,2023-03-14 16:47:47,1,_ +288,4,28,1,2023-03-14 16:49:28,1,_ +289,1,29,1,2023-03-14 16:52:22,1,_ +290,2,29,1,2023-03-14 16:52:26,1,_ +291,3,29,1,2023-03-14 16:52:37,1,_ +292,4,29,1,2023-03-14 16:54:18,1,_ +293,1,30,1,2023-03-14 16:54:53,1,_ +294,2,30,1,2023-03-14 16:54:56,1,_ +295,3,30,1,2023-03-14 16:55:07,1,_ +296,4,30,1,2023-03-14 16:56:49,1,_ +297,1,31,1,2023-03-14 16:57:27,1,_ +298,2,31,1,2023-03-14 16:58:02,1,_ +299,3,31,1,2023-03-14 16:58:15,1,_ +300,4,31,1,2023-03-14 16:59:57,1,_ +301,1,32,1,2023-03-14 17:00:52,1,_ +302,2,32,1,2023-03-14 17:00:55,1,_ +303,3,32,1,2023-03-14 17:01:14,1,_ +304,4,32,1,2023-03-14 17:02:57,1,_ +305,1,27,1,2023-03-17 13:20:44,1,_ +306,2,27,1,2023-03-17 13:21:02,1,_ +307,1,32,1,2023-03-17 13:48:44,1,_ +308,4,32,1,2023-03-17 13:50:39,1,_ +309,1,32,1,2023-03-17 14:07:14,1,_ +310,1,32,1,2023-03-17 14:40:39,1,_ +311,1,25,1,2023-03-17 15:48:02,1,_ +312,2,25,1,2023-03-17 15:48:07,1,_ +313,3,25,1,2023-03-17 15:48:26,1,_ +314,1,25,1,2023-03-21 10:37:22,1,_ +315,2,25,1,2023-03-21 10:37:27,1,_ +316,3,25,1,2023-03-21 10:37:49,1,_ +317,4,25,1,2023-03-21 10:41:57,1,_ +318,1,20,1,2023-03-24 16:57:18,1,_ +319,1,20,1,2023-03-24 16:58:46,1,_ +320,1,20,1,2023-03-24 16:59:51,1,_ +321,1,20,1,2023-03-24 17:02:17,1,_ +322,1,20,1,2023-03-24 17:04:12,1,_ +323,2,20,1,2023-03-24 17:04:20,1,_ +324,1,20,1,2023-03-24 17:06:37,1,_ +325,2,20,1,2023-03-24 17:06:43,1,_ +326,1,20,1,2023-03-24 17:08:06,1,_ +327,1,20,1,2023-03-24 17:09:28,1,_ +328,2,20,1,2023-03-24 17:09:35,1,_ +329,1,20,1,2023-03-24 17:11:50,1,_ +330,2,20,1,2023-03-24 17:12:06,1,_ +331,1,20,1,2023-03-24 17:14:19,1,_ +332,1,20,1,2023-03-24 17:15:23,1,_ +333,1,20,1,2023-03-24 17:16:33,1,_ +334,2,20,1,2023-03-24 17:16:43,1,_ +335,1,20,1,2023-03-24 17:20:57,1,_ +336,2,20,1,2023-03-24 17:21:03,1,_ +337,1,20,1,2023-03-27 09:57:38,1,_ +338,2,20,1,2023-03-27 09:57:45,1,_ +339,1,20,1,2023-03-27 10:01:19,1,_ +340,2,20,1,2023-03-27 10:01:25,1,_ +341,3,20,1,2023-03-27 10:01:48,1,_ +342,1,20,1,2023-03-27 10:02:57,1,_ +343,2,20,1,2023-03-27 10:03:04,1,_ +344,3,20,1,2023-03-27 10:03:26,1,_ +345,1,20,1,2023-03-27 10:08:39,1,_ +346,2,20,1,2023-03-27 10:08:45,1,_ +347,3,20,1,2023-03-27 10:09:07,1,_ +348,4,20,1,2023-03-27 10:10:53,0,_ +349,1,20,1,2023-03-27 10:14:29,1,_ +350,2,20,1,2023-03-27 10:14:37,1,_ +351,3,20,1,2023-03-27 10:14:58,1,_ +352,4,20,1,2023-03-27 10:16:41,0,_ +353,1,20,1,2023-03-27 10:20:44,1,_ +354,4,20,1,2023-03-27 10:22:30,0,_ +355,1,20,1,2023-03-27 10:37:00,1,_ +356,2,20,1,2023-03-27 10:37:05,1,_ +357,3,20,1,2023-03-27 10:37:25,1,_ +358,4,20,1,2023-03-27 10:39:16,1,_ +359,1,20,1,2023-03-27 10:46:48,1,_ +360,2,20,1,2023-03-27 10:46:54,1,_ +361,3,20,1,2023-03-27 10:47:20,1,_ +362,4,20,1,2023-03-27 10:49:07,1,_ +363,1,20,1,2023-03-27 10:50:27,1,_ +364,2,20,1,2023-03-27 10:50:33,1,_ +365,1,20,1,2023-03-27 10:51:57,1,_ +366,2,20,1,2023-03-27 10:52:03,1,_ +367,1,20,1,2023-03-27 10:54:33,1,_ +368,2,20,1,2023-03-27 10:54:45,1,_ +369,3,20,1,2023-03-27 10:55:11,1,_ +370,4,20,1,2023-03-27 10:57:01,1,_ +371,1,20,1,2023-03-27 10:58:17,1,_ +372,2,20,1,2023-03-27 10:58:28,1,_ +373,3,20,1,2023-03-27 10:58:52,1,_ +374,4,20,1,2023-03-27 11:00:38,1,_ +375,1,20,1,2023-03-27 11:04:48,1,_ +376,2,20,1,2023-03-27 11:04:55,1,_ +377,3,20,1,2023-03-27 11:05:17,1,_ +378,4,20,1,2023-03-27 11:07:09,1,_ +379,1,20,1,2023-03-27 11:13:57,1,_ +380,2,20,1,2023-03-27 11:14:04,1,_ +381,3,20,1,2023-03-27 11:14:28,1,_ +382,4,20,1,2023-03-27 11:16:18,1,_ +383,1,20,1,2023-03-27 11:23:54,1,_ +384,2,20,1,2023-03-27 11:24:30,1,_ +385,1,20,1,2023-03-27 11:25:42,1,_ +386,2,20,1,2023-03-27 11:25:50,1,_ +387,3,20,1,2023-03-27 11:26:13,1,_ +388,4,20,1,2023-03-27 11:30:07,1,_ +389,1,20,1,2023-03-27 11:34:50,1,_ +390,2,20,1,2023-03-27 11:34:57,1,_ +391,1,20,1,2023-03-27 11:36:31,1,_ +392,2,20,1,2023-03-27 11:36:37,1,_ +393,1,20,1,2023-03-27 11:39:16,1,_ +394,2,20,1,2023-03-27 11:39:22,1,_ +395,3,20,1,2023-03-27 11:39:44,1,_ +396,4,20,1,2023-03-27 11:45:31,1,_ +397,1,20,1,2023-03-27 11:50:02,1,_ +398,2,20,1,2023-03-27 11:50:08,1,_ +399,3,20,1,2023-03-27 11:50:31,1,_ +400,4,20,1,2023-03-27 11:52:32,1,_ +401,1,20,1,2023-03-27 11:54:57,1,_ +402,2,20,1,2023-03-27 11:55:05,1,_ +403,3,20,1,2023-03-27 11:55:26,1,_ +404,4,20,1,2023-03-27 11:57:21,1,_ +405,1,20,1,2023-03-27 12:00:06,1,_ +406,2,20,1,2023-03-27 12:00:49,1,_ +407,3,20,1,2023-03-27 12:01:40,1,_ +408,4,20,1,2023-03-27 12:03:26,1,_ +409,1,20,1,2023-03-27 12:04:46,1,_ +410,1,20,1,2023-03-27 12:09:53,1,_ +411,2,20,1,2023-03-27 12:13:56,1,_ +412,3,20,1,2023-03-27 12:14:42,1,_ +413,4,20,1,2023-03-27 12:16:34,1,_ +414,1,20,1,2023-03-27 12:18:57,1,_ +415,2,20,1,2023-03-27 12:19:07,1,_ +416,3,20,1,2023-03-27 12:19:36,1,_ +417,4,20,1,2023-03-27 12:21:22,1,_ +418,1,20,1,2023-03-27 12:24:51,1,_ +419,2,20,1,2023-03-27 12:26:01,1,_ +420,3,20,1,2023-03-27 12:26:25,1,_ +421,4,20,1,2023-03-27 12:28:16,1,_ +422,1,20,1,2023-03-27 12:30:03,1,_ +423,2,20,1,2023-03-27 12:30:10,1,_ +424,3,20,1,2023-03-27 12:30:37,1,_ +425,4,20,1,2023-03-27 12:32:49,1,_ +426,1,20,1,2023-03-27 12:34:51,1,_ +427,2,20,1,2023-03-27 12:34:57,1,_ +428,3,20,1,2023-03-27 12:35:20,1,_ +429,4,20,1,2023-03-27 12:37:08,1,_ +430,1,20,1,2023-03-27 12:37:37,1,_ +431,1,20,1,2023-03-27 12:44:12,1,_ +432,1,20,1,2023-03-27 12:47:07,1,_ +433,2,20,1,2023-03-27 12:47:13,1,_ +434,3,20,1,2023-03-27 12:47:35,1,_ +435,4,20,1,2023-03-27 12:50:20,1,_ +436,1,20,1,2023-03-27 12:52:29,1,_ +437,2,20,1,2023-03-27 12:52:35,1,_ +438,3,20,1,2023-03-27 12:52:58,1,_ +439,4,20,1,2023-03-27 12:54:43,1,_ +440,1,20,1,2023-03-30 13:02:47,1,_ +441,2,20,1,2023-03-30 13:02:56,1,_ +442,3,20,1,2023-03-30 13:03:20,1,_ +443,4,20,1,2023-03-30 13:05:08,1,_ diff --git a/cgi-bin/WagonDB/static/files/TestsOverTime.png b/cgi-bin/WagonDB/static/files/TestsOverTime.png new file mode 100644 index 0000000000000000000000000000000000000000..32860151c8e72686ea81c250dd3bf0237083fd8d GIT binary patch literal 21845 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/Thumbs.db b/cgi-bin/WagonDB/static/files/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..74f140121d9558e43cae0c1daa13b2ec8768efe4 GIT binary patch literal 45568 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 literal 0 HcmV?d00001 diff --git a/cgi-bin/WagonDB/static/files/cmslogo.jpg b/cgi-bin/WagonDB/static/files/cmslogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a9ab9d997a889a6b60006df6b172bbc6031f577 GIT binary patch literal 16540 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