✨ Add user register mutation

🔥 Remove a bunch of legacy code
This commit is contained in:
nikolark committed 2022-02-19 15:26:30 +01:00
1 parent a47de48243
commit b5c9094b64
34 files changed
+46 -7544

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
import strawberry
import strawberry_django
from django.contrib.auth import get_user_model
from django.db import transaction
from strawberry_django import auto
from main import models
from main.api.types.users import User
DjangoUser = get_user_model()
@strawberry_django.input(DjangoUser)
class UserInput:
email: auto
first_name: auto
last_name: auto
@strawberry.mutation
@transaction.atomic
def register_mutation(input: UserInput) -> User:
user = DjangoUser.objects.create_user(
first_name=input.first_name, last_name=input.last_name, email=input.email, username=input.email
)
models.UserProfile.objects.create(user=user)
return user
@strawberry.type
class UsersMutations:
register = register_mutation
+2 -1
View File
@@ -1,6 +1,7 @@
import strawberry import strawberry
from main.api.mutations.shop import ShopMutations from main.api.mutations.shop import ShopMutations
from main.api.mutations.users import UsersMutations
from main.api.queries.inventory import InventoryQueries from main.api.queries.inventory import InventoryQueries
from main.api.queries.shop import ShopQueries from main.api.queries.shop import ShopQueries
from main.api.queries.users import UsersQueries from main.api.queries.users import UsersQueries
@@ -12,7 +13,7 @@ class Query(InventoryQueries, ShopQueries, UsersQueries):
@strawberry.type @strawberry.type
class Mutation(ShopMutations): class Mutation(ShopMutations, UsersMutations):
pass pass
+1 -24
View File
@@ -1,29 +1,6 @@
from django import forms from django import forms
from django.contrib.auth.models import User
from main.models import InventoryTransaction, Product, UserProfile from main.models import InventoryTransaction, Product
from main.utils import format_username
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")
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 = UserProfile.objects.create(user=user)
profile.image = self._get_facebook_url()
if commit:
user.save()
profile.save()
return user
class InventoryTransactionForm(forms.ModelForm): class InventoryTransactionForm(forms.ModelForm):
-7
View File
@@ -1,18 +1,11 @@
from django.contrib.staticfiles.views import serve
from django.urls import re_path from django.urls import re_path
from main.views.reports import inventory, inventory_add, report from main.views.reports import inventory, inventory_add, report
from main.views.users import create_user
urlpatterns = [ urlpatterns = [
# TODO: migrate to SPA # TODO: migrate to SPA
# Users
re_path(r"^user/create/$", create_user, name="create-user"),
# Reports # Reports
re_path(r"^inventory/$", inventory, name="inventory"), re_path(r"^inventory/$", inventory, name="inventory"),
re_path(r"^inventory/add/$", inventory_add, name="inventory-add"), re_path(r"^inventory/add/$", inventory_add, name="inventory-add"),
re_path(r"^report$", report, name="report"), re_path(r"^report$", report, name="report"),
] ]
# Root level service-worker.js
urlpatterns += [re_path(r"^service-worker\.js$", serve, kwargs={"path": "dist/service-worker.js"})]
-21
View File
@@ -1,21 +0,0 @@
from django.contrib import messages
from django.shortcuts import redirect, render
from main.forms import SimpleCreateUserForm
def create_user(request):
if request.method == "POST":
form = SimpleCreateUserForm(data=request.POST)
if form.is_valid():
user = form.save()
messages.success(request, f"Hurra! {user.first_name}{user.last_name} er lagt til")
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})
Binary file not shown.

Before

Width:  |  Height:  |  Size: 923 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

