table js, media serving, video type relationship, tested composable inclusions
This commit is contained in:
parent
db895c86f8
commit
f2ffea6c8f
@ -5,6 +5,8 @@ basepath = os.path.dirname(os.path.realpath(__file__))
|
|||||||
DATA_DIR = os.path.join(basepath, "data")
|
DATA_DIR = os.path.join(basepath, "data")
|
||||||
STATIC_DATA_DIR = os.path.join(basepath, "data_static")
|
STATIC_DATA_DIR = os.path.join(basepath, "data_static")
|
||||||
|
|
||||||
|
MEDIA_DIR = os.path.join(basepath, "media")
|
||||||
|
|
||||||
TASKS_DIR = os.path.join(DATA_DIR, "tasks")
|
TASKS_DIR = os.path.join(DATA_DIR, "tasks")
|
||||||
TASKS_IN_DIR = os.path.join(TASKS_DIR, "in")
|
TASKS_IN_DIR = os.path.join(TASKS_DIR, "in")
|
||||||
TASKS_BUF_DIR = os.path.join(TASKS_DIR, "buf")
|
TASKS_BUF_DIR = os.path.join(TASKS_DIR, "buf")
|
||||||
@ -19,5 +21,5 @@ TEMPLATES_FOLDER = os.path.join(basepath, "webapp", "templates")
|
|||||||
STATIC_FOLDER = os.path.join(basepath, "webapp", "static")
|
STATIC_FOLDER = os.path.join(basepath, "webapp", "static")
|
||||||
|
|
||||||
MAKEDIRS = [
|
MAKEDIRS = [
|
||||||
DATA_DIR, STATIC_DATA_DIR, TASKS_DIR, TASKS_IN_DIR, TASKS_PROC_DIR, TASKS_BUF_DIR,
|
DATA_DIR, STATIC_DATA_DIR, MEDIA_DIR, TASKS_DIR, TASKS_IN_DIR, TASKS_PROC_DIR, TASKS_BUF_DIR,
|
||||||
]
|
]
|
||||||
|
@ -43,14 +43,17 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text], textarea {
|
input, textarea {
|
||||||
width: 100%;
|
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
font-family: Open Sans, Arial sans-serif;
|
font-family: Open Sans, Arial sans-serif;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.full-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
height: 5em;
|
height: 5em;
|
||||||
}
|
}
|
||||||
@ -144,8 +147,14 @@
|
|||||||
.vertical-padding {
|
.vertical-padding {
|
||||||
height: 80px;
|
height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.video-inline {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" type="text/css" href="{{ url_for('oshipka_bp.static', filename='css/chosen.css') }}">
|
<link rel="stylesheet" type="text/css" href="{{ url_for('oshipka_bp.static', filename='css/chosen.css') }}">
|
||||||
|
<link rel="stylesheet" type="text/css" href="{{ url_for('oshipka_bp.static', filename='css/lightbox.css') }}">
|
||||||
|
<link rel="stylesheet" type="text/css" href="{{ url_for('oshipka_bp.static', filename='css/datatables.css') }}">
|
||||||
{% block style %}{% endblock %}
|
{% block style %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -176,8 +185,25 @@
|
|||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/jquery.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/jquery.js') }}"></script>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/chosen.jquery.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/lightbox.js') }}"></script>
|
||||||
|
<script src="{{ url_for('oshipka_bp.static', filename='js/chosen.js') }}"></script>
|
||||||
|
<script src="{{ url_for('oshipka_bp.static', filename='js/datatables.js') }}"></script>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/oshipka.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/oshipka.js') }}"></script>
|
||||||
{% block script %}{% endblock %}
|
{% block script %}
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$("select").chosen({
|
||||||
|
inherit_select_classes: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
lightbox.option({
|
||||||
|
'resizeDuration': 100,
|
||||||
|
'fadeDuration': 100,
|
||||||
|
'imageFadeDuration': 100,
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.data-table').DataTable();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -21,3 +21,4 @@ oshipka_bp = Blueprint('oshipka_bp', __name__,
|
|||||||
)
|
)
|
||||||
|
|
||||||
import oshipka.webapp.async_routes
|
import oshipka.webapp.async_routes
|
||||||
|
import oshipka.webapp.default_routes
|
||||||
|
9
oshipka/webapp/default_routes.py
Normal file
9
oshipka/webapp/default_routes.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from flask import send_from_directory
|
||||||
|
|
||||||
|
from oshipka.webapp import oshipka_bp
|
||||||
|
from config import MEDIA_DIR
|
||||||
|
|
||||||
|
|
||||||
|
@oshipka_bp.route('/media/<path:filepath>')
|
||||||
|
def get_media(filepath):
|
||||||
|
return send_from_directory(MEDIA_DIR, filepath)
|
448
oshipka/webapp/static/css/datatables.css
Normal file
448
oshipka/webapp/static/css/datatables.css
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
/*
|
||||||
|
* Table styles
|
||||||
|
*/
|
||||||
|
table.dataTable {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
clear: both;
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 0;
|
||||||
|
/*
|
||||||
|
* Header and footer styles
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Body styles
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
table.dataTable thead th,
|
||||||
|
table.dataTable tfoot th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
table.dataTable thead th,
|
||||||
|
table.dataTable thead td {
|
||||||
|
padding: 10px 18px;
|
||||||
|
border-bottom: 1px solid #111;
|
||||||
|
}
|
||||||
|
table.dataTable thead th:active,
|
||||||
|
table.dataTable thead td:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
table.dataTable tfoot th,
|
||||||
|
table.dataTable tfoot td {
|
||||||
|
padding: 10px 18px 6px 18px;
|
||||||
|
border-top: 1px solid #111;
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting,
|
||||||
|
table.dataTable thead .sorting_asc,
|
||||||
|
table.dataTable thead .sorting_desc,
|
||||||
|
table.dataTable thead .sorting_asc_disabled,
|
||||||
|
table.dataTable thead .sorting_desc_disabled {
|
||||||
|
cursor: pointer;
|
||||||
|
*cursor: hand;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center right;
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting {
|
||||||
|
background-image: url("../images/sort_both.png");
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting_asc {
|
||||||
|
background-image: url("../images/sort_asc.png");
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting_desc {
|
||||||
|
background-image: url("../images/sort_desc.png");
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting_asc_disabled {
|
||||||
|
background-image: url("../images/sort_asc_disabled.png");
|
||||||
|
}
|
||||||
|
table.dataTable thead .sorting_desc_disabled {
|
||||||
|
background-image: url("../images/sort_desc_disabled.png");
|
||||||
|
}
|
||||||
|
table.dataTable tbody tr {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
table.dataTable tbody tr.selected {
|
||||||
|
background-color: #B0BED9;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th,
|
||||||
|
table.dataTable tbody td {
|
||||||
|
padding: 8px 10px;
|
||||||
|
}
|
||||||
|
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
table.dataTable.row-border tbody tr:first-child th,
|
||||||
|
table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
|
||||||
|
table.dataTable.display tbody tr:first-child td {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border tbody tr th:first-child,
|
||||||
|
table.dataTable.cell-border tbody tr td:first-child {
|
||||||
|
border-left: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border tbody tr:first-child th,
|
||||||
|
table.dataTable.cell-border tbody tr:first-child td {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
|
||||||
|
background-color: #acbad4;
|
||||||
|
}
|
||||||
|
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
|
||||||
|
background-color: #f6f6f6;
|
||||||
|
}
|
||||||
|
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
|
||||||
|
background-color: #aab7d1;
|
||||||
|
}
|
||||||
|
table.dataTable.order-column tbody tr > .sorting_1,
|
||||||
|
table.dataTable.order-column tbody tr > .sorting_2,
|
||||||
|
table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
|
||||||
|
table.dataTable.display tbody tr > .sorting_2,
|
||||||
|
table.dataTable.display tbody tr > .sorting_3 {
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
table.dataTable.order-column tbody tr.selected > .sorting_1,
|
||||||
|
table.dataTable.order-column tbody tr.selected > .sorting_2,
|
||||||
|
table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
|
||||||
|
table.dataTable.display tbody tr.selected > .sorting_2,
|
||||||
|
table.dataTable.display tbody tr.selected > .sorting_3 {
|
||||||
|
background-color: #acbad5;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
|
||||||
|
background-color: whitesmoke;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
|
||||||
|
background-color: #a6b4cd;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
|
||||||
|
background-color: #a8b5cf;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
|
||||||
|
background-color: #a9b7d1;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
|
||||||
|
background-color: #fefefe;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
|
||||||
|
background-color: #acbad5;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
|
||||||
|
background-color: #aebcd6;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
|
||||||
|
background-color: #afbdd8;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
|
||||||
|
background-color: #eaeaea;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
|
||||||
|
background-color: #ececec;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
|
||||||
|
background-color: #efefef;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
|
||||||
|
background-color: #a2aec7;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
|
||||||
|
background-color: #a3b0c9;
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
|
||||||
|
background-color: #a5b2cb;
|
||||||
|
}
|
||||||
|
table.dataTable.no-footer {
|
||||||
|
border-bottom: 1px solid #111;
|
||||||
|
}
|
||||||
|
table.dataTable.nowrap th, table.dataTable.nowrap td {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable.compact thead th,
|
||||||
|
table.dataTable.compact thead td {
|
||||||
|
padding: 4px 17px;
|
||||||
|
}
|
||||||
|
table.dataTable.compact tfoot th,
|
||||||
|
table.dataTable.compact tfoot td {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
table.dataTable.compact tbody th,
|
||||||
|
table.dataTable.compact tbody td {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-left,
|
||||||
|
table.dataTable td.dt-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-center,
|
||||||
|
table.dataTable td.dt-center,
|
||||||
|
table.dataTable td.dataTables_empty {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-right,
|
||||||
|
table.dataTable td.dt-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-justify,
|
||||||
|
table.dataTable td.dt-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-nowrap,
|
||||||
|
table.dataTable td.dt-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-left,
|
||||||
|
table.dataTable thead td.dt-head-left,
|
||||||
|
table.dataTable tfoot th.dt-head-left,
|
||||||
|
table.dataTable tfoot td.dt-head-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-center,
|
||||||
|
table.dataTable thead td.dt-head-center,
|
||||||
|
table.dataTable tfoot th.dt-head-center,
|
||||||
|
table.dataTable tfoot td.dt-head-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-right,
|
||||||
|
table.dataTable thead td.dt-head-right,
|
||||||
|
table.dataTable tfoot th.dt-head-right,
|
||||||
|
table.dataTable tfoot td.dt-head-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-justify,
|
||||||
|
table.dataTable thead td.dt-head-justify,
|
||||||
|
table.dataTable tfoot th.dt-head-justify,
|
||||||
|
table.dataTable tfoot td.dt-head-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-nowrap,
|
||||||
|
table.dataTable thead td.dt-head-nowrap,
|
||||||
|
table.dataTable tfoot th.dt-head-nowrap,
|
||||||
|
table.dataTable tfoot td.dt-head-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-left,
|
||||||
|
table.dataTable tbody td.dt-body-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-center,
|
||||||
|
table.dataTable tbody td.dt-body-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-right,
|
||||||
|
table.dataTable tbody td.dt-body-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-justify,
|
||||||
|
table.dataTable tbody td.dt-body-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-nowrap,
|
||||||
|
table.dataTable tbody td.dt-body-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.dataTable,
|
||||||
|
table.dataTable th,
|
||||||
|
table.dataTable td {
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Control feature layout
|
||||||
|
*/
|
||||||
|
.dataTables_wrapper {
|
||||||
|
position: relative;
|
||||||
|
clear: both;
|
||||||
|
*zoom: 1;
|
||||||
|
zoom: 1;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_length {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_filter {
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_filter input {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_info {
|
||||||
|
clear: both;
|
||||||
|
float: left;
|
||||||
|
padding-top: 0.755em;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate {
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
padding-top: 0.25em;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .paginate_button {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 1.5em;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
margin-left: 2px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none !important;
|
||||||
|
cursor: pointer;
|
||||||
|
*cursor: hand;
|
||||||
|
color: #333 !important;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
|
||||||
|
color: #333 !important;
|
||||||
|
border: 1px solid #979797;
|
||||||
|
background-color: white;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
|
||||||
|
/* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
|
||||||
|
/* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
|
||||||
|
/* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
|
||||||
|
/* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
|
||||||
|
/* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
|
||||||
|
/* W3C */
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
|
||||||
|
cursor: default;
|
||||||
|
color: #666 !important;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
|
||||||
|
color: white !important;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background-color: #585858;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
|
||||||
|
/* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
|
||||||
|
/* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, #585858 0%, #111 100%);
|
||||||
|
/* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, #585858 0%, #111 100%);
|
||||||
|
/* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, #585858 0%, #111 100%);
|
||||||
|
/* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, #585858 0%, #111 100%);
|
||||||
|
/* W3C */
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .paginate_button:active {
|
||||||
|
outline: none;
|
||||||
|
background-color: #2b2b2b;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
|
||||||
|
/* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
|
||||||
|
/* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
|
||||||
|
/* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
|
||||||
|
/* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
|
||||||
|
/* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
|
||||||
|
/* W3C */
|
||||||
|
box-shadow: inset 0 0 3px #111;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate .ellipsis {
|
||||||
|
padding: 0 1em;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_processing {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 100%;
|
||||||
|
height: 40px;
|
||||||
|
margin-left: -50%;
|
||||||
|
margin-top: -25px;
|
||||||
|
padding-top: 20px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.2em;
|
||||||
|
background-color: white;
|
||||||
|
background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
|
||||||
|
background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
|
||||||
|
background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
|
||||||
|
background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
|
||||||
|
background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
|
||||||
|
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_length,
|
||||||
|
.dataTables_wrapper .dataTables_filter,
|
||||||
|
.dataTables_wrapper .dataTables_info,
|
||||||
|
.dataTables_wrapper .dataTables_processing,
|
||||||
|
.dataTables_wrapper .dataTables_paginate {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_scroll {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
|
||||||
|
*margin-top: -1px;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,
|
||||||
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,
|
||||||
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper.no-footer .dataTables_scrollBody {
|
||||||
|
border-bottom: 1px solid #111;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,
|
||||||
|
.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper:after {
|
||||||
|
visibility: hidden;
|
||||||
|
display: block;
|
||||||
|
content: "";
|
||||||
|
clear: both;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.dataTables_wrapper .dataTables_info,
|
||||||
|
.dataTables_wrapper .dataTables_paginate {
|
||||||
|
float: none;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_paginate {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 640px) {
|
||||||
|
.dataTables_wrapper .dataTables_length,
|
||||||
|
.dataTables_wrapper .dataTables_filter {
|
||||||
|
float: none;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper .dataTables_filter {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
BIN
oshipka/webapp/static/images/sort_asc.png
Normal file
BIN
oshipka/webapp/static/images/sort_asc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 B |
BIN
oshipka/webapp/static/images/sort_both.png
Normal file
BIN
oshipka/webapp/static/images/sort_both.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 201 B |
BIN
oshipka/webapp/static/images/sort_desc.png
Normal file
BIN
oshipka/webapp/static/images/sort_desc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 158 B |
15354
oshipka/webapp/static/js/datatables.js
Normal file
15354
oshipka/webapp/static/js/datatables.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -12,8 +12,4 @@ function start_async_task(task_name, data, ondata) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
$("select").chosen({
|
|
||||||
inherit_select_classes: true,
|
|
||||||
});
|
|
@ -3,7 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>Delete {{ model_view.model_name }}:{{ instance.id }} ?</h1>
|
<h1>Delete {{ model_view.model_name }}:{{ instance.id }} ?</h1>
|
||||||
<form action="{{ url_for('delete_' + model_view.model_name, uuid=instance.uuid) }}" method="post">
|
<form action="{{ url_for('delete_' + model_view.model_name, uuid=instance.uuid) }}" method="post">
|
||||||
<input type="hidden" value="{{ request.args.next or url_for('list_' + model_view.model_name) }}" name="_next"/>
|
<input type="hidden" value="{{ request.args._next or url_for('list_' + model_view.model_name) }}" name="_next"/>
|
||||||
<input type="submit"/>
|
<input type="submit"/>
|
||||||
</form>
|
</form>
|
||||||
<a href="{{ request.args.next }}">Back</a>
|
<a href="{{ request.args.next }}">Back</a>
|
||||||
|
@ -173,7 +173,7 @@
|
|||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/jquery.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/jquery.js') }}"></script>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/chosen.jquery.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/chosen.js') }}"></script>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/lightbox.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/lightbox.js') }}"></script>
|
||||||
<script src="{{ url_for('oshipka_bp.static', filename='js/oshipka.js') }}"></script>
|
<script src="{{ url_for('oshipka_bp.static', filename='js/oshipka.js') }}"></script>
|
||||||
{% block script %}{% endblock %}
|
{% block script %}{% endblock %}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<form action="{{ url_for('create_[[ name|camel_to_snake ]]') }}" method="post">
|
<form action="{{ url_for('create_[[ name|camel_to_snake ]]') }}" method="post">
|
||||||
<input type="hidden" name="_next" value="{{ url_for('list_[[ name|camel_to_snake ]]') }}"/>
|
<input type="hidden" name="_next" value="{{ _next or request.args.get('_next') or url_for('list_[[ name|camel_to_snake ]]') }}"/>
|
||||||
[%- for column in columns %]
|
[%- for column in columns %]
|
||||||
<label for="input-[[ name|camel_to_snake ]]-[[ column.name ]]">[[ column.name ]]</label>:
|
<label for="input-[[ name|camel_to_snake ]]-[[ column.name ]]">[[ column.name ]]</label>:
|
||||||
[%- if column.type in ['relationship'] %]
|
[%- if column.type in ['relationship'] %]
|
||||||
@ -7,9 +7,13 @@
|
|||||||
name="[[ column.name ]]_id">
|
name="[[ column.name ]]_id">
|
||||||
<option selected="selected">Choose...</option>
|
<option selected="selected">Choose...</option>
|
||||||
{%- for sub_instance in model_views.[[ column.name ]].model.query.all() %}
|
{%- for sub_instance in model_views.[[ column.name ]].model.query.all() %}
|
||||||
<option value="{{ sub_instance.id }}">{{ sub_instance.name }}</option>
|
<option value="{{ sub_instance.id }}" {% if instance and instance.id == sub_instance.id %}selected="selected"{% endif %}>{{ sub_instance.name }}</option>
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
[%- elif column.type in ['number', 'int', 'integer', ] %]
|
||||||
|
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
||||||
|
type="number" name="[[ column.name ]]"
|
||||||
|
/>
|
||||||
[%- else %]
|
[%- else %]
|
||||||
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
||||||
type="text" name="[[ column.name ]]" autocomplete="off"
|
type="text" name="[[ column.name ]]" autocomplete="off"
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
[%- for column in columns %]
|
[%- for column in columns %]
|
||||||
[%- if column.type in ['relationship'] %]
|
{% if "[[ column.name ]]" not in skip_list %}
|
||||||
<li><strong>[[ column.name ]]</strong>: {{ instance.[[ column.name ]] }}</li>
|
[%- if column.type in ['video'] %]
|
||||||
|
<video src="{{ url_for('oshipka_bp.get_media', filepath=instance.[[ column.name ]]) }}" controls class="video-inline" id="display-[[ name|camel_to_snake ]]-[[ column.name ]]">
|
||||||
|
<source src="{{ url_for('oshipka_bp.get_media', filepath=instance.[[ column.name ]]) }}" type="video/mp4">
|
||||||
|
<source src="{{ url_for('oshipka_bp.get_media', filepath=instance.[[ column.name ]]) }}" type="video/webm">
|
||||||
|
</video>
|
||||||
|
[%- elif column.type in ['relationship'] %]
|
||||||
|
<li id="display-[[ name|camel_to_snake ]]-[[ column.name ]]"><strong>[[ column.name ]]</strong>: {{ instance.[[ column.name ]] }}</li>
|
||||||
[%- else %]
|
[%- else %]
|
||||||
<li><strong>[[ column.name ]]</strong>: {{ instance.[[ column.name ]] }}</li>
|
<li id="display-[[ name|camel_to_snake ]]-[[ column.name ]]"><strong>[[ column.name ]]</strong>: {{ instance.[[ column.name ]] }}</li>
|
||||||
[%- endif %]
|
[%- endif %]
|
||||||
|
{% endif %}
|
||||||
[%- endfor %]
|
[%- endfor %]
|
@ -4,8 +4,8 @@
|
|||||||
{% include "[[ name|camel_to_snake ]]/_title.html" %}</a>
|
{% include "[[ name|camel_to_snake ]]/_title.html" %}</a>
|
||||||
|
|
|
|
||||||
[
|
[
|
||||||
<a href="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id) }}">e</a> |
|
<a href="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id, _next=request.path) }}">e</a> |
|
||||||
<a href="{{ url_for('delete_[[ name|camel_to_snake ]]', uuid=instance.id) }}">x</a>
|
<a href="{{ url_for('delete_[[ name|camel_to_snake ]]', uuid=instance.id, _next=request.path) }}">x</a>
|
||||||
]
|
]
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
27
vm_gen/templates/html/_table.html
Normal file
27
vm_gen/templates/html/_table.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<table class="full-width data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
[%- for column in columns %]
|
||||||
|
{% if "[[ column.name ]]" not in skip_columns %}
|
||||||
|
<th>[[ column.name ]]</th>
|
||||||
|
{% endif %}
|
||||||
|
[%- endfor %]
|
||||||
|
<th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for instance in instances %}
|
||||||
|
<tr>
|
||||||
|
[%- for column in columns %]
|
||||||
|
{% if "[[ column.name ]]" not in skip_columns %}
|
||||||
|
<td>{{ instance.[[ column.name ]] }}</td>
|
||||||
|
{% endif %}
|
||||||
|
[%- endfor %]
|
||||||
|
<td>
|
||||||
|
<a href="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id, _next=request.path) }}">e</a> |
|
||||||
|
<a href="{{ url_for('delete_[[ name|camel_to_snake ]]', uuid=instance.id, _next=request.path) }}">x</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
@ -1,5 +1,5 @@
|
|||||||
<form action="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id) }}" method="post">
|
<form action="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id) }}" method="post">
|
||||||
<input type="hidden" name="_next" value="{{ url_for('get_[[ name|camel_to_snake ]]', uuid=instance.id) }}"/>
|
<input type="hidden" name="_next" value="{{ _next or request.args.get('_next') or url_for('get_[[ name|camel_to_snake ]]', uuid=instance.id) }}"/>
|
||||||
[%- for column in columns %]
|
[%- for column in columns %]
|
||||||
<label for="input-[[ name|camel_to_snake ]]-[[ column.name ]]">[[ column.name ]]</label>:
|
<label for="input-[[ name|camel_to_snake ]]-[[ column.name ]]">[[ column.name ]]</label>:
|
||||||
[%- if column.type in ['relationship'] %]
|
[%- if column.type in ['relationship'] %]
|
||||||
@ -10,6 +10,11 @@
|
|||||||
{% if instance.[[ column.name ]]_id == sub_instance.id %}selected="selected"{% endif %}>{{ sub_instance.name }}</option>
|
{% if instance.[[ column.name ]]_id == sub_instance.id %}selected="selected"{% endif %}>{{ sub_instance.name }}</option>
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
[%- elif column.type in ['number', 'int', 'integer', ] %]
|
||||||
|
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
||||||
|
value="{{ instance.[[ column.name ]] }}"
|
||||||
|
type="number" name="[[ column.name ]]"
|
||||||
|
/>
|
||||||
[%- else %]
|
[%- else %]
|
||||||
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
<input id="input-[[ name|camel_to_snake ]]-[[ column.name ]]"
|
||||||
value="{{ instance.[[ column.name ]] }}"
|
value="{{ instance.[[ column.name ]] }}"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<a href="{{ url_for('list_[[ name|camel_to_snake ]]', uuid=instance.id) }}">list</a> |
|
<a href="{{ url_for('list_[[ name|camel_to_snake ]]', uuid=instance.id) }}">list</a> |
|
||||||
<h2>{% include "[[ name|camel_to_snake ]]/_title.html" %}</h2>
|
<h2>{% include "[[ name|camel_to_snake ]]/_title.html" %}</h2>
|
||||||
<a href="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id) }}">edit</a> |
|
<a href="{{ url_for('update_[[ name|camel_to_snake ]]', uuid=instance.id, _next=request.path) }}">edit</a> |
|
||||||
<a href="{{ url_for('delete_[[ name|camel_to_snake ]]', uuid=instance.id) }}">delete</a>
|
<a href="{{ url_for('delete_[[ name|camel_to_snake ]]', uuid=instance.id) }}">delete</a>
|
||||||
{% include "[[ name|camel_to_snake ]]/_get.html" %}
|
{% include "[[ name|camel_to_snake ]]/_get.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -30,6 +30,8 @@ def enrich_view_model(view_model):
|
|||||||
column_type = column.get('type')
|
column_type = column.get('type')
|
||||||
if column_type in ['text', 'long_text', ]:
|
if column_type in ['text', 'long_text', ]:
|
||||||
_column_type = 'db.UnicodeText'
|
_column_type = 'db.UnicodeText'
|
||||||
|
elif column_type in ['number', 'int', 'integer', ]:
|
||||||
|
_column_type = 'db.Integer'
|
||||||
elif column_type in ['bool', ] or column_name.startswith('is_'):
|
elif column_type in ['bool', ] or column_name.startswith('is_'):
|
||||||
_column_type = 'db.Boolean'
|
_column_type = 'db.Boolean'
|
||||||
elif column_type in ['relationship', ]:
|
elif column_type in ['relationship', ]:
|
||||||
|
Loading…
Reference in New Issue
Block a user