Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
17545b5261 | ||
|
|
6560d3e89b | ||
|
|
31cffdb24b | ||
|
|
2b5c3529d6 | ||
|
|
195c49b0fd | ||
|
|
3b7980ffe9 | ||
|
|
de85988039 | ||
|
|
ec638d51f9 | ||
|
|
b69f917d57 | ||
|
|
42e25f57a4 | ||
|
|
3bb9040797 | ||
|
|
b47ee8f832 | ||
|
|
8c004276a7 | ||
|
|
0296617746 | ||
|
|
a858158316 | ||
|
|
52d327ec83 | ||
|
|
49dfec0c70 | ||
|
|
44d76dae0b | ||
|
|
cf560a8d3d | ||
|
|
8d2e0ea396 | ||
|
|
4488acdfcb | ||
|
|
14c57bf9eb | ||
|
|
292235858e | ||
|
|
c7fb6102b0 | ||
|
|
f8a94b7bee | ||
|
|
fc65e15d98 | ||
|
|
acae7f51fe | ||
|
|
8d30585cdb | ||
|
|
3727f1c14a | ||
|
|
a2e7c595c1 | ||
|
|
d8a750151b | ||
|
|
9641b66346 | ||
|
|
ea7174815b | ||
|
|
1a68e4b95b | ||
|
|
4b3ffeda3c | ||
|
|
85218c6120 | ||
|
|
18012d081a | ||
|
|
1bc3e5983d | ||
|
|
32e41c05ae | ||
|
|
09d41ba682 | ||
|
|
36c7192d73 | ||
|
|
a6faa4ff96 | ||
|
|
efc1e39692 | ||
|
|
dac8319252 | ||
|
|
532cab2c6a | ||
|
|
cb53489f86 | ||
|
|
921dc92b07 | ||
|
|
0e7cb37503 | ||
|
|
e071c9f360 | ||
|
|
8aed5ace21 | ||
|
|
2ef30085d6 | ||
|
|
d02d22f52d | ||
|
|
52629901e7 | ||
|
|
9864acb26b | ||
|
|
7b042ee9fb | ||
|
|
4652736f72 | ||
|
|
75001f0723 | ||
|
|
e079ad685f | ||
|
|
2295455375 | ||
|
|
00959c73b1 | ||
|
|
b7b0238871 | ||
|
|
7f84c936ab | ||
|
|
3bb521db39 | ||
|
|
fa4f8b1f05 | ||
|
|
ca1b25afd9 | ||
|
|
3ae6a0675a | ||
|
|
3e11ea9b75 | ||
|
|
368228e5fa | ||
|
|
32bb4d94ab | ||
|
|
305e9888a0 | ||
|
|
e0936bb64e | ||
|
|
9854a17f4e | ||
|
|
3229d54365 | ||
|
|
598e2a8e57 | ||
|
|
d112e1b195 | ||
|
|
da554ff9da | ||
|
|
3b2389094d | ||
|
|
f1d7516341 | ||
|
|
edf1426ed2 | ||
|
|
cfb1074277 | ||
|
|
a93e9178dc | ||
|
|
07f37e57df | ||
|
|
14f4a9ec3d | ||
|
|
0cbda8e0c5 | ||
|
|
b9db82e31f | ||
|
|
99a8a3aeb4 | ||
|
|
c82a76d4ce | ||
|
|
11a18b6aba | ||
|
|
9f1911289a | ||
|
|
ce5b36ec37 | ||
|
|
8cdddefacc | ||
|
|
85071ba6af | ||
|
|
c05e8f9aa4 | ||
|
|
e7d499aeca | ||
|
|
54ec001fb1 | ||
|
|
fc400dffd4 | ||
|
|
ce8190c870 | ||
|
|
8dd1fd6573 | ||
|
|
2dd7bb6224 | ||
|
|
c634d16ee1 |
No files matched your search
@@ -1,6 +1,12 @@
|
||||
*.swp
|
||||
*.pyc
|
||||
settings.py
|
||||
dev.db
|
||||
static/gaute/.sass-cache
|
||||
uploads
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
static/.sass-cache
|
||||
uploads/[^.]*
|
||||
venv
|
||||
node_modules
|
||||
bower_components
|
||||
.idea
|
||||
/CACHE
|
||||
media
|
||||
@@ -1,5 +0,0 @@
|
||||
TODO:
|
||||
- Prototype register GUI.
|
||||
- Show picture of buyers and username, with balance > 0.
|
||||
- Submit orders
|
||||
- User profile settings
|
||||
@@ -0,0 +1,16 @@
|
||||
# Installation
|
||||
sudo apt-get install libmysqlclient-dev
|
||||
sudo apt-get build-dep python-imaging
|
||||
virtualenv --distribute venv
|
||||
. venv/bin/active
|
||||
pip install -r requirements
|
||||
python manage.py syncdb
|
||||
python manage.py runserver
|
||||
|
||||
# TODO
|
||||
* gulpfile.js: reload on js update, csso
|
||||
* Larger pictures
|
||||
* Compact GUI for max 768 vertical pixels
|
||||
* Search right of in title
|
||||
* Light on dark colors
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
@@ -1,16 +0,0 @@
|
||||
"""
|
||||
This file demonstrates writing tests using the unittest module. These will pass
|
||||
when you run "manage.py test".
|
||||
|
||||
Replace this with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.assertEqual(1 + 1, 2)
|
||||
@@ -1 +0,0 @@
|
||||
# Create your views here.
|
||||
@@ -0,0 +1,114 @@
|
||||
# Django settings for bbs project.
|
||||
import os
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
DEBUG = True
|
||||
|
||||
ADMINS = (
|
||||
# ('Your Name', 'your_email@example.com'),
|
||||
)
|
||||
MANAGERS = ADMINS
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': 'db.sqlite3',
|
||||
},
|
||||
}
|
||||
|
||||
TIME_ZONE = 'Europe/Oslo'
|
||||
LANGUAGE_CODE = 'nb'
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
# Media and uploads
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||
MEDIA_URL = '/media/'
|
||||
|
||||
# Static files
|
||||
STATIC_ROOT = ''
|
||||
STATIC_URL = '/static/'
|
||||
STATICFILES_DIRS = (
|
||||
os.path.join(BASE_DIR, 'static'),
|
||||
)
|
||||
|
||||
STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
)
|
||||
|
||||
# Make this unique, and don't share it with anybody.
|
||||
SECRET_KEY = 'osv$uy-ea$*%lc)+xiwt5@2b7au%u*c!pa6hmh#vl)*+tp%fss'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [
|
||||
os.path.join(BASE_DIR, 'templates'),
|
||||
],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.i18n',
|
||||
'django.template.context_processors.media',
|
||||
'django.template.context_processors.static',
|
||||
'django.template.context_processors.tz',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
]
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'bbssite.urls'
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.admin',
|
||||
|
||||
'widget_tweaks',
|
||||
'bootstrapform',
|
||||
'django_extensions',
|
||||
'rest_framework',
|
||||
'easy_thumbnails',
|
||||
)
|
||||
LOCAL_APPS = (
|
||||
'main',
|
||||
)
|
||||
INSTALLED_APPS += LOCAL_APPS
|
||||
|
||||
LOGIN_REDIRECT_URL = '/'
|
||||
|
||||
SESSION_COOKIE_AGE = 1209600 # 15 minutes
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
|
||||
BBS_SALDO_MAX = 600
|
||||
BBS_LIMIT_DEPOSITS = False
|
||||
|
||||
# Thumbnails
|
||||
THUMBNAIL_ALIASES = {
|
||||
'': {
|
||||
'product': {'size': (64, 64), 'crop': True},
|
||||
},
|
||||
}
|
||||
|
||||
try:
|
||||
from .local_settings import *
|
||||
except ImportError:
|
||||
pass
|
||||
@@ -0,0 +1,25 @@
|
||||
from django.conf import settings
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
|
||||
from main import urls as main_urls
|
||||
|
||||
|
||||
admin.autodiscover()
|
||||
|
||||
urlpatterns = [
|
||||
url(r'', include(main_urls)),
|
||||
url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
|
||||
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name='logout'),
|
||||
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
]
|
||||
urlpatterns += staticfiles_urlpatterns()
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns += [
|
||||
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
|
||||
'document_root': settings.MEDIA_ROOT,
|
||||
})
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
import os
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bbssite.settings')
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
application = get_wsgi_application()
|
||||
@@ -1,15 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
from os.path import dirname, join
|
||||
|
||||
def map_path(target_name=''):
|
||||
'''Enables path names to be decided at runtime.'''
|
||||
return join(dirname(__file__), target_name).replace('\\', '/')
|
||||
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
|
||||
|
||||
path = map_path(".")
|
||||
if path not in sys.path:
|
||||
sys.path.append(path)
|
||||
import django.core.handlers.wsgi
|
||||
application = django.core.handlers.wsgi.WSGIHandler()
|
||||
@@ -1,10 +1,12 @@
|
||||
from django.contrib import admin
|
||||
from bbs.main.models import *
|
||||
from main.models import *
|
||||
|
||||
|
||||
class ProductAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
admin.site.register(Product, ProductAdmin)
|
||||
admin.site.register(InventoryTransaction)
|
||||
admin.site.register(Order)
|
||||
admin.site.register(OrderLine)
|
||||
admin.site.register(Transaction)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
from django.db.models import Sum, Count
|
||||
from rest_framework import serializers
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
|
||||
from main.models import Product, OrderLine, Order
|
||||
|
||||
|
||||
class ProductSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = Product
|
||||
|
||||
|
||||
class ProductStatSerializer(ModelSerializer):
|
||||
EXTERNAL_USER = 'Ekstern'
|
||||
counts = serializers.SerializerMethodField()
|
||||
|
||||
def _format_counts(self, per_user):
|
||||
per_user = list(per_user)
|
||||
for row in per_user:
|
||||
first = row.pop('order__customer__first_name')
|
||||
last = row.pop('order__customer__last_name')
|
||||
if first is None:
|
||||
who = self.EXTERNAL_USER
|
||||
else:
|
||||
who = '{} {}'.format(first, last)
|
||||
row['full_name'] = who
|
||||
|
||||
return per_user
|
||||
|
||||
def get_counts(self, obj):
|
||||
name_fields = ['order__customer__first_name', 'order__customer__last_name']
|
||||
per_user = OrderLine.objects.filter(product=obj)
|
||||
per_user = per_user.values(*name_fields).annotate(amount_total=Sum('amount')).order_by('-amount_total')
|
||||
|
||||
return self._format_counts(per_user)
|
||||
|
||||
class Meta:
|
||||
model = Product
|
||||
fields = ['id', 'name', 'description', 'image', 'inventory_amount', 'active', 'created', 'counts']
|
||||
@@ -0,0 +1,22 @@
|
||||
from rest_framework import mixins
|
||||
from rest_framework.decorators import list_route
|
||||
from rest_framework.response import Response
|
||||
|
||||
from main.api.serializers import ProductSerializer, ProductStatSerializer
|
||||
from main.models import Product
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
|
||||
|
||||
class ProductViewSet(mixins.ListModelMixin,
|
||||
mixins.RetrieveModelMixin,
|
||||
GenericViewSet):
|
||||
serializer_class = ProductSerializer
|
||||
queryset = Product.objects.all()
|
||||
|
||||
@list_route(methods=['get'])
|
||||
def group_by_user(self, request):
|
||||
products = self.get_queryset().filter(active=True)
|
||||
serializer = ProductStatSerializer(products, many=True)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BBSAppConfig(AppConfig):
|
||||
name = 'bbs'
|
||||
verbose_name = 'Biceps Bar System'
|
||||
|
||||
def ready(self):
|
||||
# all models are loaded, now attach signals
|
||||
import main.signals
|
||||
@@ -1,18 +1,90 @@
|
||||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from models import *
|
||||
from main.models import Order, Transaction, InventoryTransaction, Product
|
||||
from main.utils import format_username
|
||||
|
||||
class OrderForm(forms.Form):
|
||||
pass
|
||||
|
||||
class OrderLineForm(forms.ModelForm):
|
||||
#product = forms.CharField(required=True, widget=forms.HiddenInput)
|
||||
#amount = forms.IntegerField(required=True)
|
||||
class OrderForm(forms.ModelForm):
|
||||
customer_name = forms.CharField(required=False)
|
||||
|
||||
def clean(self):
|
||||
if self.cleaned_data['customer'] is None and self.cleaned_data['customer_name'] != "Ekstern":
|
||||
raise forms.ValidationError(_("Du har ikke valgt hvem som skal kjøpe."))
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
def clean_customer(self):
|
||||
if self.cleaned_data['customer'] is None:
|
||||
return self.cleaned_data['customer']
|
||||
|
||||
if self.cleaned_data['customer'].profile.balance <= 0:
|
||||
raise forms.ValidationError(_("Du har negativ saldo og kan ikke kjøpe noe."))
|
||||
|
||||
return self.cleaned_data['customer']
|
||||
|
||||
class Meta:
|
||||
model = OrderLine
|
||||
fields = ('amount','product')
|
||||
widgets = {
|
||||
'product': forms.HiddenInput(),
|
||||
'amount': forms.TextInput(attrs={'size': '2'}),
|
||||
}
|
||||
# TODO : Validation
|
||||
model = Order
|
||||
fields = ('customer',)
|
||||
|
||||
|
||||
class OrderLineForm(forms.Form):
|
||||
product = forms.IntegerField(required=True)
|
||||
amount = forms.IntegerField(required=True)
|
||||
unit_price_int = forms.FloatField(required=True, localize=True)
|
||||
unit_price_ext = forms.FloatField(required=True, localize=True)
|
||||
|
||||
|
||||
class DepositForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Transaction
|
||||
fields = ['user', 'amount']
|
||||
|
||||
|
||||
class SimpleCreateUserForm(forms.Form):
|
||||
first_name = forms.CharField(required=True, label="Fornavn")
|
||||
last_name = forms.CharField(required=True, label="Etternavn")
|
||||
email = forms.EmailField(required=True, label="E-post")
|
||||
facebook_username = forms.CharField(required=False, label="Facebook-brukernavn")
|
||||
|
||||
def _get_facebook_url(self):
|
||||
if self.cleaned_data['facebook_username'] == "":
|
||||
return ""
|
||||
return "https://graph.facebook.com/{0}/picture".format(self.cleaned_data['facebook_username'])
|
||||
|
||||
def save(self, commit=True):
|
||||
username = format_username(self.cleaned_data['first_name'], self.cleaned_data['last_name'])
|
||||
user = User.objects.create_user(username, email=self.cleaned_data['email'])
|
||||
user.first_name = self.cleaned_data['first_name']
|
||||
user.last_name = self.cleaned_data['last_name']
|
||||
|
||||
profile = user.profile
|
||||
profile.image = self._get_facebook_url()
|
||||
|
||||
if commit:
|
||||
user.save()
|
||||
profile.save()
|
||||
|
||||
return user
|
||||
|
||||
|
||||
class InventoryTransactionForm(forms.ModelForm):
|
||||
unit_price = forms.FloatField(required=True, localize=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# Only show active products
|
||||
super(InventoryTransactionForm, self).__init__(*args, **kwargs)
|
||||
self.fields['product'].queryset = Product.objects.filter(active=True)
|
||||
|
||||
class Meta:
|
||||
model = InventoryTransaction
|
||||
fields = ['product', 'amount', 'unit_price', 'comment']
|
||||
|
||||
|
||||
class DateRangeForm(forms.Form):
|
||||
start_time = forms.DateTimeField(required=False, label=_("Fra"))
|
||||
end_time = forms.DateTimeField(required=False, label=_("Til"))
|
||||
@@ -0,0 +1 @@
|
||||
__author__ = 'Nikolai'
|
||||
@@ -0,0 +1 @@
|
||||
__author__ = 'Nikolai'
|
||||
@@ -0,0 +1,47 @@
|
||||
# coding: utf-8
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
import difflib
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
import facebook
|
||||
|
||||
from main.models import UserProfile
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
"""
|
||||
- Fetches members of KAK Facebook group
|
||||
- Matches names against the local DB
|
||||
- Saves the users Facebook picture in his/her user profile.
|
||||
"""
|
||||
KAK_GROUP_ID = '108265352570560'
|
||||
graph = None
|
||||
|
||||
def get_kak_members(self):
|
||||
members = self.graph.get_connections(id=self.KAK_GROUP_ID, connection_name='members')
|
||||
return [(member['name'], member['id']) for member in members['data']]
|
||||
|
||||
def handle(self, *args, **options):
|
||||
if len(args) != 1:
|
||||
raise CommandError('Missing access token')
|
||||
|
||||
access_token = args[0]
|
||||
self.graph = facebook.GraphAPI(access_token=access_token)
|
||||
|
||||
group_members = self.get_kak_members()
|
||||
|
||||
names = [] # to fuzzy search for a name
|
||||
name_lookup = {} # to update the matching UserProfile object
|
||||
for u in User.objects.all().order_by('id'):
|
||||
fullname = u'{} {}'.format(u.first_name, u.last_name)
|
||||
names.append(fullname)
|
||||
name_lookup[fullname] = u.id
|
||||
|
||||
for member in group_members:
|
||||
match = difflib.get_close_matches(member[0], names, 1) # max 1 match
|
||||
if match:
|
||||
u = UserProfile.objects.get(pk=name_lookup[match[0]])
|
||||
if str(u.image) is "":
|
||||
u.image = 'https://graph.facebook.com/{0}/picture'.format(member[1])
|
||||
u.save()
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='InventoryTransaction',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('amount', models.FloatField(verbose_name='Antall')),
|
||||
('unit_price', models.FloatField(verbose_name='Enhetspris')),
|
||||
('comment', models.TextField(verbose_name='Kommentar', blank=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Order',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('order_sum', models.FloatField(db_column='sum')),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('customer', models.ForeignKey(related_name='orders', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrderLine',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('amount', models.IntegerField()),
|
||||
('unit_price', models.FloatField(verbose_name='Enhetspris')),
|
||||
('order', models.ForeignKey(related_name='orderlines', to='main.Order')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Product',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('sale_price_int', models.FloatField()),
|
||||
('sale_price_ext', models.FloatField()),
|
||||
('description', models.CharField(max_length=256, blank=True)),
|
||||
('volume_liter', models.FloatField(null=True)),
|
||||
('alcohol_percent', models.FloatField(null=True)),
|
||||
('image', models.ImageField(upload_to='products', blank=True)),
|
||||
('customer_support', models.CharField(max_length=32, blank=True)),
|
||||
('inventory_amount', models.FloatField(default=0)),
|
||||
('active', models.BooleanField(default=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Transaction',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('amount', models.FloatField()),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('user', models.ForeignKey(related_name='transactions', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserProfile',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('balance', models.FloatField(default=0.0)),
|
||||
('image', models.URLField(blank=True)),
|
||||
('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='orderline',
|
||||
name='product',
|
||||
field=models.ForeignKey(related_name='orderlines', to='main.Product'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='inventorytransaction',
|
||||
name='product',
|
||||
field=models.ForeignKey(related_name='transactions', verbose_name='Produkt', to='main.Product'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='inventorytransaction',
|
||||
name='user',
|
||||
field=models.ForeignKey(related_name='inventory_transactions', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='orderline',
|
||||
unique_together=set([('order', 'product')]),
|
||||
),
|
||||
]
|
||||
@@ -1,13 +1,14 @@
|
||||
from django.contrib.auth.models import User
|
||||
from __future__ import unicode_literals
|
||||
from datetime import datetime
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Product(models.Model):
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
name = models.CharField(max_length=64)
|
||||
sale_price_int = models.FloatField()
|
||||
sale_price_ext = models.FloatField()
|
||||
@@ -16,48 +17,134 @@ class Product(models.Model):
|
||||
alcohol_percent = models.FloatField(null=True)
|
||||
image = models.ImageField(upload_to='products', blank=True)
|
||||
customer_support = models.CharField(max_length=32, blank=True)
|
||||
inventory_amount = models.FloatField(default=0)
|
||||
active = models.BooleanField(default=True)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
updated = models.DateTimeField(auto_now=True)
|
||||
|
||||
@property
|
||||
def wholesale_unit_price(self):
|
||||
"""
|
||||
This is not accurate.
|
||||
"""
|
||||
if self.inventory_amount <= 0:
|
||||
return 0
|
||||
|
||||
unit_prices = self.transactions.order_by('created').values('amount', 'unit_price')
|
||||
sum_units = 0
|
||||
for up in unit_prices:
|
||||
sum_units += up['amount']
|
||||
if self.inventory_amount <= sum_units:
|
||||
return up['unit_price']
|
||||
|
||||
if len(unit_prices) > 0:
|
||||
return unit_prices[0]['unit_price']
|
||||
|
||||
return 0
|
||||
|
||||
@property
|
||||
def wholesale_value(self):
|
||||
return self.wholesale_unit_price * self.inventory_amount
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
ordering = ['name']
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Order(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
customer = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='orders')
|
||||
order_sum = models.FloatField(db_column='sum')
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return "{0}: {1} kr".format(self.user, self.order_sum)
|
||||
def is_external(self):
|
||||
return self.customer is None
|
||||
|
||||
def reciept(self):
|
||||
return "{}".format(", ".join([str(ol) for ol in self.orderlines.all()]))
|
||||
|
||||
def __str__(self):
|
||||
return "{}: {} kr".format(self.customer or "Ekstern", self.order_sum)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class OrderLine(models.Model):
|
||||
order = models.ForeignKey(Order)
|
||||
product = models.ForeignKey(Product)
|
||||
order = models.ForeignKey('main.Order', related_name='orderlines')
|
||||
product = models.ForeignKey('main.Product', related_name='orderlines')
|
||||
amount = models.IntegerField()
|
||||
unit_price = models.FloatField()
|
||||
unit_price = models.FloatField(verbose_name=_('Enhetspris'))
|
||||
|
||||
def __unicode__(self):
|
||||
return "{1} {0} ({2} kr per)".format(self.product, self.amount, self.unit_price)
|
||||
@property
|
||||
def price(self):
|
||||
return self.amount * self.unit_price
|
||||
|
||||
def __str__(self):
|
||||
return "{} {} ({} kr per)".format(self.amount, self.product, self.unit_price)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('order', 'product')
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Transaction(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
""" Money """
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='transactions')
|
||||
amount = models.FloatField()
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return "{0}: {1}: {2}".format(self.id, self.user, self.amount)
|
||||
def __str__(self):
|
||||
return "{}: {}: {}".format(self.id, self.user, self.amount)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class InventoryTransaction(models.Model):
|
||||
""" Goods """
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='inventory_transactions')
|
||||
product = models.ForeignKey('main.Product', related_name='transactions', verbose_name=_('Produkt'))
|
||||
amount = models.FloatField(verbose_name=_('Antall'))
|
||||
unit_price = models.FloatField(verbose_name=_('Enhetspris'))
|
||||
comment = models.TextField(verbose_name=_('Kommentar'), blank=True)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
@property
|
||||
def price(self):
|
||||
return self.amount * self.unit_price
|
||||
|
||||
def __str__(self):
|
||||
return "{}: {}: {} ({} kr per)".format(
|
||||
self.id,
|
||||
self.user,
|
||||
self.product,
|
||||
self.amount,
|
||||
self.unit_price)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class UserProfile(models.Model):
|
||||
user = models.ForeignKey(User, unique=True)
|
||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile')
|
||||
balance = models.FloatField(default=0.0)
|
||||
image = models.ImageField(upload_to='users', blank=True)
|
||||
image = models.URLField(blank=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return "{0}".format(self.user)
|
||||
def last_purchase(self):
|
||||
if len(self.user.orders.all()) == 0:
|
||||
return None
|
||||
|
||||
# Create a new UserProfile object when we create a new User.
|
||||
@receiver(post_save, sender=User, dispatch_uid='randomz')
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.create(user=instance)
|
||||
return self.user.orders.order_by('-created')[0]
|
||||
|
||||
def last_purchase_date(self):
|
||||
last = self.last_purchase()
|
||||
last_p = last.created if last else datetime.min
|
||||
return last_p
|
||||
|
||||
def profile_image_url(self):
|
||||
from django.templatetags.static import static
|
||||
|
||||
if not self.image:
|
||||
return static('dist/images/unknown_person.png')
|
||||
|
||||
return self.image
|
||||
|
||||
def __str__(self):
|
||||
return "{}".format(self.user)
|
||||
@@ -0,0 +1,11 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from main.models import UserProfile
|
||||
|
||||
|
||||
@receiver(post_save, sender=get_user_model(), dispatch_uid='randomz')
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
# Create a new UserProfile object when we create a new User.
|
||||
if created:
|
||||
UserProfile.objects.create(user=instance)
|
||||
@@ -1,5 +1,44 @@
|
||||
from django.conf.urls.defaults import patterns, include, url
|
||||
from django.conf.urls import url, patterns
|
||||
from main.api.views import ProductViewSet
|
||||
from main.views.stats import stats_list, stats_products_realtime, stats_products_per_user, \
|
||||
OrdersHourlyView, OrdersDailyView, OrdersMonthlyView, OrdersYearlyView
|
||||
from main.views.general import register, deposit, log
|
||||
from main.views.reports import inventory, inventory_add, report
|
||||
from main.views.users import create_user, profile
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
urlpatterns = patterns('bbs.main.views',
|
||||
url(r'^register/$', 'register', name='register'),
|
||||
urlpatterns = [
|
||||
url(r'^$', register, name='home'),
|
||||
url(r'^register/$', register, name='register'),
|
||||
url(r'^deposit/$', deposit, name='deposit'),
|
||||
url(r'^log/$', log, name='log'),
|
||||
url(r'^log/all$', log, kwargs={'limit': None}, name='log-all'),
|
||||
# Users
|
||||
url(r'^user/create/$', create_user, name='create-user'),
|
||||
url(r'^profile/$', profile, name='profile'),
|
||||
# Reports
|
||||
url(r'^inventory/$', inventory, name='inventory'),
|
||||
url(r'^inventory/add/$', inventory_add, name='inventory-add'),
|
||||
url(r'^report$', report, name='report'),
|
||||
|
||||
]
|
||||
# Stats
|
||||
urlpatterns += [
|
||||
url(r'^stats/$', stats_list, name='stats'),
|
||||
url(r'^stats/orders/hourly/$', OrdersHourlyView.as_view(), name='stats-orders-hourly'),
|
||||
url(r'^stats/orders/daily/', OrdersDailyView.as_view(), name='stats-orders-daily'),
|
||||
url(r'^stats/orders/monthly/', OrdersMonthlyView.as_view(), name='stats-orders-monthly'),
|
||||
url(r'^stats/orders/yearly/', OrdersYearlyView.as_view(), name='stats-orders-yearly'),
|
||||
url(r'^stats/orders/products_realtime$', stats_products_realtime, name='stats-products-realtime'),
|
||||
url(r'^stats/products/by_user/(?P<user_id>[0-9]+)/$', stats_products_per_user, name='stats-products-per-user'),
|
||||
]
|
||||
# Root level service-worker.js
|
||||
urlpatterns += patterns(
|
||||
'django.contrib.staticfiles.views',
|
||||
url(r'^service-worker\.js$', 'serve', kwargs={'path': 'dist/service-worker.js'})
|
||||
)
|
||||
|
||||
# API
|
||||
router = DefaultRouter()
|
||||
router.register(r'api/products', ProductViewSet)
|
||||
urlpatterns += router.urls
|
||||
@@ -0,0 +1,25 @@
|
||||
from __future__ import unicode_literals
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
def format_username(firstname, lastname):
|
||||
first = firstname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore')
|
||||
last = lastname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore')
|
||||
|
||||
return "{0}{1}".format(first, last)
|
||||
|
||||
|
||||
def users_with_perm(perm_name):
|
||||
return User.objects.filter(
|
||||
Q(is_superuser=True) |
|
||||
Q(user_permissions__codename=perm_name) |
|
||||
Q(groups__permissions__codename=perm_name)).distinct()
|
||||
|
||||
|
||||
def users_format_js(users):
|
||||
users_js = []
|
||||
for user in users:
|
||||
users_js.append('"' + user.first_name + ' ' + user.last_name[:1] + '"')
|
||||
users_js = "[{}]".format(u",".join(users_js))
|
||||
return users_js
|
||||
@@ -1,47 +0,0 @@
|
||||
# Create your views here.
|
||||
from django.contrib.auth import login, logout as auth_logout
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.template import RequestContext
|
||||
from django.forms.formsets import formset_factory
|
||||
|
||||
from models import *
|
||||
|
||||
from forms import *
|
||||
|
||||
def home(request):
|
||||
if request.method == "POST":
|
||||
form = AuthenticationForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
# Log the user in.
|
||||
login(request, form.get_user())
|
||||
else:
|
||||
if request.user.is_authenticated():
|
||||
# Redirect to the register
|
||||
return HttpResponseRedirect( reverse('bbs.main.views.register') )
|
||||
else:
|
||||
form = AuthenticationForm(request)
|
||||
return render_to_response('home.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def register(request):
|
||||
if request.method == "POST":
|
||||
# TODO: Form processing is not working at all
|
||||
form = OrderLineForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect( reverse('bbs.main.views.register') )
|
||||
products = Product.objects.all()
|
||||
users = User.objects.all()
|
||||
# Formset for orderlines
|
||||
# FIXME: Like this?
|
||||
#OrderLineFormSet = formset_factory(OrderLineForm, extra=products.count())
|
||||
#formset = OrderLineFormSet()
|
||||
return render_to_response('register.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
def logout(request):
|
||||
auth_logout(request)
|
||||
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
||||
@@ -0,0 +1,168 @@
|
||||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db.models import Min
|
||||
from django.forms import formset_factory
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render, redirect
|
||||
from main.forms import OrderLineForm, OrderForm, DepositForm
|
||||
from main.models import Product, OrderLine, Order, Transaction
|
||||
from main.utils import users_format_js, users_with_perm
|
||||
|
||||
|
||||
def register(request):
|
||||
products = Product.objects.filter(active=True)
|
||||
cheapest_product_price = list(products.aggregate(Min('sale_price_int')).values())[0] or 0
|
||||
|
||||
half_a_year_ago = datetime.now() - timedelta(days=180)
|
||||
users = User.objects.filter(profile__balance__gte=cheapest_product_price)
|
||||
# sort users after user's last purchase time
|
||||
users = sorted(users, key=lambda u: u.profile.last_purchase_date(), reverse=True)
|
||||
users_js = users_format_js(users)
|
||||
|
||||
# multiple orderlines (one per product)
|
||||
OrderLineFormSet = formset_factory(OrderLineForm)
|
||||
if request.method == "POST":
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
|
||||
if formset.is_valid() and orderform.is_valid():
|
||||
order = orderform.save(commit=False)
|
||||
|
||||
if order.is_external():
|
||||
order_sum = sum([ol['amount'] * ol['unit_price_ext'] for ol in formset.cleaned_data])
|
||||
else:
|
||||
order_sum = sum([ol['amount'] * ol['unit_price_int'] for ol in formset.cleaned_data])
|
||||
|
||||
# empty order?
|
||||
if order_sum == 0:
|
||||
messages.error(request, 'Du har ikke valgt hva du skal kjøpe...')
|
||||
return HttpResponseRedirect(reverse('register'))
|
||||
|
||||
if not order.is_external():
|
||||
profile = order.customer.profile
|
||||
# can she afford it?
|
||||
if order_sum >= profile.balance:
|
||||
messages.error(request, '{0} {1} har ikke råd, mangler {2} kr.'.format(
|
||||
order.customer.first_name,
|
||||
order.customer.last_name,
|
||||
int(order_sum - profile.balance)))
|
||||
return HttpResponseRedirect(reverse('register'))
|
||||
# substract order from balance
|
||||
profile.balance -= order_sum
|
||||
profile.save()
|
||||
|
||||
order.order_sum = order_sum
|
||||
order.save()
|
||||
|
||||
orderlines = []
|
||||
for ol in formset.cleaned_data:
|
||||
if ol['amount'] > 0:
|
||||
product = Product.objects.get(pk=ol['product'])
|
||||
|
||||
if order.is_external():
|
||||
unit_price = ol['unit_price_ext']
|
||||
else:
|
||||
unit_price = ol['unit_price_int']
|
||||
|
||||
OrderLine.objects.create(
|
||||
order=order,
|
||||
product=product,
|
||||
amount=ol['amount'],
|
||||
unit_price=unit_price)
|
||||
|
||||
product.inventory_amount -= ol['amount']
|
||||
product.save()
|
||||
|
||||
orderlines.append("{0} {1}".format(ol['amount'], product))
|
||||
|
||||
if order.is_external():
|
||||
messages.success(request, 'Ekstern kjøpte {0}.'.format(", ".join(orderlines)))
|
||||
else:
|
||||
messages.success(request, '{0} {1} kjøpte {2}.'.format(
|
||||
order.customer.first_name,
|
||||
order.customer.last_name,
|
||||
", ".join(orderlines)
|
||||
))
|
||||
|
||||
return redirect('register')
|
||||
else:
|
||||
# TODO specify error(s)
|
||||
messages.error(request, 'Skjemaet er ikke gyldig.')
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
else:
|
||||
orderform = OrderForm()
|
||||
formset = OrderLineFormSet()
|
||||
|
||||
return render(request, 'register.html', locals())
|
||||
|
||||
|
||||
def deposit(request):
|
||||
users = User.objects.all().order_by('first_name', 'last_name')
|
||||
users_js = users_format_js(users)
|
||||
allowed_users = users_with_perm('add_transaction')
|
||||
error_message_template = '{0} {1} kan ikke sette inn {2} kr, det overskrider maks saldo ({3} kr) med {4} kr'
|
||||
|
||||
limit_deposists = settings.BBS_LIMIT_DEPOSITS
|
||||
|
||||
if request.method == "POST":
|
||||
form = DepositForm(request.POST)
|
||||
if form.is_valid():
|
||||
amount = form.cleaned_data['amount']
|
||||
user = form.cleaned_data['user']
|
||||
if amount + user.profile.balance > settings.BBS_SALDO_MAX and amount + user.profile.balance != 1337:
|
||||
messages.error(request, error_message_template.format(
|
||||
user.first_name,
|
||||
user.last_name,
|
||||
amount,
|
||||
settings.BBS_SALDO_MAX,
|
||||
amount + user.profile.balance - settings.BBS_SALDO_MAX
|
||||
))
|
||||
return HttpResponseRedirect(reverse('deposit'))
|
||||
|
||||
transaction = form.save()
|
||||
profile = transaction.user.profile
|
||||
profile.balance += transaction.amount
|
||||
profile.save()
|
||||
|
||||
messages.success(request, '{0} {1} satte inn {2} kr. Ny saldo er {3}'.format(
|
||||
transaction.user.first_name,
|
||||
transaction.user.last_name,
|
||||
transaction.amount,
|
||||
profile.balance))
|
||||
return HttpResponseRedirect(reverse('deposit'))
|
||||
else:
|
||||
messages.error(request, 'Skjemaet er ikke gyldig.')
|
||||
form = DepositForm(request.POST)
|
||||
else:
|
||||
form = DepositForm()
|
||||
|
||||
return render(request, 'deposit.html', locals())
|
||||
|
||||
|
||||
def log(request, limit=datetime.now()-timedelta(days=2)):
|
||||
if limit:
|
||||
# display last two days of orders and transactions
|
||||
orders = Order.objects.filter(created__gte=limit).order_by('-created')
|
||||
transactions = Transaction.objects.filter(created__gte=limit).order_by('-created')
|
||||
|
||||
# no action in the last two days?
|
||||
# ...then display the last 5 items
|
||||
if len(orders) == 0:
|
||||
orders = Order.objects.all().order_by('-created')[:5]
|
||||
|
||||
if len(transactions) == 0:
|
||||
transactions = Transaction.objects.all().order_by('-created')[:5]
|
||||
else:
|
||||
# display everything
|
||||
orders = Order.objects.all().order_by('-created')
|
||||
transactions = Transaction.objects.all().order_by('-created')
|
||||
|
||||
return render(request, 'log.html', locals())
|
||||
@@ -0,0 +1,136 @@
|
||||
from datetime import datetime, timedelta
|
||||
from itertools import groupby
|
||||
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import render, redirect
|
||||
from main.forms import DateRangeForm, InventoryTransactionForm
|
||||
from main.models import Product, InventoryTransaction, UserProfile, Transaction, Order
|
||||
|
||||
|
||||
def report(request):
|
||||
# FIXME: split this up in smaller pieces
|
||||
datetime_now = datetime.now()
|
||||
start_time = datetime.now() - timedelta(days=30)
|
||||
# start of day, 1 month
|
||||
start_time = start_time.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# end of day
|
||||
end_time = datetime.now().replace(hour=23, minute=59, second=59, microsecond=999)
|
||||
|
||||
if request.GET.get('start_time', False) or request.GET.get('end_time', False):
|
||||
form = DateRangeForm(request.GET)
|
||||
if form.is_valid():
|
||||
start_time = form.cleaned_data['start_time']
|
||||
# end of day
|
||||
end_time = form.cleaned_data['end_time'].replace(hour=23, minute=59, second=59, microsecond=999)
|
||||
|
||||
else:
|
||||
form = DateRangeForm(initial={
|
||||
'start_time': start_time.strftime("%Y-%m-%d"),
|
||||
'end_time': end_time.strftime("%Y-%m-%d")
|
||||
})
|
||||
|
||||
# Inventory
|
||||
products = Product.objects\
|
||||
.filter(transactions__created__range=[start_time, end_time])\
|
||||
.values('name', 'transactions__unit_price', 'transactions__amount')\
|
||||
.order_by('name')
|
||||
# group by name and sum
|
||||
inventory_products = {}
|
||||
for k, g in groupby(products, lambda x: x['name']):
|
||||
group = []
|
||||
for el in g:
|
||||
el['transactions__price'] = el['transactions__amount'] * el['transactions__unit_price']
|
||||
group.append(el)
|
||||
inventory_products.update({k: {
|
||||
'name': k,
|
||||
"transactions": group,
|
||||
"transactions_sum": sum(map(lambda x: x['transactions__price'], group)),
|
||||
"transactions_units": sum(map(lambda x: x['transactions__amount'], group))
|
||||
}})
|
||||
|
||||
itrans = InventoryTransaction.objects.filter(created__range=[start_time, end_time])
|
||||
inv_in = sum(map(lambda x: x[1].get('transactions_sum', 0), inventory_products.items()))
|
||||
|
||||
# out
|
||||
out_products = Product.objects\
|
||||
.filter(orderlines__order__created__range=[start_time, end_time])\
|
||||
.values('name', 'orderlines__unit_price', 'orderlines__amount')\
|
||||
.order_by('name')
|
||||
# group by name and sum
|
||||
for k, g in groupby(out_products, lambda x: x['name']):
|
||||
group = []
|
||||
for el in g:
|
||||
el['orderlines__price'] = el['orderlines__amount'] * el['orderlines__unit_price']
|
||||
group.append(el)
|
||||
|
||||
product = {
|
||||
'name': k,
|
||||
"orderlines": group,
|
||||
"orderlines_sum": sum(map(lambda x: x['orderlines__price'], group)),
|
||||
"orderlines_units": sum(map(lambda x: x['orderlines__amount'], group))
|
||||
}
|
||||
if k in inventory_products:
|
||||
# add diff
|
||||
inventory_products[k].update(product)
|
||||
else:
|
||||
inventory_products.update({k: product})
|
||||
|
||||
for p in inventory_products.items():
|
||||
p[1]['value_diff'] = p[1].get('transactions_sum', 0) - p[1].get('orderlines_sum', 0)
|
||||
p[1]['units_diff'] = p[1].get('transactions_units', 0) - p[1].get('orderlines_units', 0)
|
||||
|
||||
inv_out = sum(map(lambda x: x[1].get('orderlines_sum', 0), inventory_products.items()))
|
||||
|
||||
inv_diff = inv_in - inv_out
|
||||
|
||||
# Deposits and sales
|
||||
saldo_profiles = sum(UserProfile.objects.all().values_list('balance', flat=True))
|
||||
deposits = sum(Transaction.objects.all().values_list('amount', flat=True))
|
||||
purchases = sum(Order.objects.all().values_list('order_sum', flat=True))
|
||||
saldo = deposits - purchases
|
||||
|
||||
deposits_start = sum(Transaction.objects.filter(created__lt=start_time).values_list('amount', flat=True))
|
||||
purchases_start = sum(Order.objects.filter(created__lt=start_time).values_list('order_sum', flat=True))
|
||||
saldo_start = deposits_start - purchases_start
|
||||
|
||||
deposits_end = sum(Transaction.objects.filter(created__lt=end_time).values_list('amount', flat=True))
|
||||
purchases_end = sum(Order.objects.filter(created__lt=end_time).values_list('order_sum', flat=True))
|
||||
saldo_end = deposits_end - purchases_end
|
||||
|
||||
deposits_diff = deposits_end - deposits_start
|
||||
purchases_diff = purchases_end - purchases_start
|
||||
saldo_diff = saldo_end - saldo_start
|
||||
|
||||
return render(request, 'report.html', locals())
|
||||
|
||||
|
||||
def inventory(request):
|
||||
products = Product.objects.all().order_by('-active', 'inventory_amount', 'name')
|
||||
transactions = InventoryTransaction.objects.all().order_by('-created')
|
||||
products_active = products.filter(active=True)
|
||||
wholesale_value = sum([p.wholesale_value for p in products_active])
|
||||
num_products = sum(products_active.values_list('inventory_amount', flat=True))
|
||||
|
||||
return render(request, 'inventory.html', locals())
|
||||
|
||||
|
||||
def inventory_add(request):
|
||||
if request.method == "POST":
|
||||
form = InventoryTransactionForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
itrans = form.save(commit=False)
|
||||
# Add amount and user, then save
|
||||
itrans.product.inventory_amount += itrans.amount
|
||||
itrans.user = request.user
|
||||
itrans.product.save()
|
||||
itrans.save()
|
||||
messages.success(request, "Satt inn {0} stk {1}.".format(itrans.amount, itrans.product))
|
||||
return redirect('inventory-add')
|
||||
|
||||
else:
|
||||
messages.error(request, 'Feil med skjemaet, se under.')
|
||||
form = InventoryTransactionForm(data=request.POST)
|
||||
else:
|
||||
form = InventoryTransactionForm()
|
||||
|
||||
return render(request, 'inventory_add.html', locals())
|
||||
@@ -0,0 +1,142 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import render
|
||||
from django.utils import timezone
|
||||
from itertools import groupby
|
||||
|
||||
from django.views.generic import View
|
||||
from main.models import Product, OrderLine, Order
|
||||
|
||||
|
||||
def stats_list(request):
|
||||
products = Product.objects.filter(active=True)
|
||||
order_groups = ['hourly', 'daily', 'monthly', 'yearly']
|
||||
|
||||
return render(request, 'stats.html', {'products': products, 'order_groups': order_groups})
|
||||
|
||||
|
||||
class OrdersView(View):
|
||||
grouping = 'orders'
|
||||
|
||||
def get_range(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def get_key(self, order):
|
||||
raise NotImplementedError
|
||||
|
||||
def group_by(self, orders):
|
||||
orders_grouped = dict([(key, 0) for key in self.get_range()]) # init
|
||||
for key, values in groupby(orders, key=self.get_key):
|
||||
count = len(list(values))
|
||||
orders_grouped[key] += count
|
||||
|
||||
return orders_grouped
|
||||
|
||||
def get(self, request):
|
||||
orders = Order.objects.all()
|
||||
if not orders.exists():
|
||||
return JsonResponse({})
|
||||
|
||||
orders_grouped = self.group_by(orders)
|
||||
data = {
|
||||
'start': str(orders[0].created),
|
||||
'orders': [[k, v] for k, v in orders_grouped.items()],
|
||||
'total': sum(orders_grouped.values()),
|
||||
'grouping': self.grouping
|
||||
}
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
class OrdersHourlyView(OrdersView):
|
||||
grouping = 'hourly'
|
||||
|
||||
def get_range(self):
|
||||
return range(0, 24)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.hour
|
||||
|
||||
|
||||
class OrdersDailyView(OrdersView):
|
||||
grouping = 'daily'
|
||||
|
||||
def get_range(self):
|
||||
return range(0, 7)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.weekday()
|
||||
|
||||
|
||||
class OrdersMonthlyView(OrdersView):
|
||||
grouping = 'monthly'
|
||||
|
||||
def get_range(self):
|
||||
return range(1, 13)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.month
|
||||
|
||||
|
||||
class OrdersYearlyView(OrdersView):
|
||||
grouping = 'yearly'
|
||||
|
||||
def get_range(self):
|
||||
first = Order.objects.order_by('created').first()
|
||||
last = timezone.now().year
|
||||
first = first.created.year if first else last
|
||||
|
||||
return range(first, last+1)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.year
|
||||
|
||||
|
||||
def stats_products_realtime(request):
|
||||
end_time = datetime.now()
|
||||
start_time = datetime.now() - timedelta(hours=24)
|
||||
|
||||
order_lines = OrderLine.objects.filter(order__created__range=(start_time, end_time)).order_by("order__created")
|
||||
products = {}
|
||||
for order_line in order_lines:
|
||||
order_time_in_milliseconds = int(time.mktime(order_line.order.created.timetuple()) * 1000)
|
||||
if order_line.product not in products:
|
||||
products[order_line.product] = [[order_time_in_milliseconds, order_line.amount]]
|
||||
else:
|
||||
prev_entry = products[order_line.product][-1]
|
||||
products[order_line.product].append([order_time_in_milliseconds, prev_entry[1] + order_line.amount])
|
||||
|
||||
serialized_products = {}
|
||||
for product, value in products.items():
|
||||
serialized_products[product.name] = value
|
||||
|
||||
response = {
|
||||
'products': serialized_products
|
||||
}
|
||||
|
||||
return JsonResponse(response)
|
||||
|
||||
|
||||
def stats_products_per_user(request, user_id=None):
|
||||
if not user_id:
|
||||
return JsonResponse({'error': 'Missing param user_id'})
|
||||
|
||||
order_lines = OrderLine.objects.filter(order__customer__pk=user_id).order_by("order__created")
|
||||
products = {}
|
||||
for order_line in order_lines:
|
||||
order_time_in_milliseconds = int(time.mktime(order_line.order.created.timetuple()) * 1000)
|
||||
if order_line.product not in products:
|
||||
products[order_line.product] = [[order_time_in_milliseconds, order_line.amount]]
|
||||
else:
|
||||
prev_entry = products[order_line.product][-1]
|
||||
products[order_line.product].append([order_time_in_milliseconds, prev_entry[1] + order_line.amount])
|
||||
|
||||
serialized_products = []
|
||||
for product, value in products.items():
|
||||
serialized_products.append({
|
||||
'name': product.name,
|
||||
'data': value
|
||||
})
|
||||
return JsonResponse(serialized_products, safe=False)
|
||||
@@ -0,0 +1,55 @@
|
||||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.db import connection
|
||||
from django.db.models import Sum, Count
|
||||
from django.shortcuts import render, redirect
|
||||
from main.forms import SimpleCreateUserForm
|
||||
from main.models import Order
|
||||
from main.models import Transaction
|
||||
|
||||
|
||||
def create_user(request):
|
||||
if request.method == "POST":
|
||||
form = SimpleCreateUserForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
messages.success(request, "Hurra! {} {} er lagt til".format(user.first_name, user.last_name))
|
||||
return redirect('create-user')
|
||||
|
||||
else:
|
||||
messages.error(request, 'Feil med skjemaet, se under.')
|
||||
form = SimpleCreateUserForm(data=request.POST)
|
||||
else:
|
||||
form = SimpleCreateUserForm()
|
||||
|
||||
return render(request, 'registration/create_user.html', {'form': form})
|
||||
|
||||
|
||||
@login_required
|
||||
def profile(request):
|
||||
transactions = Transaction.objects.filter(user=request.user.pk)
|
||||
transaction_totals = {
|
||||
'sum': sum([t.amount for t in transactions])
|
||||
}
|
||||
orders = Order.objects.filter(customer=request.user.pk)
|
||||
orders_totals = {
|
||||
'sum': sum([o.order_sum for o in orders])
|
||||
}
|
||||
|
||||
# order_lines = OrderLine.objects.filter(order__customer__pk=1).order_by("order__created")
|
||||
order_report = _orders_monthly(filter_by={'customer': request.user.pk})
|
||||
top_months = order_report.order_by('-sum')[:5]
|
||||
|
||||
return render(request, 'profile.html', locals())
|
||||
|
||||
|
||||
def _orders_monthly(filter_by={}, order_by='month'):
|
||||
|
||||
truncate_date = connection.ops.date_trunc_sql('month', 'created')
|
||||
qs = Order.objects.filter(**filter_by).extra({'month': truncate_date})
|
||||
order_report = qs.values('month').annotate(sum=Sum('order_sum'), num=Count('pk')).order_by(order_by)
|
||||
|
||||
return order_report
|
||||
@@ -1,14 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
from django.core.management import execute_manager
|
||||
import imp
|
||||
try:
|
||||
imp.find_module('settings') # Assumed to be in the same directory.
|
||||
except ImportError:
|
||||
import os
|
||||
import sys
|
||||
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
|
||||
sys.exit(1)
|
||||
|
||||
import settings
|
||||
|
||||
if __name__ == "__main__":
|
||||
execute_manager(settings)
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bbssite.settings")
|
||||
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
execute_from_command_line(sys.argv)
|
||||
@@ -0,0 +1,10 @@
|
||||
Django>=1.8,<1.9
|
||||
django-bootstrap-form==3.1
|
||||
django-extensions==1.5.9
|
||||
django-widget-tweaks==1.3
|
||||
easy-thumbnails==2.2.1
|
||||
facebook-sdk==0.4.0
|
||||
gunicorn==19.3.0
|
||||
mysqlclient==1.3.6
|
||||
djangorestframework==3.3.1
|
||||
Pillow==3.0.0
|
||||
@@ -1,154 +0,0 @@
|
||||
# Django settings for bbs project.
|
||||
from os.path import dirname, join
|
||||
|
||||
def map_path(target_name):
|
||||
'''Enables path names to be decided at runtime.'''
|
||||
return join(dirname(__file__), target_name).replace('\\', '/')
|
||||
|
||||
DEBUG = True
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
|
||||
ADMINS = (
|
||||
# ('Your Name', 'your_email@example.com'),
|
||||
)
|
||||
|
||||
MANAGERS = ADMINS
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||
'NAME': 'dev.db', # Or path to database file if using sqlite3.
|
||||
'USER': '', # Not used with sqlite3.
|
||||
'PASSWORD': '', # Not used with sqlite3.
|
||||
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
|
||||
'PORT': '', # Set to empty string for default. Not used with sqlite3.
|
||||
}
|
||||
}
|
||||
|
||||
# Local time zone for this installation. Choices can be found here:
|
||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||
# although not all choices may be available on all operating systems.
|
||||
# On Unix systems, a value of None will cause Django to use the same
|
||||
# timezone as the operating system.
|
||||
# If running in a Windows environment this must be set to the same as your
|
||||
# system time zone.
|
||||
TIME_ZONE = 'America/Chicago'
|
||||
|
||||
# Language code for this installation. All choices can be found here:
|
||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
# If you set this to False, Django will make some optimizations so as not
|
||||
# to load the internationalization machinery.
|
||||
USE_I18N = True
|
||||
|
||||
# If you set this to False, Django will not format dates, numbers and
|
||||
# calendars according to the current locale
|
||||
USE_L10N = True
|
||||
|
||||
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
||||
# Example: "/home/media/media.lawrence.com/media/"
|
||||
MEDIA_ROOT = ''
|
||||
|
||||
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
||||
# trailing slash.
|
||||
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
|
||||
MEDIA_URL = ''
|
||||
|
||||
# Absolute path to the directory static files should be collected to.
|
||||
# Don't put anything in this directory yourself; store your static files
|
||||
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
||||
# Example: "/home/media/media.lawrence.com/static/"
|
||||
STATIC_ROOT = ''
|
||||
|
||||
# URL prefix for static files.
|
||||
# Example: "http://media.lawrence.com/static/"
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
# URL prefix for admin static files -- CSS, JavaScript and images.
|
||||
# Make sure to use a trailing slash.
|
||||
# Examples: "http://foo.com/static/admin/", "/static/admin/".
|
||||
ADMIN_MEDIA_PREFIX = '/static/admin/'
|
||||
|
||||
# Additional locations of static files
|
||||
STATICFILES_DIRS = (
|
||||
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
||||
# Always use forward slashes, even on Windows.
|
||||
# Don't forget to use absolute paths, not relative paths.
|
||||
map_path('static'),
|
||||
)
|
||||
|
||||
# List of finder classes that know how to find static files in
|
||||
# various locations.
|
||||
STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||
)
|
||||
|
||||
# Make this unique, and don't share it with anybody.
|
||||
SECRET_KEY = 'osv$uy-ea$*%lc)+xiwt5@2b7au%u*c!pa6hmh#vl)*+tp%fss'
|
||||
|
||||
# List of callables that know how to import templates from various sources.
|
||||
TEMPLATE_LOADERS = (
|
||||
'django.template.loaders.filesystem.Loader',
|
||||
'django.template.loaders.app_directories.Loader',
|
||||
# 'django.template.loaders.eggs.Loader',
|
||||
)
|
||||
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'urls'
|
||||
|
||||
TEMPLATE_DIRS = (
|
||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||
# Always use forward slashes, even on Windows.
|
||||
# Don't forget to use absolute paths, not relative paths.
|
||||
map_path('templates'),
|
||||
)
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.admin',
|
||||
'main',
|
||||
# 'django.contrib.admindocs',
|
||||
)
|
||||
|
||||
# A sample logging configuration. The only tangible logging
|
||||
# performed by this configuration is to send an email to
|
||||
# the site admins on every HTTP 500 error.
|
||||
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
||||
# more details on how to customize your logging configuration.
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': False,
|
||||
'handlers': {
|
||||
'mail_admins': {
|
||||
'level': 'ERROR',
|
||||
'class': 'django.utils.log.AdminEmailHandler'
|
||||
}
|
||||
},
|
||||
'loggers': {
|
||||
'django.request': {
|
||||
'handlers': ['mail_admins'],
|
||||
'level': 'ERROR',
|
||||
'propagate': True,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
# User profile
|
||||
AUTH_PROFILE_MODULE = 'main.UserProfile'
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 923 B |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,180 @@
|
||||
function enable_all_customers() {
|
||||
$("li.customer").each(function(i) {
|
||||
$(this).removeClass("marked");
|
||||
$(this).show();
|
||||
});
|
||||
}
|
||||
function filter_customers(typed) {
|
||||
setTimeout(function() {
|
||||
$("li.customer").each(function(i) {
|
||||
var pattern = new RegExp(typed,"i");
|
||||
var name = $(this).children("span.name").text();
|
||||
if(!pattern.test(name)) {
|
||||
$(this).hide();
|
||||
$(this).removeClass("marked");
|
||||
} else {
|
||||
$(this).show();
|
||||
var full_match = name.toLowerCase() == typed.toLowerCase();
|
||||
// FIXME: needs one more char.
|
||||
var single_match = $("li.customer:visible").length == 1;
|
||||
console.log(full_match, single_match);
|
||||
//if(full_match || single_match) {
|
||||
if(full_match) {
|
||||
$(this).addClass("marked");
|
||||
} else {
|
||||
$(this).removeClass("marked");
|
||||
}
|
||||
}
|
||||
});
|
||||
}, 50);
|
||||
}
|
||||
function enable_all_products() {
|
||||
$("li.product").each(function(i) {
|
||||
$(this).removeClass("marked");
|
||||
$(this).show();
|
||||
});
|
||||
}
|
||||
function reset_qtys() {
|
||||
$(".qty").each(function(i) {
|
||||
$(this).html('0');
|
||||
});
|
||||
|
||||
$("input[name$=amount]").each(function(i) {
|
||||
$(this).val("0");
|
||||
});
|
||||
}
|
||||
function update_total() {
|
||||
var total = 0;
|
||||
$('li.product').each(function() {
|
||||
var amount = Number($(this).find('[name$=amount]').val());
|
||||
|
||||
var price_selector = '.sale_price_int';
|
||||
if($("#id_customer_typeahead").val() === "Ekstern") {
|
||||
price_selector = '.sale_price_ext';
|
||||
}
|
||||
var sale_price = Number($(this).find(price_selector).text());
|
||||
|
||||
total += amount * sale_price;
|
||||
});
|
||||
if(total === 0) {
|
||||
total = "";
|
||||
}
|
||||
$("span.total_text").html(total);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var $alerts = $("a[data-dismiss=alert]");
|
||||
/* Hide alert messages */
|
||||
$alerts.click(function(){
|
||||
$(this).parent().parent().parent().slideUp();
|
||||
});
|
||||
setTimeout( function() {
|
||||
$alerts.parent().parent().parent().slideUp();
|
||||
}, 5000);
|
||||
|
||||
/* Tooltips */
|
||||
$("h2").tooltip({placement: 'right'});
|
||||
$("img.customer").tooltip();
|
||||
$("a.product").tooltip();
|
||||
$(".love").tooltip();
|
||||
|
||||
/*
|
||||
* View: Deposit and register
|
||||
*/
|
||||
|
||||
/* Customer search */
|
||||
$('#id_customer_typeahead').keyup(function(event) {
|
||||
filter_customers(event.target.value);
|
||||
});
|
||||
/* Customer selection */
|
||||
$("li.customer").click( function() {
|
||||
enable_all_customers();
|
||||
/* Disable the customer button just clicked */
|
||||
$(this).addClass("marked");
|
||||
/* Update the typeahead field */
|
||||
var name = $(this).children("span.name").text();
|
||||
$("#id_customer_typeahead").val(name);
|
||||
/* Update the select field */
|
||||
var id = $(this).children("span.id").text();
|
||||
$("#id_customer option, #id_user option").removeAttr('selected');
|
||||
if(id === "") {
|
||||
// External user
|
||||
$("#id_customer option:first-child, #id_user option:first-child").attr('selected','selected');
|
||||
} else {
|
||||
$("#id_customer option[value="+id+"], #id_user option[value="+id+"]").attr('selected','selected');
|
||||
}
|
||||
update_total(this);
|
||||
});
|
||||
|
||||
/* Set Global Highcharts options */
|
||||
|
||||
Highcharts.setOptions({
|
||||
credits: {
|
||||
enabled: false
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* View: Register
|
||||
*/
|
||||
|
||||
/* Product amount controls */
|
||||
$("#register li.product").click( function() {
|
||||
/* Mark the product as selected */
|
||||
$(this).addClass("marked");
|
||||
/* Update amounts */
|
||||
var form_field = $(this).children("input[name$=amount]");
|
||||
var display = $(this).children(".qty");
|
||||
var qty = Number(form_field.val()) + 1;
|
||||
form_field.val(qty);
|
||||
display.html(qty);
|
||||
/* Update total*/
|
||||
update_total(this);
|
||||
});
|
||||
/* Form reset */
|
||||
$("#register button[type=reset]").click( function() {
|
||||
$('#id_customer option').removeAttr('selected');
|
||||
$("#id_customer_typeahead").val("");
|
||||
$("span.total_text").html("");
|
||||
enable_all_customers();
|
||||
enable_all_products();
|
||||
reset_qtys();
|
||||
});
|
||||
|
||||
/* Toggle infrequent users */
|
||||
$(".toggle-infrequent-users").on('click', function(e) {
|
||||
e.preventDefault();
|
||||
$("li.customer.infrequent").toggleClass('hidden');
|
||||
$(".users-description .infrequent-users").toggleClass('hidden');
|
||||
if($(this).text() === "Vis alle") {
|
||||
$(this).text("Skjul gamliser");
|
||||
}
|
||||
else {
|
||||
$(this).text("Vis alle");
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* View: Inventory report
|
||||
*/
|
||||
var start_field = $(".inventory-report-form #id_start_time");
|
||||
start_field.datepicker({
|
||||
language: 'nb',
|
||||
format: 'yyyy-mm-dd',
|
||||
todayHighlight: true,
|
||||
weekStart: 1,
|
||||
endDate: new Date()
|
||||
}).on('changeDate', function(e) {
|
||||
end_field.datepicker('setStartDate', e.date);
|
||||
});
|
||||
var end_field = $(".inventory-report-form #id_end_time");
|
||||
end_field.datepicker({
|
||||
language: 'nb',
|
||||
format: 'yyyy-mm-dd',
|
||||
todayHighlight: true,
|
||||
weekStart: 1,
|
||||
endDate: new Date()
|
||||
}).on('changeDate', function(e) {
|
||||
start_field.datepicker('setEndDate', e.date);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
/* View: Profile */
|
||||
|
||||
$(document).ready(function() {
|
||||
var $userProfile = $('#user-profile');
|
||||
if ($userProfile.length) {
|
||||
var products_by_user_url = '/stats/products/by_user/';
|
||||
var user_id = $('#user-profile').attr('data-user-id');
|
||||
|
||||
$.getJSON(products_by_user_url + user_id, function (data) {
|
||||
if (data.hasOwnProperty('error')) {
|
||||
return;
|
||||
}
|
||||
$(".profile-stats-orderline").highcharts({
|
||||
title: {
|
||||
text: false
|
||||
},
|
||||
xAxis: {
|
||||
type: "datetime"
|
||||
},
|
||||
yAxis: {
|
||||
title: {
|
||||
text: "Kjøp"
|
||||
}
|
||||
},
|
||||
|
||||
plotOptions: {
|
||||
series: {
|
||||
marker: {
|
||||
radius: 3
|
||||
}
|
||||
}
|
||||
},
|
||||
series: data
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,206 @@
|
||||
|
||||
/* View: Stats */
|
||||
|
||||
var products = null;
|
||||
var products_realtime_chart = null;
|
||||
var products_url = '/api/products/';
|
||||
var products_stat_url = '/api/products/group_by_user';
|
||||
|
||||
var order_base_url = '/stats/orders/{group}/';
|
||||
var products_realtime_url = '/stats/orders/products_realtime';
|
||||
|
||||
function productFormatter() {
|
||||
return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage, 1) +' %';
|
||||
}
|
||||
function parse_products_realtime_data(data, chart) {
|
||||
for (var product in data.products) {
|
||||
if (chart.get(product) === null) {
|
||||
chart.addSeries({
|
||||
data: [],
|
||||
id: product,
|
||||
name: product
|
||||
});
|
||||
}
|
||||
|
||||
var series = chart.get(product);
|
||||
_.each(data.products[product], function(point) {
|
||||
if (chart.get(point[0]) === null) {
|
||||
series.addPoint({
|
||||
id: point[0],
|
||||
x: point[0],
|
||||
y: point[1]
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function get_products_realtime_data() {
|
||||
var that = this;
|
||||
$.ajax( {
|
||||
url: products_realtime_url,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
parse_products_realtime_data(data, products_realtime_chart);
|
||||
|
||||
setTimeout(function () {
|
||||
get_products_realtime_data();
|
||||
}, 15000);
|
||||
},
|
||||
cache: false
|
||||
});
|
||||
}
|
||||
|
||||
function renderProductCharts(products) {
|
||||
for(var i in products) {
|
||||
var render_to = 'product_chart' + products[i].id;
|
||||
var series_data = products[i].counts;
|
||||
series_data = _.map(series_data, function (el) { return [el.full_name, el.amount_total]; });
|
||||
|
||||
new Highcharts.Chart({
|
||||
chart: {
|
||||
renderTo: render_to,
|
||||
plotBackgroundColor: null,
|
||||
plotBorderWidth: null,
|
||||
plotShadow: false
|
||||
},
|
||||
title: {
|
||||
text: products[i].name
|
||||
},
|
||||
tooltip: {
|
||||
formatter: productFormatter
|
||||
},
|
||||
plotOptions: {
|
||||
pie: {
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: true,
|
||||
color: '#000000',
|
||||
connectorColor: '#000000',
|
||||
formatter: function() {
|
||||
return '<b>'+ this.point.name +'</b>: ' + this.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
type: 'pie',
|
||||
name: 'Orders',
|
||||
data: series_data
|
||||
}]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var orderFormatters = {
|
||||
hourly: function() {
|
||||
return this.value + ":00";
|
||||
},
|
||||
daily: function() {
|
||||
var days = {0: 'Mandag', 1: 'Tirsdag', 2: 'Onsdag', 3: 'Torsdag', 4: 'Fredag', 5: 'Lørdag', 6: 'Søndag'};
|
||||
return days[this.value];
|
||||
},
|
||||
monthly: function() {
|
||||
var months = {
|
||||
1: 'Januar', 2: 'Februar', 3: 'Mars', 4: 'April', 5: 'Mai', 6: 'Juni', 7: 'Juli',
|
||||
8: 'August', 9: 'September', 10: 'Oktober', 11: 'November', 12: 'Desember'};
|
||||
return months[this.value];
|
||||
},
|
||||
yearly: function() {
|
||||
return this.value;
|
||||
}
|
||||
};
|
||||
|
||||
function renderOrdersGroupedChart(data) {
|
||||
var grouping = data.grouping;
|
||||
var render_to = 'order_chart_' + grouping;
|
||||
|
||||
new Highcharts.Chart({
|
||||
chart: {
|
||||
renderTo: render_to,
|
||||
type: 'column'
|
||||
},
|
||||
title: {
|
||||
text: 'Ordre - ' + grouping
|
||||
},
|
||||
tooltip: {
|
||||
formatter: function() {
|
||||
return this.y + " stk";
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
title: {
|
||||
text: 'Ordre'
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
title: {
|
||||
text: 'Tid'
|
||||
},
|
||||
labels: {
|
||||
formatter: orderFormatters[grouping]
|
||||
}
|
||||
},
|
||||
plotOptions: {
|
||||
column: {
|
||||
minPointLength: 3,
|
||||
colorByPoint: true
|
||||
},
|
||||
series: {
|
||||
groupPadding: 0,
|
||||
pointPadding: 0.05
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
name: 'Ordre',
|
||||
data: data.orders
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
if( $("#stats").length > 0) {
|
||||
/* TODO select data element with index 0 of each pie-chart */
|
||||
|
||||
/* Products */
|
||||
$.getJSON(products_stat_url, function(data) {
|
||||
products = data;
|
||||
renderProductCharts(data);
|
||||
});
|
||||
|
||||
/* Orders, grouped */
|
||||
$('[data-group]').each(function () {
|
||||
var url = order_base_url.replace('{group}', $(this).data('group'));
|
||||
$.getJSON(url, renderOrdersGroupedChart);
|
||||
});
|
||||
|
||||
/* Realtime purchases */
|
||||
products_realtime_chart = new Highcharts.Chart({
|
||||
chart: {
|
||||
renderTo: 'products_realtime_chart'
|
||||
},
|
||||
title: {
|
||||
text: "Produkter solgt over tid"
|
||||
},
|
||||
xAxis: {
|
||||
type: "datetime"
|
||||
},
|
||||
yAxis: {
|
||||
title: {
|
||||
text: "Antall solgt"
|
||||
}
|
||||
},
|
||||
plotOptions: {
|
||||
series: {
|
||||
marker: {
|
||||
radius: 3
|
||||
}
|
||||
}
|
||||
},
|
||||
series: {}
|
||||
});
|
||||
|
||||
get_products_realtime_data();
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,790 @@
|
||||
/*!
|
||||
* Datepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Improvements by Andrew Rowls
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datepicker {
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
direction: ltr;
|
||||
/*.dow {
|
||||
border-top: 1px solid #ddd !important;
|
||||
}*/
|
||||
}
|
||||
.datepicker-inline {
|
||||
width: 220px;
|
||||
}
|
||||
.datepicker.datepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
.datepicker.datepicker-rtl table tr td span {
|
||||
float: right;
|
||||
}
|
||||
.datepicker-dropdown {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.datepicker-dropdown:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-top: 0;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
}
|
||||
.datepicker-dropdown:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #fff;
|
||||
border-top: 0;
|
||||
position: absolute;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-left:before {
|
||||
left: 6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-left:after {
|
||||
left: 7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-right:before {
|
||||
right: 6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-right:after {
|
||||
right: 7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-top:before {
|
||||
top: -7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-top:after {
|
||||
top: -6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-bottom:before {
|
||||
bottom: -7px;
|
||||
border-bottom: 0;
|
||||
border-top: 7px solid #999;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-bottom:after {
|
||||
bottom: -6px;
|
||||
border-bottom: 0;
|
||||
border-top: 6px solid #fff;
|
||||
}
|
||||
.datepicker > div {
|
||||
display: none;
|
||||
}
|
||||
.datepicker.days div.datepicker-days {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.months div.datepicker-months {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.years div.datepicker-years {
|
||||
display: block;
|
||||
}
|
||||
.datepicker table {
|
||||
margin: 0;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.datepicker table tr td,
|
||||
.datepicker table tr th {
|
||||
text-align: center;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
}
|
||||
.table-striped .datepicker table tr td,
|
||||
.table-striped .datepicker table tr th {
|
||||
background-color: transparent;
|
||||
}
|
||||
.datepicker table tr td.day:hover,
|
||||
.datepicker table tr td.day.focused {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker table tr td.old,
|
||||
.datepicker table tr td.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker table tr td.disabled,
|
||||
.datepicker table tr td.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td.today,
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #ffdb99;
|
||||
border-color: #ffb733;
|
||||
}
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today:hover:hover,
|
||||
.datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover:hover,
|
||||
.datepicker table tr td.today:focus,
|
||||
.datepicker table tr td.today:hover:focus,
|
||||
.datepicker table tr td.today.disabled:focus,
|
||||
.datepicker table tr td.today.disabled:hover:focus,
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #ffcd70;
|
||||
border-color: #f59e00;
|
||||
}
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today:hover.disabled,
|
||||
.datepicker table tr td.today.disabled.disabled,
|
||||
.datepicker table tr td.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.today[disabled],
|
||||
.datepicker table tr td.today:hover[disabled],
|
||||
.datepicker table tr td.today.disabled[disabled],
|
||||
.datepicker table tr td.today.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.today,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today:hover.disabled:hover,
|
||||
.datepicker table tr td.today.disabled.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.today[disabled]:hover,
|
||||
.datepicker table tr td.today:hover[disabled]:hover,
|
||||
.datepicker table tr td.today.disabled[disabled]:hover,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
|
||||
.datepicker table tr td.today.disabled:focus,
|
||||
.datepicker table tr td.today:hover.disabled:focus,
|
||||
.datepicker table tr td.today.disabled.disabled:focus,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.today[disabled]:focus,
|
||||
.datepicker table tr td.today:hover[disabled]:focus,
|
||||
.datepicker table tr td.today.disabled[disabled]:focus,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today:hover.disabled:active,
|
||||
.datepicker table tr td.today.disabled.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.today[disabled]:active,
|
||||
.datepicker table tr td.today:hover[disabled]:active,
|
||||
.datepicker table tr td.today.disabled[disabled]:active,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.today:active,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today:hover.disabled.active,
|
||||
.datepicker table tr td.today.disabled.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.today[disabled].active,
|
||||
.datepicker table tr td.today:hover[disabled].active,
|
||||
.datepicker table tr td.today.disabled[disabled].active,
|
||||
.datepicker table tr td.today.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.today.active,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
|
||||
background-color: #ffdb99;
|
||||
border-color: #ffb733;
|
||||
}
|
||||
.datepicker table tr td.today:hover:hover {
|
||||
color: #000;
|
||||
}
|
||||
.datepicker table tr td.today.active:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.datepicker table tr td.range,
|
||||
.datepicker table tr td.range:hover,
|
||||
.datepicker table tr td.range.disabled,
|
||||
.datepicker table tr td.range.disabled:hover {
|
||||
background: #eeeeee;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today,
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #f7ca77;
|
||||
border-color: #f1a417;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today:hover:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover:hover,
|
||||
.datepicker table tr td.range.today:focus,
|
||||
.datepicker table tr td.range.today:hover:focus,
|
||||
.datepicker table tr td.range.today.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover:focus,
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #f4bb51;
|
||||
border-color: #bf800c;
|
||||
}
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today:hover.disabled,
|
||||
.datepicker table tr td.range.today.disabled.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.range.today[disabled],
|
||||
.datepicker table tr td.range.today:hover[disabled],
|
||||
.datepicker table tr td.range.today.disabled[disabled],
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.range.today,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today:hover.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.range.today[disabled]:hover,
|
||||
.datepicker table tr td.range.today:hover[disabled]:hover,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
|
||||
.datepicker table tr td.range.today.disabled:focus,
|
||||
.datepicker table tr td.range.today:hover.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.range.today[disabled]:focus,
|
||||
.datepicker table tr td.range.today:hover[disabled]:focus,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today:hover.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.range.today[disabled]:active,
|
||||
.datepicker table tr td.range.today:hover[disabled]:active,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:active,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today:hover.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.range.today[disabled].active,
|
||||
.datepicker table tr td.range.today:hover[disabled].active,
|
||||
.datepicker table tr td.range.today.disabled[disabled].active,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
|
||||
background-color: #f7ca77;
|
||||
border-color: #f1a417;
|
||||
}
|
||||
.datepicker table tr td.selected,
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #999999;
|
||||
border-color: #555555;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected:hover:hover,
|
||||
.datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover:hover,
|
||||
.datepicker table tr td.selected:focus,
|
||||
.datepicker table tr td.selected:hover:focus,
|
||||
.datepicker table tr td.selected.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled:hover:focus,
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #858585;
|
||||
border-color: #373737;
|
||||
}
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected:hover.disabled,
|
||||
.datepicker table tr td.selected.disabled.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled,
|
||||
.datepicker table tr td.selected[disabled],
|
||||
.datepicker table tr td.selected:hover[disabled],
|
||||
.datepicker table tr td.selected.disabled[disabled],
|
||||
.datepicker table tr td.selected.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.selected,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected:hover.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.selected[disabled]:hover,
|
||||
.datepicker table tr td.selected:hover[disabled]:hover,
|
||||
.datepicker table tr td.selected.disabled[disabled]:hover,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
|
||||
.datepicker table tr td.selected.disabled:focus,
|
||||
.datepicker table tr td.selected:hover.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.selected[disabled]:focus,
|
||||
.datepicker table tr td.selected:hover[disabled]:focus,
|
||||
.datepicker table tr td.selected.disabled[disabled]:focus,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected:hover.disabled:active,
|
||||
.datepicker table tr td.selected.disabled.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.selected[disabled]:active,
|
||||
.datepicker table tr td.selected:hover[disabled]:active,
|
||||
.datepicker table tr td.selected.disabled[disabled]:active,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected:hover.disabled.active,
|
||||
.datepicker table tr td.selected.disabled.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.selected[disabled].active,
|
||||
.datepicker table tr td.selected:hover[disabled].active,
|
||||
.datepicker table tr td.selected.disabled[disabled].active,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
|
||||
background-color: #999999;
|
||||
border-color: #555555;
|
||||
}
|
||||
.datepicker table tr td.active,
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active:hover:hover,
|
||||
.datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover:hover,
|
||||
.datepicker table tr td.active:focus,
|
||||
.datepicker table tr td.active:hover:focus,
|
||||
.datepicker table tr td.active.disabled:focus,
|
||||
.datepicker table tr td.active.disabled:hover:focus,
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #3276b1;
|
||||
border-color: #285e8e;
|
||||
}
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active:hover.disabled,
|
||||
.datepicker table tr td.active.disabled.disabled,
|
||||
.datepicker table tr td.active.disabled:hover.disabled,
|
||||
.datepicker table tr td.active[disabled],
|
||||
.datepicker table tr td.active:hover[disabled],
|
||||
.datepicker table tr td.active.disabled[disabled],
|
||||
.datepicker table tr td.active.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active:hover.disabled:hover,
|
||||
.datepicker table tr td.active.disabled.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.active[disabled]:hover,
|
||||
.datepicker table tr td.active:hover[disabled]:hover,
|
||||
.datepicker table tr td.active.disabled[disabled]:hover,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
|
||||
.datepicker table tr td.active.disabled:focus,
|
||||
.datepicker table tr td.active:hover.disabled:focus,
|
||||
.datepicker table tr td.active.disabled.disabled:focus,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.active[disabled]:focus,
|
||||
.datepicker table tr td.active:hover[disabled]:focus,
|
||||
.datepicker table tr td.active.disabled[disabled]:focus,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active:hover.disabled:active,
|
||||
.datepicker table tr td.active.disabled.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.active[disabled]:active,
|
||||
.datepicker table tr td.active:hover[disabled]:active,
|
||||
.datepicker table tr td.active.disabled[disabled]:active,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.active:active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active:hover.disabled.active,
|
||||
.datepicker table tr td.active.disabled.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.active[disabled].active,
|
||||
.datepicker table tr td.active:hover[disabled].active,
|
||||
.datepicker table tr td.active.disabled[disabled].active,
|
||||
.datepicker table tr td.active.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.active.active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
}
|
||||
.datepicker table tr td span {
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 1%;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker table tr td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker table tr td span.disabled,
|
||||
.datepicker table tr td span.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td span.active,
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active:hover:hover,
|
||||
.datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover:hover,
|
||||
.datepicker table tr td span.active:focus,
|
||||
.datepicker table tr td span.active:hover:focus,
|
||||
.datepicker table tr td span.active.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled:hover:focus,
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #3276b1;
|
||||
border-color: #285e8e;
|
||||
}
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active:hover.disabled,
|
||||
.datepicker table tr td span.active.disabled.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled,
|
||||
.datepicker table tr td span.active[disabled],
|
||||
.datepicker table tr td span.active:hover[disabled],
|
||||
.datepicker table tr td span.active.disabled[disabled],
|
||||
.datepicker table tr td span.active.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td span.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active:hover.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td span.active[disabled]:hover,
|
||||
.datepicker table tr td span.active:hover[disabled]:hover,
|
||||
.datepicker table tr td span.active.disabled[disabled]:hover,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
|
||||
.datepicker table tr td span.active.disabled:focus,
|
||||
.datepicker table tr td span.active:hover.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td span.active[disabled]:focus,
|
||||
.datepicker table tr td span.active:hover[disabled]:focus,
|
||||
.datepicker table tr td span.active.disabled[disabled]:focus,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active:hover.disabled:active,
|
||||
.datepicker table tr td span.active.disabled.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:active,
|
||||
.datepicker table tr td span.active[disabled]:active,
|
||||
.datepicker table tr td span.active:hover[disabled]:active,
|
||||
.datepicker table tr td span.active.disabled[disabled]:active,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active:hover.disabled.active,
|
||||
.datepicker table tr td span.active.disabled.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled.active,
|
||||
.datepicker table tr td span.active[disabled].active,
|
||||
.datepicker table tr td span.active:hover[disabled].active,
|
||||
.datepicker table tr td span.active.disabled[disabled].active,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
}
|
||||
.datepicker table tr td span.old,
|
||||
.datepicker table tr td span.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker th.datepicker-switch {
|
||||
width: 145px;
|
||||
}
|
||||
.datepicker thead tr:first-child th,
|
||||
.datepicker tfoot tr th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker thead tr:first-child th:hover,
|
||||
.datepicker tfoot tr th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker .cw {
|
||||
font-size: 10px;
|
||||
width: 12px;
|
||||
padding: 0 2px 0 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.datepicker thead tr:first-child th.cw {
|
||||
cursor: default;
|
||||
background-color: transparent;
|
||||
}
|
||||
.input-group.date .input-group-addon i {
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.input-daterange input {
|
||||
text-align: center;
|
||||
}
|
||||
.input-daterange input:first-child {
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
.input-daterange input:last-child {
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.input-daterange .input-group-addon {
|
||||
width: auto;
|
||||
min-width: 16px;
|
||||
padding: 4px 5px;
|
||||
font-weight: normal;
|
||||
line-height: 1.428571429;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
vertical-align: middle;
|
||||
background-color: #eeeeee;
|
||||
border: solid #cccccc;
|
||||
border-width: 1px 0;
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
}
|
||||
.datepicker.dropdown-menu {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
float: left;
|
||||
display: none;
|
||||
min-width: 160px;
|
||||
list-style: none;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #ccc;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
*border-right-width: 2px;
|
||||
*border-bottom-width: 2px;
|
||||
color: #333333;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
.datepicker.dropdown-menu th,
|
||||
.datepicker.dropdown-menu td {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
@mixin inline-block-list() {
|
||||
clear: both;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
li {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,606 @@
|
||||
// Override Bootstrap variables here (defaults copied from bootstrap-sass version 3.0.2.1):
|
||||
//
|
||||
// Variables
|
||||
// --------------------------------------------------
|
||||
|
||||
// Global values
|
||||
// --------------------------------------------------
|
||||
|
||||
// Grays
|
||||
// -------------------------
|
||||
|
||||
//$gray-darker: lighten(#000, 13.5%); // #222
|
||||
//$gray-dark: lighten(#000, 20%); // #333
|
||||
//$gray: lighten(#000, 33.5%); // #555
|
||||
//$gray-light: lighten(#000, 60%); // #999
|
||||
//$gray-lighter: lighten(#000, 93.5%); // #eee
|
||||
|
||||
// Brand colors
|
||||
// -------------------------
|
||||
|
||||
//$brand-primary: #428bca;
|
||||
//$brand-success: #5cb85c;
|
||||
//$brand-warning: #f0ad4e;
|
||||
//$brand-danger: #d9534f;
|
||||
//$brand-info: #5bc0de;
|
||||
|
||||
// Scaffolding
|
||||
// -------------------------
|
||||
|
||||
//$body-bg: #fff;
|
||||
//$text-color: $gray-dark;
|
||||
|
||||
// Links
|
||||
// -------------------------
|
||||
|
||||
//$link-color: $brand-primary;
|
||||
//$link-hover-color: darken($link-color, 15%);
|
||||
|
||||
// Typography
|
||||
// -------------------------
|
||||
|
||||
//$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
//$font-family-serif: Georgia, "Times New Roman", Times, serif;
|
||||
//$font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||
//$font-family-base: $font-family-sans-serif;
|
||||
|
||||
//$font-size-base: 14px;
|
||||
//$font-size-large: ceil($font-size-base * 1.25); // ~18px
|
||||
//$font-size-small: ceil($font-size-base * 0.85); // ~12px
|
||||
|
||||
//$font-size-h1: floor($font-size-base * 2.6); // ~36px
|
||||
//$font-size-h2: floor($font-size-base * 2.15); // ~30px
|
||||
//$font-size-h3: ceil($font-size-base * 1.7); // ~24px
|
||||
//$font-size-h4: ceil($font-size-base * 1.25); // ~18px
|
||||
//$font-size-h5: $font-size-base;
|
||||
//$font-size-h6: ceil($font-size-base * 0.85); // ~12px
|
||||
|
||||
//$line-height-base: 1.428571429; // 20/14
|
||||
//$line-height-computed: floor($font-size-base * $line-height-base); // ~20px
|
||||
|
||||
//$headings-font-family: $font-family-base;
|
||||
//$headings-font-weight: 500;
|
||||
//$headings-line-height: 1.1;
|
||||
//$headings-color: inherit;
|
||||
|
||||
// Iconography
|
||||
// -------------------------
|
||||
|
||||
$icon-font-path: "/static/dist/fonts/";
|
||||
//$icon-font-name: "glyphicons-halflings-regular";
|
||||
|
||||
// Components
|
||||
// -------------------------
|
||||
// Based on 14px font-size and 1.428 line-height (~20px to start)
|
||||
|
||||
//$padding-base-vertical: 6px;
|
||||
//$padding-base-horizontal: 12px;
|
||||
|
||||
//$padding-large-vertical: 10px;
|
||||
//$padding-large-horizontal: 16px;
|
||||
|
||||
//$padding-small-vertical: 5px;
|
||||
//$padding-small-horizontal: 10px;
|
||||
|
||||
//$line-height-large: 1.33;
|
||||
//$line-height-small: 1.5;
|
||||
|
||||
//$border-radius-base: 4px;
|
||||
//$border-radius-large: 6px;
|
||||
//$border-radius-small: 3px;
|
||||
|
||||
//$component-active-color: #fff;
|
||||
//$component-active-bg: $brand-primary;
|
||||
|
||||
//$caret-width-base: 4px;
|
||||
//$caret-width-large: 5px;
|
||||
|
||||
// Tables
|
||||
// -------------------------
|
||||
|
||||
//$table-cell-padding: 8px;
|
||||
//$table-condensed-cell-padding: 5px;
|
||||
|
||||
//$table-bg: transparent; // overall background-color
|
||||
//$table-bg-accent: #f9f9f9; // for striping
|
||||
//$table-bg-hover: #f5f5f5;
|
||||
//$table-bg-active: $table-bg-hover;
|
||||
|
||||
//$table-border-color: #ddd; // table and cell border
|
||||
|
||||
// Buttons
|
||||
// -------------------------
|
||||
|
||||
//$btn-font-weight: normal;
|
||||
|
||||
//$btn-default-color: #333;
|
||||
//$btn-default-bg: #fff;
|
||||
//$btn-default-border: #ccc;
|
||||
|
||||
//$btn-primary-color: #fff;
|
||||
//$btn-primary-bg: $brand-primary;
|
||||
//$btn-primary-border: darken($btn-primary-bg, 5%);
|
||||
|
||||
//$btn-success-color: #fff;
|
||||
//$btn-success-bg: $brand-success;
|
||||
//$btn-success-border: darken($btn-success-bg, 5%);
|
||||
|
||||
//$btn-warning-color: #fff;
|
||||
//$btn-warning-bg: $brand-warning;
|
||||
//$btn-warning-border: darken($btn-warning-bg, 5%);
|
||||
|
||||
//$btn-danger-color: #fff;
|
||||
//$btn-danger-bg: $brand-danger;
|
||||
//$btn-danger-border: darken($btn-danger-bg, 5%);
|
||||
|
||||
//$btn-info-color: #fff;
|
||||
//$btn-info-bg: $brand-info;
|
||||
//$btn-info-border: darken($btn-info-bg, 5%);
|
||||
|
||||
//$btn-link-disabled-color: $gray-light;
|
||||
|
||||
// Forms
|
||||
// -------------------------
|
||||
|
||||
//$input-bg: #fff;
|
||||
//$input-bg-disabled: $gray-lighter;
|
||||
|
||||
//$input-color: $gray;
|
||||
//$input-border: #ccc;
|
||||
//$input-border-radius: $border-radius-base;
|
||||
//$input-border-focus: #66afe9;
|
||||
|
||||
//$input-color-placeholder: $gray-light;
|
||||
|
||||
//$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2);
|
||||
//$input-height-large: (floor($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2);
|
||||
//$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2);
|
||||
|
||||
//$legend-color: $gray-dark;
|
||||
//$legend-border-color: #e5e5e5;
|
||||
|
||||
//$input-group-addon-bg: $gray-lighter;
|
||||
//$input-group-addon-border-color: $input-border;
|
||||
|
||||
// Dropdowns
|
||||
// -------------------------
|
||||
|
||||
//$dropdown-bg: #fff;
|
||||
//$dropdown-border: rgba(0,0,0,.15);
|
||||
//$dropdown-fallback-border: #ccc;
|
||||
//$dropdown-divider-bg: #e5e5e5;
|
||||
|
||||
//$dropdown-link-color: $gray-dark;
|
||||
//$dropdown-link-hover-color: darken($gray-dark, 5%);
|
||||
//$dropdown-link-hover-bg: #f5f5f5;
|
||||
|
||||
//$dropdown-link-active-color: $component-active-color;
|
||||
//$dropdown-link-active-bg: $component-active-bg;
|
||||
|
||||
//$dropdown-link-disabled-color: $gray-light;
|
||||
|
||||
//$dropdown-header-color: $gray-light;
|
||||
|
||||
//$dropdown-caret-color: #000;
|
||||
|
||||
// COMPONENT VARIABLES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Z-index master list
|
||||
// -------------------------
|
||||
// Used for a bird's eye view of components dependent on the z-axis
|
||||
// Try to avoid customizing these :)
|
||||
|
||||
//$zindex-navbar: 1000;
|
||||
//$zindex-dropdown: 1000;
|
||||
//$zindex-popover: 1010;
|
||||
//$zindex-tooltip: 1030;
|
||||
//$zindex-navbar-fixed: 1030;
|
||||
//$zindex-modal-background: 1040;
|
||||
//$zindex-modal: 1050;
|
||||
|
||||
// Media queries breakpoints
|
||||
// --------------------------------------------------
|
||||
|
||||
// Extra small screen / phone
|
||||
// Note: Deprecated $screen-xs and $screen-phone as of v3.0.1
|
||||
//$screen-xs: 480px;
|
||||
//$screen-xs-min: $screen-xs;
|
||||
//$screen-phone: $screen-xs-min;
|
||||
|
||||
// Small screen / tablet
|
||||
// Note: Deprecated $screen-sm and $screen-tablet as of v3.0.1
|
||||
//$screen-sm: 768px;
|
||||
//$screen-sm-min: $screen-sm;
|
||||
//$screen-tablet: $screen-sm-min;
|
||||
|
||||
// Medium screen / desktop
|
||||
// Note: Deprecated $screen-md and $screen-desktop as of v3.0.1
|
||||
//$screen-md: 992px;
|
||||
//$screen-md-min: $screen-md;
|
||||
//$screen-desktop: $screen-md-min;
|
||||
|
||||
// Large screen / wide desktop
|
||||
// Note: Deprecated $screen-lg and $screen-lg-desktop as of v3.0.1
|
||||
//$screen-lg: 1200px;
|
||||
//$screen-lg-min: $screen-lg;
|
||||
//$screen-lg-desktop: $screen-lg-min;
|
||||
|
||||
// So media queries don't overlap when required, provide a maximum
|
||||
//$screen-xs-max: ($screen-sm-min - 1);
|
||||
//$screen-sm-max: ($screen-md-min - 1);
|
||||
//$screen-md-max: ($screen-lg-min - 1);
|
||||
|
||||
// Grid system
|
||||
// --------------------------------------------------
|
||||
|
||||
// Number of columns in the grid system
|
||||
//$grid-columns: 12;
|
||||
// Padding, to be divided by two and applied to the left and right of all columns
|
||||
//$grid-gutter-width: 30px;
|
||||
// Point at which the navbar stops collapsing
|
||||
//$grid-float-breakpoint: $screen-sm-min;
|
||||
|
||||
// Navbar
|
||||
// -------------------------
|
||||
|
||||
// Basics of a navbar
|
||||
//$navbar-height: 50px;
|
||||
//$navbar-margin-bottom: $line-height-computed;
|
||||
//$navbar-border-radius: $border-radius-base;
|
||||
//$navbar-padding-horizontal: floor($grid-gutter-width / 2);
|
||||
//$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2);
|
||||
|
||||
//$navbar-default-color: #777;
|
||||
//$navbar-default-bg: #f8f8f8;
|
||||
//$navbar-default-border: darken($navbar-default-bg, 6.5%);
|
||||
|
||||
// Navbar links
|
||||
//$navbar-default-link-color: #777;
|
||||
//$navbar-default-link-hover-color: #333;
|
||||
//$navbar-default-link-hover-bg: transparent;
|
||||
//$navbar-default-link-active-color: #555;
|
||||
//$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%);
|
||||
//$navbar-default-link-disabled-color: #ccc;
|
||||
//$navbar-default-link-disabled-bg: transparent;
|
||||
|
||||
// Navbar brand label
|
||||
//$navbar-default-brand-color: $navbar-default-link-color;
|
||||
//$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%);
|
||||
//$navbar-default-brand-hover-bg: transparent;
|
||||
|
||||
// Navbar toggle
|
||||
//$navbar-default-toggle-hover-bg: #ddd;
|
||||
//$navbar-default-toggle-icon-bar-bg: #ccc;
|
||||
//$navbar-default-toggle-border-color: #ddd;
|
||||
|
||||
// Inverted navbar
|
||||
//
|
||||
// Reset inverted navbar basics
|
||||
//$navbar-inverse-color: $gray-light;
|
||||
//$navbar-inverse-bg: #222;
|
||||
//$navbar-inverse-border: darken($navbar-inverse-bg, 10%);
|
||||
|
||||
// Inverted navbar links
|
||||
//$navbar-inverse-link-color: $gray-light;
|
||||
//$navbar-inverse-link-hover-color: #fff;
|
||||
//$navbar-inverse-link-hover-bg: transparent;
|
||||
//$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color;
|
||||
//$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%);
|
||||
//$navbar-inverse-link-disabled-color: #444;
|
||||
//$navbar-inverse-link-disabled-bg: transparent;
|
||||
|
||||
// Inverted navbar brand label
|
||||
//$navbar-inverse-brand-color: $navbar-inverse-link-color;
|
||||
//$navbar-inverse-brand-hover-color: #fff;
|
||||
//$navbar-inverse-brand-hover-bg: transparent;
|
||||
|
||||
// Inverted navbar toggle
|
||||
//$navbar-inverse-toggle-hover-bg: #333;
|
||||
//$navbar-inverse-toggle-icon-bar-bg: #fff;
|
||||
//$navbar-inverse-toggle-border-color: #333;
|
||||
|
||||
// Navs
|
||||
// -------------------------
|
||||
|
||||
//$nav-link-padding: 10px 15px;
|
||||
//$nav-link-hover-bg: $gray-lighter;
|
||||
|
||||
//$nav-disabled-link-color: $gray-light;
|
||||
//$nav-disabled-link-hover-color: $gray-light;
|
||||
|
||||
//$nav-open-link-hover-color: #fff;
|
||||
//$nav-open-caret-border-color: #fff;
|
||||
|
||||
// Tabs
|
||||
//$nav-tabs-border-color: #ddd;
|
||||
|
||||
//$nav-tabs-link-hover-border-color: $gray-lighter;
|
||||
|
||||
//$nav-tabs-active-link-hover-bg: $body-bg;
|
||||
//$nav-tabs-active-link-hover-color: $gray;
|
||||
//$nav-tabs-active-link-hover-border-color: #ddd;
|
||||
|
||||
//$nav-tabs-justified-link-border-color: #ddd;
|
||||
//$nav-tabs-justified-active-link-border-color: $body-bg;
|
||||
|
||||
// Pills
|
||||
//$nav-pills-border-radius: $border-radius-base;
|
||||
//$nav-pills-active-link-hover-bg: $component-active-bg;
|
||||
//$nav-pills-active-link-hover-color: $component-active-color;
|
||||
|
||||
// Pagination
|
||||
// -------------------------
|
||||
|
||||
//$pagination-bg: #fff;
|
||||
//$pagination-border: #ddd;
|
||||
|
||||
//$pagination-hover-bg: $gray-lighter;
|
||||
|
||||
//$pagination-active-bg: $brand-primary;
|
||||
//$pagination-active-color: #fff;
|
||||
|
||||
//$pagination-disabled-color: $gray-light;
|
||||
|
||||
// Pager
|
||||
// -------------------------
|
||||
|
||||
//$pager-border-radius: 15px;
|
||||
//$pager-disabled-color: $gray-light;
|
||||
|
||||
// Jumbotron
|
||||
// -------------------------
|
||||
|
||||
//$jumbotron-padding: 30px;
|
||||
//$jumbotron-color: inherit;
|
||||
//$jumbotron-bg: $gray-lighter;
|
||||
//$jumbotron-heading-color: inherit;
|
||||
//$jumbotron-font-size: ceil($font-size-base * 1.5);
|
||||
|
||||
// Form states and alerts
|
||||
// -------------------------
|
||||
|
||||
//$state-success-text: #468847;
|
||||
//$state-success-bg: #dff0d8;
|
||||
//$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%);
|
||||
|
||||
//$state-info-text: #3a87ad;
|
||||
//$state-info-bg: #d9edf7;
|
||||
//$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%);
|
||||
|
||||
//$state-warning-text: #c09853;
|
||||
//$state-warning-bg: #fcf8e3;
|
||||
//$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%);
|
||||
|
||||
//$state-danger-text: #b94a48;
|
||||
//$state-danger-bg: #f2dede;
|
||||
//$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%);
|
||||
|
||||
// Tooltips
|
||||
// -------------------------
|
||||
//$tooltip-max-width: 200px;
|
||||
//$tooltip-color: #fff;
|
||||
//$tooltip-bg: #000;
|
||||
|
||||
//$tooltip-arrow-width: 5px;
|
||||
//$tooltip-arrow-color: $tooltip-bg;
|
||||
|
||||
// Popovers
|
||||
// -------------------------
|
||||
//$popover-bg: #fff;
|
||||
//$popover-max-width: 276px;
|
||||
//$popover-border-color: rgba(0,0,0,.2);
|
||||
//$popover-fallback-border-color: #ccc;
|
||||
|
||||
//$popover-title-bg: darken($popover-bg, 3%);
|
||||
|
||||
//$popover-arrow-width: 10px;
|
||||
//$popover-arrow-color: #fff;
|
||||
|
||||
//$popover-arrow-outer-width: ($popover-arrow-width + 1);
|
||||
//$popover-arrow-outer-color: rgba(0,0,0,.25);
|
||||
//$popover-arrow-outer-fallback-color: #999;
|
||||
|
||||
// Labels
|
||||
// -------------------------
|
||||
|
||||
//$label-default-bg: $gray-light;
|
||||
//$label-primary-bg: $brand-primary;
|
||||
//$label-success-bg: $brand-success;
|
||||
//$label-info-bg: $brand-info;
|
||||
//$label-warning-bg: $brand-warning;
|
||||
//$label-danger-bg: $brand-danger;
|
||||
|
||||
//$label-color: #fff;
|
||||
//$label-link-hover-color: #fff;
|
||||
|
||||
// Modals
|
||||
// -------------------------
|
||||
//$modal-inner-padding: 20px;
|
||||
|
||||
//$modal-title-padding: 15px;
|
||||
//$modal-title-line-height: $line-height-base;
|
||||
|
||||
//$modal-content-bg: #fff;
|
||||
//$modal-content-border-color: rgba(0,0,0,.2);
|
||||
//$modal-content-fallback-border-color: #999;
|
||||
|
||||
//$modal-backdrop-bg: #000;
|
||||
//$modal-header-border-color: #e5e5e5;
|
||||
//$modal-footer-border-color: $modal-header-border-color;
|
||||
|
||||
// Alerts
|
||||
// -------------------------
|
||||
//$alert-padding: 15px;
|
||||
//$alert-border-radius: $border-radius-base;
|
||||
//$alert-link-font-weight: bold;
|
||||
|
||||
//$alert-success-bg: $state-success-bg;
|
||||
//$alert-success-text: $state-success-text;
|
||||
//$alert-success-border: $state-success-border;
|
||||
|
||||
//$alert-info-bg: $state-info-bg;
|
||||
//$alert-info-text: $state-info-text;
|
||||
//$alert-info-border: $state-info-border;
|
||||
|
||||
//$alert-warning-bg: $state-warning-bg;
|
||||
//$alert-warning-text: $state-warning-text;
|
||||
//$alert-warning-border: $state-warning-border;
|
||||
|
||||
//$alert-danger-bg: $state-danger-bg;
|
||||
//$alert-danger-text: $state-danger-text;
|
||||
//$alert-danger-border: $state-danger-border;
|
||||
|
||||
// Progress bars
|
||||
// -------------------------
|
||||
//$progress-bg: #f5f5f5;
|
||||
//$progress-bar-color: #fff;
|
||||
|
||||
//$progress-bar-bg: $brand-primary;
|
||||
//$progress-bar-success-bg: $brand-success;
|
||||
//$progress-bar-warning-bg: $brand-warning;
|
||||
//$progress-bar-danger-bg: $brand-danger;
|
||||
//$progress-bar-info-bg: $brand-info;
|
||||
|
||||
// List group
|
||||
// -------------------------
|
||||
//$list-group-bg: #fff;
|
||||
//$list-group-border: #ddd;
|
||||
//$list-group-border-radius: $border-radius-base;
|
||||
|
||||
//$list-group-hover-bg: #f5f5f5;
|
||||
//$list-group-active-color: $component-active-color;
|
||||
//$list-group-active-bg: $component-active-bg;
|
||||
//$list-group-active-border: $list-group-active-bg;
|
||||
|
||||
//$list-group-link-color: #555;
|
||||
//$list-group-link-heading-color: #333;
|
||||
|
||||
// Panels
|
||||
// -------------------------
|
||||
//$panel-bg: #fff;
|
||||
//$panel-inner-border: #ddd;
|
||||
//$panel-border-radius: $border-radius-base;
|
||||
//$panel-footer-bg: #f5f5f5;
|
||||
|
||||
//$panel-default-text: $gray-dark;
|
||||
//$panel-default-border: #ddd;
|
||||
//$panel-default-heading-bg: #f5f5f5;
|
||||
|
||||
//$panel-primary-text: #fff;
|
||||
//$panel-primary-border: $brand-primary;
|
||||
//$panel-primary-heading-bg: $brand-primary;
|
||||
|
||||
//$panel-success-text: $state-success-text;
|
||||
//$panel-success-border: $state-success-border;
|
||||
//$panel-success-heading-bg: $state-success-bg;
|
||||
|
||||
//$panel-warning-text: $state-warning-text;
|
||||
//$panel-warning-border: $state-warning-border;
|
||||
//$panel-warning-heading-bg: $state-warning-bg;
|
||||
|
||||
//$panel-danger-text: $state-danger-text;
|
||||
//$panel-danger-border: $state-danger-border;
|
||||
//$panel-danger-heading-bg: $state-danger-bg;
|
||||
|
||||
//$panel-info-text: $state-info-text;
|
||||
//$panel-info-border: $state-info-border;
|
||||
//$panel-info-heading-bg: $state-info-bg;
|
||||
|
||||
// Thumbnails
|
||||
// -------------------------
|
||||
//$thumbnail-padding: 4px;
|
||||
//$thumbnail-bg: $body-bg;
|
||||
//$thumbnail-border: #ddd;
|
||||
//$thumbnail-border-radius: $border-radius-base;
|
||||
|
||||
//$thumbnail-caption-color: $text-color;
|
||||
//$thumbnail-caption-padding: 9px;
|
||||
|
||||
// Wells
|
||||
// -------------------------
|
||||
//$well-bg: #f5f5f5;
|
||||
|
||||
// Badges
|
||||
// -------------------------
|
||||
//$badge-color: #fff;
|
||||
//$badge-link-hover-color: #fff;
|
||||
//$badge-bg: $gray-light;
|
||||
|
||||
//$badge-active-color: $link-color;
|
||||
//$badge-active-bg: #fff;
|
||||
|
||||
//$badge-font-weight: bold;
|
||||
//$badge-line-height: 1;
|
||||
//$badge-border-radius: 10px;
|
||||
|
||||
// Breadcrumbs
|
||||
// -------------------------
|
||||
//$breadcrumb-bg: #f5f5f5;
|
||||
//$breadcrumb-color: #ccc;
|
||||
//$breadcrumb-active-color: $gray-light;
|
||||
//$breadcrumb-separator: "/";
|
||||
|
||||
// Carousel
|
||||
// ------------------------
|
||||
|
||||
//$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
|
||||
|
||||
//$carousel-control-color: #fff;
|
||||
//$carousel-control-width: 15%;
|
||||
//$carousel-control-opacity: .5;
|
||||
//$carousel-control-font-size: 20px;
|
||||
|
||||
//$carousel-indicator-active-bg: #fff;
|
||||
//$carousel-indicator-border-color: #fff;
|
||||
|
||||
//$carousel-caption-color: #fff;
|
||||
|
||||
// Close
|
||||
// ------------------------
|
||||
//$close-font-weight: bold;
|
||||
//$close-color: #000;
|
||||
//$close-text-shadow: 0 1px 0 #fff;
|
||||
|
||||
// Code
|
||||
// ------------------------
|
||||
//$code-color: #c7254e;
|
||||
//$code-bg: #f9f2f4;
|
||||
|
||||
//$pre-bg: #f5f5f5;
|
||||
//$pre-color: $gray-dark;
|
||||
//$pre-border-color: #ccc;
|
||||
//$pre-scrollable-max-height: 340px;
|
||||
|
||||
// Type
|
||||
// ------------------------
|
||||
//$text-muted: $gray-light;
|
||||
//$abbr-border-color: $gray-light;
|
||||
//$headings-small-color: $gray-light;
|
||||
//$blockquote-small-color: $gray-light;
|
||||
//$blockquote-border-color: $gray-lighter;
|
||||
//$page-header-border-color: $gray-lighter;
|
||||
|
||||
// Miscellaneous
|
||||
// -------------------------
|
||||
|
||||
// Hr border color
|
||||
//$hr-border: $gray-lighter;
|
||||
|
||||
// Horizontal forms & lists
|
||||
//$component-offset-horizontal: 180px;
|
||||
|
||||
// Container sizes
|
||||
// --------------------------------------------------
|
||||
|
||||
// Small screen / tablet
|
||||
//$container-tablet: ((720px + $grid-gutter-width));
|
||||
//$container-sm: $container-tablet;
|
||||
|
||||
// Medium screen / desktop
|
||||
//$container-desktop: ((940px + $grid-gutter-width));
|
||||
//$container-md: $container-desktop;
|
||||
|
||||
// Large screen / wide desktop
|
||||
//$container-large-desktop: ((1140px + $grid-gutter-width));
|
||||
//$container-lg: $container-large-desktop;
|
||||
@@ -0,0 +1,219 @@
|
||||
@import "variables";
|
||||
@import "mixins";
|
||||
@import "../../bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap.scss";
|
||||
@import "datepicker";
|
||||
|
||||
body {
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.glyphicon .white {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
.navbar .dropdown-toggle{
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
border-radius: 50% 50%;
|
||||
}
|
||||
.name {
|
||||
display: inline-block;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
#customer {
|
||||
ul {
|
||||
@include inline-block-list;
|
||||
|
||||
li {
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
width: 79px;
|
||||
overflow: hidden;
|
||||
|
||||
&:hover {
|
||||
background-color: #dddddd;
|
||||
cursor: pointer;
|
||||
}
|
||||
&.marked {
|
||||
color: #468847;
|
||||
background-color: #DFF0D8;
|
||||
}
|
||||
&.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
.name {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
img.profile {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
#register {
|
||||
#products {
|
||||
margin-bottom:2em;
|
||||
ul {
|
||||
@include inline-block-list;
|
||||
|
||||
li {
|
||||
padding-top: 10px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
text-align: center;
|
||||
|
||||
&:hover {
|
||||
background-color: #dddddd;
|
||||
cursor: pointer;
|
||||
}
|
||||
&.marked {
|
||||
color: #468847;
|
||||
background-color: #DFF0D8;
|
||||
}
|
||||
.qty {
|
||||
font-size: 1.7em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.name {
|
||||
font-weight: bold;
|
||||
}
|
||||
img.product {
|
||||
width: 64px;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.product {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.total {
|
||||
color: #ffffff;
|
||||
background-color: #222;
|
||||
padding: 0 10px;
|
||||
min-width:115px;
|
||||
h2 {
|
||||
color: #ffffff;
|
||||
margin: 0.2em 0;
|
||||
}
|
||||
}
|
||||
h2 {
|
||||
display: inline-block;
|
||||
}
|
||||
input[name=customer_name] {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
#log {
|
||||
h2 {
|
||||
display:inline-block;
|
||||
}
|
||||
table {
|
||||
tr{
|
||||
text-align: middle;
|
||||
}
|
||||
.amount {
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
#inventory {
|
||||
tr {
|
||||
&.info {
|
||||
border-left: 8px solid #d9edf7;
|
||||
}
|
||||
&.warning {
|
||||
border-left: 8px solid #da7878;
|
||||
|
||||
.product-amount {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
&.success {
|
||||
border-left: 8px solid darken(#dff0d8, 10%);
|
||||
}
|
||||
> td {
|
||||
background-color: inherit;
|
||||
}
|
||||
&:nth-child(odd) td {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
&.inactive {
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
}
|
||||
#inventory-report {
|
||||
.form-control {
|
||||
width: auto;
|
||||
}
|
||||
table {
|
||||
.positive {
|
||||
color: #468847;
|
||||
}
|
||||
.negative {
|
||||
color: #da7878;
|
||||
}
|
||||
}
|
||||
}
|
||||
#transactions {
|
||||
img.customer {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
#user-profile {
|
||||
.profile-name {
|
||||
display: inline-block;
|
||||
line-height: 50px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.profile-image {
|
||||
border-radius: 50% 50%;
|
||||
}
|
||||
}
|
||||
#footer .credits {
|
||||
text-align: center;
|
||||
margin: 2em;
|
||||
font-size: 10px;
|
||||
color: grey;
|
||||
img {
|
||||
margin-top: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
.love {
|
||||
color: #faafba;
|
||||
}
|
||||
}
|
||||
.alert-error {
|
||||
@extend .alert-danger;
|
||||
}
|
||||
.facebook-image {
|
||||
img {
|
||||
height: 32px;
|
||||
}
|
||||
}
|
||||
.form-login {
|
||||
max-width: 320px;
|
||||
margin: 4em auto;
|
||||
[type=submit] {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
toolbox.router.get('/(.*)/picture/', toolbox.fastest, {
|
||||
origin: /^https:\/\/graph\.facebook\.com$/
|
||||
});
|
||||
|
||||
//var MISSING_IMAGE = '/static/dist/images/unknown_person.png';
|
||||
//toolbox.cache(MISSING_IMAGE);
|
||||
//
|
||||
//function imageHandler(request, values, options) {
|
||||
// return toolbox.cacheFirst(request, values, options).catch(function () {
|
||||
// return caches.match(MISSING_IMAGE);
|
||||
// });
|
||||
//}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "bbs",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"bootstrap-sass-official": "~3.1.1",
|
||||
"jquery": "~1.11.0",
|
||||
"underscore": "~1.7.0",
|
||||
"highcharts": "~4.0.4",
|
||||
"bootstrap-datepicker": "~1.3.0",
|
||||
"sw-toolbox": "~3.0.0"
|
||||
},
|
||||
"devDependencies": {}
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata></metadata>
|
||||
<defs>
|
||||
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
|
||||
<font-face units-per-em="1200" ascent="960" descent="-240" />
|
||||
<missing-glyph horiz-adv-x="500" />
|
||||
<glyph />
|
||||
<glyph />
|
||||
<glyph unicode="
" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
|
||||
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode=" " horiz-adv-x="652" />
|
||||
<glyph unicode=" " horiz-adv-x="1304" />
|
||||
<glyph unicode=" " horiz-adv-x="652" />
|
||||
<glyph unicode=" " horiz-adv-x="1304" />
|
||||
<glyph unicode=" " horiz-adv-x="434" />
|
||||
<glyph unicode=" " horiz-adv-x="326" />
|
||||
<glyph unicode=" " horiz-adv-x="217" />
|
||||
<glyph unicode=" " horiz-adv-x="217" />
|
||||
<glyph unicode=" " horiz-adv-x="163" />
|
||||
<glyph unicode=" " horiz-adv-x="260" />
|
||||
<glyph unicode=" " horiz-adv-x="72" />
|
||||
<glyph unicode=" " horiz-adv-x="260" />
|
||||
<glyph unicode=" " horiz-adv-x="326" />
|
||||
<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
|
||||
<glyph unicode="−" d="M200 400h900v300h-900v-300z" />
|
||||
<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
|
||||
<glyph unicode="☁" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
|
||||
<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
|
||||
<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
|
||||
<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
|
||||
<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
|
||||
<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
|
||||
<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
|
||||
<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
|
||||
<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
|
||||
<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
|
||||
<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
|
||||
<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
|
||||
<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
|
||||
<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
|
||||
<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
|
||||
<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
|
||||
<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
|
||||
<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
|
||||
<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
|
||||
<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
|
||||
<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
|
||||
<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
|
||||
<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
|
||||
<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
|
||||
<glyph unicode="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
|
||||
<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
|
||||
<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
|
||||
<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
|
||||
<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
|
||||
<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
|
||||
<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
|
||||
<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
|
||||
<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
|
||||
<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
|
||||
<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
|
||||
<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
|
||||
<glyph unicode="" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
|
||||
<glyph unicode="" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
|
||||
<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
|
||||
<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
|
||||
<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
|
||||
<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
|
||||
<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
|
||||
<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
|
||||
<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
|
||||
<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
|
||||
<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
|
||||
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
|
||||
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
|
||||
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
|
||||
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
|
||||
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
|
||||
<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
|
||||
<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
|
||||
<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
|
||||
<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
|
||||
<glyph unicode="" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
|
||||
<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
|
||||
<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
|
||||
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
|
||||
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
|
||||
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
|
||||
<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
|
||||
<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
|
||||
<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" />
|
||||
<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
|
||||
<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
|
||||
<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
|
||||
<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
|
||||
<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
|
||||
<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
|
||||
<glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
|
||||
<glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
|
||||
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
|
||||
<glyph unicode="" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
|
||||
<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" />
|
||||
<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
|
||||
<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
|
||||
<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" />
|
||||
<glyph unicode="" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
|
||||
<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
|
||||
<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
|
||||
<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
|
||||
<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
|
||||
<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
|
||||
<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
|
||||
<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
|
||||
<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
|
||||
<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
|
||||
<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
|
||||
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
|
||||
<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
|
||||
<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
|
||||
<glyph unicode="" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
|
||||
<glyph unicode="" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
|
||||
<glyph unicode="" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
|
||||
<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
|
||||
<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
|
||||
<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
|
||||
<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
|
||||
<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
|
||||
<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
|
||||
<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
|
||||
<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
|
||||
<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
|
||||
<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
|
||||
<glyph unicode="" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
|
||||
<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
|
||||
<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
|
||||
<glyph unicode="" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
|
||||
<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
|
||||
<glyph unicode="" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
|
||||
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
|
||||
<glyph unicode="" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
|
||||
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
|
||||
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
|
||||
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
|
||||
<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
|
||||
<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
|
||||
<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
|
||||
<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
|
||||
<glyph unicode="" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
|
||||
<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
|
||||
<glyph unicode="" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
|
||||
<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
|
||||
<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
|
||||
<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
|
||||
<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
|
||||
<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
|
||||
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
|
||||
<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
|
||||
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
|
||||
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
|
||||
<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
|
||||
<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
|
||||
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
|
||||
<glyph unicode="" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
|
||||
<glyph unicode="" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
|
||||
<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
|
||||
<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
|
||||
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
|
||||
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
|
||||
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
|
||||
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
|
||||
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
|
||||
<glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
|
||||
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
|
||||
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
|
||||
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
|
||||
<glyph unicode="" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
|
||||
<glyph unicode="" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
|
||||
<glyph unicode="" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
|
||||
<glyph unicode="" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
|
||||
<glyph unicode="" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
|
||||
<glyph unicode="" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
|
||||
<glyph unicode="" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
|
||||
<glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
|
||||
<glyph unicode="" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
|
||||
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
|
||||
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
|
||||
<glyph unicode="" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
|
||||
<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
|
||||
<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
|
||||
<glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
|
||||
<glyph unicode="" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 923 B |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 98 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 977 B |
@@ -0,0 +1,10 @@
|
||||
function enable_all_customers(){$("li.customer").each(function(t){$(this).removeClass("marked"),$(this).show()})}function filter_customers(t){setTimeout(function(){$("li.customer").each(function(e){var i=new RegExp(t,"i"),n=$(this).children("span.name").text();if(i.test(n)){$(this).show();var r=n.toLowerCase()==t.toLowerCase(),o=1==$("li.customer:visible").length;console.log(r,o),r?$(this).addClass("marked"):$(this).removeClass("marked")}else $(this).hide(),$(this).removeClass("marked")})},50)}function enable_all_products(){$("li.product").each(function(t){$(this).removeClass("marked"),$(this).show()})}function reset_qtys(){$(".qty").each(function(t){$(this).html("0")}),$("input[name$=amount]").each(function(t){$(this).val("0")})}function update_total(){var t=0;$("li.product").each(function(){var e=Number($(this).find("[name$=amount]").val()),i=".sale_price_int";"Ekstern"===$("#id_customer_typeahead").val()&&(i=".sale_price_ext");var n=Number($(this).find(i).text());t+=e*n}),0===t&&(t=""),$("span.total_text").html(t)}function productFormatter(){return"<b>"+this.point.name+"</b>: "+Highcharts.numberFormat(this.percentage,1)+" %"}function parse_products_realtime_data(t,e){for(var i in t.products){null===e.get(i)&&e.addSeries({data:[],id:i,name:i});var n=e.get(i);_.each(t.products[i],function(t){null===e.get(t[0])&&n.addPoint({id:t[0],x:t[0],y:t[1]})})}}function get_products_realtime_data(){$.ajax({url:products_realtime_url,dataType:"json",success:function(t){parse_products_realtime_data(t,products_realtime_chart),setTimeout(function(){get_products_realtime_data()},15e3)},cache:!1})}function renderProductCharts(t){for(var e in t){var i="product_chart"+t[e].id,n=t[e].counts;n=_.map(n,function(t){return[t.full_name,t.amount_total]}),new Highcharts.Chart({chart:{renderTo:i,plotBackgroundColor:null,plotBorderWidth:null,plotShadow:!1},title:{text:t[e].name},tooltip:{formatter:productFormatter},plotOptions:{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!0,color:"#000000",connectorColor:"#000000",formatter:function(){return"<b>"+this.point.name+"</b>: "+this.y}}}},series:[{type:"pie",name:"Orders",data:n}]})}}function renderOrdersGroupedChart(t){var e=t.grouping,i="order_chart_"+e;new Highcharts.Chart({chart:{renderTo:i,type:"column"},title:{text:"Ordre - "+e},tooltip:{formatter:function(){return this.y+" stk"}},yAxis:{title:{text:"Ordre"}},xAxis:{title:{text:"Tid"},labels:{formatter:orderFormatters[e]}},plotOptions:{column:{minPointLength:3,colorByPoint:!0},series:{groupPadding:0,pointPadding:.05}},series:[{name:"Ordre",data:t.orders}]})}!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function i(t){var e="length"in t&&t.length,i=rt.type(t);return"function"===i||rt.isWindow(t)?!1:1===t.nodeType&&e?!0:"array"===i||0===e||"number"==typeof e&&e>0&&e-1 in t}function n(t,e,i){if(rt.isFunction(e))return rt.grep(t,function(t,n){return!!e.call(t,n,t)!==i});if(e.nodeType)return rt.grep(t,function(t){return t===e!==i});if("string"==typeof e){if(dt.test(e))return rt.filter(e,t,i);e=rt.filter(e,t)}return rt.grep(t,function(t){return rt.inArray(t,e)>=0!==i})}function r(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function o(t){var e=bt[t]={};return rt.each(t.match(xt)||[],function(t,i){e[i]=!0}),e}function s(){ft.addEventListener?(ft.removeEventListener("DOMContentLoaded",a,!1),t.removeEventListener("load",a,!1)):(ft.detachEvent("onreadystatechange",a),t.detachEvent("onload",a))}function a(){(ft.addEventListener||"load"===event.type||"complete"===ft.readyState)&&(s(),rt.ready())}function l(t,e,i){if(void 0===i&&1===t.nodeType){var n="data-"+e.replace(St,"-$1").toLowerCase();if(i=t.getAttribute(n),"string"==typeof i){try{i="true"===i?!0:"false"===i?!1:"null"===i?null:+i+""===i?+i:Ct.test(i)?rt.parseJSON(i):i}catch(r){}rt.data(t,e,i)}else i=void 0}return i}function h(t){var e;for(e in t)if(("data"!==e||!rt.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function c(t,e,i,n){if(rt.acceptData(t)){var r,o,s=rt.expando,a=t.nodeType,l=a?rt.cache:t,h=a?t[s]:t[s]&&s;if(h&&l[h]&&(n||l[h].data)||void 0!==i||"string"!=typeof e)return h||(h=a?t[s]=q.pop()||rt.guid++:s),l[h]||(l[h]=a?{}:{toJSON:rt.noop}),("object"==typeof e||"function"==typeof e)&&(n?l[h]=rt.extend(l[h],e):l[h].data=rt.extend(l[h].data,e)),o=l[h],n||(o.data||(o.data={}),o=o.data),void 0!==i&&(o[rt.camelCase(e)]=i),"string"==typeof e?(r=o[e],null==r&&(r=o[rt.camelCase(e)])):r=o,r}}function u(t,e,i){if(rt.acceptData(t)){var n,r,o=t.nodeType,s=o?rt.cache:t,a=o?t[rt.expando]:rt.expando;if(s[a]){if(e&&(n=i?s[a]:s[a].data)){rt.isArray(e)?e=e.concat(rt.map(e,rt.camelCase)):e in n?e=[e]:(e=rt.camelCase(e),e=e in n?[e]:e.split(" ")),r=e.length;for(;r--;)delete n[e[r]];if(i?!h(n):!rt.isEmptyObject(n))return}(i||(delete s[a].data,h(s[a])))&&(o?rt.cleLine truncated
|
||||
not:n(function(t){var e=[],i=[],r=D(t.replace(lt,"$1"));return r[R]?n(function(t,e,i,n){for(var o,s=r(t,null,n,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))}):function(t,n,o){return e[0]=t,r(e,null,o,i),e[0]=null,!i.pop()}}),has:n(function(t){return function(i){return e(t,i).length>0}}),contains:n(function(t){return t=t.replace(wt,kt),function(e){return(e.textContent||e.innerText||T(e)).indexOf(t)>-1}}),lang:n(function(t){return pt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(wt,kt).toLowerCase(),function(e){var i;do if(i=O?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return i=i.toLowerCase(),i===t||0===i.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var i=t.location&&t.location.hash;return i&&i.slice(1)===e.id},root:function(t){return t===N},focus:function(t){return t===_.activeElement&&(!_.hasFocus||_.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!k.pseudos.empty(t)},header:function(t){return mt.test(t.nodeName)},input:function(t){return gt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:h(function(){return[0]}),last:h(function(t,e){return[e-1]}),eq:h(function(t,e,i){return[0>i?i+e:i]}),even:h(function(t,e){for(var i=0;e>i;i+=2)t.push(i);return t}),odd:h(function(t,e){for(var i=1;e>i;i+=2)t.push(i);return t}),lt:h(function(t,e,i){for(var n=0>i?i+e:i;--n>=0;)t.push(n);return t}),gt:h(function(t,e,i){for(var n=0>i?i+e:i;++n<e;)t.push(n);return t})}},k.pseudos.nth=k.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})k.pseudos[b]=a(b);for(b in{submit:!0,reset:!0})k.pseudos[b]=l(b);return u.prototype=k.filters=k.pseudos,k.setFilters=new u,S=e.tokenize=function(t,i){var n,r,o,s,a,l,h,c=Y[t+" "];if(c)return i?0:c.slice(0);for(a=t,l=[],h=k.preFilter;a;){(!n||(r=ht.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),l.push(o=[])),n=!1,(r=ct.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(lt," ")}),a=a.slice(n.length));for(s in k.filter)!(r=ft[s].exec(a))||h[s]&&!(r=h[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return i?a.length:a?e.error(t):Y(t,l).slice(0)},D=e.compile=function(t,e){var i,n=[],r=[],o=X[t+" "];if(!o){for(e||(e=S(t)),i=e.length;i--;)o=y(e[i]),o[R]?n.push(o):r.push(o);o=X(t,x(r,n)),o.selector=t}return o},A=e.select=function(t,e,i,n){var r,o,s,a,l,h="function"==typeof t&&t,u=!n&&S(t=h.selector||t);if(i=i||[],1===u.length){if(o=u[0]=u[0].slice(0),o.length>2&&"ID"===(s=o[0]).type&&w.getById&&9===e.nodeType&&O&&k.relative[o[1].type]){if(e=(k.find.ID(s.matches[0].replace(wt,kt),e)||[])[0],!e)return i;h&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(r=ft.needsContext.test(t)?0:o.length;r--&&(s=o[r],!k.relative[a=s.type]);)if((l=k.find[a])&&(n=l(s.matches[0].replace(wt,kt),xt.test(o[0].type)&&c(e.parentNode)||e))){if(o.splice(r,1),t=n.length&&d(o),!t)return Z.apply(i,n),i;break}}return(h||D(t,u))(n,e,!O,i,xt.test(t)&&c(e.parentNode)||e),i},w.sortStable=R.split("").sort(U).join("")===R,w.detectDuplicates=!!P,E(),w.sortDetached=r(function(t){return 1&t.compareDocumentPosition(_.createElement("div"))}),r(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||o("type|href|height|width",function(t,e,i){return i?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),w.attributes&&r(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||o("value",function(t,e,i){return i||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),r(function(t){return null==t.getAttribute("disabled")})||o(et,function(t,e,i){var n;return i?void 0:t[e]===!0?e.toLowerCase():(n=t.getAttributeNode(e))&&n.specified?n.value:null}),e}(t);rt.find=ht,rt.expr=ht.selectors,rt.expr[":"]=rt.expr.pseudos,rt.unique=ht.uniqueSort,rt.text=ht.getText,rt.isXMLDoc=ht.isXML,rt.contains=ht.contains;var ct=rt.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^.[^:#\[\.,]*$/;rt.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?rt.find.matchesSelector(n,t)?[n]:[]:rt.find.matches(t,rt.grep(e,function(t){return 1===t.nodeType}))},rt.fn.extend({find:function(t){var e,i=[],n=this,r=n.length;if("string"!=typeof t)return this.pushStack(rt(t).filter(function(){for(e=0;r>e;e++)if(rt.contains(n[e],this))return!0}));for(e=0;r>e;e++)rt.find(t,n[e],i);return i=thisLine truncated
|
||||
t=t.replace(zt,"<$1></$2>");try{for(;n>i;i++)e=this[i]||{},1===e.nodeType&&(rt.cleanData(m(e,!1)),e.innerHTML=t);e=0}catch(r){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,rt.cleanData(m(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=J.apply([],t);var i,n,r,o,s,a,l=0,h=this.length,c=this,u=h-1,d=t[0],p=rt.isFunction(d);if(p||h>1&&"string"==typeof d&&!it.checkClone&&Xt.test(d))return this.each(function(i){var n=c.eq(i);p&&(t[0]=d.call(this,i,n.html())),n.domManip(t,e)});if(h&&(a=rt.buildFragment(t,this[0].ownerDocument,!1,this),i=a.firstChild,1===a.childNodes.length&&(a=i),i)){for(o=rt.map(m(a,"script"),x),r=o.length;h>l;l++)n=a,l!==u&&(n=rt.clone(n,!0,!0),r&&rt.merge(o,m(n,"script"))),e.call(this[l],n,l);if(r)for(s=o[o.length-1].ownerDocument,rt.map(o,b),l=0;r>l;l++)n=o[l],Ut.test(n.type||"")&&!rt._data(n,"globalEval")&&rt.contains(s,n)&&(n.src?rt._evalUrl&&rt._evalUrl(n.src):rt.globalEval((n.text||n.textContent||n.innerHTML||"").replace(qt,"")));a=i=null}return this}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var i,n=0,r=[],o=rt(t),s=o.length-1;s>=n;n++)i=n===s?this:this.clone(!0),rt(o[n])[e](i),K.apply(r,i.get());return this.pushStack(r)}});var Zt,Qt={};!function(){var t;it.shrinkWrapBlocks=function(){if(null!=t)return t;t=!1;var e,i,n;return i=ft.getElementsByTagName("body")[0],i&&i.style?(e=ft.createElement("div"),n=ft.createElement("div"),n.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",i.appendChild(n).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(ft.createElement("div")).style.width="5px",t=3!==e.offsetWidth),i.removeChild(n),t):void 0}}();var te,ee,ie=/^margin/,ne=new RegExp("^("+Dt+")(?!px)[a-z%]+$","i"),re=/^(top|right|bottom|left)$/;t.getComputedStyle?(te=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)},ee=function(t,e,i){var n,r,o,s,a=t.style;return i=i||te(t),s=i?i.getPropertyValue(e)||i[e]:void 0,i&&(""!==s||rt.contains(t.ownerDocument,t)||(s=rt.style(t,e)),ne.test(s)&&ie.test(e)&&(n=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=i.width,a.width=n,a.minWidth=r,a.maxWidth=o)),void 0===s?s:s+""}):ft.documentElement.currentStyle&&(te=function(t){return t.currentStyle},ee=function(t,e,i){var n,r,o,s,a=t.style;return i=i||te(t),s=i?i[e]:void 0,null==s&&a&&a[e]&&(s=a[e]),ne.test(s)&&!re.test(e)&&(n=a.left,r=t.runtimeStyle,o=r&&r.left,o&&(r.left=t.currentStyle.left),a.left="fontSize"===e?"1em":s,s=a.pixelLeft+"px",a.left=n,o&&(r.left=o)),void 0===s?s:s+""||"auto"}),!function(){function e(){var e,i,n,r;i=ft.getElementsByTagName("body")[0],i&&i.style&&(e=ft.createElement("div"),n=ft.createElement("div"),n.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",i.appendChild(n).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",o=s=!1,l=!0,t.getComputedStyle&&(o="1%"!==(t.getComputedStyle(e,null)||{}).top,s="4px"===(t.getComputedStyle(e,null)||{width:"4px"}).width,r=e.appendChild(ft.createElement("div")),r.style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",r.style.marginRight=r.style.width="0",e.style.width="1px",l=!parseFloat((t.getComputedStyle(r,null)||{}).marginRight),e.removeChild(r)),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",r=e.getElementsByTagName("td"),r[0].style.cssText="margin:0;border:0;padding:0;display:none",a=0===r[0].offsetHeight,a&&(r[0].style.display="",r[1].style.display="none",a=0===r[0].offsetHeight),i.removeChild(n))}var i,n,r,o,s,a,l;i=ft.createElement("div"),i.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=i.getElementsByTagName("a")[0],(n=r&&r.style)&&(n.cssText="float:left;opacity:.5",it.opacity="0.5"===n.opacity,it.cssFloat=!!n.cssFloat,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",it.clearCloneStyle="content-box"===i.style.backgroundClip,it.boxSizing=""===n.boxSizing||""===n.MozBoxSizing||""===n.WebkitBoxSizing,rt.extend(it,{reliableHiddenOffsets:function(){return null==a&&e(),a},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==o&&e(),o},reliableMarginRight:function(){return null==l&&e(),l}}))}(),rt.swap=function(t,e,i,n){var r,o,s={};for(o in e)s[o]=t.style[Line truncated
|
||||
}).complete(i&&function(t,e){s.each(i,r||[t.responseText,e,t])}),this},rt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){rt.fn[e]=function(t){return this.on(e,t)}}),rt.expr.filters.animated=function(t){return rt.grep(rt.timers,function(e){return t===e.elem}).length};var ni=t.document.documentElement;rt.offset={setOffset:function(t,e,i){var n,r,o,s,a,l,h,c=rt.css(t,"position"),u=rt(t),d={};"static"===c&&(t.style.position="relative"),a=u.offset(),o=rt.css(t,"top"),l=rt.css(t,"left"),h=("absolute"===c||"fixed"===c)&&rt.inArray("auto",[o,l])>-1,h?(n=u.position(),s=n.top,r=n.left):(s=parseFloat(o)||0,r=parseFloat(l)||0),rt.isFunction(e)&&(e=e.call(t,i,a)),null!=e.top&&(d.top=e.top-a.top+s),null!=e.left&&(d.left=e.left-a.left+r),"using"in e?e.using.call(t,d):u.css(d)}},rt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){rt.offset.setOffset(this,t,e)});var e,i,n={top:0,left:0},r=this[0],o=r&&r.ownerDocument;return o?(e=o.documentElement,rt.contains(e,r)?(typeof r.getBoundingClientRect!==Tt&&(n=r.getBoundingClientRect()),i=G(o),{top:n.top+(i.pageYOffset||e.scrollTop)-(e.clientTop||0),left:n.left+(i.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):n):void 0},position:function(){if(this[0]){var t,e,i={top:0,left:0},n=this[0];return"fixed"===rt.css(n,"position")?e=n.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),rt.nodeName(t[0],"html")||(i=t.offset()),i.top+=rt.css(t[0],"borderTopWidth",!0),i.left+=rt.css(t[0],"borderLeftWidth",!0)),{top:e.top-i.top-rt.css(n,"marginTop",!0),left:e.left-i.left-rt.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||ni;t&&!rt.nodeName(t,"html")&&"static"===rt.css(t,"position");)t=t.offsetParent;return t||ni})}}),rt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var i=/Y/.test(e);rt.fn[t]=function(n){return Lt(this,function(t,n,r){var o=G(t);return void 0===r?o?e in o?o[e]:o.document.documentElement[n]:t[n]:void(o?o.scrollTo(i?rt(o).scrollLeft():r,i?r:rt(o).scrollTop()):t[n]=r)},t,n,arguments.length,null)}}),rt.each(["top","left"],function(t,e){rt.cssHooks[e]=D(it.pixelPosition,function(t,i){return i?(i=ee(t,e),ne.test(i)?rt(t).position()[e]+"px":i):void 0})}),rt.each({Height:"height",Width:"width"},function(t,e){rt.each({padding:"inner"+t,content:e,"":"outer"+t},function(i,n){rt.fn[n]=function(n,r){var o=arguments.length&&(i||"boolean"!=typeof n),s=i||(n===!0||r===!0?"margin":"border");return Lt(this,function(e,i,n){var r;return rt.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+t],r["scroll"+t],e.body["offset"+t],r["offset"+t],r["client"+t])):void 0===n?rt.css(e,i,s):rt.style(e,i,n,s)},e,o?n:void 0,o,null)}})}),rt.fn.size=function(){return this.length},rt.fn.andSelf=rt.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return rt});var ri=t.jQuery,oi=t.$;return rt.noConflict=function(e){return t.$===rt&&(t.$=oi),e&&t.jQuery===rt&&(t.jQuery=ri),rt},typeof e===Tt&&(t.jQuery=t.$=rt),rt}),+function(t){"use strict";var e=function(i,n){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,n),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e=t.Event("show.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.$parent&&this.$parent.find("> .panel > .in");if(i&&i.length){var n=i.data("bs.collapse");if(n&&n.transitioning)return;i.collapse("hide"),n||i.data("bs.collapse",null)}var r=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[r](0),this.transitioning=1;var o=function(e){return e&&e.target!=this.$element[0]?void this.$element.one(t.support.transition.end,t.proxy(o,this)):(this.$element.removeClass("collapsing").addClass("collapse in")[r](""),this.transitioning=0,void this.$element.trigger("shown.bs.collapse"))};if(!t.support.transition)return o.call(this);var s=t.camelCase(["scroll",r].join("-"));this.$element.one(t.support.transition.end,t.proxy(o,this)).emulateTransitionEnd(350)[r](this.$element[0][s])}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var n=function(e){return e&&e.target!=this.$element[0]?void this.$element.one(t.support.transition.end,t.proxy(n,this)):(this.transitioning=0,void this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse"))};return t.supLine truncated
|
||||
r=0,n=parseInt(s.text(),10)||0,this.viewDate.setUTCFullYear(n),this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(i(n,r,o))),this.showMode(-1),this.fill());break;case"td":s.is(".day")&&!s.is(".disabled")&&(o=parseInt(s.text(),10)||1,n=this.viewDate.getUTCFullYear(),r=this.viewDate.getUTCMonth(),s.is(".old")?0===r?(r=11,n-=1):r-=1:s.is(".new")&&(11===r?(r=0,n+=1):r+=1),this._setDate(i(n,r,o)))}this.picker.is(":visible")&&this._focused_from&&t(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(t){var e=this.dates.contains(t);if(t||this.dates.clear(),1===this.o.multidate&&0===e||(-1!==e?this.dates.remove(e):this.dates.push(t)),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(t,e){e&&"date"!==e||this._toggle_multidate(t&&new Date(t)),e&&"view"!==e||(this.viewDate=t&&new Date(t)),this.fill(),this.setValue(),this._trigger("changeDate");var i;this.isInput?i=this.element:this.component&&(i=this.element.find("input")),i&&i.change(),!this.o.autoclose||e&&"date"!==e||this.hide()},moveMonth:function(t,i){if(!t)return e;if(!i)return t;var n,r,o=new Date(t.valueOf()),s=o.getUTCDate(),a=o.getUTCMonth(),l=Math.abs(i);if(i=i>0?1:-1,1===l)r=-1===i?function(){return o.getUTCMonth()===a}:function(){return o.getUTCMonth()!==n},n=a+i,o.setUTCMonth(n),(0>n||n>11)&&(n=(n+12)%12);else{for(var h=0;l>h;h++)o=this.moveMonth(o,i);n=o.getUTCMonth(),o.setUTCDate(s),r=function(){return n!==o.getUTCMonth()}}for(;r();)o.setUTCDate(--s),o.setUTCMonth(n);return o},moveYear:function(t,e){return this.moveMonth(t,12*e)},dateWithinRange:function(t){return t>=this.o.startDate&&t<=this.o.endDate},keydown:function(t){if(this.picker.is(":not(:visible)"))return void(27===t.keyCode&&this.show());var e,i,r,o=!1,s=this.focusDate||this.viewDate;switch(t.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),t.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;e=37===t.keyCode?-1:1,t.ctrlKey?(i=this.moveYear(this.dates.get(-1)||n(),e),r=this.moveYear(s,e),this._trigger("changeYear",this.viewDate)):t.shiftKey?(i=this.moveMonth(this.dates.get(-1)||n(),e),r=this.moveMonth(s,e),this._trigger("changeMonth",this.viewDate)):(i=new Date(this.dates.get(-1)||n()),i.setUTCDate(i.getUTCDate()+e),r=new Date(s),r.setUTCDate(s.getUTCDate()+e)),this.dateWithinRange(i)&&(this.focusDate=this.viewDate=r,this.setValue(),this.fill(),t.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;e=38===t.keyCode?-1:1,t.ctrlKey?(i=this.moveYear(this.dates.get(-1)||n(),e),r=this.moveYear(s,e),this._trigger("changeYear",this.viewDate)):t.shiftKey?(i=this.moveMonth(this.dates.get(-1)||n(),e),r=this.moveMonth(s,e),this._trigger("changeMonth",this.viewDate)):(i=new Date(this.dates.get(-1)||n()),i.setUTCDate(i.getUTCDate()+7*e),r=new Date(s),r.setUTCDate(s.getUTCDate()+7*e)),this.dateWithinRange(i)&&(this.focusDate=this.viewDate=r,this.setValue(),this.fill(),t.preventDefault());break;case 32:break;case 13:s=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(s),o=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(t.preventDefault(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(o){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var a;this.isInput?a=this.element:this.component&&(a=this.element.find("input")),a&&a.change()}},showMode:function(t){t&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+t))),this.picker.find(">div").hide().filter(".datepicker-"+g.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var c=function(e,i){this.element=t(e),this.inputs=t.map(i.inputs,function(t){return t.jquery?t[0]:t}),delete i.inputs,t(this.inputs).datepicker(i).bind("changeDate",t.proxy(this.dateUpdated,this)),this.pickers=t.map(this.inputs,function(e){return t(e).data("datepicker")}),this.updateDates()};c.prototype={updateDates:function(){this.dates=t.map(this.pickers,function(t){return t.getUTCDate()}),this.updateRanges()},updateRanges:function(){var e=t.map(this.dates,function(t){return t.valueOf()});t.each(this.pickers,function(t,i){i.setRange(e)})},dateUpdated:function(e){if(!this.updating){this.updating=!0;var i=t(e.target).data("datepicker"),n=i.getUTCDate(),r=t.inArray(e.target,this.inputs),o=this.inputs.length;if(-1!==r){if(t.each(this.pickers,function(t,e){e.getUTCDate()||e.setUTCDate(n)}),n<this.dates[r])for(;r>=0&&n<this.dates[r];)this.pickers[r--].setUTCDate(n);else if(n>this.dates[r])for(;o>r&&n>this.dates[r];)this.pickers[r++].setUTCDate(n);this.updateDates(),delete this.updating}}},remove:function(){t.map(this.pickers,function(t){t.remove()}),delete this.element.daLine truncated
|
||||
e=t.length;e--;)t[e]=i(t[e])*this["stroke-width"];t=t.join(",").replace("NaN","none"),this.element.setAttribute("stroke-dasharray",t)}},alignSetter:function(t){this.element.setAttribute("text-anchor",{left:"start",center:"middle",right:"end"}[t])},opacitySetter:function(t,e,i){this[e]=t,i.setAttribute(e,t)},titleSetter:function(t){var e=this.element.getElementsByTagName("title")[0];e||(e=at.createElementNS(At,"title"),this.element.appendChild(e)),e.textContent=p(t,"").replace(/<[^>]*>/g,"")},textSetter:function(t){t!==this.textStr&&(delete this.bBox,this.textStr=t,this.added&&this.renderer.buildText(this))},fillSetter:function(t,e,i){"string"==typeof t?i.setAttribute(e,t):t&&this.colorGradient(t,e,i)},zIndexSetter:function(t,e,i){i.setAttribute(e,t),this[e]=t},_defaultSetter:function(t,e,i){i.setAttribute(e,t)}},E.prototype.yGetter=E.prototype.xGetter,E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter=E.prototype.verticalAlignSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=function(t,e){this[e]=t,this.doTransform=!0},E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(t,e,i){this[e]=t,this.stroke&&this["stroke-width"]?(this.strokeWidth=this["stroke-width"],E.prototype.fillSetter.call(this,this.stroke,"stroke",i),i.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===e&&0===t&&this.hasStroke&&(i.removeAttribute("stroke"),this.hasStroke=!1)};var ae=function(){this.init.apply(this,arguments)};ae.prototype={Element:E,init:function(t,e,i,n,r){var o,s=location,n=this.createElement("svg").attr({version:"1.1"}).css(this.getStyle(n));o=n.element,t.appendChild(o),-1===t.innerHTML.indexOf("xmlns")&&u(o,"xmlns",At),this.isSVG=!0,this.box=o,this.boxWrapper=n,this.alignedObjects=[],this.url=(St||Ct)&&at.getElementsByTagName("base").length?s.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"",this.createElement("desc").add().element.appendChild(at.createTextNode("Created with Highcharts 4.0.4")),this.defs=this.createElement("defs").add(),this.forExport=r,this.gradients={},this.cache={},this.setSize(e,i,!1);var a;St&&t.getBoundingClientRect&&(this.subPixelFix=e=function(){f(t,{left:0,top:0}),a=t.getBoundingClientRect(),f(t,{left:dt(a.left)-a.left+"px",top:dt(a.top)-a.top+"px"})},e(),Jt(lt,"resize",e))},getStyle:function(e){return this.style=t({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},e)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),D(this.gradients||{}),this.gradients=null,t&&(this.defs=t.destroy()),this.subPixelFix&&Kt(lt,"resize",this.subPixelFix),this.alignedObjects=null},createElement:function(t){var e=new this.Element;return e.init(this,t),e},draw:function(){},buildText:function(t){for(var e,n,r=t.element,o=this,s=o.forExport,a=p(t.textStr,"").toString(),l=-1!==a.indexOf("<"),h=r.childNodes,c=u(r,"x"),d=t.styles,g=t.textWidth,m=d&&d.lineHeight,v=d&&d.HcTextStroke,y=h.length,x=function(t){return m?i(m):o.fontMetrics(/(px|em)$/.test(t&&t.style.fontSize)?t.style.fontSize:d&&d.fontSize||o.style.fontSize||12,t).h};y--;)r.removeChild(h[y]);l||v||-1!==a.indexOf(" ")?(e=/<.*style="([^"]+)".*>/,n=/<.*href="(http[^"]+)".*>/,g&&!t.added&&this.box.appendChild(r),a=l?a.replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g):[a],""===a[a.length-1]&&a.pop(),Ut(a,function(i,a){var l,h=0,i=i.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");l=i.split("|||"),Ut(l,function(i){if(""!==i||1===l.length){var p,m={},v=at.createElementNS(At,"tspan");if(e.test(i)&&(p=i.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),u(v,"style",p)),n.test(i)&&!s&&(u(v,"onclick",'location.href="'+i.match(n)[1]+'"'),f(v,{cursor:"pointer"})),i=(i.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">")," "!==i){if(v.appendChild(at.createTextNode(i)),h?m.dx=0:a&&null!==c&&(m.x=c),u(v,m),r.appendChild(v),!h&&a&&(!Mt&&s&&f(v,{display:"block"}),u(v,"dy",x(v))),g)for(var y,b,i=i.replace(/([^\^])-/g,"$1- ").split(" "),m=l.length>1||i.length>1&&"nowrap"!==d.whiteSpace,w=d.HcHeight,k=[],T=x(v),C=1;m&&(i.length||k.length);)delete t.bBox,y=t.getBBox(),b=y.width,!Mt&&o.forExport&&(b=o.measureSpanWidth(v.firstChild.data,t.styles)),y=b>g,y&&1!==i.length?(v.removeChild(v.firstChild),k.unshift(i.pop())):(i=k,k=[],i.length&&(C++,w&&C*T>w?(i=["..."],t.attr("title",t.textStr)):(v=at.createElementNS(At,"tspan"),u(v,{dy:T,x:c}),p&&u(v,"style",p),r.appendChild(v))),b>g&&(g=b)),i.length&&v.appendChild(at.createTextNode(i.join(" ").replace(/- /g,"-")));h++}}})})):r.appendChild(at.createTextNode(a))},button:function(i,n,r,o,s,a,l,h,c){var u,d,p,f,g,m,v=this.label(i,n,r,c,null,null,null,null,"button"),y=0,i={x1:0,y1:0,x2:0,y2:1}Line truncated
|
||||
t.buildStacks&&t.buildStacks(),Ut(t.series,function(i){if(i.visible||!e.options.chart.ignoreHiddenSeries){var n;n=i.options.threshold;var r;t.hasVisibleSeries=!0,t.isLog&&0>=n&&(n=null),t.isXAxis?(n=i.xData,n.length&&(t.dataMin=ft(p(t.dataMin,n[0]),C(n)),t.dataMax=pt(p(t.dataMax,n[0]),S(n)))):(i.getExtremes(),r=i.dataMax,i=i.dataMin,c(i)&&c(r)&&(t.dataMin=ft(p(t.dataMin,i),i),t.dataMax=pt(p(t.dataMax,r),r)),c(n)&&(t.dataMin>=n?(t.dataMin=n,t.ignoreMinPadding=!0):t.dataMax<n&&(t.dataMax=n,t.ignoreMaxPadding=!0)))}})},translate:function(t,e,i,n,r,o){var a=1,l=0,h=n?this.oldTransA:this.transA,n=n?this.oldMin:this.min,c=this.minPixelPadding,r=(this.options.ordinal||this.isLog&&r)&&this.lin2val;return h||(h=this.transA),i&&(a*=-1,l=this.len),this.reversed&&(a*=-1,l-=a*(this.sector||this.len)),e?(t=t*a+l,t-=c,t=t/h+n,r&&(t=this.lin2val(t))):(r&&(t=this.val2lin(t)),"between"===o&&(o=.5),t=a*(t-n)*h+l+a*c+(s(o)?h*o*this.pointRange:0)),t},toPixels:function(t,e){return this.translate(t,!1,!this.horiz,null,!0)+(e?0:this.pos)},toValue:function(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(t,e,i,n,r){var o,s,a,l=this.chart,h=this.left,c=this.top,u=i&&l.oldChartHeight||l.chartHeight,d=i&&l.oldChartWidth||l.chartWidth;return o=this.transB,r=p(r,this.translate(t,null,null,i)),t=i=ct(r+o),o=s=ct(u-r-o),isNaN(r)?a=!0:this.horiz?(o=c,s=u-this.bottom,(h>t||t>h+this.width)&&(a=!0)):(t=h,i=d-this.right,(c>o||o>c+this.height)&&(a=!0)),a&&!n?null:l.renderer.crispLine(["M",t,o,"L",i,s],e||1)},getLinearTickPositions:function(t,e,i){var n,r=M(ut(e/t)*t),o=M(dt(i/t)*t),a=[];if(e===i&&s(e))return[e];for(e=r;o>=e&&(a.push(e),e=M(e+t),e!==n);)n=e;return a},getMinorTickPositions:function(){var t,e=this.options,i=this.tickPositions,n=this.minorTickInterval,r=[];if(this.isLog)for(t=i.length,e=1;t>e;e++)r=r.concat(this.getLogTickPositions(n,i[e-1],i[e],!0));else if(this.isDatetimeAxis&&"auto"===e.minorTickInterval)r=r.concat(this.getTimeTicks(this.normalizeTimeTickInterval(n),this.min,this.max,e.startOfWeek)),r[0]<this.min&&r.shift();else for(i=this.min+(i[0]-this.min)%n;i<=this.max;i+=n)r.push(i);return r},adjustForMinRange:function(){var t,e,i,n,r,o,s=this.options,a=this.min,l=this.max,h=this.dataMax-this.dataMin>=this.minRange;if(this.isXAxis&&this.minRange===H&&!this.isLog&&(c(s.min)||c(s.max)?this.minRange=null:(Ut(this.series,function(t){for(r=t.xData,i=o=t.xIncrement?1:r.length-1;i>0;i--)n=r[i]-r[i-1],(e===H||e>n)&&(e=n)}),this.minRange=ft(5*e,this.dataMax-this.dataMin))),l-a<this.minRange){var u=this.minRange;t=(u-l+a)/2,t=[a-t,p(s.min,a-t)],h&&(t[2]=this.dataMin),a=S(t),l=[a+u,p(s.max,a+u)],h&&(l[2]=this.dataMax),l=C(l),u>l-a&&(t[0]=l-u,t[1]=p(s.min,l-u),a=S(t))}this.min=a,this.max=l},setAxisTranslation:function(t){var e,i=this,r=i.max-i.min,o=i.axisPointRange||0,s=0,a=0,l=i.linkedParent,h=!!i.categories,u=i.transA;(i.isXAxis||h||o)&&(l?(s=l.minPointOffset,a=l.pointRangePadding):Ut(i.series,function(t){var l=h?1:i.isXAxis?t.pointRange:i.axisPointRange||0,u=t.options.pointPlacement,d=t.closestPointRange;l>r&&(l=0),o=pt(o,l),s=pt(s,n(u)?0:l/2),a=pt(a,"on"===u?0:l),!t.noSharedTooltip&&c(d)&&(e=c(e)?ft(e,d):d)}),l=i.ordinalSlope&&e?i.ordinalSlope/e:1,i.minPointOffset=s*=l,i.pointRangePadding=a*=l,i.pointRange=ft(o,r),i.closestPointRange=e),t&&(i.oldTransA=u),i.translationSlope=i.transA=u=i.len/(r+a||1),i.transB=i.horiz?i.left:i.bottom,i.minPixelPadding=u*s},setTickPositions:function(t){var e,i=this,n=i.chart,r=i.options,o=r.startOnTick,l=r.endOnTick,h=i.isLog,u=i.isDatetimeAxis,d=i.isXAxis,f=i.isLinked,g=i.options.tickPositioner,m=r.maxPadding,v=r.minPadding,y=r.tickInterval,x=r.minTickInterval,b=r.tickPixelInterval,T=i.categories;f?(i.linkedParent=n[i.coll][r.linkedTo],n=i.linkedParent.getExtremes(),i.min=p(n.min,n.dataMin),i.max=p(n.max,n.dataMax),r.type!==i.linkedParent.options.type&&X(11,1)):(i.min=p(i.userMin,r.min,i.dataMin),i.max=p(i.userMax,r.max,i.dataMax)),h&&(!t&&ft(i.min,p(i.dataMin,i.min))<=0&&X(10,1),i.min=M(a(i.min)),i.max=M(a(i.max))),i.range&&c(i.max)&&(i.userMin=i.min=pt(i.min,i.max-i.range),i.userMax=i.max,i.range=null),i.beforePadding&&i.beforePadding(),i.adjustForMinRange(),T||i.axisPointRange||i.usePercentage||f||!c(i.min)||!c(i.max)||!(n=i.max-i.min)||(c(r.min)||c(i.userMin)||!v||!(i.dataMin<0)&&i.ignoreMinPadding||(i.min-=n*v),c(r.max)||c(i.userMax)||!m||!(i.dataMax>0)&&i.ignoreMaxPadding||(i.max+=n*m)),s(r.floor)&&(i.min=pt(i.min,r.floor)),s(r.ceiling)&&(i.max=ft(i.max,r.ceiling)),i.min===i.max||void 0===i.min||void 0===i.max?i.tickInterval=1:f&&!y&&b===i.linkedParent.options.tickPixelInterval?i.tickInterval=i.linkedParent.tickInterval:(i.tickInterval=p(y,T?1:(i.max-i.min)*b/pt(i.len,b)),!c(y)&&i.len<b&&!this.isRadial&&!this.isLog&&!T&&o&&l&&(e=!0,i.tickInterval/=4)),d&&!t&&Ut(i.series,function(t){t.processData(i.min!==i.oldMin||i.max!==i.oldMax)}),i.setAxisTranslation(!0),i.beforeSetTickPositions&&i.beforeSetTickPositions(),i.postProcessTickInterval&&(i.tickInterLine truncated
|
||||
t.call(this)})}var ye=st.Legend=function(t,e){this.init(t,e)};ye.prototype={init:function(t,i){var n=this,r=i.itemStyle,o=p(i.padding,8),s=i.itemMarginTop||0;this.options=i,i.enabled&&(n.itemStyle=r,n.itemHiddenStyle=e(r,i.itemHiddenStyle),n.itemMarginTop=s,n.padding=o,n.initialItemX=o,n.initialItemY=o-5,n.maxItemWidth=0,n.chart=t,n.itemHeight=0,n.lastLineHeight=0,n.symbolWidth=p(i.symbolWidth,16),n.pages=[],n.render(),Jt(n.chart,"endResize",function(){n.positionCheckboxes()}))},colorizeItem:function(t,e){var i,n=this.options,r=t.legendItem,o=t.legendLine,s=t.legendSymbol,a=this.itemHiddenStyle.color,n=e?n.itemStyle.color:a,l=e?t.legendColor||t.color||"#CCC":a,a=t.options&&t.options.marker,h={fill:l};if(r&&r.css({fill:n,color:n}),o&&o.attr({stroke:l}),s){if(a&&s.isMarker)for(i in h.stroke=l,a=t.convertAttribs(a))r=a[i],r!==H&&(h[i]=r);s.attr(h)}},positionItem:function(t){var e=this.options,i=e.symbolPadding,e=!e.rtl,n=t._legendItemPos,r=n[0],n=n[1],o=t.checkbox;t.legendGroup&&t.legendGroup.translate(e?r:this.legendWidth-r-2*i-4,n),o&&(o.x=r,o.y=n)},destroyItem:function(t){var e=t.checkbox;Ut(["legendItem","legendLine","legendSymbol","legendGroup"],function(e){t[e]&&(t[e]=t[e].destroy())}),e&&A(t.checkbox)},destroy:function(){var t=this.group,e=this.box;e&&(this.box=e.destroy()),t&&(this.group=t.destroy())},positionCheckboxes:function(t){var e,i=this.group.alignAttr,n=this.clipHeight||this.legendHeight;i&&(e=i.translateY,Ut(this.allItems,function(r){var o,s=r.checkbox;s&&(o=e+s.y+(t||0)+3,f(s,{left:i.translateX+r.checkboxOffset+s.x-20+"px",top:o+"px",display:o>e-6&&e+n-6>o?"":Bt}))}))},renderTitle:function(){var t=this.padding,e=this.options.title,i=0;e.text&&(this.title||(this.title=this.chart.renderer.label(e.text,t-3,t-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(e.style).add(this.group)),t=this.title.getBBox(),i=t.height,this.offsetWidth=t.width,this.contentGroup.attr({translateY:i})),this.titleHeight=i},renderItem:function(t){var i=this.chart,n=i.renderer,r=this.options,o="horizontal"===r.layout,s=this.symbolWidth,a=r.symbolPadding,l=this.itemStyle,h=this.itemHiddenStyle,c=this.padding,u=o?p(r.itemDistance,20):0,d=!r.rtl,f=r.width,g=r.itemMarginBottom||0,m=this.itemMarginTop,v=this.initialItemX,y=t.legendItem,x=t.series&&t.series.drawLegendSymbol?t.series:t,w=x.options,w=this.createCheckboxForItem&&w&&w.showCheckbox,k=r.useHTML;y||(t.legendGroup=n.g("legend-item").attr({zIndex:1}).add(this.scrollGroup),t.legendItem=y=n.text(r.labelFormat?b(r.labelFormat,t):r.labelFormatter.call(t),d?s+a:-a,this.baseline||0,k).css(e(t.visible?l:h)).attr({align:d?"left":"right",zIndex:2}).add(t.legendGroup),this.baseline||(this.baseline=n.fontMetrics(l.fontSize,y).f+3+m,y.attr("y",this.baseline)),x.drawLegendSymbol(this,t),this.setItemEvents&&this.setItemEvents(t,y,k,l,h),this.colorizeItem(t,t.visible),w&&this.createCheckboxForItem(t)),n=y.getBBox(),s=t.checkboxOffset=r.itemWidth||t.legendItemWidth||s+a+n.width+u+(w?20:0),this.itemHeight=a=ct(t.legendItemHeight||n.height),o&&this.itemX-v+s>(f||i.chartWidth-2*c-v-r.x)&&(this.itemX=v,this.itemY+=m+this.lastLineHeight+g,this.lastLineHeight=0),this.maxItemWidth=pt(this.maxItemWidth,s),this.lastItemY=m+this.itemY+g,this.lastLineHeight=pt(a,this.lastLineHeight),t._legendItemPos=[this.itemX,this.itemY],o?this.itemX+=s:(this.itemY+=m+a+g,this.lastLineHeight=a),this.offsetWidth=f||pt((o?this.itemX-v-u:s)+c,this.offsetWidth)},getAllItems:function(){var t=[];return Ut(this.chart.series,function(e){var i=e.options;p(i.showInLegend,c(i.linkedTo)?!1:H,!0)&&(t=t.concat(e.legendItems||("point"===i.legendType?e.data:e)))}),t},render:function(){var e,i,n,r,o=this,s=o.chart,a=s.renderer,l=o.group,h=o.box,c=o.options,u=o.padding,d=c.borderWidth,p=c.backgroundColor;o.itemX=o.initialItemX,o.itemY=o.initialItemY,o.offsetWidth=0,o.lastItemY=0,l||(o.group=l=a.g("legend").attr({zIndex:7}).add(),o.contentGroup=a.g().attr({zIndex:1}).add(l),o.scrollGroup=a.g().add(o.contentGroup)),o.renderTitle(),e=o.getAllItems(),T(e,function(t,e){return(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)}),c.reversed&&e.reverse(),o.allItems=e,o.display=i=!!e.length,Ut(e,function(t){o.renderItem(t)}),n=c.width||o.offsetWidth,r=o.lastItemY+o.lastLineHeight+o.titleHeight,r=o.handleOverflow(r),(d||p)&&(n+=u,r+=u,h?n>0&&r>0&&(h[h.isNew?"attr":"animate"](h.crisp({width:n,height:r})),h.isNew=!1):(o.box=h=a.rect(0,0,n,r,c.borderRadius,d||0).attr({stroke:c.borderColor,"stroke-width":d||0,fill:p||Bt}).add(l).shadow(c.shadow),h.isNew=!0),h[i?"show":"hide"]()),o.legendWidth=n,o.legendHeight=r,Ut(e,function(t){o.positionItem(t)}),i&&l.align(t({width:n,height:r},c),!0,"spacingBox"),s.isResizing||this.positionCheckboxes()},handleOverflow:function(t){var e,i,n=this,r=this.chart,o=r.renderer,s=this.options,a=s.y,a=r.spacingBox.height+("top"===s.verticalAlign?-a:a)-this.padding,l=s.maxHeight,h=this.clipRect,c=s.navigation,u=p(c.animation,!0),d=c.arrowSize||12,f=this.nav,g=this.pages,m=thisLine truncated
|
||||
a=u.length,!l||l>a||h)for(;a--;){if(l=u[a],(r=l.options&&l.options.marker||l.options)&&r.enabled===!1&&(r.radius=0),l.negative&&f&&(l.color=l.fillColor=f),h=n.colorByPoint||l.color,l.options)for(v in p)c(r[p[v]])&&(h=!0);h?(r=r||{},h=[],o=r.states||{},e=o.hover=o.hover||{},n.marker||(e.color=e.color||!l.options.color&&s.color||se(l.color).brighten(e.brightness||s.brightness).get()),e={color:l.color},m||(e.fillColor=l.color),g||(e.lineColor=l.color),h[""]=i.convertAttribs(t(e,r),d[""]),h.hover=i.convertAttribs(o.hover,d.hover,h[""]),h.select=i.convertAttribs(o.select,d.select,h[""])):h=d,l.pointAttr=h}},destroy:function(){var t,e,i,n,r,o=this,s=o.chart,a=/AppleWebKit\/533/.test(bt),l=o.data||[];for(Zt(o,"destroy"),Kt(o),Ut(o.axisTypes||[],function(t){(r=o[t])&&(h(r.series,o),r.isDirty=r.forceRedraw=!0)}),o.legendItem&&o.chart.legend.destroyItem(o),e=l.length;e--;)(i=l[e])&&i.destroy&&i.destroy();o.points=null,clearTimeout(o.animationTimeout),Ut("area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip".split(","),function(e){o[e]&&(t=a&&"group"===e?"hide":"destroy",o[e][t]())}),s.hoverSeries===o&&(s.hoverSeries=null),h(s.series,o);for(n in o)delete o[n]},getSegmentPath:function(t){var e=this,i=[],n=e.options.step;return Ut(t,function(r,o){var s,a=r.plotX,l=r.plotY;e.getPointSpline?i.push.apply(i,e.getPointSpline(t,r,o)):(i.push(o?"L":"M"),n&&o&&(s=t[o-1],"right"===n?i.push(s.plotX,l):"center"===n?i.push((s.plotX+a)/2,s.plotY,(s.plotX+a)/2,l):i.push(a,s.plotY)),i.push(r.plotX,r.plotY))}),i},getGraphPath:function(){var t,e=this,i=[],n=[];return Ut(e.segments,function(r){t=e.getSegmentPath(r),r.length>1?i=i.concat(t):n.push(r[0])}),e.singlePoints=n,e.graphPath=i},drawGraph:function(){var t=this,e=this.options,i=[["graph",e.lineColor||this.color]],n=e.lineWidth,r=e.dashStyle,o="square"!==e.linecap,s=this.getGraphPath(),a=e.negativeColor;a&&i.push(["graphNeg",a]),Ut(i,function(i,a){var l=i[0],h=t[l];h?(ee(h),h.animate({d:s})):n&&s.length&&(h={stroke:i[1],"stroke-width":n,fill:Bt,zIndex:1},r?h.dashstyle=r:o&&(h["stroke-linecap"]=h["stroke-linejoin"]="round"),t[l]=t.chart.renderer.path(s).attr(h).add(t.group).shadow(!a&&e.shadow))})},clipNeg:function(){var t,e=this.options,i=this.chart,n=i.renderer,r=e.negativeColor||e.negativeFillColor,o=this.graph,s=this.area,a=this.posClip,l=this.negClip;t=i.chartWidth;var h=i.chartHeight,c=pt(t,h),u=this.yAxis;r&&(o||s)&&(r=ct(u.toPixels(e.threshold||0,!0)),0>r&&(c-=r),e={x:0,y:0,width:c,height:r},c={x:0,y:r,width:c,height:c},i.inverted&&(e.height=c.y=i.plotWidth-r,n.isVML&&(e={x:i.plotWidth-r-i.plotLeft,y:0,width:t,height:h},c={x:r+i.plotLeft-t,y:0,width:i.plotLeft+r,height:t})),u.reversed?(i=c,t=e):(i=e,t=c),a?(a.animate(i),l.animate(t)):(this.posClip=a=n.clipRect(i),this.negClip=l=n.clipRect(t),o&&this.graphNeg&&(o.clip(a),this.graphNeg.clip(l)),s&&(s.clip(a),this.areaNeg.clip(l))))},invertGroups:function(){function t(){var t={width:e.yAxis.len,height:e.xAxis.len};Ut(["group","markerGroup"],function(i){e[i]&&e[i].attr(t).invert()})}var e=this,i=e.chart;e.xAxis&&(Jt(i,"resize",t),Jt(e,"destroy",function(){Kt(i,"resize",t)}),t(),e.invertGroups=t)},plotGroup:function(t,e,i,n,r){var o=this[t],s=!o;return s&&(this[t]=o=this.chart.renderer.g(e).attr({visibility:i,zIndex:n||.1}).add(r)),o[s?"attr":"animate"](this.getPlotBox()),o},getPlotBox:function(){var t=this.chart,e=this.xAxis,i=this.yAxis;return t.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:t.plotLeft,translateY:i?i.top:t.plotTop,scaleX:1,scaleY:1}},render:function(){var t,e=this,i=e.chart,n=e.options,r=(t=n.animation)&&!!e.animate&&i.renderer.isSVG&&p(t.duration,500)||0,o=e.visible?"visible":"hidden",s=n.zIndex,a=e.hasRendered,l=i.seriesGroup;t=e.plotGroup("group","series",o,s,l),e.markerGroup=e.plotGroup("markerGroup","markers",o,s,l),r&&e.animate(!0),e.getAttribs(),t.inverted=e.isCartesian?i.inverted:!1,e.drawGraph&&(e.drawGraph(),e.clipNeg()),Ut(e.points,function(t){t.redraw&&t.redraw()}),e.drawDataLabels&&e.drawDataLabels(),e.visible&&e.drawPoints(),e.drawTracker&&e.options.enableMouseTracking!==!1&&e.drawTracker(),i.inverted&&e.invertGroups(),n.clip!==!1&&!e.sharedClipKey&&!a&&t.clip(i.clipRect),r&&e.animate(),a||(r?e.animationTimeout=setTimeout(function(){e.afterAnimate()},r):e.afterAnimate()),e.isDirty=e.isDirtyData=!1,e.hasRendered=!0},redraw:function(){var t=this.chart,e=this.isDirtyData,i=this.group,n=this.xAxis,r=this.yAxis;i&&(t.inverted&&i.attr({width:t.plotWidth,height:t.plotHeight}),i.animate({translateX:p(n&&n.left,t.plotLeft),translateY:p(r&&r.top,t.plotTop)})),this.translate(),this.setTooltipPoints&&this.setTooltipPoints(!0),this.render(),e&&Zt(this,"updatedData")}},I.prototype={destroy:function(){D(this,this.axis)},render:function(t){var e=this.options,i=e.format,i=i?b(i,this):e.formatter.call(this);this.label?this.label.attr({text:i,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(i,null,null,e.useHTML).css(e.style).attr({align:this.textAlign,rotation:e.rotLine truncated
|
||||
r=this.pointAttr[i]||a.pointAttr[i],i===this.state&&!n||this.selected&&"select"!==i||l[i]&&l[i].enabled===!1||i&&(d||c&&u.enabled===!1)||i&&f.states&&f.states[i]&&f.states[i].enabled===!1||(this.graphic?(h=h&&this.graphic.symbolName&&r.r,this.graphic.attr(e(r,h?{x:o-h,y:s-h,width:2*h,height:2*h}:{})),p&&p.hide()):(i&&u&&(h=u.radius,f=f.symbol||a.symbol,p&&p.currentSymbol!==f&&(p=p.destroy()),p?p[n?"animate":"attr"]({x:o-h,y:s-h}):f&&(a.stateMarkerGraphic=p=g.renderer.symbol(f,o-h,s-h,2*h,2*h).attr(r).add(a.markerGroup),p.currentSymbol=f)),p&&p[i&&g.isInsidePlot(o,s,g.inverted)?"show":"hide"]()),(o=l[i]&&l[i].halo)&&o.size?(m||(a.halo=m=g.renderer.path().add(a.seriesGroup)),m.attr(t({fill:se(this.color||a.color).setOpacity(o.opacity).get()},o.attributes))[n?"animate":"attr"]({d:this.haloPath(o.size)})):m&&m.attr({d:[]}),this.state=i)},haloPath:function(t){var e=this.series,i=e.chart,n=e.getPlotBox(),r=i.inverted;return i.renderer.symbols.circle(n.translateX+(r?e.yAxis.len-this.plotY:this.plotX)-t,n.translateY+(r?e.xAxis.len-this.plotX:this.plotY)-t,2*t,2*t)}}),t(be.prototype,{onMouseOver:function(){var t=this.chart,e=t.hoverSeries;e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&Zt(this,"mouseOver"),this.setState("hover"),t.hoverSeries=this},onMouseOut:function(){var t=this.options,e=this.chart,i=e.tooltip,n=e.hoverPoint;n&&n.onMouseOut(),this&&t.events.mouseOut&&Zt(this,"mouseOut"),i&&!t.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),this.setState(),e.hoverSeries=null},setState:function(t){var e=this.options,i=this.graph,n=this.graphNeg,r=e.states,e=e.lineWidth,t=t||"";this.state!==t&&(this.state=t,r[t]&&r[t].enabled===!1||(t&&(e=r[t].lineWidth||e+(r[t].lineWidthPlus||0)),i&&!i.dashstyle&&(t={"stroke-width":e},i.attr(t),n&&n.attr(t))))},setVisible:function(t,e){var i,n=this,r=n.chart,o=n.legendItem,s=r.options.chart.ignoreHiddenSeries,a=n.visible;i=(n.visible=t=n.userOptions.visible=t===H?!a:t)?"show":"hide",Ut(["group","dataLabelsGroup","markerGroup","tracker"],function(t){n[t]&&n[t][i]()}),r.hoverSeries===n&&n.onMouseOut(),o&&r.legend.colorizeItem(n,t),n.isDirty=!0,n.options.stacking&&Ut(r.series,function(t){t.options.stacking&&t.visible&&(t.isDirty=!0)}),Ut(n.linkedSeries,function(e){e.setVisible(t,!1)}),s&&(r.isDirtyBox=!0),e!==!1&&r.redraw(),Zt(n,i)},setTooltipPoints:function(t){var e,i,n,r,o=[],s=this.xAxis,a=s&&s.getExtremes(),l=s?s.tooltipLen||s.len:this.chart.plotSizeX,h=[];if(this.options.enableMouseTracking!==!1&&!this.singularTooltips){for(t&&(this.tooltipPoints=null),Ut(this.segments||this.points,function(t){o=o.concat(t)}),s&&s.reversed&&(o=o.reverse()),this.orderTooltipPoints&&this.orderTooltipPoints(o),t=o.length,r=0;t>r;r++)if(s=o[r],e=s.x,e>=a.min&&e<=a.max)for(n=o[r+1],e=i===H?0:i+1,i=o[r+1]?ft(pt(0,ut((s.clientX+(n?n.wrappedClientX||n.clientX:l))/2)),l):l;e>=0&&i>=e;)h[e++]=s;this.tooltipPoints=h}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(t){this.selected=t=t===H?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),Zt(this,t?"select":"unselect")},drawTracker:jt.drawTrackerGraph}),t(st,{Axis:N,Chart:O,Color:se,Point:xe,Tick:_,Renderer:B,Series:be,SVGElement:E,SVGRenderer:ae,arrayMin:C,arrayMax:S,charts:Ot,dateFormat:j,format:b,pathAnim:$,getOptions:function(){return z},hasBidiBug:Lt,isTouchDevice:Dt,numberFormat:v,seriesTypes:zt,setOptions:function(t){return z=e(!0,z,t),P(),z},addEvent:Jt,removeEvent:Kt,createElement:g,discardElement:A,css:f,each:Ut,extend:t,map:Vt,merge:e,pick:p,splat:d,extendClass:m,pInt:i,wrap:x,svg:Mt,canvas:Pt,vml:!Mt&&!Pt,product:"Highcharts",version:"4.0.4"})}(),function(){var t=this,e=t._,i=Array.prototype,n=Object.prototype,r=Function.prototype,o=i.push,s=i.slice,a=i.concat,l=n.toString,h=n.hasOwnProperty,c=Array.isArray,u=Object.keys,d=r.bind,p=function(t){return t instanceof p?t:this instanceof p?void(this._wrapped=t):new p(t)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=p),exports._=p):t._=p,p.VERSION="1.7.0";var f=function(t,e,i){if(void 0===e)return t;switch(null==i?3:i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,r){return t.call(e,i,n,r)};case 4:return function(i,n,r,o){return t.call(e,i,n,r,o)}}return function(){return t.apply(e,arguments)}};p.iteratee=function(t,e,i){return null==t?p.identity:p.isFunction(t)?f(t,e,i):p.isObject(t)?p.matches(t):p.property(t)},p.each=p.forEach=function(t,e,i){if(null==t)return t;e=f(e,i);var n,r=t.length;if(r===+r)for(n=0;r>n;n++)e(t[n],n,t);else{var o=p.keys(t);for(n=0,r=o.length;r>n;n++)e(t[o[n]],o[n],t)}return t},p.map=p.collect=function(t,e,i){if(null==t)return[];e=p.iteratee(e,i);for(var n,r=t.length!==+t.length&&p.keys(t),o=(r||t).length,s=Array(o),a=0;o>a;a++)n=r?r[a]:a,s[a]=e(t[n],n,t);return s};var g="Reduce of empty array with no initial value";p.reduce=p.foldl=p.inject=function(t,e,i,n){null==t&&(t=[]),e=fLine truncated
|
||||
@@ -0,0 +1,222 @@
|
||||
/**
|
||||
* Copyright 2015 Google Inc. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// This generated service worker JavaScript will precache your site's resources.
|
||||
// The code needs to be saved in a .js file at the top-level of your site, and registered
|
||||
// from your pages in order to be used. See
|
||||
// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js
|
||||
// for an example of how you can register this script and handle various service worker events.
|
||||
|
||||
/* eslint-env worker, serviceworker */
|
||||
/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren */
|
||||
'use strict';
|
||||
|
||||
|
||||
importScripts("/static/dist/sw/sw-toolbox.js","/static/dist/sw/sw-toolbox-config.js");
|
||||
|
||||
|
||||
/* eslint-disable quotes, comma-spacing */
|
||||
var PrecacheConfig = [["/static/dist/images/edb_brick.png","a749f9537bf3e20403474fcadbf5a0ab"],["/static/dist/images/glyphicons-halflings-white.png","9bbc6e9602998a385c2ea13df56470fd"],["/static/dist/images/glyphicons-halflings.png","180b8ed9ed811c62d74be57249bcb023"],["/static/dist/images/grid.png","f0fc02ae7a6a36a27a25070ea6e1be99"],["/static/dist/images/product.png","5f928b37e652601f70b8218c1203c24d"],["/static/dist/images/unknown_person.png","d8fdf8972e28cbdc12bbdb0faa9c6180"],["/static/dist/js/app.min.js","c2413f712d1c916ff9df7f3eba30ceb6"],["/static/dist/styles/screen.css","7109e9dfa53c059aef435cdc223a7b57"]];
|
||||
/* eslint-enable quotes, comma-spacing */
|
||||
var CacheNamePrefix = 'sw-precache-v1--' + (self.registration ? self.registration.scope : '') + '-';
|
||||
|
||||
|
||||
var IgnoreUrlParametersMatching = [/^utm_/];
|
||||
|
||||
|
||||
|
||||
var addDirectoryIndex = function (originalUrl, index) {
|
||||
var url = new URL(originalUrl);
|
||||
if (url.pathname.slice(-1) === '/') {
|
||||
url.pathname += index;
|
||||
}
|
||||
return url.toString();
|
||||
};
|
||||
|
||||
var populateCurrentCacheNames = function (precacheConfig, cacheNamePrefix, baseUrl) {
|
||||
var absoluteUrlToCacheName = {};
|
||||
var currentCacheNamesToAbsoluteUrl = {};
|
||||
|
||||
precacheConfig.forEach(function(cacheOption) {
|
||||
var absoluteUrl = new URL(cacheOption[0], baseUrl).toString();
|
||||
var cacheName = cacheNamePrefix + absoluteUrl + '-' + cacheOption[1];
|
||||
currentCacheNamesToAbsoluteUrl[cacheName] = absoluteUrl;
|
||||
absoluteUrlToCacheName[absoluteUrl] = cacheName;
|
||||
});
|
||||
|
||||
return {
|
||||
absoluteUrlToCacheName: absoluteUrlToCacheName,
|
||||
currentCacheNamesToAbsoluteUrl: currentCacheNamesToAbsoluteUrl
|
||||
};
|
||||
};
|
||||
|
||||
var stripIgnoredUrlParameters = function (originalUrl, ignoreUrlParametersMatching) {
|
||||
var url = new URL(originalUrl);
|
||||
|
||||
url.search = url.search.slice(1) // Exclude initial '?'
|
||||
.split('&') // Split into an array of 'key=value' strings
|
||||
.map(function(kv) {
|
||||
return kv.split('='); // Split each 'key=value' string into a [key, value] array
|
||||
})
|
||||
.filter(function(kv) {
|
||||
return ignoreUrlParametersMatching.every(function(ignoredRegex) {
|
||||
return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes.
|
||||
});
|
||||
})
|
||||
.map(function(kv) {
|
||||
return kv.join('='); // Join each [key, value] array into a 'key=value' string
|
||||
})
|
||||
.join('&'); // Join the array of 'key=value' strings into a string with '&' in between each
|
||||
|
||||
return url.toString();
|
||||
};
|
||||
|
||||
|
||||
var mappings = populateCurrentCacheNames(PrecacheConfig, CacheNamePrefix, self.location);
|
||||
var AbsoluteUrlToCacheName = mappings.absoluteUrlToCacheName;
|
||||
var CurrentCacheNamesToAbsoluteUrl = mappings.currentCacheNamesToAbsoluteUrl;
|
||||
|
||||
function deleteAllCaches() {
|
||||
return caches.keys().then(function(cacheNames) {
|
||||
return Promise.all(
|
||||
cacheNames.map(function(cacheName) {
|
||||
return caches.delete(cacheName);
|
||||
})
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
self.addEventListener('install', function(event) {
|
||||
var now = Date.now();
|
||||
|
||||
event.waitUntil(
|
||||
caches.keys().then(function(allCacheNames) {
|
||||
return Promise.all(
|
||||
Object.keys(CurrentCacheNamesToAbsoluteUrl).filter(function(cacheName) {
|
||||
return allCacheNames.indexOf(cacheName) === -1;
|
||||
}).map(function(cacheName) {
|
||||
var url = new URL(CurrentCacheNamesToAbsoluteUrl[cacheName]);
|
||||
// Put in a cache-busting parameter to ensure we're caching a fresh response.
|
||||
if (url.search) {
|
||||
url.search += '&';
|
||||
}
|
||||
url.search += 'sw-precache=' + now;
|
||||
var urlWithCacheBusting = url.toString();
|
||||
|
||||
console.log('Adding URL "%s" to cache named "%s"', urlWithCacheBusting, cacheName);
|
||||
return caches.open(cacheName).then(function(cache) {
|
||||
var request = new Request(urlWithCacheBusting, {credentials: 'same-origin'});
|
||||
return fetch(request.clone()).then(function(response) {
|
||||
if (response.ok) {
|
||||
return cache.put(request, response);
|
||||
}
|
||||
|
||||
console.error('Request for %s returned a response with status %d, so not attempting to cache it.',
|
||||
urlWithCacheBusting, response.status);
|
||||
// Get rid of the empty cache if we can't add a successful response to it.
|
||||
return caches.delete(cacheName);
|
||||
});
|
||||
});
|
||||
})
|
||||
).then(function() {
|
||||
return Promise.all(
|
||||
allCacheNames.filter(function(cacheName) {
|
||||
return cacheName.indexOf(CacheNamePrefix) === 0 &&
|
||||
!(cacheName in CurrentCacheNamesToAbsoluteUrl);
|
||||
}).map(function(cacheName) {
|
||||
console.log('Deleting out-of-date cache "%s"', cacheName);
|
||||
return caches.delete(cacheName);
|
||||
})
|
||||
);
|
||||
});
|
||||
}).then(function() {
|
||||
if (typeof self.skipWaiting === 'function') {
|
||||
// Force the SW to transition from installing -> active state
|
||||
self.skipWaiting();
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
if (self.clients && (typeof self.clients.claim === 'function')) {
|
||||
self.addEventListener('activate', function(event) {
|
||||
event.waitUntil(self.clients.claim());
|
||||
});
|
||||
}
|
||||
|
||||
self.addEventListener('message', function(event) {
|
||||
if (event.data.command === 'delete_all') {
|
||||
console.log('About to delete all caches...');
|
||||
deleteAllCaches().then(function() {
|
||||
console.log('Caches deleted.');
|
||||
event.ports[0].postMessage({
|
||||
error: null
|
||||
});
|
||||
}).catch(function(error) {
|
||||
console.log('Caches not deleted:', error);
|
||||
event.ports[0].postMessage({
|
||||
error: error
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
self.addEventListener('fetch', function(event) {
|
||||
if (event.request.method === 'GET') {
|
||||
var urlWithoutIgnoredParameters = stripIgnoredUrlParameters(event.request.url,
|
||||
IgnoreUrlParametersMatching);
|
||||
|
||||
var cacheName = AbsoluteUrlToCacheName[urlWithoutIgnoredParameters];
|
||||
var directoryIndex = 'index.html';
|
||||
if (!cacheName && directoryIndex) {
|
||||
urlWithoutIgnoredParameters = addDirectoryIndex(urlWithoutIgnoredParameters, directoryIndex);
|
||||
cacheName = AbsoluteUrlToCacheName[urlWithoutIgnoredParameters];
|
||||
}
|
||||
|
||||
var navigateFallback = '';
|
||||
// Ideally, this would check for event.request.mode === 'navigate', but that is not widely
|
||||
// supported yet:
|
||||
// https://code.google.com/p/chromium/issues/detail?id=540967
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1209081
|
||||
if (!cacheName && navigateFallback && event.request.headers.has('accept') &&
|
||||
event.request.headers.get('accept').includes('text/html')) {
|
||||
var navigateFallbackUrl = new URL(navigateFallback, self.location);
|
||||
cacheName = AbsoluteUrlToCacheName[navigateFallbackUrl.toString()];
|
||||
}
|
||||
|
||||
if (cacheName) {
|
||||
event.respondWith(
|
||||
// We can't call cache.match(event.request) since the entry in the cache will contain the
|
||||
// cache-busting parameter. Instead, rely on the fact that each cache should only have one
|
||||
// entry, and return that.
|
||||
caches.open(cacheName).then(function(cache) {
|
||||
return cache.keys().then(function(keys) {
|
||||
return cache.match(keys[0]).then(function(response) {
|
||||
return response || fetch(event.request).catch(function(e) {
|
||||
console.error('Fetch for "%s" failed: %O', urlWithoutIgnoredParameters, e);
|
||||
});
|
||||
});
|
||||
});
|
||||
}).catch(function(e) {
|
||||
console.error('Couldn\'t serve response for "%s" from cache: %O', urlWithoutIgnoredParameters, e);
|
||||
return fetch(event.request);
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
@charset "UTF-8";html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url("/static/dist/fonts/glyphicons-halflings-regular.eot");src:url("/static/dist/fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("/static/dist/fonts/glyphicons-halflings-regular.woff") format("woff"),url("/static/dist/fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("/static/dist/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{contLine truncated
|
||||
@@ -0,0 +1,12 @@
|
||||
toolbox.router.get('/(.*)/picture/', toolbox.fastest, {
|
||||
origin: /^https:\/\/graph\.facebook\.com$/
|
||||
});
|
||||
|
||||
//var MISSING_IMAGE = '/static/dist/images/unknown_person.png';
|
||||
//toolbox.cache(MISSING_IMAGE);
|
||||
//
|
||||
//function imageHandler(request, values, options) {
|
||||
// return toolbox.cacheFirst(request, values, options).catch(function () {
|
||||
// return caches.match(MISSING_IMAGE);
|
||||
// });
|
||||
//}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 2014 Google Inc. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.toolbox=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
"use strict";function cache(e,t){return helpers.openCache(t).then(function(t){return t.add(e)})}function uncache(e,t){return helpers.openCache(t).then(function(t){return t["delete"](e)})}function precache(e){Array.isArray(e)||(e=[e]),options.preCacheItems=options.preCacheItems.concat(e)}require("serviceworker-cache-polyfill");var options=require("./options"),router=require("./router"),helpers=require("./helpers"),strategies=require("./strategies");helpers.debug("Service Worker Toolbox is loading");var flatten=function(e){return e.reduce(function(e,t){return e.concat(t)},[])};self.addEventListener("install",function(e){var t=options.cache.name+"$$$inactive$$$";helpers.debug("install event fired"),helpers.debug("creating cache ["+t+"]"),e.waitUntil(helpers.openCache({cache:{name:t}}).then(function(e){return Promise.all(options.preCacheItems).then(flatten).then(function(t){return helpers.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}),self.addEventListener("activate",function(e){helpers.debug("activate event fired");var t=options.cache.name+"$$$inactive$$$";e.waitUntil(helpers.renameCache(t,options.cache.name))}),self.addEventListener("fetch",function(e){var t=router.match(e.request);t?e.respondWith(t(e.request)):router["default"]&&"GET"===e.request.method&&e.respondWith(router["default"](e.request))}),module.exports={networkOnly:strategies.networkOnly,networkFirst:strategies.networkFirst,cacheOnly:strategies.cacheOnly,cacheFirst:strategies.cacheFirst,fastest:strategies.fastest,router:router,options:options,cache:cache,uncache:uncache,precache:precache};
|
||||
},{"./helpers":2,"./options":4,"./router":6,"./strategies":10,"serviceworker-cache-polyfill":15}],2:[function(require,module,exports){
|
||||
"use strict";function debug(e,n){n=n||{};var c=n.debug||globalOptions.debug;c&&console.log("[sw-toolbox] "+e)}function openCache(e){var n;return e&&e.cache&&(n=e.cache.name),n=n||globalOptions.cache.name,debug('Opening cache "'+n+'"',e),caches.open(n)}function fetchAndCache(e,n){n=n||{};var c=n.successResponses||globalOptions.successResponses;return fetch(e.clone()).then(function(a){return"GET"===e.method&&c.test(a.status)&&openCache(n).then(function(c){c.put(e,a).then(function(){var a,t,i;n.cache?(a=n.cache.maxEntries,t=n.cache.maxAgeSeconds,i=n.cache.name):(a=globalOptions.cache.maxEntries,t=globalOptions.cache.maxAgeSeconds,i=globalOptions.cache.name),(a||t)&&i&&queueCacheExpiration(e,c,i,a,t)})}),a.clone()})}function queueCacheExpiration(e,n,c,a,t){var i=cacheExpirationPromiseFactory.bind(null,e,n,c,a,t);cacheExpirationPromiseChain=cacheExpirationPromiseChain?cacheExpirationPromiseChain.then(i):i()}function cacheExpirationPromiseFactory(e,n,c,a,t){var i=e.url,o=Date.now();return debug("Updating LRU order for "+i+". Max entries is "+a+", max age is "+t),idbCacheExpiration.getDb(c).then(function(e){return idbCacheExpiration.setTimestampForUrl(e,i,o)}).then(function(e){return idbCacheExpiration.expireEntries(e,a,t,o)}).then(function(e){debug("Successfully updated IDB.");var c=e.map(function(e){return n["delete"](e)});return Promise.all(c).then(function(){debug("Done with cache cleanup.")})})["catch"](function(e){debug(e)})}function renameCache(e,n,c){return debug("Renaming cache: ["+e+"] to ["+n+"]",c),caches["delete"](n).then(function(){return Promise.all([caches.open(e),caches.open(n)]).then(function(n){var c=n[0],a=n[1];return c.keys().then(function(e){return Promise.all(e.map(function(e){return c.match(e).then(function(n){return a.put(e,n)})}))}).then(function(){return caches["delete"](e)})})})}var globalOptions=require("./options"),idbCacheExpiration=require("./idb-cache-expiration"),cacheExpirationPromiseChain;module.exports={debug:debug,fetchAndCache:fetchAndCache,openCache:openCache,renameCache:renameCache};
|
||||
},{"./idb-cache-expiration":3,"./options":4}],3:[function(require,module,exports){
|
||||
"use strict";function openDb(e){return new Promise(function(r,n){var t=indexedDB.open(DB_PREFIX+e,DB_VERSION);t.onupgradeneeded=function(){var e=t.result.createObjectStore(STORE_NAME,{keyPath:URL_PROPERTY});e.createIndex(TIMESTAMP_PROPERTY,TIMESTAMP_PROPERTY,{unique:!1})},t.onsuccess=function(){r(t.result)},t.onerror=function(){n(t.error)}})}function getDb(e){return e in cacheNameToDbPromise||(cacheNameToDbPromise[e]=openDb(e)),cacheNameToDbPromise[e]}function setTimestampForUrl(e,r,n){return new Promise(function(t,o){var i=e.transaction(STORE_NAME,"readwrite"),u=i.objectStore(STORE_NAME);u.put({url:r,timestamp:n}),i.oncomplete=function(){t(e)},i.onabort=function(){o(i.error)}})}function expireOldEntries(e,r,n){return r?new Promise(function(t,o){var i=1e3*r,u=[],c=e.transaction(STORE_NAME,"readwrite"),s=c.objectStore(STORE_NAME),a=s.index(TIMESTAMP_PROPERTY);a.openCursor().onsuccess=function(e){var r=e.target.result;if(r&&n-i>r.value[TIMESTAMP_PROPERTY]){var t=r.value[URL_PROPERTY];u.push(t),s["delete"](t),r["continue"]()}},c.oncomplete=function(){t(u)},c.onabort=o}):Promise.resolve([])}function expireExtraEntries(e,r){return r?new Promise(function(n,t){var o=[],i=e.transaction(STORE_NAME,"readwrite"),u=i.objectStore(STORE_NAME),c=u.index(TIMESTAMP_PROPERTY),s=c.count();c.count().onsuccess=function(){var e=s.result;e>r&&(c.openCursor().onsuccess=function(n){var t=n.target.result;if(t){var i=t.value[URL_PROPERTY];o.push(i),u["delete"](i),e-o.length>r&&t["continue"]()}})},i.oncomplete=function(){n(o)},i.onabort=t}):Promise.resolve([])}function expireEntries(e,r,n,t){return expireOldEntries(e,n,t).then(function(n){return expireExtraEntries(e,r).then(function(e){return n.concat(e)})})}var DB_PREFIX="sw-toolbox-",DB_VERSION=1,STORE_NAME="store",URL_PROPERTY="url",TIMESTAMP_PROPERTY="timestamp",cacheNameToDbPromise={};module.exports={getDb:getDb,setTimestampForUrl:setTimestampForUrl,expireEntries:expireEntries};
|
||||
},{}],4:[function(require,module,exports){
|
||||
"use strict";var scope;scope=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,module.exports={cache:{name:"$$$toolbox-cache$$$"+scope+"$$$",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/};
|
||||
},{}],5:[function(require,module,exports){
|
||||
"use strict";var url=new URL("./",self.location),basePath=url.pathname,pathRegexp=require("path-to-regexp"),Route=function(e,t,i,s){0!==t.indexOf("/")&&(t=basePath+t),this.method=e,this.keys=[],this.regexp=pathRegexp(t,this.keys),this.options=s,this.handler=i};Route.prototype.makeHandler=function(e){var t=this.regexp.exec(e),i={};return this.keys.forEach(function(e,s){i[e.name]=t[s+1]}),function(e){return this.handler(e,i,this.options)}.bind(this)},module.exports=Route;
|
||||
},{"path-to-regexp":13}],6:[function(require,module,exports){
|
||||
"use strict";function regexEscape(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Route=require("./route"),keyMatch=function(e,t){for(var r=e.entries(),o=r.next();!o.done;){var n=new RegExp(o.value[0]);if(n.test(t))return o.value[1];o=r.next()}return null},Router=function(){this.routes=new Map,this["default"]=null};["get","post","put","delete","head","any"].forEach(function(e){Router.prototype[e]=function(t,r,o){return this.add(e,t,r,o)}}),Router.prototype.add=function(e,t,r,o){o=o||{};var n=o.origin||self.location.origin;n=n instanceof RegExp?n.source:regexEscape(n),e=e.toLowerCase();var u=new Route(e,t,r,o);this.routes.has(n)||this.routes.set(n,new Map);var a=this.routes.get(n);a.has(e)||a.set(e,new Map);var s=a.get(e);s.set(u.regexp.source,u)},Router.prototype.matchMethod=function(e,t){t=new URL(t);var r=t.origin,o=t.pathname;e=e.toLowerCase();var n=keyMatch(this.routes,r);if(!n)return null;var u=n.get(e);if(!u)return null;var a=keyMatch(u,o);return a?a.makeHandler(o):null},Router.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},module.exports=new Router;
|
||||
},{"./route":5}],7:[function(require,module,exports){
|
||||
"use strict";function cacheFirst(e,r,t){return helpers.debug("Strategy: cache first ["+e.url+"]",t),helpers.openCache(t).then(function(r){return r.match(e).then(function(r){return r?r:helpers.fetchAndCache(e,t)})})}var helpers=require("../helpers");module.exports=cacheFirst;
|
||||
},{"../helpers":2}],8:[function(require,module,exports){
|
||||
"use strict";function cacheOnly(e,r,c){return helpers.debug("Strategy: cache only ["+e.url+"]",c),helpers.openCache(c).then(function(r){return r.match(e)})}var helpers=require("../helpers");module.exports=cacheOnly;
|
||||
},{"../helpers":2}],9:[function(require,module,exports){
|
||||
"use strict";function fastest(e,n,t){return helpers.debug("Strategy: fastest ["+e.url+"]",t),new Promise(function(r,s){var c=!1,o=[],a=function(e){o.push(e.toString()),c?s(new Error('Both cache and network failed: "'+o.join('", "')+'"')):c=!0},h=function(e){e instanceof Response?r(e):a("No result returned")};helpers.fetchAndCache(e.clone(),t).then(h,a),cacheOnly(e,n,t).then(h,a)})}var helpers=require("../helpers"),cacheOnly=require("./cacheOnly");module.exports=fastest;
|
||||
},{"../helpers":2,"./cacheOnly":8}],10:[function(require,module,exports){
|
||||
module.exports={networkOnly:require("./networkOnly"),networkFirst:require("./networkFirst"),cacheOnly:require("./cacheOnly"),cacheFirst:require("./cacheFirst"),fastest:require("./fastest")};
|
||||
},{"./cacheFirst":7,"./cacheOnly":8,"./fastest":9,"./networkFirst":11,"./networkOnly":12}],11:[function(require,module,exports){
|
||||
"use strict";function networkFirst(e,r,t){t=t||{};var s=t.successResponses||globalOptions.successResponses,o=t.networkTimeoutSeconds||globalOptions.networkTimeoutSeconds;return helpers.debug("Strategy: network first ["+e.url+"]",t),helpers.openCache(t).then(function(r){var n,u=[];if(o){var c=new Promise(function(t){n=setTimeout(function(){r.match(e).then(function(e){e&&t(e)})},1e3*o)});u.push(c)}var i=helpers.fetchAndCache(e,t).then(function(e){if(n&&clearTimeout(n),s.test(e.status))return e;throw helpers.debug("Response was an HTTP error: "+e.statusText,t),new Error("Bad response")})["catch"](function(){return helpers.debug("Network or response error, fallback to cache ["+e.url+"]",t),r.match(e)});return u.push(i),Promise.race(u)})}var globalOptions=require("../options"),helpers=require("../helpers");module.exports=networkFirst;
|
||||
},{"../helpers":2,"../options":4}],12:[function(require,module,exports){
|
||||
"use strict";function networkOnly(e,r,t){return helpers.debug("Strategy: network only ["+e.url+"]",t),fetch(e)}var helpers=require("../helpers");module.exports=networkOnly;
|
||||
},{"../helpers":2}],13:[function(require,module,exports){
|
||||
function parse(e){for(var t,r=[],n=0,o=0,p="";null!=(t=PATH_REGEXP.exec(e));){var a=t[0],i=t[1],s=t.index;if(p+=e.slice(o,s),o=s+a.length,i)p+=i[1];else{p&&(r.push(p),p="");var u=t[2],c=t[3],l=t[4],f=t[5],g=t[6],x=t[7],h="+"===g||"*"===g,m="?"===g||"*"===g,y=u||"/",T=l||f||(x?".*":"[^"+y+"]+?");r.push({name:c||n++,prefix:u||"",delimiter:y,optional:m,repeat:h,pattern:escapeGroup(T)})}}return o<e.length&&(p+=e.substr(o)),p&&r.push(p),r}function compile(e){return tokensToFunction(parse(e))}function tokensToFunction(e){for(var t=new Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(t[r]=new RegExp("^"+e[r].pattern+"$"));return function(r){for(var n="",o=r||{},p=0;p<e.length;p++){var a=e[p];if("string"!=typeof a){var i,s=o[a.name];if(null==s){if(a.optional)continue;throw new TypeError('Expected "'+a.name+'" to be defined')}if(isarray(s)){if(!a.repeat)throw new TypeError('Expected "'+a.name+'" to not repeat, but received "'+s+'"');if(0===s.length){if(a.optional)continue;throw new TypeError('Expected "'+a.name+'" to not be empty')}for(var u=0;u<s.length;u++){if(i=encodeURIComponent(s[u]),!t[p].test(i))throw new TypeError('Expected all "'+a.name+'" to match "'+a.pattern+'", but received "'+i+'"');n+=(0===u?a.prefix:a.delimiter)+i}}else{if(i=encodeURIComponent(s),!t[p].test(i))throw new TypeError('Expected "'+a.name+'" to match "'+a.pattern+'", but received "'+i+'"');n+=a.prefix+i}}else n+=a}return n}}function escapeString(e){return e.replace(/([.+*?=^!:${}()[\]|\/])/g,"\\$1")}function escapeGroup(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function attachKeys(e,t){return e.keys=t,e}function flags(e){return e.sensitive?"":"i"}function regexpToRegexp(e,t){var r=e.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)t.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,pattern:null});return attachKeys(e,t)}function arrayToRegexp(e,t,r){for(var n=[],o=0;o<e.length;o++)n.push(pathToRegexp(e[o],t,r).source);var p=new RegExp("(?:"+n.join("|")+")",flags(r));return attachKeys(p,t)}function stringToRegexp(e,t,r){for(var n=parse(e),o=tokensToRegExp(n,r),p=0;p<n.length;p++)"string"!=typeof n[p]&&t.push(n[p]);return attachKeys(o,t)}function tokensToRegExp(e,t){t=t||{};for(var r=t.strict,n=t.end!==!1,o="",p=e[e.length-1],a="string"==typeof p&&/\/$/.test(p),i=0;i<e.length;i++){var s=e[i];if("string"==typeof s)o+=escapeString(s);else{var u=escapeString(s.prefix),c=s.pattern;s.repeat&&(c+="(?:"+u+c+")*"),c=s.optional?u?"(?:"+u+"("+c+"))?":"("+c+")?":u+"("+c+")",o+=c}}return r||(o=(a?o.slice(0,-2):o)+"(?:\\/(?=$))?"),o+=n?"$":r&&a?"":"(?=\\/|$)",new RegExp("^"+o,flags(t))}function pathToRegexp(e,t,r){return t=t||[],isarray(t)?r||(r={}):(r=t,t=[]),e instanceof RegExp?regexpToRegexp(e,t,r):isarray(e)?arrayToRegexp(e,t,r):stringToRegexp(e,t,r)}var isarray=require("isarray");module.exports=pathToRegexp,module.exports.parse=parse,module.exports.compile=compile,module.exports.tokensToFunction=tokensToFunction,module.exports.tokensToRegExp=tokensToRegExp;var PATH_REGEXP=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");
|
||||
},{"isarray":14}],14:[function(require,module,exports){
|
||||
module.exports=Array.isArray||function(r){return"[object Array]"==Object.prototype.toString.call(r)};
|
||||
},{}],15:[function(require,module,exports){
|
||||
Cache.prototype.addAll||(Cache.prototype.addAll=function(t){function e(t){this.name="NetworkError",this.code=19,this.message=t}var r=this;return e.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return t=t.map(function(t){return t instanceof Request?t:String(t)}),Promise.all(t.map(function(t){"string"==typeof t&&(t=new Request(t));var r=new URL(t.url).protocol;if("http:"!==r&&"https:"!==r)throw new e("Invalid scheme");return fetch(t.clone())}))}).then(function(e){return Promise.all(e.map(function(e,n){return r.put(t[n],e)}))}).then(function(){return void 0})});
|
||||
},{}]},{},[1])(1)
|
||||
});
|
||||
|
||||
|
||||
//# sourceMappingURL=sw-toolbox.map.json
|
||||
@@ -1,24 +0,0 @@
|
||||
# Require any additional compass plugins here.
|
||||
|
||||
# Set this to the root of your project when deployed:
|
||||
http_path = "/"
|
||||
css_dir = "stylesheets"
|
||||
sass_dir = "sass"
|
||||
images_dir = "images"
|
||||
javascripts_dir = "javascripts"
|
||||
|
||||
# You can select your preferred output style here (can be overridden via the command line):
|
||||
# output_style = :expanded or :nested or :compact or :compressed
|
||||
|
||||
# To enable relative paths to assets via compass helper functions. Uncomment:
|
||||
# relative_assets = true
|
||||
|
||||
# To disable debugging comments that display the original location of your selectors. Uncomment:
|
||||
# line_comments = false
|
||||
|
||||
|
||||
# If you prefer the indented syntax, you might want to regenerate this
|
||||
# project again passing --syntax sass, or you can uncomment this:
|
||||
# preferred_syntax = :sass
|
||||
# and then run:
|
||||
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
|
||||
|
Before Width: | Height: | Size: 4.7 KiB |
@@ -1,16 +0,0 @@
|
||||
@import "blueprint";
|
||||
|
||||
// To generate css equivalent to the blueprint css but with your configuration applied, uncomment:
|
||||
// +blueprint-ie
|
||||
|
||||
//Recommended Blueprint configuration with scoping and semantic layout:
|
||||
body.bp {
|
||||
@include blueprint-ie(true);
|
||||
// Note: Blueprint centers text to fix IE6 container centering.
|
||||
// This means all your texts will be centered under all version of IE by default.
|
||||
// If your container does not have the .container class, don't forget to restore
|
||||
// the correct behavior to your main container (but not the body tag!)
|
||||
// Example:
|
||||
// .my-container
|
||||
// text-align: left
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
// Here is where you can define your constants for your application and to configure the blueprint framework.
|
||||
// Feel free to delete these if you want keep the defaults:
|
||||
|
||||
$blueprint-grid-columns: 24;
|
||||
$blueprint-container-size: 950px;
|
||||
$blueprint-grid-margin: 10px;
|
||||
|
||||
// Use this to calculate the width based on the total width.
|
||||
// Or you can set $blueprint-grid-width to a fixed value and unset $blueprint-container-size -- it will be calculated for you.
|
||||
$blueprint-grid-width: ($blueprint-container-size + $blueprint-grid-margin) / $blueprint-grid-columns - $blueprint-grid-margin;
|
||||
@@ -1,6 +0,0 @@
|
||||
// Only apply the blueprint form styles to forms with
|
||||
// a class of "bp". This makes it easier to style
|
||||
// forms from scratch if you need to.
|
||||
|
||||
form.bp {
|
||||
@include blueprint-form; }
|
||||
@@ -1,16 +0,0 @@
|
||||
// Import the non-default scaffolding module to help us get started.
|
||||
@import "blueprint/scaffolding";
|
||||
|
||||
// This configuration will only apply the
|
||||
// blueprint styles to pages with a body class of "bp"
|
||||
// This makes it easier to have pages without blueprint styles
|
||||
// when you're using a single/combined stylesheet.
|
||||
|
||||
body.bp {
|
||||
@include blueprint-typography(true);
|
||||
@include blueprint-utilities;
|
||||
@include blueprint-debug;
|
||||
@include blueprint-interaction;
|
||||
// Remove the scaffolding when you're ready to start doing visual design.
|
||||
// Or leave it in if you're happy with how blueprint looks out-of-the-box
|
||||
@include blueprint-scaffolding; }
|
||||
@@ -1,38 +0,0 @@
|
||||
// Page layout can be done using mixins applied to your semantic classes and IDs
|
||||
// For instance this layout defines a two column layout on pages with
|
||||
// a body class of "two-col".
|
||||
//
|
||||
// The markup would look like:
|
||||
// <div id="container">
|
||||
// <div id="header"></div>
|
||||
// <div id="sidebar"></div>
|
||||
// <div id="content"></div>
|
||||
// <div id="footer"></div>
|
||||
// </div>
|
||||
//
|
||||
// and the layout would look like:
|
||||
// +------------------------+
|
||||
// | #header |
|
||||
// +--------+---------------+
|
||||
// | | |
|
||||
// |#sidebar| #content |
|
||||
// | | |
|
||||
// +------------------------+
|
||||
// | #footer |
|
||||
// +--------+---------------+
|
||||
|
||||
body.two-col {
|
||||
#container {
|
||||
@include container; }
|
||||
#header, #footer {
|
||||
@include column($blueprint-grid-columns); }
|
||||
#sidebar {
|
||||
// One third of the grid columns, rounding down. With 24 cols, this is 8.
|
||||
$sidebar-columns: floor($blueprint-grid-columns / 3);
|
||||
@include column($sidebar-columns); }
|
||||
#content {
|
||||
// Two thirds of the grid columns, rounding up.
|
||||
// With 24 cols, this is 16.
|
||||
$content-columns: ceil(2 * $blueprint-grid-columns / 3);
|
||||
// true means it's the last column in the row
|
||||
@include column($content-columns, true); } }
|
||||
@@ -1,5 +0,0 @@
|
||||
@import "blueprint";
|
||||
|
||||
//Recommended Blueprint configuration with scoping and semantic layout:
|
||||
body.bp {
|
||||
@include blueprint-print(true); }
|
||||
@@ -1,76 +0,0 @@
|
||||
// This import applies a global reset to any page that imports this stylesheet.
|
||||
@import "blueprint/reset";
|
||||
|
||||
// To configure blueprint, edit the partials/base.sass file.
|
||||
@import "partials/base";
|
||||
|
||||
// Import all the default blueprint modules so that we can access their mixins.
|
||||
@import "blueprint";
|
||||
|
||||
// Combine the partials into a single screen stylesheet.
|
||||
@import "partials/page";
|
||||
@import "partials/form";
|
||||
@import "partials/two_col";
|
||||
|
||||
@import "compass";
|
||||
|
||||
body {
|
||||
background-color: $blueprint-background-color;
|
||||
|
||||
#header {
|
||||
nav {
|
||||
margin:2em;
|
||||
|
||||
ul {
|
||||
@include inline-block-list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#register {
|
||||
#customer {
|
||||
ul {
|
||||
@include inline-block-list;
|
||||
|
||||
li {
|
||||
img { }
|
||||
padding: 1em;
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
|
||||
&:hover {
|
||||
background-color: darken($blueprint-background-color, 20%);
|
||||
}
|
||||
&.selected {
|
||||
background-color: darken($blueprint-background-color, 20%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#products {
|
||||
ul {
|
||||
@include inline-block-list;
|
||||
|
||||
li {
|
||||
padding: 1.5em;
|
||||
text-align: center;
|
||||
|
||||
&:hover {
|
||||
background-color: darken($blueprint-background-color, 20%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
input[type=submit] {
|
||||
padding: 1em;
|
||||
padding-left: 1.5em;
|
||||
padding-right: 1.5em;
|
||||
position:relative;
|
||||
left: 100px;
|
||||
|
||||
}
|
||||
section {
|
||||
margin-bottom:2em;
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
body.bp {
|
||||
text-align: center;
|
||||
}
|
||||
* html body.bp legend {
|
||||
margin: 0px -8px 16px 0;
|
||||
padding: 0;
|
||||
}
|
||||
html > body.bp p code {
|
||||
*white-space: normal;
|
||||
}
|
||||
body.bp .container {
|
||||
text-align: left;
|
||||
}
|
||||
body.bp sup {
|
||||
vertical-align: text-top;
|
||||
}
|
||||
body.bp sub {
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
body.bp hr {
|
||||
margin: -8px auto 11px;
|
||||
}
|
||||
body.bp img {
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
body.bp fieldset {
|
||||
padding-top: 0;
|
||||
}
|
||||
body.bp legend {
|
||||
margin-top: -0.2em;
|
||||
margin-bottom: 1em;
|
||||
margin-left: -0.5em;
|
||||
}
|
||||
body.bp fieldset, body.bp #IE8#HACK {
|
||||
padding-top: 1.4em;
|
||||
}
|
||||
body.bp legend, body.bp #IE8#HACK {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
body.bp textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
body.bp label {
|
||||
position: relative;
|
||||
top: -0.25em;
|
||||
}
|
||||
body.bp input.text {
|
||||
margin: 0.5em 0;
|
||||
background-color: white;
|
||||
border: 1px solid #bbbbbb;
|
||||
}
|
||||
body.bp input.text:focus {
|
||||
border: 1px solid #666666;
|
||||
}
|
||||
body.bp input.title {
|
||||
margin: 0.5em 0;
|
||||
background-color: white;
|
||||
border: 1px solid #bbbbbb;
|
||||
}
|
||||
body.bp input.title:focus {
|
||||
border: 1px solid #666666;
|
||||
}
|
||||
body.bp input.checkbox {
|
||||
position: relative;
|
||||
top: 0.25em;
|
||||
}
|
||||
body.bp input.radio {
|
||||
position: relative;
|
||||
top: 0.25em;
|
||||
}
|
||||
body.bp input.button {
|
||||
position: relative;
|
||||
top: 0.25em;
|
||||
}
|
||||
body.bp textarea {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
body.bp select {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
body.bp button {
|
||||
position: relative;
|
||||
top: 0.25em;
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
body.bp {
|
||||
line-height: 1.5;
|
||||
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
color: black;
|
||||
background: none;
|
||||
font-size: 10pt;
|
||||
}
|
||||
body.bp .container {
|
||||
background: none;
|
||||
}
|
||||
body.bp hr {
|
||||
background: #cccccc;
|
||||
color: #cccccc;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
margin: 2em 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
body.bp hr.space {
|
||||
background: white;
|
||||
color: white;
|
||||
}
|
||||
body.bp h1, body.bp h2, body.bp h3, body.bp h4, body.bp h5, body.bp h6 {
|
||||
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
body.bp code {
|
||||
font-size: 0.9em;
|
||||
font-family: "andale mono", "lucida console", monospace;
|
||||
}
|
||||
body.bp a img {
|
||||
border: none;
|
||||
}
|
||||
body.bp a:link, body.bp a:visited {
|
||||
background: transparent;
|
||||
font-weight: 700;
|
||||
text-decoration: underline;
|
||||
}
|
||||
body.bp p img.top {
|
||||
margin-top: 0;
|
||||
}
|
||||
body.bp blockquote {
|
||||
margin: 1.5em;
|
||||
padding: 1em;
|
||||
font-style: italic;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
body.bp .small {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
body.bp .large {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
body.bp .quiet {
|
||||
color: #999999;
|
||||
}
|
||||
body.bp .hide {
|
||||
display: none;
|
||||
}
|
||||
@@ -1,533 +0,0 @@
|
||||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.bp-reset-element, body, h1, h2, h3, h4, h5, h6, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, blockquote, q, th, td, caption, table,
|
||||
div, span, object, iframe, p,
|
||||
pre, a, abbr, acronym, address,
|
||||
code, del, dfn, em, img,
|
||||
dl, dt, dd, ol, ul, li, fieldset,
|
||||
form, label, legend,
|
||||
caption, tbody, tfoot, thead, tr {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
font-size: 100%;
|
||||
font-family: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
quotes: "" "";
|
||||
}
|
||||
blockquote:before, blockquote:after, q:before, q:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
th, td, caption {
|
||||
float: none !important;
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: separate;
|
||||
border-spacing: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
body.bp {
|
||||
line-height: 1.5;
|
||||
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
color: #333333;
|
||||
font-size: 75%;
|
||||
}
|
||||
body.bp h1, body.bp h2, body.bp h3, body.bp h4, body.bp h5, body.bp h6 {
|
||||
font-weight: normal;
|
||||
color: #222222;
|
||||
}
|
||||
body.bp h1 img, body.bp h2 img, body.bp h3 img, body.bp h4 img, body.bp h5 img, body.bp h6 img {
|
||||
margin: 0;
|
||||
}
|
||||
body.bp h1 {
|
||||
font-size: 3em;
|
||||
line-height: 1;
|
||||
margin-bottom: 0.50em;
|
||||
}
|
||||
body.bp h2 {
|
||||
font-size: 2em;
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
body.bp h3 {
|
||||
font-size: 1.5em;
|
||||
line-height: 1;
|
||||
margin-bottom: 1.00em;
|
||||
}
|
||||
body.bp h4 {
|
||||
font-size: 1.2em;
|
||||
line-height: 1.25;
|
||||
margin-bottom: 1.25em;
|
||||
}
|
||||
body.bp h5 {
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
margin-bottom: 1.50em;
|
||||
}
|
||||
body.bp h6 {
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
body.bp p {
|
||||
margin: 0 0 1.5em;
|
||||
}
|
||||
body.bp p .left {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin: 1.5em 1.5em 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
body.bp p .right {
|
||||
display: inline;
|
||||
float: right;
|
||||
margin: 1.5em 0 1.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
body.bp a {
|
||||
text-decoration: underline;
|
||||
color: #0066cc;
|
||||
}
|
||||
body.bp a:visited {
|
||||
color: #004c99;
|
||||
}
|
||||
body.bp a:focus {
|
||||
color: #0099ff;
|
||||
}
|
||||
body.bp a:hover {
|
||||
color: #0099ff;
|
||||
}
|
||||
body.bp a:active {
|
||||
color: #bf00ff;
|
||||
}
|
||||
body.bp blockquote {
|
||||
margin: 1.5em;
|
||||
color: #666666;
|
||||
font-style: italic;
|
||||
}
|
||||
body.bp strong, body.bp dfn {
|
||||
font-weight: bold;
|
||||
}
|
||||
body.bp em, body.bp dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
body.bp sup, body.bp sub {
|
||||
line-height: 0;
|
||||
}
|
||||
body.bp abbr, body.bp acronym {
|
||||
border-bottom: 1px dotted #666666;
|
||||
}
|
||||
body.bp address {
|
||||
margin: 0 0 1.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
body.bp del {
|
||||
color: #666666;
|
||||
}
|
||||
body.bp pre {
|
||||
margin: 1.5em 0;
|
||||
white-space: pre;
|
||||
}
|
||||
body.bp pre, body.bp code, body.bp tt {
|
||||
font: 1em "andale mono", "lucida console", monospace;
|
||||
line-height: 1.5;
|
||||
}
|
||||
body.bp li ul, body.bp li ol {
|
||||
margin: 0;
|
||||
}
|
||||
body.bp ul, body.bp ol {
|
||||
margin: 0 1.5em 1.5em 0;
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
body.bp ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
body.bp ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
body.bp dl {
|
||||
margin: 0 0 1.5em 0;
|
||||
}
|
||||
body.bp dl dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
body.bp dd {
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
body.bp table {
|
||||
margin-bottom: 1.4em;
|
||||
width: 100%;
|
||||
}
|
||||
body.bp th {
|
||||
font-weight: bold;
|
||||
}
|
||||
body.bp thead th {
|
||||
background: #c3d9ff;
|
||||
}
|
||||
body.bp th, body.bp td, body.bp caption {
|
||||
padding: 4px 10px 4px 5px;
|
||||
}
|
||||
body.bp table.striped tr:nth-child(even) td,
|
||||
body.bp table tr.even td {
|
||||
background: #e5ecf9;
|
||||
}
|
||||
body.bp tfoot {
|
||||
font-style: italic;
|
||||
}
|
||||
body.bp caption {
|
||||
background: #eeeeee;
|
||||
}
|
||||
body.bp .quiet {
|
||||
color: #666666;
|
||||
}
|
||||
body.bp .loud {
|
||||
color: #111111;
|
||||
}
|
||||
body.bp .clear {
|
||||
clear: both;
|
||||
}
|
||||
body.bp .nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
body.bp .clearfix {
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
body.bp .small {
|
||||
font-size: 0.8em;
|
||||
margin-bottom: 1.875em;
|
||||
line-height: 1.875em;
|
||||
}
|
||||
body.bp .large {
|
||||
font-size: 1.2em;
|
||||
line-height: 2.5em;
|
||||
margin-bottom: 1.25em;
|
||||
}
|
||||
body.bp .first {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
body.bp .last {
|
||||
margin-right: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
body.bp .top {
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
body.bp .bottom {
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
body.bp .showgrid {
|
||||
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 0% 50%, 960 50%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(0%, rgba(100, 100, 225, 0.25)), color-stop(3.125%, rgba(100, 100, 225, 0.25)), color-stop(3.125%, rgba(0, 0, 0, 0)), color-stop(4.167%, rgba(0, 0, 0, 0)), color-stop(4.167%, rgba(100, 100, 225, 0.25)), color-stop(7.292%, rgba(100, 100, 225, 0.25)), color-stop(7.292%, rgba(0, 0, 0, 0)), color-stop(8.333%, rgba(0, 0, 0, 0)), color-stop(8.333%, rgba(100, 100, 225, 0.25)), color-stop(11.458%, rgba(100, 100, 225, 0.25)), color-stop(11.458%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(100, 100, 225, 0.25)), color-stop(15.625%, rgba(100, 100, 225, 0.25)), color-stop(15.625%, rgba(0, 0, 0, 0)), color-stop(16.667%, rgba(0, 0, 0, 0)), color-stop(16.667%, rgba(100, 100, 225, 0.25)), color-stop(19.792%, rgba(100, 100, 225, 0.25)), color-stop(19.792%, rgba(0, 0, 0, 0)), color-stop(20.833%, rgba(0, 0, 0, 0)), color-stop(20.833%, rgba(100, 100, 225, 0.25)), color-stop(23.958%, rgba(100, 100, 225, 0.25)), color-stop(23.958%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(100, 100, 225, 0.25)), color-stop(28.125%, rgba(100, 100, 225, 0.25)), color-stop(28.125%, rgba(0, 0, 0, 0)), color-stop(29.167%, rgba(0, 0, 0, 0)), color-stop(29.167%, rgba(100, 100, 225, 0.25)), color-stop(32.292%, rgba(100, 100, 225, 0.25)), color-stop(32.292%, rgba(0, 0, 0, 0)), color-stop(33.333%, rgba(0, 0, 0, 0)), color-stop(33.333%, rgba(100, 100, 225, 0.25)), color-stop(36.458%, rgba(100, 100, 225, 0.25)), color-stop(36.458%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(100, 100, 225, 0.25)), color-stop(40.625%, rgba(100, 100, 225, 0.25)), color-stop(40.625%, rgba(0, 0, 0, 0)), color-stop(41.667%, rgba(0, 0, 0, 0)), color-stop(41.667%, rgba(100, 100, 225, 0.25)), color-stop(44.792%, rgba(100, 100, 225, 0.25)), color-stop(44.792%, rgba(0, 0, 0, 0)), color-stop(45.833%, rgba(0, 0, 0, 0)), color-stop(45.833%, rgba(100, 100, 225, 0.25)), color-stop(48.958%, rgba(100, 100, 225, 0.25)), color-stop(48.958%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(100, 100, 225, 0.25)), color-stop(53.125%, rgba(100, 100, 225, 0.25)), color-stop(53.125%, rgba(0, 0, 0, 0)), color-stop(54.167%, rgba(0, 0, 0, 0)), color-stop(54.167%, rgba(100, 100, 225, 0.25)), color-stop(57.292%, rgba(100, 100, 225, 0.25)), color-stop(57.292%, rgba(0, 0, 0, 0)), color-stop(58.333%, rgba(0, 0, 0, 0)), color-stop(58.333%, rgba(100, 100, 225, 0.25)), color-stop(61.458%, rgba(100, 100, 225, 0.25)), color-stop(61.458%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(100, 100, 225, 0.25)), color-stop(65.625%, rgba(100, 100, 225, 0.25)), color-stop(65.625%, rgba(0, 0, 0, 0)), color-stop(66.667%, rgba(0, 0, 0, 0)), color-stop(66.667%, rgba(100, 100, 225, 0.25)), color-stop(69.792%, rgba(100, 100, 225, 0.25)), color-stop(69.792%, rgba(0, 0, 0, 0)), color-stop(70.833%, rgba(0, 0, 0, 0)), color-stop(70.833%, rgba(100, 100, 225, 0.25)), color-stop(73.958%, rgba(100, 100, 225, 0.25)), color-stop(73.958%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(100, 100, 225, 0.25)), color-stop(78.125%, rgba(100, 100, 225, 0.25)), color-stop(78.125%, rgba(0, 0, 0, 0)), color-stop(79.167%, rgba(0, 0, 0, 0)), color-stop(79.167%, rgba(100, 100, 225, 0.25)), color-stop(82.292%, rgba(100, 100, 225, 0.25)), color-stop(82.292%, rgba(0, 0, 0, 0)), color-stop(83.333%, rgba(0, 0, 0, 0)), color-stop(83.333%, rgba(100, 100, 225, 0.25)), color-stop(86.458%, rgba(100, 100, 225, 0.25)), color-stop(86.458%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(100, 100, 225, 0.25)), color-stop(90.625%, rgba(100, 100, 225, 0.25)), color-stop(90.625%, rgba(0, 0, 0, 0)), color-stop(91.667%, rgba(0, 0, 0, 0)), color-stop(91.667%, rgba(100, 100, 225, 0.25)), color-stop(94.792%, rgba(100, 100, 225, 0.25)), color-stop(94.792%, rgba(0, 0, 0, 0)), color-stop(95.833%, rgba(0, 0, 0, 0)), color-stop(95.833%, rgba(100, 100, 225, 0.25)), color-stop(98.958%, rgba(100, 100, 225, 0.25)), color-stop(98.958%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));
|
||||
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -moz-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -o-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -ms-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(100, 100, 225, 0.25) 0px, rgba(100, 100, 225, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(100, 100, 225, 0.25) 40px, rgba(100, 100, 225, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(100, 100, 225, 0.25) 80px, rgba(100, 100, 225, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(100, 100, 225, 0.25) 120px, rgba(100, 100, 225, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(100, 100, 225, 0.25) 160px, rgba(100, 100, 225, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(100, 100, 225, 0.25) 200px, rgba(100, 100, 225, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(100, 100, 225, 0.25) 240px, rgba(100, 100, 225, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(100, 100, 225, 0.25) 280px, rgba(100, 100, 225, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(100, 100, 225, 0.25) 320px, rgba(100, 100, 225, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(100, 100, 225, 0.25) 360px, rgba(100, 100, 225, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(100, 100, 225, 0.25) 400px, rgba(100, 100, 225, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(100, 100, 225, 0.25) 440px, rgba(100, 100, 225, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(100, 100, 225, 0.25) 480px, rgba(100, 100, 225, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(100, 100, 225, 0.25) 520px, rgba(100, 100, 225, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(100, 100, 225, 0.25) 560px, rgba(100, 100, 225, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(100, 100, 225, 0.25) 600px, rgba(100, 100, 225, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(100, 100, 225, 0.25) 640px, rgba(100, 100, 225, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(100, 100, 225, 0.25) 680px, rgba(100, 100, 225, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(100, 100, 225, 0.25) 720px, rgba(100, 100, 225, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(100, 100, 225, 0.25) 760px, rgba(100, 100, 225, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(100, 100, 225, 0.25) 800px, rgba(100, 100, 225, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(100, 100, 225, 0.25) 840px, rgba(100, 100, 225, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(100, 100, 225, 0.25) 880px, rgba(100, 100, 225, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(100, 100, 225, 0.25) 920px, rgba(100, 100, 225, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);
|
||||
-moz-background-size: 100% 18px, auto;
|
||||
-webkit-background-size: 100% 18px, auto;
|
||||
-o-background-size: 100% 18px, auto;
|
||||
background-size: 100% 18px, auto;
|
||||
background-position: left top;
|
||||
}
|
||||
body.bp .feedback, body.bp .error, body.bp .alert, body.bp .notice, body.bp .success, body.bp .info {
|
||||
padding: 0.8em;
|
||||
margin-bottom: 1em;
|
||||
border: 2px solid #dddddd;
|
||||
}
|
||||
body.bp .error, body.bp .alert {
|
||||
background: #fbe3e4;
|
||||
color: #8a1f11;
|
||||
border-color: #fbc2c4;
|
||||
}
|
||||
body.bp .error a, body.bp .alert a {
|
||||
color: #8a1f11;
|
||||
}
|
||||
body.bp .notice {
|
||||
background: #fff6bf;
|
||||
color: #514721;
|
||||
border-color: #ffd324;
|
||||
}
|
||||
body.bp .notice a {
|
||||
color: #514721;
|
||||
}
|
||||
body.bp .success {
|
||||
background: #e6efc2;
|
||||
color: #264409;
|
||||
border-color: #c6d880;
|
||||
}
|
||||
body.bp .success a {
|
||||
color: #264409;
|
||||
}
|
||||
body.bp .info {
|
||||
background: #d5edf8;
|
||||
color: #205791;
|
||||
border-color: #92cae4;
|
||||
}
|
||||
body.bp .info a {
|
||||
color: #205791;
|
||||
}
|
||||
body.bp .hide {
|
||||
display: none;
|
||||
}
|
||||
body.bp .highlight {
|
||||
background: yellow;
|
||||
}
|
||||
body.bp .added {
|
||||
background: #006600;
|
||||
color: white;
|
||||
}
|
||||
body.bp .removed {
|
||||
background: #990000;
|
||||
color: white;
|
||||
}
|
||||
body.bp .box {
|
||||
padding: 1.5em;
|
||||
margin-bottom: 1.5em;
|
||||
background: #e5ecf9;
|
||||
}
|
||||
body.bp .border {
|
||||
padding-right: 4px;
|
||||
margin-right: 5px;
|
||||
border-right: 1px solid #dddddd;
|
||||
}
|
||||
body.bp .colborder {
|
||||
padding-right: 24px;
|
||||
margin-right: 25px;
|
||||
border-right: 1px solid #dddddd;
|
||||
}
|
||||
body.bp hr {
|
||||
background: #dddddd;
|
||||
color: #dddddd;
|
||||
clear: both;
|
||||
float: none;
|
||||
width: 100%;
|
||||
height: 0.1em;
|
||||
margin: 0 0 1.45em;
|
||||
border: none;
|
||||
}
|
||||
body.bp hr.space {
|
||||
background: #dddddd;
|
||||
color: #dddddd;
|
||||
clear: both;
|
||||
float: none;
|
||||
width: 100%;
|
||||
height: 0.1em;
|
||||
margin: 0 0 1.45em;
|
||||
border: none;
|
||||
background: white;
|
||||
color: white;
|
||||
visibility: hidden;
|
||||
}
|
||||
body.bp form.inline {
|
||||
line-height: 3;
|
||||
}
|
||||
body.bp form.inline p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
form.bp label {
|
||||
font-weight: bold;
|
||||
}
|
||||
form.bp fieldset {
|
||||
padding: 1.4em;
|
||||
margin: 0 0 1.5em 0;
|
||||
}
|
||||
form.bp legend {
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
form.bp input.text, form.bp input.title, form.bp input[type=email], form.bp input[type=text], form.bp input[type=password] {
|
||||
margin: 0.5em 0;
|
||||
background-color: white;
|
||||
padding: 5px;
|
||||
}
|
||||
form.bp input.title {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
form.bp textarea {
|
||||
margin: 0.5em 0;
|
||||
padding: 5px;
|
||||
}
|
||||
form.bp select {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
form.bp fieldset {
|
||||
border: 1px solid #cccccc;
|
||||
}
|
||||
form.bp input.text, form.bp input.title, form.bp input[type=email], form.bp input[type=text], form.bp input[type=password],
|
||||
form.bp textarea {
|
||||
background-color: #fff;
|
||||
border: 1px solid #bbbbbb;
|
||||
}
|
||||
form.bp input.text:focus, form.bp input.title:focus, form.bp input[type=email]:focus, form.bp input[type=text]:focus, form.bp input[type=password]:focus,
|
||||
form.bp textarea:focus {
|
||||
border-color: #666666;
|
||||
}
|
||||
form.bp select {
|
||||
background-color: #fff;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
form.bp input.text, form.bp input.title, form.bp input[type=email], form.bp input[type=text], form.bp input[type=password] {
|
||||
width: 300px;
|
||||
}
|
||||
form.bp textarea {
|
||||
width: 390px;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
body.two-col #container {
|
||||
width: 950px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
body.two-col #header, body.two-col #footer {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
width: 950px;
|
||||
}
|
||||
* html body.two-col #header, * html body.two-col #footer {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
body.two-col #sidebar {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
width: 310px;
|
||||
}
|
||||
* html body.two-col #sidebar {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
body.two-col #content {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-right: 0;
|
||||
width: 630px;
|
||||
}
|
||||
* html body.two-col #content {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
body #header nav {
|
||||
margin: 2em;
|
||||
}
|
||||
body #header nav ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
body #header nav ul li {
|
||||
list-style-image: none;
|
||||
list-style-type: none;
|
||||
margin-left: 0px;
|
||||
display: -moz-inline-box;
|
||||
-moz-box-orient: vertical;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
*vertical-align: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
body #header nav ul li {
|
||||
*display: inline;
|
||||
}
|
||||
body #register #customer ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
body #register #customer ul li {
|
||||
list-style-image: none;
|
||||
list-style-type: none;
|
||||
margin-left: 0px;
|
||||
display: -moz-inline-box;
|
||||
-moz-box-orient: vertical;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
*vertical-align: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
body #register #customer ul li {
|
||||
*display: inline;
|
||||
}
|
||||
body #register #customer ul li {
|
||||
padding: 1em;
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
}
|
||||
body #register #customer ul li:hover {
|
||||
background-color: #bbbbbb;
|
||||
}
|
||||
body #register #customer ul li.selected {
|
||||
background-color: #bbbbbb;
|
||||
}
|
||||
body #register #products ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
body #register #products ul li {
|
||||
list-style-image: none;
|
||||
list-style-type: none;
|
||||
margin-left: 0px;
|
||||
display: -moz-inline-box;
|
||||
-moz-box-orient: vertical;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
*vertical-align: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
body #register #products ul li {
|
||||
*display: inline;
|
||||
}
|
||||
body #register #products ul li {
|
||||
padding: 1.5em;
|
||||
text-align: center;
|
||||
}
|
||||
body #register #products ul li:hover {
|
||||
background-color: #bbbbbb;
|
||||
}
|
||||
body input[type=submit] {
|
||||
padding: 1em;
|
||||
padding-left: 1.5em;
|
||||
padding-right: 1.5em;
|
||||
position: relative;
|
||||
left: 100px;
|
||||
}
|
||||
body section {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
'use strict';
|
||||
var gulp = require('gulp');
|
||||
|
||||
var $ = require('gulp-load-plugins')();
|
||||
var bowerFiles = require('main-bower-files');
|
||||
var del = require('del');
|
||||
var runSequence = require('run-sequence').use(gulp);
|
||||
var browserSync = require('browser-sync').create();
|
||||
var reload = browserSync.reload;
|
||||
|
||||
var vendorSources = [
|
||||
'bower_components/jquery/dist/jquery.min.js',
|
||||
'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/collapse.js',
|
||||
'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/dropdown.js',
|
||||
'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/tooltip.js',
|
||||
'bower_components/bootstrap-datepicker/js/bootstrap-datepicker.js',
|
||||
'bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.nb.js',
|
||||
'bower_components/highcharts/highcharts.js',
|
||||
'bower_components/underscore/underscore-min.js'
|
||||
];
|
||||
|
||||
gulp.task('styles', function () {
|
||||
return gulp.src('app/styles/*.scss')
|
||||
.pipe($.sass({
|
||||
sourceComments: 'map'
|
||||
}).on('error', $.sass.logError))
|
||||
.pipe($.autoprefixer('last 1 version'))
|
||||
.pipe(gulp.dest('dist/styles'))
|
||||
});
|
||||
|
||||
gulp.task('scripts', function () {
|
||||
var myAppScripts = ['app/js/**/*.js'];
|
||||
var myFilter = $.filter(myAppScripts, {restore: true});
|
||||
return gulp.src(vendorSources.concat(myAppScripts))
|
||||
.pipe(myFilter)
|
||||
.pipe($.jshint())
|
||||
.pipe($.jshint.reporter(require('jshint-stylish')))
|
||||
.pipe(myFilter.restore)
|
||||
.pipe($.concat('app.min.js'))
|
||||
.pipe(gulp.dest('dist/js'))
|
||||
});
|
||||
|
||||
gulp.task('diststyles', function () {
|
||||
return gulp.src('app/styles/*.scss')
|
||||
.pipe($.sass()
|
||||
.on('error', $.sass.logError))
|
||||
// TODO: do this with a custom django-compressor filter, too much maintenance otherwise
|
||||
// .pipe($.uncss({
|
||||
// html: glob.sync('../templates/**/*.html'),
|
||||
// ignore: [/.*\.dropdown-menu/, /\.tooltip.*/, /\.datepicker.*/, /#inventory-report.*/]
|
||||
// }))
|
||||
.pipe($.autoprefixer('last 1 version'))
|
||||
.pipe($.csso())
|
||||
.pipe(gulp.dest('dist/styles'))
|
||||
});
|
||||
|
||||
gulp.task('distscripts', function () {
|
||||
return gulp.src(vendorSources.concat(['app/js/**/*.js']))
|
||||
.pipe($.concat('app.min.js'))
|
||||
.pipe($.uglify())
|
||||
.pipe(gulp.dest('dist/js'))
|
||||
});
|
||||
|
||||
gulp.task('images', function () {
|
||||
return gulp.src('app/images/**/*')
|
||||
.pipe($.imagemin({
|
||||
optimizationLevel: 3,
|
||||
progressive: true,
|
||||
interlaced: true
|
||||
}))
|
||||
.pipe(gulp.dest('dist/images'))
|
||||
});
|
||||
|
||||
gulp.task('fonts', function () {
|
||||
return gulp.src(bowerFiles())
|
||||
.pipe($.filter('**/*.{eot,svg,ttf,woff,woff2}'))
|
||||
.pipe($.flatten())
|
||||
.pipe(gulp.dest('dist/fonts'))
|
||||
});
|
||||
|
||||
gulp.task('clean', function (cb) {
|
||||
return del('dist', cb);
|
||||
});
|
||||
|
||||
gulp.task(
|
||||
'build',
|
||||
['distscripts', 'diststyles', 'images', 'fonts'],
|
||||
function() {
|
||||
return gulp.src('dist/**/*').pipe($.size({title: 'build', gzip: true}));
|
||||
}
|
||||
);
|
||||
gulp.task('default', ['clean'], function (cb) {
|
||||
runSequence('build', 'generate-service-worker', cb);
|
||||
});
|
||||
|
||||
gulp.task('serve', ['styles'], function () {
|
||||
});
|
||||
|
||||
gulp.task('watch', ['serve'], function () {
|
||||
browserSync.init({
|
||||
proxy: '127.0.0.1:8000'
|
||||
});
|
||||
|
||||
// watch for changes
|
||||
gulp.watch([
|
||||
'../templates/**/*.html',
|
||||
'app/js/**/*.js',
|
||||
'app/images/**/*'
|
||||
]).on('change', reload);
|
||||
|
||||
gulp.watch('app/styles/**/*.scss', ['styles']);
|
||||
gulp.watch('app/js/**/*.js', ['scripts']);
|
||||
gulp.watch('app/images/**/*', ['images']);
|
||||
});
|
||||
|
||||
gulp.task('generate-service-worker', function(callback) {
|
||||
var path = require('path');
|
||||
var swPrecache = require('sw-precache');
|
||||
var rootDir = 'dist';
|
||||
var srvRootDir = '/static/'+rootDir;
|
||||
|
||||
gulp.src(['bower_components/sw-toolbox/sw-toolbox.js', 'app/sw/sw-toolbox-config.js'])
|
||||
.pipe(gulp.dest('dist/sw'));
|
||||
|
||||
swPrecache.write(path.join(rootDir, 'service-worker.js'), {
|
||||
staticFileGlobs: [rootDir + '/**/*.{js,html,css,png,jpg,gif}'],
|
||||
stripPrefix: rootDir,
|
||||
replacePrefix: srvRootDir,
|
||||
importScripts: [srvRootDir + '/sw/sw-toolbox.js', srvRootDir + '/sw/sw-toolbox-config.js']
|
||||
}, callback);
|
||||
});
|
||||
@@ -1,27 +0,0 @@
|
||||
$(document).ready(function() {
|
||||
function enable_all_customers() {
|
||||
$("li.customer").each(function(i) {
|
||||
$(this).removeClass("selected");
|
||||
});
|
||||
}
|
||||
/* Customer selection */
|
||||
$("li.customer").click( function() {
|
||||
enable_all_customers();
|
||||
/* Disable the customer button just clicked */
|
||||
$(this).addClass("selected");
|
||||
/* Update the field */
|
||||
$("input[name=customer]").val($(this).children("span.name").text());
|
||||
});
|
||||
/* Product amount controls */
|
||||
$("li.product").click( function() {
|
||||
var form_field = $(this).children("input[type=text]");
|
||||
var qty = Number(form_field.val()) + 1;
|
||||
form_field.val(qty);
|
||||
});
|
||||
/* Form reset */
|
||||
$("input[type=reset]").click( function() {
|
||||
$("input[name=customer]").val("");
|
||||
enable_all_customers();
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "bbs",
|
||||
"description": "Biceps Bar System",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"browser-sync": "^2.10.0",
|
||||
"del": "^2.1.0",
|
||||
"glob": "^6.0.1",
|
||||
"gulp": "^3.9.0",
|
||||
"gulp-autoprefixer": "3.1.0",
|
||||
"gulp-cache": "^0.1.11",
|
||||
"gulp-concat": "^2.6.0",
|
||||
"gulp-csso": "^0.2.6",
|
||||
"gulp-filter": "^3.0.1",
|
||||
"gulp-flatten": "0.0.2",
|
||||
"gulp-if": "^2.0.0",
|
||||
"gulp-imagemin": "^2.4.0",
|
||||
"gulp-jshint": "^2.0.0",
|
||||
"gulp-load-plugins": "^1.1.0",
|
||||
"gulp-sass": "^2.1.0",
|
||||
"gulp-size": "^2.0.0",
|
||||
"gulp-uglify": "^1.5.1",
|
||||
"gulp-uncss": "^1.0.4",
|
||||
"jshint-stylish": "^2.1.0",
|
||||
"main-bower-files": "^2.9.0",
|
||||
"run-sequence": "^1.1.5",
|
||||
"sw-precache": "^2.2.0"
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
||||
@@ -1,34 +1,86 @@
|
||||
<!doctype html>
|
||||
{% load staticfiles %}
|
||||
<html>
|
||||
<head>
|
||||
<title>{% block title %}BBS{% endblock %}</title>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="/static/gaute/stylesheets/screen.css" type="text/css" media="screen, projection">
|
||||
<link rel="stylesheet" href="/static/gaute/stylesheets/print.css" type="text/css" media="print">
|
||||
<!--[if lt IE 8]>
|
||||
<link rel="stylesheet" href="/static/gaute/stylesheets/ie.css" type="text/css" media="screen, projection">
|
||||
<![endif]-->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
|
||||
<script src="/static/js/register.js"></script>
|
||||
{%block headinc %}
|
||||
{%endblock%}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="x-django-static-url" content="{% static "" %}">
|
||||
<link rel="stylesheet" href="{% static "dist/styles/screen.css" %}" type="text/css" media="screen, projection">
|
||||
{% block headinc %}{% endblock %}
|
||||
</head>
|
||||
<body class="bp three-col">
|
||||
<body>
|
||||
<header id="header">
|
||||
{% block header %}
|
||||
{%endblock%}
|
||||
</header>
|
||||
<div id="container">
|
||||
{%block content%}
|
||||
{%endblock%}
|
||||
</div>
|
||||
<div id="footer">
|
||||
{%block footer %}
|
||||
<img src="/static/DNSlogo.png" />
|
||||
{%endblock%}
|
||||
<nav class="navbar navbar-inverse" role="navigation">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/">Biceps Bar System - BBS</a>
|
||||
</div>
|
||||
|
||||
{%block tailinc %}
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="{% block active_register %}{% endblock %}"><a href="/register"><i class="glyphicon glyphicon-home white"></i> Kjøp drikke</a></li>
|
||||
<li class="{% block active_deposit %}{% endblock %}"><a href="/deposit">Sett inn penger</a></li>
|
||||
<li class="{% block active_log %}{% endblock %}"><a href="/log"><i class="glyphicon glyphicon-list-alt"></i> Logg</a></li>
|
||||
<li class="{% block active_stats %}{% endblock %}"><a href="/stats"><i class="glyphicon glyphicon-stats"></i> Statistikk</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
{% if not user.is_authenticated %}
|
||||
<li><a href="{% url 'login' %}">Logg inn</a></li>
|
||||
{% else %}
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="{{ user.profile.profile_image_url }}" /><span class="name">{{ user.first_name }}</span> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
{% if user.is_authenticated %}<li class="{% block active_profile %}{% endblock %}"><a href="{% url 'profile' %}"><i class="glyphicon glyphicon-user"></i> Profil</a></li>{% endif %}
|
||||
<li class="{% block active_create_user %}{% endblock %}"><a href="{% url 'create-user' %}"><i class="glyphicon glyphicon-plus"></i> Ny bruker</a></li>
|
||||
{% if user.is_superuser %}<li><a href="/admin"><i class="glyphicon glyphicon-cog"></i> Administrasjon</a></li>{% endif %}
|
||||
{% if user.is_superuser %}<li class="{% block active_inventory %}{% endblock %}"><a href="{% url 'inventory' %}"><i class="glyphicon glyphicon-briefcase"></i> Varebeholdning</a></li>{% endif %}
|
||||
{% if user.is_superuser %}<li class="{% block active_report %}{% endblock %}"><a href="{% url 'report' %}"><i class="glyphicon glyphicon-briefcase"></i> Rapport</a></li>{% endif %}
|
||||
<li class="divider"></li>
|
||||
<li><a href="{% url 'logout' %}"><i class="glyphicon glyphicon-log-out"></i> Logg ut</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
{% endblock %}
|
||||
</header>
|
||||
<div id="container" class="container">
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
<div id="footer" class="row">
|
||||
<div class="col-md-12">
|
||||
{% block footer %}
|
||||
<div class="credits">
|
||||
Laget med <span class="love" title="kærlighed">♥</span> av <a href="http://edb.neuf.no/">EDB-gjengen i KAK</a><br/>
|
||||
<a href="http://edb.neuf.no/"><img src="{% static "dist/images/edb_brick.png" %}" alt="EDB" /></a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{% static "dist/js/app.min.js" %}"></script>
|
||||
<!--<script>
|
||||
if('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/service-worker.js', { scope: '/' })
|
||||
.then(function(registration) {
|
||||
console.log("Service Worker Registered");
|
||||
});
|
||||
|
||||
navigator.serviceWorker.ready.then(function(registration) {
|
||||
console.log("Service Worker Ready");
|
||||
});
|
||||
}
|
||||
</script>-->
|
||||
{% block tailinc %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,83 @@
|
||||
{% extends "base.html" %}
|
||||
{% load widget_tweaks %}
|
||||
{% block active_deposit %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="deposit" class="row">
|
||||
{% if messages %}
|
||||
<section class="row">
|
||||
<div class="col-xs-4">
|
||||
{% for message in messages %}
|
||||
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% if not perms.main.can_add_transaction and limit_deposits %}
|
||||
<section class="row">
|
||||
<div class="col-xs-4">
|
||||
<p class="alert alert-warning">Du har ikke tilgang til å sette inn penger.</p>
|
||||
<p>Spør en av disse om de kan hjelpe deg:</p>
|
||||
<ul>
|
||||
{% for u in allowed_users %}
|
||||
<li style="padding-bottom: 8px;"><img src="{{u.profile.image }}" />{{u.first_name }} {{u.last_name }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% else %}
|
||||
<form id="order" method="post" class="form-stacked" autocomplete="off">
|
||||
{% csrf_token %}
|
||||
<section id="customer">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h2>Hvem skal sette inn penger?</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<!-- Typeahead customer field -->
|
||||
<div class="col-md-3">
|
||||
<input name="customer_name" id="id_customer_typeahead" type="text" value="" data-provide="typeahead" data-source="{{users_js}}" class="form-control" /><br />
|
||||
<!-- Actual customer select field (hidden) -->
|
||||
<div style="display:none;">{{form.user }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<ul class="well">
|
||||
{% for user in users %}
|
||||
<li class="customer">{% spaceless %}
|
||||
<img class="profile" src="{{ user.profile.profile_image_url }}" alt="Profile picture"/><br />
|
||||
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1" }}</span><br />
|
||||
<span class="balance">{{ user.profile.balance }}</span>
|
||||
<span class="id" style="display:none;">{{ user.id }}</span>
|
||||
{% endspaceless %}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="amount">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h2>Hvor mye?</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{{form.amount|add_class:"form-control"}}
|
||||
{{form.amount.errors}}<br />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<button type="submit" class="btn btn-lg btn-primary" name="submit_order">Sett inn</button>
|
||||
<a href="{% url 'register' %}" class="btn btn-default">Avbryt</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -1,8 +0,0 @@
|
||||
{% extends "base.html" %}
|
||||
{%block header%}
|
||||
<h1>Biceps Bar System</h1>
|
||||
{%endblock%}
|
||||
|
||||
{%block content%}
|
||||
<a href="/register/">Kasse</a>
|
||||
{%endblock%}
|
||||
@@ -0,0 +1,78 @@
|
||||
{% extends "base.html" %}
|
||||
{% block active_inventory %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="inventory" class="row">
|
||||
<div class="row">
|
||||
<div class="col-md-7">
|
||||
<h2>Varebeholdning</h2>
|
||||
<!-- TODO History view -->
|
||||
<!--<div class="text-right">
|
||||
<div class="btn-group">
|
||||
<a href="#list" class="btn btn-default"><i class="glyphicon glyphicon-list"></i> Liste</a>
|
||||
<a href="#stats" class="btn btn-default"><i class="glyphicon glyphicon-stats"></i> Historikk</a>
|
||||
</div>
|
||||
</div>-->
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Vare</th>
|
||||
<th>Beholdning</th>
|
||||
<th>Innkjøpspris</th>
|
||||
<th>Verdi</th>
|
||||
<th>I salg</th>
|
||||
<th>Sist oppdatert</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr class="{% if not product.active %}info inactive{% elif product.inventory_amount <= 0 %}warning{% else %}success{% endif %}">
|
||||
<td>{{ product.name }}</td>
|
||||
<td class="product-amount">{{ product.inventory_amount }}</td>
|
||||
<td>{{ product.wholesale_unit_price|default:"-" }}</td>
|
||||
<td>{{ product.wholesale_value|default:"-" }}</td>
|
||||
<td class="product-active">{% if product.active %}<i class="glyphicon glyphicon-ok"></i>{% endif %}</td>
|
||||
<td>{{ product.updated|date:"c" }}</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td>Sum</td>
|
||||
<td>{{ num_products }}</td>
|
||||
<td></td>
|
||||
<td>{{ wholesale_value }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<h2>Varetransaksjoner</h2>
|
||||
<div class="text-right">
|
||||
<a href="{% url 'inventory-add' %}" class="btn btn-primary"><i class="glyphicon glyphicon-plus"></i> Sett inn varer</a>
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Når</th>
|
||||
<th>Hva</th>
|
||||
<th>Antall</th>
|
||||
<th>Hvem</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for t in transactions %}
|
||||
<tr>
|
||||
<td>{{ t.created }}</td>
|
||||
<td>{{ t.product }}</td>
|
||||
<td>{{ t.amount }}</td>
|
||||
<td>{% if t.user.profile.image %}<img src="{{ t.user.profile.image }}" class="customer" title="{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}" />{% else %}{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}{% endif %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,35 @@
|
||||
{% extends "base.html" %}
|
||||
{% load widget_tweaks %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block title %}Legg til nye varer {% endblock %}
|
||||
|
||||
{% block active_inventory_add" %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if perms.auth.can_add_inventory_transaction %}
|
||||
<section class="row">
|
||||
<div class="col-md-4">
|
||||
{% for message in messages %}
|
||||
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
<section class="row">
|
||||
<div class="col-md-5">
|
||||
<h1>Legg til nye varer</h1>
|
||||
{% if form.non_field_errors %}
|
||||
<p>{{ form.non_field_errors}}.</p>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" role="form">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
|
||||
<input type="submit" value="Legg til" class="btn btn-primary btn-lg" />
|
||||
<a href="{% url 'inventory' %}" class="btn btn-default" />Tilbake</a>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,83 @@
|
||||
{% extends "base.html" %}
|
||||
{% block active_log %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="log" class="row">
|
||||
{% if messages %}
|
||||
<section class="row">
|
||||
<div class="col-xs-4">
|
||||
{% for message in messages %}
|
||||
<div {% if message.tags %}class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<section id="orders">
|
||||
{% if not limit %}
|
||||
<h2 title="Alle registrerte ordre">Alle ordre</h2><br />
|
||||
<a href="{% url 'log' %}">Vis kun siste</a>
|
||||
{% else %}
|
||||
<h2 title="Ordre fra de siste 2 dagene eller de 5 siste ordrene.">Siste ordre</h2><br />
|
||||
<a href="{% url 'log-all' %}">Vis alle</a>
|
||||
{%endif %}
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Når</th>
|
||||
<th>Hvem</th>
|
||||
<th>Hva</th>
|
||||
<th>Sum</th>
|
||||
<!--<th>Handling</th>-->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for order in orders %}
|
||||
<tr>
|
||||
<td>{{ order.created }}</td>
|
||||
<td>{% if order.customer %}{% if order.customer.profile.image %}<img src="{{ order.customer.profile.image }}" class="customer" title="{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}" />{% else %}{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}{% endif %}{% else %}Ekstern{% endif %}</td>
|
||||
<td>{% for line in order.orderlines.all %}
|
||||
<span class="amount">{{ line.amount}}</span> <a href="#" class="product" title="{{ line.unit_price}} per">{{ line.product }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
||||
<td>{{ order.order_sum }}</td>
|
||||
<!--<td><{% include "modal-delete-order.html" with order=order %}<a class="btn btn-danger" data-toggle="modal" href="#modal-order-{{order.id}}"><i class="icon-trash icon-white"></i> Slett</a></td>-->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<section id="transactions">
|
||||
{% if not limit %}
|
||||
<h2 title="Alle registrerte transaksjoner">Alle transaksjoner</h2>
|
||||
<br /><a href="{% url 'log' %}#transactions">Vis kun siste</a>
|
||||
{% else %}
|
||||
<h2 title="Transaksjoner fra de siste 2 dagene eller de 5 siste transaksjonene.">Siste transaksjoner</h2><br />
|
||||
<a href="{% url 'log-all' %}#transactions">Vis alle</a>
|
||||
{%endif %}
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Når</th>
|
||||
<th>Hvem</th>
|
||||
<th>Innskudd</th>
|
||||
<!--<th>Handling</th>-->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for t in transactions %}
|
||||
<tr>
|
||||
<td>{{ t.created }}</td>
|
||||
<td>{% if t.user.profile.image %}<img src="{{ t.user.profile.image }}" class="customer" title="{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}" />{% else %}{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}{% endif %}</td>
|
||||
<td>{{ t.amount }}</td>
|
||||
<!--<td>{% include "modal-delete-transaction.html" with t=t %}<a class="btn btn-danger" data-toggle="modal" href="#modal-trans-{{t.id}}"><i class="icon-trash icon-white"></i> Slett</a></td>-->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,30 @@
|
||||
<div id="modal-order-{{order.id}}" class="modal" style="display: none;">
|
||||
<div class="modal-header">
|
||||
<a href="#" class="close" data-dismiss="modal">×</a>
|
||||
<h3>Er du sikker?</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Orderen til <strong>{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}</strong> fra {{ order.created }} vil bli <em>slettet</em>.</p>
|
||||
<p>
|
||||
Orderen inneholdt:
|
||||
<ul>
|
||||
{% for line in order.orderlines.all %}
|
||||
<li>
|
||||
<span class="bold">{{ line.amount}}</span>
|
||||
<a href="#" class="product" title="{{ line.unit_price}} per">{{ line.product }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
Totalt: {{ order.order_sum }},-
|
||||
</p>
|
||||
<p>
|
||||
<strong>{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}</strong> sin saldo vil bli kreditert {{ order.order_sum }} kr.
|
||||
</p>
|
||||
<p>Vil du fortsette?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn" data-dismiss="modal">Nei</a>
|
||||
<a href="#" class="btn btn-danger"><i class="icon-trash icon-white"></i> Ja</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,18 @@
|
||||
<div id="modal-trans-{{t.id}}" class="modal" style="display: none;">
|
||||
<div class="modal-header">
|
||||
<a href="#" class="close" data-dismiss="modal">×</a>
|
||||
<h3>Er du sikker?</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Inskuddet til <strong>{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}</strong> på <strong>{{ t.amount }}</strong> fra {{ t.created }} vil bli <em>slettet</em>.</p>
|
||||
<p>
|
||||
<strong>{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}</strong> sin saldo vil debiteres med {{ t.amount }} kr.
|
||||
</p>
|
||||
<p>Vil du fortsette?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn" data-dismiss="modal">Nei</a>
|
||||
<a href="#" class="btn btn-danger"><i class="icon-trash icon-white"></i> Ja</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,71 @@
|
||||
{% extends "base.html" %}
|
||||
{% block active_profile %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="user-profile" data-user-id="{{user.pk}}">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1 class="profile-name"><img src="{{ user.profile.profile_image_url }}" class="profile-image" /> {{user.first_name}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Saldo</div>
|
||||
<div class="panel-body">
|
||||
<h2>{{user.profile.balance }} kr</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Kjøp totalt</div>
|
||||
<div class="panel-body">
|
||||
<h2>{{orders_totals.sum }} kr</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Topp 5 måneder</div>
|
||||
<div class="panel-body">
|
||||
{% for o in top_months %}
|
||||
<li>{{ o.month|date:"F Y"}}: <strong>{{ o.num }}</strong> kjøp på totalt <strong>{{ o.sum }} kr</strong></li>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Kjøp over tid per produkt</div>
|
||||
<div class="panel-body">
|
||||
<div class="profile-stats-orderline"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% comment %}<div class="row">
|
||||
<div class="col-md-5">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Ordre</div>
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
{% for o in orders %}
|
||||
<li>{{ o.created|date:"c" }}: {{ o.reciept }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Transaksjoner</div>
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
{% for t in transactions %}
|
||||
<li>{{ t.created|date:"c" }} {{ t.amount }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endcomment %}
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -1,51 +1,102 @@
|
||||
{% extends "base.html" %}
|
||||
{% block header %}
|
||||
<h1>Biceps Bar System</h1>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="{% url main.views.logout %}">Logout</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
{% load staticfiles thumbnail %}
|
||||
{% block active_register %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="register">
|
||||
<form id="order" method="post">
|
||||
{% csrf_token %}
|
||||
<section id="customer">
|
||||
<h2>Velg kunde</h2>
|
||||
<input type="hidden" name="customer" value="" />
|
||||
<ul>
|
||||
{% for user in users %}
|
||||
<li class="customer">
|
||||
{% if user.get_profile.image %}
|
||||
<img class="profile" src="{{ user.get_profile.image.url }}" /><br />
|
||||
{% else %}
|
||||
<img class="profile" src="/static/gaute/images/unknown.png" /><br />
|
||||
{% endif %}
|
||||
<span class="name">{{ user }}</span> ({{ user.get_profile.balance }})</li>
|
||||
<section id="register" class="row">
|
||||
{% if messages %}
|
||||
<section class="row">
|
||||
<div class="col-xs-4">
|
||||
{% for message in messages %}
|
||||
<div{% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section id="products">
|
||||
<h2>Velg antall</h2>
|
||||
<ul>
|
||||
{% endif %}
|
||||
<form id="order" class="form-stacked" method="post" autocomplete="off">
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
<!-- Formset validation fields -->
|
||||
<input type="hidden" name="form-TOTAL_FORMS" value="{{ products|length }}" id="id_form-TOTAL_FORMS" />
|
||||
<input type="hidden" name="form-INITIAL_FORMS" value="{{ products|length }}" id="id_form-INITIAL_FORMS" />
|
||||
<input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" />
|
||||
|
||||
<section id="customer">
|
||||
{% if users %}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h2 title="Sortert etter hvem som kjøpte noe sist.">Hvem kjøper?</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<!-- Typeahead customer field -->
|
||||
<input name="customer_name" type="text" id="id_customer_typeahead" value="" data-provide="typeahead" data-source="{{users_js}}" class="form-control" />
|
||||
<!-- Actual customer select field (hidden) -->
|
||||
<div style="display:none;">{{orderform.customer }}</div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<ul class="well">
|
||||
<li class="customer">{% spaceless %}
|
||||
<img class="profile" src="{% static "dist/images/unknown_person.png" %}" alt="Profile picture" /><br />
|
||||
<span class="name">Ekstern</span><br />
|
||||
<span class="balance"> </span>
|
||||
{% endspaceless %}</li>
|
||||
{% for user in users %}<li class="customer{% if user.profile.last_purchase_date < half_a_year_ago %} infrequent hidden{% endif %}">{% spaceless %}
|
||||
<img class="profile" src="{{ user.profile.profile_image_url }}" alt="Profile picture" /><br />
|
||||
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1"}}</span><br />
|
||||
<span class="balance">{{ user.profile.balance }}</span>
|
||||
<span class="id" style="display:none;">{{ user.id }}</span>
|
||||
{% endspaceless %}</li>{% endfor %}
|
||||
</ul>
|
||||
<div class="users-description pull-right">
|
||||
<small>Viser: De med minst <strong>{{ cheapest_product_price }}</strong> i saldo<span class="infrequent-users"> og mer enn ett kjøp siden <strong>{{ half_a_year_ago }}</strong></span>. <a href="#" class="toggle-infrequent-users">Vis alle</a></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{%else%}
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h2>Hvem kjøper?</h2>
|
||||
<div class="alert alert-error">Ingen har positiv saldo i BBS.</div><a href="{% url 'deposit' %}" class="btn">Sett inn penger</a>
|
||||
</div>
|
||||
</div>
|
||||
{%endif%}
|
||||
</section>
|
||||
|
||||
<section id="products" class="row">
|
||||
<div class="col-md-12">
|
||||
<h2>Kjøper hva?</h2>
|
||||
<ul class="well">
|
||||
{% for product in products %}
|
||||
<li id="form-{{forloop.counter0}}" class="product"><input type="hidden" name="form-{{ forloop.counter0 }}-product" value="{{product.id }}" />
|
||||
<input type="text" id="form-{{ forloop.counter0 }}-amount" name="form-{{ forloop.counter0 }}-amount" value="0" size="2" />
|
||||
<input type="hidden" id="form-{{ forloop.counter0 }}-amount" name="form-{{ forloop.counter0 }}-amount" value="0" class="span2" size="2" />
|
||||
<input type="hidden" name="form-{{ forloop.counter0 }}-unit_price_int" value="{{product.sale_price_int }}" />
|
||||
<input type="hidden" name="form-{{ forloop.counter0 }}-unit_price_ext" value="{{product.sale_price_ext }}" />
|
||||
<span class="qty">0</span>
|
||||
{% if product.image %}
|
||||
<img class="product" src="{{ product.image.url }}" /><br />
|
||||
<img class="product" src="{{ product.image|thumbnail_url:'product' }}" /><br />
|
||||
{% else %}
|
||||
<img class="product" src="/static/gaute/images/product.png" /><br />
|
||||
<img class="product" src="{% static "dist/images/product.png" %}" /><br />
|
||||
{% endif %}
|
||||
{{ product.name }}
|
||||
<span class="name">{{ product.name }}</span><br>
|
||||
<span class="sale_price_ext">{{product.sale_price_ext|floatformat:0}}</span>/<span class="sale_price_int">{{product.sale_price_int|floatformat:0}}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section id="total"><h3>Totalt</h3><span class="total_text"></span></section>
|
||||
<input type="reset" id="reset" value="Start på nytt" />
|
||||
<input type="submit" id="submit_order" name="submit_order" value="Kjøp" />
|
||||
</fieldset>
|
||||
<div class="form-actions">
|
||||
<div class="col-xs-3 total">
|
||||
<h2>Totalt: <span class="total_text"></span></h2>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-lg btn-primary" name="submit_order">Kjøp</button>
|
||||
<button type="reset" class="btn btn-default">Start på nytt</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,40 @@
|
||||
{% extends "base.html" %}
|
||||
{% load widget_tweaks %}
|
||||
|
||||
{% block title %}Lag ny bruker {% endblock %}
|
||||
|
||||
{% block active_create_user %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if perms.auth.can_add_user %}
|
||||
<section class="row">
|
||||
<div class="col-md-4">
|
||||
{% for message in messages %}
|
||||
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
<section class="row">
|
||||
<div class="col-md-5">
|
||||
<h1>Legg til ny bruker</h1>
|
||||
{% if form.non_field_errors %}
|
||||
<p>{{ form.non_field_errors}}.</p>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" role="form">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="id_first_name">{{ form.first_name.label }}</label>{{ form.first_name|add_class:"form-control"}}{{ form.first_name.errors }}
|
||||
<label for="id_last_name">{{ form.last_name.label }}</label>{{ form.last_name|add_class:"form-control"}}{{ form.last_name.errors }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="id_email">{{ form.email.label }}</label>{{ form.email|add_class:"form-control"}}{{ form.email.errors }}
|
||||
</div>
|
||||
<input type="submit" value="Legg til" class="btn btn-primary btn-lg" />
|
||||
<a href="{% url 'register' %}" class="btn btn-default">Tilbake</a>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -6,3 +6,4 @@
|
||||
{% include "registration/login_form.html" %}
|
||||
|
||||
{% endblock %}
|
||||
{% block footer %}{% endblock %}
|
||||
@@ -1,20 +1,16 @@
|
||||
{% load widget_tweaks %}
|
||||
<div class="form-login">
|
||||
{% if form.errors %}
|
||||
<p>Brukernavn og passord stemmer ikke overens. Prøv igjen.</p>
|
||||
<p class="alert alert-danger">Brukernavn og passord stemmer ikke overens. Prøv igjen.</p>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="{% url django.contrib.auth.views.login %}" class="bp">
|
||||
<form method="post" action="{% url 'django.contrib.auth.views.login' %}" class="">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
<tr>
|
||||
<th><label for="id_username">Brukernavn:</label></th>
|
||||
<td>{{ form.username }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_password">Passord: </label></th>
|
||||
<td>{{ form.password }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="submit" value="Logg inn" />
|
||||
<label for="id_username">Brukernavn:</label>
|
||||
{{ form.username|add_class:"form-control" }}
|
||||
<label for="id_password">Passord: </label>
|
||||
{{ form.password|add_class:"form-control" }}<br/>
|
||||
<input type="submit" value="Logg inn" class="btn btn-primary btn-lg"/>
|
||||
<input type="hidden" name="next" value="{{ next }}" />
|
||||
</form>
|
||||
</div>
|
||||
@@ -3,6 +3,10 @@
|
||||
{% block title %}Logg inn{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Du er logget ut. Vil du <a href="{% url main.views.home %}">logge inn igjen</a>.
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<p class="alert alert-success">Du er logget ut.</p>
|
||||
<p>Vil du <a href="{% url 'home' %}">logge inn igjen?</a></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,96 @@
|
||||
{% extends "base.html" %}
|
||||
{% load bootstrap %}
|
||||
{% block active_report %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="inventory-report" class="row">
|
||||
<div class="col-md-7">
|
||||
<h2>Varerapport</h2>
|
||||
<form class="inventory-report-form">
|
||||
{{ form|bootstrap_horizontal }} ({{ start_time|timesince:end_time}})
|
||||
<button type="submit" class="btn btn-default">Oppdater</button>
|
||||
</form>
|
||||
<h2>Beholdning</h2>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Navn</th>
|
||||
<th>Sum verdi (innkjøp)</th>
|
||||
<th>Sum verdi (salg)</th>
|
||||
<th>Endring verdi</th>
|
||||
<th>Enheter (innkjøp)</th>
|
||||
<th>Enheter (salg)</th>
|
||||
<th>Endring enheter</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for name,p in inventory_products.items %}
|
||||
<tr>
|
||||
<td>{{name}}</td>
|
||||
<td>{{p.transactions_sum|default:"0"}} kr</td>
|
||||
<td>{{p.orderlines_sum|default:"0"}} kr</td>
|
||||
<td class="{% if p.value_diff > 0 %}positive{% elif p.value_diff < 0 %}negative{% endif %}">{% if p.value_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif p.value_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ p.value_diff }}</td>
|
||||
|
||||
<td>{{p.transactions_units|default:"0"}} stk</td>
|
||||
<td>{{p.orderlines_units|default:"0"}} stk</td>
|
||||
<td class="{% if p.units_diff > 0 %}positive{% elif p.units_diff < 0 %}negative{% endif %}">{% if p.units_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif p.units_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ p.units_diff }}</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><strong>Totalt</strong></td>
|
||||
<td>{{ inv_in }} kr</td>
|
||||
<td>{{ inv_out }} kr</td>
|
||||
<td class="{% if inv_diff > 0 %}positive{% elif inv_diff < 0 %}negative{% endif %}">{% if inv_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif inv_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ inv_diff }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</ul>
|
||||
<h2>Innskudd</h2>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Dato</th>
|
||||
<th>Saldo</th>
|
||||
<th>Innskudd</th>
|
||||
<th>Kjøp</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Fra</td>
|
||||
<td>{{ start_time|date:"Y-m-d" }}</td>
|
||||
<td>{{ saldo_start }}</td>
|
||||
<td>{{ deposits_start }}</td>
|
||||
<td>{{ purchases_start }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Til</td>
|
||||
<td>{{ end_time|date:"Y-m-d" }}</td>
|
||||
<td>{{ saldo_end }}</td>
|
||||
<td>{{ deposits_end }}</td>
|
||||
<td>{{ purchases_end }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Endring</strong></td>
|
||||
<td>Siste {{ start_time|timesince:end_time}}</td>
|
||||
<td class="{% if saldo_diff > 0 %}positive{% elif saldo_diff < 0 %}negative{% endif %}">{% if saldo_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif saldo_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ saldo_diff }}</td>
|
||||
<td class="{% if deposits_diff > 0 %}positive{% elif deposits_diff < 0 %}negative{% endif %}">{% if deposits_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif deposits_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ deposits_diff }}</td>
|
||||
<td class="{% if purchases_diff > 0 %}positive{% elif purchases_diff < 0 %}negative{% endif %}">{% if purchases_diff > 0 %}<i class="glyphicon glyphicon-arrow-up"></i> {% elif purchases_diff < 0 %}<i class="glyphicon glyphicon-arrow-down"></i> {% endif %}{{ purchases_diff }}</td>
|
||||
</tr>
|
||||
{% if end_time|date:"Y-m-d" != datetime_now|date:"Y-m-d" %}
|
||||
<tr>
|
||||
<td>I dag</td>
|
||||
<td>{% now "Y-m-d" %}</td>
|
||||
<td>{{ saldo }} (innskudd - kjøp) / {{ saldo_profiles }} kr (profil)</td>
|
||||
<td>{{ deposits }}</td>
|
||||
<td>{{ purchases }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,36 @@
|
||||
{% extends "base.html" %}
|
||||
{% block active_stats %}active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section id="stats" class="row">
|
||||
<section id="products_realtime" class="row">
|
||||
<div class="col-xs-12">
|
||||
<h2>Realtime produkter</h2>
|
||||
<div id="products_realtime_chart"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="product" class="row">
|
||||
<h2>Produkter</h2>
|
||||
{% for product in products %}
|
||||
<section id="product_{{ product.id }}">
|
||||
<div class="col-xs-6">
|
||||
<div id="product_chart{{ product.id }}"></div>
|
||||
</div>
|
||||
</section>
|
||||
{% endfor %}
|
||||
</section>
|
||||
<section id="order">
|
||||
{% for group in order_groups %}
|
||||
<section id="order_{{ group }}" class="row" data-group="{{ group }}">
|
||||
<h2>{{ group|capfirst }}</h2>
|
||||
<div class="col-xs-12">
|
||||
<div id="order_chart_{{ group }}"></div>
|
||||
</div>
|
||||
</section>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
from django.conf.urls.defaults import patterns, include, url
|
||||
from django.contrib import admin
|
||||
admin.autodiscover()
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', 'main.views.home', name='home'),
|
||||
url(r'', include('main.urls')),
|
||||
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
|
||||
url(r'^logout/$', 'main.views.logout'),
|
||||
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
# Uncomment the admin/doc line below to enable admin documentation:
|
||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
|
||||
)
|
||||
|
||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns # for dev
|
||||
urlpatterns += staticfiles_urlpatterns()
|
||||