-180
View File
@@ -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);
});
});
-37
View File
@@ -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
});
});
}
});
-790
View File
@@ -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;
}
-10
View File
@@ -1,10 +0,0 @@
@mixin inline-block-list() {
clear: both;
padding: 0;
margin: 0;
li {
list-style: none;
display: inline-block;
white-space: nowrap;
}
}
-606
View File
@@ -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;
-225
View File
@@ -1,225 +0,0 @@
@import "variables";
@import "mixins";
@import "../../node_modules/bootstrap-sass/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 {
img.customer {
width: 50px;
height: 50px;
border-radius: 4px;
}
h2 {
display: inline-block;
}
table {
tr {
vertical-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%;
}
}
-12
View File
@@ -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
View File
@@ -1 +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){"use strict";"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){"use strict";function i(t,e){var i=(e=e||et).createElement("script");i.text=t,e.head.appendChild(i).parentNode.removeChild(i)}function n(t){var e=!!t&&"length"in t&&t.length,i=ft.type(t);return"function"!==i&&!ft.isWindow(t)&&("array"===i||0===e||"number"==typeof e&&e>0&&e-1 in t)}function r(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function o(t,e,i){return ft.isFunction(e)?ft.grep(t,function(t,n){return!!e.call(t,n,t)!==i}):e.nodeType?ft.grep(t,function(t){return t===e!==i}):"string"!=typeof e?ft.grep(t,function(t){return st.call(e,t)>-1!==i}):Mt.test(e)?ft.filter(e,t,i):(e=ft.filter(e,t),ft.grep(t,function(t){return st.call(e,t)>-1!==i&&1===t.nodeType}))}function s(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function a(t){var e={};return ft.each(t.match(Lt)||[],function(t,i){e[i]=!0}),e}function l(t){return t}function h(t){throw t}function c(t,e,i,n){var r;try{t&&ft.isFunction(r=t.promise)?r.call(t).done(e).fail(i):t&&ft.isFunction(r=t.then)?r.call(t,e,i):e.apply(void 0,[t].slice(n))}catch(t){i.apply(void 0,[t])}}function u(){et.removeEventListener("DOMContentLoaded",u),t.removeEventListener("load",u),ft.ready()}function d(){this.expando=ft.expando+d.uid++}function p(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:zt.test(t)?JSON.parse(t):t)}function f(t,e,i){var n;if(void 0===i&&1===t.nodeType)if(n="data-"+e.replace(Rt,"-$&").toLowerCase(),"string"==typeof(i=t.getAttribute(n))){try{i=p(i)}catch(t){}_t.set(t,e,i)}else i=void 0;return i}function g(t,e,i,n){var r,o=1,s=20,a=n?function(){return n.cur()}:function(){return ft.css(t,e,"")},l=a(),h=i&&i[3]||(ft.cssNumber[e]?"":"px"),c=(ft.cssNumber[e]||"px"!==h&&+l)&&Ft.exec(ft.css(t,e));if(c&&c[3]!==h){h=h||c[3],i=i||[],c=+l||1;do{o=o||".5",c/=o,ft.style(t,e,c+h)}while(o!==(o=a()/l)&&1!==o&&--s)}return i&&(c=+c||+l||0,r=i[1]?c+(i[1]+1)*i[2]:+i[2],n&&(n.unit=h,n.start=c,n.end=r)),r}function m(t){var e,i=t.ownerDocument,n=t.nodeName,r=Gt[n];return r||(e=i.body.appendChild(i.createElement(n)),r=ft.css(e,"display"),e.parentNode.removeChild(e),"none"===r&&(r="block"),Gt[n]=r,r)}function v(t,e){for(var i,n,r=[]Line truncated
-270
View File
@@ -1,270 +0,0 @@
/**
* Copyright 2016 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.
*/
// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY!
// This file should be overwritten as part of your build process.
// If you need to extend the behavior of the generated service worker, the best approach is to write
// additional code and include it using the importScripts option:
// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring
//
// Alternatively, it's possible to make changes to the underlying template file and then use that as the
// new base for generating output, via the templateFilePath option:
// https://github.com/GoogleChrome/sw-precache#templatefilepath-string
//
// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any
// changes made to this original template file with your modified copy.
// 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, quotes, comma-spacing */
'use strict';
var precacheConfig = [["/static/dist/images/edb_brick.png","75041f9210c3ea1acba1803f084554c2"],["/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","e35b26c92725c362cd4f9ed477e9ad4f"],["/static/dist/js/app.min.js","2666821d79b38505ea623c0f9bd182f5"],["/static/dist/styles/screen.css","6325d1c5d658d523d65e8c3ed86a215d"]];
var cacheName = 'sw-precache-v3--' + (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 cleanResponse = function (originalResponse) {
// If this is not a redirected response, then we don't have to do anything.
if (!originalResponse.redirected) {
return Promise.resolve(originalResponse);
}
// Firefox 50 and below doesn't support the Response.body stream, so we may
// need to read the entire body to memory as a Blob.
var bodyPromise = 'body' in originalResponse ?
Promise.resolve(originalResponse.body) :
originalResponse.blob();
return bodyPromise.then(function(body) {
// new Response() is happy when passed either a stream or a Blob.
return new Response(body, {
headers: originalResponse.headers,
status: originalResponse.status,
statusText: originalResponse.statusText
});
});
};
var createCacheKey = function (originalUrl, paramName, paramValue,
dontCacheBustUrlsMatching) {
// Create a new URL object to avoid modifying originalUrl.
var url = new URL(originalUrl);
// If dontCacheBustUrlsMatching is not set, or if we don't have a match,
// then add in the extra cache-busting URL parameter.
if (!dontCacheBustUrlsMatching ||
!(url.pathname.match(dontCacheBustUrlsMatching))) {
url.search += (url.search ? '&' : '') +
encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue);
}
return url.toString();
};
var isPathWhitelisted = function (whitelist, absoluteUrlString) {
// If the whitelist is empty, then consider all URLs to be whitelisted.
if (whitelist.length === 0) {
return true;
}
// Otherwise compare each path regex to the path of the URL passed in.
var path = (new URL(absoluteUrlString)).pathname;
return whitelist.some(function(whitelistedPathRegex) {
return path.match(whitelistedPathRegex);
});
};
var stripIgnoredUrlParameters = function (originalUrl,
ignoreUrlParametersMatching) {
var url = new URL(originalUrl);
// Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290
url.hash = '';
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 hashParamName = '_sw-precache';
var urlsToCacheKeys = new Map(
precacheConfig.map(function(item) {
var relativeUrl = item[0];
var hash = item[1];
var absoluteUrl = new URL(relativeUrl, self.location);
var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false);
return [absoluteUrl.toString(), cacheKey];
})
);
function setOfCachedUrls(cache) {
return cache.keys().then(function(requests) {
return requests.map(function(request) {
return request.url;
});
}).then(function(urls) {
return new Set(urls);
});
}
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(cacheName).then(function(cache) {
return setOfCachedUrls(cache).then(function(cachedUrls) {
return Promise.all(
Array.from(urlsToCacheKeys.values()).map(function(cacheKey) {
// If we don't have a key matching url in the cache already, add it.
if (!cachedUrls.has(cacheKey)) {
var request = new Request(cacheKey, {credentials: 'same-origin'});
return fetch(request).then(function(response) {
// Bail out of installation unless we get back a 200 OK for
// every request.
if (!response.ok) {
throw new Error('Request for ' + cacheKey + ' returned a ' +
'response with status ' + response.status);
}
return cleanResponse(response).then(function(responseToCache) {
return cache.put(cacheKey, responseToCache);
});
});
}
})
);
});
}).then(function() {
// Force the SW to transition from installing -> active state
return self.skipWaiting();
})
);
});
self.addEventListener('activate', function(event) {
var setOfExpectedUrls = new Set(urlsToCacheKeys.values());
event.waitUntil(
caches.open(cacheName).then(function(cache) {
return cache.keys().then(function(existingRequests) {
return Promise.all(
existingRequests.map(function(existingRequest) {
if (!setOfExpectedUrls.has(existingRequest.url)) {
return cache.delete(existingRequest);
}
})
);
});
}).then(function() {
return self.clients.claim();
})
);
});
self.addEventListener('fetch', function(event) {
if (event.request.method === 'GET') {
// Should we call event.respondWith() inside this fetch event handler?
// This needs to be determined synchronously, which will give other fetch
// handlers a chance to handle the request if need be.
var shouldRespond;
// First, remove all the ignored parameters and hash fragment, and see if we
// have that URL in our cache. If so, great! shouldRespond will be true.
var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching);
shouldRespond = urlsToCacheKeys.has(url);
// If shouldRespond is false, check again, this time with 'index.html'
// (or whatever the directoryIndex option is set to) at the end.
var directoryIndex = 'index.html';
if (!shouldRespond && directoryIndex) {
url = addDirectoryIndex(url, directoryIndex);
shouldRespond = urlsToCacheKeys.has(url);
}
// If shouldRespond is still false, check to see if this is a navigation
// request, and if so, whether the URL matches navigateFallbackWhitelist.
var navigateFallback = '';
if (!shouldRespond &&
navigateFallback &&
(event.request.mode === 'navigate') &&
isPathWhitelisted([], event.request.url)) {
url = new URL(navigateFallback, self.location).toString();
shouldRespond = urlsToCacheKeys.has(url);
}
// If shouldRespond was set to true at any point, then call
// event.respondWith(), using the appropriate cache key.
if (shouldRespond) {
event.respondWith(
caches.open(cacheName).then(function(cache) {
return cache.match(urlsToCacheKeys.get(url)).then(function(response) {
if (response) {
return response;
}
throw Error('The cached response that was expected is missing.');
});
}).catch(function(e) {
// Fall back to just fetch()ing the request if some unexpected error
// prevented the cached response from being valid.
console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e);
return fetch(event.request);
})
);
}
}
});
importScripts("/static/dist/sw/sw-toolbox.js","/static/dist/sw/sw-toolbox-config.js");
-12
View File
@@ -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);
// });
//}
-16
View File
@@ -1,16 +0,0 @@
/*
Copyright 2016 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 t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.toolbox=e()}}(function(){return function e(t,n,r){function o(c,s){if(!n[c]){if(!t[c]){var a="function"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var u=new Error("Cannot find module '"+c+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[c]={exports:{}};t[c][0].call(f.exports,function(e){var n=t[c][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[c].exports}for(var i="function"==typeof require&&require,c=0;c<r.length;c++)o(r[c]);return o}({1:[function(e,t,n){"use strict";function r(e,t){t=t||{};var n=t.debug||m.debug;n&&console.log("[sw-toolbox] "+e)}function o(e){var t;return e&&e.cache&&(t=e.cache.name),t=t||m.cache.name,caches.open(t)}function i(e,t){t=t||{};var n=t.successResponses||m.successResponses;return fetch(e.clone()).then(function(r){return"GET"===e.method&&n.test(r.status)&&o(t).then(function(n){n.put(e,r).then(function(){var r=t.cache||m.cache;(r.maxEntries||r.maxAgeSeconds)&&r.name&&c(e,n,r)})}),r.clone()})}function c(e,t,n){var r=s.bind(null,e,t,n);d=d?d.then(r):r()}function s(e,t,n){var o=e.url,i=n.maxAgeSeconds,c=n.maxEntries,s=n.name,a=Date.now();return r("Updating LRU order for "+o+". Max entries is "+c+", max age is "+i),g.getDb(s).then(function(e){return g.setTimestampForUrl(e,o,a)}).then(function(e){return g.expireEntries(e,c,i,a)}).then(function(e){r("Successfully updated IDB.");var n=e.map(function(e){return t.delete(e)});return Promise.all(n).then(function(){r("Done with cache cleanup.")})}).catch(function(e){r(e)})}function a(e,t,n){return r("Renaming cache: ["+e+"] to ["+t+"]",n),caches.delete(t).then(function(){return Promise.all([caches.open(e),caches.open(t)]).then(function(t){var n=t[0],r=t[1];return n.keys().then(function(e){return Promise.all(e.map(function(e){return n.match(e).then(function(t){return r.put(e,t)})}))}).then(function(){return caches.delete(e)})})})}function u(e,t){return o(t).then(function(t){return t.add(e)})}function f(e,t){return o(t).then(function(t){return t.delete(e)})}function h(e){e instanceof Promise||p(e),m.preCacheItems=m.preCacheItems.concat(e)}function p(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){"string"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError("The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.");return e}function l(e,t,n){if(!e)return!1;if(t){var r=e.headers.get("date");if(r){var o=new Date(r);if(o.getTime()+1e3*t<n)return!1}}return!0}var d,m=e("./options"),g=e("./idb-cache-expiration");t.exports={debug:r,fetchAndCache:i,openCache:o,renameCache:a,cache:u,uncache:f,precache:h,validatePrecacheInput:p,isResponseFresh:l}},{"./idb-cache-expiration":2,"./options":4}],2:[function(e,t,n){"use strict";function r(e){return new Promise(function(t,n){var r=indexedDB.open(u+e,f);r.onupgradeneeded=function(){var e=r.result.createObjectStore(h,{keyPath:p});e.createIndex(l,l,{unique:!1})},r.onsuccess=function(){t(r.result)},r.onerror=function(){n(r.error)}})}function o(e){return e in d||(d[e]=r(e)),d[e]}function i(e,t,n){return new Promise(function(r,o){var i=e.transaction(h,"readwrite"),c=i.objectStore(h);c.put({url:t,timestamp:n}),i.oncomplete=function(){r(e)},i.onabort=function(){o(i.error)}})}function c(e,t,n){return t?new Promise(function(r,o){var i=1e3*t,c=[],s=e.transaction(h,"readwrite"),a=s.objectStore(h),u=a.index(l);u.openCursor().onsuccess=function(e){var t=e.target.result;if(t&&n-i>t.value[l]){var r=t.value[p];c.push(r),a.delete(r),t.continue()}},s.oncomplete=function(){r(c)},s.onabort=o}):Promise.resolve([])}function s(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(h,"readwrite"),c=i.objectStore(h),s=c.index(l),a=s.count();s.count().onsuccess=function(){var e=a.result;e>t&&(s.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var i=r.value[p];o.push(i),c.delete(i),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}function a(e,t,n,r){return c(e,n,r).then(function(n){return s(e,t).then(function(e){return n.concat(e)})})}var u="sw-toolbox-",f=1,h="store",p="url",l="timestamp",d={};t.exports={getDb:o,setTimestampForUrl:i,expireEntries:a}},{}],3:[function(e,t,n){"use strict";function r(e){var t=a.match(e.request);t?e.respondWith(t(e.request)):a.default&&"GET"===e.request.method&&0===e.request.url.indexOf("http")&&e.respondWith(a.default(e.request))}function o(e){s.debug("activate event fired");var t=u.cache.name+"$$$inactive$$$";e.waitUntil(s.renameCache(t,u.cache.name))}function i(e){return e.reduce(function(e,t){return e.concat(t)},[])}function c(e){var t=u.cache.name+"$$$inactive$$$";s.debug("install event fired"),s.debug("creating cache ["+t+"]"),e.waitUntil(s.opeLine truncated
//# sourceMappingURL=sw-toolbox.js.map
-125
View File
@@ -1,125 +0,0 @@
'use strict';
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var del = require('del');
var runSequence = require('run-sequence').use(gulp);
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
var vendorSources = [
'node_modules/jquery/dist/jquery.min.js',
'node_modules/bootstrap-sass/assets/javascripts/bootstrap/collapse.js',
'node_modules/bootstrap-sass/assets/javascripts/bootstrap/dropdown.js',
'node_modules/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js',
'node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js',
'node_modules/bootstrap-datepicker/js/locales/bootstrap-datepicker.nb.js',
'node_modules/highcharts/highcharts.js',
'node_modules/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))
.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(['node_modules/bootstrap-sass/assets/fonts/**/*'])
.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(['node_modules/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);
});
-38
View File
@@ -1,38 +0,0 @@
{
"name": "bbs",
"description": "Biceps Bar System",
"version": "0.0.1",
"private": true,
"devDependencies": {
"browser-sync": "^2.10.0",
"del": "^3.0.0",
"glob": "^7.1.2",
"gulp": "^3.9.0",
"gulp-autoprefixer": "4.0.0",
"gulp-cache": "^0.4.6",
"gulp-concat": "^2.6.0",
"gulp-csso": "^3.0.0",
"gulp-filter": "^5.0.1",
"gulp-flatten": "0.3.1",
"gulp-if": "^2.0.0",
"gulp-imagemin": "^3.3.0",
"gulp-jshint": "^2.0.0",
"gulp-load-plugins": "^1.1.0",
"gulp-sass": "^3.1.0",
"gulp-size": "^2.0.0",
"gulp-uglify": "^3.0.0",
"gulp-uncss": "^1.0.4",
"jshint-stylish": "^2.1.0",
"run-sequence": "^2.2.0",
"sw-precache": "^5.2.0"
},
"dependencies": {
"bootstrap-datepicker": "^1.7.1",
"bootstrap-sass": "^3.3.7",
"highcharts": "^5.0.14",
"jquery": "^3.2.1",
"jshint": "^2.9.5",
"sw-toolbox": "^3.6.0",
"underscore": "^1.8.3"
}
}
-5000
View File
File diff suppressed because it is too large. Load diff
+10 -38
View File
@@ -22,31 +22,17 @@
</button> </button>
<a class="navbar-brand" href="/">Biceps Bar System - BBS</a> <a class="navbar-brand" href="/">Biceps Bar System - BBS</a>
</div> </div>
<ul class="nav navbar-nav">
<!-- Collect the nav links, forms, and other content for toggling --> <li><a href="/"><i class="glyphicon glyphicon-home white"></i> Til fremtiden</a></li>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> {% if user.is_authenticated %}
<ul class="nav navbar-nav"> <li class="{% block active_inventory %}{% endblock %}"><a href="{% url 'inventory' %}"><i class="glyphicon glyphicon-briefcase"></i> Varebeholdning</a></li>
<li><a href="/"><i class="glyphicon glyphicon-home white"></i> Til fremtiden</a></li> <li class="{% block active_report %}{% endblock %}"><a href="{% url 'report' %}"><i class="glyphicon glyphicon-briefcase"></i> Rapport</a></li>
</ul> <li><a href="/admin"><i class="glyphicon glyphicon-cog"></i> Administrasjon</a></li>
<ul class="nav navbar-nav navbar-right"> <li><a href="{% url 'django.contrib.auth.views.logout' %}">Logg ut</a></li>
{% if not user.is_authenticated %} {% else %}
<li><a href="{% url 'django.contrib.auth.views.login' %}">Logg inn</a></li> <li><a href="{% url 'django.contrib.auth.views.login' %}">Logg inn</a></li>
{% else %} {% endif %}
<li class="dropdown"> </ul>
<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 'django.contrib.auth.views.logout' %}"><i class="glyphicon glyphicon-log-out"></i> Logg ut</a></li>
</ul>
</li>
{% endif %}
</ul>
</div><!-- /.navbar-collapse -->
</nav> </nav>
{% endblock %} {% endblock %}
</header> </header>
@@ -64,20 +50,6 @@
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript" src="{% static "dist/js/app.min.js" %}"></script>
<script>
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js', { scope: '/' })
.then(function(registration) {
console.log("Service Worker Registered");
});
navigator.serviceWorker.ready.then(function(registration) {
console.log("Service Worker Ready");
});
}
</script>
{% block tailinc %}{% endblock %} {% block tailinc %}{% endblock %}
</body> </body>
</html> </html>
-7
View File
@@ -6,13 +6,6 @@
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
<h2>Varebeholdning</h2> <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"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
+1 -1
View File
@@ -25,7 +25,7 @@
{{ form }} {{ form }}
<input type="submit" value="Legg til" class="btn btn-primary btn-lg" /> <input type="submit" value="Legg til" class="btn btn-primary btn-lg" />
<a href="{% url 'inventory' %}" class="btn btn-default" />Tilbake</a> <a href="{% url 'inventory' %}" class="btn btn-default">Tilbake</a>
</form> </form>
</div> </div>
</section> </section>
-30
View File
@@ -1,30 +0,0 @@
<div id="modal-order-{{order.id}}" class="modal" style="display: none;">
<div class="modal-header">
<a href="#" class="close" data-dismiss="modal">×</a>
<h3>Er du sikker?</h3>
</div>
<div class="modal-body">
<p>
Orderen til <strong>{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}</strong> fra {{ order.created }} vil bli <em>slettet</em>.</p>
<p>
Orderen inneholdt:
<ul>
{% for line in order.orderlines.all %}
<li>
<span class="bold">{{ line.amount}}</span>
<a href="#" class="product" title="{{ line.unit_price}} per">{{ line.product }}</a>
</li>
{% endfor %}
</ul>
Totalt: {{ order.order_sum }},-
</p>
<p>
<strong>{{ order.customer.first_name }} {{ order.customer.last_name|slice:":1"}}</strong> sin saldo vil bli kreditert {{ order.order_sum }} kr.
</p>
<p>Vil du fortsette?</p>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Nei</a>
<a href="#" class="btn btn-danger"><i class="icon-trash icon-white"></i> Ja</a>
</div>
</div>
-18
View File
@@ -1,18 +0,0 @@
<div id="modal-trans-{{t.id}}" class="modal" style="display: none;">
<div class="modal-header">
<a href="#" class="close" data-dismiss="modal">×</a>
<h3>Er du sikker?</h3>
</div>
<div class="modal-body">
<p>
Inskuddet til <strong>{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}</strong> på <strong>{{ t.amount }}</strong> fra {{ t.created }} vil bli <em>slettet</em>.</p>
<p>
<strong>{{ t.user.first_name }} {{ t.user.last_name|slice:":1"}}</strong> sin saldo vil debiteres med {{ t.amount }} kr.
</p>
<p>Vil du fortsette?</p>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Nei</a>
<a href="#" class="btn btn-danger"><i class="icon-trash icon-white"></i> Ja</a>
</div>
</div>
-39
View File
@@ -1,39 +0,0 @@
{% extends "base.html" %}
{% block title %}Lag ny bruker {% endblock %}
{% block active_create_user %}active{% endblock %}
{% block content %}
{% if perms.auth.can_add_user %}
<section class="row">
<div class="col-md-4">
{% for message in messages %}
<div {% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}<a class="close" data-dismiss="alert">×</a></div>
{% endfor %}
</div>
</section>
<section class="row">
<div class="col-md-5">
<h1>Legg til ny bruker</h1>
{% if form.non_field_errors %}
<p>{{ form.non_field_errors}}.</p>
{% endif %}
<form method="post" role="form">
{% csrf_token %}
<div class="form-group">
<label for="id_first_name">{{ form.first_name.label }}</label>{{ form.first_name}}{{ form.first_name.errors }}
<label for="id_last_name">{{ form.last_name.label }}</label>{{ form.last_name}}{{ form.last_name.errors }}
</div>
<div class="form-group">
<label for="id_email">{{ form.email.label }}</label>{{ form.email}}{{ form.email.errors }}
</div>
<input type="submit" value="Legg til" class="btn btn-primary btn-lg" />
<a href="{% url 'home' %}" class="btn btn-default">Tilbake</a>
</form>
</div>
</section>
{% endif %}
{% endblock %}
-9
View File
@@ -1,9 +0,0 @@
{% extends "base.html" %}
{% block title %}Logg inn{% endblock %}
{% block content %}
{% include "registration/login_form.html" %}
{% endblock %}
{% block footer %}{% endblock %}
-15
View File
@@ -1,15 +0,0 @@
<div class="form-login">
{% if form.errors %}
<p class="alert alert-danger">Brukernavn og passord stemmer ikke overens. Prøv igjen.</p>
{% endif %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}" class="">
{% csrf_token %}
<label for="id_username">Brukernavn:</label>
{{ form.username }}
<label for="id_password">Passord: </label>
{{ form.password }}<br/>
<input type="submit" value="Logg inn" class="btn btn-primary btn-lg"/>
<input type="hidden" name="next" value="{{ next }}" />
</form>
</div>
-12
View File
@@ -1,12 +0,0 @@
{% extends "base.html" %}
{% block title %}Logg inn{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-6">
<p class="alert alert-success">Du er logget ut.</p>
<p>Vil du <a href="{% url 'home' %}">logge inn igjen?</a></p>
</div>
</div>
{% endblock %}