├── countbook ├── __init__.py ├── asgi.py ├── routing.py ├── wsgi.py ├── urls.py └── settings.py ├── website ├── __init__.py ├── migrations │ ├── __init__.py │ ├── 0003_auto_20171008_1613.py │ ├── 0005_auto_20171008_1824.py │ ├── 0006_auto_20171008_2048.py │ ├── 0004_auto_20171008_1621.py │ ├── 0002_auto_20171006_1312.py │ └── 0001_initial.py ├── tests.py ├── apps.py ├── models.py ├── urls.py ├── consumers.py ├── templates │ └── index.html └── views.py ├── .gitignore ├── screenshots ├── 0.png ├── 1.png └── 2.png ├── static └── website │ ├── bulma-0.6.0 │ ├── sass │ │ ├── grid │ │ │ ├── _all.sass │ │ │ ├── tiles.sass │ │ │ └── columns.sass │ │ ├── layout │ │ │ ├── _all.sass │ │ │ ├── footer.sass │ │ │ ├── section.sass │ │ │ └── hero.sass │ │ ├── base │ │ │ ├── _all.sass │ │ │ ├── minireset.sass │ │ │ ├── generic.sass │ │ │ └── helpers.sass │ │ ├── utilities │ │ │ ├── animations.sass │ │ │ ├── _all.sass │ │ │ ├── functions.sass │ │ │ ├── controls.sass │ │ │ ├── initial-variables.sass │ │ │ ├── derived-variables.sass │ │ │ └── mixins.sass │ │ ├── components │ │ │ ├── _all.sass │ │ │ ├── media.sass │ │ │ ├── menu.sass │ │ │ ├── card.sass │ │ │ ├── level.sass │ │ │ ├── breadcrumb.sass │ │ │ ├── dropdown.sass │ │ │ ├── message.sass │ │ │ ├── panel.sass │ │ │ ├── modal.sass │ │ │ ├── pagination.sass │ │ │ ├── tabs.sass │ │ │ └── navbar.sass │ │ └── elements │ │ │ ├── _all.sass │ │ │ ├── icon.sass │ │ │ ├── container.sass │ │ │ ├── box.sass │ │ │ ├── other.sass │ │ │ ├── image.sass │ │ │ ├── notification.sass │ │ │ ├── progress.sass │ │ │ ├── title.sass │ │ │ ├── tag.sass │ │ │ ├── table.sass │ │ │ ├── content.sass │ │ │ ├── button.sass │ │ │ └── form.sass │ ├── bulma.sass │ ├── LICENSE │ ├── package.json │ ├── README.md │ └── CHANGELOG.md │ ├── font-awesome-4.7.0 │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── less │ │ ├── fixed-width.less │ │ ├── screen-reader.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── core.less │ │ ├── stacked.less │ │ ├── font-awesome.less │ │ ├── bordered-pulled.less │ │ ├── rotated-flipped.less │ │ ├── path.less │ │ ├── animated.less │ │ └── mixins.less │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _screen-reader.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _core.scss │ │ ├── font-awesome.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── _rotated-flipped.scss │ │ ├── _path.scss │ │ ├── _animated.scss │ │ └── _mixins.scss │ └── HELP-US-OUT.txt │ ├── main.css │ ├── main.js │ ├── tabs.js │ ├── popup.js │ ├── reconnecting-websocket.min.js │ ├── today_tab.js │ └── stats_tab.js ├── README.md ├── server_configs ├── supervisord.conf └── nginx.conf └── manage.py /countbook/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /website/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /website/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.swp 3 | __pycache__ 4 | venv/ 5 | db.sqlite3 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /website/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /screenshots/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/screenshots/0.png -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/screenshots/1.png -------------------------------------------------------------------------------- /screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/screenshots/2.png -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/grid/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "columns.sass" 4 | @import "tiles.sass" 5 | -------------------------------------------------------------------------------- /website/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WebsiteConfig(AppConfig): 5 | name = 'website' 6 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/layout/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "hero.sass" 4 | @import "section.sass" 5 | @import "footer.sass" 6 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/base/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "minireset.sass" 4 | @import "generic.sass" 5 | @import "helpers.sass" 6 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/animations.sass: -------------------------------------------------------------------------------- 1 | @keyframes spinAround 2 | from 3 | transform: rotate(0deg) 4 | to 5 | transform: rotate(359deg) 6 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/static/website/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /countbook/asgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | from channels.asgi import get_channel_layer 3 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "countbook.settings") 4 | channel_layer = get_channel_layer() 5 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergei-bondarenko/countbook/master/static/website/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/layout/footer.sass: -------------------------------------------------------------------------------- 1 | $footer-background-color: $background !default 2 | 3 | .footer 4 | background-color: $footer-background-color 5 | padding: 3rem 1.5rem 6rem 6 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /static/website/main.css: -------------------------------------------------------------------------------- 1 | .tabs-content { 2 | padding-left: 24px; 3 | padding-bottom: 24px; 4 | } 5 | 6 | .field { 7 | margin-top: 10px; 8 | } 9 | 10 | .month { 11 | padding-bottom: 10px; 12 | } 13 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "initial-variables.sass" 4 | @import "functions.sass" 5 | @import "derived-variables.sass" 6 | @import "animations.sass" 7 | @import "mixins.sass" 8 | @import "controls.sass" 9 | -------------------------------------------------------------------------------- /countbook/routing.py: -------------------------------------------------------------------------------- 1 | from channels.routing import route 2 | from website.consumers import ws_message, ws_connect, ws_disconnect 3 | 4 | channel_routing = [ 5 | route('websocket.receive', ws_message), 6 | route('websocket.connect', ws_connect), 7 | route('websocket.disconnect', ws_disconnect), 8 | ] 9 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/bulma.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | /*! bulma.io v0.6.0 | MIT License | github.com/jgthms/bulma */ 3 | @import "sass/utilities/_all" 4 | @import "sass/base/_all" 5 | @import "sass/elements/_all" 6 | @import "sass/components/_all" 7 | @import "sass/grid/_all" 8 | @import "sass/layout/_all" 9 | -------------------------------------------------------------------------------- /website/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | class Operation(models.Model): 4 | name = models.TextField() 5 | show = models.BooleanField() 6 | 7 | class Record(models.Model): 8 | date = models.DateField(auto_now_add=True) 9 | operation = models.ForeignKey(Operation, on_delete=models.CASCADE) 10 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "breadcrumb.sass" 4 | @import "card.sass" 5 | @import "dropdown.sass" 6 | @import "level.sass" 7 | @import "media.sass" 8 | @import "menu.sass" 9 | @import "message.sass" 10 | @import "modal.sass" 11 | @import "navbar.sass" 12 | @import "pagination.sass" 13 | @import "panel.sass" 14 | @import "tabs.sass" 15 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/_all.sass: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | @import "box.sass" 4 | @import "button.sass" 5 | @import "container.sass" 6 | @import "content.sass" 7 | @import "form.sass" 8 | @import "icon.sass" 9 | @import "image.sass" 10 | @import "notification.sass" 11 | @import "progress.sass" 12 | @import "table.sass" 13 | @import "tag.sass" 14 | @import "title.sass" 15 | 16 | @import "other.sass" 17 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/layout/section.sass: -------------------------------------------------------------------------------- 1 | $section-padding: 3rem 1.5rem !default 2 | $section-padding-medium: 9rem 1.5rem !default 3 | $section-padding-large: 18rem 1.5rem !default 4 | 5 | .section 6 | padding: $section-padding 7 | // Responsiveness 8 | +desktop 9 | // Sizes 10 | &.is-medium 11 | padding: $section-padding-medium 12 | &.is-large 13 | padding: $section-padding-large 14 | -------------------------------------------------------------------------------- /website/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from django.views.generic.base import TemplateView 3 | 4 | #from . import views 5 | 6 | app_name = 'website' 7 | urlpatterns = [ 8 | url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'), 9 | # url(r'^$', views.IndexView.as_view(), name='index'), 10 | # url(r'^append_operation/$', views.append_operation, name='append_operation'), 11 | ] 12 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /countbook/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for countbook project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "countbook.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # countbook 2 | 3 | ## Description 4 | 5 | A simple one-page site for recording different daily statistics, e.g. product sales, performed operations at work, etc. 6 | 7 | ## Technology stack 8 | 9 | - Debian 10 | - Nginx 11 | - Supervisord 12 | - Daphne 13 | - Django + IPC channel backend 14 | - SQLite 15 | - Vue.js 16 | - ReconnectingWebSocket 17 | - Bulma + Font Awesome + Chart.js 18 | 19 | ## Screenshots 20 | 21 | ![](screenshots/0.png?raw=true) 22 | ![](screenshots/1.png?raw=true) 23 | ![](screenshots/2.png?raw=true) 24 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/website/main.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | let ws = new ReconnectingWebSocket('ws://' + window.location.host); 4 | let bus = new Vue(); 5 | 6 | new Vue({ 7 | el: '#root', 8 | 9 | mounted: function() { 10 | ws.onmessage = (e) => { 11 | let response = JSON.parse(e.data); 12 | bus.$emit('websocket_message', response); 13 | } 14 | ws.onopen = () => { 15 | bus.$emit('websocket_ready'); 16 | } 17 | if (ws.readyState == WebSocket.OPEN) ws.onopen(); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /website/migrations/0003_auto_20171008_1613.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.6 on 2017-10-08 13:13 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('website', '0002_auto_20171006_1312'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='record', 17 | name='date', 18 | field=models.DateField(), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /website/migrations/0005_auto_20171008_1824.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.6 on 2017-10-08 15:24 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('website', '0004_auto_20171008_1621'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RenameField( 16 | model_name='record', 17 | old_name='operation_id', 18 | new_name='operation', 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /website/migrations/0006_auto_20171008_2048.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.6 on 2017-10-08 17:48 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('website', '0005_auto_20171008_1824'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RenameField( 16 | model_name='operation', 17 | old_name='operation_name', 18 | new_name='name', 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /website/migrations/0004_auto_20171008_1621.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.6 on 2017-10-08 13:21 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('website', '0003_auto_20171008_1613'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='record', 17 | name='date', 18 | field=models.DateField(auto_now_add=True), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/icon.sass: -------------------------------------------------------------------------------- 1 | $icon-dimensions: 1.5rem !default 2 | $icon-dimensions-small: 1rem !default 3 | $icon-dimensions-medium: 2rem !default 4 | $icon-dimensions-large: 3rem !default 5 | 6 | .icon 7 | align-items: center 8 | display: inline-flex 9 | justify-content: center 10 | height: $icon-dimensions 11 | width: $icon-dimensions 12 | // Sizes 13 | &.is-small 14 | height: $icon-dimensions-small 15 | width: $icon-dimensions-small 16 | &.is-medium 17 | height: $icon-dimensions-medium 18 | width: $icon-dimensions-medium 19 | &.is-large 20 | height: $icon-dimensions-large 21 | width: $icon-dimensions-large 22 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/container.sass: -------------------------------------------------------------------------------- 1 | .container 2 | margin: 0 auto 3 | position: relative 4 | +from($desktop) 5 | max-width: $desktop - (2 * $gap) 6 | width: $desktop - (2 * $gap) 7 | &.is-fluid 8 | margin-left: $gap 9 | margin-right: $gap 10 | max-width: none 11 | width: auto 12 | +until($widescreen) 13 | &.is-widescreen 14 | max-width: $widescreen - (2 * $gap) 15 | width: auto 16 | +until($fullhd) 17 | &.is-fullhd 18 | max-width: $fullhd - (2 * $gap) 19 | width: auto 20 | +from($widescreen) 21 | max-width: $widescreen - (2 * $gap) 22 | width: $widescreen - (2 * $gap) 23 | +from($fullhd) 24 | max-width: $fullhd - (2 * $gap) 25 | width: $fullhd - (2 * $gap) -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /website/migrations/0002_auto_20171006_1312.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-10-06 10:12 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('website', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RenameModel( 16 | old_name='Operations', 17 | new_name='Operation', 18 | ), 19 | migrations.RenameModel( 20 | old_name='Records', 21 | new_name='Record', 22 | ), 23 | migrations.RenameField( 24 | model_name='record', 25 | old_name='operation', 26 | new_name='operation_id', 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/box.sass: -------------------------------------------------------------------------------- 1 | $box-color: $text !default 2 | $box-background-color: $white !default 3 | $box-radius: $radius-large !default 4 | $box-shadow: 0 2px 3px rgba($black, 0.1), 0 0 0 1px rgba($black, 0.1) !default 5 | $box-padding: 1.25rem !default 6 | 7 | $box-link-hover-shadow: 0 2px 3px rgba($black, 0.1), 0 0 0 1px $link !default 8 | $box-link-active-shadow: inset 0 1px 2px rgba($black, 0.2), 0 0 0 1px $link !default 9 | 10 | .box 11 | +block 12 | background-color: $box-background-color 13 | border-radius: $box-radius 14 | box-shadow: $box-shadow 15 | color: $box-color 16 | display: block 17 | padding: $box-padding 18 | 19 | a.box 20 | &:hover, 21 | &:focus 22 | box-shadow: $box-link-hover-shadow 23 | &:active 24 | box-shadow: $box-link-active-shadow 25 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/other.sass: -------------------------------------------------------------------------------- 1 | .block 2 | +block 3 | 4 | .delete 5 | +delete 6 | 7 | .heading 8 | display: block 9 | font-size: 11px 10 | letter-spacing: 1px 11 | margin-bottom: 5px 12 | text-transform: uppercase 13 | 14 | .highlight 15 | +block 16 | font-weight: $weight-normal 17 | max-width: 100% 18 | overflow: hidden 19 | padding: 0 20 | pre 21 | overflow: auto 22 | max-width: 100% 23 | 24 | .loader 25 | +loader 26 | 27 | .number 28 | align-items: center 29 | background-color: $background 30 | border-radius: 290486px 31 | display: inline-flex 32 | font-size: $size-medium 33 | height: 2em 34 | justify-content: center 35 | margin-right: 1.5rem 36 | min-width: 2.5em 37 | padding: 0.25rem 0.5rem 38 | text-align: center 39 | vertical-align: top 40 | -------------------------------------------------------------------------------- /countbook/urls.py: -------------------------------------------------------------------------------- 1 | """countbook URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.11/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import include, url 17 | 18 | urlpatterns = [ 19 | url(r'^', include('website.urls')), 20 | ] 21 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/image.sass: -------------------------------------------------------------------------------- 1 | $dimensions: 16 24 32 48 64 96 128 !default 2 | 3 | .image 4 | display: block 5 | position: relative 6 | img 7 | display: block 8 | height: auto 9 | width: 100% 10 | // Ratio 11 | &.is-square, 12 | &.is-1by1, 13 | &.is-4by3, 14 | &.is-3by2, 15 | &.is-16by9, 16 | &.is-2by1 17 | img 18 | +overlay 19 | height: 100% 20 | width: 100% 21 | &.is-square, 22 | &.is-1by1 23 | padding-top: 100% 24 | &.is-4by3 25 | padding-top: 75% 26 | &.is-3by2 27 | padding-top: 66.6666% 28 | &.is-16by9 29 | padding-top: 56.25% 30 | &.is-2by1 31 | padding-top: 50% 32 | // Sizes 33 | @each $dimension in $dimensions 34 | &.is-#{$dimension}x#{$dimension} 35 | height: $dimension * 1px 36 | width: $dimension * 1px 37 | -------------------------------------------------------------------------------- /server_configs/supervisord.conf: -------------------------------------------------------------------------------- 1 | [program:Daphne] 2 | environment=PATH="/path/to/venv/bin" 3 | command=/path/to/venv/bin/daphne -p 8080 -b 0.0.0.0 countbook.asgi:channel_layer 4 | directory=/path/to/project 5 | autostart=true 6 | autorestart=true 7 | redirect_stderr=true 8 | stdout_logfile=/var/log/supervisor/daphne.out.log 9 | logfile_maxbytes=50MB 10 | logfile_backups=10 11 | loglevel=debug 12 | user=countbook 13 | 14 | [program:Worker] 15 | environment=PATH="/path/to/venv/bin" 16 | command=/path/to/venv/bin/python manage.py runworker 17 | directory=/path/to/project 18 | process_name=%(program_name)s_%(process_num)02d 19 | numprocs=2 20 | autostart=true 21 | autorestart=true 22 | redirect_stderr=true 23 | stdout_logfile=/var/log/supervisor/workers.out.log 24 | logfile_maxbytes=50MB 25 | logfile_backups=10 26 | loglevel=debug 27 | user=countbook 28 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/grid/tiles.sass: -------------------------------------------------------------------------------- 1 | .tile 2 | align-items: stretch 3 | display: block 4 | flex-basis: 0 5 | flex-grow: 1 6 | flex-shrink: 1 7 | min-height: min-content 8 | // Modifiers 9 | &.is-ancestor 10 | margin-left: -0.75rem 11 | margin-right: -0.75rem 12 | margin-top: -0.75rem 13 | &:last-child 14 | margin-bottom: -0.75rem 15 | &:not(:last-child) 16 | margin-bottom: 0.75rem 17 | &.is-child 18 | margin: 0 !important 19 | &.is-parent 20 | padding: 0.75rem 21 | &.is-vertical 22 | flex-direction: column 23 | & > .tile.is-child:not(:last-child) 24 | margin-bottom: 1.5rem !important 25 | // Responsiveness 26 | +tablet 27 | &:not(.is-child) 28 | display: flex 29 | @for $i from 1 through 12 30 | &.is-#{$i} 31 | flex: none 32 | width: ($i / 12) * 100% 33 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "countbook.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/notification.sass: -------------------------------------------------------------------------------- 1 | $notification-background-color: $background !default 2 | $notification-radius: $radius !default 3 | $notification-padding: 1.25rem 2.5rem 1.25rem 1.5rem !default 4 | 5 | .notification 6 | +block 7 | background-color: $notification-background-color 8 | border-radius: $notification-radius 9 | padding: $notification-padding 10 | position: relative 11 | a:not(.button) 12 | color: currentColor 13 | text-decoration: underline 14 | strong 15 | color: currentColor 16 | code, 17 | pre 18 | background: $white 19 | pre code 20 | background: transparent 21 | & > .delete 22 | position: absolute 23 | right: 0.5em 24 | top: 0.5em 25 | .title, 26 | .subtitle, 27 | .content 28 | color: currentColor 29 | // Colors 30 | @each $name, $pair in $colors 31 | $color: nth($pair, 1) 32 | $color-invert: nth($pair, 2) 33 | &.is-#{$name} 34 | background-color: $color 35 | color: $color-invert 36 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/functions.sass: -------------------------------------------------------------------------------- 1 | @function powerNumber($number, $exp) 2 | $value: 1 3 | @if $exp > 0 4 | @for $i from 1 through $exp 5 | $value: $value * $number 6 | @else if $exp < 0 7 | @for $i from 1 through -$exp 8 | $value: $value / $number 9 | @return $value 10 | 11 | @function colorLuminance($color) 12 | $color-rgb: ('red': red($color),'green': green($color),'blue': blue($color)) 13 | @each $name, $value in $color-rgb 14 | $adjusted: 0 15 | $value: $value / 255 16 | @if $value < 0.03928 17 | $value: $value / 12.92 18 | @else 19 | $value: ($value + .055) / 1.055 20 | $value: powerNumber($value, 2) 21 | $color-rgb: map-merge($color-rgb, ($name: $value)) 22 | @return (map-get($color-rgb, 'red') * .2126) + (map-get($color-rgb, 'green') * .7152) + (map-get($color-rgb, 'blue') * .0722) 23 | 24 | @function findColorInvert($color) 25 | @if (colorLuminance($color) > 0.55) 26 | @return rgba(#000, 0.7) 27 | @else 28 | @return #fff 29 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/media.sass: -------------------------------------------------------------------------------- 1 | .media 2 | align-items: flex-start 3 | display: flex 4 | text-align: left 5 | .content:not(:last-child) 6 | margin-bottom: 0.75rem 7 | .media 8 | border-top: 1px solid rgba($border, 0.5) 9 | display: flex 10 | padding-top: 0.75rem 11 | .content:not(:last-child), 12 | .control:not(:last-child) 13 | margin-bottom: 0.5rem 14 | .media 15 | padding-top: 0.5rem 16 | & + .media 17 | margin-top: 0.5rem 18 | & + .media 19 | border-top: 1px solid rgba($border, 0.5) 20 | margin-top: 1rem 21 | padding-top: 1rem 22 | // Sizes 23 | &.is-large 24 | & + .media 25 | margin-top: 1.5rem 26 | padding-top: 1.5rem 27 | 28 | .media-left, 29 | .media-right 30 | flex-basis: auto 31 | flex-grow: 0 32 | flex-shrink: 0 33 | 34 | .media-left 35 | margin-right: 1rem 36 | 37 | .media-right 38 | margin-left: 1rem 39 | 40 | .media-content 41 | flex-basis: auto 42 | flex-grow: 1 43 | flex-shrink: 1 44 | text-align: left 45 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/progress.sass: -------------------------------------------------------------------------------- 1 | $progress-bar-background-color: $border !default 2 | $progress-value-background-color: $text !default 3 | 4 | .progress 5 | +block 6 | -moz-appearance: none 7 | -webkit-appearance: none 8 | border: none 9 | border-radius: 290486px 10 | display: block 11 | height: $size-normal 12 | overflow: hidden 13 | padding: 0 14 | width: 100% 15 | &::-webkit-progress-bar 16 | background-color: $progress-bar-background-color 17 | &::-webkit-progress-value 18 | background-color: $progress-value-background-color 19 | &::-moz-progress-bar 20 | background-color: $progress-value-background-color 21 | // Colors 22 | @each $name, $pair in $colors 23 | $color: nth($pair, 1) 24 | &.is-#{$name} 25 | &::-webkit-progress-value 26 | background-color: $color 27 | &::-moz-progress-bar 28 | background-color: $color 29 | // Sizes 30 | &.is-small 31 | height: $size-small 32 | &.is-medium 33 | height: $size-medium 34 | &.is-large 35 | height: $size-large 36 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/base/minireset.sass: -------------------------------------------------------------------------------- 1 | /*! minireset.css v0.0.2 | MIT License | github.com/jgthms/minireset.css */ 2 | // Blocks 3 | html, 4 | body, 5 | p, 6 | ol, 7 | ul, 8 | li, 9 | dl, 10 | dt, 11 | dd, 12 | blockquote, 13 | figure, 14 | fieldset, 15 | legend, 16 | textarea, 17 | pre, 18 | iframe, 19 | hr, 20 | h1, 21 | h2, 22 | h3, 23 | h4, 24 | h5, 25 | h6 26 | margin: 0 27 | padding: 0 28 | 29 | // Headings 30 | h1, 31 | h2, 32 | h3, 33 | h4, 34 | h5, 35 | h6 36 | font-size: 100% 37 | font-weight: normal 38 | 39 | // List 40 | ul 41 | list-style: none 42 | 43 | // Form 44 | button, 45 | input, 46 | select, 47 | textarea 48 | margin: 0 49 | 50 | // Box sizing 51 | html 52 | box-sizing: border-box 53 | 54 | * 55 | box-sizing: inherit 56 | &:before, 57 | &:after 58 | box-sizing: inherit 59 | 60 | // Media 61 | img, 62 | embed, 63 | object, 64 | audio, 65 | video 66 | max-width: 100% 67 | 68 | // Iframe 69 | iframe 70 | border: 0 71 | 72 | // Table 73 | table 74 | border-collapse: collapse 75 | border-spacing: 0 76 | 77 | td, 78 | th 79 | padding: 0 80 | text-align: left 81 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Jeremy Thomas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /website/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-10-06 09:01 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | initial = True 12 | 13 | dependencies = [ 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Operations', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('operation_name', models.TextField()), 22 | ('show', models.BooleanField()), 23 | ], 24 | ), 25 | migrations.CreateModel( 26 | name='Records', 27 | fields=[ 28 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 29 | ('date', models.DateField(auto_now_add=True)), 30 | ('operation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='website.Operations')), 31 | ], 32 | ), 33 | ] 34 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/controls.sass: -------------------------------------------------------------------------------- 1 | $control-radius: $radius !default 2 | $control-radius-small: $radius-small !default 3 | 4 | $control-padding-vertical: calc(0.375em - 1px) !default 5 | $control-padding-horizontal: calc(0.625em - 1px) !default 6 | 7 | =control 8 | -moz-appearance: none 9 | -webkit-appearance: none 10 | align-items: center 11 | border: 1px solid transparent 12 | border-radius: $control-radius 13 | box-shadow: none 14 | display: inline-flex 15 | font-size: $size-normal 16 | height: 2.25em 17 | justify-content: flex-start 18 | line-height: 1.5 19 | padding-bottom: $control-padding-vertical 20 | padding-left: $control-padding-horizontal 21 | padding-right: $control-padding-horizontal 22 | padding-top: $control-padding-vertical 23 | position: relative 24 | vertical-align: top 25 | // States 26 | &:focus, 27 | &.is-focused, 28 | &:active, 29 | &.is-active 30 | outline: none 31 | &[disabled] 32 | cursor: not-allowed 33 | 34 | // The controls sizes use mixins so they can be used at different breakpoints 35 | =control-small 36 | border-radius: $control-radius-small 37 | font-size: $size-small 38 | =control-medium 39 | font-size: $size-medium 40 | =control-large 41 | font-size: $size-large 42 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/menu.sass: -------------------------------------------------------------------------------- 1 | $menu-item-color: $text !default 2 | $menu-item-radius: $radius-small !default 3 | $menu-item-hover-color: $text-strong !default 4 | $menu-item-hover-background-color: $background !default 5 | $menu-item-active-color: $link-invert !default 6 | $menu-item-active-background-color: $link !default 7 | 8 | $menu-list-border-left: 1px solid $border !default 9 | 10 | $menu-label-color: $text-light !default 11 | 12 | .menu 13 | font-size: $size-normal 14 | // Sizes 15 | &.is-small 16 | font-size: $size-small 17 | &.is-medium 18 | font-size: $size-medium 19 | &.is-large 20 | font-size: $size-large 21 | 22 | .menu-list 23 | line-height: 1.25 24 | a 25 | border-radius: $menu-item-radius 26 | color: $menu-item-color 27 | display: block 28 | padding: 0.5em 0.75em 29 | &:hover 30 | background-color: $menu-item-hover-background-color 31 | color: $menu-item-hover-color 32 | // Modifiers 33 | &.is-active 34 | background-color: $menu-item-active-background-color 35 | color: $menu-item-active-color 36 | li 37 | ul 38 | border-left: $menu-list-border-left 39 | margin: 0.75em 40 | padding-left: 0.75em 41 | 42 | .menu-label 43 | color: $menu-label-color 44 | font-size: 0.75em 45 | letter-spacing: 0.1em 46 | text-transform: uppercase 47 | &:not(:first-child) 48 | margin-top: 1em 49 | &:not(:last-child) 50 | margin-bottom: 1em 51 | -------------------------------------------------------------------------------- /website/consumers.py: -------------------------------------------------------------------------------- 1 | import json 2 | from channels import Group 3 | from .views import * 4 | 5 | def ws_message(message): 6 | request = json.loads(message.content['text']) 7 | if request['type'] == 'append_record': 8 | append_record(request['params']['id']) 9 | Group('general').send({ 10 | 'text': get_day() 11 | }) 12 | elif request['type'] == 'get_day': 13 | year = request['params']['year'] 14 | month = request['params']['month'] 15 | day = request['params']['day'] 16 | Group('general').send({ 17 | 'text': get_day(year, month, day) 18 | }) 19 | elif request['type'] == 'append_operation': 20 | append_operation(request['params']['name']) 21 | Group('general').send({ 22 | 'text': get_day() 23 | }) 24 | elif request['type'] == 'get_month': 25 | year = request['params']['year'] 26 | month = request['params']['month'] 27 | message.reply_channel.send({ 28 | 'text': get_month(year, month) 29 | }) 30 | elif request['type'] == 'del_operation': 31 | del_operation(request['params']['id']) 32 | Group('general').send({ 33 | 'text': get_day() 34 | }) 35 | 36 | def ws_connect(message): 37 | message.reply_channel.send({'accept': True}) 38 | Group('general').add(message.reply_channel) 39 | 40 | def ws_disconnect(message): 41 | Group('general').discard(message.reply_channel) 42 | -------------------------------------------------------------------------------- /static/website/tabs.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Vue.component('tabs', { 4 | template: ` 5 |
6 |
7 | 12 |
13 |
14 | 15 |
16 |
17 | `, 18 | 19 | delimiters: ['((', '))'], 20 | 21 | data() { 22 | return { 23 | tabs: [] 24 | }; 25 | }, 26 | 27 | created() { 28 | this.tabs = this.$children; 29 | }, 30 | 31 | methods: { 32 | selectTab(selectedTab) { 33 | this.tabs.forEach(tab => { 34 | tab.isActive = (tab.name == selectedTab.name); 35 | }) 36 | } 37 | } 38 | }); 39 | 40 | Vue.component('tab', { 41 | template: ` 42 |
43 | 44 |
45 | `, 46 | 47 | props: { 48 | name: { 49 | required: true 50 | }, 51 | selected: { 52 | default: false 53 | } 54 | }, 55 | 56 | data() { 57 | return { 58 | isActive: false 59 | }; 60 | }, 61 | 62 | mounted() { 63 | this.isActive = this.selected; 64 | } 65 | }); 66 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/title.sass: -------------------------------------------------------------------------------- 1 | $title-color: $grey-darker !default 2 | $title-size: $size-3 !default 3 | $title-weight: $weight-semibold !default 4 | $title-strong-color: inherit !default 5 | $title-strong-weight: inherit !default 6 | 7 | $subtitle-color: $grey-dark !default 8 | $subtitle-size: $size-5 !default 9 | $subtitle-weight: $weight-normal !default 10 | $subtitle-strong-color: $grey-darker !default 11 | $subtitle-strong-weight: $weight-semibold !default 12 | 13 | .title, 14 | .subtitle 15 | +block 16 | word-break: break-word 17 | em, 18 | span 19 | font-weight: inherit 20 | .tag 21 | vertical-align: middle 22 | 23 | .title 24 | color: $title-color 25 | font-size: $title-size 26 | font-weight: $title-weight 27 | line-height: 1.125 28 | strong 29 | color: $title-strong-color 30 | font-weight: $title-strong-weight 31 | & + .highlight 32 | margin-top: -0.75rem 33 | &:not(.is-spaced) + .subtitle 34 | margin-top: -1.5rem 35 | // Sizes 36 | @each $size in $sizes 37 | $i: index($sizes, $size) 38 | &.is-#{$i} 39 | font-size: $size 40 | 41 | .subtitle 42 | color: $subtitle-color 43 | font-size: $subtitle-size 44 | font-weight: $subtitle-weight 45 | line-height: 1.25 46 | strong 47 | color: $subtitle-strong-color 48 | font-weight: $subtitle-strong-weight 49 | &:not(.is-spaced) + .title 50 | margin-top: -1.5rem 51 | // Sizes 52 | @each $size in $sizes 53 | $i: index($sizes, $size) 54 | &.is-#{$i} 55 | font-size: $size 56 | -------------------------------------------------------------------------------- /server_configs/nginx.conf: -------------------------------------------------------------------------------- 1 | user www-data www-data; 2 | worker_processes 2; 3 | 4 | events 5 | { 6 | worker_connections 4096; 7 | use epoll; 8 | } 9 | 10 | http 11 | { 12 | include /etc/nginx/mime.types; 13 | default_type application/octet-stream; 14 | 15 | log_format main '$remote_addr - $remote_user [$time_local] $status ' 16 | '"$request" $body_bytes_sent "$http_referer" ' 17 | '"$http_user_agent" "$http_x_forwarded_for"' sendfile on; 18 | 19 | server_tokens off; 20 | keepalive_timeout 65; 21 | tcp_nopush on; 22 | tcp_nodelay on; 23 | 24 | gzip on; 25 | gzip_comp_level 4; 26 | gzip_buffers 4 8k; 27 | gzip_min_length 1024; 28 | gzip_types image/svg+xml application/x-javascript application/javascript text/css application/rss+xml text/plain text/xml; 29 | 30 | server { 31 | listen 80; 32 | client_max_body_size 20M; 33 | access_log /var/log/nginx/access.log; 34 | error_log /var/log/nginx/error.log info; 35 | 36 | location /static { 37 | alias /h/countbook/htdocs/static; 38 | } 39 | 40 | location / { 41 | proxy_pass http://YOUR_SERVER_IP_HERE:8080/; 42 | proxy_http_version 1.1; 43 | proxy_set_header Upgrade $http_upgrade; 44 | proxy_set_header Connection "upgrade"; 45 | 46 | proxy_redirect off; 47 | proxy_set_header Host $host; 48 | proxy_set_header X-Real-IP $remote_addr; 49 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 50 | proxy_set_header X-Forwarded-Host $server_name; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/card.sass: -------------------------------------------------------------------------------- 1 | $card-color: $text !default 2 | $card-background-color: $white !default 3 | $card-shadow: 0 2px 3px rgba($black, 0.1), 0 0 0 1px rgba($black, 0.1) !default 4 | 5 | $card-header-color: $text-strong !default 6 | $card-header-shadow: 0 1px 2px rgba($black, 0.1) !default 7 | $card-header-weight: $weight-bold !default 8 | 9 | $card-footer-border-top: 1px solid $border !default 10 | 11 | .card 12 | background-color: $card-background-color 13 | box-shadow: $card-shadow 14 | color: $card-color 15 | max-width: 100% 16 | position: relative 17 | 18 | .card-header 19 | align-items: stretch 20 | box-shadow: $card-header-shadow 21 | display: flex 22 | 23 | .card-header-title 24 | align-items: center 25 | color: $card-header-color 26 | display: flex 27 | flex-grow: 1 28 | font-weight: $card-header-weight 29 | padding: 0.75rem 30 | &.is-centered 31 | justify-content: center 32 | 33 | .card-header-icon 34 | align-items: center 35 | cursor: pointer 36 | display: flex 37 | justify-content: center 38 | padding: 0.75rem 39 | 40 | .card-image 41 | display: block 42 | position: relative 43 | 44 | .card-content 45 | padding: 1.5rem 46 | 47 | .card-footer 48 | border-top: $card-footer-border-top 49 | align-items: stretch 50 | display: flex 51 | 52 | .card-footer-item 53 | align-items: center 54 | display: flex 55 | flex-basis: 0 56 | flex-grow: 1 57 | flex-shrink: 0 58 | justify-content: center 59 | padding: 0.75rem 60 | &:not(:last-child) 61 | border-right: $card-footer-border-top 62 | 63 | // Combinations 64 | 65 | .card 66 | .media:not(:last-child) 67 | margin-bottom: 0.75rem 68 | -------------------------------------------------------------------------------- /website/templates/index.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | Countbook 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/level.sass: -------------------------------------------------------------------------------- 1 | .level 2 | +block 3 | align-items: center 4 | justify-content: space-between 5 | code 6 | border-radius: $radius 7 | img 8 | display: inline-block 9 | vertical-align: top 10 | // Modifiers 11 | &.is-mobile 12 | display: flex 13 | .level-left, 14 | .level-right 15 | display: flex 16 | .level-left + .level-right 17 | margin-top: 0 18 | .level-item 19 | &:not(:last-child) 20 | margin-bottom: 0 21 | &:not(.is-narrow) 22 | flex-grow: 1 23 | margin-right: 0.75rem 24 | // Responsiveness 25 | +tablet 26 | display: flex 27 | & > .level-item 28 | &:not(.is-narrow) 29 | flex-grow: 1 30 | 31 | .level-item 32 | align-items: center 33 | display: flex 34 | flex-basis: auto 35 | flex-grow: 0 36 | flex-shrink: 0 37 | justify-content: center 38 | .title, 39 | .subtitle 40 | margin-bottom: 0 41 | // Responsiveness 42 | +mobile 43 | &:not(:last-child) 44 | margin-bottom: 0.75rem 45 | 46 | .level-left, 47 | .level-right 48 | flex-basis: auto 49 | flex-grow: 0 50 | flex-shrink: 0 51 | .level-item 52 | // Modifiers 53 | &.is-flexible 54 | flex-grow: 1 55 | // Responsiveness 56 | +tablet 57 | &:not(:last-child) 58 | margin-right: 0.75rem 59 | 60 | .level-left 61 | align-items: center 62 | justify-content: flex-start 63 | // Responsiveness 64 | +mobile 65 | & + .level-right 66 | margin-top: 1.5rem 67 | +tablet 68 | display: flex 69 | 70 | .level-right 71 | align-items: center 72 | justify-content: flex-end 73 | // Responsiveness 74 | +tablet 75 | display: flex 76 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /static/website/font-awesome-4.7.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/breadcrumb.sass: -------------------------------------------------------------------------------- 1 | $breadcrumb-item-color: $link !default 2 | $breadcrumb-item-hover-color: $link-hover !default 3 | $breadcrumb-item-active-color: $text-strong !default 4 | 5 | $breadcrumb-item-separator-color: $text !default 6 | 7 | .breadcrumb 8 | +block 9 | +unselectable 10 | align-items: stretch 11 | display: flex 12 | font-size: $size-normal 13 | overflow: hidden 14 | overflow-x: auto 15 | white-space: nowrap 16 | a 17 | align-items: center 18 | color: $breadcrumb-item-color 19 | display: flex 20 | justify-content: center 21 | padding: 0.5em 0.75em 22 | &:hover 23 | color: $breadcrumb-item-hover-color 24 | li 25 | align-items: center 26 | display: flex 27 | &:first-child a 28 | padding-left: 0 29 | &.is-active 30 | a 31 | color: $breadcrumb-item-active-color 32 | cursor: default 33 | pointer-events: none 34 | & + li::before 35 | color: $breadcrumb-item-separator-color 36 | content: "\0002f" 37 | ul, ol 38 | align-items: center 39 | display: flex 40 | flex-grow: 1 41 | flex-shrink: 0 42 | justify-content: flex-start 43 | .icon 44 | &:first-child 45 | margin-right: 0.5em 46 | &:last-child 47 | margin-left: 0.5em 48 | // Alignment 49 | &.is-centered 50 | ol, ul 51 | justify-content: center 52 | &.is-right 53 | ol, ul 54 | justify-content: flex-end 55 | // Sizes 56 | &.is-small 57 | font-size: $size-small 58 | &.is-medium 59 | font-size: $size-medium 60 | &.is-large 61 | font-size: $size-large 62 | // Styles 63 | &.has-arrow-separator 64 | li + li::before 65 | content: "\02192" 66 | &.has-bullet-separator 67 | li + li::before 68 | content: "\02022" 69 | &.has-dot-separator 70 | li + li::before 71 | content: "\000b7" 72 | &.has-succeeds-separator 73 | li + li::before 74 | content: "\0227B" 75 | -------------------------------------------------------------------------------- /static/website/popup.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Vue.component('popup', { 4 | template: ` 5 | 22 | `, 23 | 24 | delimiters: ['((', '))'], 25 | 26 | data() { 27 | return { 28 | title: null, 29 | text: null, 30 | type: null, 31 | id: null, 32 | show: false 33 | }; 34 | }, 35 | 36 | mounted: function() { 37 | bus.$on('show_popup', (params) => { 38 | this.show = true; 39 | this.title = params['title']; 40 | this.text = params['text']; 41 | this.type = params['type']; 42 | if (this.type === 'delete') { 43 | this.id = params['id']; 44 | } 45 | }) 46 | }, 47 | 48 | methods: { 49 | close() { 50 | this.show = false; 51 | }, 52 | 53 | del() { 54 | ws.send( 55 | JSON.stringify({ 56 | type: 'del_operation', 57 | params: { 58 | id: this.id 59 | } 60 | }) 61 | ); 62 | this.show = false; 63 | } 64 | } 65 | }); 66 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/dropdown.sass: -------------------------------------------------------------------------------- 1 | $dropdown-content-background-color: $white !default 2 | $dropdown-content-arrow: $link !default 3 | $dropdown-content-offset: 4px !default 4 | $dropdown-content-radius: $radius !default 5 | $dropdown-content-shadow: 0 2px 3px rgba($black, 0.1), 0 0 0 1px rgba($black, 0.1) !default 6 | $dropdown-content-z: 20 !default 7 | 8 | $dropdown-item-color: $grey-dark !default 9 | $dropdown-item-hover-color: $black !default 10 | $dropdown-item-hover-background-color: $background !default 11 | $dropdown-item-active-color: $link-invert !default 12 | $dropdown-item-active-background-color: $link !default 13 | 14 | $dropdown-divider-background-color: $border !default 15 | 16 | .dropdown 17 | display: inline-flex 18 | position: relative 19 | vertical-align: top 20 | &.is-active, 21 | &.is-hoverable:hover 22 | .dropdown-menu 23 | display: block 24 | &.is-right 25 | .dropdown-menu 26 | left: auto 27 | right: 0 28 | &.is-up 29 | .dropdown-menu 30 | bottom: 100% 31 | padding-bottom: $dropdown-content-offset 32 | padding-top: unset 33 | top: auto 34 | 35 | .dropdown-menu 36 | display: none 37 | left: 0 38 | min-width: 12rem 39 | padding-top: $dropdown-content-offset 40 | position: absolute 41 | top: 100% 42 | z-index: $dropdown-content-z 43 | 44 | .dropdown-content 45 | background-color: $dropdown-content-background-color 46 | border-radius: $dropdown-content-radius 47 | box-shadow: $dropdown-content-shadow 48 | padding-bottom: 0.5rem 49 | padding-top: 0.5rem 50 | 51 | .dropdown-item 52 | color: $dropdown-item-color 53 | display: block 54 | font-size: 0.875rem 55 | line-height: 1.5 56 | padding: 0.375rem 1rem 57 | position: relative 58 | 59 | a.dropdown-item 60 | padding-right: 3rem 61 | white-space: nowrap 62 | &:hover 63 | background-color: $dropdown-item-hover-background-color 64 | color: $dropdown-item-hover-color 65 | &.is-active 66 | background-color: $dropdown-item-active-background-color 67 | color: $dropdown-item-active-color 68 | 69 | .dropdown-divider 70 | background-color: $dropdown-divider-background-color 71 | border: none 72 | display: block 73 | height: 1px 74 | margin: 0.5rem 0 75 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/initial-variables.sass: -------------------------------------------------------------------------------- 1 | // Colors 2 | 3 | $black: hsl(0, 0%, 4%) !default 4 | $black-bis: hsl(0, 0%, 7%) !default 5 | $black-ter: hsl(0, 0%, 14%) !default 6 | 7 | $grey-darker: hsl(0, 0%, 21%) !default 8 | $grey-dark: hsl(0, 0%, 29%) !default 9 | $grey: hsl(0, 0%, 48%) !default 10 | $grey-light: hsl(0, 0%, 71%) !default 11 | $grey-lighter: hsl(0, 0%, 86%) !default 12 | 13 | $white-ter: hsl(0, 0%, 96%) !default 14 | $white-bis: hsl(0, 0%, 98%) !default 15 | $white: hsl(0, 0%, 100%) !default 16 | 17 | $orange: hsl(14, 100%, 53%) !default 18 | $yellow: hsl(48, 100%, 67%) !default 19 | $green: hsl(141, 71%, 48%) !default 20 | $turquoise: hsl(171, 100%, 41%) !default 21 | $cyan: hsl(204, 86%, 53%) !default 22 | $blue: hsl(217, 71%, 53%) !default 23 | $purple: hsl(271, 100%, 71%) !default 24 | $red: hsl(348, 100%, 61%) !default 25 | 26 | // Typography 27 | 28 | $family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !default 29 | $family-monospace: monospace !default 30 | $render-mode: optimizeLegibility !default 31 | 32 | $size-1: 3rem !default 33 | $size-2: 2.5rem !default 34 | $size-3: 2rem !default 35 | $size-4: 1.5rem !default 36 | $size-5: 1.25rem !default 37 | $size-6: 1rem !default 38 | $size-7: 0.75rem !default 39 | 40 | $weight-light: 300 !default 41 | $weight-normal: 400 !default 42 | $weight-medium: 500 !default 43 | $weight-semibold: 600 !default 44 | $weight-bold: 700 !default 45 | 46 | // Responsiveness 47 | 48 | // The container horizontal gap, which acts as the offset for breakpoints 49 | $gap: 32px !default 50 | // 960, 1152, and 1344 have been chosen because they are divisible by both 12 and 16 51 | $tablet: 769px !default 52 | // 960px container + 3rem 53 | $desktop: 960px + (2 * $gap) !default 54 | // 1152px container + 3rem 55 | $widescreen: 1152px + (2 * $gap) !default 56 | // 1344px container + 3rem 57 | $fullhd: 1344px + (2 * $gap) !default 58 | 59 | // Miscellaneous 60 | 61 | $easing: ease-out !default 62 | $radius-small: 2px !default 63 | $radius: 3px !default 64 | $radius-large: 5px !default 65 | $speed: 86ms !default 66 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/tag.sass: -------------------------------------------------------------------------------- 1 | $tag-background-color: $background !default 2 | $tag-color: $text !default 3 | $tag-radius: $radius !default 4 | $tag-delete-margin: 1px !default 5 | 6 | .tags 7 | align-items: center 8 | display: flex 9 | flex-wrap: wrap 10 | justify-content: flex-start 11 | .tag 12 | margin-bottom: 0.5rem 13 | &:not(:last-child) 14 | margin-right: 0.5rem 15 | &:last-child 16 | margin-bottom: -0.5rem 17 | &:not(:last-child) 18 | margin-bottom: 1rem 19 | &.has-addons 20 | .tag 21 | margin-right: 0 22 | &:not(:first-child) 23 | border-bottom-left-radius: 0 24 | border-top-left-radius: 0 25 | &:not(:last-child) 26 | border-bottom-right-radius: 0 27 | border-top-right-radius: 0 28 | 29 | .tag:not(body) 30 | align-items: center 31 | background-color: $tag-background-color 32 | border-radius: $tag-radius 33 | color: $tag-color 34 | display: inline-flex 35 | font-size: $size-small 36 | height: 2em 37 | justify-content: center 38 | line-height: 1.5 39 | padding-left: 0.75em 40 | padding-right: 0.75em 41 | white-space: nowrap 42 | .delete 43 | margin-left: 0.25em 44 | margin-right: -0.375em 45 | // Colors 46 | @each $name, $pair in $colors 47 | $color: nth($pair, 1) 48 | $color-invert: nth($pair, 2) 49 | &.is-#{$name} 50 | background-color: $color 51 | color: $color-invert 52 | // Sizes 53 | &.is-medium 54 | font-size: $size-normal 55 | &.is-large 56 | font-size: $size-medium 57 | // Modifiers 58 | &.is-delete 59 | margin-left: $tag-delete-margin 60 | padding: 0 61 | position: relative 62 | width: 2em 63 | &:before, 64 | &:after 65 | background-color: currentColor 66 | content: "" 67 | display: block 68 | left: 50% 69 | position: absolute 70 | top: 50% 71 | transform: translateX(-50%) translateY(-50%) rotate(45deg) 72 | transform-origin: center center 73 | &:before 74 | height: 1px 75 | width: 50% 76 | &:after 77 | height: 50% 78 | width: 1px 79 | &:hover, 80 | &:focus 81 | background-color: darken($tag-background-color, 5%) 82 | &:active 83 | background-color: darken($tag-background-color, 10%) 84 | &.is-rounded 85 | border-radius: 290486px 86 | 87 | a.tag 88 | &:hover 89 | text-decoration: underline 90 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/message.sass: -------------------------------------------------------------------------------- 1 | $message-background-color: $background !default 2 | $message-radius: $radius !default 3 | 4 | $message-header-background-color: $text !default 5 | $message-header-color: $text-invert !default 6 | $message-header-padding: 0.5em 0.75em !default 7 | $message-header-radius: $radius !default 8 | 9 | $message-body-border: 1px solid $border !default 10 | $message-body-color: $text !default 11 | $message-body-padding: 1em 1.25em !default 12 | $message-body-radius: $radius !default 13 | 14 | $message-body-pre-background-color: $white !default 15 | $message-body-pre-code-background-color: transparent !default 16 | 17 | .message 18 | +block 19 | background-color: $message-background-color 20 | border-radius: $message-radius 21 | font-size: $size-normal 22 | strong 23 | color: currentColor 24 | a:not(.button):not(.tag) 25 | color: currentColor 26 | text-decoration: underline 27 | // Sizes 28 | &.is-small 29 | font-size: $size-small 30 | &.is-medium 31 | font-size: $size-medium 32 | &.is-large 33 | font-size: $size-large 34 | // Colors 35 | @each $name, $pair in $colors 36 | $color: nth($pair, 1) 37 | $color-invert: nth($pair, 2) 38 | $color-lightning: max((100% - lightness($color)) - 2%, 0%) 39 | $color-luminance: colorLuminance($color) 40 | $darken-percentage: $color-luminance * 70% 41 | $desaturate-percentage: $color-luminance * 30% 42 | &.is-#{$name} 43 | background-color: lighten($color, $color-lightning) 44 | .message-header 45 | background-color: $color 46 | color: $color-invert 47 | .message-body 48 | border-color: $color 49 | color: desaturate(darken($color, $darken-percentage), $desaturate-percentage) 50 | 51 | .message-header 52 | align-items: center 53 | background-color: $message-header-background-color 54 | border-radius: $message-header-radius $message-header-radius 0 0 55 | color: $message-header-color 56 | display: flex 57 | justify-content: space-between 58 | line-height: 1.25 59 | padding: $message-header-padding 60 | position: relative 61 | .delete 62 | flex-grow: 0 63 | flex-shrink: 0 64 | margin-left: 0.75em 65 | & + .message-body 66 | border-top-left-radius: 0 67 | border-top-right-radius: 0 68 | border-top: none 69 | 70 | .message-body 71 | border: $message-body-border 72 | border-radius: $message-body-radius 73 | color: $message-body-color 74 | padding: $message-body-padding 75 | code, 76 | pre 77 | background-color: $message-body-pre-background-color 78 | pre code 79 | background-color: $message-body-pre-code-background-color 80 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/derived-variables.sass: -------------------------------------------------------------------------------- 1 | $primary: $turquoise !default 2 | 3 | $info: $cyan !default 4 | $success: $green !default 5 | $warning: $yellow !default 6 | $danger: $red !default 7 | 8 | $light: $white-ter !default 9 | $dark: $grey-darker !default 10 | 11 | // Invert colors 12 | 13 | $orange-invert: findColorInvert($orange) !default 14 | $yellow-invert: findColorInvert($yellow) !default 15 | $green-invert: findColorInvert($green) !default 16 | $turquoise-invert: findColorInvert($turquoise) !default 17 | $cyan-invert: findColorInvert($cyan) !default 18 | $blue-invert: findColorInvert($blue) !default 19 | $purple-invert: findColorInvert($purple) !default 20 | $red-invert: findColorInvert($red) !default 21 | 22 | $primary-invert: $turquoise-invert !default 23 | $info-invert: $cyan-invert !default 24 | $success-invert: $green-invert !default 25 | $warning-invert: $yellow-invert !default 26 | $danger-invert: $red-invert !default 27 | $light-invert: $dark !default 28 | $dark-invert: $light !default 29 | 30 | // General colors 31 | 32 | $background: $white-ter !default 33 | 34 | $border: $grey-lighter !default 35 | $border-hover: $grey-light !default 36 | 37 | // Text colors 38 | 39 | $text: $grey-dark !default 40 | $text-invert: findColorInvert($text) !default 41 | $text-light: $grey !default 42 | $text-strong: $grey-darker !default 43 | 44 | // Code colors 45 | 46 | $code: $red !default 47 | $code-background: $background !default 48 | 49 | $pre: $text !default 50 | $pre-background: $background !default 51 | 52 | // Link colors 53 | 54 | $link: $blue !default 55 | $link-invert: $blue-invert !default 56 | $link-visited: $purple !default 57 | 58 | $link-hover: $grey-darker !default 59 | $link-hover-border: $grey-light !default 60 | 61 | $link-focus: $grey-darker !default 62 | $link-focus-border: $blue !default 63 | 64 | $link-active: $grey-darker !default 65 | $link-active-border: $grey-dark !default 66 | 67 | // Typography 68 | 69 | $family-primary: $family-sans-serif !default 70 | $family-code: $family-monospace !default 71 | 72 | $size-small: $size-7 !default 73 | $size-normal: $size-6 !default 74 | $size-medium: $size-5 !default 75 | $size-large: $size-4 !default 76 | 77 | // Lists and maps 78 | 79 | $colors: ("white": ($white, $black), "black": ($black, $white), "light": ($light, $light-invert), "dark": ($dark, $dark-invert), "primary": ($primary, $primary-invert), "link": ($link, $link-invert), "info": ($info, $info-invert), "success": ($success, $success-invert), "warning": ($warning, $warning-invert), "danger": ($danger, $danger-invert)) !default 80 | $shades: ("black-bis": $black-bis, "black-ter": $black-ter, "grey-darker": $grey-darker, "grey-dark": $grey-dark, "grey": $grey, "grey-light": $grey-light, "grey-lighter": $grey-lighter, "white-ter": $white-ter, "white-bis": $white-bis) !default 81 | 82 | $sizes: $size-1 $size-2 $size-3 $size-4 $size-5 $size-6 $size-7 !default 83 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/base/generic.sass: -------------------------------------------------------------------------------- 1 | $body-background-color: #fff !default 2 | $body-size: 16px !default 3 | $body-rendering: optimizeLegibility !default 4 | $body-family: $family-primary !default 5 | $body-color: $text !default 6 | $body-weight: $weight-normal !default 7 | $body-line-height: 1.5 !default 8 | 9 | $code-family: $family-code !default 10 | $code-padding: 0.25em 0.5em 0.25em !default 11 | $code-weight: normal !default 12 | $code-size: 0.875em !default 13 | 14 | $hr-background-color: $border !default 15 | $hr-height: 1px !default 16 | $hr-margin: 1.5rem 0 !default 17 | 18 | $strong-color: $text-strong !default 19 | $strong-weight: $weight-bold !default 20 | 21 | html 22 | background-color: $body-background-color 23 | font-size: $body-size 24 | -moz-osx-font-smoothing: grayscale 25 | -webkit-font-smoothing: antialiased 26 | min-width: 300px 27 | overflow-x: hidden 28 | overflow-y: scroll 29 | text-rendering: $body-rendering 30 | text-size-adjust: 100% 31 | 32 | article, 33 | aside, 34 | figure, 35 | footer, 36 | header, 37 | hgroup, 38 | section 39 | display: block 40 | 41 | body, 42 | button, 43 | input, 44 | select, 45 | textarea 46 | font-family: $body-family 47 | 48 | code, 49 | pre 50 | -moz-osx-font-smoothing: auto 51 | -webkit-font-smoothing: auto 52 | font-family: $code-family 53 | 54 | body 55 | color: $body-color 56 | font-size: 1rem 57 | font-weight: $body-weight 58 | line-height: $body-line-height 59 | 60 | // Inline 61 | 62 | a 63 | color: $link 64 | cursor: pointer 65 | text-decoration: none 66 | strong 67 | color: currentColor 68 | &:hover 69 | color: $link-hover 70 | 71 | code 72 | background-color: $code-background 73 | color: $code 74 | font-size: $code-size 75 | font-weight: $code-weight 76 | padding: $code-padding 77 | 78 | hr 79 | background-color: $hr-background-color 80 | border: none 81 | display: block 82 | height: $hr-height 83 | margin: $hr-margin 84 | 85 | img 86 | height: auto 87 | max-width: 100% 88 | 89 | input[type="checkbox"], 90 | input[type="radio"] 91 | vertical-align: baseline 92 | 93 | small 94 | font-size: 0.875em 95 | 96 | span 97 | font-style: inherit 98 | font-weight: inherit 99 | 100 | strong 101 | color: $strong-color 102 | font-weight: $strong-weight 103 | 104 | // Block 105 | 106 | pre 107 | +overflow-touch 108 | background-color: $pre-background 109 | color: $pre 110 | font-size: 0.875em 111 | overflow-x: auto 112 | padding: 1.25rem 1.5rem 113 | white-space: pre 114 | word-wrap: normal 115 | code 116 | background-color: transparent 117 | color: currentColor 118 | font-size: 1em 119 | padding: 0 120 | 121 | table 122 | td, 123 | th 124 | text-align: left 125 | vertical-align: top 126 | th 127 | color: $text-strong 128 | -------------------------------------------------------------------------------- /static/website/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/table.sass: -------------------------------------------------------------------------------- 1 | $table-color: $grey-darker !default 2 | $table-background-color: $white !default 3 | 4 | $table-cell-border: 1px solid $grey-lighter !default 5 | $table-cell-border-width: 0 0 1px !default 6 | $table-cell-padding: 0.5em 0.75em !default 7 | $table-cell-heading-color: $text-strong !default 8 | 9 | $table-head-cell-border-width: 0 0 2px !default 10 | $table-head-cell-color: $text-strong !default 11 | $table-foot-cell-border-width: 2px 0 0 !default 12 | $table-foot-cell-color: $text-strong !default 13 | 14 | $table-row-hover-background-color: $white-bis !default 15 | 16 | $table-row-active-background-color: $primary !default 17 | $table-row-active-color: $primary-invert !default 18 | 19 | $table-striped-row-even-background-color: $white-bis !default 20 | $table-striped-row-even-hover-background-color: $white-ter !default 21 | 22 | .table 23 | background-color: $table-background-color 24 | color: $table-color 25 | margin-bottom: 1.5rem 26 | td, 27 | th 28 | border: $table-cell-border 29 | border-width: $table-cell-border-width 30 | padding: $table-cell-padding 31 | vertical-align: top 32 | // Colors 33 | @each $name, $pair in $colors 34 | $color: nth($pair, 1) 35 | $color-invert: nth($pair, 2) 36 | &.is-#{$name} 37 | background-color: $color 38 | border-color: $color 39 | color: $color-invert 40 | // Modifiers 41 | &.is-narrow 42 | white-space: nowrap 43 | width: 1% 44 | th 45 | color: $table-cell-heading-color 46 | text-align: left 47 | tr 48 | &.is-selected 49 | background-color: $table-row-active-background-color 50 | color: $table-row-active-color 51 | a, 52 | strong 53 | color: currentColor 54 | td, 55 | th 56 | border-color: $table-row-active-color 57 | color: currentColor 58 | thead 59 | td, 60 | th 61 | border-width: $table-head-cell-border-width 62 | color: $table-head-cell-color 63 | tfoot 64 | td, 65 | th 66 | border-width: $table-foot-cell-border-width 67 | color: $table-foot-cell-color 68 | tbody 69 | tr 70 | &:last-child 71 | td, 72 | th 73 | border-bottom-width: 0 74 | // Modifiers 75 | &.is-bordered 76 | td, 77 | th 78 | border-width: 1px 79 | tr 80 | &:last-child 81 | td, 82 | th 83 | border-bottom-width: 1px 84 | &.is-fullwidth 85 | width: 100% 86 | &.is-hoverable 87 | tbody 88 | tr 89 | &:hover 90 | background-color: $table-row-hover-background-color 91 | &.is-striped 92 | tbody 93 | tr:not(.is-selected) 94 | &:hover 95 | background-color: $table-striped-row-even-hover-background-color 96 | &.is-narrow 97 | td, 98 | th 99 | padding: 0.25em 0.5em 100 | &.is-striped 101 | tbody 102 | tr:not(.is-selected) 103 | &:nth-child(even) 104 | background-color: $table-striped-row-even-background-color 105 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/panel.sass: -------------------------------------------------------------------------------- 1 | $panel-item-border: 1px solid $border !default 2 | 3 | $panel-heading-background-color: $background !default 4 | $panel-heading-color: $text-strong !default 5 | $panel-heading-line-height: 1.25 !default 6 | $panel-heading-padding: 0.5em 0.75em !default 7 | $panel-heading-radius: $radius !default 8 | $panel-heading-size: 1.25em !default 9 | $panel-heading-weight: $weight-light !default 10 | 11 | $panel-tab-border-bottom: 1px solid $border !default 12 | $panel-tab-active-border-bottom-color: $link-active-border !default 13 | $panel-tab-active-color: $link-active !default 14 | 15 | $panel-list-item-color: $text !default 16 | $panel-list-item-hover-color: $link !default 17 | 18 | $panel-block-color: $text-strong !default 19 | $panel-block-hover-background-color: $background !default 20 | $panel-block-active-border-left-color: $link !default 21 | $panel-block-active-color: $link-active !default 22 | $panel-block-active-icon-color: $link !default 23 | 24 | $panel-icon-color: $text-light !default 25 | 26 | .panel 27 | font-size: $size-normal 28 | &:not(:last-child) 29 | margin-bottom: 1.5rem 30 | 31 | .panel-heading, 32 | .panel-tabs, 33 | .panel-block 34 | border-bottom: $panel-item-border 35 | border-left: $panel-item-border 36 | border-right: $panel-item-border 37 | &:first-child 38 | border-top: $panel-item-border 39 | 40 | .panel-heading 41 | background-color: $panel-heading-background-color 42 | border-radius: $panel-heading-radius $panel-heading-radius 0 0 43 | color: $panel-heading-color 44 | font-size: $panel-heading-size 45 | font-weight: $panel-heading-weight 46 | line-height: $panel-heading-line-height 47 | padding: $panel-heading-padding 48 | 49 | .panel-tabs 50 | align-items: flex-end 51 | display: flex 52 | font-size: 0.875em 53 | justify-content: center 54 | a 55 | border-bottom: $panel-tab-border-bottom 56 | margin-bottom: -1px 57 | padding: 0.5em 58 | // Modifiers 59 | &.is-active 60 | border-bottom-color: $panel-tab-active-border-bottom-color 61 | color: $panel-tab-active-color 62 | 63 | .panel-list 64 | a 65 | color: $panel-list-item-color 66 | &:hover 67 | color: $panel-list-item-hover-color 68 | 69 | .panel-block 70 | align-items: center 71 | color: $panel-block-color 72 | display: flex 73 | justify-content: flex-start 74 | padding: 0.5em 0.75em 75 | input[type="checkbox"] 76 | margin-right: 0.75em 77 | & > .control 78 | flex-grow: 1 79 | flex-shrink: 1 80 | width: 100% 81 | &.is-wrapped 82 | flex-wrap: wrap 83 | &.is-active 84 | border-left-color: $panel-block-active-border-left-color 85 | color: $panel-block-active-color 86 | .panel-icon 87 | color: $panel-block-active-icon-color 88 | 89 | a.panel-block, 90 | label.panel-block 91 | cursor: pointer 92 | &:hover 93 | background-color: $panel-block-hover-background-color 94 | 95 | .panel-icon 96 | +fa(14px, 1em) 97 | color: $panel-icon-color 98 | margin-right: 0.75em 99 | .fa 100 | font-size: inherit 101 | line-height: inherit 102 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/modal.sass: -------------------------------------------------------------------------------- 1 | $modal-z: 20 !default 2 | 3 | $modal-background-background-color: rgba($black, 0.86) !default 4 | 5 | $modal-content-width: 640px !default 6 | $modal-content-margin-mobile: 20px !default 7 | $modal-content-spacing-mobile: 160px !default 8 | $modal-content-spacing-tablet: 40px !default 9 | 10 | $modal-close-dimensions: 40px !default 11 | $modal-close-right: 20px !default 12 | $modal-close-top: 20px !default 13 | 14 | $modal-card-spacing: 40px !default 15 | 16 | $modal-card-head-background-color: $background !default 17 | $modal-card-head-border-bottom: 1px solid $border !default 18 | $modal-card-head-padding: 20px !default 19 | $modal-card-head-radius: $radius-large !default 20 | 21 | $modal-card-title-color: $text-strong !default 22 | $modal-card-title-line-height: 1 !default 23 | $modal-card-title-size: $size-4 !default 24 | 25 | $modal-card-foot-radius: $radius-large !default 26 | $modal-card-foot-border-top: 1px solid $border !default 27 | 28 | $modal-card-body-background-color: $white !default 29 | $modal-card-body-padding: 20px !default 30 | 31 | .modal 32 | +overlay 33 | align-items: center 34 | display: none 35 | justify-content: center 36 | overflow: hidden 37 | position: fixed 38 | z-index: $modal-z 39 | // Modifiers 40 | &.is-active 41 | display: flex 42 | 43 | .modal-background 44 | +overlay 45 | background-color: $modal-background-background-color 46 | 47 | .modal-content, 48 | .modal-card 49 | margin: 0 $modal-content-margin-mobile 50 | max-height: calc(100vh - #{$modal-content-spacing-mobile}) 51 | overflow: auto 52 | position: relative 53 | width: 100% 54 | // Responsiveness 55 | +tablet 56 | margin: 0 auto 57 | max-height: calc(100vh - #{$modal-content-spacing-tablet}) 58 | width: $modal-content-width 59 | 60 | .modal-close 61 | +delete 62 | background: none 63 | height: $modal-close-dimensions 64 | position: fixed 65 | right: $modal-close-right 66 | top: $modal-close-top 67 | width: $modal-close-dimensions 68 | 69 | .modal-card 70 | display: flex 71 | flex-direction: column 72 | max-height: calc(100vh - #{$modal-card-spacing}) 73 | overflow: hidden 74 | 75 | .modal-card-head, 76 | .modal-card-foot 77 | align-items: center 78 | background-color: $modal-card-head-background-color 79 | display: flex 80 | flex-shrink: 0 81 | justify-content: flex-start 82 | padding: $modal-card-head-padding 83 | position: relative 84 | 85 | .modal-card-head 86 | border-bottom: $modal-card-head-border-bottom 87 | border-top-left-radius: $modal-card-head-radius 88 | border-top-right-radius: $modal-card-head-radius 89 | 90 | .modal-card-title 91 | color: $modal-card-title-color 92 | flex-grow: 1 93 | flex-shrink: 0 94 | font-size: $modal-card-title-size 95 | line-height: $modal-card-title-line-height 96 | 97 | .modal-card-foot 98 | border-bottom-left-radius: $modal-card-foot-radius 99 | border-bottom-right-radius: $modal-card-foot-radius 100 | border-top: $modal-card-foot-border-top 101 | .button 102 | &:not(:last-child) 103 | margin-right: 10px 104 | 105 | .modal-card-body 106 | +overflow-touch 107 | background-color: $modal-card-body-background-color 108 | flex-grow: 1 109 | flex-shrink: 1 110 | overflow: auto 111 | padding: $modal-card-body-padding 112 | -------------------------------------------------------------------------------- /website/views.py: -------------------------------------------------------------------------------- 1 | import json 2 | import datetime 3 | import calendar 4 | from django.db.models import Count 5 | 6 | from .models import Operation, Record 7 | 8 | def get_day(year=None, month=None, day=None): 9 | ''' 10 | Returns day statistics 11 | ''' 12 | if year == None and month == None and day == None: 13 | date = datetime.datetime.now() 14 | else: 15 | date = datetime.datetime(year, month, day) 16 | 17 | day_records = Record.objects.all()\ 18 | .filter(date=date)\ 19 | .values('operation')\ 20 | .order_by()\ 21 | .annotate(count=Count('operation')) 22 | 23 | day_records = {rec['operation']: {'count': rec['count']} 24 | for rec in day_records} 25 | 26 | operations = {op.id: {'name': op.name, 'show': op.show} 27 | for op in Operation.objects.all()} 28 | 29 | result = {'type': 'get_day', 'data': []} 30 | 31 | for opkey, opvalue in operations.items(): 32 | try: 33 | result['data'].append({ 34 | 'id': opkey, 35 | 'name': opvalue['name'], 36 | 'show': opvalue['show'], 37 | 'count': day_records[opkey]['count'] 38 | }) 39 | except: 40 | result['data'].append({ 41 | 'id': opkey, 42 | 'name': opvalue['name'], 43 | 'show': opvalue['show'], 44 | 'count': 0 45 | }) 46 | 47 | result['data'] = sorted(result['data'], key=lambda k: k['name']) 48 | result = json.dumps(result) 49 | return result 50 | 51 | def append_record(id): 52 | ''' 53 | Appends a record to the database 54 | ''' 55 | record = Record(operation=Operation.objects.get(id=id)) 56 | record.save() 57 | 58 | def append_operation(name): 59 | ''' 60 | Appends an operation to the database 61 | ''' 62 | record = Operation(show=True, name=name) 63 | record.save() 64 | 65 | def get_month(year, month): 66 | ''' 67 | Returns month statistics per each day 68 | ''' 69 | start_day = 1 70 | end_day = calendar.monthrange(year, month)[1] 71 | 72 | all_operations = Operation.objects.all() 73 | all_records = Record.objects.all()\ 74 | .filter(date__year=year, date__month=month) 75 | 76 | stats = [] 77 | 78 | for op in all_operations: 79 | day_records = all_records\ 80 | .filter(operation_id=op.id)\ 81 | .values('date')\ 82 | .order_by()\ 83 | .annotate(count=Count('date')) 84 | if day_records: 85 | # Skip operation if it has not had records in this month 86 | cur_op = dict() 87 | cur_op = { 88 | 'name': op.name, 89 | 'stats': { 90 | rec['date'].day: rec['count'] 91 | for rec in day_records 92 | }, 93 | 'id': op.id 94 | } 95 | for day in range(start_day, end_day + 1): 96 | # Append days with zero operation count 97 | if not day in cur_op['stats']: 98 | cur_op['stats'][day] = 0 99 | stats.append(cur_op) 100 | 101 | result = {'type': 'get_month', 'data': stats} 102 | return json.dumps(result) 103 | 104 | def del_operation(id): 105 | ''' 106 | Deletes an operation with all associated recors 107 | ''' 108 | op = Operation.objects.get(id=id) 109 | op.delete() 110 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_args": [ 3 | [ 4 | { 5 | "raw": "bulma@0.6.0", 6 | "scope": null, 7 | "escapedName": "bulma", 8 | "name": "bulma", 9 | "rawSpec": "0.6.0", 10 | "spec": "0.6.0", 11 | "type": "version" 12 | }, 13 | "/Users/jthomas/Desktop" 14 | ] 15 | ], 16 | "_from": "bulma@0.6.0", 17 | "_id": "bulma@0.6.0", 18 | "_inCache": true, 19 | "_location": "/bulma", 20 | "_nodeVersion": "6.11.0", 21 | "_npmOperationalInternal": { 22 | "host": "s3://npm-registry-packages", 23 | "tmp": "tmp/bulma-0.6.0.tgz_1507632062609_0.9745779144577682" 24 | }, 25 | "_npmUser": { 26 | "name": "jgthms", 27 | "email": "bbxdesign@gmail.com" 28 | }, 29 | "_npmVersion": "3.10.10", 30 | "_phantomChildren": {}, 31 | "_requested": { 32 | "raw": "bulma@0.6.0", 33 | "scope": null, 34 | "escapedName": "bulma", 35 | "name": "bulma", 36 | "rawSpec": "0.6.0", 37 | "spec": "0.6.0", 38 | "type": "version" 39 | }, 40 | "_requiredBy": [ 41 | "#USER" 42 | ], 43 | "_resolved": "https://registry.npmjs.org/bulma/-/bulma-0.6.0.tgz", 44 | "_shasum": "4f5c5de582810d11aa0cfb1f30aec8a792d0d92c", 45 | "_shrinkwrap": null, 46 | "_spec": "bulma@0.6.0", 47 | "_where": "/Users/jthomas/Desktop", 48 | "author": { 49 | "name": "Jeremy Thomas", 50 | "email": "bbxdesign@gmail.com", 51 | "url": "http://jgthms.com" 52 | }, 53 | "bugs": { 54 | "url": "https://github.com/jgthms/bulma/issues" 55 | }, 56 | "dependencies": {}, 57 | "description": "Modern CSS framework based on Flexbox", 58 | "devDependencies": { 59 | "autoprefixer": "^7.1.1", 60 | "node-sass": "^4.5.3", 61 | "postcss-cli": "^4.1.0", 62 | "rimraf": "^2.6.1" 63 | }, 64 | "directories": {}, 65 | "dist": { 66 | "shasum": "4f5c5de582810d11aa0cfb1f30aec8a792d0d92c", 67 | "tarball": "https://registry.npmjs.org/bulma/-/bulma-0.6.0.tgz" 68 | }, 69 | "files": [ 70 | "css", 71 | "sass", 72 | "bulma.sass", 73 | "LICENSE", 74 | "README.md" 75 | ], 76 | "gitHead": "c39183cf474b99fb1c6b2dba8e0219a58d68c5be", 77 | "homepage": "http://bulma.io", 78 | "keywords": [ 79 | "css", 80 | "sass", 81 | "flexbox", 82 | "responsive", 83 | "framework" 84 | ], 85 | "license": "MIT", 86 | "main": "bulma.sass", 87 | "maintainers": [ 88 | { 89 | "name": "jgthms", 90 | "email": "bbxdesign@gmail.com" 91 | } 92 | ], 93 | "name": "bulma", 94 | "optionalDependencies": {}, 95 | "readme": "ERROR: No README data found!", 96 | "repository": { 97 | "type": "git", 98 | "url": "git+https://github.com/jgthms/bulma.git" 99 | }, 100 | "scripts": { 101 | "build": "npm run build-clean && npm run build-sass && npm run build-autoprefix", 102 | "build-autoprefix": "postcss --use autoprefixer --map false --output css/bulma.css css/bulma.css", 103 | "build-clean": "rimraf css", 104 | "build-sass": "node-sass --output-style expanded --source-map true bulma.sass css/bulma.css", 105 | "deploy": "npm run build && npm run docs", 106 | "docs": "npm run docs-sass && npm run docs-autoprefix", 107 | "docs-autoprefix": "postcss --use autoprefixer --map false --output docs/css/bulma-docs.css docs/css/bulma-docs.css", 108 | "docs-sass": "node-sass --output-style expanded docs/bulma-docs.sass docs/css/bulma-docs.css", 109 | "start": "npm run build-sass -- --watch", 110 | "start-docs": "npm run docs-sass -- --watch", 111 | "start-test": "npm run test-sass -- --watch", 112 | "test-sass": "node-sass --output-style expanded docs/bulma-test.sass docs/css/bulma-test.css" 113 | }, 114 | "style": "bulma/css/bulma.css", 115 | "version": "0.6.0" 116 | } 117 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/pagination.sass: -------------------------------------------------------------------------------- 1 | $pagination-color: $grey-darker !default 2 | $pagination-border-color: $grey-lighter !default 3 | $pagination-margin: -0.25rem !default 4 | 5 | $pagination-hover-color: $link-hover !default 6 | $pagination-hover-border-color: $link-hover-border !default 7 | 8 | $pagination-focus-color: $link-focus !default 9 | $pagination-focus-border-color: $link-focus-border !default 10 | 11 | $pagination-active-color: $link-active !default 12 | $pagination-active-border-color: $link-active-border !default 13 | 14 | $pagination-disabled-color: $grey !default 15 | $pagination-disabled-background-color: $grey-lighter !default 16 | $pagination-disabled-border-color: $grey-lighter !default 17 | 18 | $pagination-current-color: $link-invert !default 19 | $pagination-current-background-color: $link !default 20 | $pagination-current-border-color: $link !default 21 | 22 | $pagination-ellipsis-color: $grey-light !default 23 | 24 | $pagination-shadow-inset: inset 0 1px 2px rgba($black, 0.2) 25 | 26 | .pagination 27 | font-size: $size-normal 28 | margin: $pagination-margin 29 | // Sizes 30 | &.is-small 31 | font-size: $size-small 32 | &.is-medium 33 | font-size: $size-medium 34 | &.is-large 35 | font-size: $size-large 36 | 37 | .pagination, 38 | .pagination-list 39 | align-items: center 40 | display: flex 41 | justify-content: center 42 | text-align: center 43 | 44 | .pagination-previous, 45 | .pagination-next, 46 | .pagination-link, 47 | .pagination-ellipsis 48 | +control 49 | +unselectable 50 | font-size: 1em 51 | padding-left: 0.5em 52 | padding-right: 0.5em 53 | justify-content: center 54 | margin: 0.25rem 55 | text-align: center 56 | 57 | .pagination-previous, 58 | .pagination-next, 59 | .pagination-link 60 | border-color: $pagination-border-color 61 | min-width: 2.25em 62 | &:hover 63 | border-color: $pagination-hover-border-color 64 | color: $pagination-hover-color 65 | &:focus 66 | border-color: $pagination-focus-border-color 67 | &:active 68 | box-shadow: $pagination-shadow-inset 69 | &[disabled] 70 | background-color: $pagination-disabled-background-color 71 | border-color: $pagination-disabled-border-color 72 | box-shadow: none 73 | color: $pagination-disabled-color 74 | opacity: 0.5 75 | 76 | .pagination-previous, 77 | .pagination-next 78 | padding-left: 0.75em 79 | padding-right: 0.75em 80 | white-space: nowrap 81 | 82 | .pagination-link 83 | &.is-current 84 | background-color: $pagination-current-background-color 85 | border-color: $pagination-current-border-color 86 | color: $pagination-current-color 87 | 88 | .pagination-ellipsis 89 | color: $pagination-ellipsis-color 90 | pointer-events: none 91 | 92 | .pagination-list 93 | flex-wrap: wrap 94 | 95 | +mobile 96 | .pagination 97 | flex-wrap: wrap 98 | .pagination-previous, 99 | .pagination-next 100 | flex-grow: 1 101 | flex-shrink: 1 102 | .pagination-list 103 | li 104 | flex-grow: 1 105 | flex-shrink: 1 106 | 107 | +tablet 108 | .pagination-list 109 | flex-grow: 1 110 | flex-shrink: 1 111 | justify-content: flex-start 112 | order: 1 113 | .pagination-previous 114 | order: 2 115 | .pagination-next 116 | order: 3 117 | .pagination 118 | justify-content: space-between 119 | &.is-centered 120 | .pagination-previous 121 | order: 1 122 | .pagination-list 123 | justify-content: center 124 | order: 2 125 | .pagination-next 126 | order: 3 127 | &.is-right 128 | .pagination-previous 129 | order: 1 130 | .pagination-next 131 | order: 2 132 | .pagination-list 133 | justify-content: flex-end 134 | order: 3 135 | -------------------------------------------------------------------------------- /countbook/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for countbook project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.11.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.11/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.11/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = False 27 | 28 | ALLOWED_HOSTS = [ 29 | 'countbook.neolocation.net', 30 | ] 31 | 32 | 33 | # Application definition 34 | 35 | INSTALLED_APPS = [ 36 | 'website.apps.WebsiteConfig', 37 | 'django.contrib.auth', 38 | 'django.contrib.contenttypes', 39 | 'django.contrib.sessions', 40 | 'django.contrib.messages', 41 | 'django.contrib.staticfiles', 42 | 'channels', 43 | ] 44 | 45 | MIDDLEWARE = [ 46 | 'django.middleware.security.SecurityMiddleware', 47 | 'django.contrib.sessions.middleware.SessionMiddleware', 48 | 'django.middleware.common.CommonMiddleware', 49 | 'django.middleware.csrf.CsrfViewMiddleware', 50 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 51 | 'django.contrib.messages.middleware.MessageMiddleware', 52 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 53 | ] 54 | 55 | ROOT_URLCONF = 'countbook.urls' 56 | 57 | TEMPLATES = [ 58 | { 59 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 60 | 'DIRS': [os.path.join(BASE_DIR, 'templates')], 61 | 'APP_DIRS': True, 62 | 'OPTIONS': { 63 | 'context_processors': [ 64 | 'django.template.context_processors.debug', 65 | 'django.template.context_processors.request', 66 | 'django.contrib.auth.context_processors.auth', 67 | 'django.contrib.messages.context_processors.messages', 68 | ], 69 | }, 70 | }, 71 | ] 72 | 73 | WSGI_APPLICATION = 'countbook.wsgi.application' 74 | 75 | CHANNEL_LAYERS = { 76 | "default": { 77 | "BACKEND": "asgi_ipc.IPCChannelLayer", 78 | "ROUTING": "countbook.routing.channel_routing", 79 | "CONFIG": { 80 | "prefix": "countbook", 81 | }, 82 | }, 83 | } 84 | 85 | # Database 86 | # https://docs.djangoproject.com/en/1.11/ref/settings/#databases 87 | 88 | DATABASES = { 89 | 'default': { 90 | 'ENGINE': 'django.db.backends.sqlite3', 91 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 92 | } 93 | } 94 | 95 | 96 | # Password validation 97 | # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 98 | 99 | AUTH_PASSWORD_VALIDATORS = [ 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 102 | }, 103 | { 104 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 105 | }, 106 | { 107 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 108 | }, 109 | { 110 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 111 | }, 112 | ] 113 | 114 | 115 | # Internationalization 116 | # https://docs.djangoproject.com/en/1.11/topics/i18n/ 117 | 118 | LANGUAGE_CODE = 'en-us' 119 | 120 | TIME_ZONE = 'Europe/Minsk' 121 | 122 | USE_I18N = True 123 | 124 | USE_L10N = True 125 | 126 | USE_TZ = True 127 | 128 | 129 | # Static files (CSS, JavaScript, Images) 130 | # https://docs.djangoproject.com/en/1.11/howto/static-files/ 131 | 132 | STATIC_URL = '/static/' 133 | STATIC_ROOT = os.path.join(BASE_DIR, "static/") 134 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/content.sass: -------------------------------------------------------------------------------- 1 | $content-heading-color: $text-strong !default 2 | $content-heading-weight: $weight-normal !default 3 | $content-heading-line-height: 1.125 !default 4 | 5 | $content-blockquote-background-color: $background !default 6 | $content-blockquote-border-left: 5px solid $border !default 7 | $content-blockquote-padding: 1.25em 1.5em !default 8 | 9 | $content-pre-padding: 1.25em 1.5em !default 10 | 11 | $content-table-cell-border: 1px solid $border !default 12 | $content-table-cell-border-width: 0 0 1px !default 13 | $content-table-cell-padding: 0.5em 0.75em !default 14 | $content-table-cell-heading-color: $text-strong !default 15 | $content-table-row-hover-background-color: $background !default 16 | $content-table-head-cell-border-width: 0 0 2px !default 17 | $content-table-head-cell-color: $text-strong !default 18 | $content-table-foot-cell-border-width: 2px 0 0 !default 19 | $content-table-foot-cell-color: $text-strong !default 20 | 21 | .content 22 | +block 23 | // Inline 24 | li + li 25 | margin-top: 0.25em 26 | // Block 27 | p, 28 | dl, 29 | ol, 30 | ul, 31 | blockquote, 32 | pre, 33 | table 34 | &:not(:last-child) 35 | margin-bottom: 1em 36 | h1, 37 | h2, 38 | h3, 39 | h4, 40 | h5, 41 | h6 42 | color: $content-heading-color 43 | font-weight: $content-heading-weight 44 | line-height: $content-heading-line-height 45 | h1 46 | font-size: 2em 47 | margin-bottom: 0.5em 48 | &:not(:first-child) 49 | margin-top: 1em 50 | h2 51 | font-size: 1.75em 52 | margin-bottom: 0.5714em 53 | &:not(:first-child) 54 | margin-top: 1.1428em 55 | h3 56 | font-size: 1.5em 57 | margin-bottom: 0.6666em 58 | &:not(:first-child) 59 | margin-top: 1.3333em 60 | h4 61 | font-size: 1.25em 62 | margin-bottom: 0.8em 63 | h5 64 | font-size: 1.125em 65 | margin-bottom: 0.8888em 66 | h6 67 | font-size: 1em 68 | margin-bottom: 1em 69 | blockquote 70 | background-color: $content-blockquote-background-color 71 | border-left: $content-blockquote-border-left 72 | padding: $content-blockquote-padding 73 | ol 74 | list-style: decimal outside 75 | margin-left: 2em 76 | margin-top: 1em 77 | ul 78 | list-style: disc outside 79 | margin-left: 2em 80 | margin-top: 1em 81 | ul 82 | list-style-type: circle 83 | margin-top: 0.5em 84 | ul 85 | list-style-type: square 86 | dd 87 | margin-left: 2em 88 | figure 89 | margin-left: 2em 90 | margin-right: 2em 91 | text-align: center 92 | &:not(:first-child) 93 | margin-top: 2em 94 | &:not(:last-child) 95 | margin-bottom: 2em 96 | img 97 | display: inline-block 98 | figcaption 99 | font-style: italic 100 | pre 101 | +overflow-touch 102 | overflow-x: auto 103 | padding: $content-pre-padding 104 | white-space: pre 105 | word-wrap: normal 106 | sup, 107 | sub 108 | font-size: 75% 109 | table 110 | width: 100% 111 | td, 112 | th 113 | border: $content-table-cell-border 114 | border-width: $content-table-cell-border-width 115 | padding: $content-table-cell-padding 116 | vertical-align: top 117 | th 118 | color: $content-table-cell-heading-color 119 | text-align: left 120 | tr 121 | &:hover 122 | background-color: $content-table-row-hover-background-color 123 | thead 124 | td, 125 | th 126 | border-width: $content-table-head-cell-border-width 127 | color: $content-table-head-cell-color 128 | tfoot 129 | td, 130 | th 131 | border-width: $content-table-foot-cell-border-width 132 | color: $content-table-foot-cell-color 133 | tbody 134 | tr 135 | &:last-child 136 | td, 137 | th 138 | border-bottom-width: 0 139 | // Sizes 140 | &.is-small 141 | font-size: $size-small 142 | &.is-medium 143 | font-size: $size-medium 144 | &.is-large 145 | font-size: $size-large 146 | -------------------------------------------------------------------------------- /static/website/today_tab.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Vue.component('today', { 4 | template: ` 5 |
6 |
7 | 8 | 9 | 10 | (( op['name'] )) - (( op['count'] )) 11 | 12 | 13 | 14 |
15 |
16 |
17 | 18 |
19 | 24 |
25 |
26 | `, 27 | 28 | delimiters: ['((', '))'], 29 | 30 | data() { 31 | return { 32 | today: '', 33 | year: new Date().getFullYear(), 34 | month: new Date().getMonth() + 1, 35 | day: new Date().getDate(), 36 | new_operation: '' 37 | }; 38 | }, 39 | 40 | mounted: function() { 41 | bus.$on('websocket_ready', () => 42 | ws.send( 43 | JSON.stringify({ 44 | type: 'get_day', 45 | params: { 46 | year: this.year, 47 | month: this.month, 48 | day: this.day 49 | } 50 | }) 51 | ) 52 | ) 53 | 54 | bus.$on('websocket_message', (response) => { 55 | if (response['type'] === 'get_day') { 56 | this.today = response['data']; 57 | } 58 | }) 59 | 60 | setInterval(() => { 61 | this.year = new Date().getFullYear() 62 | this.month = new Date().getMonth() + 1 63 | this.day = new Date().getDate() 64 | }, 60000) 65 | }, 66 | 67 | methods: { 68 | delOperation(id) { 69 | bus.$emit('show_popup', { 70 | 'title': 'Warning', 71 | 'text': 'Do you really want to delete the item with all associated records?', 72 | 'type': 'delete', 73 | 'id': id 74 | }); 75 | }, 76 | 77 | appendRecord(id) { 78 | ws.send( 79 | JSON.stringify({ 80 | type: 'append_record', 81 | params: { 82 | id: id 83 | } 84 | }) 85 | ); 86 | }, 87 | 88 | appendOperation() { 89 | let stop = false; 90 | if (this.new_operation === '') { 91 | bus.$emit('show_popup', { 92 | 'title': 'Error', 93 | 'text': 'Please, enter a name.', 94 | 'type': 'error' 95 | }); 96 | stop = true; 97 | } 98 | this.today.forEach((op) => { 99 | if (this.new_operation === op['name']) { 100 | bus.$emit('show_popup', { 101 | 'title': 'Error', 102 | 'text': 'The item already exists. Please, enter a different name.', 103 | 'type': 'error' 104 | }); 105 | stop = true; 106 | } 107 | }); 108 | if (stop === true) return; 109 | ws.send( 110 | JSON.stringify({ 111 | type: 'append_operation', 112 | params: { 113 | name: this.new_operation 114 | } 115 | }) 116 | ); 117 | this.new_operation = ''; 118 | } 119 | } 120 | }); 121 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/layout/hero.sass: -------------------------------------------------------------------------------- 1 | // Main container 2 | 3 | .hero 4 | align-items: stretch 5 | display: flex 6 | flex-direction: column 7 | justify-content: space-between 8 | .navbar 9 | background: none 10 | .tabs 11 | ul 12 | border-bottom: none 13 | // Colors 14 | @each $name, $pair in $colors 15 | $color: nth($pair, 1) 16 | $color-invert: nth($pair, 2) 17 | &.is-#{$name} 18 | background-color: $color 19 | color: $color-invert 20 | a:not(.button), 21 | strong 22 | color: inherit 23 | .title 24 | color: $color-invert 25 | .subtitle 26 | color: rgba($color-invert, 0.9) 27 | a:not(.button), 28 | strong 29 | color: $color-invert 30 | .navbar-menu 31 | +touch 32 | background-color: $color 33 | .navbar-item, 34 | .navbar-link 35 | color: rgba($color-invert, 0.7) 36 | a.navbar-item, 37 | .navbar-link 38 | &:hover, 39 | &.is-active 40 | background-color: darken($color, 5%) 41 | color: $color-invert 42 | .tabs 43 | a 44 | color: $color-invert 45 | opacity: 0.9 46 | &:hover 47 | opacity: 1 48 | li 49 | &.is-active a 50 | opacity: 1 51 | &.is-boxed, 52 | &.is-toggle 53 | a 54 | color: $color-invert 55 | &:hover 56 | background-color: rgba($black, 0.1) 57 | li.is-active a 58 | &, 59 | &:hover 60 | background-color: $color-invert 61 | border-color: $color-invert 62 | color: $color 63 | // Modifiers 64 | &.is-bold 65 | $gradient-top-left: darken(saturate(adjust-hue($color, -10deg), 10%), 10%) 66 | $gradient-bottom-right: lighten(saturate(adjust-hue($color, 10deg), 5%), 5%) 67 | background-image: linear-gradient(141deg, $gradient-top-left 0%, $color 71%, $gradient-bottom-right 100%) 68 | +mobile 69 | .navbar-menu 70 | background-image: linear-gradient(141deg, $gradient-top-left 0%, $color 71%, $gradient-bottom-right 100%) 71 | // Responsiveness 72 | // +mobile 73 | // .nav-toggle 74 | // span 75 | // background-color: $color-invert 76 | // &:hover 77 | // background-color: rgba($black, 0.1) 78 | // &.is-active 79 | // span 80 | // background-color: $color-invert 81 | // .nav-menu 82 | // .nav-item 83 | // border-top-color: rgba($color-invert, 0.2) 84 | // Sizes 85 | &.is-small 86 | .hero-body 87 | padding-bottom: 1.5rem 88 | padding-top: 1.5rem 89 | &.is-medium 90 | +tablet 91 | .hero-body 92 | padding-bottom: 9rem 93 | padding-top: 9rem 94 | &.is-large 95 | +tablet 96 | .hero-body 97 | padding-bottom: 18rem 98 | padding-top: 18rem 99 | &.is-halfheight, 100 | &.is-fullheight 101 | .hero-body 102 | align-items: center 103 | display: flex 104 | & > .container 105 | flex-grow: 1 106 | flex-shrink: 1 107 | &.is-halfheight 108 | min-height: 50vh 109 | &.is-fullheight 110 | min-height: 100vh 111 | 112 | // Components 113 | 114 | .hero-video 115 | +overlay 116 | overflow: hidden 117 | video 118 | left: 50% 119 | min-height: 100% 120 | min-width: 100% 121 | position: absolute 122 | top: 50% 123 | transform: translate3d(-50%, -50%, 0) 124 | // Modifiers 125 | &.is-transparent 126 | opacity: 0.3 127 | // Responsiveness 128 | +mobile 129 | display: none 130 | 131 | .hero-buttons 132 | margin-top: 1.5rem 133 | // Responsiveness 134 | +mobile 135 | .button 136 | display: flex 137 | &:not(:last-child) 138 | margin-bottom: 0.75rem 139 | +tablet 140 | display: flex 141 | justify-content: center 142 | .button:not(:last-child) 143 | margin-right: 1.5rem 144 | 145 | // Containers 146 | 147 | .hero-head, 148 | .hero-foot 149 | flex-grow: 0 150 | flex-shrink: 0 151 | 152 | .hero-body 153 | flex-grow: 1 154 | flex-shrink: 0 155 | padding: 3rem 1.5rem 156 | -------------------------------------------------------------------------------- /static/website/stats_tab.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Vue.component('stats', { 4 | template: ` 5 |
6 |
7 | 8 |  (( months[month] )) - (( year ))  9 | 10 |
11 |
12 | 13 |
14 |
15 | `, 16 | 17 | delimiters: ['((', '))'], 18 | 19 | data() { 20 | return { 21 | myChart: null, 22 | stats: null, 23 | year: new Date().getFullYear(), 24 | month: new Date().getMonth(), 25 | months: [ 26 | 'January', 27 | 'February', 28 | 'March', 29 | 'April', 30 | 'May', 31 | 'June', 32 | 'July', 33 | 'August', 34 | 'September', 35 | 'October', 36 | 'November', 37 | 'December' 38 | ] 39 | }; 40 | }, 41 | 42 | mounted: function() { 43 | bus.$on('websocket_message', (response) => { 44 | if (response['type'] == 'get_month') { 45 | this.parseStats(response['data']); 46 | this.createChart(); 47 | } 48 | if (response['type'] == 'get_day') { 49 | this.getStats(); 50 | } 51 | }) 52 | }, 53 | 54 | methods: { 55 | getStats: function() { 56 | ws.send( 57 | JSON.stringify({ 58 | type: 'get_month', 59 | params: { 60 | year: this.year, 61 | month: this.month + 1 62 | } 63 | }) 64 | ) 65 | }, 66 | 67 | prevMonth: function () { 68 | if (this.month > 0) { 69 | this.month--; 70 | } else { 71 | this.month = 11; 72 | this.year--; 73 | } 74 | this.getStats(); 75 | }, 76 | 77 | nextMonth: function () { 78 | if (this.month < 11) { 79 | this.month++; 80 | } else { 81 | this.month = 0; 82 | this.year++; 83 | } 84 | this.getStats(); 85 | }, 86 | 87 | createChart: function () { 88 | let self = this; 89 | try { 90 | this.myChart.destroy(); 91 | } 92 | catch (e) {} 93 | this.myChart = new Chart(self.$refs.mychart.getContext('2d'), { 94 | type: 'bar', 95 | data: self.stats, 96 | options: { 97 | tooltips: { 98 | mode: 'index', 99 | intersect: false 100 | }, 101 | responsive: true, 102 | scales: { 103 | xAxes: [{ 104 | stacked: true, 105 | }], 106 | yAxes: [{ 107 | stacked: true, 108 | ticks: { 109 | beginAtZero:true 110 | } 111 | }] 112 | } 113 | } 114 | }) 115 | }, 116 | 117 | parseStats: function(raw_stats) { 118 | this.stats = { 119 | 'labels': [], 120 | 'datasets': [] 121 | }; 122 | if (raw_stats.length == 0) { 123 | return; 124 | } 125 | for (let day in raw_stats[0]['stats']) { 126 | this.stats['labels'].push(day); 127 | } 128 | let palet = palette(['tol', 'qualitative'], raw_stats.length); 129 | let i = 0; 130 | raw_stats.forEach((op) => { 131 | let cur_dataset = { 132 | label: op['name'], 133 | backgroundColor: '#' + palet[i], 134 | data: [] 135 | }; 136 | for (let day in op['stats']) { 137 | cur_dataset['data'].push(op['stats'][day]); 138 | }; 139 | this.stats['datasets'].push(cur_dataset); 140 | i++; 141 | }); 142 | } 143 | } 144 | }); 145 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/tabs.sass: -------------------------------------------------------------------------------- 1 | $tabs-border-bottom-color: $border !default 2 | $tabs-border-bottom-style: solid !default 3 | $tabs-border-bottom-width: 1px !default 4 | $tabs-link-color: $text !default 5 | $tabs-link-hover-border-bottom-color: $text-strong !default 6 | $tabs-link-hover-color: $text-strong !default 7 | $tabs-link-active-border-bottom-color: $link !default 8 | $tabs-link-active-color: $link !default 9 | $tabs-link-padding: 0.5em 1em !default 10 | 11 | $tabs-boxed-link-radius: $radius !default 12 | $tabs-boxed-link-hover-background-color: $background !default 13 | $tabs-boxed-link-hover-border-bottom-color: $border !default 14 | 15 | $tabs-boxed-link-active-background-color: $white !default 16 | $tabs-boxed-link-active-border-color: $border !default 17 | $tabs-boxed-link-active-border-bottom-color: transparent !default 18 | 19 | $tabs-toggle-link-border-color: $border !default 20 | $tabs-toggle-link-border-style: solid !default 21 | $tabs-toggle-link-border-width: 1px !default 22 | $tabs-toggle-link-hover-background-color: $background !default 23 | $tabs-toggle-link-hover-border-color: $border-hover !default 24 | $tabs-toggle-link-radius: $radius !default 25 | $tabs-toggle-link-active-background-color: $link !default 26 | $tabs-toggle-link-active-border-color: $link !default 27 | $tabs-toggle-link-active-color: $link-invert !default 28 | 29 | .tabs 30 | +block 31 | +overflow-touch 32 | +unselectable 33 | align-items: stretch 34 | display: flex 35 | font-size: $size-normal 36 | justify-content: space-between 37 | overflow: hidden 38 | overflow-x: auto 39 | white-space: nowrap 40 | a 41 | align-items: center 42 | border-bottom-color: $tabs-border-bottom-color 43 | border-bottom-style: $tabs-border-bottom-style 44 | border-bottom-width: $tabs-border-bottom-width 45 | color: $tabs-link-color 46 | display: flex 47 | justify-content: center 48 | margin-bottom: -#{$tabs-border-bottom-width} 49 | padding: $tabs-link-padding 50 | vertical-align: top 51 | &:hover 52 | border-bottom-color: $tabs-link-hover-border-bottom-color 53 | color: $tabs-link-hover-color 54 | li 55 | display: block 56 | &.is-active 57 | a 58 | border-bottom-color: $tabs-link-active-border-bottom-color 59 | color: $tabs-link-active-color 60 | ul 61 | align-items: center 62 | border-bottom-color: $tabs-border-bottom-color 63 | border-bottom-style: $tabs-border-bottom-style 64 | border-bottom-width: $tabs-border-bottom-width 65 | display: flex 66 | flex-grow: 1 67 | flex-shrink: 0 68 | justify-content: flex-start 69 | &.is-left 70 | padding-right: 0.75em 71 | &.is-center 72 | flex: none 73 | justify-content: center 74 | padding-left: 0.75em 75 | padding-right: 0.75em 76 | &.is-right 77 | justify-content: flex-end 78 | padding-left: 0.75em 79 | .icon 80 | &:first-child 81 | margin-right: 0.5em 82 | &:last-child 83 | margin-left: 0.5em 84 | // Alignment 85 | &.is-centered 86 | ul 87 | justify-content: center 88 | &.is-right 89 | ul 90 | justify-content: flex-end 91 | // Styles 92 | &.is-boxed 93 | a 94 | border: 1px solid transparent 95 | border-radius: $tabs-boxed-link-radius $tabs-boxed-link-radius 0 0 96 | &:hover 97 | background-color: $tabs-boxed-link-hover-background-color 98 | border-bottom-color: $tabs-boxed-link-hover-border-bottom-color 99 | li 100 | &.is-active 101 | a 102 | background-color: $tabs-boxed-link-active-background-color 103 | border-color: $tabs-boxed-link-active-border-color 104 | border-bottom-color: $tabs-boxed-link-active-border-bottom-color !important 105 | &.is-fullwidth 106 | li 107 | flex-grow: 1 108 | flex-shrink: 0 109 | &.is-toggle 110 | a 111 | border-color: $tabs-toggle-link-border-color 112 | border-style: $tabs-toggle-link-border-style 113 | border-width: $tabs-toggle-link-border-width 114 | margin-bottom: 0 115 | position: relative 116 | &:hover 117 | background-color: $tabs-toggle-link-hover-background-color 118 | border-color: $tabs-toggle-link-hover-border-color 119 | z-index: 2 120 | li 121 | & + li 122 | margin-left: -#{$tabs-toggle-link-border-width} 123 | &:first-child a 124 | border-radius: $tabs-toggle-link-radius 0 0 $tabs-toggle-link-radius 125 | &:last-child a 126 | border-radius: 0 $tabs-toggle-link-radius $tabs-toggle-link-radius 0 127 | &.is-active 128 | a 129 | background-color: $tabs-toggle-link-active-background-color 130 | border-color: $tabs-toggle-link-active-border-color 131 | color: $tabs-toggle-link-active-color 132 | z-index: 1 133 | ul 134 | border-bottom: none 135 | // Sizes 136 | &.is-small 137 | font-size: $size-small 138 | &.is-medium 139 | font-size: $size-medium 140 | &.is-large 141 | font-size: $size-large 142 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/base/helpers.sass: -------------------------------------------------------------------------------- 1 | // Float 2 | 3 | .is-clearfix 4 | +clearfix 5 | 6 | .is-pulled-left 7 | float: left !important 8 | 9 | .is-pulled-right 10 | float: right !important 11 | 12 | // Overflow 13 | 14 | .is-clipped 15 | overflow: hidden !important 16 | 17 | // Overlay 18 | 19 | .is-overlay 20 | +overlay 21 | 22 | // Typography 23 | 24 | =typography-size($target:'') 25 | @each $size in $sizes 26 | $i: index($sizes, $size) 27 | .is-size-#{$i}#{if($target == '', '', '-' + $target)} 28 | font-size: $size !important 29 | 30 | +typography-size() 31 | 32 | +mobile 33 | +typography-size('mobile') 34 | 35 | +tablet 36 | +typography-size('tablet') 37 | 38 | +touch 39 | +typography-size('touch') 40 | 41 | +desktop 42 | +typography-size('desktop') 43 | 44 | +widescreen 45 | +typography-size('widescreen') 46 | 47 | +fullhd 48 | +typography-size('fullhd') 49 | 50 | $alignments: ('centered': 'center', 'justified': 'justify', 'left': 'left', 'right': 'right') 51 | 52 | @each $alignment, $text-align in $alignments 53 | .has-text-#{$alignment} 54 | text-align: #{$text-align} !important 55 | +mobile 56 | .has-text-#{$alignment}-mobile 57 | text-align: #{$text-align} !important 58 | +tablet 59 | .has-text-#{$alignment}-tablet 60 | text-align: #{$text-align} !important 61 | +tablet-only 62 | .has-text-#{$alignment}-tablet-only 63 | text-align: #{$text-align} !important 64 | +touch 65 | .has-text-#{$alignment}-touch 66 | text-align: #{$text-align} !important 67 | +desktop 68 | .has-text-#{$alignment}-desktop 69 | text-align: #{$text-align} !important 70 | +desktop-only 71 | .has-text-#{$alignment}-desktop-only 72 | text-align: #{$text-align} !important 73 | +widescreen 74 | .has-text-#{$alignment}-widescreen 75 | text-align: #{$text-align} !important 76 | +widescreen-only 77 | .has-text-#{$alignment}-widescreen-only 78 | text-align: #{$text-align} !important 79 | +fullhd 80 | .has-text-#{$alignment}-fullhd 81 | text-align: #{$text-align} !important 82 | 83 | .is-capitalized 84 | text-transform: capitalize !important 85 | 86 | .is-lowercase 87 | text-transform: lowercase !important 88 | 89 | .is-uppercase 90 | text-transform: uppercase !important 91 | 92 | @each $name, $pair in $colors 93 | $color: nth($pair, 1) 94 | .has-text-#{$name} 95 | color: $color !important 96 | a.has-text-#{$name} 97 | &:hover, 98 | &:focus 99 | color: darken($color, 10%) !important 100 | 101 | @each $name, $shade in $shades 102 | .has-text-#{$name} 103 | color: $shade !important 104 | 105 | .has-text-weight-light 106 | font-weight: $weight-light !important 107 | .has-text-weight-normal 108 | font-weight: $weight-normal !important 109 | .has-text-weight-semibold 110 | font-weight: $weight-semibold !important 111 | .has-text-weight-bold 112 | font-weight: $weight-bold !important 113 | 114 | // Visibility 115 | 116 | $displays: 'block' 'flex' 'inline' 'inline-block' 'inline-flex' 117 | 118 | @each $display in $displays 119 | .is-#{$display} 120 | display: #{$display} !important 121 | +mobile 122 | .is-#{$display}-mobile 123 | display: #{$display} !important 124 | +tablet 125 | .is-#{$display}-tablet 126 | display: #{$display} !important 127 | +tablet-only 128 | .is-#{$display}-tablet-only 129 | display: #{$display} !important 130 | +touch 131 | .is-#{$display}-touch 132 | display: #{$display} !important 133 | +desktop 134 | .is-#{$display}-desktop 135 | display: #{$display} !important 136 | +desktop-only 137 | .is-#{$display}-desktop-only 138 | display: #{$display} !important 139 | +widescreen 140 | .is-#{$display}-widescreen 141 | display: #{$display} !important 142 | +widescreen-only 143 | .is-#{$display}-widescreen-only 144 | display: #{$display} !important 145 | +fullhd 146 | .is-#{$display}-fullhd 147 | display: #{$display} !important 148 | 149 | .is-hidden 150 | display: none !important 151 | 152 | +mobile 153 | .is-hidden-mobile 154 | display: none !important 155 | 156 | +tablet 157 | .is-hidden-tablet 158 | display: none !important 159 | 160 | +tablet-only 161 | .is-hidden-tablet-only 162 | display: none !important 163 | 164 | +touch 165 | .is-hidden-touch 166 | display: none !important 167 | 168 | +desktop 169 | .is-hidden-desktop 170 | display: none !important 171 | 172 | +desktop-only 173 | .is-hidden-desktop-only 174 | display: none !important 175 | 176 | +widescreen 177 | .is-hidden-widescreen 178 | display: none !important 179 | 180 | +widescreen-only 181 | .is-hidden-widescreen-only 182 | display: none !important 183 | 184 | +fullhd 185 | .is-hidden-fullhd 186 | display: none !important 187 | 188 | // Other 189 | 190 | .is-marginless 191 | margin: 0 !important 192 | 193 | .is-paddingless 194 | padding: 0 !important 195 | 196 | .is-radiusless 197 | border-radius: 0 !important 198 | 199 | .is-shadowless 200 | box-shadow: none !important 201 | 202 | .is-unselectable 203 | +unselectable 204 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/utilities/mixins.sass: -------------------------------------------------------------------------------- 1 | @import "initial-variables" 2 | 3 | =arrow($color) 4 | border: 1px solid $color 5 | border-right: 0 6 | border-top: 0 7 | content: " " 8 | display: block 9 | height: 0.5em 10 | pointer-events: none 11 | position: absolute 12 | transform: rotate(-45deg) 13 | width: 0.5em 14 | 15 | =block 16 | &:not(:last-child) 17 | margin-bottom: 1.5rem 18 | 19 | =clearfix 20 | &:after 21 | clear: both 22 | content: " " 23 | display: table 24 | 25 | =center($width, $height: 0) 26 | position: absolute 27 | @if $height != 0 28 | left: calc(50% - (#{$width} / 2)) 29 | top: calc(50% - (#{$height} / 2)) 30 | @else 31 | left: calc(50% - (#{$width} / 2)) 32 | top: calc(50% - (#{$width} / 2)) 33 | 34 | =delete 35 | +unselectable 36 | -moz-appearance: none 37 | -webkit-appearance: none 38 | background-color: rgba($black, 0.2) 39 | border: none 40 | border-radius: 290486px 41 | cursor: pointer 42 | display: inline-block 43 | flex-grow: 0 44 | flex-shrink: 0 45 | font-size: $size-normal 46 | height: 20px 47 | max-height: 20px 48 | max-width: 20px 49 | min-height: 20px 50 | min-width: 20px 51 | outline: none 52 | position: relative 53 | vertical-align: top 54 | width: 20px 55 | &:before, 56 | &:after 57 | background-color: $white 58 | content: "" 59 | display: block 60 | left: 50% 61 | position: absolute 62 | top: 50% 63 | transform: translateX(-50%) translateY(-50%) rotate(45deg) 64 | transform-origin: center center 65 | &:before 66 | height: 2px 67 | width: 50% 68 | &:after 69 | height: 50% 70 | width: 2px 71 | &:hover, 72 | &:focus 73 | background-color: rgba($black, 0.3) 74 | &:active 75 | background-color: rgba($black, 0.4) 76 | // Sizes 77 | &.is-small 78 | height: 16px 79 | max-height: 16px 80 | max-width: 16px 81 | min-height: 16px 82 | min-width: 16px 83 | width: 16px 84 | &.is-medium 85 | height: 24px 86 | max-height: 24px 87 | max-width: 24px 88 | min-height: 24px 89 | min-width: 24px 90 | width: 24px 91 | &.is-large 92 | height: 32px 93 | max-height: 32px 94 | max-width: 32px 95 | min-height: 32px 96 | min-width: 32px 97 | width: 32px 98 | 99 | =fa($size, $dimensions) 100 | display: inline-block 101 | font-size: $size 102 | height: $dimensions 103 | line-height: $dimensions 104 | text-align: center 105 | vertical-align: top 106 | width: $dimensions 107 | 108 | =hamburger($dimensions) 109 | cursor: pointer 110 | display: block 111 | height: $dimensions 112 | position: relative 113 | width: $dimensions 114 | span 115 | background-color: currentColor 116 | display: block 117 | height: 1px 118 | left: 50% 119 | margin-left: -7px 120 | position: absolute 121 | top: 50% 122 | transition: none $speed $easing 123 | transition-property: background, left, opacity, transform 124 | width: 15px 125 | &:nth-child(1) 126 | margin-top: -6px 127 | &:nth-child(2) 128 | margin-top: -1px 129 | &:nth-child(3) 130 | margin-top: 4px 131 | &:hover 132 | background-color: rgba(black, 0.05) 133 | // Modifers 134 | &.is-active 135 | span 136 | &:nth-child(1) 137 | margin-left: -5px 138 | transform: rotate(45deg) 139 | transform-origin: left top 140 | &:nth-child(2) 141 | opacity: 0 142 | &:nth-child(3) 143 | margin-left: -5px 144 | transform: rotate(-45deg) 145 | transform-origin: left bottom 146 | 147 | =loader 148 | animation: spinAround 500ms infinite linear 149 | border: 2px solid $border 150 | border-radius: 290486px 151 | border-right-color: transparent 152 | border-top-color: transparent 153 | content: "" 154 | display: block 155 | height: 1em 156 | position: relative 157 | width: 1em 158 | 159 | =overflow-touch 160 | -webkit-overflow-scrolling: touch 161 | 162 | =overlay($offset: 0) 163 | bottom: $offset 164 | left: $offset 165 | position: absolute 166 | right: $offset 167 | top: $offset 168 | 169 | =placeholder 170 | $placeholders: ':-moz' ':-webkit-input' '-moz' '-ms-input' 171 | @each $placeholder in $placeholders 172 | &:#{$placeholder}-placeholder 173 | @content 174 | 175 | =unselectable 176 | -webkit-touch-callout: none 177 | -webkit-user-select: none 178 | -moz-user-select: none 179 | -ms-user-select: none 180 | user-select: none 181 | 182 | // Responsiveness 183 | 184 | =from($device) 185 | @media screen and (min-width: $device) 186 | @content 187 | 188 | =until($device) 189 | @media screen and (max-width: $device - 1px) 190 | @content 191 | 192 | =mobile 193 | @media screen and (max-width: $tablet - 1px) 194 | @content 195 | 196 | =tablet 197 | @media screen and (min-width: $tablet), print 198 | @content 199 | 200 | =tablet-only 201 | @media screen and (min-width: $tablet) and (max-width: $desktop - 1px) 202 | @content 203 | 204 | =touch 205 | @media screen and (max-width: $desktop - 1px) 206 | @content 207 | 208 | =desktop 209 | @media screen and (min-width: $desktop) 210 | @content 211 | 212 | =desktop-only 213 | @media screen and (min-width: $desktop) and (max-width: $widescreen - 1px) 214 | @content 215 | 216 | =widescreen 217 | @media screen and (min-width: $widescreen) 218 | @content 219 | 220 | =widescreen-only 221 | @media screen and (min-width: $widescreen) and (max-width: $fullhd - 1px) 222 | @content 223 | 224 | =fullhd 225 | @media screen and (min-width: $fullhd) 226 | @content 227 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/README.md: -------------------------------------------------------------------------------- 1 | # [Bulma](http://bulma.io) 2 | 3 | Bulma is a **modern CSS framework** based on [Flexbox](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes). 4 | 5 | Sponsor 6 | 7 | [![npm](https://img.shields.io/npm/v/bulma.svg)](https://www.npmjs.com/package/bulma) 8 | [![npm](https://img.shields.io/npm/dm/bulma.svg)](https://www.npmjs.com/package/bulma) 9 | [![Join the chat at https://gitter.im/jgthms/bulma](https://badges.gitter.im/jgthms/bulma.svg)](https://gitter.im/jgthms/bulma) 10 | [![Build Status](https://travis-ci.org/jgthms/bulma.svg?branch=master)](https://travis-ci.org/jgthms/bulma) 11 | 12 | Bulma: a Flexbox CSS framework 13 | 14 | ## Quick install 15 | 16 | Bulma is constantly in development! Try it out now: 17 | 18 | ### NPM 19 | 20 | ```sh 21 | npm install bulma 22 | ``` 23 | **or** 24 | 25 | ### Yarn 26 | 27 | ```sh 28 | yarn add bulma 29 | ``` 30 | 31 | ### Bower 32 | 33 | ```sh 34 | bower install bulma 35 | ``` 36 | 37 | ### CDN 38 | 39 | [https://cdnjs.com/libraries/bulma](https://cdnjs.com/libraries/bulma) 40 | 41 | Feel free to raise an issue or submit a pull request. 42 | 43 | ## CSS only 44 | 45 | Bulma is a **CSS** framework. As such, the sole output is a single CSS file: [bulma.css](https://github.com/jgthms/bulma/blob/master/css/bulma.css) 46 | 47 | You can either use that file, "out of the box", or download the Sass source files to customize the [variables](http://bulma.io/documentation/overview/variables/). 48 | 49 | There is **no** JavaScript included. People generally want to use their own JS implementation (and usually already have one). Bulma can be considered "environment agnostic": it's just the style layer on top of the logic. 50 | 51 | ## Browser Support 52 | 53 | Bulma uses [autoprefixer](https://github.com/postcss/autoprefixer) to make (most) Flexbox features compatible with earlier browser versions. According to [Can I use](http://caniuse.com/#feat=flexbox), Bulma is compatible with **recent** versions of: 54 | 55 | * Chrome 56 | * Edge 57 | * Firefox 58 | * Opera 59 | * Safari 60 | 61 | Internet Explorer (10+) is only partially supported. 62 | 63 | ## Documentation 64 | 65 | The documentation resides in the [docs](docs) directory, and is built with the Ruby-based [Jekyll](https://jekyllrb.com/) tool. 66 | 67 | Browse the [online documentation here.](http://bulma.io/documentation/overview/start/) 68 | 69 | ## Related projects 70 | 71 | | Project | Description | 72 | |------------------------------------------------------------------------------------|--------------------------------------------------------------------| 73 | | [Bulma with Attribute Modules](https://github.com/j5bot/bulma-attribute-selectors) | Adds support for attribute-based selectors. | 74 | | [Bulma with Rails](https://github.com/joshuajansen/bulma-rails) | Integrates Bulma with the rails asset pipeline | 75 | | [Vue Admin](https://github.com/vue-bulma/vue-admin) | Vue Admin framework powered by Bulma | 76 | | [Bulmaswatch](https://github.com/jenil/bulmaswatch) | Free themes for Bulma | 77 | | [Goldfish](https://github.com/Caiyeon/goldfish) | Vault UI with Bulma, Golang, and Vue Admin | 78 | | [ember-bulma](https://github.com/open-tux/ember-bulma) | Ember addon providing a collection of UI components for Bulma | 79 | | [Bloomer](https://bloomer.js.org) | A set of React components for Bulma | 80 | | [Re-bulma](https://github.com/bokuweb/re-bulma) | Bulma components build with React | 81 | | [React-bulma](https://github.com/kulakowka/react-bulma) | React.js components for Bulma | 82 | | [Buefy](https://buefy.github.io) | Lightweight UI components for Vue.js based on Bulma | 83 | | [vue-bulma-components](https://github.com/vouill/vue-bulma-components) | Bulma components for Vue.js with straightforward syntax | 84 | | [BulmaJS](https://github.com/VizuaaLOG/BulmaJS) | Javascript integration for Bulma. Written in ES6 with a data-* API | 85 | | [Bulma.styl](https://github.com/log1x/bulma.styl) | 1:1 Stylus translation of Bulma | 86 | | [elm-bulma-classes](https://github.com/danielnarey/elm-bulma-classes) | Bulma prepared for usage with ELM | 87 | | [Bulma Customizer](https://bulma-customizer.bstash.io/) | Bulma Customizer – Create your own **bespoke** Bulma build | 88 | | [Fulma](https://mangelmaxime.github.io/Fulma/) | Wrapper around Bulma for [fable-react](https://github.com/fable-compiler/fable-react) | 89 | 90 | ## Copyright and license 91 | 92 | Code copyright 2017 Jeremy Thomas. Code released under [the MIT license](https://github.com/jgthms/bulma/blob/master/LICENSE). 93 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/button.sass: -------------------------------------------------------------------------------- 1 | $button-color: $grey-darker !default 2 | $button-background-color: $white !default 3 | $button-border-color: $grey-lighter !default 4 | 5 | $button-hover-color: $link-hover !default 6 | $button-hover-border-color: $link-hover-border !default 7 | 8 | $button-focus-color: $link-focus !default 9 | $button-focus-border-color: $link-focus-border !default 10 | $button-focus-box-shadow-size: 0 0 0 0.125em !default 11 | $button-focus-box-shadow-color: rgba($link, 0.25) !default 12 | 13 | $button-active-color: $link-active !default 14 | $button-active-border-color: $link-active-border !default 15 | 16 | $button-text-color: $text !default 17 | $button-text-hover-background-color: $background !default 18 | $button-text-hover-color: $text-strong !default 19 | 20 | $button-disabled-background-color: $white !default 21 | $button-disabled-border-color: $grey-lighter !default 22 | $button-disabled-shadow: none !default 23 | $button-disabled-opacity: 0.5 !default 24 | 25 | $button-static-color: $grey !default 26 | $button-static-background-color: $white-ter !default 27 | $button-static-border-color: $grey-lighter !default 28 | 29 | // The button sizes use mixins so they can be used at different breakpoints 30 | =button-small 31 | border-radius: $radius-small 32 | font-size: $size-small 33 | =button-medium 34 | font-size: $size-medium 35 | =button-large 36 | font-size: $size-large 37 | 38 | .button 39 | +control 40 | +unselectable 41 | background-color: $button-background-color 42 | border-color: $button-border-color 43 | color: $button-color 44 | cursor: pointer 45 | justify-content: center 46 | padding-left: 0.75em 47 | padding-right: 0.75em 48 | text-align: center 49 | white-space: nowrap 50 | strong 51 | color: inherit 52 | .icon 53 | &, 54 | &.is-small, 55 | &.is-medium, 56 | &.is-large 57 | height: 1.5em 58 | width: 1.5em 59 | &:first-child:not(:last-child) 60 | margin-left: calc(-0.375em - 1px) 61 | margin-right: 0.1875em 62 | &:last-child:not(:first-child) 63 | margin-left: 0.1875em 64 | margin-right: calc(-0.375em - 1px) 65 | &:first-child:last-child 66 | margin-left: calc(-0.375em - 1px) 67 | margin-right: calc(-0.375em - 1px) 68 | // States 69 | &:hover, 70 | &.is-hovered 71 | border-color: $button-hover-border-color 72 | color: $button-hover-color 73 | &:focus, 74 | &.is-focused 75 | border-color: $button-focus-border-color 76 | color: $button-focus-color 77 | &:not(:active) 78 | box-shadow: $button-focus-box-shadow-size $button-focus-box-shadow-color 79 | &:active, 80 | &.is-active 81 | border-color: $button-active-border-color 82 | color: $button-active-color 83 | // Colors 84 | &.is-text 85 | background-color: transparent 86 | border-color: transparent 87 | color: $button-text-color 88 | text-decoration: underline 89 | &:hover, 90 | &.is-hovered, 91 | &:focus, 92 | &.is-focused 93 | background-color: $button-text-hover-background-color 94 | color: $button-text-hover-color 95 | &:active, 96 | &.is-active 97 | background-color: darken($button-text-hover-background-color, 5%) 98 | color: $button-text-hover-color 99 | &[disabled] 100 | background-color: transparent 101 | border-color: transparent 102 | box-shadow: none 103 | @each $name, $pair in $colors 104 | $color: nth($pair, 1) 105 | $color-invert: nth($pair, 2) 106 | &.is-#{$name} 107 | background-color: $color 108 | border-color: transparent 109 | color: $color-invert 110 | &:hover, 111 | &.is-hovered 112 | background-color: darken($color, 2.5%) 113 | border-color: transparent 114 | color: $color-invert 115 | &:focus, 116 | &.is-focused 117 | border-color: transparent 118 | color: $color-invert 119 | &:not(:active) 120 | box-shadow: $button-focus-box-shadow-size rgba($color, 0.25) 121 | &:active, 122 | &.is-active 123 | background-color: darken($color, 5%) 124 | border-color: transparent 125 | color: $color-invert 126 | &[disabled] 127 | background-color: $color 128 | border-color: transparent 129 | box-shadow: none 130 | &.is-inverted 131 | background-color: $color-invert 132 | color: $color 133 | &:hover 134 | background-color: darken($color-invert, 5%) 135 | &[disabled] 136 | background-color: $color-invert 137 | border-color: transparent 138 | box-shadow: none 139 | color: $color 140 | &.is-loading 141 | &:after 142 | border-color: transparent transparent $color-invert $color-invert !important 143 | &.is-outlined 144 | background-color: transparent 145 | border-color: $color 146 | color: $color 147 | &:hover, 148 | &:focus 149 | background-color: $color 150 | border-color: $color 151 | color: $color-invert 152 | &.is-loading 153 | &:after 154 | border-color: transparent transparent $color $color !important 155 | &[disabled] 156 | background-color: transparent 157 | border-color: $color 158 | box-shadow: none 159 | color: $color 160 | &.is-inverted.is-outlined 161 | background-color: transparent 162 | border-color: $color-invert 163 | color: $color-invert 164 | &:hover, 165 | &:focus 166 | background-color: $color-invert 167 | color: $color 168 | &[disabled] 169 | background-color: transparent 170 | border-color: $color-invert 171 | box-shadow: none 172 | color: $color-invert 173 | // Sizes 174 | &.is-small 175 | +button-small 176 | &.is-medium 177 | +button-medium 178 | &.is-large 179 | +button-large 180 | // Modifiers 181 | &[disabled] 182 | background-color: $button-disabled-background-color 183 | border-color: $button-disabled-border-color 184 | box-shadow: $button-disabled-shadow 185 | opacity: $button-disabled-opacity 186 | &.is-fullwidth 187 | display: flex 188 | width: 100% 189 | &.is-loading 190 | color: transparent !important 191 | pointer-events: none 192 | &:after 193 | +loader 194 | +center(1em) 195 | position: absolute !important 196 | &.is-static 197 | background-color: $button-static-background-color 198 | border-color: $button-static-border-color 199 | color: $button-static-color 200 | box-shadow: none 201 | pointer-events: none 202 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/grid/columns.sass: -------------------------------------------------------------------------------- 1 | $column-gap: 0.75rem !default 2 | 3 | .column 4 | display: block 5 | flex-basis: 0 6 | flex-grow: 1 7 | flex-shrink: 1 8 | padding: $column-gap 9 | .columns.is-mobile > &.is-narrow 10 | flex: none 11 | .columns.is-mobile > &.is-full 12 | flex: none 13 | width: 100% 14 | .columns.is-mobile > &.is-three-quarters 15 | flex: none 16 | width: 75% 17 | .columns.is-mobile > &.is-two-thirds 18 | flex: none 19 | width: 66.6666% 20 | .columns.is-mobile > &.is-half 21 | flex: none 22 | width: 50% 23 | .columns.is-mobile > &.is-one-third 24 | flex: none 25 | width: 33.3333% 26 | .columns.is-mobile > &.is-one-quarter 27 | flex: none 28 | width: 25% 29 | .columns.is-mobile > &.is-offset-three-quarters 30 | margin-left: 75% 31 | .columns.is-mobile > &.is-offset-two-thirds 32 | margin-left: 66.6666% 33 | .columns.is-mobile > &.is-offset-half 34 | margin-left: 50% 35 | .columns.is-mobile > &.is-offset-one-third 36 | margin-left: 33.3333% 37 | .columns.is-mobile > &.is-offset-one-quarter 38 | margin-left: 25% 39 | @for $i from 1 through 12 40 | .columns.is-mobile > &.is-#{$i} 41 | flex: none 42 | width: ($i / 12) * 100% 43 | .columns.is-mobile > &.is-offset-#{$i} 44 | margin-left: ($i / 12) * 100% 45 | +mobile 46 | &.is-narrow-mobile 47 | flex: none 48 | &.is-full-mobile 49 | flex: none 50 | width: 100% 51 | &.is-three-quarters-mobile 52 | flex: none 53 | width: 75% 54 | &.is-two-thirds-mobile 55 | flex: none 56 | width: 66.6666% 57 | &.is-half-mobile 58 | flex: none 59 | width: 50% 60 | &.is-one-third-mobile 61 | flex: none 62 | width: 33.3333% 63 | &.is-one-quarter-mobile 64 | flex: none 65 | width: 25% 66 | &.is-offset-three-quarters-mobile 67 | margin-left: 75% 68 | &.is-offset-two-thirds-mobile 69 | margin-left: 66.6666% 70 | &.is-offset-half-mobile 71 | margin-left: 50% 72 | &.is-offset-one-third-mobile 73 | margin-left: 33.3333% 74 | &.is-offset-one-quarter-mobile 75 | margin-left: 25% 76 | @for $i from 1 through 12 77 | &.is-#{$i}-mobile 78 | flex: none 79 | width: ($i / 12) * 100% 80 | &.is-offset-#{$i}-mobile 81 | margin-left: ($i / 12) * 100% 82 | +tablet 83 | &.is-narrow, 84 | &.is-narrow-tablet 85 | flex: none 86 | &.is-full, 87 | &.is-full-tablet 88 | flex: none 89 | width: 100% 90 | &.is-three-quarters, 91 | &.is-three-quarters-tablet 92 | flex: none 93 | width: 75% 94 | &.is-two-thirds, 95 | &.is-two-thirds-tablet 96 | flex: none 97 | width: 66.6666% 98 | &.is-half, 99 | &.is-half-tablet 100 | flex: none 101 | width: 50% 102 | &.is-one-third, 103 | &.is-one-third-tablet 104 | flex: none 105 | width: 33.3333% 106 | &.is-one-quarter, 107 | &.is-one-quarter-tablet 108 | flex: none 109 | width: 25% 110 | &.is-offset-three-quarters, 111 | &.is-offset-three-quarters-tablet 112 | margin-left: 75% 113 | &.is-offset-two-thirds, 114 | &.is-offset-two-thirds-tablet 115 | margin-left: 66.6666% 116 | &.is-offset-half, 117 | &.is-offset-half-tablet 118 | margin-left: 50% 119 | &.is-offset-one-third, 120 | &.is-offset-one-third-tablet 121 | margin-left: 33.3333% 122 | &.is-offset-one-quarter, 123 | &.is-offset-one-quarter-tablet 124 | margin-left: 25% 125 | @for $i from 1 through 12 126 | &.is-#{$i}, 127 | &.is-#{$i}-tablet 128 | flex: none 129 | width: ($i / 12) * 100% 130 | &.is-offset-#{$i}, 131 | &.is-offset-#{$i}-tablet 132 | margin-left: ($i / 12) * 100% 133 | +touch 134 | &.is-narrow-touch 135 | flex: none 136 | &.is-full-touch 137 | flex: none 138 | width: 100% 139 | &.is-three-quarters-touch 140 | flex: none 141 | width: 75% 142 | &.is-two-thirds-touch 143 | flex: none 144 | width: 66.6666% 145 | &.is-half-touch 146 | flex: none 147 | width: 50% 148 | &.is-one-third-touch 149 | flex: none 150 | width: 33.3333% 151 | &.is-one-quarter-touch 152 | flex: none 153 | width: 25% 154 | &.is-offset-three-quarters-touch 155 | margin-left: 75% 156 | &.is-offset-two-thirds-touch 157 | margin-left: 66.6666% 158 | &.is-offset-half-touch 159 | margin-left: 50% 160 | &.is-offset-one-third-touch 161 | margin-left: 33.3333% 162 | &.is-offset-one-quarter-touch 163 | margin-left: 25% 164 | @for $i from 1 through 12 165 | &.is-#{$i}-touch 166 | flex: none 167 | width: ($i / 12) * 100% 168 | &.is-offset-#{$i}-touch 169 | margin-left: ($i / 12) * 100% 170 | +desktop 171 | &.is-narrow-desktop 172 | flex: none 173 | &.is-full-desktop 174 | flex: none 175 | width: 100% 176 | &.is-three-quarters-desktop 177 | flex: none 178 | width: 75% 179 | &.is-two-thirds-desktop 180 | flex: none 181 | width: 66.6666% 182 | &.is-half-desktop 183 | flex: none 184 | width: 50% 185 | &.is-one-third-desktop 186 | flex: none 187 | width: 33.3333% 188 | &.is-one-quarter-desktop 189 | flex: none 190 | width: 25% 191 | &.is-offset-three-quarters-desktop 192 | margin-left: 75% 193 | &.is-offset-two-thirds-desktop 194 | margin-left: 66.6666% 195 | &.is-offset-half-desktop 196 | margin-left: 50% 197 | &.is-offset-one-third-desktop 198 | margin-left: 33.3333% 199 | &.is-offset-one-quarter-desktop 200 | margin-left: 25% 201 | @for $i from 1 through 12 202 | &.is-#{$i}-desktop 203 | flex: none 204 | width: ($i / 12) * 100% 205 | &.is-offset-#{$i}-desktop 206 | margin-left: ($i / 12) * 100% 207 | +widescreen 208 | &.is-narrow-widescreen 209 | flex: none 210 | &.is-full-widescreen 211 | flex: none 212 | width: 100% 213 | &.is-three-quarters-widescreen 214 | flex: none 215 | width: 75% 216 | &.is-two-thirds-widescreen 217 | flex: none 218 | width: 66.6666% 219 | &.is-half-widescreen 220 | flex: none 221 | width: 50% 222 | &.is-one-third-widescreen 223 | flex: none 224 | width: 33.3333% 225 | &.is-one-quarter-widescreen 226 | flex: none 227 | width: 25% 228 | &.is-offset-three-quarters-widescreen 229 | margin-left: 75% 230 | &.is-offset-two-thirds-widescreen 231 | margin-left: 66.6666% 232 | &.is-offset-half-widescreen 233 | margin-left: 50% 234 | &.is-offset-one-third-widescreen 235 | margin-left: 33.3333% 236 | &.is-offset-one-quarter-widescreen 237 | margin-left: 25% 238 | @for $i from 1 through 12 239 | &.is-#{$i}-widescreen 240 | flex: none 241 | width: ($i / 12) * 100% 242 | &.is-offset-#{$i}-widescreen 243 | margin-left: ($i / 12) * 100% 244 | +fullhd 245 | &.is-narrow-fullhd 246 | flex: none 247 | &.is-full-fullhd 248 | flex: none 249 | width: 100% 250 | &.is-three-quarters-fullhd 251 | flex: none 252 | width: 75% 253 | &.is-two-thirds-fullhd 254 | flex: none 255 | width: 66.6666% 256 | &.is-half-fullhd 257 | flex: none 258 | width: 50% 259 | &.is-one-third-fullhd 260 | flex: none 261 | width: 33.3333% 262 | &.is-one-quarter-fullhd 263 | flex: none 264 | width: 25% 265 | &.is-offset-three-quarters-fullhd 266 | margin-left: 75% 267 | &.is-offset-two-thirds-fullhd 268 | margin-left: 66.6666% 269 | &.is-offset-half-fullhd 270 | margin-left: 50% 271 | &.is-offset-one-third-fullhd 272 | margin-left: 33.3333% 273 | &.is-offset-one-quarter-fullhd 274 | margin-left: 25% 275 | @for $i from 1 through 12 276 | &.is-#{$i}-fullhd 277 | flex: none 278 | width: ($i / 12) * 100% 279 | &.is-offset-#{$i}-fullhd 280 | margin-left: ($i / 12) * 100% 281 | 282 | .columns 283 | margin-left: (-$column-gap) 284 | margin-right: (-$column-gap) 285 | margin-top: (-$column-gap) 286 | &:last-child 287 | margin-bottom: (-$column-gap) 288 | &:not(:last-child) 289 | margin-bottom: calc(1.5rem - #{$column-gap}) 290 | // Modifiers 291 | &.is-centered 292 | justify-content: center 293 | &.is-gapless 294 | margin-left: 0 295 | margin-right: 0 296 | margin-top: 0 297 | & > .column 298 | margin: 0 299 | padding: 0 !important 300 | &:not(:last-child) 301 | margin-bottom: 1.5rem 302 | &:last-child 303 | margin-bottom: 0 304 | &.is-mobile 305 | display: flex 306 | &.is-multiline 307 | flex-wrap: wrap 308 | &.is-vcentered 309 | align-items: center 310 | // Responsiveness 311 | +tablet 312 | &:not(.is-desktop) 313 | display: flex 314 | +desktop 315 | // Modifiers 316 | &.is-desktop 317 | display: flex 318 | 319 | .columns.is-variable 320 | --columnGap: 0.75rem 321 | margin-left: calc(-1 * var(--columnGap)) 322 | margin-right: calc(-1 * var(--columnGap)) 323 | .column 324 | padding-left: var(--columnGap) 325 | padding-right: var(--columnGap) 326 | @for $i from 0 through 8 327 | &.is-#{$i} 328 | --columnGap: $i * 0.25rem 329 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/components/navbar.sass: -------------------------------------------------------------------------------- 1 | $navbar-background-color: $white !default 2 | $navbar-height: 3.25rem !default 3 | 4 | $navbar-item-color: $grey-dark !default 5 | $navbar-item-hover-color: $black !default 6 | $navbar-item-hover-background-color: $background !default 7 | $navbar-item-active-color: $black !default 8 | $navbar-item-active-background-color: transparent !default 9 | $navbar-item-img-max-height: 1.75rem !default 10 | 11 | $navbar-tab-hover-background-color: transparent !default 12 | $navbar-tab-hover-border-bottom-color: $link !default 13 | $navbar-tab-active-color: $link !default 14 | $navbar-tab-active-background-color: transparent !default 15 | $navbar-tab-active-border-bottom-color: $link !default 16 | $navbar-tab-active-border-bottom-style: solid !default 17 | $navbar-tab-active-border-bottom-width: 3px !default 18 | 19 | $navbar-dropdown-background-color: $white !default 20 | $navbar-dropdown-border-top: 1px solid $border !default 21 | $navbar-dropdown-offset: -4px !default 22 | $navbar-dropdown-arrow: $link !default 23 | $navbar-dropdown-radius: $radius-large !default 24 | $navbar-dropdown-z: 20 !default 25 | 26 | $navbar-dropdown-boxed-radius: $radius-large !default 27 | $navbar-dropdown-boxed-shadow: 0 8px 8px rgba($black, 0.1), 0 0 0 1px rgba($black, 0.1) !default 28 | 29 | $navbar-dropdown-item-hover-color: $black !default 30 | $navbar-dropdown-item-hover-background-color: $background !default 31 | $navbar-dropdown-item-active-color: $link !default 32 | $navbar-dropdown-item-active-background-color: $background !default 33 | 34 | $navbar-divider-background-color: $border !default 35 | 36 | .navbar 37 | background-color: $navbar-background-color 38 | min-height: $navbar-height 39 | position: relative 40 | @each $name, $pair in $colors 41 | $color: nth($pair, 1) 42 | $color-invert: nth($pair, 2) 43 | &.is-#{$name} 44 | background-color: $color 45 | color: $color-invert 46 | .navbar-brand 47 | & > .navbar-item, 48 | .navbar-link 49 | color: $color-invert 50 | & > a.navbar-item, 51 | .navbar-link 52 | &:hover, 53 | &.is-active 54 | background-color: darken($color, 5%) 55 | color: $color-invert 56 | .navbar-link 57 | &::after 58 | border-color: $color-invert 59 | +desktop 60 | .navbar-start, 61 | .navbar-end 62 | & > .navbar-item, 63 | .navbar-link 64 | color: $color-invert 65 | & > a.navbar-item, 66 | .navbar-link 67 | &:hover, 68 | &.is-active 69 | background-color: darken($color, 5%) 70 | color: $color-invert 71 | .navbar-link 72 | &::after 73 | border-color: $color-invert 74 | .navbar-item.has-dropdown:hover .navbar-link, 75 | .navbar-item.has-dropdown.is-active .navbar-link 76 | background-color: darken($color, 5%) 77 | color: $color-invert 78 | .navbar-dropdown 79 | a.navbar-item 80 | &.is-active 81 | background-color: $color 82 | color: $color-invert 83 | & > .container 84 | align-items: stretch 85 | display: flex 86 | min-height: $navbar-height 87 | width: 100% 88 | &.has-shadow 89 | box-shadow: 0 2px 3px rgba($black, 0.1) 90 | 91 | .navbar-brand, 92 | .navbar-tabs 93 | align-items: stretch 94 | display: flex 95 | flex-shrink: 0 96 | min-height: $navbar-height 97 | 98 | .navbar-tabs 99 | +overflow-touch 100 | max-width: 100vw 101 | overflow-x: auto 102 | overflow-y: hidden 103 | 104 | .navbar-burger 105 | +hamburger($navbar-height) 106 | margin-left: auto 107 | 108 | .navbar-menu 109 | display: none 110 | 111 | .navbar-item, 112 | .navbar-link 113 | color: $navbar-item-color 114 | display: block 115 | line-height: 1.5 116 | padding: 0.5rem 1rem 117 | position: relative 118 | 119 | a.navbar-item, 120 | .navbar-link 121 | &:hover, 122 | &.is-active 123 | background-color: $navbar-item-hover-background-color 124 | color: $navbar-item-hover-color 125 | 126 | .navbar-item 127 | flex-grow: 0 128 | flex-shrink: 0 129 | img 130 | max-height: $navbar-item-img-max-height 131 | &.has-dropdown 132 | padding: 0 133 | &.is-tab 134 | border-bottom: 1px solid transparent 135 | min-height: $navbar-height 136 | padding-bottom: calc(0.5rem - 1px) 137 | &:hover 138 | background-color: $navbar-tab-hover-background-color 139 | border-bottom-color: $navbar-tab-hover-border-bottom-color 140 | &.is-active 141 | background-color: $navbar-tab-active-background-color 142 | border-bottom-color: $navbar-tab-active-border-bottom-color 143 | border-bottom-style: $navbar-tab-active-border-bottom-style 144 | border-bottom-width: $navbar-tab-active-border-bottom-width 145 | color: $navbar-tab-active-color 146 | padding-bottom: calc(0.5rem - #{$navbar-tab-active-border-bottom-width}) 147 | 148 | .navbar-content 149 | flex-grow: 1 150 | flex-shrink: 1 151 | 152 | .navbar-link 153 | padding-right: 2.5em 154 | 155 | .navbar-dropdown 156 | font-size: 0.875rem 157 | padding-bottom: 0.5rem 158 | padding-top: 0.5rem 159 | .navbar-item 160 | padding-left: 1.5rem 161 | padding-right: 1.5rem 162 | 163 | .navbar-divider 164 | background-color: $navbar-divider-background-color 165 | border: none 166 | display: none 167 | height: 1px 168 | margin: 0.5rem 0 169 | 170 | +touch 171 | .navbar > .container 172 | display: block 173 | .navbar-brand, 174 | .navbar-tabs 175 | .navbar-item 176 | align-items: center 177 | display: flex 178 | .navbar-menu 179 | background-color: $white 180 | box-shadow: 0 8px 16px rgba($black, 0.1) 181 | padding: 0.5rem 0 182 | &.is-active 183 | display: block 184 | 185 | +desktop 186 | .navbar, 187 | .navbar-menu, 188 | .navbar-start, 189 | .navbar-end 190 | align-items: stretch 191 | display: flex 192 | .navbar 193 | min-height: $navbar-height 194 | &.is-transparent 195 | a.navbar-item, 196 | .navbar-link 197 | &:hover, 198 | &.is-active 199 | background-color: transparent !important 200 | .navbar-item.has-dropdown 201 | &.is-active, 202 | &.is-hoverable:hover 203 | .navbar-link 204 | background-color: transparent !important 205 | .navbar-dropdown 206 | a.navbar-item 207 | &:hover 208 | background-color: $navbar-dropdown-item-hover-background-color 209 | color: $navbar-dropdown-item-hover-color 210 | &.is-active 211 | background-color: $navbar-dropdown-item-active-background-color 212 | color: $navbar-dropdown-item-active-color 213 | .navbar-burger 214 | display: none 215 | .navbar-item, 216 | .navbar-link 217 | align-items: center 218 | display: flex 219 | .navbar-item 220 | &.has-dropdown 221 | align-items: stretch 222 | &.is-active, 223 | &.is-hoverable:hover 224 | .navbar-dropdown 225 | display: block 226 | &.is-boxed 227 | opacity: 1 228 | pointer-events: auto 229 | transform: translateY(0) 230 | .navbar-link 231 | &::after 232 | +arrow($navbar-dropdown-arrow) 233 | margin-top: -0.375em 234 | right: 1.125em 235 | top: 50% 236 | .navbar-menu 237 | flex-grow: 1 238 | flex-shrink: 0 239 | .navbar-start 240 | justify-content: flex-start 241 | margin-right: auto 242 | .navbar-end 243 | justify-content: flex-end 244 | margin-left: auto 245 | .navbar-dropdown 246 | background-color: $navbar-dropdown-background-color 247 | border-bottom-left-radius: $navbar-dropdown-radius 248 | border-bottom-right-radius: $navbar-dropdown-radius 249 | border-top: $navbar-dropdown-border-top 250 | box-shadow: 0 8px 8px rgba($black, 0.1) 251 | display: none 252 | font-size: 0.875rem 253 | left: 0 254 | min-width: 100% 255 | position: absolute 256 | top: 100% 257 | z-index: $navbar-dropdown-z 258 | .navbar-item 259 | padding: 0.375rem 1rem 260 | white-space: nowrap 261 | a.navbar-item 262 | padding-right: 3rem 263 | &:hover 264 | background-color: $navbar-dropdown-item-hover-background-color 265 | color: $navbar-dropdown-item-hover-color 266 | &.is-active 267 | background-color: $navbar-dropdown-item-active-background-color 268 | color: $navbar-dropdown-item-active-color 269 | &.is-boxed 270 | border-radius: $navbar-dropdown-boxed-radius 271 | border-top: none 272 | box-shadow: $navbar-dropdown-boxed-shadow 273 | display: block 274 | opacity: 0 275 | pointer-events: none 276 | top: calc(100% + (#{$navbar-dropdown-offset})) 277 | transform: translateY(-5px) 278 | transition-duration: $speed 279 | transition-property: opacity, transform 280 | &.is-right 281 | left: auto 282 | right: 0 283 | .navbar-divider 284 | display: block 285 | .container > .navbar 286 | .navbar-brand 287 | margin-left: -1rem 288 | .navbar-menu 289 | margin-right: -1rem 290 | // Hover/Active states 291 | a.navbar-item, 292 | .navbar-link 293 | &.is-active 294 | color: $navbar-item-active-color 295 | &.is-active:not(:hover) 296 | background-color: $navbar-item-active-background-color 297 | .navbar-item.has-dropdown 298 | &:hover, 299 | &.is-active 300 | .navbar-link 301 | background-color: $navbar-item-hover-background-color 302 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/sass/elements/form.sass: -------------------------------------------------------------------------------- 1 | $input-color: $grey-darker !default 2 | $input-background-color: $white !default 3 | $input-border-color: $grey-lighter !default 4 | $input-shadow: inset 0 1px 2px rgba($black, 0.1) !default 5 | 6 | $input-hover-color: $grey-darker !default 7 | $input-hover-border-color: $grey-light !default 8 | 9 | $input-focus-color: $grey-darker !default 10 | $input-focus-border-color: $link !default 11 | $input-focus-box-shadow-size: 0 0 0 0.125em !default 12 | $input-focus-box-shadow-color: rgba($link, 0.25) !default 13 | 14 | $input-disabled-color: $text-light !default 15 | $input-disabled-background-color: $background !default 16 | $input-disabled-border-color: $background !default 17 | 18 | $input-arrow: $link !default 19 | 20 | $input-icon-color: $grey-lighter !default 21 | $input-icon-active-color: $grey !default 22 | 23 | $input-radius: $radius !default 24 | 25 | $file-border-color: $border !default 26 | $file-radius: $radius !default 27 | 28 | $file-cta-background-color: $white-ter !default 29 | $file-cta-color: $grey-dark !default 30 | $file-cta-hover-color: $grey-darker !default 31 | $file-cta-active-color: $grey-darker !default 32 | 33 | $file-name-border-color: $border !default 34 | $file-name-border-style: solid !default 35 | $file-name-border-width: 1px 1px 1px 0 !default 36 | $file-name-max-width: 16em !default 37 | 38 | $label-color: $grey-darker !default 39 | $label-weight: $weight-bold !default 40 | 41 | $help-size: $size-small !default 42 | 43 | =input 44 | +control 45 | background-color: $input-background-color 46 | border-color: $input-border-color 47 | color: $input-color 48 | +placeholder 49 | color: rgba($input-color, 0.3) 50 | &:hover, 51 | &.is-hovered 52 | border-color: $input-hover-border-color 53 | &:focus, 54 | &.is-focused, 55 | &:active, 56 | &.is-active 57 | border-color: $input-focus-border-color 58 | box-shadow: $input-focus-box-shadow-size $input-focus-box-shadow-color 59 | &[disabled] 60 | background-color: $input-disabled-background-color 61 | border-color: $input-disabled-border-color 62 | box-shadow: none 63 | color: $input-disabled-color 64 | +placeholder 65 | color: rgba($input-disabled-color, 0.3) 66 | 67 | .input, 68 | .textarea 69 | +input 70 | box-shadow: $input-shadow 71 | max-width: 100% 72 | width: 100% 73 | &[type="search"] 74 | border-radius: 290486px 75 | &[readonly] 76 | box-shadow: none 77 | // Colors 78 | @each $name, $pair in $colors 79 | $color: nth($pair, 1) 80 | &.is-#{$name} 81 | border-color: $color 82 | &:focus, 83 | &.is-focused, 84 | &:active, 85 | &.is-active 86 | box-shadow: $input-focus-box-shadow-size rgba($color, 0.25) 87 | // Sizes 88 | &.is-small 89 | +control-small 90 | &.is-medium 91 | +control-medium 92 | &.is-large 93 | +control-large 94 | // Modifiers 95 | &.is-fullwidth 96 | display: block 97 | width: 100% 98 | &.is-inline 99 | display: inline 100 | width: auto 101 | 102 | .input 103 | &.is-static 104 | background-color: transparent 105 | border-color: transparent 106 | box-shadow: none 107 | padding-left: 0 108 | padding-right: 0 109 | 110 | .textarea 111 | display: block 112 | max-width: 100% 113 | min-width: 100% 114 | padding: 0.625em 115 | resize: vertical 116 | &:not([rows]) 117 | max-height: 600px 118 | min-height: 120px 119 | &[rows] 120 | height: unset 121 | // Modifiers 122 | &.has-fixed-size 123 | resize: none 124 | 125 | .checkbox, 126 | .radio 127 | cursor: pointer 128 | display: inline-block 129 | line-height: 1.25 130 | position: relative 131 | input 132 | cursor: pointer 133 | &:hover 134 | color: $input-hover-color 135 | &[disabled] 136 | color: $input-disabled-color 137 | cursor: not-allowed 138 | 139 | .radio 140 | & + .radio 141 | margin-left: 0.5em 142 | 143 | .select 144 | display: inline-block 145 | max-width: 100% 146 | position: relative 147 | vertical-align: top 148 | &:not(.is-multiple) 149 | height: 2.25em 150 | &::after 151 | +arrow($input-arrow) 152 | margin-top: -0.375em 153 | right: 1.125em 154 | top: 50% 155 | z-index: 4 156 | select 157 | +input 158 | cursor: pointer 159 | display: block 160 | font-size: 1em 161 | max-width: 100% 162 | outline: none 163 | &::-ms-expand 164 | display: none 165 | &[disabled]:hover 166 | border-color: $input-disabled-border-color 167 | &:not([multiple]) 168 | padding-right: 2.5em 169 | &[multiple] 170 | height: unset 171 | padding: 0 172 | option 173 | padding: 0.5em 1em 174 | // States 175 | &:hover 176 | &::after 177 | border-color: $input-hover-color 178 | // Colors 179 | @each $name, $pair in $colors 180 | $color: nth($pair, 1) 181 | &.is-#{$name} select 182 | border-color: $color 183 | &:focus, 184 | &.is-focused, 185 | &:active, 186 | &.is-active 187 | box-shadow: $input-focus-box-shadow-size rgba($color, 0.25) 188 | // Sizes 189 | &.is-small 190 | +control-small 191 | &.is-medium 192 | +control-medium 193 | &.is-large 194 | +control-large 195 | // Modifiers 196 | &.is-disabled 197 | &::after 198 | border-color: $input-disabled-color 199 | &.is-fullwidth 200 | width: 100% 201 | select 202 | width: 100% 203 | &.is-loading 204 | &::after 205 | +loader 206 | margin-top: 0 207 | position: absolute 208 | right: 0.625em 209 | top: 0.625em 210 | transform: none 211 | &.is-small:after 212 | font-size: $size-small 213 | &.is-medium:after 214 | font-size: $size-medium 215 | &.is-large:after 216 | font-size: $size-large 217 | 218 | .file 219 | +unselectable 220 | align-items: stretch 221 | display: flex 222 | justify-content: flex-start 223 | position: relative 224 | // Colors 225 | @each $name, $pair in $colors 226 | $color: nth($pair, 1) 227 | $color-invert: nth($pair, 2) 228 | &.is-#{$name} 229 | .file-cta 230 | background-color: $color 231 | border-color: transparent 232 | color: $color-invert 233 | &:hover, 234 | &.is-hovered 235 | .file-cta 236 | background-color: darken($color, 2.5%) 237 | border-color: transparent 238 | color: $color-invert 239 | &:focus, 240 | &.is-focused 241 | .file-cta 242 | border-color: transparent 243 | box-shadow: 0 0 0.5em rgba($color, 0.25) 244 | color: $color-invert 245 | &:active, 246 | &.is-active 247 | .file-cta 248 | background-color: darken($color, 5%) 249 | border-color: transparent 250 | color: $color-invert 251 | // Sizes 252 | &.is-small 253 | font-size: $size-small 254 | &.is-medium 255 | font-size: $size-medium 256 | .file-icon 257 | .fa 258 | font-size: 21px 259 | &.is-large 260 | font-size: $size-large 261 | .file-icon 262 | .fa 263 | font-size: 28px 264 | // Modifiers 265 | &.has-name 266 | .file-cta 267 | border-bottom-right-radius: 0 268 | border-top-right-radius: 0 269 | .file-name 270 | border-bottom-left-radius: 0 271 | border-top-left-radius: 0 272 | &.is-centered 273 | justify-content: center 274 | &.is-right 275 | justify-content: flex-end 276 | &.is-boxed 277 | .file-label 278 | flex-direction: column 279 | .file-cta 280 | flex-direction: column 281 | height: auto 282 | padding: 1em 3em 283 | .file-name 284 | border-width: 0 1px 1px 285 | .file-icon 286 | height: 1.5em 287 | width: 1.5em 288 | .fa 289 | font-size: 21px 290 | &.is-small 291 | .file-icon .fa 292 | font-size: 14px 293 | &.is-medium 294 | .file-icon .fa 295 | font-size: 28px 296 | &.is-large 297 | .file-icon .fa 298 | font-size: 35px 299 | &.has-name 300 | .file-cta 301 | border-radius: $file-radius $file-radius 0 0 302 | .file-name 303 | border-radius: 0 0 $file-radius $file-radius 304 | border-width: 0 1px 1px 305 | &.is-right 306 | .file-cta 307 | border-radius: 0 $file-radius $file-radius 0 308 | .file-name 309 | border-radius: $file-radius 0 0 $file-radius 310 | border-width: 1px 0 1px 1px 311 | order: -1 312 | &.is-fullwidth 313 | .file-label 314 | width: 100% 315 | .file-name 316 | flex-grow: 1 317 | max-width: none 318 | 319 | .file-label 320 | align-items: stretch 321 | display: flex 322 | cursor: pointer 323 | justify-content: flex-start 324 | overflow: hidden 325 | position: relative 326 | &:hover 327 | .file-cta 328 | background-color: darken($file-cta-background-color, 2.5%) 329 | color: $file-cta-hover-color 330 | .file-name 331 | border-color: darken($file-name-border-color, 2.5%) 332 | &:active 333 | .file-cta 334 | background-color: darken($file-cta-background-color, 5%) 335 | color: $file-cta-active-color 336 | .file-name 337 | border-color: darken($file-name-border-color, 5%) 338 | 339 | .file-input 340 | height: 0.01em 341 | left: 0 342 | outline: none 343 | position: absolute 344 | top: 0 345 | width: 0.01em 346 | 347 | .file-cta, 348 | .file-name 349 | +control 350 | border-color: $file-border-color 351 | border-radius: $file-radius 352 | font-size: 1em 353 | padding-left: 1em 354 | padding-right: 1em 355 | white-space: nowrap 356 | 357 | .file-cta 358 | background-color: $file-cta-background-color 359 | color: $file-cta-color 360 | 361 | .file-name 362 | border-color: $file-name-border-color 363 | border-style: $file-name-border-style 364 | border-width: $file-name-border-width 365 | display: block 366 | max-width: $file-name-max-width 367 | overflow: hidden 368 | text-align: left 369 | text-overflow: ellipsis 370 | 371 | .file-icon 372 | align-items: center 373 | display: flex 374 | height: 1em 375 | justify-content: center 376 | margin-right: 0.5em 377 | width: 1em 378 | .fa 379 | font-size: 14px 380 | 381 | .label 382 | color: $label-color 383 | display: block 384 | font-size: $size-normal 385 | font-weight: $label-weight 386 | &:not(:last-child) 387 | margin-bottom: 0.5em 388 | // Sizes 389 | &.is-small 390 | font-size: $size-small 391 | &.is-medium 392 | font-size: $size-medium 393 | &.is-large 394 | font-size: $size-large 395 | 396 | .help 397 | display: block 398 | font-size: $help-size 399 | margin-top: 0.25rem 400 | @each $name, $pair in $colors 401 | $color: nth($pair, 1) 402 | &.is-#{$name} 403 | color: $color 404 | 405 | // Containers 406 | 407 | .field 408 | &:not(:last-child) 409 | margin-bottom: 0.75rem 410 | // Modifiers 411 | &.has-addons 412 | display: flex 413 | justify-content: flex-start 414 | .control 415 | &:not(:last-child) 416 | margin-right: -1px 417 | &:first-child 418 | .button, 419 | .input, 420 | .select select 421 | border-bottom-left-radius: $input-radius 422 | border-top-left-radius: $input-radius 423 | &:last-child 424 | .button, 425 | .input, 426 | .select select 427 | border-bottom-right-radius: $input-radius 428 | border-top-right-radius: $input-radius 429 | .button, 430 | .input, 431 | .select select 432 | border-radius: 0 433 | &:hover, 434 | &.is-hovered 435 | z-index: 2 436 | &:focus, 437 | &.is-focused, 438 | &:active, 439 | &.is-active 440 | z-index: 3 441 | &:hover 442 | z-index: 4 443 | &.is-expanded 444 | flex-grow: 1 445 | &.has-addons-centered 446 | justify-content: center 447 | &.has-addons-right 448 | justify-content: flex-end 449 | &.has-addons-fullwidth 450 | .control 451 | flex-grow: 1 452 | flex-shrink: 0 453 | &.is-grouped 454 | display: flex 455 | justify-content: flex-start 456 | & > .control 457 | flex-shrink: 0 458 | &:not(:last-child) 459 | margin-bottom: 0 460 | margin-right: 0.75rem 461 | &.is-expanded 462 | flex-grow: 1 463 | flex-shrink: 1 464 | &.is-grouped-centered 465 | justify-content: center 466 | &.is-grouped-right 467 | justify-content: flex-end 468 | &.is-grouped-multiline 469 | flex-wrap: wrap 470 | & > .control 471 | &:last-child, 472 | &:not(:last-child) 473 | margin-bottom: 0.75rem 474 | &:last-child 475 | margin-bottom: -0.75rem 476 | &:not(:last-child) 477 | margin-bottom: 0 478 | 479 | &.is-horizontal 480 | +tablet 481 | display: flex 482 | 483 | .field-label 484 | .label 485 | font-size: inherit 486 | +mobile 487 | margin-bottom: 0.5rem 488 | +tablet 489 | flex-basis: 0 490 | flex-grow: 1 491 | flex-shrink: 0 492 | margin-right: 1.5rem 493 | text-align: right 494 | &.is-small 495 | font-size: $size-small 496 | padding-top: 0.375em 497 | &.is-normal 498 | padding-top: 0.375em 499 | &.is-medium 500 | font-size: $size-medium 501 | padding-top: 0.375em 502 | &.is-large 503 | font-size: $size-large 504 | padding-top: 0.375em 505 | 506 | .field-body 507 | .field .field 508 | margin-bottom: 0 509 | +tablet 510 | display: flex 511 | flex-basis: 0 512 | flex-grow: 5 513 | flex-shrink: 1 514 | .field 515 | margin-bottom: 0 516 | & > .field 517 | flex-shrink: 1 518 | &:not(.is-narrow) 519 | flex-grow: 1 520 | &:not(:last-child) 521 | margin-right: 0.75rem 522 | 523 | .control 524 | font-size: $size-normal 525 | position: relative 526 | text-align: left 527 | // Modifiers 528 | // DEPRECATED 529 | &.has-icon 530 | .icon 531 | color: $input-icon-color 532 | height: 2.25em 533 | pointer-events: none 534 | position: absolute 535 | top: 0 536 | width: 2.25em 537 | z-index: 4 538 | .input 539 | &:focus 540 | & + .icon 541 | color: $input-icon-active-color 542 | &.is-small 543 | & + .icon 544 | font-size: $size-small 545 | &.is-medium 546 | & + .icon 547 | font-size: $size-medium 548 | &.is-large 549 | & + .icon 550 | font-size: $size-large 551 | &:not(.has-icon-right) 552 | .icon 553 | left: 0 554 | .input 555 | padding-left: 2.25em 556 | &.has-icon-right 557 | .icon 558 | right: 0 559 | .input 560 | padding-right: 2.25em 561 | &.has-icons-left, 562 | &.has-icons-right 563 | .input, 564 | .select 565 | &:focus 566 | & ~ .icon 567 | color: $input-icon-active-color 568 | &.is-small ~ .icon 569 | font-size: $size-small 570 | &.is-medium ~ .icon 571 | font-size: $size-medium 572 | &.is-large ~ .icon 573 | font-size: $size-large 574 | .icon 575 | color: $input-icon-color 576 | height: 2.25em 577 | pointer-events: none 578 | position: absolute 579 | top: 0 580 | width: 2.25em 581 | z-index: 4 582 | &.has-icons-left 583 | .input, 584 | .select select 585 | padding-left: 2.25em 586 | .icon.is-left 587 | left: 0 588 | &.has-icons-right 589 | .input, 590 | .select select 591 | padding-right: 2.25em 592 | .icon.is-right 593 | right: 0 594 | &.is-loading 595 | &::after 596 | +loader 597 | position: absolute !important 598 | right: 0.625em 599 | top: 0.625em 600 | &.is-small:after 601 | font-size: $size-small 602 | &.is-medium:after 603 | font-size: $size-medium 604 | &.is-large:after 605 | font-size: $size-large 606 | -------------------------------------------------------------------------------- /static/website/bulma-0.6.0/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Bulma Changelog 2 | 3 | ## 0.6.0 4 | 5 | ### Breaking changes 6 | 7 | * The new `$link` color is part of the `$colors` map. As a result, `.button.is-link` is a colored button now. Use `.button.is-text` if you want the underlined button. 8 | * The deprecated `variables.sass` file has been removed. 9 | * The deprecated `nav.sass` file has been removed. 10 | 11 | ### New features 12 | 13 | * #1236 `.table` hover effect is opt-in, by using the `.is-hoverable` modifier class 14 | * #1254 `.dropdown` now supports `.is-up` modifier 15 | 16 | ### Improvements 17 | 18 | * #1257 Include placeholder mixin in `=input` 19 | 20 | The `$link` color is used instead of `$primary` in the following components: 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
VariableOld valueNew value
$dropdown-item-active-color$primary-invert$link-invert
$dropdown-item-active-background-color$primary$link
$navbar-tab-hover-border-bottom-color$primary$link
$navbar-tab-active-color$primary$link
$navbar-tab-active-border-bottom-color$primary$link
$navbar-dropdown-item-active-color$primary$link
$tabs-link-active-border-bottom-color$primary$link
$tabs-link-active-color$primary$link
$tabs-toggle-link-active-background-color$primary$link
$tabs-toggle-link-active-border-color$primary$link
$tabs-toggle-link-active-color$primary-invert$link-invert
84 | 85 | ### Issues closed 86 | 87 | * #708 Import variables in mixins 88 | 89 | ## 0.5.3 90 | 91 | ### New features 92 | 93 | * #1101 `.card-header-title` can be centered with `.is-centered` 94 | * #1189 `.input` readonly and `.is-static` 95 | * #1189 `.textarea` readonly 96 | 97 | ### Issues closed 98 | 99 | * #1177 Fix `.message .tag` combination 100 | * #1167 Fix `pre code` 101 | * #1207 Fix `.breadcrumb` alignment 102 | 103 | ## 0.5.2 104 | 105 | ### New features 106 | 107 | * #842 `navbar` color modifiers 108 | * #331 Support for third party icons 109 | * Added `$button-focus-box-shadow-size` and `$button-focus-box-shadow-color` for customization 110 | * Added `$input-focus-box-shadow-size` and `$input-focus-box-shadow-color` for customization 111 | * Navbar tabs 112 | 113 | ### Issues closed 114 | 115 | * #1168 Undefined variable: `$navbar-item` 116 | * #930 Remove `vertical-align: top` for icons 117 | * #735 Font awesome custom `font-size` 118 | * #395 Font awesome stacked icons 119 | * #1152 Level-items not centered horizontally on mobile 120 | * #1147 Add `text-size-adjust: 100%` to `html` 121 | * #1106 `pagination` docs 122 | * #1063 `$family-primary` customization 123 | 124 | ## 0.5.1 125 | 126 | ### New features 127 | 128 | * 🎉 #280 [File upload element](http://bulma.io/documentation/form/file/) 129 | * `$container-offset` variable to determine the `.container` breakpoints 130 | * #1001 Text case helpers 131 | 132 | ### Issues closed 133 | 134 | * #1030 Add `!important` to non responsive display helpers 135 | * #1020 Customizing `.navbar-item img` max height 136 | * #998 `.navbar-dropdown` with **right** alignment 137 | * #877 `.pagination` isn't using `$pagination-background` 138 | * #989 `navbar-brand` overflowing on mobile 139 | * #975 Variable `$table-head-color` isn't used 140 | * #964 Tabs sass file throwing error with `!important` 141 | * #949 `.is-size-7` helper is missing 142 | 143 | ## 0.5.0 144 | 145 | ### New features 146 | 147 | * 🎉 [List of tags](http://bulma.io/documentation/elements/tag/#list-of-tags) 148 | * New **variable naming system**: `component`-`subcomponent`-`state`-`property` 149 | * Improved **customization** thanks to new set of variables 150 | * #934 New `.is-shadowless` helper 151 | 152 | Variable name changes (mostly appending `-color`): 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 |
FromTo
$card$card-color
$card-background$card-background-color
$card-header$card-header-color
$dropdown-item$dropdown-item-color
$dropdown-content-background$dropdown-content-background-color
$dropdown-item-hover-background$dropdown-item-hover-background-color
$dropdown-item-hover$dropdown-item-hover-color
$dropdown-item-active-background$dropdown-item-active-background-color
$dropdown-item-active$dropdown-item-active-color
$dropdown-divider-background$dropdown-divider-background-color
$menu-item$menu-item-color
$menu-item-hover$menu-item-hover-color
$menu-item-hover-background$menu-item-hover-background-color
$menu-item-active$menu-item-active-color
$menu-item-active-background$menu-item-active-background-color
$menu-label$menu-label-color
$message-background$message-background-color
$message-header-background$message-header-background-color
$navbar-background$navbar-background-color
$navbar-item$navbar-item-color
$navbar-item-hover$navbar-item-hover-color
$navbar-item-hover-background$navbar-item-hover-background-color
$navbar-item-active$navbar-item-active-color
$navbar-item-active-background$navbar-item-active-background-color
$navbar-tab-hover-background$navbar-tab-hover-background-color
$navbar-tab-hover-border-bottom$navbar-tab-hover-border-bottom-color
$navbar-tab-active$navbar-tab-active-color
$navbar-tab-active-background$navbar-tab-active-background-color
$navbar-divider-background$navbar-divider-background-color
$navbar-dropdown-item-hover$navbar-dropdown-item-hover-color
$navbar-dropdown-item-hover-background$navbar-dropdown-item-hover-background-color
$navbar-dropdown-item-active$navbar-dropdown-item-active-color
$navbar-dropdown-item-active-background$navbar-dropdown-item-active-background-color
$pagination$pagination-color
$pagination-hover$pagination-hover-color
$pagination-hover-border$pagination-hover-border-color
$pagination-focus$pagination-focus-color
$pagination-focus-border$pagination-focus-border-color
$pagination-active$pagination-active-color
$pagination-active-border$pagination-active-border-color
$pagination-disabled$pagination-disabled-color
$pagination-disabled-background$pagination-disabled-background-color
$pagination-disabled-border$pagination-disabled-border-color
$pagination-current$pagination-current-color
$pagination-current-background$pagination-current-background-color
$pagination-current-border$pagination-current-border-color
$pagination-ellipsis$pagination-ellipsis-color
$box$box-color
$box-background$box-background-color
$button$button-color
$button-background$button-background-color
$button-border$button-border-color
$button-link$button-link-color
$button-link-hover-background$button-link-hover-background-color
$button-link-hover$button-link-hover-color
$button-disabled-background$button-disabled-background-color
$button-disabled-border$button-disabled-border-color
$button-static$button-static-color
$button-static-background$button-static-background-color
$button-static-border$button-static-border-color
$input$input-color
$input-background$input-background-color
$input-border$input-border-color
$input-hover$input-hover-color
$input-hover-border$input-hover-border-color
$input-focus$input-focus-color
$input-focus-border$input-focus-border-color
$input-disabled$input-disabled-color
$input-disabled-background$input-disabled-background-color
$input-disabled-border$input-disabled-border-color
$input-icon$input-icon-color
$input-icon-active$input-icon-active-color
$title$title-color
$subtitle$subtitle-color
$card-footer-border$card-footer-border-top
$menu-list-border$menu-list-border-left
$navbar-tab-hover-border$navbar-tab-hover-border-bottom-color
$navbar-tab-active-border$navbar-tab-active-border-bottom
$table-border$table-cell-border
$table-row-even-background$table-striped-row-even-background-color
$table-row-even-hover-background$table-striped-row-even-hover-background-color
238 | 239 | ### Improved documentation 240 | 241 | * [Starter template](http://bulma.io/documentation/overview/start/#starter-template) 242 | * [Colors page](http://bulma.io/documentation/overview/colors/) 243 | * [Typography helpers](http://bulma.io/documentation/modifiers/typography-helpers/) 244 | * **Meta** information for all elements and components 245 | * **Variables** information for most elements and components 246 | 247 | ### Issues closed 248 | 249 | * #909 `.dropdown` wrapping 250 | * #938 `.is-fullwidth` removed from docs 251 | * #900 Variable `.navbar-item` for hover+active background/color 252 | * #902 `.navbar-item` color overrides 253 | 254 | ## 0.4.4 255 | 256 | ### New features 257 | 258 | * New [dropdown button](http://bulma.io/documentation/components/dropdown/)! 259 | * The breakpoints and `.container` **gap** can be customized with the new `$gap` variable 260 | * The `.container` has 2 new modifiers: `.is-widescreen` and `.is-fullhd` 261 | 262 | ### Issues closed 263 | 264 | * Fix #26 `.textarea` element will honors `[rows]` attribute 265 | * Fix #887 `body` scrollbar 266 | * Fix #715 `.help` class behaviour in horizontal form `is-grouped` field 267 | * Fix #842 Adding modifiers in `navbar` 268 | * Fix #841 `.container` as direct child of `.navbar` moves `.navbar-menu` below `.navbar-brand` 269 | * Fix #861 Box in hero as text and background white 270 | * Fix #852 charset and version number 271 | * Fix #856 JavaScript `.nav-burger` example 272 | * Fix #821 Notification strong color 273 | 274 | ## 0.4.3 275 | 276 | ### New features 277 | 278 | * New navbar with dropdown support 279 | * Add new feature: Breadcrumb component (#632) @vinialbano 280 | * Add Bloomer to README.md (#787) @AlgusDark 281 | * Add responsive is-*-touch tags for .column sizes (#780) @tom-rb 282 | * Adding 'is-hidden' to helpers in docs (#798) @aheuermann 283 | * Add figure/figcaption as content element (#807) @werthen 284 | * Add and support to content (#808) @werthen 285 | * Add re-bulma and react-bulma (#809) @kulakowka 286 | * Add is-halfheight to hero (#783) @felipeas 287 | * Added a related project with Golang backend (#784) @Caiyeon 288 | 289 | ### Issues closed 290 | 291 | * Fix #827 Breadcrumb and Navbar in docs 292 | * Fix #824 Code examples broken because of `text-align: center` 293 | * Fix #820 Loading spinner resizes with controls 294 | * Fix #819 Remove `height: auto` from media elements 295 | * Fix #790 Documentation typo 296 | * Fix #814 Make use of +fullhd mixin for columns @Saboteur777 297 | * Fix #781 Add min/max height/width to delete class size modifiers @ZackWard 298 | * Fix #391 Section docs update 299 | 300 | ## 0.4.2 301 | 302 | * Fix #728 selected row on striped table 303 | * Fix #747 remove flex-shrink for is-expanded 304 | * Fix #702 add icons support for select dropdown 305 | * Fix #712 delete button as flexbox item 306 | * Fix #759 static button 307 | 308 | ## 0.4.1 309 | 310 | * Fix #568 max-width container 311 | * Fix #589 notification delete 312 | * Fix #272 nav-right without nav-menu 313 | * Fix #616 hero and notification buttons 314 | * Fix #607 has-addons z-index 315 | * Feature #586 select color modifiers 316 | * Fix #537 -ms-expand 317 | * Fix #578 better `+center` mixin 318 | * Fix #565 `dl` styles 319 | * Fix #389 `pre` `margin-bottom` 320 | * Fix #484 icon alignment 321 | * Fix #506 bold nav menu 322 | * Fix #581 nav container 323 | * Fix #512 nav grouped buttons 324 | * Fix #605 container example 325 | * Fix #458 select expanded 326 | * Fix #403 separate animations 327 | * Fix #637 customize Bulma 328 | * Fix #584 loading select 329 | * Fix #571 control height 330 | * Fix #634 is-grouped control 331 | * Fix #676 checkbox/radio wrapping 332 | * Feature #479 has-icons placement 333 | * Fix #442 selected table row 334 | * Fix #187 add customize page 335 | * Fix #449 columns negative horizontal margin 336 | * Fix #399 pagination wrapping 337 | * Fix #227 color keys as strings 338 | 339 | ## 0.4.0 340 | 341 | * **Default font-size is 16px** 342 | * **New `.field` element ; `.control` repurposed** 343 | * **New `.pagination` sizes** 344 | * **New `$fullhd` breakpoint (1344px)** 345 | 346 | * Remove monospace named fonts 347 | * Remove icon spacing logic 348 | * Split icon container dimensions and icon size 349 | * Fix delete button by using pixels instead of (r)em 350 | * Fix level on mobile 351 | * Add new `.is-spaced` modifier for titles and subtitles 352 | 353 | * Fix #487 354 | * Fix #489 355 | * Fix #502 356 | * Fix #514 357 | * Fix #524 358 | * Fix #536 359 | 360 | ## 0.3.2 361 | 362 | * Fix #478 363 | 364 | ## 0.3.1 365 | 366 | * Fix #441 367 | * Fix #443 368 | 369 | ## 0.3.0 370 | 371 | * Use `rem` and `em` (!) 372 | * Fix Font Awesome icons in buttons (!) 373 | * Fix message colors (!) 374 | * Use `{% capture %}` to ensure same display as code snippet (!) 375 | 376 | * Move variables to their own file 377 | * Remove small tag 378 | * Add `:focus` state 379 | * Fix table 380 | * Remove table `.is-icon` and `.is-link` 381 | * Add `.content` table 382 | * Fix inputs with icons 383 | * Input icons require the `.icon` container 384 | * Deprecate `.media-number` 385 | * Fix `.level-item` height 386 | * Fix `.menu` spacing 387 | * Deprecate `.menu-nav` 388 | * Add invert outlined buttons 389 | * Fix `.nav` 390 | * Fix `.pagination` 391 | * Fix `.tabs` 392 | * Fix `.panel` 393 | * Fix `.delete` 394 | * Add mixins documentation 395 | * Add functions documentation 396 | 397 | ## 0.2.2 398 | 399 | * Fix: remove multiple imports 400 | 401 | ## 0.2.1 402 | 403 | * Fix: container flex 404 | * Fix: nav-item flex 405 | * Fix: media-number flex 406 | * Fix: new brand colors 407 | 408 | ## 0.2.0 409 | 410 | * Added: new branding 411 | * Added: modularity 412 | * Added: grid folder 413 | * Added: .github folder 414 | 415 | ## 0.1.1 416 | 417 | * Remove `flex: 1` shorthand 418 | 419 | ## 0.1.0 420 | 421 | * Fix #227 422 | * Fix #232 423 | * Fix #242 424 | * Fix #243 425 | * Fix #228 426 | * Fix #245 427 | * Fix #246 428 | 429 | ## 0.0.28 430 | 431 | * BREAKING: `.control.is-grouped` now uses `.control` elements as direct children 432 | * Fix #220 433 | * Fix #214 434 | * Fix #210 435 | * Fix #206 436 | * Fix #122 437 | 438 | ## 0.0.27 439 | 440 | * Fix: #217 441 | * Fix: #213 442 | * Fix: #209 443 | * Fix: #205 444 | * Fix: #204 445 | * Fix: #81 446 | 447 | ## 0.0.26 448 | 449 | * Added: `.modal-card` 450 | * Added: display responsive utilites 451 | * Added: `.nav-center` 452 | * Added: `.tabs ul` left center right 453 | * Changed: `.navbar` renamed to `.level` 454 | * Changed: `.header` renamed to `.nav` 455 | * Deprecated: `.header` 456 | * Deprecated: `.navbar` 457 | * Fixed: `.hero` layout 458 | 459 | ## 0.0.25 460 | 461 | * Added: `utilities/controls.sass` and `elements/form.sass` 462 | * Added: new responsive classes 463 | * Added: white/black and light/dark colors 464 | * Changed: `.tabs` need `.icon` now 465 | * Changed: cdnjs link doesn't include version 466 | 467 | ## 0.0.24 468 | 469 | ### Added 470 | 471 | * `is-mobile` for the navbar 472 | 473 | ### Removed 474 | 475 | * removed border between sections. Use `
` now 476 | 477 | ### Updated 478 | 479 | * restructured files 480 | * added back `inline-flex` for controls and tags 481 | 482 | ### Removed 483 | 484 | * test tiles 485 | 486 | ## 0.0.23 487 | 488 | ### BREAKING 489 | 490 | * `bulma` folder renamed to `sass` to avoid the redundant `bulma/bulma` path 491 | * `variables.sass` moved to `/utilities` 492 | * almost everything is singular now 493 | * **elements** only have one class 494 | * **components** have at least one sub-class 495 | * `.content` moved to elements 496 | * `.table` moved to elements 497 | * `.message` moved to components 498 | * `.table-icon`, `.table-link`, `.table-narrow` are now called `.is-icon`, `.is-link`, `.is-narrow` 499 | 500 | ### Added 501 | 502 | * all variables are now `!default` so you can set your custom variables before importing Bulma 503 | 504 | ## 0.0.22 505 | 506 | ### Fixed 507 | 508 | * links in hero subtitle 509 | 510 | ## 0.0.21 511 | 512 | ### Added 513 | 514 | * `.column.is-narrow` to make a column `flex: none` 515 | 516 | ## 0.0.20 517 | 518 | ### Added 519 | 520 | * `.has-icon` support for different `.input` sizes 521 | 522 | ## 0.0.19 523 | 524 | ### NEW!!! 525 | 526 | * `.tile` 527 | 528 | ### BREAKING 529 | 530 | * `.is-third` renamed to `.is-one-third` 531 | * `.is-quarter` renamed to `.is-one-quarter` 532 | 533 | ### Added 534 | 535 | * `.is-two-thirds` 536 | * `.is-three-quarters` 537 | 538 | ### Changed 539 | 540 | * `.delete` in `.tag` has no red 541 | 542 | ## 0.0.18 543 | 544 | ### BREAKING 545 | 546 | * `.is-text-*` renamed to `.has-text-*` 547 | * removed `.is-fullwidth` helper 548 | 549 | ### Added 550 | 551 | * **small tag**: `.tag.is-small` 552 | * 12th column classes 553 | * `*-full` column classes 554 | * `$family-code` 555 | 556 | ### Fixed 557 | 558 | * disabled input with element 559 | * `.table` last row with `th` 560 | * `.card` color in `.hero` 561 | * `.columns.is-gapless` 562 | 563 | ### Removed 564 | 565 | * removed `box-shadow` from `.tag` 566 | * custom checkboxes and radio buttons 567 | 568 | ### Updated 569 | 570 | * `.tag` uses `display: inline-flex` now 571 | 572 | ## 0.0.17 573 | 574 | ### Added 575 | 576 | * **pagination**: `.pagination` 577 | * **horizontal forms**: `.control.is-horizontal` 578 | * **help** text for form controls: `.help` 579 | * **progress bars**: `.progress` 580 | 581 | ### Updated 582 | 583 | * `.button` uses `display: inline-flex` now 584 | * `.button` needs an `.icon` now 585 | * `.control.is-grouped` renamed to `.control.has-addons` 586 | * `.control.is-inline` renamed to `.control.is-grouped` 587 | 588 | ### Removed 589 | 590 | * **helpers** `.is-inline` and `.is-block` 591 | --------------------------------------------------------------------------------