A => manage.py +15 -0
@@ 0,0 1,15 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "taksa.settings")
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
A => static/css/custom.css +14 -0
@@ 0,0 1,14 @@
+/* Style Overiding */
+
+html,body {
+ font-family: Laksaman, sans-serif;
+ background-color: #eeeeec;
+}
+
+.monospace {
+ font-family: 'Roboto Mono', monospace;
+}
+
+.card, .button, .button.button-small {
+ background-color: #fbfbfb;
+}
A => static/css/font.css +40 -0
@@ 0,0 1,40 @@
+@font-face {
+ font-family: "Laksaman";
+ src: url("/static/font/Laksaman.woff") format('woff');
+}
+
+@font-face {
+ font-family: "Laksaman";
+ src: url("/static/font/Laksaman-Bold.woff") format('woff');
+ font-weight: bold;
+}
+
+@font-face {
+ font-family: "Laksaman";
+ src: url("/static/font/Laksaman-Italic.woff") format('woff');
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Laksaman";
+ src: url("/static/font/Laksaman-BoldItalic.woff") format('woff');
+ font-weight: bold;
+ font-style: italic;
+}
+
+/* latin-ext */
+@font-face {
+ font-family: 'Roboto Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Roboto Mono'), local('RobotoMono-Regular'), url(/static/font/RobotoMono-Latin-ext.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Roboto Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Roboto Mono'), local('RobotoMono-Regular'), url(/static/font/RobotoMono-Latin.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
No newline at end of file
A => static/css/normalize.css +427 -0
@@ 0,0 1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
No newline at end of file
A => static/css/skeleton-ext.css +237 -0
@@ 0,0 1,237 @@
+/* Skeleton Framework Extended */
+
+.xs-size-text {
+ font-size: 0.6rem;
+}
+
+.s-size-text {
+ font-size: 0.8rem;
+}
+
+.m-size-text {
+ font-size: 1.0rem;
+}
+
+.l-size-text {
+ font-size: 1.2rem;
+}
+
+.xl-size-text {
+ font-size: 1.4rem;
+}
+
+.underline {
+ text-decoration: underline;
+}
+
+.vtable table,thead,tbody {
+ display: inline-block;
+ white-space : nowrap;
+ overflow: hidden;
+}
+
+.vtable table {
+ width: 100%;
+}
+
+.vtable th {
+ text-align: right;
+ padding-right: 5px;
+}
+
+.vtable td {
+ text-align: left;
+ word-wrap: break-word;
+}
+
+.red-text {
+ color: red;
+}
+
+.green-text {
+ color: green;
+}
+
+.blue-text {
+ color: blue;
+}
+
+.white-text {
+ color: white;
+}
+
+.cyan-text {
+ color: cyan;
+}
+
+.magenta-text {
+ color: magenta;
+}
+
+.yellow-text {
+ color: yellow;
+}
+
+.black-text {
+ color: black;
+}
+
+.nowrap-text {
+ white-space: nowrap;
+ word-break: keep-all;
+}
+
+.bold-text {
+ font-weight: bold !important;
+}
+
+.button.button-logout,
+button.button-logout {
+ border: 1px solid #c00000;
+ color: #7c0000;
+}
+
+.button.button-logout:hover,
+button.button-logout:hover {
+ border: 1px solid #ff0000;
+ color: #ff0000;
+}
+
+.button.button-login,
+button.button-login {
+ border: 1px solid #008000;
+ color: #005000;
+}
+
+.button.button-login:hover,
+button.button-login:hover {
+ border: 1px solid #00b000;
+ color: #008000;
+}
+
+.button.button-home,
+button.button-home {
+ border: 1px solid #d0007a;
+ color: #d0007a;
+}
+
+.button.button-home:hover,
+button.button-home:hover {
+ border: 1px solid #f1008d;
+ color: #f1008d;
+}
+
+.button.button-home-primary,
+button.button-home-primary {
+ border: 1px solid #eb008a;
+ color: #ffffff;
+ background-color: #eb008a;
+ -webkit-transition: background-color 0.2s;
+ transition: background-color 0.2s;
+}
+
+.button.button-home-primary:hover,
+button.button-home-primary:hover {
+ border: 1px solid #ca0077;
+ color: #ffffff;
+ background-color: #ca0077;
+}
+
+.button.button-small,
+button.button-small {
+ display: inline-block;
+ height: 2.1rem;
+ margin-bottom: 0.5rem;
+ padding: 0 1.0rem;
+ color: #555;
+ text-align: center;
+ font-size: 0.75rem;
+ font-weight: 600;
+ line-height: 2.0rem;
+ letter-spacing: 0.1rem;
+ text-transform: uppercase;
+ text-decoration: none;
+ white-space: nowrap;
+ background-color: transparent;
+ border-radius: 3 px;
+ border: 1px solid #BBB;
+ cursor: pointer;
+ -webkit-transition: border 0.2s;
+ transition: border 0.2s;
+}
+
+.button.button-small:hover,
+button.button-small:hover,
+.button.button-small:focus,
+button.button-small:focus {
+ color: #333;
+ border-color: #888;
+ outline: 0;
+}
+
+.button.button-small.button-primary,
+button.button-small.button-primary {
+ border: 1px solid #555753;
+ color: #FFF;
+ background-color: #888a85;
+ -webkit-transition: background-color 0.2s;
+ transition: background-color 0.2s;
+}
+
+.button.button-small.button-primary:hover,
+button.button-small.button-primary:hover,
+.button.button-small.button-primary:focus,
+button.button-small.button-primary:focus {
+ color: #FFF;
+ background-color: #555753;
+ border-color: #2e3436;
+}
+
+@media screen and (min-width: 560px) {
+ [class*='column'] ~ [class*='column'] {
+ margin-top: 0;
+ }
+ .one-tenth[class*='column'] {
+ width: 9.9999999999%;
+ }
+ .one-ninth[class*='column'] {
+ width: 11.1111111111%;
+ }
+ .right-offset-by-one[class*='column'] {
+ margin-right: 8.3333333333%;
+ }
+ .right-offset-by-two[class*='column'] {
+ margin-right: 16.6666666666%;
+ }
+ .right-offset-by-three[class*='column'],
+ .right-offset-by-one-quarter[class*='column'] {
+ margin-right: 24.9999999999%;
+ }
+ .right-offset-by-four[class*='column'],
+ .right-offset-by-one-third[class*='column'] {
+ margin-right: 33.3333333332%;
+ }
+ .right-offset-by-five[class*='column'] {
+ margin-right: 41.6666666665%;
+ }
+ .right-offset-by-six[class*='column'],
+ .right-offset-by-one-half[class*='column'] {
+ margin-right: 49.9999999998%;
+ }
+ .right-offset-by-seven[class*='column'] {
+ margin-right: 58.3333333331%;
+ }
+ .right-offset-by-eight[class*='column'],
+ .right-offset-by-two-thirds[class*='column'] {
+ margin-right: 66.6666666664%;
+ }
+ .right-offset-by-nine[class*='column'] {
+ margin-right: 74.9999999997%;
+ }
+ .right-offset-by-ten[class*='column'] {
+ margin-right: 83.333333333%;
+ }
+ .right-offset-by-eleven[class*='column'] {
+ margin-right: 91.6666666663%;
+ }
+}
A => static/css/skeleton.css +1204 -0
@@ 0,0 1,1204 @@
+/*! skeleton-framework | 1.1.1 | MIT | 5/12/2016 */
+/* Table of contents
+- Base Styles
+- Grid
+- Typography
+- Links
+- Buttons
+- Forms
+- Lists
+- Code
+- Tables
+- Spacing
+- Utilities
+- Clearing
+- Media Queries
+*/
+
+html {
+ font-size: 1em;
+ box-sizing: border-box;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+body {
+ background-color: #fff;
+ font-size: 1rem;
+ line-height: 1.6rem;
+ font-weight: 400;
+ font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color: #222;
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ width: 100%;
+ max-width: 1200px;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+}
+
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ width: 100%;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+}
+
+.row {
+ margin-left: -0.5rem;
+ margin-right: -0.5rem;
+}
+
+.row::before,
+.row::after {
+ content: ' ';
+ display: table;
+}
+
+.row::after {
+ clear: both;
+}
+
+[class*='column'] {
+ float: left;
+ width: 100%;
+ min-height: 1px;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+}
+
+.xs-one[class*='column'] {
+ width: 8.3333333333%;
+}
+
+.xs-two[class*='column'] {
+ width: 16.6666666666%;
+}
+
+.xs-three[class*='column'],
+.xs-one-quarter[class*='column'] {
+ width: 24.9999999999%;
+}
+
+.xs-four[class*='column'],
+.xs-one-third[class*='column'] {
+ width: 33.3333333332%;
+}
+
+.xs-five[class*='column'] {
+ width: 41.6666666665%;
+}
+
+.xs-six[class*='column'],
+.xs-one-half[class*='column'] {
+ width: 49.9999999998%;
+}
+
+.xs-seven[class*='column'] {
+ width: 58.3333333331%;
+}
+
+.xs-eight[class*='column'],
+.xs-two-thirds[class*='column'] {
+ width: 66.6666666664%;
+}
+
+.xs-nine[class*='column'] {
+ width: 74.9999999997%;
+}
+
+.xs-ten[class*='column'] {
+ width: 83.333333333%;
+}
+
+.xs-eleven[class*='column'] {
+ width: 91.6666666663%;
+}
+
+.xs-twelve[class*='column'] {
+ width: 99.9999999996%;
+}
+
+[class*='xs-'][class*='column'] ~ [class*='xs-'][class*='column'] {
+ margin-top: 0;
+}
+
+@media screen and (min-width: 560px) {
+ [class*='column'] ~ [class*='column'] {
+ margin-top: 0;
+ }
+ .one[class*='column'] {
+ width: 8.3333333333%;
+ }
+ .two[class*='column'] {
+ width: 16.6666666666%;
+ }
+ .three[class*='column'],
+ .one-quarter[class*='column'] {
+ width: 24.9999999999%;
+ }
+ .four[class*='column'],
+ .one-third[class*='column'] {
+ width: 33.3333333332%;
+ }
+ .five[class*='column'] {
+ width: 41.6666666665%;
+ }
+ .six[class*='column'],
+ .one-half[class*='column'] {
+ width: 49.9999999998%;
+ }
+ .seven[class*='column'] {
+ width: 58.3333333331%;
+ }
+ .eight[class*='column'],
+ .two-thirds[class*='column'] {
+ width: 66.6666666664%;
+ }
+ .nine[class*='column'] {
+ width: 74.9999999997%;
+ }
+ .ten[class*='column'] {
+ width: 83.333333333%;
+ }
+ .eleven[class*='column'] {
+ width: 91.6666666663%;
+ }
+ .twelve[class*='column'] {
+ width: 99.9999999996%;
+ }
+ .offset-by-one[class*='column'] {
+ margin-left: 8.3333333333%;
+ }
+ .offset-by-two[class*='column'] {
+ margin-left: 16.6666666666%;
+ }
+ .offset-by-three[class*='column'],
+ .offset-by-one-quarter[class*='column'] {
+ margin-left: 24.9999999999%;
+ }
+ .offset-by-four[class*='column'],
+ .offset-by-one-third[class*='column'] {
+ margin-left: 33.3333333332%;
+ }
+ .offset-by-five[class*='column'] {
+ margin-left: 41.6666666665%;
+ }
+ .offset-by-six[class*='column'],
+ .offset-by-one-half[class*='column'] {
+ margin-left: 49.9999999998%;
+ }
+ .offset-by-seven[class*='column'] {
+ margin-left: 58.3333333331%;
+ }
+ .offset-by-eight[class*='column'],
+ .offset-by-two-thirds[class*='column'] {
+ margin-left: 66.6666666664%;
+ }
+ .offset-by-nine[class*='column'] {
+ margin-left: 74.9999999997%;
+ }
+ .offset-by-ten[class*='column'] {
+ margin-left: 83.333333333%;
+ }
+ .offset-by-eleven[class*='column'] {
+ margin-left: 91.6666666663%;
+ }
+ .sm-one[class*='column'] {
+ width: 8.3333333333%;
+ }
+ .sm-two[class*='column'] {
+ width: 16.6666666666%;
+ }
+ .sm-three[class*='column'],
+ .sm-one-quarter[class*='column'] {
+ width: 24.9999999999%;
+ }
+ .sm-four[class*='column'],
+ .sm-one-third[class*='column'] {
+ width: 33.3333333332%;
+ }
+ .sm-five[class*='column'] {
+ width: 41.6666666665%;
+ }
+ .sm-six[class*='column'],
+ .sm-one-half[class*='column'] {
+ width: 49.9999999998%;
+ }
+ .sm-seven[class*='column'] {
+ width: 58.3333333331%;
+ }
+ .sm-eight[class*='column'],
+ .sm-two-thirds[class*='column'] {
+ width: 66.6666666664%;
+ }
+ .sm-nine[class*='column'] {
+ width: 74.9999999997%;
+ }
+ .sm-ten[class*='column'] {
+ width: 83.333333333%;
+ }
+ .sm-eleven[class*='column'] {
+ width: 91.6666666663%;
+ }
+ .sm-twelve[class*='column'] {
+ width: 99.9999999996%;
+ }
+ .sm-offset-by-one[class*='column'] {
+ margin-left: 8.3333333333%;
+ }
+ .sm-offset-by-two[class*='column'] {
+ margin-left: 16.6666666666%;
+ }
+ .sm-offset-by-three[class*='column'],
+ .sm-offset-by-one-quarter[class*='column'] {
+ margin-left: 24.9999999999%;
+ }
+ .sm-offset-by-four[class*='column'],
+ .sm-offset-by-one-third[class*='column'] {
+ margin-left: 33.3333333332%;
+ }
+ .sm-offset-by-five[class*='column'] {
+ margin-left: 41.6666666665%;
+ }
+ .sm-offset-by-six[class*='column'],
+ .sm-offset-by-one-half[class*='column'] {
+ margin-left: 49.9999999998%;
+ }
+ .sm-offset-by-seven[class*='column'] {
+ margin-left: 58.3333333331%;
+ }
+ .sm-offset-by-eight[class*='column'],
+ .sm-offset-by-two-thirds[class*='column'] {
+ margin-left: 66.6666666664%;
+ }
+ .sm-offset-by-nine[class*='column'] {
+ margin-left: 74.9999999997%;
+ }
+ .sm-offset-by-ten[class*='column'] {
+ margin-left: 83.333333333%;
+ }
+ .sm-offset-by-eleven[class*='column'] {
+ margin-left: 91.6666666663%;
+ }
+}
+
+@media screen and (min-width: 720px) {
+ .md-one[class*='column'] {
+ width: 8.3333333333%;
+ }
+ .md-two[class*='column'] {
+ width: 16.6666666666%;
+ }
+ .md-three[class*='column'],
+ .md-one-quarter[class*='column'] {
+ width: 24.9999999999%;
+ }
+ .md-four[class*='column'],
+ .md-one-third[class*='column'] {
+ width: 33.3333333332%;
+ }
+ .md-five[class*='column'] {
+ width: 41.6666666665%;
+ }
+ .md-six[class*='column'],
+ .md-one-half[class*='column'] {
+ width: 49.9999999998%;
+ }
+ .md-seven[class*='column'] {
+ width: 58.3333333331%;
+ }
+ .md-eight[class*='column'],
+ .md-two-thirds[class*='column'] {
+ width: 66.6666666664%;
+ }
+ .md-nine[class*='column'] {
+ width: 74.9999999997%;
+ }
+ .md-ten[class*='column'] {
+ width: 83.333333333%;
+ }
+ .md-eleven[class*='column'] {
+ width: 91.6666666663%;
+ }
+ .md-twelve[class*='column'] {
+ width: 99.9999999996%;
+ }
+ .md-offset-by-one[class*='column'] {
+ margin-left: 8.3333333333%;
+ }
+ .md-offset-by-two[class*='column'] {
+ margin-left: 16.6666666666%;
+ }
+ .md-offset-by-three[class*='column'],
+ .md-offset-by-one-quarter[class*='column'] {
+ margin-left: 24.9999999999%;
+ }
+ .md-offset-by-four[class*='column'],
+ .md-offset-by-one-third[class*='column'] {
+ margin-left: 33.3333333332%;
+ }
+ .md-offset-by-five[class*='column'] {
+ margin-left: 41.6666666665%;
+ }
+ .md-offset-by-six[class*='column'],
+ .md-offset-by-one-half[class*='column'] {
+ margin-left: 49.9999999998%;
+ }
+ .md-offset-by-seven[class*='column'] {
+ margin-left: 58.3333333331%;
+ }
+ .md-offset-by-eight[class*='column'],
+ .md-offset-by-two-thirds[class*='column'] {
+ margin-left: 66.6666666664%;
+ }
+ .md-offset-by-nine[class*='column'] {
+ margin-left: 74.9999999997%;
+ }
+ .md-offset-by-ten[class*='column'] {
+ margin-left: 83.333333333%;
+ }
+ .md-offset-by-eleven[class*='column'] {
+ margin-left: 91.6666666663%;
+ }
+}
+
+@media screen and (min-width: 960px) {
+ .lg-one[class*='column'] {
+ width: 8.3333333333%;
+ }
+ .lg-two[class*='column'] {
+ width: 16.6666666666%;
+ }
+ .lg-three[class*='column'],
+ .lg-one-quarter[class*='column'] {
+ width: 24.9999999999%;
+ }
+ .lg-four[class*='column'],
+ .lg-one-third[class*='column'] {
+ width: 33.3333333332%;
+ }
+ .lg-five[class*='column'] {
+ width: 41.6666666665%;
+ }
+ .lg-six[class*='column'],
+ .lg-one-half[class*='column'] {
+ width: 49.9999999998%;
+ }
+ .lg-seven[class*='column'] {
+ width: 58.3333333331%;
+ }
+ .lg-eight[class*='column'],
+ .lg-two-thirds[class*='column'] {
+ width: 66.6666666664%;
+ }
+ .lg-nine[class*='column'] {
+ width: 74.9999999997%;
+ }
+ .lg-ten[class*='column'] {
+ width: 83.333333333%;
+ }
+ .lg-eleven[class*='column'] {
+ width: 91.6666666663%;
+ }
+ .lg-twelve[class*='column'] {
+ width: 99.9999999996%;
+ }
+ .lg-offset-by-one[class*='column'] {
+ margin-left: 8.3333333333%
+ }
+ .lg-offset-by-two[class*='column'] {
+ margin-left: 16.6666666666%
+ }
+ .lg-offset-by-three[class*='column'],
+ .lg-offset-by-one-quarter[class*='column'] {
+ margin-left: 24.9999999999%;
+ }
+ .lg-offset-by-four[class*='column'],
+ .lg-offset-by-one-third[class*='column'] {
+ margin-left: 33.3333333332%;
+ }
+ .lg-offset-by-five[class*='column'] {
+ margin-left: 41.6666666665%;
+ }
+ .lg-offset-by-six[class*='column'],
+ .lg-offset-by-one-half[class*='column'] {
+ margin-left: 49.9999999998%;
+ }
+ .lg-offset-by-seven[class*='column'] {
+ margin-left: 58.3333333331%;
+ }
+ .lg-offset-by-eight[class*='column'],
+ .lg-offset-by-two-thirds[class*='column'] {
+ margin-left: 66.6666666664%;
+ }
+ .lg-offset-by-nine[class*='column'] {
+ margin-left: 74.9999999997%;
+ }
+ .lg-offset-by-ten[class*='column'] {
+ margin-left: 83.333333333%;
+ }
+ .lg-offset-by-eleven[class*='column'] {
+ margin-left: 91.6666666663%;
+ }
+}
+
+/* Base Typo
+ ------------------------------------------------- */
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin-top: 0;
+ margin-bottom: 2rem;
+ font-weight: 300;
+}
+
+h1 {
+ font-size: 3.6rem;
+ line-height: 1.2;
+ letter-spacing: -0.1rem;
+}
+
+h2 {
+ font-size: 3.0rem;
+ line-height: 1.25;
+ letter-spacing: -0.1rem;
+}
+
+h3 {
+ font-size: 2.4rem;
+ line-height: 1.3;
+ letter-spacing: -0.1rem;
+}
+
+h4 {
+ font-size: 1.8rem;
+ line-height: 1.35;
+ letter-spacing: -0.08rem;
+}
+
+h5 {
+ font-size: 1.5rem;
+ line-height: 1.5;
+ letter-spacing: -0.05rem;
+}
+
+h6 {
+ font-size: 1.2rem;
+ line-height: 1.6;
+ letter-spacing: 0;
+}
+
+/* Larger than phablet */
+
+@media (min-width: 560px) {
+ h1 {
+ font-size: 3.6rem;
+ }
+ h2 {
+ font-size: 3.0rem;
+ }
+ h3 {
+ font-size: 2.4rem;
+ }
+ h4 {
+ font-size: 1.8rem;
+ }
+ h5 {
+ font-size: 1.5rem;
+ }
+ h6 {
+ font-size: 1.2rem;
+ }
+}
+
+p {
+ margin-top: 0;
+}
+
+/* Links
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+a {
+ color: #1EAEDB;
+}
+
+a:hover {
+ color: #0FA0CE;
+}
+
+/* Colors
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+.text-primary {
+ color: #1EAEDB
+}
+
+.text-success {
+ color: #2ecc71
+}
+
+.text-danger {
+ color: #e74c3c
+}
+
+.button,
+button,
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ display: inline-block;
+ height: 2.5rem;
+ padding: 0 1.9rem;
+ color: #555;
+ text-align: center;
+ font-size: 0.7rem;
+ font-weight: 600;
+ line-height: 2.5rem;
+ letter-spacing: 0.1rem;
+ text-transform: uppercase;
+ text-decoration: none;
+ white-space: nowrap;
+ background-color: transparent;
+ border-radius: 4px;
+ border: 1px solid #BBB;
+ cursor: pointer;
+ -webkit-transition: border 0.2s;
+ transition: border 0.2s;
+}
+
+.button:hover,
+button:hover,
+input[type="submit"]:hover,
+input[type="reset"]:hover,
+input[type="button"]:hover,
+.button:focus,
+button:focus,
+input[type="submit"]:focus,
+input[type="reset"]:focus,
+input[type="button"]:focus {
+ color: #333;
+ border-color: #888;
+ outline: 0;
+}
+
+.button:active,
+button:active,
+input[type="submit"]:active,
+input[type="reset"]:active,
+input[type="button"]:active {
+ color: #222;
+ border-color: #222;
+}
+
+.button:disabled,
+.button:disabled:hover,
+button[disabled],
+.button[disabled],
+.button-primary[disabled],
+.button-success[disabled],
+.button-danger[disabled],
+input[type="submit"][disabled],
+input[type="reset"][disabled],
+input[type="button"][disabled] {
+ border: 1px solid #E3E3E3;
+ color: #888;
+ cursor: not-allowed;
+}
+
+.button.button-primary,
+button.button-primary,
+input[type="submit"].button-primary,
+input[type="reset"].button-primary,
+input[type="button"].button-primary {
+ border: 1px solid #33C3F0;
+ color: #FFF;
+ background-color: #33C3F0;
+ -webkit-transition: background-color 0.2s;
+ transition: background-color 0.2s;
+}
+
+.button.button-primary:hover,
+button.button-primary:hover,
+input[type="submit"].button-primary:hover,
+input[type="reset"].button-primary:hover,
+input[type="button"].button-primary:hover,
+.button.button-primary:focus,
+button.button-primary:focus,
+input[type="submit"].button-primary:focus,
+input[type="reset"].button-primary:focus,
+input[type="button"].button-primary:focus {
+ color: #FFF;
+ background-color: #1EAEDB;
+ border-color: #1EAEDB;
+}
+
+.button.button-primary:active,
+button.button-primary:active,
+input[type="submit"].button-primary:active,
+input[type="reset"].button-primary:active,
+input[type="button"].button-primary:active {
+ color: #FFF;
+ background-color: #157b9b;
+ border-color: #157b9b;
+}
+
+.button.button-primary:disabled,
+button.button-primary:disabled,
+input[type="submit"].button-primary:disabled,
+input[type="reset"].button-primary:disabled,
+input[type="button"].button-primary:disabled {
+ color: #FFF;
+ cursor: not-allowed;
+ background-color: #7CD9F8;
+ border-color: #7CD9F8;
+}
+
+.button.button-success,
+button.button-success,
+input[type="submit"].button-success,
+input[type="reset"].button-success,
+input[type="button"].button-success {
+ border: 1px solid #2ecc71;
+ color: #FFF;
+ background-color: #2ecc71;
+ -webkit-transition: background-color 0.2s;
+ transition: background-color 0.2s;
+}
+
+.button.button-success:hover,
+button.button-success:hover,
+input[type="submit"].button-success:hover,
+input[type="reset"].button-success:hover,
+input[type="button"].button-success:hover,
+.button.button-success:focus,
+button.button-success:focus,
+input[type="submit"].button-success:focus,
+input[type="reset"].button-success:focus,
+input[type="button"].button-success:focus {
+ color: #FFF;
+ background-color: #27ae60;
+ border-color: #27ae60;
+}
+
+.button.button-success:active,
+button.button-success:active,
+input[type="submit"].button-success:active,
+input[type="reset"].button-success:active,
+input[type="button"].button-success:active {
+ color: #FFF;
+ background-color: #2ecc71;
+ border-color: #2ecc71;
+}
+
+.button.button-success:disabled,
+button.button-success:disabled,
+input[type="submit"].button-success:disabled,
+input[type="reset"].button-success:disabled,
+input[type="button"].button-success:disabled {
+ color: #FFF;
+ cursor: not-allowed;
+ background-color: #82e3aa;
+ border-color: #82e3aa;
+}
+
+.button.button-danger,
+button.button-danger,
+input[type="submit"].button-danger,
+input[type="reset"].button-danger,
+input[type="button"].button-danger {
+ border: 1px solid #e74c3c;
+ color: #FFF;
+ background-color: #e74c3c;
+ -webkit-transition: background-color 0.2s;
+ transition: background-color 0.2s;
+}
+
+.button.button-danger:hover,
+button.button-danger:hover,
+input[type="submit"].button-danger:hover,
+input[type="reset"].button-danger:hover,
+input[type="button"].button-danger:hover,
+.button.button-danger:focus,
+button.button-danger:focus,
+input[type="submit"].button-danger:focus,
+input[type="reset"].button-danger:focus,
+input[type="button"].button-danger:focus {
+ color: #FFF;
+ background-color: #c0392b;
+ border-color: #c0392b;
+}
+
+.button.button-danger:active,
+button.button-danger:active,
+input[type="submit"].button-danger:active,
+input[type="reset"].button-danger:active,
+input[type="button"].button-danger:active {
+ color: #FFF;
+ background-color: #e74c3c;
+ border-color: #e74c3c;
+}
+
+.button.button-danger:disabled,
+button.button-danger:disabled,
+input[type="submit"].button-danger:disabled,
+input[type="reset"].button-danger:disabled,
+input[type="button"].button-danger:disabled {
+ color: #FFF;
+ cursor: not-allowed;
+ background-color: #ee8377;
+ border-color: #ee8377;
+}
+
+input[type="email"],
+input[type="number"],
+input[type="date"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea,
+select {
+ padding: 0.4rem 0.6rem;
+ background-color: #FFF;
+ border: 1px solid #D1D1D1;
+ border-radius: 4px;
+ box-shadow: none;
+ -webkit-transition: border 0.2s;
+ transition: border 0.2s;
+}
+
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+select:not([size]),
+textarea:not([rows]) {
+ height: 2.5rem;
+}
+
+/* Removes awkward default styles on some inputs for iOS */
+
+input[type="email"],
+input[type="number"],
+input[type="date"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+input[type="button"],
+input[type="submit"],
+textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+
+textarea {
+ min-height: 4rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ resize: vertical;
+}
+
+input[type="email"]:focus,
+input[type="number"]:focus,
+input[type="date"]:focus,
+input[type="search"]:focus,
+input[type="text"]:focus,
+input[type="tel"]:focus,
+input[type="url"]:focus,
+input[type="password"]:focus,
+textarea:focus,
+select:focus {
+ border: 1px solid #33C3F0;
+ outline: 0;
+}
+
+.has-error,
+.has-error:focus {
+ border: 1px solid #e74c3c !important;
+ outline: 0;
+}
+
+.has-success,
+.has-success:focus {
+ border: 1px solid #2ecc71 !important;
+ outline: 0;
+}
+
+label,
+legend {
+ display: block;
+ margin-bottom: 0.5rem;
+ font-weight: 600;
+}
+
+fieldset {
+ padding: 0;
+ border-width: 0;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ display: inline;
+}
+
+label > .label-body {
+ display: inline-block;
+ margin-left: 0.5rem;
+ font-weight: normal;
+}
+
+ul {
+ list-style: circle inside;
+}
+
+ol {
+ list-style: decimal inside;
+}
+
+ol,
+ul {
+ padding-left: 0;
+ margin-top: 0;
+}
+
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin: 1.5rem 0 1.5rem 3rem;
+ font-size: 90%;
+}
+
+li {
+ margin-bottom: 1rem;
+}
+
+/* Cards */
+
+.card {
+ border: 1px solid #E1E1E1;
+ padding: 15px 25px;
+ border-radius: 4px;
+ box-shadow: 1px 1px 1px #E1E1E1;
+ min-height: 160px;
+ margin-bottom: 1rem;
+}
+
+.card h1,
+.card h2,
+.card h3,
+.card h4,
+.card h5,
+.card h6,
+.card p {
+ margin-bottom:1.2rem;
+}
+
+a.card {
+ display: block;
+ color: #757575;
+ text-decoration: none;
+ -webkit-transition: color .3s, border-color .3s, -webkit-transform .3s;
+ transition: color .3s, border-color .3s, -webkit-transform .3s;
+ transition: color .3s, transform .3s, border-color .3s;
+ transition: color .3s, transform .3s, border-color .3s, -webkit-transform .3s;
+}
+
+a.card:hover,
+a.card:active {
+ color: black;
+ border-color: #8A8A8A;
+ -webkit-transform: translateX(-2px) translateY(-2px);
+ transform: translateX(-2px) translateY(-2px);
+}
+
+code {
+ padding: 0.2rem 0.5rem;
+ margin: 0 0.2rem;
+ font-size: 90%;
+ white-space: nowrap;
+ background: #F1F1F1;
+ border: 1px solid #E1E1E1;
+ border-radius: 4px;
+}
+
+pre > code {
+ display: block;
+ padding: 1rem 1.5rem;
+ white-space: pre;
+ overflow-x: auto;
+}
+
+@media (max-width: 560px) {
+ pre > code {
+ white-space: nowrap;
+ }
+}
+
+.alert {
+ width: 100%;
+ border-radius: 4px;
+ border: 1px solid #000;
+ color: #000;
+ background-color: #FFF;
+ padding: 10px 15px;
+}
+
+.alert.alert-primary {
+ border: 1px solid #33C3F0;
+ color: #FFF;
+ background-color: #33C3F0;
+}
+
+.alert.alert-success {
+ border: 1px solid #2ecc71;
+ color: #FFF;
+ background-color: #2ecc71;
+}
+
+.alert.alert-danger {
+ border: 1px solid #e74c3c;
+ color: #FFF;
+ background-color: #e74c3c;
+}
+
+.table-responsive {
+ overflow-x: auto;
+}
+
+.table-responsive th,
+.table-responsive td {
+ white-space: nowrap;
+}
+
+table {
+ border-collapse: collapse;
+ -webkit-overflow-scrolling: touch;
+}
+
+th,
+td {
+ padding: 0.75rem 1rem;
+}
+
+th {
+ text-align: left;
+}
+
+td {
+ border-bottom: 1px solid #E1E1E1;
+}
+
+th:first-child,
+td:first-child {
+ padding-left: 0;
+}
+
+th:last-child,
+td:last-child {
+ padding-right: 0;
+}
+
+tr th {
+ border-bottom: 1px solid #000;
+}
+
+@media (min-width: 560px) {
+ th:first-child,
+ td:first-child {
+ padding-left: 1rem;
+ }
+}
+
+button,
+.button {
+ margin-bottom: 1rem;
+}
+
+input,
+textarea,
+select,
+fieldset {
+ margin-bottom: 1.5rem;
+}
+
+pre,
+blockquote,
+dl,
+figure,
+table,
+p,
+ul,
+ol,
+form {
+ margin-bottom: 2.5rem;
+}
+
+.alert {
+ margin-bottom: 1rem;
+}
+
+.u-full-width {
+ width: 100%;
+}
+
+.u-max-full-width {
+ max-width: 100%;
+}
+
+/* Floats */
+
+.u-pull-right {
+ float: right;
+}
+
+.u-pull-left {
+ float: left;
+}
+
+.u-cf {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+/* Positioning */
+
+.u-center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/**
+ * Note:
+ *
+ * Nest this class inside something with `position: relative` to have
+ * your element centered relative to its containing element.
+ *
+ * Use this class without nesting it to have your element centered relative
+ * to the viewport.
+ */
+
+.u-center-abs {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateY(-50%) translateX(-50%);
+ transform: translateY(-50%) translateX(-50%);
+}
+
+/* Type */
+
+.u-text-center {
+ text-align: center !important;
+}
+
+.u-text-right {
+ text-align: right !important;
+}
+
+.u-text-left {
+ text-align: left !important;
+}
+
+.u-text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+/* Peek a boo */
+
+.u-hide {
+ display: none !important;
+}
+
+.u-show {
+ display: block !important;
+}
+
+.u-invisible {
+ visibility: hidden !important;
+}
+
+.u-visible {
+ visibility: visible !important;
+}
+
+/* Misc */
+
+.u-img-responsive {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+/* Misc */
+
+hr {
+ margin-top: 3rem;
+ margin-bottom: 3.5rem;
+ border-width: 0;
+ border-top: 1px solid #E1E1E1;
+}
+
+/* Clearing */
+
+.container:after,
+.row:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+/*****
+* Media Queries
+*
+* Note: The best way to structure the use of media queries is to create the
+* queries near the relevant code. For example, if you wanted to change the
+* styles for buttons on small devices, paste the mobile query code up in the
+* buttons section and style it there.
+*****/
+
+@media (min-width: 400px) {
+ /* Larger than mobile */
+}
+
+@media (min-width: 560px) {
+ /* Larger than phablet (also point when grid becomes active) */
+}
+
+@media (min-width: 720px) {
+ /* Larger than tablet */
+}
+
+@media (min-width: 960px) {
+ /* Larger than desktop */
+}
+
+@media (min-width: 1200px) {
+ /* Larger than Desktop HD */
+}
A => static/css/skeleton.min.css +1 -0
@@ 0,0 1,1 @@
+/*! skeleton-framework | 1.1.1 | MIT | 5/12/2016 */.container,.container-fluid{margin-right:auto;margin-left:auto}.container,.container-fluid,[class*=column]{width:100%;padding-left:.5rem;padding-right:.5rem}h1,h2,h3{letter-spacing:-.1rem}[class*=xs-][class*=column]~[class*=xs-][class*=column],ol,p,ul{margin-top:0}.table-responsive,pre>code{overflow-x:auto}html{font-size:1em;box-sizing:border-box}*,::after,::before{box-sizing:inherit}body{background-color:#fff;font-size:1rem;line-height:1.6rem;font-weight:400;font-family:Raleway,HelveticaNeue,"Helvetica Neue",Helvetica,Arial,sans-serif;color:#222}.container{max-width:1200px}.row{margin-left:-.5rem;margin-right:-.5rem}.row::after,.row::before{content:' ';display:table}.container:after,.row:after,.u-cf{content:"";clear:both}.row::after{clear:both}[class*=column]{float:left;min-height:1px}.xs-one[class*=column]{width:8.3333333333%}.xs-two[class*=column]{width:16.6666666666%}.xs-one-quarter[class*=column],.xs-three[class*=column]{width:24.9999999999%}.xs-four[class*=column],.xs-one-third[class*=column]{width:33.3333333332%}.xs-five[class*=column]{width:41.6666666665%}.xs-one-half[class*=column],.xs-six[class*=column]{width:49.9999999998%}.xs-seven[class*=column]{width:58.3333333331%}.xs-eight[class*=column],.xs-two-thirds[class*=column]{width:66.6666666664%}.xs-nine[class*=column]{width:74.9999999997%}.xs-ten[class*=column]{width:83.333333333%}.xs-eleven[class*=column]{width:91.6666666663%}.xs-twelve[class*=column]{width:99.9999999996%}@media screen and (min-width:560px){[class*=column]~[class*=column]{margin-top:0}.one[class*=column]{width:8.3333333333%}.two[class*=column]{width:16.6666666666%}.one-quarter[class*=column],.three[class*=column]{width:24.9999999999%}.four[class*=column],.one-third[class*=column]{width:33.3333333332%}.five[class*=column]{width:41.6666666665%}.one-half[class*=column],.six[class*=column]{width:49.9999999998%}.seven[class*=column]{width:58.3333333331%}.eight[class*=column],.two-thirds[class*=column]{width:66.6666666664%}.nine[class*=column]{width:74.9999999997%}.ten[class*=column]{width:83.333333333%}.eleven[class*=column]{width:91.6666666663%}.twelve[class*=column]{width:99.9999999996%}.offset-by-one[class*=column]{margin-left:8.3333333333%}.offset-by-two[class*=column]{margin-left:16.6666666666%}.offset-by-one-quarter[class*=column],.offset-by-three[class*=column]{margin-left:24.9999999999%}.offset-by-four[class*=column],.offset-by-one-third[class*=column]{margin-left:33.3333333332%}.offset-by-five[class*=column]{margin-left:41.6666666665%}.offset-by-one-half[class*=column],.offset-by-six[class*=column]{margin-left:49.9999999998%}.offset-by-seven[class*=column]{margin-left:58.3333333331%}.offset-by-eight[class*=column],.offset-by-two-thirds[class*=column]{margin-left:66.6666666664%}.offset-by-nine[class*=column]{margin-left:74.9999999997%}.offset-by-ten[class*=column]{margin-left:83.333333333%}.offset-by-eleven[class*=column]{margin-left:91.6666666663%}.sm-one[class*=column]{width:8.3333333333%}.sm-two[class*=column]{width:16.6666666666%}.sm-one-quarter[class*=column],.sm-three[class*=column]{width:24.9999999999%}.sm-four[class*=column],.sm-one-third[class*=column]{width:33.3333333332%}.sm-five[class*=column]{width:41.6666666665%}.sm-one-half[class*=column],.sm-six[class*=column]{width:49.9999999998%}.sm-seven[class*=column]{width:58.3333333331%}.sm-eight[class*=column],.sm-two-thirds[class*=column]{width:66.6666666664%}.sm-nine[class*=column]{width:74.9999999997%}.sm-ten[class*=column]{width:83.333333333%}.sm-eleven[class*=column]{width:91.6666666663%}.sm-twelve[class*=column]{width:99.9999999996%}.sm-offset-by-one[class*=column]{margin-left:8.3333333333%}.sm-offset-by-two[class*=column]{margin-left:16.6666666666%}.sm-offset-by-one-quarter[class*=column],.sm-offset-by-three[class*=column]{margin-left:24.9999999999%}.sm-offset-by-four[class*=column],.sm-offset-by-one-third[class*=column]{margin-left:33.3333333332%}.sm-offset-by-five[class*=column]{margin-left:41.6666666665%}.sm-offset-by-one-half[class*=column],.sm-offset-by-six[class*=column]{margin-left:49.9999999998%}.sm-offset-by-seven[class*=column]{margin-left:58.3333333331%}.sm-offset-by-eight[class*=column],.sm-offset-by-two-thirds[class*=column]{margin-left:66.6666666664%}.sm-offset-by-nine[class*=column]{margin-left:74.9999999997%}.sm-offset-by-ten[class*=column]{margin-left:83.333333333%}.sm-offset-by-eleven[class*=column]{margin-left:91.6666666663%}}@media screen and (min-width:720px){.md-one[class*=column]{width:8.3333333333%}.md-two[class*=column]{width:16.6666666666%}.md-one-quarter[class*=column],.md-three[class*=column]{width:24.9999999999%}.md-four[class*=column],.md-one-third[class*=column]{width:33.3333333332%}.md-five[class*=column]{width:41.6666666665%}.md-one-half[class*=column],.md-six[class*=column]{width:49.9999999998%}.md-seven[class*=column]{width:58.3333333331%}.md-eight[class*=column],.md-two-thirds[class*=column]{width:66.6666666664%}.md-nine[class*=column]{width:74.9999999997%}.md-ten[class*=column]{width:83.333333333%}.md-eleven[class*=column]{width:91.6666666663%}.md-twelve[class*=column]{width:99.9999999996%}.md-offset-by-one[class*=column]{margin-left:8.3333333333%}.md-offset-by-two[class*=column]{margin-left:16.6666666666%}.md-offset-by-one-quarter[class*=column],.md-offset-by-three[class*=column]{margin-left:24.9999999999%}.md-offset-by-four[class*=column],.md-offset-by-one-third[class*=column]{margin-left:33.3333333332%}.md-offset-by-five[class*=column]{margin-left:41.6666666665%}.md-offset-by-one-half[class*=column],.md-offset-by-six[class*=column]{margin-left:49.9999999998%}.md-offset-by-seven[class*=column]{margin-left:58.3333333331%}.md-offset-by-eight[class*=column],.md-offset-by-two-thirds[class*=column]{margin-left:66.6666666664%}.md-offset-by-nine[class*=column]{margin-left:74.9999999997%}.md-offset-by-ten[class*=column]{margin-left:83.333333333%}.md-offset-by-eleven[class*=column]{margin-left:91.6666666663%}}@media screen and (min-width:960px){.lg-one[class*=column]{width:8.3333333333%}.lg-two[class*=column]{width:16.6666666666%}.lg-one-quarter[class*=column],.lg-three[class*=column]{width:24.9999999999%}.lg-four[class*=column],.lg-one-third[class*=column]{width:33.3333333332%}.lg-five[class*=column]{width:41.6666666665%}.lg-one-half[class*=column],.lg-six[class*=column]{width:49.9999999998%}.lg-seven[class*=column]{width:58.3333333331%}.lg-eight[class*=column],.lg-two-thirds[class*=column]{width:66.6666666664%}.lg-nine[class*=column]{width:74.9999999997%}.lg-ten[class*=column]{width:83.333333333%}.lg-eleven[class*=column]{width:91.6666666663%}.lg-twelve[class*=column]{width:99.9999999996%}.lg-offset-by-one[class*=column]{margin-left:8.3333333333%}.lg-offset-by-two[class*=column]{margin-left:16.6666666666%}.lg-offset-by-one-quarter[class*=column],.lg-offset-by-three[class*=column]{margin-left:24.9999999999%}.lg-offset-by-four[class*=column],.lg-offset-by-one-third[class*=column]{margin-left:33.3333333332%}.lg-offset-by-five[class*=column]{margin-left:41.6666666665%}.lg-offset-by-one-half[class*=column],.lg-offset-by-six[class*=column]{margin-left:49.9999999998%}.lg-offset-by-seven[class*=column]{margin-left:58.3333333331%}.lg-offset-by-eight[class*=column],.lg-offset-by-two-thirds[class*=column]{margin-left:66.6666666664%}.lg-offset-by-nine[class*=column]{margin-left:74.9999999997%}.lg-offset-by-ten[class*=column]{margin-left:83.333333333%}.lg-offset-by-eleven[class*=column]{margin-left:91.6666666663%}}.alert,.u-full-width{width:100%}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:2rem;font-weight:300}h1{font-size:3.6rem;line-height:1.2}h2{font-size:3rem;line-height:1.25}h3{font-size:2.4rem;line-height:1.3}h4{font-size:1.8rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.5rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.2rem;line-height:1.6;letter-spacing:0}@media (min-width:560px){h1{font-size:3.6rem}h2{font-size:3rem}h3{font-size:2.4rem}h4{font-size:1.8rem}h5{font-size:1.5rem}h6{font-size:1.2rem}}.text-primary,a{color:#1EAEDB}a:hover{color:#0FA0CE}.text-success{color:#2ecc71}.text-danger{color:#e74c3c}.button,button,input[type=submit],input[type=reset],input[type=button]{display:inline-block;height:2.5rem;padding:0 1.9rem;color:#555;text-align:center;font-size:.7rem;font-weight:600;line-height:2.5rem;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:4px;border:1px solid #BBB;cursor:pointer;-webkit-transition:border .2s;transition:border .2s}.button:focus,.button:hover,button:focus,button:hover,input[type=submit]:focus,input[type=submit]:hover,input[type=reset]:focus,input[type=reset]:hover,input[type=button]:focus,input[type=button]:hover{color:#333;border-color:#888;outline:0}.button:active,button:active,input[type=submit]:active,input[type=reset]:active,input[type=button]:active{color:#222;border-color:#222}.button-danger[disabled],.button-primary[disabled],.button-success[disabled],.button:disabled,.button:disabled:hover,.button[disabled],button[disabled],input[type=submit][disabled],input[type=reset][disabled],input[type=button][disabled]{border:1px solid #E3E3E3;color:#888;cursor:not-allowed}.button.button-primary,button.button-primary,input[type=submit].button-primary,input[type=reset].button-primary,input[type=button].button-primary{border:1px solid #33C3F0;color:#FFF;background-color:#33C3F0;-webkit-transition:background-color .2s;transition:background-color .2s}.button.button-primary:focus,.button.button-primary:hover,button.button-primary:focus,button.button-primary:hover,input[type=submit].button-primary:focus,input[type=submit].button-primary:hover,input[type=reset].button-primary:focus,input[type=reset].button-primary:hover,input[type=button].button-primary:focus,input[type=button].button-primary:hover{color:#FFF;background-color:#1EAEDB;border-color:#1EAEDB}.button.button-primary:active,button.button-primary:active,input[type=submit].button-primary:active,input[type=reset].button-primary:active,input[type=button].button-primary:active{color:#FFF;background-color:#157b9b;border-color:#157b9b}.button.button-primary:disabled,button.button-primary:disabled,input[type=submit].button-primary:disabled,input[type=reset].button-primary:disabled,input[type=button].button-primary:disabled{color:#FFF;cursor:not-allowed;background-color:#7CD9F8;border-color:#7CD9F8}.button.button-success,button.button-success,input[type=submit].button-success,input[type=reset].button-success,input[type=button].button-success{border:1px solid #2ecc71;color:#FFF;background-color:#2ecc71;-webkit-transition:background-color .2s;transition:background-color .2s}.button.button-success:focus,.button.button-success:hover,button.button-success:focus,button.button-success:hover,input[type=submit].button-success:focus,input[type=submit].button-success:hover,input[type=reset].button-success:focus,input[type=reset].button-success:hover,input[type=button].button-success:focus,input[type=button].button-success:hover{color:#FFF;background-color:#27ae60;border-color:#27ae60}.button.button-success:active,button.button-success:active,input[type=submit].button-success:active,input[type=reset].button-success:active,input[type=button].button-success:active{color:#FFF;background-color:#2ecc71;border-color:#2ecc71}.button.button-success:disabled,button.button-success:disabled,input[type=submit].button-success:disabled,input[type=reset].button-success:disabled,input[type=button].button-success:disabled{color:#FFF;cursor:not-allowed;background-color:#82e3aa;border-color:#82e3aa}.button.button-danger,button.button-danger,input[type=submit].button-danger,input[type=reset].button-danger,input[type=button].button-danger{border:1px solid #e74c3c;color:#FFF;background-color:#e74c3c;-webkit-transition:background-color .2s;transition:background-color .2s}.button.button-danger:focus,.button.button-danger:hover,button.button-danger:focus,button.button-danger:hover,input[type=submit].button-danger:focus,input[type=submit].button-danger:hover,input[type=reset].button-danger:focus,input[type=reset].button-danger:hover,input[type=button].button-danger:focus,input[type=button].button-danger:hover{color:#FFF;background-color:#c0392b;border-color:#c0392b}.button.button-danger:active,button.button-danger:active,input[type=submit].button-danger:active,input[type=reset].button-danger:active,input[type=button].button-danger:active{color:#FFF;background-color:#e74c3c;border-color:#e74c3c}.button.button-danger:disabled,button.button-danger:disabled,input[type=submit].button-danger:disabled,input[type=reset].button-danger:disabled,input[type=button].button-danger:disabled{color:#FFF;cursor:not-allowed;background-color:#ee8377;border-color:#ee8377}input[type=number],input[type=date],input[type=search],input[type=text],input[type=tel],input[type=url],input[type=password],input[type=email],select,textarea{padding:.4rem .6rem;background-color:#FFF;border:1px solid #D1D1D1;border-radius:4px;box-shadow:none;-webkit-transition:border .2s;transition:border .2s}input[type=number],input[type=search],input[type=text],input[type=tel],input[type=url],input[type=password],input[type=email],select:not([size]),textarea:not([rows]){height:2.5rem}input[type=number],input[type=date],input[type=search],input[type=text],input[type=tel],input[type=url],input[type=password],input[type=submit],input[type=button],input[type=email],textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{min-height:4rem;padding-top:.4rem;padding-bottom:.4rem;resize:vertical}input[type=number]:focus,input[type=date]:focus,input[type=search]:focus,input[type=text]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=password]:focus,input[type=email]:focus,select:focus,textarea:focus{border:1px solid #33C3F0;outline:0}.has-error,.has-error:focus{border:1px solid #e74c3c!important;outline:0}.has-success,.has-success:focus{border:1px solid #2ecc71!important;outline:0}label,legend{display:block;margin-bottom:.5rem;font-weight:600}fieldset{padding:0;border-width:0}input[type=checkbox],input[type=radio]{display:inline}label>.label-body{display:inline-block;margin-left:.5rem;font-weight:400}ul{list-style:circle inside}ol{list-style:decimal inside}ol,ul{padding-left:0}ol ol,ol ul,ul ol,ul ul{margin:1.5rem 0 1.5rem 3rem;font-size:90%}.card,li{margin-bottom:1rem}.card{border:1px solid #E1E1E1;padding:15px 25px;border-radius:4px;box-shadow:1px 1px 1px #E1E1E1;min-height:160px}.card h1,.card h2,.card h3,.card h4,.card h5,.card h6,.card p{margin-bottom:1.2rem}a.card{display:block;color:#757575;text-decoration:none;-webkit-transition:color .3s,border-color .3s,-webkit-transform .3s;transition:color .3s,border-color .3s,-webkit-transform .3s;transition:color .3s,transform .3s,border-color .3s;transition:color .3s,transform .3s,border-color .3s,-webkit-transform .3s}a.card:active,a.card:hover{color:#000;border-color:#8A8A8A;-webkit-transform:translateX(-2px) translateY(-2px);transform:translateX(-2px) translateY(-2px)}code{padding:.2rem .5rem;margin:0 .2rem;font-size:90%;white-space:nowrap;background:#F1F1F1;border:1px solid #E1E1E1;border-radius:4px}pre>code{display:block;padding:1rem 1.5rem;white-space:pre}@media (max-width:560px){pre>code{white-space:nowrap}}.alert{border-radius:4px;border:1px solid #000;color:#000;background-color:#FFF;padding:10px 15px}.alert.alert-primary{border:1px solid #33C3F0;color:#FFF;background-color:#33C3F0}.alert.alert-success{border:1px solid #2ecc71;color:#FFF;background-color:#2ecc71}.alert.alert-danger{border:1px solid #e74c3c;color:#FFF;background-color:#e74c3c}.table-responsive td,.table-responsive th{white-space:nowrap}table{border-collapse:collapse;-webkit-overflow-scrolling:touch}td,th{padding:.75rem 1rem}th{text-align:left}td{border-bottom:1px solid #E1E1E1}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}tr th{border-bottom:1px solid #000}@media (min-width:560px){td:first-child,th:first-child{padding-left:1rem}}.button,button{margin-bottom:1rem}fieldset,input,select,textarea{margin-bottom:1.5rem}blockquote,dl,figure,form,ol,p,pre,table,ul{margin-bottom:2.5rem}.alert{margin-bottom:1rem}.u-max-full-width{max-width:100%}.u-pull-right{float:right}.u-pull-left{float:left}.u-cf{display:table}.u-center-block{display:block;margin-left:auto;margin-right:auto}.u-center-abs{position:absolute;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.u-text-center{text-align:center!important}.u-text-right{text-align:right!important}.u-text-left{text-align:left!important}.u-text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.u-hide{display:none!important}.u-show{display:block!important}.u-invisible{visibility:hidden!important}.u-visible{visibility:visible!important}.u-img-responsive{display:block;max-width:100%;height:auto}hr{margin-top:3rem;margin-bottom:3.5rem;border-width:0;border-top:1px solid #E1E1E1}.container:after,.row:after{display:table}
A => static/css/tooltip.css +26 -0
@@ 0,0 1,26 @@
+/* Tooltip container */
+.tooltip {
+ position: relative;
+ display: inline-block;
+ border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
+}
+
+/* Tooltip text */
+.tooltip .tooltiptext {
+ visibility: hidden;
+ width: 120px;
+ background-color: black;
+ color: #fff;
+ text-align: center;
+ padding: 5px 0;
+ border-radius: 6px;
+
+ /* Position the tooltip text - see examples below! */
+ position: absolute;
+ z-index: 1;
+}
+
+/* Show the tooltip text when you mouse over the tooltip container */
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+}
No newline at end of file
A => static/font/Laksaman-Bold.woff +0 -0
A => static/font/Laksaman-BoldItalic.woff +0 -0
A => static/font/Laksaman-Italic.woff +0 -0
A => static/font/Laksaman.woff +0 -0
A => static/font/RobotoMono-Latin-ext.woff2 +0 -0
A => static/font/RobotoMono-Latin.woff2 +0 -0
A => static/img/favicon.ico +0 -0
A => static/js/timer.js +22 -0
@@ 0,0 1,22 @@
+function startTimer(duration, display, next) {
+ var timer = duration, minutes, seconds;
+ var end =setInterval(function () {
+ minutes = parseInt(timer / 60, 10)
+ seconds = parseInt(timer % 60, 10);
+
+ minutes = minutes < 10 ? "0" + minutes : minutes;
+ seconds = seconds < 10 ? "0" + seconds : seconds;
+
+ if (timer > 60) {
+ display.textContent = "(" + minutes + ":" + seconds + ")";
+ } else {
+ display.textContent = "(" + seconds + ")";
+ }
+ display.style = "inline";
+
+ if (--timer <= 0) {
+ window.location = next;
+ clearInterval(end);
+ }
+ }, 1000);
+}
No newline at end of file
A => taksa/__init__.py +98 -0
@@ 0,0 1,98 @@
+from collections import deque
+from copy import copy
+
+
+class Taksa:
+ WEEK_DAYS = ('Sunday', 'Monday', 'Tuesday', 'Wednesday_day',
+ 'Saturday', 'Thursday', 'Wednesday_night', 'Friday')
+ TITLES = ('บริวาร', 'อายุ', 'เดช', 'ศรี', 'มูละ', 'อุตสาหะ', 'มนตรี', 'กาลกิณี')
+ GROUPS = (
+ ('อ', 'ะ', 'า', 'ิ', 'ี', 'ุ', 'ู', 'เ', 'แ', 'โ', 'ไ', 'ใ'),
+ ('ก', 'ข', 'ค', 'ฆ', 'ง'),
+ ('จ', 'ฉ', 'ช', 'ฌ', 'ญ'),
+ ('ฎ', 'ฏ', 'ฐ', 'ฑ', 'ฒ', 'ณ'),
+ ('ด', 'ต', 'ถ', 'ท', 'ธ', 'น'),
+ ('บ', 'ป', 'ผ', 'ฝ', 'พ', 'ฟ', 'ภ', 'ม'),
+ ('ย', 'ร', 'ล', 'ว'),
+ ('ศ', 'ษ', 'ส', 'ห', 'ฬ', 'ฮ'),
+ )
+ FRONT_VOWELS = ('เ', 'แ', 'โ', 'ไ', 'ใ')
+
+ def __init__(self, name):
+ self.name = name
+
+ def __check_week_day(self, week_day):
+ if week_day not in self.WEEK_DAYS:
+ raise ValueError(
+ '`week_day` must be one of [%s].' % ','.join(
+ self.WEEK_DAYS
+ )
+ )
+
+ def __list_groups(self, week_day):
+ self.__check_week_day(week_day)
+ week_index = self.WEEK_DAYS.index(week_day)
+ groups = deque(copy(self.GROUPS))
+ if week_index:
+ groups.rotate(week_index * -1)
+ return dict(zip(self.TITLES, groups))
+
+ def check_name(self, week_day):
+ self.__check_week_day(week_day)
+ groups = self.__list_groups(week_day)
+ titles = []
+ for n in self.name:
+ for title in groups.keys():
+ if n in groups[title]:
+ if ('อ' in groups[title]) and (n != 'อ'):
+ n = 'อ' + n if n not in self.FRONT_VOWELS else n + 'อ'
+ titles.append((n, title))
+ return dict(titles)
+
+ def check_name_weekly(self):
+ return {
+ week_day: self.check_name(week_day) for week_day in self.WEEK_DAYS
+ }
+
+
+class Numero:
+ CHARVALUES = {
+ 1: 'ajsกดถทภาำฤุ่',
+ 2: 'bktขชงบปเแู้',
+ 3: 'cluฆตฑฒ๋',
+ 4: 'dmvคธญรษะโัิ',
+ 5: 'enwฉฌณนมหฎฮฬึ',
+ 6: 'foxจลวอใ',
+ 7: 'gpyซศสีื๊',
+ 8: 'hqzผฝพฟย็',
+ 9: 'irฏฐไ์',
+ }
+ EFFECTS = {
+ 'ให้คุณ': [2, 4, 5, 6, 9, 14, 15, 23, 24, 36, 41, 42, 45, 46, 50, 51,
+ 54, 55, 56, 59, 60, 63, 64, 65, 90, 95, 99, 100, 104, 105],
+ 'ปานกลาง': [32, 40, 44, 79, 97, 89, 98],
+ 'กำพร้า': [16, 61, 17, 71, 18, 81, 19, 91, 20, 106, 107, 108, 109],
+ 'เสียหาย': [13, 31, 23, 32, 46, 64, 67, 76, 68, 86]
+ }
+
+ def __init__(self, name):
+ self.name = name
+
+ def __calculate(self):
+ summary = 0
+ for n in self.name:
+ for num in self.CHARVALUES.keys():
+ if n.lower() in self.CHARVALUES[num]:
+ summary += num
+ return summary
+
+ def get_effect(self):
+ summary = self.__calculate()
+ for effect in self.EFFECTS.keys():
+ if summary in self.EFFECTS[effect]:
+ return {'summary':summary, 'effect':effect}
+ return {'summary':summary, 'effect':'-'}
+
+
+class TaksaNumero(Taksa, Numero):
+ pass
A => taksa/settings.py +122 -0
@@ 0,0 1,122 @@
+"""
+Django settings for taksa project.
+
+Generated by 'django-admin startproject' using Django 2.0.4.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.0/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = '20bo3fmk$f1b(zbe!89b!ap3mn%s%8-iu#hrdcg3b4h)342v+o'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'webui',
+]
+
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'taksa.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'taksa.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.0/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.0/howto/static-files/
+
+STATIC_URL = '/static/'
+STATICFILES_DIRS = ['static']
A => taksa/urls.py +31 -0
@@ 0,0 1,31 @@
+"""taksa URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/2.0/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
+from django.conf.urls import url
+from django.contrib import admin
+from django.contrib.staticfiles import views as static_views
+from django.urls import path
+from functools import partial
+from webui import views
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+ url(r'^$', views.main, name='main')
+]
+
+insecured_static_serve = partial(static_views.serve, insecure=True)
+urlpatterns += [
+ url(r'^static/(?P<path>.*)$', insecured_static_serve),
+]
A => taksa/wsgi.py +16 -0
@@ 0,0 1,16 @@
+"""
+WSGI config for taksa project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "taksa.settings")
+
+application = get_wsgi_application()
A => webui/__init__.py +0 -0
A => webui/admin.py +3 -0
@@ 0,0 1,3 @@
+from django.contrib import admin
+
+# Register your models here.
A => webui/apps.py +5 -0
@@ 0,0 1,5 @@
+from django.apps import AppConfig
+
+
+class WebuiConfig(AppConfig):
+ name = 'webui'
A => webui/migrations/__init__.py +0 -0
A => webui/models.py +3 -0
@@ 0,0 1,3 @@
+from django.db import models
+
+# Create your models here.
A => webui/templates/base.html +36 -0
@@ 0,0 1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Taksa Numerology{% if title %} : {{title}}{% endif %}</title>
+ <meta name="description" content="{{description}}">
+ <meta name="author" content="{{author}}">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+{% if debug %}
+ <link rel="stylesheet" href="/static/css/skeleton.css">
+{% else %}
+ <link rel="stylesheet" href="/static/css/skeleton.min.css">
+{% endif %}
+ <link rel="stylesheet" href="/static/css/skeleton-ext.css">
+ <link rel="stylesheet" href="/static/css/normalize.css">
+ <link rel="stylesheet" href="/static/css/font.css">
+ <link rel="stylesheet" href="/static/css/custom.css">
+ <link rel="stylesheet" href="/static/css/tooltip.css">
+ <link rel="icon" href="/static/img/favicon.ico">
+{% block head %}{% endblock %}
+</head>
+<body class="s-size-text">
+ <div>
+ </div>
+ <div class="container">
+ <div class="row">
+ <div class="columns"> </div>
+ </div>
+ <div class="row">
+ <div class="columns">
+ {% block body %}{% endblock %}
+ </div>
+ </div>
+ </div>
+</body>
+</html>
A => webui/templates/main.html +186 -0
@@ 0,0 1,186 @@
+{% extends "base.html" %}
+
+{% block body %}
+<div class="card columns">
+ <div class="alert u-text-center">
+ <strong>ตั้งชื่อตามหลักทักษาและเลขศาสตร์</strong>
+ </div>
+<table class="u-full-width u-text-center">
+<thead class="u-full-width">
+<tr class="columns u-full-width">
+<th class="one-ninth column u-text-center">ชื่อ/เลข</th>
+<th class="one-ninth column u-text-center">อาทิตย์</th>
+<th class="one-ninth column u-text-center">จันทร์</th>
+<th class="one-ninth column u-text-center">อังคาร</th>
+<th class="one-ninth column u-text-center">พุธ (กลางวัน)</th>
+<th class="one-ninth column u-text-center">พุธ (กลางคืน)</th>
+<th class="one-ninth column u-text-center">พฤหัสบดี</th>
+<th class="one-ninth column u-text-center">ศุกร์</th>
+<th class="one-ninth column u-text-center">เสาร์</th>
+</tr>
+</thead>
+<tbody class="u-full-width">
+{% for name in names %}
+<tr class="columns u-full-width">
+ <td class="one-ninth column">{{name.name}} {{name.numero.summary}} ({{name.numero.effect}})</td>
+ <td class="one-ninth column tooltip">
+ {% if name.Sunday %}
+ {{name.name}}
+ {% for k, v in name.Sunday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Sunday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Sunday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Monday %}
+ {{name.name}}
+ {% for k, v in name.Monday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Monday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Monday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Tuesday %}
+ {{name.name}}
+ {% for k, v in name.Tuesday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Tuesday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Tuesday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Wednesday_day %}
+ {{name.name}}
+ {% for k, v in name.Wednesday_day.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Wednesday_day.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Wednesday_day.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Wednesday_night %}
+ {{name.name}}
+ {% for k, v in name.Wednesday_night.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Wednesday_night.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Wednesday_night.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Thursday %}
+ {{name.name}}
+ {% for k, v in name.Thursday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Thursday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Thursday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Friday %}
+ {{name.name}}
+ {% for k, v in name.Friday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Friday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Friday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="one-ninth column tooltip">
+ {% if name.Saturday %}
+ {{name.name}}
+ {% for k, v in name.Saturday.first %}
+ ({{v}})
+ {% endfor %}
+ <div class="tooltiptext">
+ {% for k, v in name.Saturday.first %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ {% for k, v in name.Saturday.rest %}
+ {{k}}:{{v}}<br/>
+ {% endfor %}
+ </div>
+ {% else %}
+
+ {% endif %}
+ </td>
+</tr>
+{% endfor %}
+{% for space in foot_spaces %}
+<tr><td colspan="9"> </td></tr>
+{% endfor %}
+</tbody>
+</table>
+</div>
+<div class="card columns">
+ <form action="{% url 'main' %}" method="post">
+ {% csrf_token %}
+ <textarea class="columns" name="names" rows="5"></textarea>
+ <div class="columns"> </div>
+ <input class="columns" type="submit" value="ตรวจสอบ"/>
+ </form>
+</div>
+{% endblock %}
A => webui/tests.py +3 -0
@@ 0,0 1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
A => webui/views.py +36 -0
@@ 0,0 1,36 @@
+from django.shortcuts import render
+from taksa import TaksaNumero
+
+
+# Create your views here.
+def main(request):
+ context = dict()
+ context['title'] = ''
+ context['user'] = request.user
+ if request.method == 'POST':
+ names = request.POST.get('names')
+ context['names'] = list()
+ max_name_length = 0
+ for name in names.split('\n'):
+ if len(name) > max_name_length:
+ max_name_length = len(name)
+ tn = TaksaNumero(name)
+ weekly = tn.check_name_weekly()
+ weekly_data = dict()
+ for day in weekly:
+ weekly_data[day] = dict()
+ items = [
+ (c, weekly[day][c])
+ for c in weekly[day]
+ if 'กาลกิณี' not in weekly[day].values()
+ ]
+ if items:
+ weekly_data[day]['first'] = items[0:1]
+ weekly_data[day]['rest'] = items[1:]
+ else:
+ weekly_data[day] = None
+ data = {'name':tn.name, 'numero':tn.get_effect()}
+ data.update(weekly_data)
+ context['names'].append(data)
+ context['foot_spaces'] = range(max_name_length)
+ return render(request, 'main.html', context)