Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a94db2675 | ||
|
|
6b2dc28ea3 |
No files matched your search
@@ -1,12 +1,6 @@
|
|||||||
*.swp
|
*.swp
|
||||||
*.pyc
|
*.pyc
|
||||||
local_settings.py
|
settings.py
|
||||||
db.sqlite3
|
dev.db
|
||||||
static/.sass-cache
|
static/gaute/.sass-cache
|
||||||
uploads/[^.]*
|
uploads/[^.]*
|
||||||
venv
|
|
||||||
node_modules
|
|
||||||
bower_components
|
|
||||||
.idea
|
|
||||||
/CACHE
|
|
||||||
media
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
TODO:
|
||||||
|
- Prototype register GUI.
|
||||||
|
- Show picture of buyers and username, with balance > 0.
|
||||||
|
- Submit orders
|
||||||
|
- User profile settings
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
# 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
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
"""
|
||||||
|
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)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# Create your views here.
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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,
|
|
||||||
})
|
|
||||||
]
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bbssite.settings')
|
|
||||||
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
|
||||||
application = get_wsgi_application()
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
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,12 +1,10 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from main.models import *
|
from main.models import *
|
||||||
|
|
||||||
|
|
||||||
class ProductAdmin(admin.ModelAdmin):
|
class ProductAdmin(admin.ModelAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
admin.site.register(Product, ProductAdmin)
|
admin.site.register(Product, ProductAdmin)
|
||||||
admin.site.register(InventoryTransaction)
|
|
||||||
admin.site.register(Order)
|
admin.site.register(Order)
|
||||||
admin.site.register(OrderLine)
|
admin.site.register(OrderLine)
|
||||||
admin.site.register(Transaction)
|
admin.site.register(Transaction)
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
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']
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
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)
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
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,27 +1,12 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from __future__ import unicode_literals
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import User
|
from django.utils.translation import ugettext as _
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from main.models import Order, Transaction, InventoryTransaction, Product
|
|
||||||
from main.utils import format_username
|
|
||||||
|
|
||||||
|
from models import *
|
||||||
|
|
||||||
class OrderForm(forms.ModelForm):
|
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):
|
def clean_customer(self):
|
||||||
if self.cleaned_data['customer'] is None:
|
if self.cleaned_data['customer'].get_profile().balance <= 0:
|
||||||
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."))
|
raise forms.ValidationError(_("Du har negativ saldo og kan ikke kjøpe noe."))
|
||||||
|
|
||||||
return self.cleaned_data['customer']
|
return self.cleaned_data['customer']
|
||||||
@@ -30,61 +15,12 @@ class OrderForm(forms.ModelForm):
|
|||||||
model = Order
|
model = Order
|
||||||
fields = ('customer',)
|
fields = ('customer',)
|
||||||
|
|
||||||
|
|
||||||
class OrderLineForm(forms.Form):
|
class OrderLineForm(forms.Form):
|
||||||
product = forms.IntegerField(required=True)
|
product = forms.IntegerField(required=True)
|
||||||
amount = forms.IntegerField(required=True)
|
amount = forms.IntegerField(required=True)
|
||||||
unit_price_int = forms.FloatField(required=True, localize=True)
|
unit_price = forms.FloatField(required=True, localize=True)
|
||||||
unit_price_ext = forms.FloatField(required=True, localize=True)
|
|
||||||
|
|
||||||
|
|
||||||
class DepositForm(forms.ModelForm):
|
class DepositForm(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Transaction
|
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"))
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
__author__ = 'Nikolai'
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
__author__ = 'Nikolai'
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
# 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()
|
|
||||||
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
# -*- 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,150 +1,76 @@
|
|||||||
from __future__ import unicode_literals
|
from django.contrib.auth.models import User
|
||||||
|
from django.db import models
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.dispatch import receiver
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import models
|
|
||||||
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):
|
class Product(models.Model):
|
||||||
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)
|
|
||||||
|
|
||||||
@property
|
def __unicode__(self):
|
||||||
def wholesale_unit_price(self):
|
return self.name
|
||||||
"""
|
|
||||||
This is not accurate.
|
|
||||||
"""
|
|
||||||
if self.inventory_amount <= 0:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
unit_prices = self.transactions.order_by('created').values('amount', 'unit_price')
|
name = models.CharField(max_length=64)
|
||||||
sum_units = 0
|
sale_price_int = models.FloatField()
|
||||||
for up in unit_prices:
|
sale_price_ext = models.FloatField()
|
||||||
sum_units += up['amount']
|
description = models.CharField(max_length=256, blank=True)
|
||||||
if self.inventory_amount <= sum_units:
|
volume_liter = models.FloatField(null=True)
|
||||||
return up['unit_price']
|
alcohol_percent = models.FloatField(null=True)
|
||||||
|
image = models.ImageField(upload_to='products', blank=True)
|
||||||
|
customer_support = models.CharField(max_length=32, blank=True)
|
||||||
|
active = models.BooleanField(default=True)
|
||||||
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
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):
|
class Order(models.Model):
|
||||||
customer = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='orders')
|
customer = models.ForeignKey(User)
|
||||||
order_sum = models.FloatField(db_column='sum')
|
order_sum = models.FloatField(db_column='sum')
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
def is_external(self):
|
def __unicode__(self):
|
||||||
return self.customer is None
|
return "{0}: {1} kr".format(self.customer, self.order_sum)
|
||||||
|
|
||||||
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):
|
class OrderLine(models.Model):
|
||||||
order = models.ForeignKey('main.Order', related_name='orderlines')
|
order = models.ForeignKey(Order)
|
||||||
product = models.ForeignKey('main.Product', related_name='orderlines')
|
product = models.ForeignKey(Product)
|
||||||
amount = models.IntegerField()
|
amount = models.IntegerField()
|
||||||
unit_price = models.FloatField(verbose_name=_('Enhetspris'))
|
unit_price = models.FloatField()
|
||||||
|
|
||||||
@property
|
def __unicode__(self):
|
||||||
def price(self):
|
return u"{1} {0} ({2} kr per)".format(self.product, self.amount, self.unit_price)
|
||||||
return self.amount * self.unit_price
|
|
||||||
|
|
||||||
def __str__(self):
|
class Meta:
|
||||||
return "{} {} ({} kr per)".format(self.amount, self.product, self.unit_price)
|
unique_together = ('order', 'product')
|
||||||
|
|
||||||
class Meta:
|
|
||||||
unique_together = ('order', 'product')
|
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
|
||||||
class Transaction(models.Model):
|
class Transaction(models.Model):
|
||||||
""" Money """
|
user = models.ForeignKey(User)
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='transactions')
|
amount = models.FloatField()
|
||||||
amount = models.FloatField()
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __unicode__(self):
|
||||||
return "{}: {}: {}".format(self.id, self.user, self.amount)
|
return "{0}: {1}: {2}".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):
|
class UserProfile(models.Model):
|
||||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile')
|
user = models.OneToOneField(User)
|
||||||
balance = models.FloatField(default=0.0)
|
balance = models.FloatField(default=0.0)
|
||||||
image = models.URLField(blank=True)
|
image = models.ImageField(upload_to='users', blank=True)
|
||||||
|
|
||||||
def last_purchase(self):
|
def last_purchase(self):
|
||||||
if len(self.user.orders.all()) == 0:
|
if len(self.user.order_set.all()) == 0:
|
||||||
return None
|
return None
|
||||||
|
return self.user.order_set.order_by('created').reverse()[0]
|
||||||
|
|
||||||
return self.user.orders.order_by('-created')[0]
|
def last_purchase_date(self):
|
||||||
|
last = self.last_purchase()
|
||||||
|
if last:
|
||||||
|
return last.created
|
||||||
|
else:
|
||||||
|
return datetime.min
|
||||||
|
|
||||||
def last_purchase_date(self):
|
def __unicode__(self):
|
||||||
last = self.last_purchase()
|
return "{0}".format(self.user)
|
||||||
last_p = last.created if last else datetime.min
|
|
||||||
return last_p
|
|
||||||
|
|
||||||
def profile_image_url(self):
|
# Create a new UserProfile object when we create a new User.
|
||||||
from django.templatetags.static import static
|
@receiver(post_save, sender=User, dispatch_uid='randomz')
|
||||||
|
def create_user_profile(sender, instance, created, **kwargs):
|
||||||
if not self.image:
|
if created:
|
||||||
return static('dist/images/unknown_person.png')
|
UserProfile.objects.create(user=instance)
|
||||||
|
|
||||||
return self.image
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "{}".format(self.user)
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
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,44 +1,17 @@
|
|||||||
from django.conf.urls import url, patterns
|
from django.conf.urls.defaults import patterns, include, url
|
||||||
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 = [
|
urlpatterns = patterns('main.views',
|
||||||
url(r'^$', register, name='home'),
|
url(r'^register/$', 'register', name='register'),
|
||||||
url(r'^register/$', register, name='register'),
|
url(r'^deposit/$', 'deposit', name='deposit'),
|
||||||
url(r'^deposit/$', deposit, name='deposit'),
|
url(r'^log/$', 'log', name='log'),
|
||||||
url(r'^log/$', log, name='log'),
|
url(r'^log/all$', 'log', kwargs={'limit': None}, name='log-all'),
|
||||||
url(r'^log/all$', log, kwargs={'limit': None}, name='log-all'),
|
url(r'^stats/$', 'stats', name='stats'),
|
||||||
# Users
|
url(r'^stats/orders/$', 'stats_orders', name='stats-orders'),
|
||||||
url(r'^user/create/$', create_user, name='create-user'),
|
url(r'^stats/orders/hourly$', 'stats_orders_hourly', name='stats-orders-hourly'),
|
||||||
url(r'^profile/$', profile, name='profile'),
|
url(r'^stats/orders/products_realtime$', 'stats_products_realtime', name='stats-products-realtime'),
|
||||||
# Reports
|
url(r'^stats/products/$', 'stats_products', name='stats-products'),
|
||||||
url(r'^inventory/$', inventory, name='inventory'),
|
url(r'^stats/products/(?P<product>[0-9]+)/$', 'stats_products', name='stats-product'),
|
||||||
url(r'^inventory/add/$', inventory_add, name='inventory-add'),
|
url(r'^products/(?P<product_id>[0-9]+)/$', 'products', name='json-product'),
|
||||||
url(r'^report$', report, name='report'),
|
url(r'^products/$', 'products', name='json-products'),
|
||||||
|
url(r'^order/(?P<order>[0-9]+)/$', 'order_reciept', name='order_reciept'),
|
||||||
]
|
|
||||||
# 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
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -0,0 +1,274 @@
|
|||||||
|
# coding: utf-8
|
||||||
|
from datetime import datetime
|
||||||
|
from datetime import timedelta
|
||||||
|
from itertools import groupby
|
||||||
|
import simplejson as json
|
||||||
|
import time
|
||||||
|
|
||||||
|
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 django.contrib import messages
|
||||||
|
from django.db.models import Count, Sum
|
||||||
|
|
||||||
|
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('main.views.register') )
|
||||||
|
else:
|
||||||
|
form = AuthenticationForm(request)
|
||||||
|
return render_to_response('home.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def register(request):
|
||||||
|
products = Product.objects.filter(active=True)
|
||||||
|
users = User.objects.filter(userprofile__balance__gt=0)
|
||||||
|
# sort users after user's last purchase time
|
||||||
|
users = sorted(users, key=lambda u: u.get_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_sum = sum([ol['amount'] * ol['unit_price'] for ol in formset.cleaned_data])
|
||||||
|
order = orderform.save(commit=False)
|
||||||
|
# can he afford it?
|
||||||
|
profile = order.customer.get_profile()
|
||||||
|
if order_sum > profile.balance:
|
||||||
|
messages.error(request, '{0} har ikke råd, mangler {1} kr.'.format(
|
||||||
|
order.customer,
|
||||||
|
int(order_sum - profile.balance)))
|
||||||
|
return HttpResponseRedirect( reverse('main.views.register') )
|
||||||
|
# empty order?
|
||||||
|
if order_sum == 0:
|
||||||
|
messages.error(request, 'Du har ikke valgt hva du skal kjøpe...')
|
||||||
|
return HttpResponseRedirect( reverse('main.views.register') )
|
||||||
|
order.order_sum = order_sum
|
||||||
|
order.save()
|
||||||
|
# substract order from balance
|
||||||
|
profile.balance -= order.order_sum
|
||||||
|
profile.save()
|
||||||
|
|
||||||
|
orderlines = []
|
||||||
|
for ol in formset.cleaned_data:
|
||||||
|
if ol['amount'] > 0:
|
||||||
|
product = Product.objects.get(pk=ol['product'])
|
||||||
|
OrderLine.objects.create(
|
||||||
|
order=order,
|
||||||
|
product=product,
|
||||||
|
amount=ol['amount'],
|
||||||
|
unit_price=ol['unit_price'])
|
||||||
|
|
||||||
|
orderlines.append(str(ol['amount']) + " " + str(product))
|
||||||
|
|
||||||
|
messages.success(request, '{0} kjøpte {1}.'.format(order.customer, ", ".join(orderlines)))
|
||||||
|
return HttpResponseRedirect( reverse('main.views.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_to_response('register.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def deposit(request):
|
||||||
|
users = User.objects.all().order_by('first_name','last_name')
|
||||||
|
users_js = users_format_js(users)
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
form = DepositForm(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
transaction = form.save()
|
||||||
|
profile = transaction.user.get_profile()
|
||||||
|
profile.balance += transaction.amount
|
||||||
|
profile.save()
|
||||||
|
|
||||||
|
messages.success(request, '{0} satte inn {1} kr. Ny saldo er {2}'.format(
|
||||||
|
transaction.user,
|
||||||
|
transaction.amount,
|
||||||
|
profile.balance))
|
||||||
|
return HttpResponseRedirect( reverse('main.views.deposit') )
|
||||||
|
else:
|
||||||
|
messages.error(request, 'Skjemaet er ikke gyldig.')
|
||||||
|
form = DepositForm(request.POST)
|
||||||
|
else:
|
||||||
|
form = DepositForm()
|
||||||
|
|
||||||
|
return render_to_response('deposit.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
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_to_response('log.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def stats(request):
|
||||||
|
products = Product.objects.filter(active=True)
|
||||||
|
|
||||||
|
return render_to_response('stats.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def serialize_product(product):
|
||||||
|
f_product = {}
|
||||||
|
for attr in Product._meta.get_all_field_names():
|
||||||
|
if hasattr(product, attr) and product.__getattribute__(attr):
|
||||||
|
if type(product.__getattribute__(attr)) is datetime:
|
||||||
|
f_product[attr] = str(product.__getattribute__(attr))
|
||||||
|
else:
|
||||||
|
f_product[attr] = product.__getattribute__(attr)
|
||||||
|
return f_product
|
||||||
|
|
||||||
|
def products(request, product_id=None):
|
||||||
|
if product_id:
|
||||||
|
#single
|
||||||
|
products = get_object_or_404(Product, pk=product_id)
|
||||||
|
else:
|
||||||
|
#many
|
||||||
|
products = Product.objects.filter(active=True)
|
||||||
|
|
||||||
|
if product_id:
|
||||||
|
f_products = serialize_product(products)
|
||||||
|
else:
|
||||||
|
f_products = [serialize_product(product) for product in products]
|
||||||
|
|
||||||
|
return HttpResponse(json.dumps(f_products), content_type='application/javascript; charset=utf8')
|
||||||
|
|
||||||
|
def stats_product(product):
|
||||||
|
sales = OrderLine.objects.filter(product=product)
|
||||||
|
# reverse lookup via order, customer
|
||||||
|
per_user = sales.values('order__customer__first_name','order__customer__last_name').annotate(num=Sum('amount')).order_by('num').reverse()
|
||||||
|
f_per_user = []
|
||||||
|
for row in per_user:
|
||||||
|
who = row['order__customer__first_name'] + " " + row['order__customer__last_name']
|
||||||
|
num = row['num']
|
||||||
|
f_per_user.append([who, num])
|
||||||
|
response = {
|
||||||
|
'product' : serialize_product(Product.objects.get(pk=product)) if type(product) is unicode else serialize_product(product),
|
||||||
|
'counts' : f_per_user,
|
||||||
|
'total_counts' : sum([row['num'] for row in per_user]),
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
|
||||||
|
def stats_products(request, product=None):
|
||||||
|
if product:
|
||||||
|
#single
|
||||||
|
f_products = [stats_product(product)]
|
||||||
|
sales = OrderLine.objects.filter(product=product)
|
||||||
|
else:
|
||||||
|
#all
|
||||||
|
sales = OrderLine.objects.filter(product__active=True)
|
||||||
|
f_products = [stats_product(p) for p in Product.objects.filter(active=True)]
|
||||||
|
|
||||||
|
totals = float(sum([sale.amount for sale in sales]))
|
||||||
|
response = {
|
||||||
|
'request' : 'all' if not product else product,
|
||||||
|
'response' : {
|
||||||
|
'products' : f_products,
|
||||||
|
'total_count' : totals,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HttpResponse(json.dumps(response), content_type='application/javascript; charset=utf8')
|
||||||
|
|
||||||
|
def stats_orders(request):
|
||||||
|
total = float(Order.objects.count())
|
||||||
|
per_user = Order.objects.values('customer__first_name','customer__last_name').annotate(num=Count('customer')).order_by('num').reverse()
|
||||||
|
f_per_user = []
|
||||||
|
for row in per_user:
|
||||||
|
who = row['customer__first_name'] + " " + row['customer__last_name']
|
||||||
|
num = row['num']
|
||||||
|
f_per_user.append([who, num])
|
||||||
|
return HttpResponse(json.dumps(f_per_user), content_type='application/javascript; charset=utf8')
|
||||||
|
|
||||||
|
def stats_orders_hourly(request):
|
||||||
|
orders = Order.objects.all()
|
||||||
|
f_hourly = dict([(key,0) for key in range(0,24)]) # init
|
||||||
|
# group by hour
|
||||||
|
for key, values in groupby(orders, key=lambda row: row.created.hour):
|
||||||
|
count = len(list(values))
|
||||||
|
f_hourly[key] = f_hourly[key] + count
|
||||||
|
|
||||||
|
response = {
|
||||||
|
'start': str(orders[0].created),
|
||||||
|
'hourly' : [[k,v] for k,v in f_hourly.iteritems()],
|
||||||
|
'total' : sum(f_hourly.values()),
|
||||||
|
}
|
||||||
|
return HttpResponse(json.dumps(response), content_type='application/javascript; charset=utf8')
|
||||||
|
|
||||||
|
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.iteritems():
|
||||||
|
serialized_products[product.name] = value
|
||||||
|
|
||||||
|
response = {
|
||||||
|
'products': serialized_products
|
||||||
|
}
|
||||||
|
|
||||||
|
return HttpResponse(json.dumps(response), content_type='application/javascript; charset=utf8')
|
||||||
|
|
||||||
|
|
||||||
|
def logout(request):
|
||||||
|
auth_logout(request)
|
||||||
|
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def users_format_js(users):
|
||||||
|
users_js = []
|
||||||
|
for user in users:
|
||||||
|
users_js.append('"' + user.first_name + ' ' + user.last_name[:1] + '"')
|
||||||
|
users_js = u"[{0}]".format(u",".join(users_js))
|
||||||
|
return users_js
|
||||||
|
|
||||||
|
def order_reciept(request, order):
|
||||||
|
order = Order.objects.get(pk=order)
|
||||||
|
orderlines = OrderLine.objects.filter(order=order)
|
||||||
|
for line in orderlines:
|
||||||
|
line.tot = line.amount * line.unit_price
|
||||||
|
|
||||||
|
print order.order_sum
|
||||||
|
|
||||||
|
return render_to_response('order_reciept.html', locals(), context_instance=RequestContext(request))
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
# 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())
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
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())
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
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)
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
# 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,10 +1,14 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import os
|
from django.core.management import execute_manager
|
||||||
import sys
|
import imp
|
||||||
|
try:
|
||||||
|
imp.find_module('settings') # Assumed to be in the same directory.
|
||||||
|
except ImportError:
|
||||||
|
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__":
|
if __name__ == "__main__":
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bbssite.settings")
|
execute_manager(settings)
|
||||||
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
|
|
||||||
execute_from_command_line(sys.argv)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
This script fetches the members of the KAK facebook group, matches names against the local db, and then saves the users facebook-picture in his/her user profile.
|
||||||
|
|
||||||
|
REQ:
|
||||||
|
https://github.com/iplatform/pyFaceGraph
|
||||||
|
INSTALL:
|
||||||
|
$ pip install pyfacegraph
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os,sys,difflib
|
||||||
|
from facegraph import Graph
|
||||||
|
|
||||||
|
ACCESS_TOKEN = ''
|
||||||
|
PATH = '.'
|
||||||
|
KAK_GROUP_ID = '108265352570560'
|
||||||
|
if PATH not in sys.path:
|
||||||
|
sys.path.append(PATH)
|
||||||
|
|
||||||
|
from django.core.management import setup_environ
|
||||||
|
import settings
|
||||||
|
|
||||||
|
setup_environ(settings)
|
||||||
|
|
||||||
|
from main.models import *
|
||||||
|
|
||||||
|
g = Graph(ACCESS_TOKEN)
|
||||||
|
members = g[KAK_GROUP_ID]['members']()
|
||||||
|
group_members = [(member.name,member.id) for member in members.data]
|
||||||
|
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.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]])
|
||||||
|
# Note: This is not correct, image is only kind of a textfield
|
||||||
|
u.image = 'https://graph.facebook.com/{0}/picture'.format(member[1])
|
||||||
|
u.save()
|
||||||
|
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
# 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 = 'Europe/Oslo'
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'no-nb'
|
||||||
|
|
||||||
|
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',
|
||||||
|
)
|
||||||
|
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Gravatar
|
||||||
|
GRAVATAR_DEFAULT_IMAGE = 'mm'
|
||||||
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,180 +0,0 @@
|
|||||||
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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/* 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
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
|
|
||||||
/* 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();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,790 +0,0 @@
|
|||||||
/*!
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
@mixin inline-block-list() {
|
|
||||||
clear: both;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
li {
|
|
||||||
list-style: none;
|
|
||||||
display: inline-block;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,606 +0,0 @@
|
|||||||
// 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;
|
|
||||||
@@ -1,219 +0,0 @@
|
|||||||
@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%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
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);
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"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": {}
|
|
||||||
}
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
<?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>
|
|
||||||
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 923 B |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 98 B |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 977 B |
@@ -1,10 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,222 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
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);
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
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
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Require any additional compass plugins here.
|
||||||
|
require 'compass_twitter_bootstrap'
|
||||||
|
|
||||||
|
# Set this to the root of your project when deployed:
|
||||||
|
http_path = "/static/"
|
||||||
|
css_dir = "stylesheets"
|
||||||
|
sass_dir = "sass"
|
||||||
|
images_dir = "gaute/img"
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
@@ -0,0 +1 @@
|
|||||||
|
@import "compass_twitter_bootstrap";
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
@import "compass";
|
||||||
|
@import "compass_twitter_bootstrap";
|
||||||
|
@import "compass_twitter_bootstrap_responsive";
|
||||||
|
|
||||||
|
body {
|
||||||
|
|
||||||
|
#header {
|
||||||
|
}
|
||||||
|
|
||||||
|
#customer {
|
||||||
|
ul {
|
||||||
|
@include inline-block-list;
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
text-align: center;
|
||||||
|
width: 79px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #dddddd;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
&.marked {
|
||||||
|
color: #468847;
|
||||||
|
background-color: #DFF0D8;
|
||||||
|
}
|
||||||
|
.name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#register {
|
||||||
|
#products {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#total {
|
||||||
|
div {
|
||||||
|
color: #ffffff;
|
||||||
|
background-color: #222;
|
||||||
|
padding: 10px;
|
||||||
|
min-width:115px;
|
||||||
|
h2 {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input[name=customer_name] {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
margin-top:10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#log {
|
||||||
|
h2 {
|
||||||
|
display:inline-block;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
tr{
|
||||||
|
text-align: middle;
|
||||||
|
}
|
||||||
|
.amount {
|
||||||
|
font-size: 2em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
section {
|
||||||
|
margin-bottom:2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
'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);
|
|
||||||
});
|
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
/* ==========================================================
|
||||||
|
* bootstrap-alert.js v2.0.0
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
||||||
|
* ==========================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ){
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
/* ALERT CLASS DEFINITION
|
||||||
|
* ====================== */
|
||||||
|
|
||||||
|
var dismiss = '[data-dismiss="alert"]'
|
||||||
|
, Alert = function ( el ) {
|
||||||
|
$(el).on('click', dismiss, this.close)
|
||||||
|
}
|
||||||
|
|
||||||
|
Alert.prototype = {
|
||||||
|
|
||||||
|
constructor: Alert
|
||||||
|
|
||||||
|
, close: function ( e ) {
|
||||||
|
var $this = $(this)
|
||||||
|
, selector = $this.attr('data-target')
|
||||||
|
, $parent
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = $this.attr('href')
|
||||||
|
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||||
|
}
|
||||||
|
|
||||||
|
$parent = $(selector)
|
||||||
|
$parent.trigger('close')
|
||||||
|
|
||||||
|
e && e.preventDefault()
|
||||||
|
|
||||||
|
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
|
||||||
|
|
||||||
|
$parent.removeClass('in')
|
||||||
|
|
||||||
|
function removeElement() {
|
||||||
|
$parent.remove()
|
||||||
|
$parent.trigger('closed')
|
||||||
|
}
|
||||||
|
|
||||||
|
$.support.transition && $parent.hasClass('fade') ?
|
||||||
|
$parent.on($.support.transition.end, removeElement) :
|
||||||
|
removeElement()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ALERT PLUGIN DEFINITION
|
||||||
|
* ======================= */
|
||||||
|
|
||||||
|
$.fn.alert = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('alert')
|
||||||
|
if (!data) $this.data('alert', (data = new Alert(this)))
|
||||||
|
if (typeof option == 'string') data[option].call($this)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.alert.Constructor = Alert
|
||||||
|
|
||||||
|
|
||||||
|
/* ALERT DATA-API
|
||||||
|
* ============== */
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery )
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
/* =============================================================
|
||||||
|
* bootstrap-collapse.js v2.0.0
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#collapse
|
||||||
|
* =============================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ){
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
var Collapse = function ( element, options ) {
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = $.extend({}, $.fn.collapse.defaults, options)
|
||||||
|
|
||||||
|
if (this.options["parent"]) {
|
||||||
|
this.$parent = $(this.options["parent"])
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options.toggle && this.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype = {
|
||||||
|
|
||||||
|
constructor: Collapse
|
||||||
|
|
||||||
|
, dimension: function () {
|
||||||
|
var hasWidth = this.$element.hasClass('width')
|
||||||
|
return hasWidth ? 'width' : 'height'
|
||||||
|
}
|
||||||
|
|
||||||
|
, show: function () {
|
||||||
|
var dimension = this.dimension()
|
||||||
|
, scroll = $.camelCase(['scroll', dimension].join('-'))
|
||||||
|
, actives = this.$parent && this.$parent.find('.in')
|
||||||
|
, hasData
|
||||||
|
|
||||||
|
if (actives && actives.length) {
|
||||||
|
hasData = actives.data('collapse')
|
||||||
|
actives.collapse('hide')
|
||||||
|
hasData || actives.data('collapse', null)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$element[dimension](0)
|
||||||
|
this.transition('addClass', 'show', 'shown')
|
||||||
|
this.$element[dimension](this.$element[0][scroll])
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
, hide: function () {
|
||||||
|
var dimension = this.dimension()
|
||||||
|
this.reset(this.$element[dimension]())
|
||||||
|
this.transition('removeClass', 'hide', 'hidden')
|
||||||
|
this.$element[dimension](0)
|
||||||
|
}
|
||||||
|
|
||||||
|
, reset: function ( size ) {
|
||||||
|
var dimension = this.dimension()
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.removeClass('collapse')
|
||||||
|
[dimension](size || 'auto')
|
||||||
|
[0].offsetWidth
|
||||||
|
|
||||||
|
this.$element.addClass('collapse')
|
||||||
|
}
|
||||||
|
|
||||||
|
, transition: function ( method, startEvent, completeEvent ) {
|
||||||
|
var that = this
|
||||||
|
, complete = function () {
|
||||||
|
if (startEvent == 'show') that.reset()
|
||||||
|
that.$element.trigger(completeEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.trigger(startEvent)
|
||||||
|
[method]('in')
|
||||||
|
|
||||||
|
$.support.transition && this.$element.hasClass('collapse') ?
|
||||||
|
this.$element.one($.support.transition.end, complete) :
|
||||||
|
complete()
|
||||||
|
}
|
||||||
|
|
||||||
|
, toggle: function () {
|
||||||
|
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* COLLAPSIBLE PLUGIN DEFINITION
|
||||||
|
* ============================== */
|
||||||
|
|
||||||
|
$.fn.collapse = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('collapse')
|
||||||
|
, options = typeof option == 'object' && option
|
||||||
|
if (!data) $this.data('collapse', (data = new Collapse(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.collapse.defaults = {
|
||||||
|
toggle: true
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.collapse.Constructor = Collapse
|
||||||
|
|
||||||
|
|
||||||
|
/* COLLAPSIBLE DATA-API
|
||||||
|
* ==================== */
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
|
||||||
|
var $this = $(this), href
|
||||||
|
, target = $this.attr('data-target')
|
||||||
|
|| e.preventDefault()
|
||||||
|
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||||
|
, option = $(target).data('collapse') ? 'toggle' : $this.data()
|
||||||
|
$(target).collapse(option)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery )
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
/* =========================================================
|
||||||
|
* bootstrap-modal.js v2.0.2
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#modals
|
||||||
|
* =========================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ){
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
/* MODAL CLASS DEFINITION
|
||||||
|
* ====================== */
|
||||||
|
|
||||||
|
var Modal = function ( content, options ) {
|
||||||
|
this.options = options
|
||||||
|
this.$element = $(content)
|
||||||
|
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype = {
|
||||||
|
|
||||||
|
constructor: Modal
|
||||||
|
|
||||||
|
, toggle: function () {
|
||||||
|
return this[!this.isShown ? 'show' : 'hide']()
|
||||||
|
}
|
||||||
|
|
||||||
|
, show: function () {
|
||||||
|
var that = this
|
||||||
|
|
||||||
|
if (this.isShown) return
|
||||||
|
|
||||||
|
$('body').addClass('modal-open')
|
||||||
|
|
||||||
|
this.isShown = true
|
||||||
|
this.$element.trigger('show')
|
||||||
|
|
||||||
|
escape.call(this)
|
||||||
|
backdrop.call(this, function () {
|
||||||
|
var transition = $.support.transition && that.$element.hasClass('fade')
|
||||||
|
|
||||||
|
!that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
|
||||||
|
|
||||||
|
that.$element
|
||||||
|
.show()
|
||||||
|
|
||||||
|
if (transition) {
|
||||||
|
that.$element[0].offsetWidth // force reflow
|
||||||
|
}
|
||||||
|
|
||||||
|
that.$element.addClass('in')
|
||||||
|
|
||||||
|
transition ?
|
||||||
|
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
|
||||||
|
that.$element.trigger('shown')
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
, hide: function ( e ) {
|
||||||
|
e && e.preventDefault()
|
||||||
|
|
||||||
|
if (!this.isShown) return
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
this.isShown = false
|
||||||
|
|
||||||
|
$('body').removeClass('modal-open')
|
||||||
|
|
||||||
|
escape.call(this)
|
||||||
|
|
||||||
|
this.$element
|
||||||
|
.trigger('hide')
|
||||||
|
.removeClass('in')
|
||||||
|
|
||||||
|
$.support.transition && this.$element.hasClass('fade') ?
|
||||||
|
hideWithTransition.call(this) :
|
||||||
|
hideModal.call(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* MODAL PRIVATE METHODS
|
||||||
|
* ===================== */
|
||||||
|
|
||||||
|
function hideWithTransition() {
|
||||||
|
var that = this
|
||||||
|
, timeout = setTimeout(function () {
|
||||||
|
that.$element.off($.support.transition.end)
|
||||||
|
hideModal.call(that)
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
this.$element.one($.support.transition.end, function () {
|
||||||
|
clearTimeout(timeout)
|
||||||
|
hideModal.call(that)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideModal( that ) {
|
||||||
|
this.$element
|
||||||
|
.hide()
|
||||||
|
.trigger('hidden')
|
||||||
|
|
||||||
|
backdrop.call(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
function backdrop( callback ) {
|
||||||
|
var that = this
|
||||||
|
, animate = this.$element.hasClass('fade') ? 'fade' : ''
|
||||||
|
|
||||||
|
if (this.isShown && this.options.backdrop) {
|
||||||
|
var doAnimate = $.support.transition && animate
|
||||||
|
|
||||||
|
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
||||||
|
.appendTo(document.body)
|
||||||
|
|
||||||
|
if (this.options.backdrop != 'static') {
|
||||||
|
this.$backdrop.click($.proxy(this.hide, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
||||||
|
|
||||||
|
this.$backdrop.addClass('in')
|
||||||
|
|
||||||
|
doAnimate ?
|
||||||
|
this.$backdrop.one($.support.transition.end, callback) :
|
||||||
|
callback()
|
||||||
|
|
||||||
|
} else if (!this.isShown && this.$backdrop) {
|
||||||
|
this.$backdrop.removeClass('in')
|
||||||
|
|
||||||
|
$.support.transition && this.$element.hasClass('fade')?
|
||||||
|
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
|
||||||
|
removeBackdrop.call(this)
|
||||||
|
|
||||||
|
} else if (callback) {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeBackdrop() {
|
||||||
|
this.$backdrop.remove()
|
||||||
|
this.$backdrop = null
|
||||||
|
}
|
||||||
|
|
||||||
|
function escape() {
|
||||||
|
var that = this
|
||||||
|
if (this.isShown && this.options.keyboard) {
|
||||||
|
$(document).on('keyup.dismiss.modal', function ( e ) {
|
||||||
|
e.which == 27 && that.hide()
|
||||||
|
})
|
||||||
|
} else if (!this.isShown) {
|
||||||
|
$(document).off('keyup.dismiss.modal')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* MODAL PLUGIN DEFINITION
|
||||||
|
* ======================= */
|
||||||
|
|
||||||
|
$.fn.modal = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('modal')
|
||||||
|
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
|
||||||
|
if (!data) $this.data('modal', (data = new Modal(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
else if (options.show) data.show()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.modal.defaults = {
|
||||||
|
backdrop: true
|
||||||
|
, keyboard: true
|
||||||
|
, show: true
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.modal.Constructor = Modal
|
||||||
|
|
||||||
|
|
||||||
|
/* MODAL DATA-API
|
||||||
|
* ============== */
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
|
||||||
|
var $this = $(this), href
|
||||||
|
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||||
|
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
$target.modal(option)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery );
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
/* ===========================================================
|
||||||
|
* bootstrap-popover.js v2.0.0
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#popovers
|
||||||
|
* ===========================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ) {
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
var Popover = function ( element, options ) {
|
||||||
|
this.init('popover', element, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
|
||||||
|
========================================== */
|
||||||
|
|
||||||
|
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
|
||||||
|
|
||||||
|
constructor: Popover
|
||||||
|
|
||||||
|
, setContent: function () {
|
||||||
|
var $tip = this.tip()
|
||||||
|
, title = this.getTitle()
|
||||||
|
, content = this.getContent()
|
||||||
|
|
||||||
|
$tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
|
||||||
|
$tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
|
||||||
|
|
||||||
|
$tip.removeClass('fade top bottom left right in')
|
||||||
|
}
|
||||||
|
|
||||||
|
, hasContent: function () {
|
||||||
|
return this.getTitle() || this.getContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
, getContent: function () {
|
||||||
|
var content
|
||||||
|
, $e = this.$element
|
||||||
|
, o = this.options
|
||||||
|
|
||||||
|
content = $e.attr('data-content')
|
||||||
|
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
||||||
|
|
||||||
|
content = content.toString().replace(/(^\s*|\s*$)/, "")
|
||||||
|
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
|
||||||
|
, tip: function() {
|
||||||
|
if (!this.$tip) {
|
||||||
|
this.$tip = $(this.options.template)
|
||||||
|
}
|
||||||
|
return this.$tip
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
/* POPOVER PLUGIN DEFINITION
|
||||||
|
* ======================= */
|
||||||
|
|
||||||
|
$.fn.popover = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('popover')
|
||||||
|
, options = typeof option == 'object' && option
|
||||||
|
if (!data) $this.data('popover', (data = new Popover(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.popover.Constructor = Popover
|
||||||
|
|
||||||
|
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
|
||||||
|
placement: 'right'
|
||||||
|
, content: ''
|
||||||
|
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery )
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
/* ===========================================================
|
||||||
|
* bootstrap-tooltip.js v2.0.0
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#tooltips
|
||||||
|
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||||
|
* ===========================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ) {
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
/* TOOLTIP PUBLIC CLASS DEFINITION
|
||||||
|
* =============================== */
|
||||||
|
|
||||||
|
var Tooltip = function ( element, options ) {
|
||||||
|
this.init('tooltip', element, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype = {
|
||||||
|
|
||||||
|
constructor: Tooltip
|
||||||
|
|
||||||
|
, init: function ( type, element, options ) {
|
||||||
|
var eventIn
|
||||||
|
, eventOut
|
||||||
|
|
||||||
|
this.type = type
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = this.getOptions(options)
|
||||||
|
this.enabled = true
|
||||||
|
|
||||||
|
if (this.options.trigger != 'manual') {
|
||||||
|
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
|
||||||
|
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
|
||||||
|
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
|
||||||
|
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options.selector ?
|
||||||
|
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||||
|
this.fixTitle()
|
||||||
|
}
|
||||||
|
|
||||||
|
, getOptions: function ( options ) {
|
||||||
|
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
|
||||||
|
|
||||||
|
if (options.delay && typeof options.delay == 'number') {
|
||||||
|
options.delay = {
|
||||||
|
show: options.delay
|
||||||
|
, hide: options.delay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
|
, enter: function ( e ) {
|
||||||
|
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
||||||
|
|
||||||
|
if (!self.options.delay || !self.options.delay.show) {
|
||||||
|
self.show()
|
||||||
|
} else {
|
||||||
|
self.hoverState = 'in'
|
||||||
|
setTimeout(function() {
|
||||||
|
if (self.hoverState == 'in') {
|
||||||
|
self.show()
|
||||||
|
}
|
||||||
|
}, self.options.delay.show)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, leave: function ( e ) {
|
||||||
|
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
||||||
|
|
||||||
|
if (!self.options.delay || !self.options.delay.hide) {
|
||||||
|
self.hide()
|
||||||
|
} else {
|
||||||
|
self.hoverState = 'out'
|
||||||
|
setTimeout(function() {
|
||||||
|
if (self.hoverState == 'out') {
|
||||||
|
self.hide()
|
||||||
|
}
|
||||||
|
}, self.options.delay.hide)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, show: function () {
|
||||||
|
var $tip
|
||||||
|
, inside
|
||||||
|
, pos
|
||||||
|
, actualWidth
|
||||||
|
, actualHeight
|
||||||
|
, placement
|
||||||
|
, tp
|
||||||
|
|
||||||
|
if (this.hasContent() && this.enabled) {
|
||||||
|
$tip = this.tip()
|
||||||
|
this.setContent()
|
||||||
|
|
||||||
|
if (this.options.animation) {
|
||||||
|
$tip.addClass('fade')
|
||||||
|
}
|
||||||
|
|
||||||
|
placement = typeof this.options.placement == 'function' ?
|
||||||
|
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||||
|
this.options.placement
|
||||||
|
|
||||||
|
inside = /in/.test(placement)
|
||||||
|
|
||||||
|
$tip
|
||||||
|
.remove()
|
||||||
|
.css({ top: 0, left: 0, display: 'block' })
|
||||||
|
.appendTo(inside ? this.$element : document.body)
|
||||||
|
|
||||||
|
pos = this.getPosition(inside)
|
||||||
|
|
||||||
|
actualWidth = $tip[0].offsetWidth
|
||||||
|
actualHeight = $tip[0].offsetHeight
|
||||||
|
|
||||||
|
switch (inside ? placement.split(' ')[1] : placement) {
|
||||||
|
case 'bottom':
|
||||||
|
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||||
|
break
|
||||||
|
case 'top':
|
||||||
|
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||||
|
break
|
||||||
|
case 'left':
|
||||||
|
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
|
||||||
|
break
|
||||||
|
case 'right':
|
||||||
|
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
$tip
|
||||||
|
.css(tp)
|
||||||
|
.addClass(placement)
|
||||||
|
.addClass('in')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, setContent: function () {
|
||||||
|
var $tip = this.tip()
|
||||||
|
$tip.find('.tooltip-inner').html(this.getTitle())
|
||||||
|
$tip.removeClass('fade in top bottom left right')
|
||||||
|
}
|
||||||
|
|
||||||
|
, hide: function () {
|
||||||
|
var that = this
|
||||||
|
, $tip = this.tip()
|
||||||
|
|
||||||
|
$tip.removeClass('in')
|
||||||
|
|
||||||
|
function removeWithAnimation() {
|
||||||
|
var timeout = setTimeout(function () {
|
||||||
|
$tip.off($.support.transition.end).remove()
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
$tip.one($.support.transition.end, function () {
|
||||||
|
clearTimeout(timeout)
|
||||||
|
$tip.remove()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.support.transition && this.$tip.hasClass('fade') ?
|
||||||
|
removeWithAnimation() :
|
||||||
|
$tip.remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
, fixTitle: function () {
|
||||||
|
var $e = this.$element
|
||||||
|
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
||||||
|
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, hasContent: function () {
|
||||||
|
return this.getTitle()
|
||||||
|
}
|
||||||
|
|
||||||
|
, getPosition: function (inside) {
|
||||||
|
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
|
||||||
|
width: this.$element[0].offsetWidth
|
||||||
|
, height: this.$element[0].offsetHeight
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
, getTitle: function () {
|
||||||
|
var title
|
||||||
|
, $e = this.$element
|
||||||
|
, o = this.options
|
||||||
|
|
||||||
|
title = $e.attr('data-original-title')
|
||||||
|
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||||
|
|
||||||
|
title = title.toString().replace(/(^\s*|\s*$)/, "")
|
||||||
|
|
||||||
|
return title
|
||||||
|
}
|
||||||
|
|
||||||
|
, tip: function () {
|
||||||
|
return this.$tip = this.$tip || $(this.options.template)
|
||||||
|
}
|
||||||
|
|
||||||
|
, validate: function () {
|
||||||
|
if (!this.$element[0].parentNode) {
|
||||||
|
this.hide()
|
||||||
|
this.$element = null
|
||||||
|
this.options = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, enable: function () {
|
||||||
|
this.enabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
, disable: function () {
|
||||||
|
this.enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
, toggleEnabled: function () {
|
||||||
|
this.enabled = !this.enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
, toggle: function () {
|
||||||
|
this[this.tip().hasClass('in') ? 'hide' : 'show']()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* TOOLTIP PLUGIN DEFINITION
|
||||||
|
* ========================= */
|
||||||
|
|
||||||
|
$.fn.tooltip = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('tooltip')
|
||||||
|
, options = typeof option == 'object' && option
|
||||||
|
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.tooltip.Constructor = Tooltip
|
||||||
|
|
||||||
|
$.fn.tooltip.defaults = {
|
||||||
|
animation: true
|
||||||
|
, delay: 0
|
||||||
|
, selector: false
|
||||||
|
, placement: 'top'
|
||||||
|
, trigger: 'hover'
|
||||||
|
, title: ''
|
||||||
|
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
|
||||||
|
}
|
||||||
|
|
||||||
|
}( window.jQuery )
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/* ===================================================
|
||||||
|
* bootstrap-transition.js v2.0.0
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#transitions
|
||||||
|
* ===================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ) {
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
|
||||||
|
* ======================================================= */
|
||||||
|
|
||||||
|
$.support.transition = (function () {
|
||||||
|
var thisBody = document.body || document.documentElement
|
||||||
|
, thisStyle = thisBody.style
|
||||||
|
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
|
||||||
|
|
||||||
|
return support && {
|
||||||
|
end: (function () {
|
||||||
|
var transitionEnd = "TransitionEnd"
|
||||||
|
if ( $.browser.webkit ) {
|
||||||
|
transitionEnd = "webkitTransitionEnd"
|
||||||
|
} else if ( $.browser.mozilla ) {
|
||||||
|
transitionEnd = "transitionend"
|
||||||
|
} else if ( $.browser.opera ) {
|
||||||
|
transitionEnd = "oTransitionEnd"
|
||||||
|
}
|
||||||
|
return transitionEnd
|
||||||
|
}())
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery )
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
/* =============================================================
|
||||||
|
* bootstrap-typeahead.js v2.0.1
|
||||||
|
* http://twitter.github.com/bootstrap/javascript.html#typeahead
|
||||||
|
* =============================================================
|
||||||
|
* Copyright 2012 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* 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( $ ){
|
||||||
|
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
var Typeahead = function ( element, options ) {
|
||||||
|
this.$element = $(element)
|
||||||
|
this.options = $.extend({}, $.fn.typeahead.defaults, options)
|
||||||
|
this.matcher = this.options.matcher || this.matcher
|
||||||
|
this.sorter = this.options.sorter || this.sorter
|
||||||
|
this.highlighter = this.options.highlighter || this.highlighter
|
||||||
|
this.$menu = $(this.options.menu).appendTo('body')
|
||||||
|
this.source = this.options.source
|
||||||
|
this.shown = false
|
||||||
|
this.listen()
|
||||||
|
}
|
||||||
|
|
||||||
|
Typeahead.prototype = {
|
||||||
|
|
||||||
|
constructor: Typeahead
|
||||||
|
|
||||||
|
, select: function () {
|
||||||
|
var val = this.$menu.find('.active').attr('data-value')
|
||||||
|
this.$element.val(val)
|
||||||
|
return this.hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
, show: function () {
|
||||||
|
var pos = $.extend({}, this.$element.offset(), {
|
||||||
|
height: this.$element[0].offsetHeight
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$menu.css({
|
||||||
|
top: pos.top + pos.height
|
||||||
|
, left: pos.left
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$menu.show()
|
||||||
|
this.shown = true
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
, hide: function () {
|
||||||
|
this.$menu.hide()
|
||||||
|
this.shown = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
, lookup: function (event) {
|
||||||
|
var that = this
|
||||||
|
, items
|
||||||
|
, q
|
||||||
|
|
||||||
|
this.query = this.$element.val()
|
||||||
|
|
||||||
|
if (!this.query) {
|
||||||
|
return this.shown ? this.hide() : this
|
||||||
|
}
|
||||||
|
|
||||||
|
items = $.grep(this.source, function (item) {
|
||||||
|
if (that.matcher(item)) return item
|
||||||
|
})
|
||||||
|
|
||||||
|
items = this.sorter(items)
|
||||||
|
|
||||||
|
if (!items.length) {
|
||||||
|
return this.shown ? this.hide() : this
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.render(items.slice(0, this.options.items)).show()
|
||||||
|
}
|
||||||
|
|
||||||
|
, matcher: function (item) {
|
||||||
|
return ~item.toLowerCase().indexOf(this.query.toLowerCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
, sorter: function (items) {
|
||||||
|
var beginswith = []
|
||||||
|
, caseSensitive = []
|
||||||
|
, caseInsensitive = []
|
||||||
|
, item
|
||||||
|
|
||||||
|
while (item = items.shift()) {
|
||||||
|
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
|
||||||
|
else if (~item.indexOf(this.query)) caseSensitive.push(item)
|
||||||
|
else caseInsensitive.push(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
return beginswith.concat(caseSensitive, caseInsensitive)
|
||||||
|
}
|
||||||
|
|
||||||
|
, highlighter: function (item) {
|
||||||
|
return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
|
||||||
|
return '<strong>' + match + '</strong>'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
, render: function (items) {
|
||||||
|
var that = this
|
||||||
|
|
||||||
|
items = $(items).map(function (i, item) {
|
||||||
|
i = $(that.options.item).attr('data-value', item)
|
||||||
|
i.find('a').html(that.highlighter(item))
|
||||||
|
return i[0]
|
||||||
|
})
|
||||||
|
|
||||||
|
items.first().addClass('active')
|
||||||
|
this.$menu.html(items)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
, next: function (event) {
|
||||||
|
var active = this.$menu.find('.active').removeClass('active')
|
||||||
|
, next = active.next()
|
||||||
|
|
||||||
|
if (!next.length) {
|
||||||
|
next = $(this.$menu.find('li')[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
next.addClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
, prev: function (event) {
|
||||||
|
var active = this.$menu.find('.active').removeClass('active')
|
||||||
|
, prev = active.prev()
|
||||||
|
|
||||||
|
if (!prev.length) {
|
||||||
|
prev = this.$menu.find('li').last()
|
||||||
|
}
|
||||||
|
|
||||||
|
prev.addClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
, listen: function () {
|
||||||
|
this.$element
|
||||||
|
.on('blur', $.proxy(this.blur, this))
|
||||||
|
.on('keypress', $.proxy(this.keypress, this))
|
||||||
|
.on('keyup', $.proxy(this.keyup, this))
|
||||||
|
|
||||||
|
if ($.browser.webkit || $.browser.msie) {
|
||||||
|
this.$element.on('keydown', $.proxy(this.keypress, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$menu
|
||||||
|
.on('click', $.proxy(this.click, this))
|
||||||
|
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
|
||||||
|
}
|
||||||
|
|
||||||
|
, keyup: function (e) {
|
||||||
|
e.stopPropagation()
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
switch(e.keyCode) {
|
||||||
|
case 40: // down arrow
|
||||||
|
case 38: // up arrow
|
||||||
|
break
|
||||||
|
|
||||||
|
case 9: // tab
|
||||||
|
case 13: // enter
|
||||||
|
if (!this.shown) return
|
||||||
|
this.select()
|
||||||
|
break
|
||||||
|
|
||||||
|
case 27: // escape
|
||||||
|
this.hide()
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
this.lookup()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
, keypress: function (e) {
|
||||||
|
e.stopPropagation()
|
||||||
|
if (!this.shown) return
|
||||||
|
|
||||||
|
switch(e.keyCode) {
|
||||||
|
case 9: // tab
|
||||||
|
case 13: // enter
|
||||||
|
case 27: // escape
|
||||||
|
e.preventDefault()
|
||||||
|
break
|
||||||
|
|
||||||
|
case 38: // up arrow
|
||||||
|
e.preventDefault()
|
||||||
|
this.prev()
|
||||||
|
break
|
||||||
|
|
||||||
|
case 40: // down arrow
|
||||||
|
e.preventDefault()
|
||||||
|
this.next()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
, blur: function (e) {
|
||||||
|
var that = this
|
||||||
|
e.stopPropagation()
|
||||||
|
e.preventDefault()
|
||||||
|
setTimeout(function () { that.hide() }, 150)
|
||||||
|
}
|
||||||
|
|
||||||
|
, click: function (e) {
|
||||||
|
e.stopPropagation()
|
||||||
|
e.preventDefault()
|
||||||
|
this.select()
|
||||||
|
}
|
||||||
|
|
||||||
|
, mouseenter: function (e) {
|
||||||
|
this.$menu.find('.active').removeClass('active')
|
||||||
|
$(e.currentTarget).addClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* TYPEAHEAD PLUGIN DEFINITION
|
||||||
|
* =========================== */
|
||||||
|
|
||||||
|
$.fn.typeahead = function ( option ) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this)
|
||||||
|
, data = $this.data('typeahead')
|
||||||
|
, options = typeof option == 'object' && option
|
||||||
|
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
|
||||||
|
if (typeof option == 'string') data[option]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.typeahead.defaults = {
|
||||||
|
source: []
|
||||||
|
, items: 8
|
||||||
|
, menu: '<ul class="typeahead dropdown-menu"></ul>'
|
||||||
|
, item: '<li><a href="#"></a></li>'
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.typeahead.Constructor = Typeahead
|
||||||
|
|
||||||
|
|
||||||
|
/* TYPEAHEAD DATA-API
|
||||||
|
* ================== */
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
|
||||||
|
var $this = $(this)
|
||||||
|
if ($this.data('typeahead')) return
|
||||||
|
e.preventDefault()
|
||||||
|
$this.typeahead($this.data())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}( window.jQuery );
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
function enable_all_customers() {
|
||||||
|
$("li.customer").each(function(i) {
|
||||||
|
$(this).removeClass("marked");
|
||||||
|
$(this).show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function filter_customers(typed) {
|
||||||
|
/* FIXME: Does not work well. */
|
||||||
|
setTimeout(function() {
|
||||||
|
$("li.customer").each(function(i) {
|
||||||
|
if($(this).children("span.name").text().indexOf(typed) == -1) {
|
||||||
|
$(this).hide();
|
||||||
|
$(this).removeClass("marked");
|
||||||
|
} else {
|
||||||
|
$(this).show();
|
||||||
|
}
|
||||||
|
/* Full match */
|
||||||
|
if($(this).children("span.name").text() == typed) {
|
||||||
|
$(this).addClass("marked");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
/* Customer search */
|
||||||
|
$('.typeahead').typeahead();
|
||||||
|
$('#id_customer_name').keydown(function(event) {
|
||||||
|
filter_customers(event.srcElement.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_user option").removeAttr('selected');
|
||||||
|
$("#id_user option[value="+id+"]").attr('selected','selected');
|
||||||
|
});
|
||||||
|
/* Hide alert messages */
|
||||||
|
$("a[data-dismiss=alert]").click(function(){
|
||||||
|
$(this).parent().parent().parent().slideUp();
|
||||||
|
});
|
||||||
|
setTimeout( function() {
|
||||||
|
$("a[data-dismiss=alert]").parent().parent().parent().slideUp();
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
});
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
/*
|
||||||
|
Highcharts JS v2.2.1 (2012-03-15)
|
||||||
|
|
||||||
|
(c) 2009-2011 Torstein H?nsi
|
||||||
|
|
||||||
|
License: www.highcharts.com/license
|
||||||
|
*/
|
||||||
|
(function(){function L(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function za(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}function S(a,b){return parseInt(a,b||10)}function Ab(a){return typeof a==="string"}function mb(a){return typeof a==="object"}function Fb(a){return Object.prototype.toString.call(a)==="[object Array]"}function Bb(a){return typeof a==="number"}function nb(a){return oa.log(a)/oa.LN10}function cb(a){return oa.pow(10,a)}function Gb(a,b){for(var c=
|
||||||
|
a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function s(a){return a!==X&&a!==null}function A(a,b,c){var d,e;if(Ab(b))s(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(s(b)&&mb(b))for(d in b)a.setAttribute(d,b[d]);return e}function Hb(a){return Fb(a)?a:[a]}function p(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function P(a,b){if(Qb&&b&&b.opacity!==X)b.filter="alpha(opacity="+b.opacity*100+")";L(a.style,b)}function Aa(a,
|
||||||
|
b,c,d,e){a=x.createElement(a);b&&L(a,b);e&&P(a,{padding:0,border:Ma,margin:0});c&&P(a,c);d&&d.appendChild(a);return a}function pa(a,b){var c=function(){};c.prototype=new a;L(c.prototype,b);return c}function dc(a,b,c,d){var e=Ea.lang,f=isNaN(b=Ba(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(S(a=Ba(+a||0).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+Ba(a-c).toFixed(f).slice(2):"")}
|
||||||
|
function Na(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function ec(a,b,c,d){var e,c=p(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Kc(a,b){var c=b||[[Rb,[1,2,5,10,20,25,50,100,200,500]],[ob,[1,2,5,10,15,30]],[pb,[1,2,5,10,15,30]],[va,[1,2,3,4,6,8,12]],[Ca,[1,2]],[Ya,[1,2]],[Da,[1,2,3,4,6]],[Za,null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=
|
||||||
|
c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/2)break;e===E[Za]&&a<5*e&&(f=[1,2,5]);e===E[Za]&&a<5*e&&(f=[1,2,5]);c=ec(a/e,f);return{unitRange:e,count:c,unitName:d[0]}}function Lc(a,b,c,d){var e=[],f={},g=Ea.global.useUTC,h,i=new Date(b),b=a.unitRange,k=a.count;b>=E[ob]&&(i.setMilliseconds(0),i.setSeconds(b>=E[pb]?0:k*Ta(i.getSeconds()/k)));if(b>=E[pb])i[pc](b>=E[va]?0:k*Ta(i[fc]()/k));if(b>=E[va])i[qc](b>=E[Ca]?0:k*Ta(i[gc]()/k));if(b>=E[Ca])i[hc](b>=E[Da]?1:k*Ta(i[db]()/k));b>=
|
||||||
|
E[Da]&&(i[rc](b>=E[Za]?0:k*Ta(i[qb]()/k)),h=i[rb]());b>=E[Za]&&(h-=h%k,i[sc](h));if(b===E[Ya])i[hc](i[db]()-i[ic]()+p(d,1));d=1;h=i[rb]();for(var j=i.getTime(),l=i[qb](),i=i[db]();j<c;)e.push(j),b===E[Za]?j=sb(h+d*k,0):b===E[Da]?j=sb(h,l+d*k):!g&&(b===E[Ca]||b===E[Ya])?j=sb(h,l,i+d*k*(b===E[Ca]?1:7)):(j+=b*k,b<=E[va]&&j%E[Ca]===0&&(f[j]=Ca)),d++;e.push(j);e.info=L(a,{higherRanks:f,totalRange:b*k});return e}function tc(){this.symbol=this.color=0}function uc(a,b,c,d,e,f,g,h,i){var k=g.x,g=g.y,i=k+c+
|
||||||
|
(i?h:-a-h),j=g-b+d+15,l;i<7&&(i=c+k+h);i+a>c+e&&(i-=i+a-(c+e),j=g-b+d-h,l=!0);j<d+5?(j=d+5,l&&g>=j&&g<=j+b&&(j=g+d+h)):j+b>d+f&&(j=d+f-b-h);return{x:i,y:j}}function Mc(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Sb(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Ib(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Jb(a){for(var b in a)a[b]&&a[b].destroy&&
|
||||||
|
a[b].destroy(),delete a[b]}function Tb(a){tb||(tb=Aa(Ra));a&&tb.appendChild(a);tb.innerHTML=""}function jc(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else ca.console&&console.log(c)}function Cb(a){return parseFloat(a.toPrecision(14))}function Kb(a,b){Ub=p(a,b.animation)}function vc(){var a=Ea.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";sb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,p(c,1),p(g,0),p(h,0),p(i,0))).getTime()};fc=b+"Minutes";gc=b+"Hours";
|
||||||
|
ic=b+"Day";db=b+"Date";qb=b+"Month";rb=b+"FullYear";pc=c+"Minutes";qc=c+"Hours";hc=c+"Date";rc=c+"Month";sc=c+"FullYear"}function Sa(){}function wc(a,b){function c(a){function b(a,c){this.pos=a;this.type=c||"";this.isNew=!0;c||this.addLabel()}function c(a){if(a)this.options=a,this.id=a.id;return this}function d(a,b,c,e){this.isNegative=b;this.options=a;this.x=c;this.stack=e;this.alignOptions={align:a.align||(U?b?"left":"right":"center"),verticalAlign:a.verticalAlign||(U?"middle":b?"bottom":"top"),
|
||||||
|
y:p(a.y,U?4:b?14:-6),x:p(a.x,U?b?-6:6:0)};this.textAlign=a.textAlign||(U?b?"right":"left":"center")}function e(){var a=[],b=[],c;C=M=null;o(B.series,function(e){if(e.visible||!q.ignoreHiddenSeries){var f=e.options,g,h,i,j,k,m,l,n,Y,ea=f.threshold,B,o=[],xc=0;if(R&&ea<=0)ea=f.threshold=null;if(t)f=e.xData,f.length&&(C=Ua(p(C,f[0]),Sb(f)),M=W(p(M,f[0]),Ib(f)));else{var y,r,G,v=e.cropped,Z=e.xAxis.getExtremes(),V=!!e.modifyValue;g=f.stacking;Ha=g==="percent";if(g)k=f.stack,j=e.type+p(k,""),m="-"+j,e.stackKey=
|
||||||
|
j,h=a[j]||[],a[j]=h,i=b[m]||[],b[m]=i;Ha&&(C=0,M=99);f=e.processedXData;l=e.processedYData;B=l.length;for(c=0;c<B;c++)if(n=f[c],Y=l[c],Y!==null&&Y!==X&&(g?(r=(y=Y<ea)?i:h,G=y?m:j,Y=r[n]=s(r[n])?r[n]+Y:Y,qa[G]||(qa[G]={}),qa[G][n]||(qa[G][n]=new d(u.stackLabels,y,n,k)),qa[G][n].setTotal(Y)):V&&(Y=e.modifyValue(Y)),v||(f[c+1]||n)>=Z.min&&(f[c-1]||n)<=Z.max))if(n=Y.length)for(;n--;)Y[n]!==null&&(o[xc++]=Y[n]);else o[xc++]=Y;!Ha&&o.length&&(C=Ua(p(C,o[0]),Sb(o)),M=W(p(M,o[0]),Ib(o)));s(ea)&&(C>=ea?(C=
|
||||||
|
ea,Ma=!0):M<ea&&(M=ea,Na=!0))}}})}function f(a,b,c){for(var d,b=Cb(Ta(b/a)*a),c=Cb(Yb(c/a)*a),e=[];b<=c;){e.push(b);b=Cb(b+a);if(b===d)break;d=b}return e}function g(a,b,c,d){var e=[];if(!d)B._minorAutoInterval=null;if(a>=0.5)a=z(a),e=f(a,b,c);else if(a>=0.08){var h=Ta(b),i,j,k,n,m,l;for(i=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];h<c+1&&!l;h++){k=i.length;for(j=0;j<k&&!l;j++)n=nb(cb(h)*i[j]),n>b&&e.push(m),m>c&&(l=!0),m=n}}else if(b=cb(b),c=cb(c),a=u[d?"minorTickInterval":"tickInterval"],
|
||||||
|
a=p(a==="auto"?null:a,B._minorAutoInterval,(c-b)*(u.tickPixelInterval/(d?5:1))/((d?D/N.length:D)||1)),a=ec(a,null,oa.pow(10,Ta(oa.log(a)/oa.LN10))),e=Vb(f(a,b,c),nb),!d)B._minorAutoInterval=a/5;d||(Oa=a);return e}function h(){var a=[],b,c;if(R){c=N.length;for(b=1;b<c;b++)a=a.concat(g(Ga,N[b-1],N[b],!0))}else for(b=F+(N[0]-F)%Ga;b<=H;b+=Ga)a.push(b);return a}function i(){var a,b=M-C>=fb,c,d,e,f,g,h;t&&fb===X&&!R&&(s(u.min)||s(u.max)?fb=null:(o(B.series,function(a){f=a.xData;for(d=g=a.xIncrement?1:
|
||||||
|
f.length-1;d>0;d--)if(e=f[d]-f[d-1],c===X||e<c)c=e}),fb=Ua(c*5,M-C)));H-F<fb&&(a=(fb-H+F)/2,a=[F-a,p(u.min,F-a)],b&&(a[2]=C),F=Ib(a),h=[F+fb,p(u.max,F+fb)],b&&(h[2]=M),H=Sb(h),H-F<fb&&(a[0]=H-fb,a[1]=p(u.min,H-fb),F=Ib(a)))}function j(a){var b,c=u.tickInterval,d=u.tickPixelInterval;da?(na=m[t?"xAxis":"yAxis"][u.linkedTo],b=na.getExtremes(),F=p(b.min,b.dataMin),H=p(b.max,b.dataMax),u.type!==na.options.type&&jc(11,1)):(F=p(ba,u.min,C),H=p(ca,u.max,M));R&&(!a&&Ua(F,C)<=0&&jc(10,1),F=nb(F),H=nb(H));ja&&
|
||||||
|
(ba=F=W(F,H-ja),ca=H,a&&(ja=null));i();if(!Va&&!Ha&&!da&&s(F)&&s(H)){b=H-F||1;if(!s(u.min)&&!s(ba)&&Ea&&(C<0||!Ma))F-=b*Ea;if(!s(u.max)&&!s(ca)&&Ja&&(M>0||!Na))H+=b*Ja}Oa=F===H||F===void 0||H===void 0?1:da&&!c&&d===na.options.tickPixelInterval?na.tickInterval:p(c,Va?1:(H-F)*d/(D||1));t&&!a&&o(B.series,function(a){a.processData(F!==ma||H!==za)});ib();B.beforeSetTickPositions&&B.beforeSetTickPositions();B.postProcessTickInterval&&(Oa=B.postProcessTickInterval(Oa));!V&&!R&&(Wa=oa.pow(10,Ta(oa.log(Oa)/
|
||||||
|
oa.LN10)),s(u.tickInterval)||(Oa=ec(Oa,null,Wa,u)));B.tickInterval=Oa;Ga=u.minorTickInterval==="auto"&&Oa?Oa/5:u.minorTickInterval;(N=u.tickPositions||Xa&&Xa.apply(B,[F,H]))||(N=V?(B.getNonLinearTimeTicks||Lc)(Kc(Oa,u.units),F,H,u.startOfWeek,B.ordinalPositions,B.closestPointRange,!0):R?g(Oa,F,H):f(Oa,F,H));if(!da&&(a=N[0],c=N[N.length-1],u.startOnTick?F=a:F>a&&N.shift(),u.endOnTick?H=c:H<c&&N.pop(),gb||(gb={x:0,y:0}),!V&&N.length>gb[w]&&u.alignTicks!==!1))gb[w]=N.length}function k(a){a=(new c(a)).render();
|
||||||
|
ta.push(a);return a}function l(){var a=u.title,d=u.stackLabels,e=u.alternateGridColor,f=u.lineWidth,g,i,j=m.hasRendered&&s(ma)&&!isNaN(ma),n=(g=B.series.length&&s(F)&&s(H))||p(u.showEmpty,!0),Y,q;if(g||da)if(Ga&&!Va&&o(h(),function(a){va[a]||(va[a]=new b(a,"minor"));j&&va[a].isNew&&va[a].render(null,!0);va[a].isActive=!0;va[a].render()}),o(N.slice(1).concat([N[0]]),function(a,c){c=c===N.length-1?0:c+1;if(!da||a>=F&&a<=H)Pa[a]||(Pa[a]=new b(a)),j&&Pa[a].isNew&&Pa[a].render(c,!0),Pa[a].isActive=!0,
|
||||||
|
Pa[a].render(c)}),e&&o(N,function(a,b){if(b%2===0&&a<H)Da[a]||(Da[a]=new c),Y=a,q=N[b+1]!==X?N[b+1]:H,Da[a].options={from:R?cb(Y):Y,to:R?cb(q):q,color:e},Da[a].render(),Da[a].isActive=!0}),!B._addedPlotLB)o((u.plotLines||[]).concat(u.plotBands||[]),function(a){k(a)}),B._addedPlotLB=!0;o([Pa,va,Da],function(a){for(var b in a)a[b].isActive?a[b].isActive=!1:(a[b].destroy(),delete a[b])});f&&(g=x+(y?A:0)+T,i=ra-Lb-(y?hb:0)+T,g=I.crispLine([wa,G?x:g,G?i:E,fa,G?sa-Zb:g,G?i:ra-Lb],f),$?$.animate({d:g}):
|
||||||
|
$=I.path(g).attr({stroke:u.lineColor,"stroke-width":f,zIndex:7}).add(),$[n?"show":"hide"]());if(v&&n)n=G?x:E,f=S(a.style.fontSize||12),n={low:n+(G?0:D),middle:n+D/2,high:n+(G?D:0)}[a.align],f=(G?E+hb:x)+(G?1:-1)*(y?-1:1)*Ya+(r===2?f:0),v[v.isNew?"attr":"animate"]({x:G?n:f+(y?A:0)+T+(a.x||0),y:G?f-(y?hb:0)+T:n+(a.y||0)}),v.isNew=!1;if(d&&d.enabled){var t,yc,d=B.stackTotalGroup;if(!d)B.stackTotalGroup=d=I.g("stack-labels").attr({visibility:eb,zIndex:6}).translate(O,J).add();for(t in qa)for(yc in a=
|
||||||
|
qa[t],a)a[yc].render(d)}B.isDirty=!1}function n(a){for(var b=ta.length;b--;)ta[b].id===a&&ta[b].destroy()}var t=a.isX,y=a.opposite,G=U?!t:t,r=G?y?0:2:y?1:3,qa={},u=K(t?$b:kc,[Nc,Oc,zc,Pc][r],a),B=this,v,Z=u.type,V=Z==="datetime",R=Z==="logarithmic",T=u.offset||0,w=t?"x":"y",D=0,ua,ia,bb,jb,x,E,A,hb,Lb,Zb,Mb,ib,P,Q,bc,$,C,M,fb=u.minRange||u.maxZoom,ja=u.range,ba,ca,Aa,Ca,H=null,F=null,ma,za,Ea=u.minPadding,Ja=u.maxPadding,Ka=0,da=s(u.linkedTo),na,Ma,Na,Ha,Z=u.events,Sa,ta=[],Oa,Ga,Wa,N,Xa=u.tickPositioner,
|
||||||
|
Pa={},va={},Da={},Fa,La,Ya,Va=u.categories,db=u.labels.formatter||function(){var a=this.value,b=this.dateTimeLabelFormat;return b?ac(b,a):Oa%1E6===0?a/1E6+"M":Oa%1E3===0?a/1E3+"k":!Va&&a>=1E3?dc(a,0):a},Ra=G&&u.labels.staggerLines,ya=u.reversed,Ia=Va&&u.tickmarkPlacement==="between"?0.5:0;b.prototype={addLabel:function(){var a=this.pos,b=u.labels,c=Va&&G&&Va.length&&!b.step&&!b.staggerLines&&!b.rotation&&ka/Va.length||!G&&ka/2,d=a===N[0],e=a===N[N.length-1],f=Va&&s(Va[a])?Va[a]:a,g=this.label,h=N.info,
|
||||||
|
i;V&&h&&(i=u.dateTimeLabelFormats[h.higherRanks[a]||h.unitName]);this.isFirst=d;this.isLast=e;a=db.call({axis:B,chart:m,isFirst:d,isLast:e,dateTimeLabelFormat:i,value:R?Cb(cb(f)):f});c=c&&{width:W(1,z(c-2*(b.padding||10)))+ga};c=L(c,b.style);s(g)?g&&g.attr({text:a}).css(c):this.label=s(a)&&b.enabled?I.text(a,0,0,b.useHTML).attr({align:b.align,rotation:b.rotation}).css(c).add(Q):null},getLabelSize:function(){var a=this.label;return a?(this.labelBBox=a.getBBox())[G?"height":"width"]:0},getLabelSides:function(){var a=
|
||||||
|
u.labels,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.align]-a.x;return[-a,b-a]},handleOverflow:function(a){var b=!0,c=this.isFirst,d=this.isLast,e=this.label,f=e.x;if(c||d){var g=this.getLabelSides(),h=g[0],g=g[1],i=m.plotLeft,j=i+B.len,k=(a=Pa[N[a+(c?1:-1)]])&&a.label.x+a.getLabelSides()[c?0:1];c&&!ya||d&&ya?f+h<i&&(f=i-h,a&&f+g>k&&(b=!1)):f+g>j&&(f=j-g,a&&f+h<k&&(b=!1));e.x=f}return b},render:function(a,b){var c=this.type,d=this.label,e=this.pos,f=u.labels,g=this.gridLine,h=c?c+"Grid":
|
||||||
|
"grid",i=c?c+"Tick":"tick",j=u[h+"LineWidth"],k=u[h+"LineColor"],n=u[h+"LineDashStyle"],m=u[i+"Length"],h=u[i+"Width"]||0,l=u[i+"Color"],Y=u[i+"Position"],i=this.mark,q=f.step,ea=b&&Za||ra,qa=!0,o;o=G?Mb(e+Ia,null,null,b)+bb:x+T+(y?(b&&$a||sa)-Zb-x:0);ea=G?ea-Lb+T-(y?hb:0):ea-Mb(e+Ia,null,null,b)-bb;if(j){e=P(e+Ia,j,b);if(g===X){g={stroke:k,"stroke-width":j};if(n)g.dashstyle=n;if(!c)g.zIndex=1;this.gridLine=g=j?I.path(e).attr(g).add(bc):null}!b&&g&&e&&g.animate({d:e})}if(h)Y==="inside"&&(m=-m),y&&
|
||||||
|
(m=-m),c=I.crispLine([wa,o,ea,fa,o+(G?0:-m),ea+(G?m:0)],h),i?i.animate({d:c}):this.mark=I.path(c).attr({stroke:l,"stroke-width":h}).add(Q);if(d&&!isNaN(o))o=o+f.x-(Ia&&G?Ia*ia*(ya?-1:1):0),ea=ea+f.y-(Ia&&!G?Ia*ia*(ya?1:-1):0),s(f.y)||(ea+=S(d.styles.lineHeight)*0.9-d.getBBox().height/2),Ra&&(ea+=a/(q||1)%Ra*16),d.x=o,d.y=ea,this.isFirst&&!p(u.showFirstLabel,1)||this.isLast&&!p(u.showLastLabel,1)?qa=!1:!Ra&&G&&f.overflow==="justify"&&!this.handleOverflow(a)&&(qa=!1),q&&a%q&&(qa=!1),qa?(d[this.isNew?
|
||||||
|
"attr":"animate"]({x:d.x,y:d.y}),d.show(),this.isNew=!1):d.hide()},destroy:function(){Jb(this)}};c.prototype={render:function(){var a=this,b=(B.pointRange||0)/2,c=a.options,d=c.label,e=a.label,f=c.width,g=c.to,h=c.from,i=c.value,j,k=c.dashStyle,n=a.svgElem,m=[],l,Y,u=c.color;Y=c.zIndex;var ea=c.events;R&&(h=nb(h),g=nb(g),i=nb(i));if(f){if(m=P(i,f),b={stroke:u,"stroke-width":f},k)b.dashstyle=k}else if(s(h)&&s(g))h=W(h,F-b),g=Ua(g,H+b),j=P(g),(m=P(h))&&j?m.push(j[4],j[5],j[1],j[2]):m=null,b={fill:u};
|
||||||
|
else return;if(s(Y))b.zIndex=Y;if(n)m?n.animate({d:m},null,n.onGetPath):(n.hide(),n.onGetPath=function(){n.show()});else if(m&&m.length&&(a.svgElem=n=I.path(m).attr(b).add(),ea))for(l in k=function(b){n.on(b,function(c){ea[b].apply(a,[c])})},ea)k(l);if(d&&s(d.text)&&m&&m.length&&A>0&&hb>0){d=K({align:G&&j&&"center",x:G?!j&&4:10,verticalAlign:!G&&j&&"middle",y:G?j?16:10:j?6:-4,rotation:G&&!j&&90},d);if(!e)a.label=e=I.text(d.text,0,0).attr({align:d.textAlign||d.align,rotation:d.rotation,zIndex:Y}).css(d.style).add();
|
||||||
|
j=[m[1],m[4],p(m[6],m[1])];m=[m[2],m[5],p(m[7],m[2])];l=Sb(j);Y=Sb(m);e.align(d,!1,{x:l,y:Y,width:Ib(j)-l,height:Ib(m)-Y});e.show()}else e&&e.hide();return a},destroy:function(){Jb(this);Gb(ta,this)}};d.prototype={destroy:function(){Jb(this)},setTotal:function(a){this.cum=this.total=a},render:function(a){var b=this.options.formatter.call(this);this.label?this.label.attr({text:b,visibility:ab}):this.label=m.renderer.text(b,0,0).css(this.options.style).attr({align:this.textAlign,rotation:this.options.rotation,
|
||||||
|
visibility:ab}).add(a)},setOffset:function(a,b){var c=this.isNegative,d=B.translate(this.total,0,0,0,1),e=B.translate(0),e=Ba(d-e),f=m.xAxis[0].translate(this.x)+a,g=m.plotHeight,c={x:U?c?d:d-e:f,y:U?g-f-b:c?g-d-e:g-d,width:U?e:b,height:U?b:e};this.label&&this.label.align(this.alignOptions,null,c).attr({visibility:eb})}};Mb=function(a,b,c,d,e){var f=1,g=0,h=d?jb:ia,d=d?ma:F,e=u.ordinal||R&&e;h||(h=ia);c&&(f*=-1,g=D);ya&&(f*=-1,g-=f*D);b?(ya&&(a=D-a),a=a/h+d,e&&(a=B.lin2val(a))):(e&&(a=B.val2lin(a)),
|
||||||
|
a=f*(a-d)*h+g+f*Ka);return a};P=function(a,b,c){var d,e,f,a=Mb(a,null,null,c),g=c&&Za||ra,h=c&&$a||sa,i,c=e=z(a+bb);d=f=z(g-a-bb);if(isNaN(a))i=!0;else if(G){if(d=E,f=g-Lb,c<x||c>x+A)i=!0}else if(c=x,e=h-Zb,d<E||d>E+hb)i=!0;return i?null:I.crispLine([wa,c,d,fa,e,f],b||0)};ib=function(){var a=H-F,b=0,c,d;if(t)da?b=na.pointRange:o(B.series,function(a){b=W(b,a.pointRange);d=a.closestPointRange;!a.noSharedTooltip&&s(d)&&(c=s(c)?Ua(c,d):d)}),B.pointRange=b,B.closestPointRange=c;jb=ia;B.translationSlope=
|
||||||
|
ia=D/(a+b||1);bb=G?x:Lb;Ka=ia*(b/2)};xa.push(B);m[t?"xAxis":"yAxis"].push(B);U&&t&&ya===X&&(ya=!0);L(B,{addPlotBand:k,addPlotLine:k,adjustTickAmount:function(){if(gb&&gb[w]&&!V&&!Va&&!da&&u.alignTicks!==!1){var a=Fa,b=N.length;Fa=gb[w];if(b<Fa){for(;N.length<Fa;)N.push(Cb(N[N.length-1]+Oa));ia*=(b-1)/(Fa-1);H=N[N.length-1]}if(s(a)&&Fa!==a)B.isDirty=!0}},categories:Va,getExtremes:function(){return{min:R?Cb(cb(F)):F,max:R?Cb(cb(H)):H,dataMin:C,dataMax:M,userMin:ba,userMax:ca}},getPlotLinePath:P,getThreshold:function(a){var b=
|
||||||
|
R?cb(F):F,c=R?cb(H):H;b>a||a===null?a=b:c<a&&(a=c);return Mb(a,0,1,0,1)},isXAxis:t,options:u,plotLinesAndBands:ta,getOffset:function(){var a=B.series.length&&s(F)&&s(H),c=a||p(u.showEmpty,!0),d=0,e,f=0,g=u.title,h=u.labels,i=[-1,1,1,-1][r],j;Q||(Q=I.g("axis").attr({zIndex:7}).add(),bc=I.g("grid").attr({zIndex:u.gridZIndex||1}).add());La=0;if(a||da)o(N,function(a){Pa[a]?Pa[a].addLabel():Pa[a]=new b(a)}),o(N,function(a){if(r===0||r===2||{1:"left",3:"right"}[r]===h.align)La=W(Pa[a].getLabelSize(),La)}),
|
||||||
|
Ra&&(La+=(Ra-1)*16);else for(j in Pa)Pa[j].destroy(),delete Pa[j];if(g&&g.text){if(!v)v=B.axisTitle=I.text(g.text,0,0,g.useHTML).attr({zIndex:7,rotation:g.rotation||0,align:g.textAlign||{low:"left",middle:"center",high:"right"}[g.align]}).css(g.style).add(),v.isNew=!0;if(c)d=v.getBBox()[G?"height":"width"],f=p(g.margin,G?5:10),e=g.offset;v[c?"show":"hide"]()}T=i*p(u.offset,pa[r]);Ya=p(e,La+f+(r!==2&&La&&i*u.labels[G?"y":"x"]));pa[r]=W(pa[r],Ya+d+i*T)},render:l,setAxisSize:function(){var a=u.offsetLeft||
|
||||||
|
0,b=u.offsetRight||0;x=p(u.left,O+a);E=p(u.top,J);A=p(u.width,ka-a+b);hb=p(u.height,la);Lb=ra-hb-E;Zb=sa-A-x;D=G?A:hb;B.left=x;B.top=E;B.len=D},setAxisTranslation:ib,setCategories:function(b,c){B.categories=a.categories=Va=b;o(B.series,function(a){a.translate();a.setTooltipPoints(!0)});B.isDirty=!0;p(c,!0)&&m.redraw()},setExtremes:function(a,b,c,d,e){c=p(c,!0);e=L(e,{min:a,max:b});aa(B,"setExtremes",e,function(){ba=a;ca=b;B.isDirtyExtremes=!0;c&&m.redraw(d)})},setScale:function(){var a,b,c,d;ma=F;
|
||||||
|
za=H;ua=D;D=G?A:hb;d=D!==ua;o(B.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)c=!0});if(d||c||da||ba!==Aa||ca!==Ca){e();j();Aa=ba;Ca=ca;if(!t)for(a in qa)for(b in qa[a])qa[a][b].cum=qa[a][b].total;if(!B.isDirty)B.isDirty=d||F!==ma||H!==za}},setTickPositions:j,translate:Mb,redraw:function(){ub.resetTracker&&ub.resetTracker();l();o(ta,function(a){a.render()});o(B.series,function(a){a.isDirty=!0})},removePlotBand:n,removePlotLine:n,reversed:ya,setTitle:function(a,b){u.title=K(u.title,
|
||||||
|
a);v=v.destroy();B.isDirty=!0;p(b,!0)&&m.redraw()},series:[],stacks:qa,destroy:function(){var a;Qa(B);for(a in qa)Jb(qa[a]),qa[a]=null;if(B.stackTotalGroup)B.stackTotalGroup=B.stackTotalGroup.destroy();o([Pa,va,Da,ta],function(a){Jb(a)});o([$,Q,bc,v],function(a){a&&a.destroy()});$=Q=bc=v=null}});for(Sa in Z)ha(B,Sa,Z[Sa]);if(R)B.val2lin=nb,B.lin2val=cb}function d(a){function b(){var c=this.points||Hb(this),d=c[0].series,e;e=[d.tooltipHeaderFormatter(c[0].key)];o(c,function(a){d=a.series;e.push(d.tooltipFormatter&&
|
||||||
|
d.tooltipFormatter(a)||a.point.tooltipFormatter(d.tooltipOptions.pointFormat))});e.push(a.footerFormat||"");return e.join("")}function c(a,b){l=n?a:(2*l+a)/3;q=n?b:(q+b)/2;t.attr({x:l,y:q});lb=Ba(a-l)>1||Ba(b-q)>1?function(){c(a,b)}:null}function d(){if(!n){var a=m.hoverPoints;t.hide();a&&o(a,function(a){a.setState()});m.hoverPoints=null;n=!0}}var e,f=a.borderWidth,g=a.crosshairs,h=[],i=a.style,j=a.shared,k=S(i.padding),n=!0,l=0,q=0;i.padding=0;var t=I.label("",0,0,null,null,null,a.useHTML).attr({padding:k,
|
||||||
|
fill:a.backgroundColor,"stroke-width":f,r:a.borderRadius,zIndex:8}).css(i).hide().add();Fa||t.shadow(a.shadow);return{shared:j,refresh:function(f){var i,k,l,q,r={},y=[];l=f.tooltipPos;i=a.formatter||b;var r=m.hoverPoints,v;j&&(!f.series||!f.series.noSharedTooltip)?(q=0,r&&o(r,function(a){a.setState()}),m.hoverPoints=f,o(f,function(a){a.setState(ta);q+=a.plotY;y.push(a.getLabelConfig())}),k=f[0].plotX,q=z(q)/f.length,r={x:f[0].category},r.points=y,f=f[0]):r=f.getLabelConfig();r=i.call(r);e=f.series;
|
||||||
|
k=p(k,f.plotX);q=p(q,f.plotY);i=z(l?l[0]:U?ka-q:k);k=z(l?l[1]:U?la-k:q);l=j||!e.isCartesian||e.tooltipOutsidePlot||Db(i,k);r===!1||!l?d():(n&&(t.show(),n=!1),t.attr({text:r}),v=a.borderColor||f.color||e.color||"#606060",t.attr({stroke:v}),l=uc(t.width,t.height,O,J,ka,la,{x:i,y:k},p(a.distance,12),U),c(z(l.x),z(l.y)));if(g){g=Hb(g);var R;l=g.length;for(var Z;l--;)if(R=f.series[l?"yAxis":"xAxis"],g[l]&&R)if(R=R.getPlotLinePath(l?p(f.stackY,f.y):f.x,1),h[l])h[l].attr({d:R,visibility:eb});else{Z={"stroke-width":g[l].width||
|
||||||
|
1,stroke:g[l].color||"#C0C0C0",zIndex:g[l].zIndex||2};if(g[l].dashStyle)Z.dashstyle=g[l].dashStyle;h[l]=I.path(R).attr(Z).add()}}aa(m,"tooltipRefresh",{text:r,x:i+O,y:k+J,borderColor:v})},hide:d,hideCrosshairs:function(){o(h,function(a){a&&a.hide()})},destroy:function(){o(h,function(a){a&&a.destroy()});t&&(t=t.destroy())}}}function e(a){function b(a){var c,d,e,a=a||ca.event;if(!a.target)a.target=a.srcElement;if(a.originalEvent)a=a.originalEvent;if(a.event)a=a.event;c=a.touches?a.touches.item(0):a;
|
||||||
|
ya=Ac(D);d=ya.left;e=ya.top;Qb?(d=a.x,c=a.y):(d=c.pageX-d,c=c.pageY-e);return L(a,{chartX:z(d),chartY:z(c)})}function c(a){var b={xAxis:[],yAxis:[]};o(xa,function(c){var d=c.translate,e=c.isXAxis;b[e?"xAxis":"yAxis"].push({axis:c,value:d((U?!e:e)?a.chartX-O:la-a.chartY+J,!0)})});return b}function e(){var a=m.hoverSeries,b=m.hoverPoint;if(b)b.onMouseOut();if(a)a.onMouseOut();vb&&(vb.hide(),vb.hideCrosshairs());ob=null}function f(){if(n){var a={xAxis:[],yAxis:[]},b=n.getBBox(),c=b.x-O,d=b.y-J;k&&(o(xa,
|
||||||
|
function(e){if(e.options.zoomEnabled!==!1){var f=e.translate,g=e.isXAxis,h=U?!g:g,i=f(h?c:la-d-b.height,!0,0,0,1),f=f(h?c+b.width:la-d,!0,0,0,1);a[g?"xAxis":"yAxis"].push({axis:e,min:Ua(i,f),max:W(i,f)})}}),aa(m,"selection",a,zb));n=n.destroy()}P(D,{cursor:"auto"});m.mouseIsDown=Da=k=!1;Qa(x,Ga?"touchend":"mouseup",f)}function g(a){var b=s(a.pageX)?a.pageX:a.page.x,a=s(a.pageX)?a.pageY:a.page.y;ya&&!Db(b-ya.left-O,a-ya.top-J)&&e()}function h(){e();ya=null}var i,j,k,n,l=Fa?"":q.zoomType,t=/x/.test(l),
|
||||||
|
r=/y/.test(l),y=t&&!U||r&&U,p=r&&!U||t&&U;if(!db)m.trackerGroup=db=I.g("tracker").attr({zIndex:9}).add();if(a.enabled)m.tooltip=vb=d(a),Bb=setInterval(function(){lb&&lb()},32);(function(){D.onmousedown=function(a){a=b(a);!Ga&&a.preventDefault&&a.preventDefault();m.mouseIsDown=Da=!0;m.mouseDownX=i=a.chartX;j=a.chartY;ha(x,Ga?"touchend":"mouseup",f)};var d=function(c){if(!c||!(c.touches&&c.touches.length>1)){c=b(c);if(!Ga)c.returnValue=!1;var d=c.chartX,e=c.chartY,f=!Db(d-O,e-J);Ga&&c.type==="touchstart"&&
|
||||||
|
(A(c.target,"isTracker")?m.runTrackerClick||c.preventDefault():!kb&&!f&&c.preventDefault());f&&(d<O?d=O:d>O+ka&&(d=O+ka),e<J?e=J:e>J+la&&(e=J+la));if(Da&&c.type!=="touchstart"){if(k=Math.sqrt(Math.pow(i-d,2)+Math.pow(j-e,2)),k>10){var g=Db(i-O,j-J);if(Nb&&(t||r)&&g)n||(n=I.rect(O,J,y?1:ka,p?1:la,0).attr({fill:q.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add());n&&y&&(c=d-i,n.attr({width:Ba(c),x:(c>0?0:c)+i}));n&&p&&(e-=j,n.attr({height:Ba(e),y:(e>0?0:e)+j}));g&&!n&&q.panning&&m.pan(d)}}else if(!f){var h,
|
||||||
|
d=m.hoverPoint,e=m.hoverSeries,l,o,g=sa,R=U?c.chartY:c.chartX-O;if(vb&&a.shared&&(!e||!e.noSharedTooltip)){h=[];l=Q.length;for(o=0;o<l;o++)if(Q[o].visible&&Q[o].options.enableMouseTracking!==!1&&!Q[o].noSharedTooltip&&Q[o].tooltipPoints.length)c=Q[o].tooltipPoints[R],c._dist=Ba(R-c.plotX),g=Ua(g,c._dist),h.push(c);for(l=h.length;l--;)h[l]._dist>g&&h.splice(l,1);if(h.length&&h[0].plotX!==ob)vb.refresh(h),ob=h[0].plotX}if(e&&e.tracker&&(c=e.tooltipPoints[R])&&c!==d)c.onMouseOver()}return f||!Nb}};D.onmousemove=
|
||||||
|
d;ha(D,"mouseleave",h);ha(x,"mousemove",g);D.ontouchstart=function(a){if(t||r)D.onmousedown(a);d(a)};D.ontouchmove=d;D.ontouchend=function(){k&&e()};D.onclick=function(a){var d=m.hoverPoint,a=b(a);a.cancelBubble=!0;if(!k)if(d&&(A(a.target,"isTracker")||A(a.target.parentNode,"isTracker"))){var e=d.plotX,f=d.plotY;L(d,{pageX:ya.left+O+(U?ka-f:e),pageY:ya.top+J+(U?la-e:f)});aa(d.series,"click",L(a,{point:d}));d.firePointEvent("click",a)}else L(a,c(a)),Db(a.chartX-O,a.chartY-J)&&aa(m,"click",a);k=!1}})();
|
||||||
|
L(this,{zoomX:t,zoomY:r,resetTracker:e,normalizeMouseEvent:b,destroy:function(){if(m.trackerGroup)m.trackerGroup=db=m.trackerGroup.destroy();Qa(D,"mouseleave",h);Qa(x,"mousemove",g);D.onclick=D.onmousedown=D.onmousemove=D.ontouchstart=D.ontouchend=D.ontouchmove=null}})}function f(a){var b=a.type||q.type||q.defaultSeriesType,c=Ha[b],d=m.hasRendered;if(d)if(U&&b==="column")c=Ha.bar;else if(!U&&b==="bar")c=Ha.column;b=new c;b.init(m,a);!d&&b.inverted&&(U=!0);if(b.isCartesian)Nb=b.isCartesian;Q.push(b);
|
||||||
|
return b}function g(){q.alignTicks!==!1&&o(xa,function(a){a.adjustTickAmount()});gb=null}function h(a){var b=m.isDirtyLegend,c,d=m.isDirtyBox,e=Q.length,f=e,h=m.clipRect;for(Kb(a,m);f--;)if(a=Q[f],a.isDirty&&a.options.stacking){c=!0;break}if(c)for(f=e;f--;)if(a=Q[f],a.options.stacking)a.isDirty=!0;o(Q,function(a){a.isDirty&&a.options.legendType==="point"&&(b=!0)});if(b&&Xa.renderLegend)Xa.renderLegend(),m.isDirtyLegend=!1;Nb&&(La||(gb=null,o(xa,function(a){a.setScale()})),g(),Wb(),o(xa,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=
|
||||||
|
!1,aa(a,"afterSetExtremes",a.getExtremes());if(a.isDirty||d)a.redraw(),d=!0}));d&&(qb(),h&&(Ob(h),h.animate({width:m.plotSizeX,height:m.plotSizeY+1})));o(Q,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});ub&&ub.resetTracker&&ub.resetTracker();I.draw();aa(m,"redraw")}function i(){var a=v.xAxis||{},b=v.yAxis||{},a=Hb(a);o(a,function(a,b){a.index=b;a.isX=!0});b=Hb(b);o(b,function(a,b){a.index=b});a=a.concat(b);o(a,function(a){new c(a)});g()}function k(){var a=Ea.lang,b=q.resetZoomButton,
|
||||||
|
c=b.theme,d=c.states,e=b.relativeTo==="chart"?null:{x:O,y:J,width:ka,height:la};m.resetZoomButton=I.button(a.resetZoom,null,null,Fb,c,d&&d.hover).attr({align:b.position.align,title:a.resetZoomTitle}).add().align(b.position,!1,e)}function j(a,b){$=K(v.title,a);ja=K(v.subtitle,b);o([["title",a,$],["subtitle",b,ja]],function(a){var b=a[0],c=m[b],d=a[1],a=a[2];c&&d&&(c=c.destroy());a&&a.text&&!c&&(m[b]=I.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":Ia+b,zIndex:a.zIndex||4}).css(a.style).add().align(a,
|
||||||
|
!1,ib))})}function l(){Ja=q.renderTo;na=Ia+lc++;Ab(Ja)&&(Ja=x.getElementById(Ja));Ja||jc(13,!0);Ja.innerHTML="";Ja.offsetWidth||(C=Ja.cloneNode(0),P(C,{position:wb,top:"-9999px",display:""}),x.body.appendChild(C));za=(C||Ja).offsetWidth;Ca=(C||Ja).offsetHeight;m.chartWidth=sa=q.width||za||600;m.chartHeight=ra=q.height||(Ca>19?Ca:400);m.container=D=Aa(Ra,{className:Ia+"container"+(q.className?" "+q.className:""),id:na},L({position:mc,overflow:ab,width:sa+ga,height:ra+ga,textAlign:"left",lineHeight:"normal"},
|
||||||
|
q.style),C||Ja);m.renderer=I=q.forExport?new Eb(D,sa,ra,!0):new Xb(D,sa,ra);Fa&&I.create(m,D,sa,ra);var a,b;Bc&&D.getBoundingClientRect&&(a=function(){P(D,{left:0,top:0});b=D.getBoundingClientRect();P(D,{left:-(b.left-S(b.left))+ga,top:-(b.top-S(b.top))+ga})},a(),ha(ca,"resize",a),ha(m,"destroy",function(){Qa(ca,"resize",a)}))}function n(){function a(c){var d=q.width||Ja.offsetWidth,e=q.height||Ja.offsetHeight,c=c?c.target:ca;if(d&&e&&(c===ca||c===x)){if(d!==za||e!==Ca)clearTimeout(b),b=setTimeout(function(){tb(d,
|
||||||
|
e,!1)},100);za=d;Ca=e}}var b;ha(ca,"resize",a);ha(m,"destroy",function(){Qa(ca,"resize",a)})}function t(){m&&aa(m,"endResize",null,function(){La-=1})}function r(){for(var a=U||q.inverted||q.type==="bar"||q.defaultSeriesType==="bar",b=v.series,c=b&&b.length;!a&&c--;)b[c].type==="bar"&&(a=!0);m.inverted=U=a}function Z(){var a=v.labels,b=v.credits,c;j();Xa=m.legend=new Rb;o(xa,function(a){a.setScale()});Wb();o(xa,function(a){a.setTickPositions(!0)});g();Wb();qb();Nb&&o(xa,function(a){a.render()});if(!m.seriesGroup)m.seriesGroup=
|
||||||
|
I.g("series-group").attr({zIndex:3}).add();o(Q,function(a){a.translate();a.setTooltipPoints();a.render()});a.items&&o(a.items,function(){var b=L(a.style,this.style),c=S(b.left)+O,d=S(b.top)+J+12;delete b.left;delete b.top;I.text(this.html,c,d).attr({zIndex:2}).css(b).add()});if(b.enabled&&!m.credits)c=b.href,m.credits=I.text(b.text,0,0).on("click",function(){if(c)location.href=c}).attr({align:b.position.align,zIndex:8}).css(b.style).add().align(b.position);m.hasRendered=!0}function V(){if(!Pb&&ca==
|
||||||
|
ca.top&&x.readyState!=="complete"||Fa&&!ca.canvg)Fa?Cc.push(V,v.global.canvasToolsURL):x.attachEvent("onreadystatechange",function(){x.detachEvent("onreadystatechange",V);x.readyState==="complete"&&V()});else{l();aa(m,"init");if(Highcharts.RangeSelector&&v.rangeSelector.enabled)m.rangeSelector=new Highcharts.RangeSelector(m);rb();sb();r();i();o(v.series||[],function(a){f(a)});if(Highcharts.Scroller&&(v.navigator.enabled||v.scrollbar.enabled))m.scroller=new Highcharts.Scroller(m);m.render=Z;m.tracker=
|
||||||
|
ub=new e(v.tooltip);Z();I.draw();b&&b.apply(m,[m]);o(m.callbacks,function(a){a.apply(m,[m])});C&&(Ja.appendChild(D),Tb(C));aa(m,"load")}}var v,y=a.series;a.series=null;v=K(Ea,a);v.series=a.series=y;var q=v.chart,y=q.margin,y=mb(y)?y:[y,y,y,y],T=p(q.marginTop,y[0]),w=p(q.marginRight,y[1]),E=p(q.marginBottom,y[2]),bb=p(q.marginLeft,y[3]),ia=q.spacingTop,ua=q.spacingRight,R=q.spacingBottom,jb=q.spacingLeft,ib,$,ja,J,ba,M,O,pa,Ja,C,D,na,za,Ca,sa,ra,$a,Za,ma,Na,Sa,da,m=this,kb=(y=q.events)&&!!y.click,
|
||||||
|
va,Db,vb,Da,xb,pb,Ya,la,ka,ub,db,Xa,Wa,yb,ya,Nb=q.showAxes,La=0,xa=[],gb,Q=[],U,I,lb,Bb,ob,qb,Wb,rb,sb,tb,zb,Fb,Rb=function(){function a(b,c){var d=b.legendItem,e=b.legendLine,g=b.legendSymbol,h=q.color,i=c?f.itemStyle.color:h,h=c?b.color:h;d&&d.css({fill:i});e&&e.attr({stroke:h});g&&g.attr({stroke:h,fill:h})}function b(a){var c=a.legendItem,d=a.legendLine,e=a._legendItemPos,f=e[0],e=e[1],g=a.legendSymbol,a=a.checkbox;c&&c.attr({x:r?f:Wa-f,y:e});d&&d.translate(r?f:Wa-f,e-4);g&&(c=f+g.xOff,g.attr({x:r?
|
||||||
|
c:Wa-c,y:e+g.yOff}));if(a)a.x=f,a.y=e}function c(){o(j,function(a){var b=a.checkbox,c=A.alignAttr;b&&P(b,{left:c.translateX+a.legendItemWidth+b.x-40+ga,top:c.translateY+b.y-11+ga})})}function d(b){var c,e,j,k,m=b.legendItem;k=b.series||b;var o=k.options,v=o&&o.borderWidth||0;if(!m){k=/^(bar|pie|area|column)$/.test(k.type);b.legendItem=m=I.text(f.labelFormatter.call(b),0,0,f.useHTML).css(b.visible?n:q).on("mouseover",function(){b.setState(ta);m.css(l)}).on("mouseout",function(){m.css(b.visible?n:q);
|
||||||
|
b.setState()}).on("click",function(){var a=function(){b.setVisible()};b.firePointEvent?b.firePointEvent("legendItemClick",null,a):aa(b,"legendItemClick",null,a)}).attr({align:r?"left":"right",zIndex:2}).add(A);if(!k&&o&&o.lineWidth){var u={"stroke-width":o.lineWidth,zIndex:2};if(o.dashStyle)u.dashstyle=o.dashStyle;b.legendLine=I.path([wa,(-h-i)*(r?1:-1),0,fa,-i*(r?1:-1),0]).attr(u).add(A)}if(k)j=I.rect(c=-h-i,e=-11,h,12,2).attr({zIndex:3}).add(A),r||(c+=h);else if(o&&o.marker&&o.marker.enabled)j=
|
||||||
|
o.marker.radius,j=I.symbol(b.symbol,c=-h/2-i-j,e=-4-j,2*j,2*j).attr(b.pointAttr[Ka]).attr({zIndex:3}).add(A),r||(c+=h/2);if(j)j.xOff=c+v%2/2,j.yOff=e+v%2/2;b.legendSymbol=j;a(b,b.visible);if(o&&o.showCheckbox)b.checkbox=Aa("input",{type:"checkbox",checked:b.selected,defaultChecked:b.selected},f.itemCheckboxStyle,D),ha(b.checkbox,"click",function(a){aa(b,"checkboxClick",{checked:a.target.checked},function(){b.select()})})}c=m.getBBox();e=b.legendItemWidth=f.itemWidth||h+i+c.width+t;w=c.height;if(g&&
|
||||||
|
s-V+e>(J||sa-2*t-V))s=V,z+=y+w+p;!g&&z+f.y+w>ra-ia-R&&(z=T,s+=Z,Z=0);Z=W(Z,e);x=W(x,z+p);b._legendItemPos=[s,z];g?s+=e:z+=y+w+p;C=J||W(s-V+(g?0:e),C)}function e(){s=V;z=T;x=C=0;A||(A=I.g("legend").attr({zIndex:7}).add());j=[];o(M,function(a){var b=a.options;b.showInLegend&&(j=j.concat(a.legendItems||(b.legendType==="point"?a.data:a)))});Mc(j,function(a,b){return(a.options.legendIndex||0)-(b.options.legendIndex||0)});jb&&j.reverse();o(j,d);Wa=J||C;yb=x-v+w;if(E||bb){Wa+=2*t;yb+=2*t;if(ua){if(Wa>0&&
|
||||||
|
yb>0)ua[ua.isNew?"attr":"animate"](ua.crisp(null,null,null,Wa,yb)),ua.isNew=!1}else ua=I.rect(0,0,Wa,yb,f.borderRadius,E||0).attr({stroke:f.borderColor,"stroke-width":E||0,fill:bb||Ma}).add(A).shadow(f.shadow),ua.isNew=!0;ua[j.length?"show":"hide"]()}o(j,b);for(var a=["left","right","top","bottom"],g,h=4;h--;)g=a[h],k[g]&&k[g]!=="auto"&&(f[h<2?"align":"verticalAlign"]=g,f[h<2?"x":"y"]=S(k[g])*(h%2?-1:1));j.length&&A.align(L(f,{width:Wa,height:yb}),!0,ib);La||c()}var f=m.options.legend;if(f.enabled){var g=
|
||||||
|
f.layout==="horizontal",h=f.symbolWidth,i=f.symbolPadding,j,k=f.style,n=f.itemStyle,l=f.itemHoverStyle,q=K(n,f.itemHiddenStyle),t=f.padding||S(k.padding),r=!f.rtl,y=f.itemMarginTop||0,p=f.itemMarginBottom||0,v=18,Z=0,V=4+t+h+i,T=t+y+v-5,s,z,x,w=0,ua,E=f.borderWidth,bb=f.backgroundColor,A,C,J=f.width,M=m.series,jb=f.reversed;e();ha(m,"endResize",c);return{colorizeItem:a,destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine","legendSymbol"],function(b){a[b]&&a[b].destroy()});b&&Tb(a.checkbox)},
|
||||||
|
renderLegend:e,destroy:function(){ua&&(ua=ua.destroy());A&&(A=A.destroy())}}}};Db=function(a,b){return a>=0&&a<=ka&&b>=0&&b<=la};Fb=function(){var a=m.resetZoomButton;aa(m,"selection",{resetSelection:!0},zb);if(a)m.resetZoomButton=a.destroy()};zb=function(a){var b;m.resetZoomEnabled!==!1&&!m.resetZoomButton&&k();!a||a.resetSelection?o(xa,function(a){a.options.zoomEnabled!==!1&&(a.setExtremes(null,null,!1),b=!0)}):o(a.xAxis.concat(a.yAxis),function(a){var c=a.axis;if(m.tracker[c.isXAxis?"zoomX":"zoomY"])c.setExtremes(a.min,
|
||||||
|
a.max,!1),b=!0});b&&h(p(q.animation,m.pointCount<100))};m.pan=function(a){var b=m.xAxis[0],c=m.mouseDownX,d=b.pointRange/2,e=b.getExtremes(),f=b.translate(c-a,!0)+d,c=b.translate(c+ka-a,!0)-d;(d=m.hoverPoints)&&o(d,function(a){a.setState()});f>Ua(e.dataMin,e.min)&&c<W(e.dataMax,e.max)&&b.setExtremes(f,c,!0,!1);m.mouseDownX=a;P(D,{cursor:"move"})};Wb=function(){var a=v.legend,b=p(a.margin,10),c=a.x,d=a.y,e=a.align,f=a.verticalAlign,g;rb();if((m.title||m.subtitle)&&!s(T))(g=W(m.title&&!$.floating&&
|
||||||
|
!$.verticalAlign&&$.y||0,m.subtitle&&!ja.floating&&!ja.verticalAlign&&ja.y||0))&&(J=W(J,g+p($.margin,15)+ia));a.enabled&&!a.floating&&(e==="right"?s(w)||(ba=W(ba,Wa-c+b+ua)):e==="left"?s(bb)||(O=W(O,Wa+c+b+jb)):f==="top"?s(T)||(J=W(J,yb+d+b+ia)):f==="bottom"&&(s(E)||(M=W(M,yb-d+b+R))));m.extraBottomMargin&&(M+=m.extraBottomMargin);m.extraTopMargin&&(J+=m.extraTopMargin);Nb&&o(xa,function(a){a.getOffset()});s(bb)||(O+=pa[3]);s(T)||(J+=pa[0]);s(E)||(M+=pa[2]);s(w)||(ba+=pa[1]);sb()};tb=function(a,b,
|
||||||
|
c){var d=m.title,e=m.subtitle;La+=1;Kb(c,m);Za=ra;$a=sa;if(s(a))m.chartWidth=sa=z(a);if(s(b))m.chartHeight=ra=z(b);P(D,{width:sa+ga,height:ra+ga});I.setSize(sa,ra,c);ka=sa-O-ba;la=ra-J-M;gb=null;o(xa,function(a){a.isDirty=!0;a.setScale()});o(Q,function(a){a.isDirty=!0});m.isDirtyLegend=!0;m.isDirtyBox=!0;Wb();d&&d.align(null,null,ib);e&&e.align(null,null,ib);h(c);Za=null;aa(m,"resize");Ub===!1?t():setTimeout(t,Ub&&Ub.duration||500)};sb=function(){m.plotLeft=O=z(O);m.plotTop=J=z(J);m.plotWidth=ka=
|
||||||
|
z(sa-O-ba);m.plotHeight=la=z(ra-J-M);m.plotSizeX=U?la:ka;m.plotSizeY=U?ka:la;ib={x:jb,y:ia,width:sa-jb-ua,height:ra-ia-R};o(xa,function(a){a.setAxisSize();a.setAxisTranslation()})};rb=function(){J=p(T,ia);ba=p(w,ua);M=p(E,R);O=p(bb,jb);pa=[0,0,0,0]};qb=function(){var a=q.borderWidth||0,b=q.backgroundColor,c=q.plotBackgroundColor,d=q.plotBackgroundImage,e,f={x:O,y:J,width:ka,height:la};e=a+(q.shadow?8:0);if(a||b)ma?ma.animate(ma.crisp(null,null,null,sa-e,ra-e)):ma=I.rect(e/2,e/2,sa-e,ra-e,q.borderRadius,
|
||||||
|
a).attr({stroke:q.borderColor,"stroke-width":a,fill:b||Ma}).add().shadow(q.shadow);c&&(Na?Na.animate(f):Na=I.rect(O,J,ka,la,0).attr({fill:c}).add().shadow(q.plotShadow));d&&(Sa?Sa.animate(f):Sa=I.image(d,O,J,ka,la).add());q.plotBorderWidth&&(da?da.animate(da.crisp(null,O,J,ka,la)):da=I.rect(O,J,ka,la,0,q.plotBorderWidth).attr({stroke:q.plotBorderColor,"stroke-width":q.plotBorderWidth,zIndex:4}).add());m.isDirtyBox=!1};q.reflow!==!1&&ha(m,"load",n);if(y)for(va in y)ha(m,va,y[va]);m.options=v;m.series=
|
||||||
|
Q;m.xAxis=[];m.yAxis=[];m.addSeries=function(a,b,c){var d;a&&(Kb(c,m),b=p(b,!0),aa(m,"addSeries",{options:a},function(){d=f(a);d.isDirty=!0;m.isDirtyLegend=!0;b&&m.redraw()}));return d};m.animation=Fa?!1:p(q.animation,!0);m.Axis=c;m.destroy=function(){var a,b=D&&D.parentNode;if(m!==null){aa(m,"destroy");Qa(m);for(a=xa.length;a--;)xa[a]=xa[a].destroy();for(a=Q.length;a--;)Q[a]=Q[a].destroy();o("title,subtitle,seriesGroup,clipRect,credits,tracker,scroller,rangeSelector".split(","),function(a){var b=
|
||||||
|
m[a];b&&(m[a]=b.destroy())});o([ma,da,Na,Xa,vb,I,ub],function(a){a&&a.destroy&&a.destroy()});ma=da=Na=Xa=vb=I=ub=null;if(D)D.innerHTML="",Qa(D),b&&Tb(D),D=null;clearInterval(Bb);for(a in m)delete m[a];v=m=null}};m.get=function(a){var b,c,d;for(b=0;b<xa.length;b++)if(xa[b].options.id===a)return xa[b];for(b=0;b<Q.length;b++)if(Q[b].options.id===a)return Q[b];for(b=0;b<Q.length;b++){d=Q[b].points||[];for(c=0;c<d.length;c++)if(d[c].id===a)return d[c]}return null};m.getSelectedPoints=function(){var a=
|
||||||
|
[];o(Q,function(b){a=a.concat(nc(b.points,function(a){return a.selected}))});return a};m.getSelectedSeries=function(){return nc(Q,function(a){return a.selected})};m.hideLoading=function(){xb&&cc(xb,{opacity:0},{duration:v.loading.hideDuration||100,complete:function(){P(xb,{display:Ma})}});Ya=!1};m.initSeries=f;m.isInsidePlot=Db;m.redraw=h;m.setSize=tb;m.setTitle=j;m.showLoading=function(a){var b=v.loading;xb||(xb=Aa(Ra,{className:Ia+"loading"},L(b.style,{left:O+ga,top:J+ga,width:ka+ga,height:la+ga,
|
||||||
|
zIndex:10,display:Ma}),D),pb=Aa("span",null,b.labelStyle,xb));pb.innerHTML=a||v.lang.loading;Ya||(P(xb,{opacity:0,display:""}),cc(xb,{opacity:b.style.opacity},{duration:b.showDuration||0}),Ya=!0)};m.pointCount=0;m.counters=new tc;V()}var X,x=document,ca=window,oa=Math,z=oa.round,Ta=oa.floor,Yb=oa.ceil,W=oa.max,Ua=oa.min,Ba=oa.abs,ja=oa.cos,C=oa.sin,da=oa.PI,Dc=da*2/360,kb=navigator.userAgent,Qb=/msie/i.test(kb)&&!ca.opera,Xa=x.documentMode===8,Ec=/AppleWebKit/.test(kb),Bc=/Firefox/.test(kb),Pb=!!x.createElementNS&&
|
||||||
|
!!x.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,Qc=Bc&&parseInt(kb.split("Firefox/")[1],10)<4,Fa=!Pb&&!Qb&&!!x.createElement("canvas").getContext,Xb,Ga=x.documentElement.ontouchstart!==X,Fc={},lc=0,tb,Ea,ac,Ub,La,E,Ra="div",wb="absolute",mc="relative",ab="hidden",Ia="highcharts-",eb="visible",ga="px",Ma="none",wa="M",fa="L",Gc="rgba(192,192,192,"+(Pb?1.0E-6:0.0020)+")",Ka="",ta="hover",Rb="millisecond",ob="second",pb="minute",va="hour",Ca="day",Ya="week",Da="month",Za="year",
|
||||||
|
sb,fc,gc,ic,db,qb,rb,pc,qc,hc,rc,sc,w=ca.HighchartsAdapter,na=w||{},Hc=na.getScript,o=na.each,nc=na.grep,Ac=na.offset,Vb=na.map,K=na.merge,ha=na.addEvent,Qa=na.removeEvent,aa=na.fireEvent,cc=na.animate,Ob=na.stop,Ha={};ca.Highcharts={};ac=function(a,b,c){if(!s(b)||isNaN(b))return"Invalid date";var a=p(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b),e,f=d[gc](),g=d[ic](),h=d[db](),i=d[qb](),k=d[rb](),j=Ea.lang,l=j.weekdays,b={a:l[g].substr(0,3),A:l[g],d:Na(h),e:h,b:j.shortMonths[i],B:j.months[i],m:Na(i+1),y:k.toString().substr(2,
|
||||||
|
2),Y:k,H:Na(f),I:Na(f%12||12),l:f%12||12,M:Na(d[fc]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Na(d.getSeconds()),L:Na(z(b%1E3),3)};for(e in b)a=a.replace("%"+e,b[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};tc.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=za(Rb,1,ob,1E3,pb,6E4,va,36E5,Ca,864E5,Ya,6048E5,Da,2592E6,Za,31556952E3);La={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),
|
||||||
|
c=[].concat(c),h,i,k=function(a){for(g=a.length;g--;)a[g]===wa&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));d===1&&(c=[].concat(c).splice(0,f).concat(c));a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=
|
||||||
|
parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};w&&w.init&&w.init(La);if(!w&&ca.jQuery){var ba=jQuery,Hc=ba.getScript,o=function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c},nc=ba.grep,Vb=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c[d]=b.call(a[d],a[d],d,a);return c},K=function(){var a=arguments;return ba.extend(!0,null,a[0],a[1],a[2],a[3])},Ac=function(a){return ba(a).offset()},ha=function(a,b,c){ba(a).bind(b,c)},Qa=function(a,
|
||||||
|
b,c){var d=x.removeEventListener?"removeEventListener":"detachEvent";x[d]&&!a[d]&&(a[d]=function(){});ba(a).unbind(b,c)},aa=function(a,b,c,d){var e=ba.Event(b),f="detached"+b,g;L(e,c);a[b]&&(a[f]=a[b],a[b]=null);o(["preventDefault","stopPropagation"],function(a){var b=e[a];e[a]=function(){try{b.call(e)}catch(c){a==="preventDefault"&&(g=!0)}}});ba(a).trigger(e);a[f]&&(a[b]=a[f],a[f]=null);d&&!e.isDefaultPrevented()&&!g&&d(e)},cc=function(a,b,c){var d=ba(a);if(b.d)a.toD=b.d,b.d=1;d.stop();d.animate(b,
|
||||||
|
c)},Ob=function(a){ba(a).stop()};ba.extend(ba.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});var Ic=jQuery.fx,Jc=Ic.step;o(["cur","_default","width","height"],function(a,b){var c=b?Jc:Ic.prototype,d=c[a],e;d&&(c[a]=function(a){a=b?a:this;e=a.elem;return e.attr?e.attr(a.prop,a.now):d.apply(this,arguments)})});Jc.d=function(a){var b=a.elem;if(!a.started){var c=La.init(b,b.d,b.toD);a.start=c[0];a.end=c[1];a.started=!0}b.attr("d",La.step(a.start,a.end,a.pos,b.toD))}}w={enabled:!0,
|
||||||
|
align:"center",x:0,y:15,style:{color:"#666",fontSize:"11px",lineHeight:"14px"}};Ea={colors:"#4572A7,#AA4643,#89A54E,#80699B,#3D96AE,#DB843D,#92A8CD,#A47D7C,#B5CA92".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
|
||||||
|
decimalPoint:".",resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/2.2.1/modules/canvas-tools.js"},chart:{borderColor:"#4572A7",borderRadius:5,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacingTop:10,spacingRight:10,spacingBottom:15,spacingLeft:10,style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",
|
||||||
|
resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",y:15,style:{color:"#3E576F",fontSize:"16px"}},subtitle:{text:"",align:"center",y:30,style:{color:"#6D869F"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,shadow:!0,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:K(w,
|
||||||
|
{enabled:!1,y:-6,formatter:function(){return this.y}}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:wb,color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,shadow:!1,style:{padding:"5px"},itemStyle:{cursor:"pointer",color:"#3E576F"},itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#C0C0C0"},
|
||||||
|
itemCheckboxStyle:{position:wb,width:"13px",height:"13px"},symbolWidth:16,symbolPadding:5,verticalAlign:"bottom",x:0,y:0},loading:{labelStyle:{fontWeight:"bold",position:mc,top:"1em"},style:{position:wb,backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:2,borderRadius:5,headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',
|
||||||
|
shadow:!0,shared:Fa,snap:Ga?25:10,style:{color:"#333333",fontSize:"12px",padding:"5px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var $b={dateTimeLabelFormats:za(Rb,"%H:%M:%S.%L",ob,"%H:%M:%S",pb,"%H:%M",va,"%H:%M",Ca,"%e. %b",Ya,"%e. %b",Da,"%b '%y",Za,"%Y"),endOnTick:!1,gridLineColor:"#C0C0C0",labels:w,lineColor:"#C0D0E0",lineWidth:1,
|
||||||
|
max:null,min:null,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#6D869F",fontWeight:"bold"}},type:"linear"},kc=K($b,{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{align:"right",x:-8,
|
||||||
|
y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Y-values"},stackLabels:{enabled:!1,formatter:function(){return this.total},style:w.style}}),Pc={labels:{align:"right",x:-8,y:null},title:{rotation:270}},Oc={labels:{align:"left",x:8,y:null},title:{rotation:90}},zc={labels:{align:"center",x:0,y:14,overflow:"justify"},title:{rotation:0}},Nc=K(zc,{labels:{y:-5,overflow:"justify"}}),M=Ea.plotOptions,w=M.line;M.spline=K(w);M.scatter=K(w,{lineWidth:0,states:{hover:{lineWidth:0}},
|
||||||
|
tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}});M.area=K(w,{threshold:0});M.areaspline=K(M.area);M.column=K(w,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{y:null,verticalAlign:null},
|
||||||
|
threshold:0});M.bar=K(M.column,{dataLabels:{align:"left",x:5,y:null,verticalAlign:"middle"}});M.pie=K(w,{borderColor:"#FFFFFF",borderWidth:1,center:["50%","50%"],colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},y:5},legendType:"point",marker:null,size:"75%",showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}}});vc();var ma=function(a){var b=[],c;(function(a){(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?
|
||||||
|
b=[S(c[1]),S(c[2]),S(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))&&(b=[S(c[1],16),S(c[2],16),S(c[3],16),1])})(a);return{get:function(c){return b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a},brighten:function(a){if(Bb(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=S(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},setOpacity:function(a){b[3]=a;return this}}};Sa.prototype={init:function(a,b){this.element=
|
||||||
|
b==="span"?Aa(b):x.createElementNS("http://www.w3.org/2000/svg",b);this.renderer=a;this.attrSetters={}},animate:function(a,b,c){b=p(b,Ub,!0);Ob(this);if(b){b=K(b);if(c)b.complete=c;cc(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName,i=this.renderer,k,j=this.attrSetters,l=this.shadows,n,o=this;Ab(a)&&s(b)&&(c=a,a={},a[c]=b);if(Ab(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),o=A(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&
|
||||||
|
(o=parseFloat(o));else for(c in a)if(k=!1,d=a[c],e=j[c]&&j[c](d,c),e!==!1){e!==X&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0"),this.d=d;else if(c==="x"&&h==="text"){for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],A(f,"x")===A(g,"x")&&A(f,"x",d);this.rotation&&A(g,"transform","rotate("+this.rotation+" "+d+" "+S(a.y||A(g,"y"))+")")}else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")A(g,
|
||||||
|
{rx:d,ry:d}),k=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign")this[c]=d,this.updateTransform(),k=!0;else if(c==="stroke")d=i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=Ma;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");
|
||||||
|
for(e=d.length;e--;)d[e]=S(d[e])*a["stroke-width"];d=d.join(",")}}else c==="isTracker"?this[c]=d:c==="width"?d=S(d):c==="align"?(c="text-anchor",d={left:"start",center:"middle",right:"end"}[d]):c==="title"&&(e=x.createElementNS("http://www.w3.org/2000/svg","title"),e.appendChild(x.createTextNode(d)),g.appendChild(e));c==="strokeWidth"&&(c="stroke-width");Ec&&c==="stroke-width"&&d===0&&(d=1.0E-6);this.symbolName&&/^(x|y|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(n||(this.symbolAttr(a),n=!0),k=
|
||||||
|
!0);if(l&&/^(width|height|visibility|x|y|d|transform)$/.test(c))for(e=l.length;e--;)A(l[e],c,d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;c==="text"?(this.textStr=d,this.added&&i.buildText(this)):k||A(g,c,d)}if(Ec&&/Chrome\/(18|19)/.test(kb)&&h==="text"&&(a.x!==X||a.y!==X))c=g.parentNode,d=g.nextSibling,c&&(c.removeChild(g),d?c.insertBefore(g,d):c.appendChild(g));return o},symbolAttr:function(a){var b=this;o("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=
|
||||||
|
p(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path","url("+this.renderer.url+"#"+a.id+")")},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;i=z(a)%2/2;h.x=Ta(b||this.x||0)+i;h.y=Ta(c||this.y||0)+i;h.width=Ta((d||this.width||0)-2*i);h.height=Ta((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=
|
||||||
|
this.element,b=a&&a.width&&b.nodeName==="text",c,d="",e=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=L(this.styles,a);if(Qb&&!Pb)b&&delete a.width,P(this.element,a);else{for(c in a)d+=c.replace(/([A-Z])/g,e)+":"+a[c]+";";this.attr({style:d})}b&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=b;Ga&&a==="click"&&(a="touchstart",c=function(a){a.preventDefault();b()});this.element["on"+a]=c;return this},translate:function(a,b){return this.attr({translateX:a,
|
||||||
|
translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=L(this.styles,a);P(this.element,a);return this},htmlGetBBox:function(a){var b=this.element,c=this.bBox;if(!c||a){if(b.nodeName==="text")b.style.position=wb;c=this.bBox={x:b.offsetLeft,y:b.offsetTop,width:b.offsetWidth,height:b.offsetHeight}}return c},htmlUpdateTransform:function(){if(this.added){var a=
|
||||||
|
this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=g&&g!=="left",k=this.shadows;if(c||d)P(b,{marginLeft:c,marginTop:d}),k&&o(k,function(a){P(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&o(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var j,l,k=this.rotation,n;j=0;var t=1,r=0,Z;n=S(this.textWidth);var V=this.xCorr||0,v=this.yCorr||0,y=[k,g,b.innerHTML,this.textWidth].join(",");
|
||||||
|
if(y!==this.cTT)s(k)&&(j=k*Dc,t=ja(j),r=C(j),P(b,{filter:k?["progid:DXImageTransform.Microsoft.Matrix(M11=",t,", M12=",-r,", M21=",r,", M22=",t,", sizingMethod='auto expand')"].join(""):Ma})),j=p(this.elemWidth,b.offsetWidth),l=p(this.elemHeight,b.offsetHeight),j>n&&(P(b,{width:n+ga,display:"block",whiteSpace:"normal"}),j=n),n=a.fontMetrics(b.style.fontSize).b,V=t<0&&-j,v=r<0&&-l,Z=t*r<0,V+=r*n*(Z?1-h:h),v-=t*n*(k?Z?h:1-h:1),i&&(V-=j*h*(t<0?-1:1),k&&(v-=l*h*(r<0?-1:1)),P(b,{textAlign:g})),this.xCorr=
|
||||||
|
V,this.yCorr=v;P(b,{left:e+V+ga,top:f+v+ga});this.cTT=y}}else this.alignOnAdd=!0},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.inverted,d=this.rotation,e=[];c&&(a+=this.attr("width"),b+=this.attr("height"));(a||b)&&e.push("translate("+a+","+b+")");c?e.push("rotate(90) scale(-1,1)"):d&&e.push("rotate("+d+" "+this.x+" "+this.y+")");e.length&&A(this.element,"transform",e.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,
|
||||||
|
b,c){a?(this.alignOptions=a,this.alignByTranslate=b,c||this.renderer.alignedObjects.push(this)):(a=this.alignOptions,b=this.alignByTranslate);var c=p(c,this.renderer),d=a.align,e=a.verticalAlign,f=(c.x||0)+(a.x||0),g=(c.y||0)+(a.y||0),h={};/^(right|center)$/.test(d)&&(f+=(c.width-(a.width||0))/{right:1,center:2}[d]);h[b?"translateX":"x"]=z(f);/^(bottom|middle)$/.test(e)&&(g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1));h[b?"translateY":"y"]=z(g);this[this.placed?"animate":"attr"](h);this.placed=
|
||||||
|
!0;this.alignAttr=h;return this},getBBox:function(a){var b,c,d=this.rotation;c=this.element;var e=d*Dc;if(c.namespaceURI==="http://www.w3.org/2000/svg"){try{b=c.getBBox?L({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(f){}if(!b||b.width<0)b={width:0,height:0};a=b.width;c=b.height;if(d)b.width=Ba(c*C(e))+Ba(a*ja(e)),b.height=Ba(c*ja(e))+Ba(a*C(e))}else b=this.htmlGetBBox(a);return b},show:function(){return this.attr({visibility:eb})},hide:function(){return this.attr({visibility:ab})},
|
||||||
|
add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=A(f,"zIndex"),h;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=S(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=e[c],b=A(a,"zIndex"),a!==f&&(S(b)>g||!s(g)&&s(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;aa(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||
|
||||||
|
{},c=a.shadows,d=a.box,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=null;Ob(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);c&&o(c,function(b){a.safeRemoveChild(b)});d&&d.destroy();Gb(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},empty:function(){for(var a=this.element,b=a.childNodes,c=b.length;c--;)a.removeChild(b[c])},shadow:function(a,b){var c=[],d,e,f=this.element,
|
||||||
|
g=this.parentInverted?"(-1,-1)":"(1,1)";if(a){for(d=1;d<=3;d++)e=f.cloneNode(0),A(e,{isShadow:"true",stroke:"rgb(0, 0, 0)","stroke-opacity":0.05*d,"stroke-width":7-2*d,transform:"translate"+g,fill:Ma}),b?b.element.appendChild(e):f.parentNode.insertBefore(e,f),c.push(e);this.shadows=c}return this}};var Eb=function(){this.init.apply(this,arguments)};Eb.prototype={Element:Sa,init:function(a,b,c,d){var e=location,f;f=this.createElement("svg").attr({xmlns:"http://www.w3.org/2000/svg",version:"1.1"});a.appendChild(f.element);
|
||||||
|
this.isSVG=!0;this.box=f.element;this.boxWrapper=f;this.alignedObjects=[];this.url=Qb?"":e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1");this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1)},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Jb(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);
|
||||||
|
return b},draw:function(){},buildText:function(a){for(var b=a.element,c=p(a.textStr,"").toString().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),d=b.childNodes,e=/style="([^"]+)"/,f=/href="([^"]+)"/,g=A(b,"x"),h=a.styles,i=h&&S(h.width),k=h&&h.lineHeight,j,h=d.length;h--;)b.removeChild(d[h]);i&&!a.added&&this.box.appendChild(b);c[c.length-1]===""&&
|
||||||
|
c.pop();o(c,function(c,d){var h,r=0,p,c=c.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");h=c.split("|||");o(h,function(c){if(c!==""||h.length===1){var l={},o=x.createElementNS("http://www.w3.org/2000/svg","tspan");e.test(c)&&A(o,"style",c.match(e)[1].replace(/(;| |^)color([ :])/,"$1fill$2"));f.test(c)&&(A(o,"onclick",'location.href="'+c.match(f)[1]+'"'),P(o,{cursor:"pointer"}));c=(c.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");o.appendChild(x.createTextNode(c));
|
||||||
|
r?l.dx=3:l.x=g;if(!r){if(d){!Pb&&a.renderer.forExport&&P(o,{display:"block"});p=ca.getComputedStyle&&S(ca.getComputedStyle(j,null).getPropertyValue("line-height"));if(!p||isNaN(p))p=k||j.offsetHeight||18;A(o,"dy",p)}j=o}A(o,l);b.appendChild(o);r++;if(i)for(var c=c.replace(/-/g,"- ").split(" "),q,T=[];c.length||T.length;)q=a.getBBox().width,l=q>i,!l||c.length===1?(c=T,T=[],c.length&&(o=x.createElementNS("http://www.w3.org/2000/svg","tspan"),A(o,{dy:k||16,x:g}),b.appendChild(o),q>i&&(i=q))):(o.removeChild(o.firstChild),
|
||||||
|
T.unshift(c.pop())),c.length&&o.appendChild(x.createTextNode(c.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g){var h=this.label(a,b,c),i=0,k,j,l,n,o,a={x1:0,y1:0,x2:0,y2:1},e=K(za("stroke-width",1,"stroke","#999","fill",za("linearGradient",a,"stops",[[0,"#FFF"],[1,"#DDD"]]),"r",3,"padding",3,"style",za("color","black")),e);l=e.style;delete e.style;f=K(e,za("stroke","#68A","fill",za("linearGradient",a,"stops",[[0,"#FFF"],[1,"#ACF"]])),f);n=f.style;delete f.style;g=K(e,za("stroke",
|
||||||
|
"#68A","fill",za("linearGradient",a,"stops",[[0,"#9BD"],[1,"#CDF"]])),g);o=g.style;delete g.style;ha(h.element,"mouseenter",function(){h.attr(f).css(n)});ha(h.element,"mouseleave",function(){k=[e,f,g][i];j=[l,n,o][i];h.attr(k).css(j)});h.setState=function(a){(i=a)?a===2&&h.attr(g).css(o):h.attr(e).css(l)};return h.on("click",function(){d.call(h)}).attr(e).css(L({cursor:"default"},l))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=z(a[1])+b%2/2);a[2]===a[5]&&(a[2]=a[5]=z(a[2])+b%2/2);return a},path:function(a){return this.createElement("path").attr({d:a,
|
||||||
|
fill:Ma})},circle:function(a,b,c){a=mb(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(mb(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;return this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0})},rect:function(a,b,c,d,e,f){if(mb(a))b=a.y,c=a.width,d=a.height,e=a.r,f=a.strokeWidth,a=a.x;e=this.createElement("rect").attr({rx:e,ry:e,fill:Ma});return e.attr(e.crisp(f,a,b,W(c,0),W(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,
|
||||||
|
e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return s(a)?b.attr({"class":Ia+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:Ma};arguments.length>1&&L(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,
|
||||||
|
b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(z(b),z(c),d,e,f),i=/^url\((.*?)\)$/,k;if(h)g=this.path(h),L(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&L(g,f);else if(i.test(a)){var j=function(a,b){a.attr({width:b[0],height:b[1]}).translate(-z(b[0]/2),-z(b[1]/2))};k=a.match(i)[1];a=Fc[k];g=this.image(k).attr({x:b,y:c});a?j(g,a):(g.attr({width:0,height:0}),Aa("img",{onload:function(){j(g,Fc[k]=[this.width,this.height])},src:k}))}return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[wa,a+c/2,
|
||||||
|
b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return[wa,a,b,fa,a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return[wa,a+c/2,b,fa,a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return[wa,a,b,fa,a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return[wa,a+c/2,b,fa,a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-1.0E-6,d=e.innerR,h=ja(f),i=C(f),k=ja(g),g=C(g),e=e.end-f<da?0:1;return[wa,a+c*h,b+c*i,
|
||||||
|
"A",c,c,0,e,1,a+c*k,b+c*g,fa,a+d*k,b+d*g,"A",d,d,0,e,0,a+d*h,b+d*i,"Z"]}},clipRect:function(a,b,c,d){var e=Ia+lc++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d,e=/^rgba/;if(a&&a.linearGradient){var f=this,g=a.linearGradient,b=!Fb(g),c=f.gradients,h,i=g.x1||g[0]||0,k=g.y1||g[1]||0,j=g.x2||g[2]||0,l=g.y2||g[3]||0,n,t,r=[b,i,k,j,l,a.stops.join(",")].join(",");c[r]?g=A(c[r].element,"id"):(g=Ia+lc++,
|
||||||
|
h=f.createElement("linearGradient").attr(L({id:g,x1:i,y1:k,x2:j,y2:l},b?null:{gradientUnits:"userSpaceOnUse"})).add(f.defs),h.stops=[],o(a.stops,function(a){e.test(a[1])?(d=ma(a[1]),n=d.get("rgb"),t=d.get("a")):(n=a[1],t=1);a=f.createElement("stop").attr({offset:a[0],"stop-color":n,"stop-opacity":t}).add(h);h.stops.push(a)}),c[r]=h);return"url("+this.url+"#"+g+")"}else return e.test(a)?(d=ma(a),A(b,c+"-opacity",d.get("a")),d.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a,b,c,d){var e=
|
||||||
|
Ea.chart.style;if(d&&!this.forExport)return this.html(a,b,c);b=z(p(b,0));c=z(p(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,fontSize:e.fontSize});a.x=b;a.y=c;return a},html:function(a,b,c){var d=Ea.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:z(b),y:z(c)}).css({position:wb,
|
||||||
|
whiteSpace:"nowrap",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c,d=h.box.parentNode;if(a){if(b=a.div,!b)b=a.div=Aa(Ra,{className:A(a.element,"class")},{position:wb,left:a.attr("translateX")+ga,top:a.attr("translateY")+ga},d),c=b.style,L(a.attrSetters,{translateX:function(a){c.left=a+ga},translateY:function(a){c.top=a+ga},visibility:function(a,b){c[b]=a}})}else b=d;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};return e},
|
||||||
|
fontMetrics:function(a){var a=S(a||11),a=a<24?a+4:z(a*1.2),b=z(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h){function i(){var a=n.styles,a=a&&a.textAlign,b=v,c;c=h?0:ia;if(s(y)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(y-p.width);(b!==t.x||c!==t.y)&&t.attr({x:b,y:c});t.x=b;t.y=c}function k(a,b){r?r.attr(a,b):x[a]=b}function j(){n.attr({text:a,x:b,y:c,anchorX:e,anchorY:f})}var l=this,n=l.g(),t=l.text("",0,0,g).attr({zIndex:1}).add(n),r,p,V="left",v=3,y,q,T,A,w=0,x={},ia,g=
|
||||||
|
n.attrSetters;ha(n,"add",j);g.width=function(a){y=a;return!1};g.height=function(a){q=a;return!1};g.padding=function(a){s(a)&&a!==v&&(v=a,i());return!1};g.align=function(a){V=a;return!1};g.text=function(a,b){t.attr(b,a);var c;c=t.element.style;p=(y===void 0||q===void 0||n.styles.textAlign)&&t.getBBox(!0);n.width=(y||p.width)+2*v;n.height=(q||p.height)+2*v;ia=v+l.fontMetrics(c&&c.fontSize).b;if(!r)c=h?-ia:0,n.box=r=d?l.symbol(d,0,c,n.width,n.height):l.rect(0,c,n.width,n.height,0,x["stroke-width"]),
|
||||||
|
r.add(n);r.attr(K({width:n.width,height:n.height},x));x=null;i();return!1};g["stroke-width"]=function(a,b){w=a%2/2;k(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){k(b,a);return!1};g.anchorX=function(a,b){e=a;k(b,a+w-T);return!1};g.anchorY=function(a,b){f=a;k(b,a-A);return!1};g.x=function(a){a-={left:0,center:0.5,right:1}[V]*((y||p.width)+v);T=n.x=z(a);n.attr("translateX",T);return!1};g.y=function(a){A=n.y=z(a);n.attr("translateY",a);return!1};var ua=n.css;return L(n,{css:function(a){if(a){var b=
|
||||||
|
{},a=K({},a);o("fontSize,fontWeight,fontFamily,color,lineHeight,width".split(","),function(c){a[c]!==X&&(b[c]=a[c],delete a[c])});t.css(b)}return ua.call(n,a)},getBBox:function(){return r.getBBox()},shadow:function(a){r.shadow(a);return n},destroy:function(){Qa(n,"add",j);Qa(n.element,"mouseenter");Qa(n.element,"mouseleave");t&&(t=t.destroy());Sa.prototype.destroy.call(n)}})}};Xb=Eb;var $a;if(!Pb&&!Fa)$a={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ",wb,";"];(b==="shape"||
|
||||||
|
b===Ra)&&d.push("left:0;top:0;width:10px;height:10px;");Xa&&d.push("visibility: ",b===Ra?ab:eb);c.push(' style="',d.join(""),'"/>');if(b)c=b===Ra||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=Aa(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);Xa&&d.gVis===ab&&P(c,{visibility:ab});d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();aa(this,
|
||||||
|
"add");return this},toggleChildren:function(a,b){for(var c=a.childNodes,d=c.length;d--;)P(c[d],{visibility:b}),c[d].nodeName==="DIV"&&this.toggleChildren(c[d],b)},updateTransform:Sa.prototype.htmlUpdateTransform,attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,k=this.symbolName,j,l=this.shadows,n,o=this.attrSetters,r=this;Ab(a)&&s(b)&&(c=a,a={},a[c]=b);if(Ab(a))c=a,r=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],n=!1,
|
||||||
|
e=o[c]&&o[c](d,c),e!==!1&&d!==null){e!==X&&(d=e);if(k&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))j||(this.symbolAttr(a),j=!0),n=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");e=d.length;for(n=[];e--;)n[e]=Bb(d[e])?z(d[e]*10)-5:d[e]==="Z"?"x":d[e];d=n.join(" ")||"x";f.path=d;if(l)for(e=l.length;e--;)l[e].path=d;n=!0}else if(c==="zIndex"||c==="visibility"){if(Xa&&c==="visibility"&&h==="DIV")f.gVis=d,this.toggleChildren(f,d),d===eb&&(d=null);d&&(g[c]=d);n=!0}else if(c==="width"||
|
||||||
|
c==="height")d=W(0,d),this[c]=d,this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,n=!0;else if(c==="x"||c==="y")this[c]=d,g[{x:"left",y:"top"}[c]]=d;else if(c==="class")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,Bb(d)&&(d+=ga);else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||Aa(i.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,n=!0;else if(c===
|
||||||
|
"fill")h==="SPAN"?g.color=d:(f.filled=d!==Ma?!0:!1,d=i.color(d,f,c),c="fillcolor");else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),n=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,n=!0;if(l&&c==="visibility")for(e=l.length;e--;)l[e].style[c]=d;n||(Xa?f[c]=d:A(f,c,d))}return r},clip:function(a){var b=this,c=a.members;c.push(b);b.destroyClip=function(){Gb(c,b)};return b.css(a.getCSS(b.inverted))},css:Sa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&
|
||||||
|
Tb(a)},destroy:function(){this.destroyClip&&this.destroyClip();return Sa.prototype.destroy.apply(this)},empty:function(){for(var a=this.element.childNodes,b=a.length,c;b--;)c=a[b],c.parentNode.removeChild(c)},on:function(a,b){this.element["on"+a]=function(){var a=ca.event;a.target=a.srcElement;b(a)};return this},shadow:function(a,b){var c=[],d,e=this.element,f=this.renderer,g,h=e.style,i,k=e.path;k&&typeof k.value!=="string"&&(k="x");if(a){for(d=1;d<=3;d++)i=['<shape isShadow="true" strokeweight="',
|
||||||
|
7-2*d,'" filled="false" path="',k,'" coordsize="100,100" style="',e.style.cssText,'" />'],g=Aa(f.prepVML(i),null,{left:S(h.left)+1,top:S(h.top)+1}),i=['<stroke color="black" opacity="',0.05*d,'"/>'],Aa(f.prepVML(i),null,null,g),b?b.element.appendChild(g):e.parentNode.insertBefore(g,e),c.push(g);this.shadows=c}return this}},$a=pa(Sa,$a),w={Element:$a,isIE8:kb.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ra);e=d.element;e.style.position=mc;a.appendChild(d.element);
|
||||||
|
this.box=e;this.boxWrapper=d;this.setSize(b,c,!1);if(!x.namespaces.hcv)x.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),x.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "},clipRect:function(a,b,c,d){var e=this.createElement();return L(e,{members:[],left:a,top:b,width:c,height:d,getCSS:function(a){var b=this.top,c=this.left,d=c+this.width,e=b+this.height,b={clip:"rect("+z(a?c:b)+"px,"+z(a?e:d)+"px,"+z(a?d:e)+
|
||||||
|
"px,"+z(a?b:c)+"px)"};!a&&Xa&&L(b,{width:d+ga,height:e+ga});return b},updateClipping:function(){o(e.members,function(a){a.css(e.getCSS(a.inverted))})}})},color:function(a,b,c){var d,e=/^rgba/;if(a&&a.linearGradient){var f,g,h=a.linearGradient,i=h.x1||h[0]||0,k=h.y1||h[1]||0,j=h.x2||h[2]||0,h=h.y2||h[3]||0,l,n,p,r;o(a.stops,function(a,b){e.test(a[1])?(d=ma(a[1]),f=d.get("rgb"),g=d.get("a")):(f=a[1],g=1);b?(p=f,r=g):(l=f,n=g)});if(c==="fill")a=90-oa.atan((h-k)/(j-i))*180/da,a=['<fill colors="0% ',l,
|
||||||
|
",100% ",p,'" angle="',a,'" opacity="',r,'" o:opacity2="',n,'" type="gradient" focus="100%" method="sigma" />'],Aa(this.prepVML(a),null,null,b);else return f}else if(e.test(a)&&b.tagName!=="IMG")return d=ma(a),a=["<",c,' opacity="',d.get("a"),'"/>'],Aa(this.prepVML(a),null,null,b),d.get("rgb");else{b=b.getElementsByTagName(c);if(b.length)b[0].opacity=1;return a}},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===
|
||||||
|
-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:Eb.prototype.html,path:function(a){return this.createElement("shape").attr({coordsize:"100 100",d:a})},circle:function(a,b,c){return this.symbol("circle").attr({x:a-c,y:b-c,width:2*c,height:2*c})},g:function(a){var b;a&&(b={className:Ia+a,"class":Ia+a});return this.createElement(Ra).attr(b)},image:function(a,
|
||||||
|
b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.css({left:b,top:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){if(mb(a))b=a.y,c=a.width,d=a.height,f=a.strokeWidth,a=a.x;var g=this.symbol("rect");g.r=e;return g.attr(g.crisp(f,a,b,W(c,0),W(d,0)))},invertChild:function(a,b){var c=b.style;P(a,{flip:"x",left:S(c.width)-10,top:S(c.height)-10,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,c=e.r||c||d,d=ja(f),h=C(f),i=ja(g),k=C(g),e=e.innerR,
|
||||||
|
j=0.08/c,l=e&&0.25/e||0;if(g-f===0)return["x"];else 2*da-g+f<j?i=-j:g-f<l&&(i=ja(f+l));return["wa",a-c,b-c,a+c,b+c,a+c*d,b+c*h,a+c*i,b+c*k,"at",a-e,b-e,a+e,b+e,a+e*i,b+e*k,a+e*d,b+e*h,"x","e"]},circle:function(a,b,c,d){return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){if(!s(e))return[];var f=a+c,g=b+d,c=Ua(e.r||0,c,d);return[wa,a+c,b,fa,f-c,b,"wa",f-2*c,b,f,b+2*c,f-c,b,f,b+c,fa,f,g-c,"wa",f-2*c,g-2*c,f,g,f,g-c,f-c,g,fa,a+c,g,"wa",a,g-2*c,a+2*c,g,a+c,g,a,g-c,fa,a,b+c,"wa",
|
||||||
|
a,b,a+2*c,b+2*c,a,b+c,a+c,b,"x","e"]}}},$a=function(){this.init.apply(this,arguments)},$a.prototype=K(Eb.prototype,w),Xb=$a;var oc,Cc;Fa&&(oc=function(){},Cc=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Hc(d,a);b.push(c)}}}());Xb=$a||oc||Eb;wc.prototype.callbacks=[];var lb=function(){};lb.prototype={init:function(a,b,c){var d=a.chart.counters;this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint){b=
|
||||||
|
a.chart.options.colors;if(!this.options)this.options={};this.color=this.options.color=this.color||b[d.color++];d.wrapColor(b.length)}a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=typeof a;this.config=a;if(d==="number"||a===null)this.y=a;else if(typeof a[0]==="number")this.x=a[0],this.y=a[1];else if(d==="object"&&typeof a.length!=="number"){if(L(this,a),this.options=a,a.dataLabels)c._hasPointLabels=!0}else if(typeof a[0]==="string")this.name=a[0],this.y=a[1];if(this.x===
|
||||||
|
X)this.x=b===X?c.autoIncrement():b},destroy:function(){var a=this.series,b=a.chart.hoverPoints,c;a.chart.pointCount--;b&&(this.setState(),Gb(b,this));if(this===a.chart.hoverPoint)this.onMouseOut();a.chart.hoverPoints=null;if(this.graphic||this.dataLabel)Qa(this),this.destroyElements();this.legendItem&&this.series.chart.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,tracker,dataLabel,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&
|
||||||
|
(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series.chart,a=p(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=a;c.setState(a&&"select");b||o(d.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=!1,a.setState(Ka),a.firePointEvent("unselect")})})},
|
||||||
|
onMouseOver:function(){var a=this.series,b=a.chart,c=b.tooltip,d=b.hoverPoint;if(d&&d!==this)d.onMouseOut();this.firePointEvent("mouseOver");c&&(!c.shared||a.noSharedTooltip)&&c.refresh(this);this.setState(ta);b.hoverPoint=this},onMouseOut:function(){this.firePointEvent("mouseOut");this.setState();this.series.chart.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=String(this.y).split("."),d=d[1]?d[1].length:0,e=a.match(/\{(series|point)\.[a-zA-Z]+\}/g),f=/[{\.}]/,
|
||||||
|
g,h,i,k;for(k in e)h=e[k],Ab(h)&&h!==a&&(i=(" "+h).split(f),g={point:this,series:b}[i[1]],i=i[2],g=g===this&&(i==="y"||i==="open"||i==="high"||i==="low"||i==="close")?(c.valuePrefix||c.yPrefix||"")+dc(this[i],p(c.valueDecimals,c.yDecimals,d))+(c.valueSuffix||c.ySuffix||""):g[i],a=a.replace(h,g));return a},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=h.length,k=e.chart,b=p(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);mb(a)&&(e.getAttribs(),f&&f.attr(d.pointAttr[e.state]));
|
||||||
|
for(g=0;g<i;g++)if(h[g]===d){e.xData[g]=d.x;e.yData[g]=d.y;e.options.data[g]=a;break}e.isDirty=!0;e.isDirtyData=!0;b&&k.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.chart,f,g=d.data,h=g.length;Kb(b,e);a=p(a,!0);c.firePointEvent("remove",null,function(){for(f=0;f<h;f++)if(g[f]===c){g.splice(f,1);d.options.data.splice(f,1);d.xData.splice(f,1);d.yData.splice(f,1);break}c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&e.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;
|
||||||
|
(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});aa(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=K(this.series.options.point,this.options).events,b;this.events=a;for(b in a)ha(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=M[d.type].marker&&d.options.marker,
|
||||||
|
g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,k=d.stateMarkerGraphic,j=d.chart,l=this.pointAttr,a=a||Ka;if(!(a===this.state||this.selected&&a!=="select"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&l[a].r,this.graphic.attr(K(l[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a){if(!k)e=f.radius,d.stateMarkerGraphic=k=j.renderer.symbol(d.symbol,-e,-e,2*e,2*e).attr(l[a]).add(d.group);k.translate(b,c)}if(k)k[a?"show":"hide"]()}this.state=
|
||||||
|
a}}};var $=function(){};$.prototype={isCartesian:!0,type:"line",pointClass:lb,sorted:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},init:function(a,b){var c,d;d=a.series.length;this.chart=a;this.options=b=this.setOptions(b);this.bindAxes();L(this,{index:d,name:b.name||"Series "+(d+1),state:Ka,pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(Fa)b.animation=!1;d=b.events;for(c in d)ha(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&
|
||||||
|
b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1)},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&o(["xAxis","yAxis"],function(e){o(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]===X&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0})})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=p(b,a.pointStart,0);this.pointInterval=p(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;
|
||||||
|
return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else o(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=a.data;a.data=null;c=K(c[this.type],c.series,a);c.data=a.data=d;this.tooltipOptions=K(b.tooltip,c.tooltip);return c},getColor:function(){var a=
|
||||||
|
this.chart.options.colors,b=this.chart.counters;this.color=this.options.color||a[b.color++]||"#0000ff";b.wrapColor(a.length)},getSymbol:function(){var a=this.options.marker,b=this.chart,c=b.options.symbols,b=b.counters;this.symbol=a.symbol||c[b.symbol++];if(/^url/.test(this.symbol))a.radius=0;b.wrapSymbol(c.length)},addPoint:function(a,b,c,d){var e=this.data,f=this.graph,g=this.area,h=this.chart,i=this.xData,k=this.yData,j=f&&f.shift||0,l=this.options.data;Kb(d,h);if(f&&c)f.shift=j+1;if(g){if(c)g.shift=
|
||||||
|
j+1;g.isArea=!0}b=p(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);i.push(d.x);k.push(this.valueCount===4?[d.open,d.high,d.low,d.close]:d.y);l.push(a);c&&(e[0]?e[0].remove(!1):(e.shift(),i.shift(),k.shift(),l.shift()));this.getAttribs();this.isDirtyData=this.isDirty=!0;b&&h.redraw()},setData:function(a,b){var c=this.points,d=this.options,e=this.initialColor,f=this.chart,g=null;this.xIncrement=null;this.pointRange=this.xAxis&&this.xAxis.categories&&1||d.pointRange;if(s(e))f.counters.color=
|
||||||
|
e;var h=[],i=[],k=a?a.length:[],j=this.valueCount===4;if(k>(d.turboThreshold||1E3)){for(e=0;g===null&&e<k;)g=a[e],e++;if(Bb(g)){g=p(d.pointStart,0);d=p(d.pointInterval,1);for(e=0;e<k;e++)h[e]=g,i[e]=a[e],g+=d;this.xIncrement=g}else if(Fb(g))if(j)for(e=0;e<k;e++)d=a[e],h[e]=d[0],i[e]=d.slice(1,5);else for(e=0;e<k;e++)d=a[e],h[e]=d[0],i[e]=d[1]}else for(e=0;e<k;e++)d={series:this},this.pointClass.prototype.applyOptions.apply(d,[a[e]]),h[e]=d.x,i[e]=j?[d.open,d.high,d.low,d.close]:d.y;this.data=[];this.options.data=
|
||||||
|
a;this.xData=h;this.yData=i;for(e=c&&c.length||0;e--;)c[e]&&c[e].destroy&&c[e].destroy();this.isDirty=this.isDirtyData=f.isDirtyBox=!0;p(b,!0)&&f.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=p(a,!0);if(!c.isRemoving)c.isRemoving=!0,aa(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e=0,f=d,g,h,i=this.xAxis,k=this.options,j=k.cropThreshold,l=this.isCartesian;if(l&&!this.isDirty&&
|
||||||
|
!i.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(l&&this.sorted&&(!j||d>j||this.forceCrop))if(a=i.getExtremes(),i=a.min,j=a.max,b[d-1]<i||b[0]>j)b=[],c=[];else if(b[0]<i||b[d-1]>j){for(a=0;a<d;a++)if(b[a]>=i){e=W(0,a-1);break}for(;a<d;a++)if(b[a]>j){f=a+1;break}b=b.slice(e,f);c=c.slice(e,f);g=!0}for(a=b.length-1;a>0;a--)if(d=b[a]-b[a-1],d>0&&(h===X||d<h))h=d;this.cropped=g;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(k.pointRange===null)this.pointRange=h||1;this.closestPointRange=
|
||||||
|
h},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,k=this.hasGroupedData,j,l=[],n;if(!b&&!k)b=[],b.length=a.length,b=this.data=b;for(n=0;n<g;n++)i=h+n,k?l[n]=(new f).init(this,[d[n]].concat(Hb(e[n]))):(b[i]?j=b[i]:b[i]=j=(new f).init(this,a[i],d[n]),l[n]=j);if(b&&(g!==(c=b.length)||k))for(n=0;n<c;n++)n===h&&!k&&(n+=g),b[n]&&b[n].destroyElements();this.data=b;this.points=l},translate:function(){this.processedXData||
|
||||||
|
this.processData();this.generatePoints();for(var a=this.chart,b=this.options,c=b.stacking,d=this.xAxis,e=d.categories,f=this.yAxis,g=this.points,h=g.length,i=!!this.modifyValue,k,j=f.series,l=j.length;l--;)if(j[l].visible){l===this.index&&(k=!0);break}for(l=0;l<h;l++){var j=g[l],n=j.x,o=j.y,r=j.low,p=f.stacks[(o<b.threshold?"-":"")+this.stackKey];j.plotX=z(d.translate(n,0,0,0,1)*10)/10;if(c&&this.visible&&p&&p[n]){r=p[n];n=r.total;r.cum=r=r.cum-o;o=r+o;if(k)r=b.threshold;c==="percent"&&(r=n?r*100/
|
||||||
|
n:0,o=n?o*100/n:0);j.percentage=n?j.y*100/n:0;j.stackTotal=n;j.stackY=o}j.yBottom=s(r)?f.translate(r,0,1,0,1):null;i&&(o=this.modifyValue(o,j));j.plotY=typeof o==="number"?z(f.translate(o,0,1,0,1)*10)/10:X;j.clientX=a.inverted?a.plotHeight-j.plotX:j.plotX;j.category=e&&e[j.x]!==X?e[j.x]:j.x}this.getSegments()},setTooltipPoints:function(a){var b=this.chart,c=b.inverted,d=[],b=z((c?b.plotTop:b.plotLeft)+b.plotSizeX),e,f;e=this.xAxis;var g,h,i=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=
|
||||||
|
null;o(this.segments||this.points,function(a){d=d.concat(a)});e&&e.reversed&&(d=d.reverse());a=d.length;for(h=0;h<a;h++){g=d[h];e=d[h-1]?d[h-1]._high+1:0;for(f=g._high=d[h+1]?Ta((g.plotX+(d[h+1]?d[h+1].plotX:b))/2):b;e<=f;)i[c?b-e++:e++]=g}this.tooltipPoints=i}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat||"%A, %b %e, %Y",d=this.xAxis;return b.headerFormat.replace("{point.key}",d&&d.options.type==="datetime"?ac(c,a):a).replace("{series.name}",this.name).replace("{series.color}",
|
||||||
|
this.color)},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(Ga||!a.mouseIsDown){if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&aa(this,"mouseOver");this.setState(ta);a.hoverSeries=this}},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&aa(this,"mouseOut");c&&!a.stickyTracking&&!c.shared&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this.chart,c=this.clipRect,d=this.options.animation;
|
||||||
|
d&&!mb(d)&&(d={});if(a){if(!c.isAnimating)c.attr("width",0),c.isAnimating=!0}else c.animate({width:b.plotSizeX},d),this.animate=null},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,k,j;if(this.options.marker.enabled)for(f=b.length;f--;)if(g=b[f],d=g.plotX,e=g.plotY,j=g.graphic,e!==X&&!isNaN(e))if(a=g.pointAttr[g.selected?"select":Ka],h=a.r,i=p(g.marker&&g.marker.symbol,this.symbol),k=i.indexOf("url")===0,j)j.animate(L({x:d-h,y:e-h},j.symbolName?{width:2*h,height:2*h}:{}));else if(h>
|
||||||
|
0||k)g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(this.group)},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=M[a.type].marker?a.options.marker:a.options,c=b.states,d=c[ta],e,f=a.color,g={stroke:f,fill:f},h=a.points,i=[],k,j=a.pointAttrToOptions,l;a.options.marker?(d.radius=d.radius||b.radius+2,d.lineWidth=d.lineWidth||b.lineWidth+1):d.color=
|
||||||
|
d.color||ma(d.color||f).brighten(d.brightness).get();i[Ka]=a.convertAttribs(b,g);o([ta,"select"],function(b){i[b]=a.convertAttribs(c[b],i[Ka])});a.pointAttr=i;for(f=h.length;f--;){g=h[f];if((b=g.options&&g.options.marker||g.options)&&b.enabled===!1)b.radius=0;e=!1;if(g.options)for(l in j)s(b[j[l]])&&(e=!0);if(e){k=[];c=b.states||{};e=c[ta]=c[ta]||{};if(!a.options.marker)e.color=ma(e.color||g.options.color).brighten(e.brightness||d.brightness).get();k[Ka]=a.convertAttribs(b,i[Ka]);k[ta]=a.convertAttribs(c[ta],
|
||||||
|
i[ta],k[Ka]);k.select=a.convertAttribs(c.select,i.select,k[Ka])}else k=i;g.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=a.clipRect,d=/AppleWebKit\/533/.test(kb),e,f,g=a.data||[],h,i,k;aa(a,"destroy");Qa(a);o(["xAxis","yAxis"],function(b){if(k=a[b])Gb(k.series,a),k.isDirty=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(f=g.length;f--;)(h=g[f])&&h.destroy&&h.destroy();a.points=null;if(c&&c!==b.clipRect)a.clipRect=c.destroy();o(["area","graph","dataLabelsGroup","group","tracker"],function(b){a[b]&&
|
||||||
|
(e=d&&b==="group"?"hide":"destroy",a[b][e]())});if(b.hoverSeries===a)b.hoverSeries=null;Gb(b.series,a);for(i in a)delete a[i]},drawDataLabels:function(){var a=this,b=a.options,c=b.dataLabels;if(c.enabled||a._hasPointLabels){var d,e,f=a.points,g,h,i,k=a.dataLabelsGroup,j=a.chart,l=a.xAxis,l=l?l.left:j.plotLeft,n=a.yAxis,n=n?n.top:j.plotTop,t=j.renderer,r=j.inverted,Z=a.type,V=b.stacking,v=Z==="column"||Z==="bar",y=c.verticalAlign===null,q=c.y===null,T=t.fontMetrics(c.style.fontSize),A=T.h,x=T.b,w,
|
||||||
|
ia;v&&(T={top:x,middle:x-A/2,bottom:-A+x},V?(y&&(c=K(c,{verticalAlign:"middle"})),q&&(c=K(c,{y:T[c.verticalAlign]}))):y?c=K(c,{verticalAlign:"top"}):q&&(c=K(c,{y:T[c.verticalAlign]})));k?k.translate(l,n):k=a.dataLabelsGroup=t.g("data-labels").attr({visibility:a.visible?eb:ab,zIndex:6}).translate(l,n).add();h=c;o(f,function(f){w=f.dataLabel;c=h;(g=f.options)&&g.dataLabels&&(c=K(c,g.dataLabels));if(ia=c.enabled){var l=f.barX&&f.barX+f.barW/2||p(f.plotX,-999),n=p(f.plotY,-999),o=c.y===null?f.y>=b.threshold?
|
||||||
|
-A+x:x:c.y;d=(r?j.plotWidth-n:l)+c.x;e=z((r?j.plotHeight-l:n)+o)}if(w&&a.isCartesian&&(!j.isInsidePlot(d,e)||!ia))f.dataLabel=w.destroy();else if(ia){l=c.align;i=c.formatter.call(f.getLabelConfig(),c);Z==="column"&&(d+={left:-1,right:1}[l]*f.barW/2||0);!V&&r&&f.y<0&&(l="right",d-=10);c.style.color=p(c.color,c.style.color,a.color,"black");if(w)w.attr({text:i}).animate({x:d,y:e});else if(s(i))w=f.dataLabel=t[c.rotation?"text":"label"](i,d,e,null,null,null,c.useHTML,!0).attr({align:l,fill:c.backgroundColor,
|
||||||
|
stroke:c.borderColor,"stroke-width":c.borderWidth,r:c.borderRadius,rotation:c.rotation,padding:c.padding,zIndex:1}).css(c.style).add(k).shadow(c.shadow);if(v&&b.stacking&&w)l=f.barX,n=f.barY,o=f.barW,f=f.barH,w.align(c,null,{x:r?j.plotWidth-n-f:l,y:r?j.plotHeight-l-o:n,width:r?f:o,height:r?o:f})}})}},drawGraph:function(){var a=this,b=a.options,c=a.graph,d=[],e,f=a.area,g=a.group,h=b.lineColor||a.color,i=b.lineWidth,k=b.dashStyle,j,l=a.chart.renderer,n=a.yAxis.getThreshold(b.threshold),t=/^area/.test(a.type),
|
||||||
|
r=[],s=[];o(a.segments,function(c){j=[];o(c,function(d,e){a.getPointSpline?j.push.apply(j,a.getPointSpline(c,d,e)):(j.push(e?fa:wa),e&&b.step&&j.push(d.plotX,c[e-1].plotY),j.push(d.plotX,d.plotY))});c.length>1?d=d.concat(j):r.push(c[0]);if(t){var e=[],f,g=j.length;for(f=0;f<g;f++)e.push(j[f]);g===3&&e.push(fa,j[1],j[2]);if(b.stacking&&a.type!=="areaspline")for(f=c.length-1;f>=0;f--)f<c.length-1&&b.step&&e.push(c[f+1].plotX,c[f].yBottom),e.push(c[f].plotX,c[f].yBottom);else e.push(fa,c[c.length-1].plotX,
|
||||||
|
n,fa,c[0].plotX,n);s=s.concat(e)}});a.graphPath=d;a.singlePoints=r;if(t)e=p(b.fillColor,ma(a.color).setOpacity(b.fillOpacity||0.75).get()),f?f.animate({d:s}):a.area=a.chart.renderer.path(s).attr({fill:e}).add(g);if(c)Ob(c),c.animate({d:d});else if(i){c={stroke:h,"stroke-width":i};if(k)c.dashstyle=k;a.graph=l.path(d).attr(c).add(g).shadow(b.shadow)}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};c.attr(a).invert();d&&d.attr(a).invert()}var b=this,c=b.group,d=b.trackerGroup,
|
||||||
|
e=b.chart;ha(e,"resize",a);ha(b,"destroy",function(){Qa(e,"resize",a)});a();b.invertGroups=a},render:function(){var a=this,b=a.chart,c,d=a.options,e=d.clip!==!1,f=d.animation,g=f&&a.animate,f=g?f&&f.duration||500:0,h=a.clipRect,i=b.renderer;if(!h&&(h=a.clipRect=!b.hasRendered&&b.clipRect?b.clipRect:i.clipRect(0,0,b.plotSizeX,b.plotSizeY+1),!b.clipRect))b.clipRect=h;if(!a.group)c=a.group=i.g("series"),c.attr({visibility:a.visible?eb:ab,zIndex:d.zIndex}).translate(a.xAxis.left,a.yAxis.top).add(b.seriesGroup);
|
||||||
|
a.drawDataLabels();g&&a.animate(!0);a.getAttribs();a.drawGraph&&a.drawGraph();a.drawPoints();a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();e&&!a.hasRendered&&(c.clip(h),a.trackerGroup&&a.trackerGroup.clip(b.clipRect));g&&a.animate();setTimeout(function(){h.isAnimating=!1;if((c=a.group)&&h!==b.clipRect&&h.renderer){if(e)c.clip(a.clipRect=b.clipRect);h.destroy()}},f);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,
|
||||||
|
c=this.group;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:this.xAxis.left,translateY:this.yAxis.top}));this.translate();this.setTooltipPoints(!0);this.render();b&&aa(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=b.states,b=b.lineWidth,a=a||Ka;if(this.state!==a)this.state=a,d[a]&&d[a].enabled===!1||(a&&(b=d[a].lineWidth||b+1),c&&!c.dashstyle&&c.attr({"stroke-width":b},a?0:500))},setVisible:function(a,b){var c=this.chart,d=this.legendItem,
|
||||||
|
e=this.group,f=this.tracker,g=this.dataLabelsGroup,h,i=this.points,k=c.options.chart.ignoreHiddenSeries;h=this.visible;h=(this.visible=a=a===X?!h:a)?"show":"hide";if(e)e[h]();if(f)f[h]();else if(i)for(e=i.length;e--;)if(f=i[e],f.tracker)f.tracker[h]();if(g)g[h]();d&&c.legend.colorizeItem(this,a);this.isDirty=!0;this.options.stacking&&o(c.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});if(k)c.isDirtyBox=!0;b!==!1&&c.redraw();aa(this,h)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},
|
||||||
|
select:function(a){this.selected=a=a===X?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;aa(this,a?"select":"unselect")},drawTrackerGroup:function(){var a=this.trackerGroup,b=this.chart;if(this.isCartesian){if(!a)this.trackerGroup=a=b.renderer.g().attr({zIndex:this.options.zIndex||1}).add(b.trackerGroup);a.translate(this.xAxis.left,this.yAxis.top)}return a},drawTracker:function(){var a=this,b=a.options,c=[].concat(a.graphPath),d=c.length,e=a.chart,f=e.renderer,g=e.options.tooltip.snap,h=
|
||||||
|
a.tracker,i=b.cursor,i=i&&{cursor:i},k=a.singlePoints,j=a.drawTrackerGroup(),l;if(d)for(l=d+1;l--;)c[l]===wa&&c.splice(l+1,0,c[l+1]-g,c[l+2],fa),(l&&c[l]===wa||l===d)&&c.splice(l,0,fa,c[l-2]+g,c[l-1]);for(l=0;l<k.length;l++)d=k[l],c.push(wa,d.plotX-g,d.plotY,fa,d.plotX+g,d.plotY);h?h.attr({d:c}):a.tracker=f.path(c).attr({isTracker:!0,stroke:Gc,fill:Ma,"stroke-linejoin":"bevel","stroke-width":b.lineWidth+2*g,visibility:a.visible?eb:ab}).on(Ga?"touchstart":"mouseover",function(){if(e.hoverSeries!==
|
||||||
|
a)a.onMouseOver()}).on("mouseout",function(){if(!b.stickyTracking)a.onMouseOut()}).css(i).add(j)}};w=pa($);Ha.line=w;w=pa($,{type:"area"});Ha.area=w;w=pa($,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,k,j;if(c&&c<a.length-1){a=f.plotY;k=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;k=(1.5*d+k)/2.5;j=(1.5*e+g)/2.5;l=(j-i)*(k-d)/(k-h)+e-j;i+=l;j+=l;i>a&&i>e?(i=W(a,e),j=2*e-i):i<a&&i<e&&(i=Ua(a,e),j=2*e-i);j>g&&j>e?(j=W(g,e),i=2*e-j):j<g&&
|
||||||
|
j<e&&(j=Ua(g,e),i=2*e-j);b.rightContX=k;b.rightContY=j}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=[wa,d,e];return b}});Ha.spline=w;w=pa(w,{type:"areaspline"});Ha.areaspline=w;var zb=pa($,{type:"column",tooltipOutsidePlot:!0,pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",r:"borderRadius"},init:function(){$.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===
|
||||||
|
a.type)b.isDirty=!0})},translate:function(){var a=this,b=a.chart,c=a.options,d=c.stacking,e=c.borderWidth,f=0,g=a.xAxis,h=g.reversed,i={},k,j;$.prototype.translate.apply(a);o(b.series,function(b){if(b.type===a.type&&b.visible&&a.options.group===b.options.group)b.options.stacking?(k=b.stackKey,i[k]===X&&(i[k]=f++),j=i[k]):j=f++,b.columnIndex=j});var b=a.points,g=Ba(g.translationSlope)*(g.ordinalSlope||g.closestPointRange||1),l=g*c.groupPadding,n=(g-2*l)/f,t=c.pointWidth,r=s(t)?(n-t)/2:n*c.pointPadding,
|
||||||
|
w=Yb(W(p(t,n-2*r),1+2*e)),x=r+(l+((h?f-a.columnIndex:a.columnIndex)||0)*n-g/2)*(h?-1:1),v=a.yAxis.getThreshold(c.threshold),y=p(c.minPointLength,5);o(b,function(b){var f=b.plotY,g=p(b.yBottom,v),h=b.plotX+x,i=Yb(Ua(f,g)),j=Yb(W(f,g)-i),k=a.yAxis.stacks[(b.y<0?"-":"")+a.stackKey];d&&a.visible&&k&&k[b.x]&&k[b.x].setOffset(x,w);Ba(j)<y&&y&&(j=y,i=Ba(i-v)>y?g-y:v-(f<=v?y:0));L(b,{barX:h,barY:i,barW:w,barH:j});b.shapeType="rect";f={x:h,y:i,width:w,height:j,r:c.borderRadius,strokeWidth:e};e%2&&(f.y-=1,
|
||||||
|
f.height+=1);b.shapeArgs=f;b.trackerArgs=Ba(j)<3&&K(b.shapeArgs,{height:6,y:i-3})})},getSymbol:function(){},drawGraph:function(){},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d,e;o(a.points,function(f){var g=f.plotY;if(g!==X&&!isNaN(g)&&f.y!==null)d=f.graphic,e=f.shapeArgs,d?(Ob(d),d.animate(c.Element.prototype.crisp.apply({},[e.strokeWidth,e.x,e.y,e.width,e.height]))):f.graphic=d=c[f.shapeType](e).attr(f.pointAttr[f.selected?"select":Ka]).add(a.group).shadow(b.shadow)})},drawTracker:function(){var a=
|
||||||
|
this,b=a.chart,c=b.renderer,d,e,f=+new Date,g=a.options,h=g.cursor,i=h&&{cursor:h},k=a.drawTrackerGroup(),j;o(a.points,function(h){e=h.tracker;d=h.trackerArgs||h.shapeArgs;delete d.strokeWidth;if(h.y!==null)e?e.attr(d):h.tracker=c[h.shapeType](d).attr({isTracker:f,fill:Gc,visibility:a.visible?eb:ab}).on(Ga?"touchstart":"mouseover",function(c){j=c.relatedTarget||c.fromElement;if(b.hoverSeries!==a&&A(j,"isTracker")!==f)a.onMouseOver();h.onMouseOver()}).on("mouseout",function(b){if(!g.stickyTracking&&
|
||||||
|
(j=b.relatedTarget||b.toElement,A(j,"isTracker")!==f))a.onMouseOut()}).css(i).add(h.group||k)})},animate:function(a){var b=this,c=b.points,d=b.options;if(!a)o(c,function(a){var c=a.graphic,a=a.shapeArgs,g=b.yAxis,h=d.threshold;c&&(c.attr({height:0,y:s(h)?g.getThreshold(h):g.translate(g.getExtremes().min,0,1,0,1)}),c.animate({height:a.height,y:a.y},d.animation))}),b.animate=null},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0});$.prototype.remove.apply(a,
|
||||||
|
arguments)}});Ha.column=zb;w=pa(zb,{type:"bar",init:function(){this.inverted=!0;zb.prototype.init.apply(this,arguments)}});Ha.bar=w;w=pa($,{type:"scatter",sorted:!1,translate:function(){var a=this;$.prototype.translate.apply(a);o(a.points,function(b){b.shapeType="circle";b.shapeArgs={x:b.plotX,y:b.plotY,r:a.chart.options.tooltip.snap}})},drawTracker:function(){for(var a=this,b=a.options.cursor,b=b&&{cursor:b},c=a.points,d=c.length,e;d--;)if(e=c[d].graphic)e.element._i=d;a._hasTracking?a._hasTracking=
|
||||||
|
!0:a.group.attr({isTracker:!0}).on(Ga?"touchstart":"mouseover",function(b){a.onMouseOver();if(b.target._i!==X)c[b.target._i].onMouseOver()}).on("mouseout",function(){if(!a.options.stickyTracking)a.onMouseOut()}).css(b)}});Ha.scatter=w;w=pa(lb,{init:function(){lb.prototype.init.apply(this,arguments);var a=this,b;L(a,{visible:a.visible!==!1,name:p(a.name,"Slice")});b=function(){a.slice()};ha(a,"select",b);ha(a,"unselect",b);return a},setVisible:function(a){var b=this.series.chart,c=this.tracker,d=this.dataLabel,
|
||||||
|
e=this.connector,f=this.shadowGroup,g;g=(this.visible=a=a===X?!this.visible:a)?"show":"hide";this.group[g]();if(c)c[g]();if(d)d[g]();if(e)e[g]();if(f)f[g]();this.legendItem&&b.legend.colorizeItem(this,a)},slice:function(a,b,c){var d=this.series.chart,e=this.slicedTranslation;Kb(c,d);p(b,!0);a=this.sliced=s(a)?a:!this.sliced;a={translateX:a?e[0]:d.plotLeft,translateY:a?e[1]:d.plotTop};this.group.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}});w=pa($,{type:"pie",isCartesian:!1,pointClass:w,
|
||||||
|
pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:function(){this.initialColor=this.chart.counters.color},animate:function(){var a=this;o(a.points,function(b){var c=b.graphic,b=b.shapeArgs,d=-da/2;c&&(c.attr({r:0,start:d,end:d}),c.animate({r:b.r,start:b.start,end:b.end},a.options.animation))});a.animate=null},setData:function(){$.prototype.setData.apply(this,arguments);this.processData();this.generatePoints()},translate:function(){this.generatePoints();var a=
|
||||||
|
0,b=-0.25,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f=c.center.concat([c.size,c.innerSize||0]),g=this.chart,h=g.plotWidth,i=g.plotHeight,k,j,l,n=this.points,p=2*da,r,s=Ua(h,i),w,v,y,q=c.dataLabels.distance,f=Vb(f,function(a,b){return(w=/%$/.test(a))?[h,i,s,s][b]*S(a)/100:a});this.getX=function(a,b){l=oa.asin((a-f[1])/(f[2]/2+q));return f[0]+(b?-1:1)*ja(l)*(f[2]/2+q)};this.center=f;o(n,function(b){a+=b.y});o(n,function(c){r=a?c.y/a:0;k=z(b*p*1E3)/1E3;b+=r;j=z(b*p*1E3)/1E3;c.shapeType="arc";
|
||||||
|
c.shapeArgs={x:f[0],y:f[1],r:f[2]/2,innerR:f[3]/2,start:k,end:j};l=(j+k)/2;c.slicedTranslation=Vb([ja(l)*d+g.plotLeft,C(l)*d+g.plotTop],z);v=ja(l)*f[2]/2;y=C(l)*f[2]/2;c.tooltipPos=[f[0]+v*0.7,f[1]+y*0.7];c.labelPos=[f[0]+v+ja(l)*q,f[1]+y+C(l)*q,f[0]+v+ja(l)*e,f[1]+y+C(l)*e,f[0]+v,f[1]+y,q<0?"center":l<p/4?"left":"right",l];c.percentage=r*100;c.total=a});this.setTooltipPoints()},render:function(){this.getAttribs();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();this.drawDataLabels();
|
||||||
|
this.options.animation&&this.animate&&this.animate();this.isDirty=!1},drawPoints:function(){var a=this.chart,b=a.renderer,c,d,e,f=this.options.shadow,g,h;o(this.points,function(i){d=i.graphic;h=i.shapeArgs;e=i.group;g=i.shadowGroup;if(f&&!g)g=i.shadowGroup=b.g("shadow").attr({zIndex:4}).add();if(!e)e=i.group=b.g("point").attr({zIndex:5}).add();c=i.sliced?i.slicedTranslation:[a.plotLeft,a.plotTop];e.translate(c[0],c[1]);g&&g.translate(c[0],c[1]);d?d.animate(h):i.graphic=b.arc(h).attr(L(i.pointAttr[Ka],
|
||||||
|
{"stroke-linejoin":"round"})).add(i.group).shadow(f,g);i.visible===!1&&i.setVisible(!1)})},drawDataLabels:function(){var a=this.data,b,c=this.chart,d=this.options.dataLabels,e=p(d.connectorPadding,10),f=p(d.connectorWidth,1),g,h,i=p(d.softConnector,!0),k=d.distance,j=this.center,l=j[2]/2,j=j[1],n=k>0,t=[[],[]],r,s,w,v,y=2,q;if(d.enabled){$.prototype.drawDataLabels.apply(this);o(a,function(a){a.dataLabel&&t[a.labelPos[7]<da/2?0:1].push(a)});t[1].reverse();v=function(a,b){return b.y-a.y};for(a=t[0][0]&&
|
||||||
|
t[0][0].dataLabel&&t[0][0].dataLabel.getBBox().height;y--;){var x=[],A=[],z=t[y],E=z.length,C;for(q=j-l-k;q<=j+l+k;q+=a)x.push(q);w=x.length;if(E>w){h=[].concat(z);h.sort(v);for(q=E;q--;)h[q].rank=q;for(q=E;q--;)z[q].rank>=w&&z.splice(q,1);E=z.length}for(q=0;q<E;q++){b=z[q];h=b.labelPos;b=9999;for(s=0;s<w;s++)g=Ba(x[s]-h[1]),g<b&&(b=g,C=s);if(C<q&&x[q]!==null)C=q;else for(w<E-q+C&&x[q]!==null&&(C=w-E+q);x[C]===null;)C++;A.push({i:C,y:x[C]});x[C]=null}A.sort(v);for(q=0;q<E;q++){b=z[q];h=b.labelPos;
|
||||||
|
g=b.dataLabel;s=A.pop();r=h[1];w=b.visible===!1?ab:eb;C=s.i;s=s.y;if(r>s&&x[C+1]!==null||r<s&&x[C-1]!==null)s=r;r=this.getX(C===0||C===x.length-1?r:s,y);g.attr({visibility:w,align:h[6]})[g.moved?"animate":"attr"]({x:r+d.x+({left:e,right:-e}[h[6]]||0),y:s+d.y});g.moved=!0;if(n&&f)g=b.connector,h=i?[wa,r+(h[6]==="left"?5:-5),s,"C",r,s,2*h[2]-h[4],2*h[3]-h[5],h[2],h[3],fa,h[4],h[5]]:[wa,r+(h[6]==="left"?5:-5),s,fa,h[2],h[3],fa,h[4],h[5]],g?(g.animate({d:h}),g.attr("visibility",w)):b.connector=g=this.chart.renderer.path(h).attr({"stroke-width":f,
|
||||||
|
stroke:d.connectorColor||b.color||"#606060",visibility:w,zIndex:3}).translate(c.plotLeft,c.plotTop).add()}}}},drawTracker:zb.prototype.drawTracker,getSymbol:function(){}});Ha.pie=w;L(Highcharts,{Chart:wc,dateFormat:ac,pathAnim:La,getOptions:function(){return Ea},hasBidiBug:Qc,numberFormat:dc,Point:lb,Color:ma,Renderer:Xb,SVGRenderer:Eb,VMLRenderer:$a,CanVGRenderer:oc,seriesTypes:Ha,setOptions:function(a){$b=K($b,a.xAxis);kc=K(kc,a.yAxis);a.xAxis=a.yAxis=X;Ea=K(Ea,a);vc();return Ea},Series:$,addEvent:ha,
|
||||||
|
removeEvent:Qa,createElement:Aa,discardElement:Tb,css:P,each:o,extend:L,map:Vb,merge:K,pick:p,splat:Hb,extendClass:pa,placeBox:uc,product:"Highcharts",version:"2.2.1"})})();
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery v1.7.1 jquery.com | jquery.org/license */
|
||||||
|
(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;iLine truncated
|
||||||
|
f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.cLine truncated
|
||||||
|
{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacitLine truncated
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
$("img.customer").tooltip();
|
||||||
|
$("a.product").tooltip();
|
||||||
|
$("h2").tooltip({placement: 'right'});
|
||||||
|
});
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
function enable_all_customers() {
|
||||||
|
$("li.customer").each(function(i) {
|
||||||
|
$(this).removeClass("marked");
|
||||||
|
$(this).show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
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 filter_customers(typed) {
|
||||||
|
/* FIXME: Does not work well. */
|
||||||
|
setTimeout(function() {
|
||||||
|
$("li.customer").each(function(i) {
|
||||||
|
if($(this).children("span.name").text().indexOf(typed) == -1) {
|
||||||
|
$(this).hide();
|
||||||
|
$(this).removeClass("marked");
|
||||||
|
} else {
|
||||||
|
$(this).show();
|
||||||
|
}
|
||||||
|
/* Full match */
|
||||||
|
if($(this).children("span.name").text() == typed) {
|
||||||
|
$(this).addClass("marked");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
/* Customer search */
|
||||||
|
$('.typeahead').typeahead();
|
||||||
|
$('#id_customer_name').keydown(function(event) {
|
||||||
|
filter_customers(event.srcElement.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").removeAttr('selected');
|
||||||
|
$("#id_customer option[value="+id+"]").attr('selected','selected');
|
||||||
|
});
|
||||||
|
/* Product amount controls */
|
||||||
|
$("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*/
|
||||||
|
var sale_price_int = Number($(this).children("span.sale_price_int").text());
|
||||||
|
var cur_total = Number($("span.total_text").text())
|
||||||
|
$("span.total_text").html(cur_total + sale_price_int);
|
||||||
|
});
|
||||||
|
/* Form reset */
|
||||||
|
$("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();
|
||||||
|
});
|
||||||
|
/* Hide alert messages */
|
||||||
|
$("a[data-dismiss=alert]").click(function(){
|
||||||
|
$(this).parent().parent().parent().slideUp();
|
||||||
|
});
|
||||||
|
setTimeout( function() {
|
||||||
|
$("a[data-dismiss=alert]").parent().parent().parent().slideUp();
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
$("h2").tooltip({placement: 'right'});
|
||||||
|
});
|
||||||
@@ -0,0 +1,236 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
/* TODO select data element with index 0 of each pie-chart */
|
||||||
|
var charts = [];
|
||||||
|
var products_url = '/stats/products/';
|
||||||
|
var order_url = '/stats/orders/';
|
||||||
|
var order_hourly_url = '/stats/orders/hourly';
|
||||||
|
var products_realtime_url = '/stats/orders/products_realtime'
|
||||||
|
|
||||||
|
/* orders */
|
||||||
|
$.getJSON(order_url, function(data) {
|
||||||
|
var render_to = 'order_chart';
|
||||||
|
|
||||||
|
// define the options
|
||||||
|
var options = {
|
||||||
|
credits: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
renderTo: render_to,
|
||||||
|
plotBackgroundColor: null,
|
||||||
|
plotBorderWidth: null,
|
||||||
|
plotShadow: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
text: 'Fordeling av ordre på person'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function() {
|
||||||
|
return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage, 1) +' %';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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: data
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
charts.push(new Highcharts.Chart(options));
|
||||||
|
});
|
||||||
|
|
||||||
|
/* products */
|
||||||
|
$.getJSON(products_url, function(data) {
|
||||||
|
var products = data.response.products;
|
||||||
|
for(i in products) {
|
||||||
|
var render_to = 'product_chart' + products[i].product.id;
|
||||||
|
var series_data = products[i].counts;
|
||||||
|
// define the options
|
||||||
|
var options = {
|
||||||
|
credits: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
renderTo: render_to,
|
||||||
|
plotBackgroundColor: null,
|
||||||
|
plotBorderWidth: null,
|
||||||
|
plotShadow: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
text: products[i].product.name
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function() {
|
||||||
|
return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage, 1) +' %';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
charts.push(new Highcharts.Chart(options));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* orders hourly */
|
||||||
|
$.getJSON(order_hourly_url, function(data) {
|
||||||
|
var render_to = 'order_hourly_chart';
|
||||||
|
|
||||||
|
// define the options
|
||||||
|
var options = {
|
||||||
|
credits: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
renderTo: render_to,
|
||||||
|
type: 'column'
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
text: 'Ordre - time for time'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function() {
|
||||||
|
return this.y + " stk";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
title: {
|
||||||
|
text: 'Ordre'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
title: {
|
||||||
|
text: 'Tid (h)'
|
||||||
|
},
|
||||||
|
labels: {
|
||||||
|
formatter: function() {
|
||||||
|
return this.value + ":00";
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plotOptions: {
|
||||||
|
column: {
|
||||||
|
minPointLength: 3,
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
groupPadding: 0,
|
||||||
|
pointPadding: 0.05,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: 'Ordre',
|
||||||
|
data: data.hourly
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
charts.push(new Highcharts.Chart(options));
|
||||||
|
});
|
||||||
|
|
||||||
|
var 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: {}
|
||||||
|
});
|
||||||
|
charts.push(products_realtime_chart);
|
||||||
|
|
||||||
|
function parse_products_realtime_data(data) {
|
||||||
|
var chart = products_realtime_chart;
|
||||||
|
|
||||||
|
for (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) {
|
||||||
|
series.addPoint({
|
||||||
|
id: point[0],
|
||||||
|
x: point[0],
|
||||||
|
y: point[1]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
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);
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
get_products_realtime_data();
|
||||||
|
}, 15000);
|
||||||
|
},
|
||||||
|
cache: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get_products_realtime_data();
|
||||||
|
});
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Underscore.js 1.3.3
|
||||||
|
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
||||||
|
// Underscore is freely distributable under the MIT license.
|
||||||
|
// Portions of Underscore are inspired or borrowed from Prototype,
|
||||||
|
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
||||||
|
// For all details and documentation:
|
||||||
|
// http://documentcloud.github.com/underscore
|
||||||
|
(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
|
||||||
|
c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
|
||||||
|
g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
|
||||||
|
c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
|
||||||
|
a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
|
||||||
|
c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
|
||||||
|
a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
|
||||||
|
function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
|
||||||
|
(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
|
||||||
|
j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
|
||||||
|
0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
|
||||||
|
e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
|
||||||
|
i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
|
||||||
|
1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
|
||||||
|
i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
|
||||||
|
g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
|
||||||
|
return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
|
||||||
|
c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
|
||||||
|
function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
|
||||||
|
b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
|
||||||
|
b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
|
||||||
|
function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
|
||||||
|
u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
|
||||||
|
b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
|
||||||
|
this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"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,86 +1,38 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
{% load staticfiles %}
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{% block title %}BBS{% endblock %}</title>
|
<title>{%block title%}BBS{%endblock%}</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="x-django-static-url" content="{% static "" %}">
|
<link rel="stylesheet" href="{{ STATIC_URL }}gaute/stylesheets/screen.css" type="text/css" media="screen, projection">
|
||||||
<link rel="stylesheet" href="{% static "dist/styles/screen.css" %}" type="text/css" media="screen, projection">
|
<link rel="stylesheet" href="{{ STATIC_URL }}gaute/stylesheets/print.css" type="text/css" media="print">
|
||||||
{% block headinc %}{% endblock %}
|
<!--[if lt IE 8]>
|
||||||
|
<link rel="stylesheet" href="{{ STATIC_URL }}gaute/stylesheets/ie.css" type="text/css" media="screen, projection">
|
||||||
|
<![endif]-->
|
||||||
|
{%block headinc %}
|
||||||
|
{%endblock%}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header id="header">
|
<header id="header">
|
||||||
{% block header %}
|
{%block header%}
|
||||||
<nav class="navbar navbar-inverse" role="navigation">
|
{% include "nav.html" %}
|
||||||
<div class="navbar-header">
|
{%endblock%}
|
||||||
<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>
|
|
||||||
|
|
||||||
<!-- 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>
|
</header>
|
||||||
<div id="container" class="container">
|
<div id="container" class="container-fluid">
|
||||||
{% block content %}
|
{%block content%}
|
||||||
{% endblock %}
|
{%endblock%}
|
||||||
<div id="footer" class="row">
|
<div id="footer" class="row-fluid">
|
||||||
<div class="col-md-12">
|
<div class="span12">
|
||||||
{% block footer %}
|
{%block footer %}
|
||||||
<div class="credits">
|
<img src="{{ STATIC_URL }}gaute/img/edb_brick.png" alt="EDB" />
|
||||||
Laget med <span class="love" title="kærlighed">♥</span> av <a href="http://edb.neuf.no/">EDB-gjengen i KAK</a><br/>
|
{%endblock%}
|
||||||
<a href="http://edb.neuf.no/"><img src="{% static "dist/images/edb_brick.png" %}" alt="EDB" /></a>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript" src="{% static "dist/js/app.min.js" %}"></script>
|
<script type="text/javascript" src="{{ STATIC_URL }}js/jquery-1.7.1.min.js"></script>
|
||||||
<!--<script>
|
<script type="text/javascript" src="{{ STATIC_URL }}js/bootstrap-collapse.js"></script>
|
||||||
if('serviceWorker' in navigator) {
|
{%block tailinc %}
|
||||||
navigator.serviceWorker.register('/service-worker.js', { scope: '/' })
|
{%endblock%}
|
||||||
.then(function(registration) {
|
|
||||||
console.log("Service Worker Registered");
|
|
||||||
});
|
|
||||||
|
|
||||||
navigator.serviceWorker.ready.then(function(registration) {
|
|
||||||
console.log("Service Worker Ready");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>-->
|
|
||||||
{% block tailinc %}{% endblock %}
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,83 +1,58 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% load widget_tweaks %}
|
{% block header %}
|
||||||
{% block active_deposit %}active{% endblock %}
|
{% include "nav.html" with active="deposit" %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<section id="deposit" class="row">
|
<section id="deposit" class="row-fluid">
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<section class="row">
|
<section class="row-fluid">
|
||||||
<div class="col-xs-4">
|
<div class="span4">
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% 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">
|
<form id="order" method="post" class="form-stacked" autocomplete="off">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<section id="customer">
|
<fieldset>
|
||||||
<div class="row">
|
<section id="customer" class="row-fluid">
|
||||||
<div class="col-md-12">
|
<h2>Hvem skal sette inn penger?</h2>
|
||||||
<h2>Hvem skal sette inn penger?</h2>
|
<!-- Typeahead customer field -->
|
||||||
</div>
|
<input name="customer_name" id="id_customer_typeahead" value="" data-provide="typeahead" data-source="{{users_js}}" />
|
||||||
</div>
|
<!-- Actual customer select field (hidden) -->
|
||||||
<div class="row">
|
<div style="display:none;">{{form.user }}</div>
|
||||||
<!-- Typeahead customer field -->
|
<ul class="well">
|
||||||
<div class="col-md-3">
|
{% for user in users %}
|
||||||
<input name="customer_name" id="id_customer_typeahead" type="text" value="" data-provide="typeahead" data-source="{{users_js}}" class="form-control" /><br />
|
<li class="customer">
|
||||||
<!-- Actual customer select field (hidden) -->
|
{% if user.get_profile.image %}
|
||||||
<div style="display:none;">{{form.user }}</div>
|
<img class="profile" src="{{ user.get_profile.image }}" alt="Profile picture"/><br />
|
||||||
</div>
|
{% else %}
|
||||||
</div>
|
<img class="profile" src="{{ STATIC_URL }}gaute/img/unknown_person.png" alt="Profile picture" /><br />
|
||||||
<div class="row">
|
{% endif %}
|
||||||
<div class="col-md-12">
|
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1"}}</span><br />
|
||||||
<ul class="well">
|
<span class="balance">{{ user.get_profile.balance }}</span>
|
||||||
{% for user in users %}
|
<span class="id" style="display:none;">{{ user.id }}</span>
|
||||||
<li class="customer">{% spaceless %}
|
</li>
|
||||||
<img class="profile" src="{{ user.profile.profile_image_url }}" alt="Profile picture"/><br />
|
{% endfor %}
|
||||||
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1" }}</span><br />
|
</ul>
|
||||||
<span class="balance">{{ user.profile.balance }}</span>
|
</section>
|
||||||
<span class="id" style="display:none;">{{ user.id }}</span>
|
<section id="amount">
|
||||||
{% endspaceless %}</li>
|
<h2>Hvor mye?</h2>
|
||||||
{% endfor %}
|
{{form.amount}}
|
||||||
</ul>
|
{{form.amount.errors}}
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</fieldset>
|
||||||
</section>
|
<div class="form-actions">
|
||||||
<section id="amount">
|
<button type="submit" class="btn btn-large btn-primary" name="submit_order">Sett inn</button>
|
||||||
<div class="row">
|
<a href="{% url register %}" class="btn">Avbryt</a>
|
||||||
<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>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% block tailinc %}
|
||||||
|
<script src="{{ STATIC_URL }}js/bootstrap-typeahead.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/deposit.js"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{%block header%}
|
||||||
|
{% include "nav.html" with active="home" %}
|
||||||
|
{%endblock%}
|
||||||
|
|
||||||
|
{%block content%}
|
||||||
|
<div class="row-fluid">
|
||||||
|
<section class="span4">
|
||||||
|
<h1>Biceps Bar System</h1>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
{%endblock%}
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
{% 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 %}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{% 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 %}
|
|
||||||
@@ -1,83 +1,90 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block active_log %}active{% endblock %}
|
{% block header %}
|
||||||
|
{% include "nav.html" with active="log" %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<section id="log" class="row">
|
<section id="log" class="row-fluid">
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<section class="row">
|
<section class="row-fluid">
|
||||||
<div class="col-xs-4">
|
<div class="span4">
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
<div {% if message.tags %}class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
<div {% if message.tags %}class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="row">
|
<section id="orders" class="row-fluid">
|
||||||
<div class="col-md-6">
|
<div class="span12">
|
||||||
<section id="orders">
|
{% if not limit %}
|
||||||
{% if not limit %}
|
<h2 title="Alle registrerte ordre">Alle ordre</h2><br />
|
||||||
<h2 title="Alle registrerte ordre">Alle ordre</h2><br />
|
<a href="{% url log %}">Vis kun siste</a>
|
||||||
<a href="{% url 'log' %}">Vis kun siste</a>
|
{% else %}
|
||||||
{% else %}
|
<h2 title="Ordre fra de siste 2 dagene eller de 5 siste ordrene.">Siste ordre</h2><br />
|
||||||
<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>
|
||||||
<a href="{% url 'log-all' %}">Vis alle</a>
|
{%endif %}
|
||||||
{%endif %}
|
<table class="table table-striped">
|
||||||
<table class="table table-striped">
|
<thead>
|
||||||
<thead>
|
<tr>
|
||||||
<tr>
|
<th>Når</th>
|
||||||
<th>Når</th>
|
<th>Hvem</th>
|
||||||
<th>Hvem</th>
|
<th>Hva</th>
|
||||||
<th>Hva</th>
|
<th>Sum</th>
|
||||||
<th>Sum</th>
|
<th>Handling</th>
|
||||||
<!--<th>Handling</th>-->
|
</tr>
|
||||||
</tr>
|
</thead>
|
||||||
</thead>
|
<tbody>
|
||||||
<tbody>
|
{% for order in orders %}
|
||||||
{% for order in orders %}
|
<tr>
|
||||||
<tr>
|
<td>{{ order.created }}</td>
|
||||||
<td>{{ order.created }}</td>
|
<td>{% if order.customer.get_profile.image %}<img src="{{ order.customer.get_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 %}</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.orderline_set.all %}
|
||||||
<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>
|
||||||
<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>{{ order.order_sum }}</td>
|
<td><a class="btn btn-info" data-toggle="modal" href="{% url order_reciept order=order.id %} "><i class="icon-list-alt icon-white"></i> Kvittering</a> {% 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>
|
||||||
<!--<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>
|
||||||
</tr>
|
{% endfor %}
|
||||||
{% endfor %}
|
</tbody>
|
||||||
</tbody>
|
</table>
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
</section>
|
||||||
<section id="transactions">
|
<section id="transactions" class="row-fluid">
|
||||||
{% if not limit %}
|
<div class="span12">
|
||||||
<h2 title="Alle registrerte transaksjoner">Alle transaksjoner</h2>
|
{% if not limit %}
|
||||||
<br /><a href="{% url 'log' %}#transactions">Vis kun siste</a>
|
<h2 title="Alle registrerte transaksjoner">Alle transaksjoner</h2>
|
||||||
{% else %}
|
<br /><a href="{% url log %}#transactions">Vis kun siste</a>
|
||||||
<h2 title="Transaksjoner fra de siste 2 dagene eller de 5 siste transaksjonene.">Siste transaksjoner</h2><br />
|
{% else %}
|
||||||
<a href="{% url 'log-all' %}#transactions">Vis alle</a>
|
<h2 title="Transaksjoner fra de siste 2 dagene eller de 5 siste transaksjonene.">Siste transaksjoner</h2><br />
|
||||||
{%endif %}
|
<a href="{% url log-all %}#transactions">Vis alle</a>
|
||||||
<table class="table table-striped">
|
{%endif %}
|
||||||
<thead>
|
<table class="table table-striped">
|
||||||
<tr>
|
<thead>
|
||||||
<th>Når</th>
|
<tr>
|
||||||
<th>Hvem</th>
|
<th>Når</th>
|
||||||
<th>Innskudd</th>
|
<th>Hvem</th>
|
||||||
<!--<th>Handling</th>-->
|
<th>Innskudd</th>
|
||||||
</tr>
|
<th>Handling</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
{% for t in transactions %}
|
<tbody>
|
||||||
<tr>
|
{% for t in transactions %}
|
||||||
<td>{{ t.created }}</td>
|
<tr>
|
||||||
<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.created }}</td>
|
||||||
<td>{{ t.amount }}</td>
|
<td>{% if t.user.get_profile.image %}<img src="{{ t.user.get_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>{% 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>-->
|
<td>{{ t.amount }}</td>
|
||||||
</tr>
|
<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>
|
||||||
{% endfor %}
|
</tr>
|
||||||
</tbody>
|
{% endfor %}
|
||||||
</table>
|
</tbody>
|
||||||
</section>
|
</table>
|
||||||
|
<a href="{% url register %}" class="btn">« Gå tilbake</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% block tailinc %}
|
||||||
|
<script src="{{ STATIC_URL }}js/bootstrap-tooltip.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/bootstrap-modal.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/bootstrap-transition.js"></script>
|
||||||
|
<script src="{{ STATIC_URL }}js/log.js"></script>
|
||||||
|
{% endblock %}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<p>
|
<p>
|
||||||
Orderen inneholdt:
|
Orderen inneholdt:
|
||||||
<ul>
|
<ul>
|
||||||
{% for line in order.orderlines.all %}
|
{% for line in order.orderline_set.all %}
|
||||||
<li>
|
<li>
|
||||||
<span class="bold">{{ line.amount}}</span>
|
<span class="bold">{{ line.amount}}</span>
|
||||||
<a href="#" class="product" title="{{ line.unit_price}} per">{{ line.product }}</a>
|
<a href="#" class="product" title="{{ line.unit_price}} per">{{ line.product }}</a>
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<nav class="navbar">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<div class="container">
|
||||||
|
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
|
||||||
|
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</a>
|
||||||
|
<a href="/" class="brand">KAKtoffelbodens flotte campingkasse [BBS]</a>
|
||||||
|
<div class="nav-collapse">
|
||||||
|
<ul class="nav">
|
||||||
|
{% if active %}
|
||||||
|
<li class="{% if active = "register" %}active{% endif %}"><a href="/register"><i class="icon-home icon-white"></i> Kjøp</a></li>
|
||||||
|
<li class="{% if active = "deposit" %}active{% endif %}"><a href="/deposit">Sett inn penger</a></li>
|
||||||
|
<li class="{% if active = "log" %}active{% endif %}"><a href="/log"> Vis logg</a></li>
|
||||||
|
<li class="{% if active = "stats" %}active{% endif %}"><a href="/stats"> Vis statistikk</a></li>
|
||||||
|
{% if request.user.is_superuser %}
|
||||||
|
<li><a href="/admin">Administrasjon</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||